diff --git a/src/config/libinput.c b/src/config/libinput.c index e55e990b..4b61d546 100644 --- a/src/config/libinput.c +++ b/src/config/libinput.c @@ -3,6 +3,7 @@ #include #include "common/mem.h" +#include "common/list.h" #include "config/libinput.h" #include "config/rcxml.h" @@ -49,20 +50,21 @@ libinput_category_create(void) { struct libinput_category *l = znew(*l); libinput_category_init(l); - wl_list_insert(&rc.libinput_categories, &l->link); + wl_list_append(&rc.libinput_categories, &l->link); return l; } -/* - * The default category is the first one with type == DEFAULT_DEVICE and - * no name. After rcxml_read(), a default category always exists. - */ +/* After rcxml_read(), a default category always exists. */ struct libinput_category * libinput_category_get_default(void) { struct libinput_category *l; - wl_list_for_each(l, &rc.libinput_categories, link) { - if (l->type == DEFAULT_DEVICE && !l->name) { + /* + * Iterate in reverse to get the last one added in case multiple + * 'default' profiles were created. + */ + wl_list_for_each_reverse(l, &rc.libinput_categories, link) { + if (l->type == DEFAULT_DEVICE) { return l; } } diff --git a/src/seat.c b/src/seat.c index f450999b..8636314c 100644 --- a/src/seat.c +++ b/src/seat.c @@ -79,7 +79,7 @@ configure_libinput(struct wlr_input_device *wlr_input_device) device_type_from_wlr_device(wlr_input_device); struct libinput_category *device_category, *dc = NULL; - wl_list_for_each(device_category, &rc.libinput_categories, link) { + wl_list_for_each_reverse(device_category, &rc.libinput_categories, link) { if (device_category->name) { if (!strcasecmp(wlr_input_device->name, device_category->name)) {