mirror of
https://github.com/swaywm/sway.git
synced 2026-04-22 06:46:27 -04:00
Add primary_selection config option
See: https://github.com/swaywm/sway/issues/4511 Adds a config option 'primary_selection', which explicitly enables/disables the primary selection clipboard. This is implemented as a config-option check in 'handle_request_set_primary_selection', which clears the primary selection if the option is set to 'disabled'.
This commit is contained in:
parent
440d0bc22d
commit
6d5a42ff92
8 changed files with 42 additions and 1 deletions
|
|
@ -164,6 +164,7 @@ sway_cmd cmd_no_focus;
|
||||||
sway_cmd cmd_output;
|
sway_cmd cmd_output;
|
||||||
sway_cmd cmd_permit;
|
sway_cmd cmd_permit;
|
||||||
sway_cmd cmd_popup_during_fullscreen;
|
sway_cmd cmd_popup_during_fullscreen;
|
||||||
|
sway_cmd cmd_primary_selection;
|
||||||
sway_cmd cmd_reject;
|
sway_cmd cmd_reject;
|
||||||
sway_cmd cmd_reload;
|
sway_cmd cmd_reload;
|
||||||
sway_cmd cmd_rename;
|
sway_cmd cmd_rename;
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,7 @@ struct input_config_tool {
|
||||||
enum sway_tablet_tool_mode mode;
|
enum sway_tablet_tool_mode mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* options for input devices
|
* options for input devices
|
||||||
*/
|
*/
|
||||||
|
|
@ -468,6 +469,12 @@ enum xwayland_mode {
|
||||||
XWAYLAND_MODE_IMMEDIATE,
|
XWAYLAND_MODE_IMMEDIATE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum config_primary_selection {
|
||||||
|
PRIMARY_SELECTION_DEFAULT,
|
||||||
|
PRIMARY_SELECTION_DISABLED,
|
||||||
|
PRIMARY_SELECTION_ENABLED,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The configuration struct. The result of loading a config file.
|
* The configuration struct. The result of loading a config file.
|
||||||
*/
|
*/
|
||||||
|
|
@ -527,6 +534,7 @@ struct sway_config {
|
||||||
bool auto_back_and_forth;
|
bool auto_back_and_forth;
|
||||||
bool show_marks;
|
bool show_marks;
|
||||||
enum alignment title_align;
|
enum alignment title_align;
|
||||||
|
enum config_primary_selection primary_selection;
|
||||||
|
|
||||||
bool tiling_drag;
|
bool tiling_drag;
|
||||||
int tiling_drag_threshold;
|
int tiling_drag_threshold;
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ static const struct cmd_handler handlers[] = {
|
||||||
{ "no_focus", cmd_no_focus },
|
{ "no_focus", cmd_no_focus },
|
||||||
{ "output", cmd_output },
|
{ "output", cmd_output },
|
||||||
{ "popup_during_fullscreen", cmd_popup_during_fullscreen },
|
{ "popup_during_fullscreen", cmd_popup_during_fullscreen },
|
||||||
|
{ "primary_selection", cmd_primary_selection },
|
||||||
{ "seat", cmd_seat },
|
{ "seat", cmd_seat },
|
||||||
{ "set", cmd_set },
|
{ "set", cmd_set },
|
||||||
{ "show_marks", cmd_show_marks },
|
{ "show_marks", cmd_show_marks },
|
||||||
|
|
|
||||||
19
sway/commands/primary_selection.c
Normal file
19
sway/commands/primary_selection.c
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include "sway/config.h"
|
||||||
|
#include "sway/commands.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
struct cmd_results *cmd_primary_selection(int argc, char **argv) {
|
||||||
|
struct cmd_results *error = NULL;
|
||||||
|
if ((error = checkarg(argc, "primary_selection", EXPECTED_AT_LEAST, 1))) {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parse_boolean(argv[0], true)) {
|
||||||
|
config->primary_selection = PRIMARY_SELECTION_ENABLED;
|
||||||
|
} else {
|
||||||
|
config->primary_selection = PRIMARY_SELECTION_DISABLED;
|
||||||
|
}
|
||||||
|
return cmd_results_new(CMD_SUCCESS, NULL);
|
||||||
|
}
|
||||||
|
|
@ -265,6 +265,7 @@ static void config_defaults(struct sway_config *config) {
|
||||||
config->title_align = ALIGN_LEFT;
|
config->title_align = ALIGN_LEFT;
|
||||||
config->tiling_drag = true;
|
config->tiling_drag = true;
|
||||||
config->tiling_drag_threshold = 9;
|
config->tiling_drag_threshold = 9;
|
||||||
|
config->primary_selection = PRIMARY_SELECTION_DEFAULT;
|
||||||
|
|
||||||
config->smart_gaps = SMART_GAPS_OFF;
|
config->smart_gaps = SMART_GAPS_OFF;
|
||||||
config->gaps_inner = 0;
|
config->gaps_inner = 0;
|
||||||
|
|
|
||||||
|
|
@ -531,7 +531,14 @@ static void handle_request_set_primary_selection(struct wl_listener *listener,
|
||||||
struct sway_seat *seat =
|
struct sway_seat *seat =
|
||||||
wl_container_of(listener, seat, request_set_primary_selection);
|
wl_container_of(listener, seat, request_set_primary_selection);
|
||||||
struct wlr_seat_request_set_primary_selection_event *event = data;
|
struct wlr_seat_request_set_primary_selection_event *event = data;
|
||||||
wlr_seat_set_primary_selection(seat->wlr_seat, event->source, event->serial);
|
struct wlr_primary_selection_source *source;
|
||||||
|
|
||||||
|
if (config->primary_selection == PRIMARY_SELECTION_DISABLED) {
|
||||||
|
source = NULL;
|
||||||
|
} else {
|
||||||
|
source = event->source;
|
||||||
|
}
|
||||||
|
wlr_seat_set_primary_selection(seat->wlr_seat, source, event->serial);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void collect_focus_iter(struct sway_node *node, void *data) {
|
static void collect_focus_iter(struct sway_node *node, void *data) {
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ sway_sources = files(
|
||||||
'commands/nop.c',
|
'commands/nop.c',
|
||||||
'commands/output.c',
|
'commands/output.c',
|
||||||
'commands/popup_during_fullscreen.c',
|
'commands/popup_during_fullscreen.c',
|
||||||
|
'commands/primary_selection.c',
|
||||||
'commands/reload.c',
|
'commands/reload.c',
|
||||||
'commands/rename.c',
|
'commands/rename.c',
|
||||||
'commands/resize.c',
|
'commands/resize.c',
|
||||||
|
|
|
||||||
|
|
@ -746,6 +746,9 @@ The default colors are:
|
||||||
dialog will not be rendered. If _leave_fullscreen_, the view will exit
|
dialog will not be rendered. If _leave_fullscreen_, the view will exit
|
||||||
fullscreen mode and the dialog will be rendered.
|
fullscreen mode and the dialog will be rendered.
|
||||||
|
|
||||||
|
*primary_selection* enabled|disabled
|
||||||
|
Enable or disable the primary selection clipboard.
|
||||||
|
|
||||||
*set* $<name> <value>
|
*set* $<name> <value>
|
||||||
Sets variable $_name_ to _value_. You can use the new variable in the
|
Sets variable $_name_ to _value_. You can use the new variable in the
|
||||||
arguments of future commands. When the variable is used, it can be escaped
|
arguments of future commands. When the variable is used, it can be escaped
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue