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:
Alex Maese 2023-08-12 11:37:30 -05:00 committed by ForTheReallys
parent 9bb45a4037
commit 31aad46c4f
4 changed files with 24 additions and 8 deletions

View file

@ -507,6 +507,7 @@ struct sway_config {
struct bar_config *current_bar;
uint32_t floating_mod;
bool floating_mod_inverse;
bool floating_mod_inhibited;
uint32_t dragging_key;
uint32_t resizing_key;
char *floating_scroll_up_cmd;

View file

@ -19,13 +19,22 @@ struct cmd_results *cmd_floating_modifier(int argc, char **argv) {
return cmd_results_new(CMD_INVALID, "Invalid modifier");
}
if (argc == 1 || strcasecmp(argv[1], "normal") == 0) {
config->floating_mod_inverse = false;
} else if (strcasecmp(argv[1], "inverse") == 0) {
config->floating_mod_inverse = true;
} else {
return cmd_results_new(CMD_INVALID,
"Usage: floating_modifier <mod> [inverse|normal]");
argv++;
argc--;
while (argc > 0)
{
if (strcasecmp(argv[0], "normal") == 0) {
config->floating_mod_inverse = false;
} else if (strcasecmp(argv[0], "inverse") == 0) {
config->floating_mod_inverse = true;
} else if (strcasecmp(argv[0], "--inhibited") == 0){
config->floating_mod_inhibited = true;
} else {
return cmd_results_new(CMD_INVALID,
"Usage: floating_modifier <mod> [inverse|normal [--inhibited]");
}
argv++;
argc--;
}
config->floating_mod = mod;

View file

@ -242,6 +242,7 @@ static void config_defaults(struct sway_config *config) {
config->floating_mod = 0;
config->floating_mod_inverse = false;
config->floating_mod_inhibited = false;
config->dragging_key = BTN_LEFT;
config->resizing_key = BTN_RIGHT;

View file

@ -403,7 +403,12 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
}
// 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 &&
state == WL_POINTER_BUTTON_STATE_PRESSED) {
uint32_t btn_resize = config->floating_mod_inverse ?