From d58378affeca329ed602a908c71c907d28e26073 Mon Sep 17 00:00:00 2001 From: "donal.k.fellows@manchester.ac.uk" Date: Wed, 7 Nov 2012 14:22:06 +0000 Subject: [Bug 3574708]: Move window liveness checks to better location. --- ChangeLog | 7 +++++++ generic/tkFocus.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 68dd29a..e39ebd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-11-07 Donal K. Fellows + + * generic/tkFocus.c (TkSetFocusWin): [Bug 3574708]: Move window + liveness into this function from caller sites to ensure that there are + no paths where things can trip up on setting the focus to a partially + dead window. + 2012-10-24 Don Porter * macosx/tkMacOSXWm.c: [Bug 3574893] Add overlooked toplevel ref diff --git a/generic/tkFocus.c b/generic/tkFocus.c index 4814c17..85093ee 100644 --- a/generic/tkFocus.c +++ b/generic/tkFocus.c @@ -160,9 +160,7 @@ Tk_FocusObjCmd( if (newPtr == NULL) { return TCL_ERROR; } - if (!(newPtr->flags & TK_ALREADY_DEAD)) { - TkSetFocusWin(newPtr, 0); - } + TkSetFocusWin(newPtr, 0); return TCL_OK; } } @@ -552,6 +550,14 @@ TkSetFocusWin( TkWindow *topLevelPtr; int allMapped, serial; + /* + * Don't set focus if window is already dead. [Bug 3574708] + */ + + if (winPtr->flags & TK_ALREADY_DEAD) { + return; + } + displayFocusPtr = FindDisplayFocusInfo(winPtr->mainPtr, winPtr->dispPtr); /* -- cgit v0.12