summaryrefslogtreecommitdiff
path: root/src/core/core.c
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2013-05-31 16:22:39 +0200
committerStefano Karapetsas <[email protected]>2013-05-31 16:22:39 +0200
commita87157176ca6e01c8c4047999ee584f00b63c11e (patch)
tree80e928a800b4b54f6831a6b38a952014c7f5ae5c /src/core/core.c
parentcc760e2586cd0f98f8c60382ab8ff1f7373d9c1d (diff)
downloadmarco-a87157176ca6e01c8c4047999ee584f00b63c11e.tar.bz2
marco-a87157176ca6e01c8c4047999ee584f00b63c11e.tar.xz
Implement side-by-side tiling
Patch by Florian Müllner for Metacity https://bugzilla.gnome.org/show_bug.cgi?id=607694 When dragging a window over a screen edge and dropping it there, maximize it vertically and scale it horizontally to cover the corresponding half of the current monitor. Whenever a "hot area" which triggers this behavior is entered, an indication of window's target size is displayed after a short delay to avoid distraction when moving a window between monitors.
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)