mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
action: add toggle for GoToDesktop
Adds an option "toogle" to GoToDesktop.
In case the target is already where we are, we go back to the last desktop
instead.
Example of rc.xml
<keybind key="C-F1">
<action name="GoToDesktop">
<to>1</to>
<toggle>yes</toggle>
</action>
</keybind>
This commit is contained in:
parent
55ee96761a
commit
657c08aaa1
2 changed files with 16 additions and 1 deletions
|
|
@ -278,7 +278,7 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
Resizes active window size to width and height of the output when the
|
||||
window size exceeds the output size.
|
||||
|
||||
*<action name="GoToDesktop" to="value" wrap="yes" />*
|
||||
*<action name="GoToDesktop" to="value" wrap="yes" toggle="no" />*
|
||||
Switch to workspace.
|
||||
|
||||
*to* The workspace to switch to. Supported values are "current", "last",
|
||||
|
|
@ -288,6 +288,9 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
*wrap* [yes|no] Wrap around from last desktop to first, and vice
|
||||
versa. Default yes.
|
||||
|
||||
*toggle* [yes|no] Toggle to “last” if already on the workspace that
|
||||
would be the actual destination. Default no.
|
||||
|
||||
*<action name="SendToDesktop" to="value" follow="yes" wrap="yes" />*
|
||||
Send active window to workspace.
|
||||
|
||||
|
|
|
|||
12
src/action.c
12
src/action.c
|
|
@ -440,6 +440,11 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
action_arg_add_bool(action, argument, parse_bool(content, true));
|
||||
goto cleanup;
|
||||
}
|
||||
if (!strcmp(argument, "toggle")) {
|
||||
action_arg_add_bool(
|
||||
action, argument, parse_bool(content, false));
|
||||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_REGION:
|
||||
case ACTION_TYPE_SNAP_TO_REGION:
|
||||
|
|
@ -1228,6 +1233,13 @@ run_action(struct view *view, struct server *server, struct action *action,
|
|||
*/
|
||||
struct workspace *target_workspace = workspaces_find(
|
||||
server->workspaces.current, to, wrap);
|
||||
if (action->type == ACTION_TYPE_GO_TO_DESKTOP) {
|
||||
bool toggle = action_get_bool(action, "toggle", false);
|
||||
if (target_workspace == server->workspaces.current
|
||||
&& toggle) {
|
||||
target_workspace = server->workspaces.last;
|
||||
}
|
||||
}
|
||||
if (!target_workspace) {
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue