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...
This commit is contained in:
Ryan Dwyer 2018-09-23 22:00:18 +10:00
parent c2c257b884
commit 271b24ddfb

View file

@ -348,17 +348,33 @@ struct sway_seat *seat_create(struct sway_input_manager *input,
seat->input = input; seat->input = input;
wl_list_init(&seat->devices); 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); wl_list_insert(&input->seats, &seat->link);
return seat; 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, static void seat_apply_input_config(struct sway_seat *seat,
struct sway_seat_device *sway_device) { struct sway_seat_device *sway_device) {
const char *mapped_to_output = NULL; 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); wl_list_insert(&seat->devices, &seat_device->link);
seat_configure_device(seat, input_device); seat_configure_device(seat, input_device);
seat_update_capabilities(seat);
} }
void seat_remove_device(struct sway_seat *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); input_device->identifier, seat->wlr_seat->name);
seat_device_destroy(seat_device); seat_device_destroy(seat_device);
seat_update_capabilities(seat);
} }
void seat_configure_xcursor(struct sway_seat *seat) { void seat_configure_xcursor(struct sway_seat *seat) {