diff options
| author | Victor Kareh <[email protected]> | 2026-03-24 13:53:52 -0400 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-03-24 13:53:52 -0400 |
| commit | 1426be28971e8e05a082b5431f804b863a317a3e (patch) | |
| tree | 882969ffc1bb72d51b250b6ea8136673785f6192 /src/core/display.c | |
| parent | 4974ffb4b16bed4bd8e98fd52484cb2a2cfb095e (diff) | |
| download | marco-double-tile-resize.tar.bz2 marco-double-tile-resize.tar.xz | |
window: Resize adjacent tiled windows when dragging shared edgedouble-tile-resize
When two windows are tiled side-by-side or in complementary quarter-tile
positions, dragging the shared inside edge now resizes both windows
simultaneously.
Fixes #615
Diffstat (limited to 'src/core/display.c')
| -rw-r--r-- | src/core/display.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/display.c b/src/core/display.c index ac63a3c6..4d1d9b7b 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -3666,6 +3666,22 @@ meta_display_begin_grab_op (MetaDisplay *display, display->grab_tile_mode = META_TILE_NONE; display->grab_tile_monitor_number = -1; } + + /* Find whether there's a tiled window that matches the one we're resizing. */ + display->grab_tile_match = NULL; + if (window && meta_grab_op_is_resizing (op) && META_WINDOW_TILED (window)) + { + int gravity = meta_resize_gravity_from_grab_op (op); + + if ((window->tile_mode == META_TILE_LEFT && gravity == WestGravity) || + (window->tile_mode == META_TILE_RIGHT && gravity == EastGravity) || + (window->tile_mode == META_TILE_TOP_LEFT && (gravity == WestGravity || gravity == NorthWestGravity)) || + (window->tile_mode == META_TILE_TOP_RIGHT && (gravity == EastGravity || gravity == NorthEastGravity)) || + (window->tile_mode == META_TILE_BOTTOM_LEFT && (gravity == WestGravity || gravity == SouthWestGravity)) || + (window->tile_mode == META_TILE_BOTTOM_RIGHT && (gravity == EastGravity || gravity == SouthEastGravity))) + display->grab_tile_match = meta_window_find_tile_match (window); + } + display->grab_anchor_root_x = root_x; display->grab_anchor_root_y = root_y; display->grab_latest_motion_x = root_x; @@ -3846,6 +3862,8 @@ meta_display_end_grab_op (MetaDisplay *display, if (display->grab_op == META_GRAB_OP_NONE) return; + display->grab_tile_match = NULL; + if (display->grab_window != NULL) display->grab_window->shaken_loose = FALSE; |
