SnapToRegion: Snap when ending a move while pressing a modifier

This commit is contained in:
Consolatis 2022-07-06 17:05:34 +02:00
parent 7e99d8ba08
commit 25cea94a32

View file

@ -45,7 +45,7 @@ interactive_begin(struct view *view, enum input_mode mode, uint32_t edges)
*/ */
return; return;
} }
if (view->maximized || view->tiled) { if (view->maximized || view->tiled || view->tiled_region) {
/* /*
* Un-maximize and restore natural width/height. * Un-maximize and restore natural width/height.
* Don't reset tiled state yet since we may want * Don't reset tiled state yet since we may want
@ -137,6 +137,27 @@ snap_to_edge(struct view *view)
return true; return true;
} }
static bool
snap_to_region(struct view *view)
{
if (!regions_available()) {
return false;
}
struct wlr_keyboard *keyboard =
&view->server->seat.keyboard_group->keyboard;
if (keyboard_any_modifiers_pressed(keyboard)) {
struct region *region = regions_from_cursor(view->server);
if (region) {
view_snap_to_region(view, region,
/*store_natural_geometry*/ false);
return true;
}
}
return false;
}
void void
interactive_finish(struct view *view) interactive_finish(struct view *view)
{ {
@ -146,9 +167,11 @@ interactive_finish(struct view *view)
view->server->input_mode = LAB_INPUT_STATE_PASSTHROUGH; view->server->input_mode = LAB_INPUT_STATE_PASSTHROUGH;
view->server->grabbed_view = NULL; view->server->grabbed_view = NULL;
if (mode == LAB_INPUT_STATE_MOVE) { if (mode == LAB_INPUT_STATE_MOVE) {
if (!snap_to_edge(view)) { if (!snap_to_region(view)) {
/* Reset tiled state if not snapped */ if (!snap_to_edge(view)) {
view_set_untiled(view); /* Reset tiled state if not snapped */
view_set_untiled(view);
}
} }
} }
/* Update focus/cursor image */ /* Update focus/cursor image */