diff options
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdk.def | 2 | ||||
-rw-r--r-- | gdk/gdkevents.h | 4 | ||||
-rw-r--r-- | gdk/gdkwindow.h | 4 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 71 |
4 files changed, 80 insertions, 1 deletions
diff --git a/gdk/gdk.def b/gdk/gdk.def index 01901f788d..280da60ba1 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 c4dbf51c60..e7cafb9130 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 f8f944b44a..0c60f21d2a 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 bf098e1e15..ce7804b3af 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: |