diff options
author | patthoyts <patthoyts@users.sourceforge.net> | 2009-12-08 21:48:24 (GMT) |
---|---|---|
committer | patthoyts <patthoyts@users.sourceforge.net> | 2009-12-08 21:48:24 (GMT) |
commit | e545052fdbc990efe71a596ad9a39d3ff655141b (patch) | |
tree | 10757db7f3dea093d9f344fc31c572a283e99e96 /unix/tkUnixWm.c | |
parent | ed9cba261d753fabd85836e5aaf6e6bf15e6d9bc (diff) | |
download | tk-e545052fdbc990efe71a596ad9a39d3ff655141b.zip tk-e545052fdbc990efe71a596ad9a39d3ff655141b.tar.gz tk-e545052fdbc990efe71a596ad9a39d3ff655141b.tar.bz2 |
[Bug 2864685] backported extended window manager hinting from HEAD
Diffstat (limited to 'unix/tkUnixWm.c')
-rw-r--r-- | unix/tkUnixWm.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c index a7038c6..9a5467a 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.4 2009/11/24 15:18:17 dkf Exp $ + * RCS: @(#) $Id: tkUnixWm.c,v 1.58.2.5 2009/12/08 21:48:24 patthoyts Exp $ */ #include "tkUnixInt.h" @@ -6605,6 +6605,30 @@ GetMaxSize( /* *---------------------------------------------------------------------- * + * TkSetTransientFor -- + * + * Set a Tk window to be transient with reference to a specified + * parent or the toplevel ancestor if None is passed as parent. + * + *---------------------------------------------------------------------- + */ + +void +TkSetTransientFor(Tk_Window tkwin, Tk_Window parent) +{ + if (parent == None) { + parent = Tk_Parent(tkwin); + while (!Tk_IsTopLevel(parent)) + parent = Tk_Parent(tkwin); + } + XSetTransientForHint(Tk_Display(tkwin), + ((TkWindow *)tkwin)->wmInfoPtr->wrapperPtr->window, + ((TkWindow *)parent)->wmInfoPtr->wrapperPtr->window); +} + +/* + *---------------------------------------------------------------------- + * * TkpMakeMenuWindow -- * * Configure the window to be either a pull-down (or pop-up) menu, or as @@ -6631,6 +6655,7 @@ TkpMakeMenuWindow( WmInfo *wmPtr; XSetWindowAttributes atts; TkWindow *wrapperPtr; + Atom atom; if (!Tk_HasWrapper(tkwin)) { return; @@ -6643,10 +6668,17 @@ TkpMakeMenuWindow( if (transient) { atts.override_redirect = True; atts.save_under = True; + atom = Tk_InternAtom((Tk_Window) tkwin, "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"); } else { atts.override_redirect = False; atts.save_under = False; + atom = Tk_InternAtom((Tk_Window) tkwin, "_NET_WM_WINDOW_TYPE_MENU"); + TkSetTransientFor(tkwin, NULL); } + XChangeProperty(Tk_Display(tkwin), wrapperPtr->window, + Tk_InternAtom((Tk_Window) tkwin, "_NET_WM_WINDOW_TYPE"), + XA_ATOM, 32, PropModeReplace, + (unsigned char *) &atom, 1); /* * The override-redirect and save-under bits must be set on the wrapper |