summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorgriffin <briang42@easystreet.net>2021-10-22 03:38:05 (GMT)
committergriffin <briang42@easystreet.net>2021-10-22 03:38:05 (GMT)
commit16104b531487870a3fdc8fe6888ad1daf34f348b (patch)
tree26056353c0a69d575cc389a8600db58c483f854c /generic
parent89f6d4e6f23c746d09db1ca9864d570304491055 (diff)
parent4bc57ff33a4272f6b3f1030d6abd33d149aa6e02 (diff)
downloadtk-16104b531487870a3fdc8fe6888ad1daf34f348b.zip
tk-16104b531487870a3fdc8fe6888ad1daf34f348b.tar.gz
tk-16104b531487870a3fdc8fe6888ad1daf34f348b.tar.bz2
TIP 608 implementation - Add <<TkWorldChanged>> virtual event
Diffstat (limited to 'generic')
-rw-r--r--generic/tkFont.c22
-rw-r--r--generic/tkUtil.c1
2 files changed, 16 insertions, 7 deletions
diff --git a/generic/tkFont.c b/generic/tkFont.c
index 9c157db..726995b 100644
--- a/generic/tkFont.c
+++ b/generic/tkFont.c
@@ -897,7 +897,8 @@ RecomputeWidgets(
{
Tk_ClassWorldChangedProc *proc =
Tk_GetClassProc(winPtr->classProcsPtr, worldChangedProc);
-
+ TkWindow *tkwinPtr;
+
if (proc != NULL) {
proc(winPtr->instanceData);
}
@@ -912,18 +913,25 @@ RecomputeWidgets(
*
* However, the additional overhead of the recursive calls may become a
* performance problem if typical usage alters such that -font'ed widgets
- * appear high in the heirarchy, causing deep recursion. This could happen
- * with text widgets, or more likely with the (not yet existant) labeled
- * frame widget. With these widgets it is possible, even likely, that a
- * -font'ed widget (text or labeled frame) will not be a leaf node, but
+ * appear high in the hierarchy, causing deep recursion. This could happen
+ * with text widgets, or more likely with the labelframe
+ * widget. With these widgets it is possible, even likely, that a
+ * -font'ed widget (text or labelframe) will not be a leaf node, but
* will instead have many descendants. If this is ever found to cause a
* performance problem, it may be worth investigating an iterative version
* of the code below.
*/
- for (winPtr=winPtr->childList ; winPtr!=NULL ; winPtr=winPtr->nextPtr) {
- RecomputeWidgets(winPtr);
+ for (tkwinPtr=winPtr->childList ; tkwinPtr!=NULL ; tkwinPtr=tkwinPtr->nextPtr) {
+ RecomputeWidgets(tkwinPtr);
}
+
+ /*
+ * Broadcast font change virtually for mega-widget layout managers.
+ * Do this after the font change has been propagated to core widgets.
+ */
+ TkSendVirtualEvent((Tk_Window)winPtr, "TkWorldChanged",
+ Tcl_NewStringObj("FontChanged",-1));
}
/*
diff --git a/generic/tkUtil.c b/generic/tkUtil.c
index 375bb83..3cc8dbf 100644
--- a/generic/tkUtil.c
+++ b/generic/tkUtil.c
@@ -1186,6 +1186,7 @@ TkSendVirtualEvent(
event.general.xany.display = Tk_Display(target);
event.virt.name = Tk_GetUid(eventName);
event.virt.user_data = detail;
+ if (detail) Tcl_IncrRefCount(detail); // Event code will DecrRefCount
Tk_QueueWindowEvent(&event.general, TCL_QUEUE_TAIL);
}