From df9501bba1307cd8d762718fdb94dcf66309c717 Mon Sep 17 00:00:00 2001 From: dkf Date: Wed, 6 Jan 2010 09:30:21 +0000 Subject: [Bug 1163496]: Allow windows to be set to be transients for withdrawn masters correctly. --- ChangeLog | 8 +++++++- tests/wm.test | 19 ++++++++++++++++++- unix/tkUnixWm.c | 14 +++++++++----- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index f2096af..abd9714 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ +2010-01-06 Donal K. Fellows + + * unix/tkUnixWm.c (TkWmMapWindow): [Bug 1163496]: Allow windows to be + * tests/wm.test (wm-transient-8.1): set to be transients for withdrawn + masters correctly. + 2010-01-05 Pat Thoyts - * win/tkWinDialog.c: [Patch 2898255] Enable unlimited multiple + * win/tkWinDialog.c: [Patch 2898255]: Enable unlimited multiple file selection from the open files dialog (pawlak,fellows,thoyts) 2010-01-05 Donal K. Fellows diff --git a/tests/wm.test b/tests/wm.test index e6905ec..05e0f65 100644 --- a/tests/wm.test +++ b/tests/wm.test @@ -7,7 +7,7 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # -# RCS: @(#) $Id: wm.test,v 1.39.2.2 2008/11/15 00:37:30 patthoyts Exp $ +# RCS: @(#) $Id: wm.test,v 1.39.2.3 2010/01/06 09:30:21 dkf Exp $ # This file tests window manager interactions that work across platforms. # Window manager tests that only work on a specific platform should be placed @@ -1893,6 +1893,23 @@ test wm-transient-7.5 {Reassign transient, destroy transient} -body { deleteWindows } +test wm-transient-8.1 {transient to withdrawn window, Bug 1163496} -setup { + deleteWindows + set result {} +} -body { + # Verifies that transients stay on top of their masters, even if they were + # made transients when those masters were withdrawn. + toplevel .t1; wm withdraw .t1; update + toplevel .t2; wm transient .t2 .t1; update + lappend result [winfo ismapped .t1] [winfo ismapped .t2] + wm deiconify .t1; update + lappend result [winfo ismapped .t1] [winfo ismapped .t2] + raise .t1; update + lappend result [lsearch -all -inline -glob [wm stackorder .] ".t?"] +} -cleanup { + deleteWindows +} -result {0 0 1 1 {.t1 .t2}} + ### wm state ### test wm-state-1.1 {usage} -returnCodes error -body { diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c index 9a5467a..680d4f2 100644 --- a/unix/tkUnixWm.c +++ b/unix/tkUnixWm.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUnixWm.c,v 1.58.2.5 2009/12/08 21:48:24 patthoyts Exp $ + * RCS: @(#) $Id: tkUnixWm.c,v 1.58.2.6 2010/01/06 09:30:21 dkf Exp $ */ #include "tkUnixInt.h" @@ -675,11 +675,15 @@ TkWmMapWindow( if (!Tk_IsMapped(wmPtr->masterPtr)) { wmPtr->withdrawn = 1; wmPtr->hints.initial_state = WithdrawnState; - } else { - XSetTransientForHint(winPtr->display, - wmPtr->wrapperPtr->window, - wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window); } + + /* + * Make sure that we actually set the transient-for property, even + * if we are withdrawn. [Bug 1163496] + */ + + XSetTransientForHint(winPtr->display, wmPtr->wrapperPtr->window, + wmPtr->masterPtr->wmInfoPtr->wrapperPtr->window); } wmPtr->flags |= WM_UPDATE_SIZE_HINTS; -- cgit v0.12