diff options
-rw-r--r-- | sway/config/input.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/sway/config/input.c b/sway/config/input.c index 0993e9ab..2ed9c016 100644 --- a/sway/config/input.c +++ b/sway/config/input.c | |||
@@ -249,6 +249,17 @@ static void merge_type_on_existing(struct input_config *type_wildcard) { | |||
249 | } | 249 | } |
250 | } | 250 | } |
251 | 251 | ||
252 | static const char *set_input_type(struct input_config *ic) { | ||
253 | struct sway_input_device *input_device; | ||
254 | wl_list_for_each(input_device, &server.input->devices, link) { | ||
255 | if (strcmp(input_device->identifier, ic->identifier) == 0) { | ||
256 | ic->input_type = input_device_get_type(input_device); | ||
257 | break; | ||
258 | } | ||
259 | } | ||
260 | return ic->input_type; | ||
261 | } | ||
262 | |||
252 | struct input_config *store_input_config(struct input_config *ic, | 263 | struct input_config *store_input_config(struct input_config *ic, |
253 | char **error) { | 264 | char **error) { |
254 | bool wildcard = strcmp(ic->identifier, "*") == 0; | 265 | bool wildcard = strcmp(ic->identifier, "*") == 0; |
@@ -272,6 +283,19 @@ struct input_config *store_input_config(struct input_config *ic, | |||
272 | current = config_list->items[i]; | 283 | current = config_list->items[i]; |
273 | } | 284 | } |
274 | 285 | ||
286 | if (!current && !wildcard && !type && set_input_type(ic)) { | ||
287 | for (i = 0; i < config->input_type_configs->length; i++) { | ||
288 | struct input_config *tc = config->input_type_configs->items[i]; | ||
289 | if (strcmp(ic->input_type, tc->identifier + 5) == 0) { | ||
290 | current = new_input_config(ic->identifier); | ||
291 | current->input_type = ic->input_type; | ||
292 | merge_input_config(current, tc); | ||
293 | new_current = true; | ||
294 | break; | ||
295 | } | ||
296 | } | ||
297 | } | ||
298 | |||
275 | i = list_seq_find(config->input_configs, input_identifier_cmp, "*"); | 299 | i = list_seq_find(config->input_configs, input_identifier_cmp, "*"); |
276 | if (!current && i >= 0) { | 300 | if (!current && i >= 0) { |
277 | current = new_input_config(ic->identifier); | 301 | current = new_input_config(ic->identifier); |