code: drawterm

Download patch

ref: a8a4b24b4e7dc60d98e47fa11771c23711fe846a
parent: 6b448b9bd61307ef3bd3ed69270c8a02100ff40d
author: Jacob Moody <moody@posixcafe.org>
date: Fri Mar 4 15:43:12 EST 2022

gui-wl: dont bind more then one seat

We dont currently have any logic for handling multiseat, so we should
avoid binding more then one seat. This locks us to the first seat, which is
often the default. This also moves the data managers binding over to the
seat binding, these managers are scoped per seat so our binding logic
should reflect that.

--- a/gui-wl/wl-cb.c
+++ b/gui-wl/wl-cb.c
@@ -376,7 +376,6 @@
 static void
 seat_handle_name(void *data, struct wl_seat *seat, const char *name)
 {
-
 }
 
 static const struct wl_seat_listener seat_listener = {
@@ -526,8 +525,14 @@
 	if(strcmp(interface, wl_shm_interface.name) == 0) {
 		wl->shm = wl_registry_bind(registry, name, &wl_shm_interface, 1);
 	} else if(strcmp(interface, wl_seat_interface.name) == 0) {
+		//We don't support multiseat
+		if(wl->seat != nil)
+			return;
 		wl->seat = wl_registry_bind(registry, name, &wl_seat_interface, 4);
 		wl_seat_add_listener(wl->seat, &seat_listener, wl);
+		wl->data_device = wl_data_device_manager_get_data_device(wl->data_device_manager, wl->seat);
+		wl_data_device_add_listener(wl->data_device, &data_device_listener, wl);
+		wl->primsel_device = zwp_primary_selection_device_manager_v1_get_device(wl->primsel, wl->seat);
 	} else if(strcmp(interface, wl_compositor_interface.name) == 0) {
 		wl->compositor = wl_registry_bind(registry, name, &wl_compositor_interface, 1);
 	} else if(strcmp(interface, xdg_wm_base_interface.name) == 0) {
@@ -573,12 +578,8 @@
 	wl->xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
 
 	if(wl->shm == nil || wl->compositor == nil || wl->xdg_wm_base == nil || wl->seat == nil || wl->decoman == nil || wl->primsel == nil)
-		sysfatal("Registration fell short");
+		sysfatal("registration fell short");
 
-	wl->primsel_device = zwp_primary_selection_device_manager_v1_get_device(wl->primsel, wl->seat);
-
-	wl->data_device = wl_data_device_manager_get_data_device(wl->data_device_manager, wl->seat);
-	wl_data_device_add_listener(wl->data_device, &data_device_listener, wl);
 	wlallocbuffer(wl);
 	wl->surface = wl_compositor_create_surface(wl->compositor);