diff options
author | Stefano Karapetsas <[email protected]> | 2013-05-31 16:22:39 +0200 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2013-05-31 16:22:39 +0200 |
commit | a87157176ca6e01c8c4047999ee584f00b63c11e (patch) | |
tree | 80e928a800b4b54f6831a6b38a952014c7f5ae5c /src/core/core.c | |
parent | cc760e2586cd0f98f8c60382ab8ff1f7373d9c1d (diff) | |
download | marco-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.c | 30 |
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) |