aboutsummaryrefslogtreecommitdiff
path: root/sway/input
diff options
context:
space:
mode:
authorRyan Dwyer <ryandwyer1@gmail.com>2018-09-23 22:00:18 +1000
committerRyan Dwyer <ryandwyer1@gmail.com>2018-09-23 22:00:18 +1000
commit271b24ddfb4ab06452c90a680aaa81385cf88407 (patch)
tree885181393381b501cd20da0fa026558defb484bd /sway/input
parentc2c257b8846422ba69f8b366c48272393c818cb2 (diff)
Fix GtkMenuBar always opening first item
It seems like advertising that we support touch when we don't, while using SSD, makes GtkMenuBar misbehave. Please don't ask me why...
Diffstat (limited to 'sway/input')
-rw-r--r--sway/input/seat.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 49fe46ba..a9c564e7 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -348,17 +348,33 @@ struct sway_seat *seat_create(struct sway_input_manager *input,
seat->input = input;
wl_list_init(&seat->devices);
- wlr_seat_set_capabilities(seat->wlr_seat,
- WL_SEAT_CAPABILITY_KEYBOARD |
- WL_SEAT_CAPABILITY_POINTER |
- WL_SEAT_CAPABILITY_TOUCH);
-
-
wl_list_insert(&input->seats, &seat->link);
return seat;
}
+static void seat_update_capabilities(struct sway_seat *seat) {
+ uint32_t caps = 0;
+ struct sway_seat_device *seat_device;
+ wl_list_for_each(seat_device, &seat->devices, link) {
+ switch (seat_device->input_device->wlr_device->type) {
+ case WLR_INPUT_DEVICE_KEYBOARD:
+ caps |= WL_SEAT_CAPABILITY_KEYBOARD;
+ break;
+ case WLR_INPUT_DEVICE_POINTER:
+ caps |= WL_SEAT_CAPABILITY_POINTER;
+ break;
+ case WLR_INPUT_DEVICE_TOUCH:
+ caps |= WL_SEAT_CAPABILITY_TOUCH;
+ break;
+ case WLR_INPUT_DEVICE_TABLET_TOOL:
+ case WLR_INPUT_DEVICE_TABLET_PAD:
+ break;
+ }
+ }
+ wlr_seat_set_capabilities(seat->wlr_seat, caps);
+}
+
static void seat_apply_input_config(struct sway_seat *seat,
struct sway_seat_device *sway_device) {
const char *mapped_to_output = NULL;
@@ -489,6 +505,8 @@ void seat_add_device(struct sway_seat *seat,
wl_list_insert(&seat->devices, &seat_device->link);
seat_configure_device(seat, input_device);
+
+ seat_update_capabilities(seat);
}
void seat_remove_device(struct sway_seat *seat,
@@ -503,6 +521,8 @@ void seat_remove_device(struct sway_seat *seat,
input_device->identifier, seat->wlr_seat->name);
seat_device_destroy(seat_device);
+
+ seat_update_capabilities(seat);
}
void seat_configure_xcursor(struct sway_seat *seat) {