summaryrefslogtreecommitdiffstats
path: root/unix/tkUnixWm.c
diff options
context:
space:
mode:
authorpatthoyts <patthoyts@users.sourceforge.net>2009-12-08 21:48:24 (GMT)
committerpatthoyts <patthoyts@users.sourceforge.net>2009-12-08 21:48:24 (GMT)
commite545052fdbc990efe71a596ad9a39d3ff655141b (patch)
tree10757db7f3dea093d9f344fc31c572a283e99e96 /unix/tkUnixWm.c
parented9cba261d753fabd85836e5aaf6e6bf15e6d9bc (diff)
downloadtk-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.c34
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