From 11d5284e832b3a4f438cfd3da13aa7639b2faa1a Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Fri, 28 Oct 2022 21:10:40 +0900 Subject: [PATCH] virtual keyboards: add virtual keyboards to seat list Without adding the keyboard to seat list we wouldn't properly declare keyboard capability, making the keyboard not work in headless mode. We actually need to free this at some point so adding to the list is most sensible, but we still do not want to group virtual keyboards with regular ones so add a new 'is_virtual' bool to cg_keyboard_group so we can skip these for grouping. --- seat.c | 8 ++++---- seat.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/seat.c b/seat.c index 39d8f0b..f8c0524 100644 --- a/seat.c +++ b/seat.c @@ -320,6 +320,8 @@ cg_keyboard_group_add(struct wlr_input_device *device, struct cg_seat *seat, boo struct cg_keyboard_group *group; wl_list_for_each (group, &seat->keyboard_groups, link) { + if (group->is_virtual) + continue; struct wlr_keyboard_group *wlr_group = group->wlr_group; if (wlr_keyboard_group_add_keyboard(wlr_group, wlr_keyboard)) { wlr_log(WLR_DEBUG, "Added new keyboard to existing group"); @@ -337,6 +339,7 @@ create_new: return; } cg_group->seat = seat; + cg_group->is_virtual = virtual; cg_group->wlr_group = wlr_keyboard_group_create(); if (cg_group->wlr_group == NULL) { wlr_log(WLR_ERROR, "Failed to create wlr keyboard group."); @@ -352,10 +355,7 @@ create_new: wlr_log(WLR_DEBUG, "Created keyboard group"); wlr_keyboard_group_add_keyboard(cg_group->wlr_group, wlr_keyboard); - if (!virtual) - wl_list_insert(&seat->keyboard_groups, &cg_group->link); - else - wl_list_init(&cg_group->link); + wl_list_insert(&seat->keyboard_groups, &cg_group->link); wl_signal_add(&cg_group->wlr_group->keyboard.events.key, &cg_group->key); cg_group->key.notify = handle_keyboard_group_key; diff --git a/seat.h b/seat.h index fefc5c9..5f455e4 100644 --- a/seat.h +++ b/seat.h @@ -61,6 +61,7 @@ struct cg_keyboard_group { struct wl_listener key; struct wl_listener modifiers; struct wl_list link; // cg_seat::keyboard_groups + bool is_virtual; }; struct cg_pointer {