aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Aidan Dang <dang@aidan.gg>2022-03-16 22:22:41 +0000
committerLibravatar Simon Ser <contact@emersion.fr>2022-12-05 14:09:29 +0100
commitc32a507303e38c7bf0b8054108bec45ff67e92c2 (patch)
tree9590aa045b466f57b023d625c8a281c94fd8039c /sway
parentseat: Avoid sending redundant keymaps on reload (diff)
downloadsway-c32a507303e38c7bf0b8054108bec45ff67e92c2.tar.gz
sway-c32a507303e38c7bf0b8054108bec45ff67e92c2.tar.zst
sway-c32a507303e38c7bf0b8054108bec45ff67e92c2.zip
Add `primary_selection` config option
See: https://github.com/swaywm/sway/issues/4511 Adds a bool config option `primary_selection`, which explicitly enables/disables the primary selection clipboard. Defaults to enabled. This is implemented as a launch-only option which enables or disables the creation of the `zwp_primary_selection_device_manager_v1` global. Co-authored-by: Tilde Rose <t1lde@protonmail.com>
Diffstat (limited to 'sway')
-rw-r--r--sway/commands.c1
-rw-r--r--sway/commands/primary_selection.c23
-rw-r--r--sway/config.c1
-rw-r--r--sway/meson.build1
-rw-r--r--sway/server.c5
-rw-r--r--sway/sway.5.scd4
6 files changed, 34 insertions, 1 deletions
diff --git a/sway/commands.c b/sway/commands.c
index 2160a970..041da7ea 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -82,6 +82,7 @@ static const struct cmd_handler handlers[] = {
82 { "no_focus", cmd_no_focus }, 82 { "no_focus", cmd_no_focus },
83 { "output", cmd_output }, 83 { "output", cmd_output },
84 { "popup_during_fullscreen", cmd_popup_during_fullscreen }, 84 { "popup_during_fullscreen", cmd_popup_during_fullscreen },
85 { "primary_selection", cmd_primary_selection },
85 { "seat", cmd_seat }, 86 { "seat", cmd_seat },
86 { "set", cmd_set }, 87 { "set", cmd_set },
87 { "show_marks", cmd_show_marks }, 88 { "show_marks", cmd_show_marks },
diff --git a/sway/commands/primary_selection.c b/sway/commands/primary_selection.c
new file mode 100644
index 00000000..585b079d
--- /dev/null
+++ b/sway/commands/primary_selection.c
@@ -0,0 +1,23 @@
1#include <string.h>
2#include <strings.h>
3#include "sway/config.h"
4#include "sway/commands.h"
5#include "util.h"
6
7struct cmd_results *cmd_primary_selection(int argc, char **argv) {
8 struct cmd_results *error = NULL;
9 if ((error = checkarg(argc, "primary_selection", EXPECTED_EQUAL_TO, 1))) {
10 return error;
11 }
12
13 bool primary_selection = parse_boolean(argv[0], true);
14
15 if (config->reloading && config->primary_selection != primary_selection) {
16 return cmd_results_new(CMD_FAILURE,
17 "primary_selection can only be enabled/disabled at launch");
18 }
19
20 config->primary_selection = parse_boolean(argv[0], true);
21
22 return cmd_results_new(CMD_SUCCESS, NULL);
23}
diff --git a/sway/config.c b/sway/config.c
index b41dd871..1f2bb686 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -273,6 +273,7 @@ static void config_defaults(struct sway_config *config) {
273 config->title_align = ALIGN_LEFT; 273 config->title_align = ALIGN_LEFT;
274 config->tiling_drag = true; 274 config->tiling_drag = true;
275 config->tiling_drag_threshold = 9; 275 config->tiling_drag_threshold = 9;
276 config->primary_selection = true;
276 277
277 config->smart_gaps = SMART_GAPS_OFF; 278 config->smart_gaps = SMART_GAPS_OFF;
278 config->gaps_inner = 0; 279 config->gaps_inner = 0;
diff --git a/sway/meson.build b/sway/meson.build
index de10e14f..b2412d5e 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -86,6 +86,7 @@ sway_sources = files(
86 'commands/nop.c', 86 'commands/nop.c',
87 'commands/output.c', 87 'commands/output.c',
88 'commands/popup_during_fullscreen.c', 88 'commands/popup_during_fullscreen.c',
89 'commands/primary_selection.c',
89 'commands/reload.c', 90 'commands/reload.c',
90 'commands/rename.c', 91 'commands/rename.c',
91 'commands/resize.c', 92 'commands/resize.c',
diff --git a/sway/server.c b/sway/server.c
index 2db069a2..43ff8cfb 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -210,7 +210,6 @@ bool server_init(struct sway_server *server) {
210 wlr_export_dmabuf_manager_v1_create(server->wl_display); 210 wlr_export_dmabuf_manager_v1_create(server->wl_display);
211 wlr_screencopy_manager_v1_create(server->wl_display); 211 wlr_screencopy_manager_v1_create(server->wl_display);
212 wlr_data_control_manager_v1_create(server->wl_display); 212 wlr_data_control_manager_v1_create(server->wl_display);
213 wlr_primary_selection_v1_device_manager_create(server->wl_display);
214 wlr_viewporter_create(server->wl_display); 213 wlr_viewporter_create(server->wl_display);
215 wlr_single_pixel_buffer_manager_v1_create(server->wl_display); 214 wlr_single_pixel_buffer_manager_v1_create(server->wl_display);
216 server->content_type_manager_v1 = 215 server->content_type_manager_v1 =
@@ -308,6 +307,10 @@ bool server_start(struct sway_server *server) {
308 } 307 }
309#endif 308#endif
310 309
310 if (config->primary_selection) {
311 wlr_primary_selection_v1_device_manager_create(server->wl_display);
312 }
313
311 sway_log(SWAY_INFO, "Starting backend on wayland display '%s'", 314 sway_log(SWAY_INFO, "Starting backend on wayland display '%s'",
312 server->socket); 315 server->socket);
313 if (!wlr_backend_start(server->backend)) { 316 if (!wlr_backend_start(server->backend)) {
diff --git a/sway/sway.5.scd b/sway/sway.5.scd
index f6aab2d4..25082c41 100644
--- a/sway/sway.5.scd
+++ b/sway/sway.5.scd
@@ -807,6 +807,10 @@ The default colors are:
807 dialog will not be rendered. If _leave_fullscreen_, the view will exit 807 dialog will not be rendered. If _leave_fullscreen_, the view will exit
808 fullscreen mode and the dialog will be rendered. 808 fullscreen mode and the dialog will be rendered.
809 809
810*primary_selection* enabled|disabled
811 Enable or disable the primary selection clipboard. May only be configured
812 at launch. Default is _enabled_.
813
810*set* $<name> <value> 814*set* $<name> <value>
811 Sets variable $_name_ to _value_. You can use the new variable in the 815 Sets variable $_name_ to _value_. You can use the new variable in the
812 arguments of future commands. When the variable is used, it can be escaped 816 arguments of future commands. When the variable is used, it can be escaped