diff options
-rw-r--r-- | include/sway/commands.h | 1 | ||||
-rw-r--r-- | include/sway/config.h | 1 | ||||
-rw-r--r-- | meson.build | 2 | ||||
-rw-r--r-- | sway/commands/input.c | 1 | ||||
-rw-r--r-- | sway/commands/input/dwtp.c | 25 | ||||
-rw-r--r-- | sway/config/input.c | 4 | ||||
-rw-r--r-- | sway/input/libinput.c | 15 | ||||
-rw-r--r-- | sway/ipc-json.c | 13 | ||||
-rw-r--r-- | sway/meson.build | 1 | ||||
-rw-r--r-- | sway/sway-input.5.scd | 4 | ||||
-rw-r--r-- | sway/sway-ipc.7.scd | 10 |
11 files changed, 74 insertions, 3 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h index 07941bb4..7fad26a1 100644 --- a/include/sway/commands.h +++ b/include/sway/commands.h | |||
@@ -252,6 +252,7 @@ sway_cmd input_cmd_click_method; | |||
252 | sway_cmd input_cmd_drag; | 252 | sway_cmd input_cmd_drag; |
253 | sway_cmd input_cmd_drag_lock; | 253 | sway_cmd input_cmd_drag_lock; |
254 | sway_cmd input_cmd_dwt; | 254 | sway_cmd input_cmd_dwt; |
255 | sway_cmd input_cmd_dwtp; | ||
255 | sway_cmd input_cmd_events; | 256 | sway_cmd input_cmd_events; |
256 | sway_cmd input_cmd_left_handed; | 257 | sway_cmd input_cmd_left_handed; |
257 | sway_cmd input_cmd_map_from_region; | 258 | sway_cmd input_cmd_map_from_region; |
diff --git a/include/sway/config.h b/include/sway/config.h index 68c06846..190ab13b 100644 --- a/include/sway/config.h +++ b/include/sway/config.h | |||
@@ -150,6 +150,7 @@ struct input_config { | |||
150 | int drag; | 150 | int drag; |
151 | int drag_lock; | 151 | int drag_lock; |
152 | int dwt; | 152 | int dwt; |
153 | int dwtp; | ||
153 | int left_handed; | 154 | int left_handed; |
154 | int middle_emulation; | 155 | int middle_emulation; |
155 | int natural_scroll; | 156 | int natural_scroll; |
diff --git a/meson.build b/meson.build index d23300be..fccf6429 100644 --- a/meson.build +++ b/meson.build | |||
@@ -60,7 +60,7 @@ gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf')) | |||
60 | pixman = dependency('pixman-1') | 60 | pixman = dependency('pixman-1') |
61 | glesv2 = dependency('glesv2') | 61 | glesv2 = dependency('glesv2') |
62 | libevdev = dependency('libevdev') | 62 | libevdev = dependency('libevdev') |
63 | libinput = dependency('libinput', version: '>=1.6.0') | 63 | libinput = dependency('libinput', version: '>=1.21.0') |
64 | xcb = dependency('xcb', required: get_option('xwayland')) | 64 | xcb = dependency('xcb', required: get_option('xwayland')) |
65 | drm_full = dependency('libdrm') # only needed for drm_fourcc.h | 65 | drm_full = dependency('libdrm') # only needed for drm_fourcc.h |
66 | drm = drm_full.partial_dependency(compile_args: true, includes: true) | 66 | drm = drm_full.partial_dependency(compile_args: true, includes: true) |
diff --git a/sway/commands/input.c b/sway/commands/input.c index 77acb671..ea531659 100644 --- a/sway/commands/input.c +++ b/sway/commands/input.c | |||
@@ -14,6 +14,7 @@ static const struct cmd_handler input_handlers[] = { | |||
14 | { "drag", input_cmd_drag }, | 14 | { "drag", input_cmd_drag }, |
15 | { "drag_lock", input_cmd_drag_lock }, | 15 | { "drag_lock", input_cmd_drag_lock }, |
16 | { "dwt", input_cmd_dwt }, | 16 | { "dwt", input_cmd_dwt }, |
17 | { "dwtp", input_cmd_dwtp }, | ||
17 | { "events", input_cmd_events }, | 18 | { "events", input_cmd_events }, |
18 | { "left_handed", input_cmd_left_handed }, | 19 | { "left_handed", input_cmd_left_handed }, |
19 | { "map_from_region", input_cmd_map_from_region }, | 20 | { "map_from_region", input_cmd_map_from_region }, |
diff --git a/sway/commands/input/dwtp.c b/sway/commands/input/dwtp.c new file mode 100644 index 00000000..232e2b26 --- /dev/null +++ b/sway/commands/input/dwtp.c | |||
@@ -0,0 +1,25 @@ | |||
1 | #include <string.h> | ||
2 | #include <strings.h> | ||
3 | #include "sway/config.h" | ||
4 | #include "sway/commands.h" | ||
5 | #include "sway/input/input-manager.h" | ||
6 | #include "util.h" | ||
7 | |||
8 | struct cmd_results *input_cmd_dwtp(int argc, char **argv) { | ||
9 | struct cmd_results *error = NULL; | ||
10 | if ((error = checkarg(argc, "dwtp", EXPECTED_AT_LEAST, 1))) { | ||
11 | return error; | ||
12 | } | ||
13 | struct input_config *ic = config->handler_context.input_config; | ||
14 | if (!ic) { | ||
15 | return cmd_results_new(CMD_FAILURE, "No input device defined."); | ||
16 | } | ||
17 | |||
18 | if (parse_boolean(argv[0], true)) { | ||
19 | ic->dwtp = LIBINPUT_CONFIG_DWTP_ENABLED; | ||
20 | } else { | ||
21 | ic->dwtp = LIBINPUT_CONFIG_DWTP_DISABLED; | ||
22 | } | ||
23 | |||
24 | return cmd_results_new(CMD_SUCCESS, NULL); | ||
25 | } | ||
diff --git a/sway/config/input.c b/sway/config/input.c index a998e170..a98204df 100644 --- a/sway/config/input.c +++ b/sway/config/input.c | |||
@@ -25,6 +25,7 @@ struct input_config *new_input_config(const char* identifier) { | |||
25 | input->drag = INT_MIN; | 25 | input->drag = INT_MIN; |
26 | input->drag_lock = INT_MIN; | 26 | input->drag_lock = INT_MIN; |
27 | input->dwt = INT_MIN; | 27 | input->dwt = INT_MIN; |
28 | input->dwtp = INT_MIN; | ||
28 | input->send_events = INT_MIN; | 29 | input->send_events = INT_MIN; |
29 | input->click_method = INT_MIN; | 30 | input->click_method = INT_MIN; |
30 | input->middle_emulation = INT_MIN; | 31 | input->middle_emulation = INT_MIN; |
@@ -61,6 +62,9 @@ void merge_input_config(struct input_config *dst, struct input_config *src) { | |||
61 | if (src->dwt != INT_MIN) { | 62 | if (src->dwt != INT_MIN) { |
62 | dst->dwt = src->dwt; | 63 | dst->dwt = src->dwt; |
63 | } | 64 | } |
65 | if (src->dwtp != INT_MIN) { | ||
66 | dst->dwtp = src->dwtp; | ||
67 | } | ||
64 | if (src->left_handed != INT_MIN) { | 68 | if (src->left_handed != INT_MIN) { |
65 | dst->left_handed = src->left_handed; | 69 | dst->left_handed = src->left_handed; |
66 | } | 70 | } |
diff --git a/sway/input/libinput.c b/sway/input/libinput.c index 1bac72c9..53019301 100644 --- a/sway/input/libinput.c +++ b/sway/input/libinput.c | |||
@@ -166,6 +166,16 @@ static bool set_dwt(struct libinput_device *device, bool dwt) { | |||
166 | return true; | 166 | return true; |
167 | } | 167 | } |
168 | 168 | ||
169 | static bool set_dwtp(struct libinput_device *device, bool dwtp) { | ||
170 | if (!libinput_device_config_dwtp_is_available(device) || | ||
171 | libinput_device_config_dwtp_get_enabled(device) == dwtp) { | ||
172 | return false; | ||
173 | } | ||
174 | sway_log(SWAY_DEBUG, "dwtp_set_enabled(%d)", dwtp); | ||
175 | log_status(libinput_device_config_dwtp_set_enabled(device, dwtp)); | ||
176 | return true; | ||
177 | } | ||
178 | |||
169 | static bool set_calibration_matrix(struct libinput_device *dev, float mat[6]) { | 179 | static bool set_calibration_matrix(struct libinput_device *dev, float mat[6]) { |
170 | if (!libinput_device_config_calibration_has_matrix(dev)) { | 180 | if (!libinput_device_config_calibration_has_matrix(dev)) { |
171 | return false; | 181 | return false; |
@@ -255,6 +265,9 @@ bool sway_input_configure_libinput_device(struct sway_input_device *input_device | |||
255 | if (ic->dwt != INT_MIN) { | 265 | if (ic->dwt != INT_MIN) { |
256 | changed |= set_dwt(device, ic->dwt); | 266 | changed |= set_dwt(device, ic->dwt); |
257 | } | 267 | } |
268 | if (ic->dwtp != INT_MIN) { | ||
269 | changed |= set_dwtp(device, ic->dwtp); | ||
270 | } | ||
258 | if (ic->calibration_matrix.configured) { | 271 | if (ic->calibration_matrix.configured) { |
259 | changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix); | 272 | changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix); |
260 | } | 273 | } |
@@ -302,6 +315,8 @@ void sway_input_reset_libinput_device(struct sway_input_device *input_device) { | |||
302 | libinput_device_config_scroll_get_default_button(device)); | 315 | libinput_device_config_scroll_get_default_button(device)); |
303 | changed |= set_dwt(device, | 316 | changed |= set_dwt(device, |
304 | libinput_device_config_dwt_get_default_enabled(device)); | 317 | libinput_device_config_dwt_get_default_enabled(device)); |
318 | changed |= set_dwtp(device, | ||
319 | libinput_device_config_dwtp_get_default_enabled(device)); | ||
305 | 320 | ||
306 | float matrix[6]; | 321 | float matrix[6]; |
307 | libinput_device_config_calibration_get_default_matrix(device, matrix); | 322 | libinput_device_config_calibration_get_default_matrix(device, matrix); |
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 61613f53..d757f21f 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -1000,6 +1000,19 @@ static json_object *describe_libinput_device(struct libinput_device *device) { | |||
1000 | json_object_object_add(object, "dwt", json_object_new_string(dwt)); | 1000 | json_object_object_add(object, "dwt", json_object_new_string(dwt)); |
1001 | } | 1001 | } |
1002 | 1002 | ||
1003 | if (libinput_device_config_dwtp_is_available(device)) { | ||
1004 | const char *dwtp = "unknown"; | ||
1005 | switch (libinput_device_config_dwtp_get_enabled(device)) { | ||
1006 | case LIBINPUT_CONFIG_DWTP_ENABLED: | ||
1007 | dwtp = "enabled"; | ||
1008 | break; | ||
1009 | case LIBINPUT_CONFIG_DWTP_DISABLED: | ||
1010 | dwtp = "disabled"; | ||
1011 | break; | ||
1012 | } | ||
1013 | json_object_object_add(object, "dwtp", json_object_new_string(dwtp)); | ||
1014 | } | ||
1015 | |||
1003 | if (libinput_device_config_calibration_has_matrix(device)) { | 1016 | if (libinput_device_config_calibration_has_matrix(device)) { |
1004 | float matrix[6]; | 1017 | float matrix[6]; |
1005 | libinput_device_config_calibration_get_matrix(device, matrix); | 1018 | libinput_device_config_calibration_get_matrix(device, matrix); |
diff --git a/sway/meson.build b/sway/meson.build index c7b9d6e6..4d7dccfa 100644 --- a/sway/meson.build +++ b/sway/meson.build | |||
@@ -157,6 +157,7 @@ sway_sources = files( | |||
157 | 'commands/input/drag.c', | 157 | 'commands/input/drag.c', |
158 | 'commands/input/drag_lock.c', | 158 | 'commands/input/drag_lock.c', |
159 | 'commands/input/dwt.c', | 159 | 'commands/input/dwt.c', |
160 | 'commands/input/dwtp.c', | ||
160 | 'commands/input/events.c', | 161 | 'commands/input/events.c', |
161 | 'commands/input/left_handed.c', | 162 | 'commands/input/left_handed.c', |
162 | 'commands/input/map_from_region.c', | 163 | 'commands/input/map_from_region.c', |
diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd index 8b702b77..e073c45d 100644 --- a/sway/sway-input.5.scd +++ b/sway/sway-input.5.scd | |||
@@ -147,6 +147,10 @@ The following commands may only be used in the configuration file. | |||
147 | *input* <identifier> dwt enabled|disabled | 147 | *input* <identifier> dwt enabled|disabled |
148 | Enables or disables disable-while-typing for the specified input device. | 148 | Enables or disables disable-while-typing for the specified input device. |
149 | 149 | ||
150 | *input* <identifier> dwtp enabled|disabled | ||
151 | Enables or disables disable-while-trackpointing for the specified input | ||
152 | device. | ||
153 | |||
150 | *input* <identifier> events enabled|disabled|disabled_on_external_mouse|toggle [<toggle-modes>] | 154 | *input* <identifier> events enabled|disabled|disabled_on_external_mouse|toggle [<toggle-modes>] |
151 | Enables or disables send_events for specified input device. Disabling | 155 | Enables or disables send_events for specified input device. Disabling |
152 | send_events disables the input device. | 156 | send_events disables the input device. |
diff --git a/sway/sway-ipc.7.scd b/sway/sway-ipc.7.scd index c7a2c473..9121f679 100644 --- a/sway/sway-ipc.7.scd +++ b/sway/sway-ipc.7.scd | |||
@@ -1197,6 +1197,10 @@ following properties will be included for devices that support them: | |||
1197 | |- dwt | 1197 | |- dwt |
1198 | : string | 1198 | : string |
1199 | : Whether disable-while-typing is enabled. It can be _enabled_ or _disabled_ | 1199 | : Whether disable-while-typing is enabled. It can be _enabled_ or _disabled_ |
1200 | |- dwtp | ||
1201 | : string | ||
1202 | : Whether disable-while-trackpointing is enabled. It can be _enabled_ or | ||
1203 | _disabled_ | ||
1200 | |- calibration_matrix | 1204 | |- calibration_matrix |
1201 | : array | 1205 | : array |
1202 | : An array of 6 floats representing the calibration matrix for absolute | 1206 | : An array of 6 floats representing the calibration matrix for absolute |
@@ -1236,7 +1240,8 @@ following properties will be included for devices that support them: | |||
1236 | "click_method": "button_areas", | 1240 | "click_method": "button_areas", |
1237 | "middle_emulation": "disabled", | 1241 | "middle_emulation": "disabled", |
1238 | "scroll_method": "edge", | 1242 | "scroll_method": "edge", |
1239 | "dwt": "enabled" | 1243 | "dwt": "enabled", |
1244 | "dwtp": "enabled" | ||
1240 | } | 1245 | } |
1241 | }, | 1246 | }, |
1242 | { | 1247 | { |
@@ -1363,7 +1368,8 @@ one seat. Each object has the following properties: | |||
1363 | "click_method": "button_areas", | 1368 | "click_method": "button_areas", |
1364 | "middle_emulation": "disabled", | 1369 | "middle_emulation": "disabled", |
1365 | "scroll_method": "edge", | 1370 | "scroll_method": "edge", |
1366 | "dwt": "enabled" | 1371 | "dwt": "enabled", |
1372 | "dwtp": "enabled" | ||
1367 | } | 1373 | } |
1368 | }, | 1374 | }, |
1369 | { | 1375 | { |