diff --git a/sway.5.txt b/sway.5.txt index b03fb73ed..9c40558bc 100644 --- a/sway.5.txt +++ b/sway.5.txt @@ -41,6 +41,9 @@ Commands **floating** toggle:: Toggles the "floating" status of the focused view. +**floating** mode_toggle:: + Toggles focus between floating view and tiled view. + **focus** :: Direction may be one of _up_, _down_, _left_, _right_, or _parent_. The directional focus commands will move the focus in that direction. The parent diff --git a/sway/commands.c b/sway/commands.c index aafa51f33..f87ab0e5a 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -231,6 +231,17 @@ static bool cmd_floating(struct sway_config *config, int argc, char **argv) { return true; } set_focused_container(view); + } else if (strcasecmp(argv[0], "mode_toggle") == 0) { + if (get_focused_view(active_workspace)->is_floating) { + if (active_workspace->children->length > 0) { + set_focused_container(get_focused_view(active_workspace->children->items[0])); + } + } else { + if (active_workspace->floating->length > 0) { + swayc_t *floating = active_workspace->floating->items[active_workspace->floating->length-1]; + set_focused_container(get_focused_view(floating)); + } + } } return true; diff --git a/sway/handlers.c b/sway/handlers.c index 7b82fd032..75adf7dd6 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -316,6 +316,9 @@ static bool handle_key(wlc_handle view, uint32_t time, const struct wlc_modifier } bool cmd_success = false; + sway_log(L_DEBUG, "modifier %x: state %d: key %d, sym: %d", + modifiers->mods, state, key, sym); + if ((modifiers->mods & config->floating_mod) && (dragging || resizing)) { reset_floating(get_focused_view(&root_container)); }