summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2003-08-10 23:37:37 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2003-08-10 23:37:37 +0000
commit424433f1a4f2902d36934137a52cb9491768b53d (patch)
treeb6d154f54271b14aee56e43d1bf457245a54e0a1 /gdk
parent19d81dab2b28924d711c32fd951dfccd25041429 (diff)
downloadgdk-pixbuf-424433f1a4f2902d36934137a52cb9491768b53d.tar.gz
Add support for EWMH "Above" and "Below" window states. (105100, Manuel Clos)
Diffstat (limited to 'gdk')
-rw-r--r--gdk/gdk.def2
-rw-r--r--gdk/gdkevents.h4
-rw-r--r--gdk/gdkwindow.h4
-rw-r--r--gdk/x11/gdkwindow-x11.c71
4 files changed, 80 insertions, 1 deletions
diff --git a/gdk/gdk.def b/gdk/gdk.def
index 01901f788..280da60ba 100644
--- a/gdk/gdk.def
+++ b/gdk/gdk.def
@@ -521,6 +521,8 @@ EXPORTS
gdk_window_set_icon
gdk_window_set_icon_list
gdk_window_set_icon_name
+ gdk_window_set_keep_above
+ gdk_window_set_keep_below
gdk_window_set_modal_hint
gdk_window_set_override_redirect
gdk_window_set_role
diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h
index c4dbf51c6..e7cafb913 100644
--- a/gdk/gdkevents.h
+++ b/gdk/gdkevents.h
@@ -207,7 +207,9 @@ typedef enum
GDK_WINDOW_STATE_ICONIFIED = 1 << 1,
GDK_WINDOW_STATE_MAXIMIZED = 1 << 2,
GDK_WINDOW_STATE_STICKY = 1 << 3,
- GDK_WINDOW_STATE_FULLSCREEN = 1 << 4
+ GDK_WINDOW_STATE_FULLSCREEN = 1 << 4,
+ GDK_WINDOW_STATE_ABOVE = 1 << 5,
+ GDK_WINDOW_STATE_BELOW = 1 << 6
} GdkWindowState;
typedef enum
diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
index f8f944b44..0c60f21d2 100644
--- a/gdk/gdkwindow.h
+++ b/gdk/gdkwindow.h
@@ -502,6 +502,10 @@ void gdk_window_maximize (GdkWindow *window);
void gdk_window_unmaximize (GdkWindow *window);
void gdk_window_fullscreen (GdkWindow *window);
void gdk_window_unfullscreen (GdkWindow *window);
+void gdk_window_set_keep_above (GdkWindow *window,
+ gboolean setting);
+void gdk_window_set_keep_below (GdkWindow *window,
+ gboolean setting);
void gdk_window_register_dnd (GdkWindow *window);
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index bf098e1e1..ce7804b3a 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -3792,6 +3792,77 @@ gdk_window_unfullscreen (GdkWindow *window)
0);
}
+/**
+ * gdk_window_set_keep_above:
+ * @window: a toplevel #GdkWindow
+ * @setting: whether to keep @window above other windows
+ *
+ * Set if @window must be kept above other windows. If the
+ * window was already above, then this function does nothing.
+ *
+ * On X11, asks the window manager to keep @window above, if the window
+ * manager supports this operation. Not all window managers support
+ * this, and some deliberately ignore it or don't have a concept of
+ * "keep above"; so you can't rely on the window being kept above.
+ * But it will happen with most standard window managers,
+ * and GDK makes a best effort to get it to happen.
+ *
+ * Since: 2.4
+ **/
+void
+gdk_window_set_keep_above (GdkWindow *window, gboolean setting)
+{
+ g_return_if_fail (GDK_IS_WINDOW (window));
+
+ if (GDK_WINDOW_DESTROYED (window))
+ return;
+
+ if (GDK_WINDOW_IS_MAPPED (window))
+ gdk_wmspec_change_state (setting, window,
+ gdk_atom_intern ("_NET_WM_STATE_ABOVE", setting),
+ setting ? gdk_atom_intern ("_NET_WM_STATE_BELOW", FALSE)
+ : GDK_NONE);
+ else
+ gdk_synthesize_window_state (window,
+ setting ? GDK_WINDOW_STATE_BELOW : GDK_WINDOW_STATE_ABOVE,
+ setting ? GDK_WINDOW_STATE_ABOVE : 0);
+}
+
+/**
+ * gdk_window_set_keep_below:
+ * @window: a toplevel #GdkWindow
+ * @setting: whether to keep @window below other windows
+ *
+ * Set if @window must be kept below other windows. If the
+ * window was already below, then this function does nothing.
+ *
+ * On X11, asks the window manager to keep @window below, if the window
+ * manager supports this operation. Not all window managers support
+ * this, and some deliberately ignore it or don't have a concept of
+ * "keep below"; so you can't rely on the window being kept below.
+ * But it will happen with most standard window managers,
+ * and GDK makes a best effort to get it to happen.
+ *
+ * Since: 2.4
+ **/
+void
+gdk_window_set_keep_below (GdkWindow *window, gboolean setting)
+{
+ g_return_if_fail (GDK_IS_WINDOW (window));
+
+ if (GDK_WINDOW_DESTROYED (window))
+ return;
+
+ if (GDK_WINDOW_IS_MAPPED (window))
+ gdk_wmspec_change_state (setting, window,
+ gdk_atom_intern ("_NET_WM_STATE_BELOW", setting),
+ setting ? gdk_atom_intern ("_NET_WM_STATE_ABOVE", FALSE)
+ : GDK_NONE);
+ else
+ gdk_synthesize_window_state (window,
+ setting ? GDK_WINDOW_STATE_ABOVE : GDK_WINDOW_STATE_BELOW,
+ setting ? GDK_WINDOW_STATE_BELOW : 0);
+}
/**
* gdk_window_set_group: