summaryrefslogtreecommitdiff
path: root/src/core/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/core.c')
-rw-r--r--src/core/core.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/core/core.c b/src/core/core.c
index 76e5548b..c8fa02b7 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -28,6 +28,7 @@
#include "frame-private.h"
#include "workspace.h"
#include "prefs.h"
+#include "errors.h"
/* Looks up the MetaWindow representing the frame of the given X window.
* Used as a helper function by a bunch of the functions below.
@@ -297,6 +298,35 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
}
void
+meta_core_lower_beneath_focus_window (Display *xdisplay,
+ Window xwindow,
+ guint32 timestamp)
+{
+ XWindowChanges changes;
+ MetaDisplay *display;
+ MetaScreen *screen;
+ MetaWindow *focus_window;
+
+ display = meta_display_for_x_display (xdisplay);
+ screen = meta_display_screen_for_xwindow (display, xwindow);
+ focus_window = meta_stack_get_top (screen->stack);
+
+ if (focus_window == NULL)
+ return;
+
+ changes.stack_mode = Below;
+ changes.sibling = focus_window->frame ? focus_window->frame->xwindow
+ : focus_window->xwindow;
+
+ meta_error_trap_push (display);
+ XConfigureWindow (xdisplay,
+ xwindow,
+ CWSibling | CWStackMode,
+ &changes);
+ meta_error_trap_pop (display, FALSE);
+}
+
+void
meta_core_user_focus (Display *xdisplay,
Window frame_xwindow,
guint32 timestamp)