aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Moelf <jerryling315@gmail.com>2019-05-10 23:57:53 -0700
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-05-14 00:11:04 -0400
commited2e553b8d0dff3e74eeaa80a2586458271b2565 (patch)
tree3b48f4efad369798686611f21a380330e4c930dc /sway
parentSpawn swaybar as a wayland client (diff)
downloadsway-ed2e553b8d0dff3e74eeaa80a2586458271b2565.tar.gz
sway-ed2e553b8d0dff3e74eeaa80a2586458271b2565.tar.zst
sway-ed2e553b8d0dff3e74eeaa80a2586458271b2565.zip
Implement output toggle
discussed in #4136, this can't handle wildcard but won't crash.
Diffstat (limited to 'sway')
-rw-r--r--sway/commands/output.c1
-rw-r--r--sway/commands/output/toggle.c37
-rw-r--r--sway/desktop/output.c13
-rw-r--r--sway/meson.build1
-rw-r--r--sway/sway-output.5.scd3
5 files changed, 55 insertions, 0 deletions
diff --git a/sway/commands/output.c b/sway/commands/output.c
index 6b9eafdb..3903f10d 100644
--- a/sway/commands/output.c
+++ b/sway/commands/output.c
@@ -19,6 +19,7 @@ static struct cmd_handler output_handlers[] = {
19 { "resolution", output_cmd_mode }, 19 { "resolution", output_cmd_mode },
20 { "scale", output_cmd_scale }, 20 { "scale", output_cmd_scale },
21 { "subpixel", output_cmd_subpixel }, 21 { "subpixel", output_cmd_subpixel },
22 { "toggle", output_cmd_toggle },
22 { "transform", output_cmd_transform }, 23 { "transform", output_cmd_transform },
23}; 24};
24 25
diff --git a/sway/commands/output/toggle.c b/sway/commands/output/toggle.c
new file mode 100644
index 00000000..6342d526
--- /dev/null
+++ b/sway/commands/output/toggle.c
@@ -0,0 +1,37 @@
1#include "sway/commands.h"
2#include "sway/config.h"
3#include "sway/output.h"
4
5struct cmd_results *output_cmd_toggle(int argc, char **argv) {
6 if (!config->handler_context.output_config) {
7 return cmd_results_new(CMD_FAILURE, "Missing output config");
8 }
9
10 struct output_config *oc = config->handler_context.output_config;
11
12 if (strcmp(oc->name, "*") == 0) {
13 return cmd_results_new(CMD_INVALID,
14 "Cannot apply toggle to all outputs.");
15 }
16
17 struct sway_output *sway_output = all_output_by_name_or_id(oc->name);
18
19 if (sway_output == NULL) {
20 return cmd_results_new(CMD_FAILURE,
21 "Cannot apply toggle to unknown output %s", oc->name);
22 }
23
24 oc = find_output_config(sway_output);
25
26 if (!oc || oc->enabled != 0) {
27 config->handler_context.output_config->enabled = 0;
28 } else {
29 config->handler_context.output_config->enabled = 1;
30 }
31
32 free(oc);
33 config->handler_context.leftovers.argc = argc;
34 config->handler_context.leftovers.argv = argv;
35 return NULL;
36}
37
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 0cc08525..1636a58b 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -42,6 +42,19 @@ struct sway_output *output_by_name_or_id(const char *name_or_id) {
42 return NULL; 42 return NULL;
43} 43}
44 44
45struct sway_output *all_output_by_name_or_id(const char *name_or_id) {
46 struct sway_output *output;
47 wl_list_for_each(output, &root->all_outputs, link) {
48 char identifier[128];
49 output_get_identifier(identifier, sizeof(identifier), output);
50 if (strcasecmp(identifier, name_or_id) == 0
51 || strcasecmp(output->wlr_output->name, name_or_id) == 0) {
52 return output;
53 }
54 }
55 return NULL;
56}
57
45/** 58/**
46 * Rotate a child's position relative to a parent. The parent size is (pw, ph), 59 * Rotate a child's position relative to a parent. The parent size is (pw, ph),
47 * the child position is (*sx, *sy) and its size is (sw, sh). 60 * the child position is (*sx, *sy) and its size is (sw, sh).
diff --git a/sway/meson.build b/sway/meson.build
index 0f943a1f..05cece7a 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -173,6 +173,7 @@ sway_sources = files(
173 'commands/output/position.c', 173 'commands/output/position.c',
174 'commands/output/scale.c', 174 'commands/output/scale.c',
175 'commands/output/subpixel.c', 175 'commands/output/subpixel.c',
176 'commands/output/toggle.c',
176 'commands/output/transform.c', 177 'commands/output/transform.c',
177 178
178 'tree/arrange.c', 179 'tree/arrange.c',
diff --git a/sway/sway-output.5.scd b/sway/sway-output.5.scd
index 1efe2f7b..e20d0aba 100644
--- a/sway/sway-output.5.scd
+++ b/sway/sway-output.5.scd
@@ -94,6 +94,9 @@ must be separated by one space. For example:
94 Enables or disables the specified output (all outputs are enabled by 94 Enables or disables the specified output (all outputs are enabled by
95 default). 95 default).
96 96
97*output* <name> toggle
98 Toggle the specified output.
99
97*output* <name> dpms on|off 100*output* <name> dpms on|off
98 Enables or disables the specified output via DPMS. To turn an output off 101 Enables or disables the specified output via DPMS. To turn an output off
99 (ie. blank the screen but keep workspaces as-is), one can set DPMS to off. 102 (ie. blank the screen but keep workspaces as-is), one can set DPMS to off.