summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2020-03-12 20:55:45 (GMT)
committerfvogel <fvogelnew1@free.fr>2020-03-12 20:55:45 (GMT)
commitb36fe5790a29cf78c58ab273cce93ab0604076ba (patch)
treee48fb16f01ff1bf29a7e6005b8c8de81b7d848ef
parent56bac29b07ed375d5e8340d16a3aeaf765c7cd76 (diff)
parent3225b5d516ebdfe6473130f7ac71465a70a9fcd9 (diff)
downloadtk-b36fe5790a29cf78c58ab273cce93ab0604076ba.zip
tk-b36fe5790a29cf78c58ab273cce93ab0604076ba.tar.gz
tk-b36fe5790a29cf78c58ab273cce93ab0604076ba.tar.bz2
Fix [08e2f8e6f0]: unable to change focus after prior selection of focus
-rw-r--r--generic/tkFocus.c2
-rw-r--r--tests/focus.test20
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