mirror of
https://github.com/swaywm/sway.git
synced 2026-04-17 06:46:32 -04:00
Make floating modifier adhere to shortcuts_inhibitor
floating_modifier is currently triggered when the modifier is pressed, and when a mouse's left or right button is pressed even if there is an existing shortcuts_inhibitor. This changes the default behavior to only change the current seatop when there is no active shortcuts_inhibitor. I've added an additional optional `--inhibited` option to the `floating_modifier` command. When `--inhibited` is passed, the seatop is changed regardless of if there is an active shortcuts_inhibitor.
This commit is contained in:
parent
9bb45a4037
commit
31aad46c4f
4 changed files with 24 additions and 8 deletions
|
|
@ -507,6 +507,7 @@ struct sway_config {
|
||||||
struct bar_config *current_bar;
|
struct bar_config *current_bar;
|
||||||
uint32_t floating_mod;
|
uint32_t floating_mod;
|
||||||
bool floating_mod_inverse;
|
bool floating_mod_inverse;
|
||||||
|
bool floating_mod_inhibited;
|
||||||
uint32_t dragging_key;
|
uint32_t dragging_key;
|
||||||
uint32_t resizing_key;
|
uint32_t resizing_key;
|
||||||
char *floating_scroll_up_cmd;
|
char *floating_scroll_up_cmd;
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,22 @@ struct cmd_results *cmd_floating_modifier(int argc, char **argv) {
|
||||||
return cmd_results_new(CMD_INVALID, "Invalid modifier");
|
return cmd_results_new(CMD_INVALID, "Invalid modifier");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc == 1 || strcasecmp(argv[1], "normal") == 0) {
|
argv++;
|
||||||
|
argc--;
|
||||||
|
while (argc > 0)
|
||||||
|
{
|
||||||
|
if (strcasecmp(argv[0], "normal") == 0) {
|
||||||
config->floating_mod_inverse = false;
|
config->floating_mod_inverse = false;
|
||||||
} else if (strcasecmp(argv[1], "inverse") == 0) {
|
} else if (strcasecmp(argv[0], "inverse") == 0) {
|
||||||
config->floating_mod_inverse = true;
|
config->floating_mod_inverse = true;
|
||||||
|
} else if (strcasecmp(argv[0], "--inhibited") == 0){
|
||||||
|
config->floating_mod_inhibited = true;
|
||||||
} else {
|
} else {
|
||||||
return cmd_results_new(CMD_INVALID,
|
return cmd_results_new(CMD_INVALID,
|
||||||
"Usage: floating_modifier <mod> [inverse|normal]");
|
"Usage: floating_modifier <mod> [inverse|normal [--inhibited]");
|
||||||
|
}
|
||||||
|
argv++;
|
||||||
|
argc--;
|
||||||
}
|
}
|
||||||
|
|
||||||
config->floating_mod = mod;
|
config->floating_mod = mod;
|
||||||
|
|
|
||||||
|
|
@ -242,6 +242,7 @@ static void config_defaults(struct sway_config *config) {
|
||||||
|
|
||||||
config->floating_mod = 0;
|
config->floating_mod = 0;
|
||||||
config->floating_mod_inverse = false;
|
config->floating_mod_inverse = false;
|
||||||
|
config->floating_mod_inhibited = false;
|
||||||
config->dragging_key = BTN_LEFT;
|
config->dragging_key = BTN_LEFT;
|
||||||
config->resizing_key = BTN_RIGHT;
|
config->resizing_key = BTN_RIGHT;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -403,7 +403,12 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle tiling resize via mod
|
// Handle tiling resize via mod
|
||||||
bool mod_pressed = modifiers & config->floating_mod;
|
struct sway_keyboard_shortcuts_inhibitor *sway_inhibitor =
|
||||||
|
keyboard_shortcuts_inhibitor_get_for_focused_surface(seat);
|
||||||
|
bool shortcuts_inhibited = sway_inhibitor && sway_inhibitor->inhibitor->active;
|
||||||
|
bool mod_pressed = modifiers & config->floating_mod && (!shortcuts_inhibited
|
||||||
|
|| config->floating_mod_inhibited);
|
||||||
|
|
||||||
if (cont && !is_floating_or_child && mod_pressed &&
|
if (cont && !is_floating_or_child && mod_pressed &&
|
||||||
state == WL_POINTER_BUTTON_STATE_PRESSED) {
|
state == WL_POINTER_BUTTON_STATE_PRESSED) {
|
||||||
uint32_t btn_resize = config->floating_mod_inverse ?
|
uint32_t btn_resize = config->floating_mod_inverse ?
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue