diff options
-rw-r--r-- | generic/tkFocus.c | 2 | ||||
-rw-r--r-- | tests/focus.test | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/generic/tkFocus.c b/generic/tkFocus.c index 40ef139..8066afd 100644 --- a/generic/tkFocus.c +++ b/generic/tkFocus.c @@ -603,7 +603,7 @@ TkSetFocusWin( if (displayFocusPtr->focusOnMapPtr != NULL) { Tk_DeleteEventHandler((Tk_Window) displayFocusPtr->focusOnMapPtr, - StructureNotifyMask, FocusMapProc, + VisibilityChangeMask, FocusMapProc, displayFocusPtr->focusOnMapPtr); displayFocusPtr->focusOnMapPtr = NULL; } diff --git a/tests/focus.test b/tests/focus.test index 1770427..7da289d 100644 --- a/tests/focus.test +++ b/tests/focus.test @@ -730,6 +730,26 @@ test focus-6.2 {miscellaneous - embedded application in different process} -cons bind all <FocusOut> {} } -result {{.t.f2.e1 {} {focus out .t.f2.e1 NotifyNonlinear} {focus out .t.f2 NotifyNonlinearVirtual} {focus in .t.f1 NotifyNonlinear} | {focus out .t.f1 NotifyNonlinear} {focus in .t.f2 NotifyNonlinearVirtual} {focus in .t.f2.e1 NotifyNonlinear}} {{focus in . NotifyVirtual} {focus in .e1 NotifyAncestor} | {focus out .e1 NotifyAncestor} {focus out . NotifyVirtual}}} +test focus-7.1 {TkSetFocusWin procedure, unmapped windows} -setup { + # TkSetFocusWin handles the case of not yet mapped windows + # by not setting the focus on them right at the time it is + # requested, but by scheduling an event handler that will + # set the focus later once it gets mapped. The purpose of + # this test is to check that event scheduling and deletion + # work as expected (bug [08e2f8e6f0]). + toplevel .top + spinbox .top.s1 + spinbox .top.s2 + spinbox .top.s3 + grid .top.s1 .top.s2 .top.s3 +} -body { + focus -force .top.s2 + focus -force .top.s3 + update + focus +} -cleanup { + destroy .top +} -result {.top.s3} deleteWindows |