This commit is contained in:
ForTheReallys 2024-04-24 14:25:21 -05:00 committed by GitHub
commit a281476058
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 29 additions and 9 deletions

View File

@ -503,6 +503,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

@ -241,6 +241,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

@ -246,8 +246,12 @@ static void handle_tablet_tool_tip(struct sway_seat *seat,
bool is_floating_or_child = container_is_floating_or_child(cont);
bool is_fullscreen_or_child = container_is_fullscreen_or_child(cont);
struct wlr_keyboard *keyboard = wlr_seat_get_keyboard(seat->wlr_seat);
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 = keyboard &&
(wlr_keyboard_get_modifiers(keyboard) & config->floating_mod);
(wlr_keyboard_get_modifiers(keyboard) & config->floating_mod)
&& (!shortcuts_inhibited || config->floating_mod_inhibited);
// Handle beginning floating move
if (is_floating_or_child && !is_fullscreen_or_child && mod_pressed) {
@ -402,7 +406,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 ?