summaryrefslogtreecommitdiff
path: root/src/core/display.c
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-03-24 13:53:52 -0400
committerVictor Kareh <[email protected]>2026-03-24 13:53:52 -0400
commit1426be28971e8e05a082b5431f804b863a317a3e (patch)
tree882969ffc1bb72d51b250b6ea8136673785f6192 /src/core/display.c
parent4974ffb4b16bed4bd8e98fd52484cb2a2cfb095e (diff)
downloadmarco-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.c18
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;