diff options
author | griffin <briang42@easystreet.net> | 2021-10-22 03:38:05 (GMT) |
---|---|---|
committer | griffin <briang42@easystreet.net> | 2021-10-22 03:38:05 (GMT) |
commit | 16104b531487870a3fdc8fe6888ad1daf34f348b (patch) | |
tree | 26056353c0a69d575cc389a8600db58c483f854c /generic | |
parent | 89f6d4e6f23c746d09db1ca9864d570304491055 (diff) | |
parent | 4bc57ff33a4272f6b3f1030d6abd33d149aa6e02 (diff) | |
download | tk-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.c | 22 | ||||
-rw-r--r-- | generic/tkUtil.c | 1 |
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); } |