diff options
| author | Väinö Mäkelä <vaino.o.makela@gmail.com> | 2023-06-01 14:04:26 +0300 | 
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2023-06-03 10:43:12 +0000 | 
| commit | 247e86dca9917b279e9b932805763a5bb1dc7bb2 (patch) | |
| tree | 101f324a698ca8af27b59b1ea3e3d10a3066f152 | |
| parent | 16948c73696dced95a96cc1a87d9b7393f638fab (diff) | |
| download | wlroots-247e86dca9917b279e9b932805763a5bb1dc7bb2.tar.xz | |
keyboard-shortcuts-inhibit: Handle inert seats
| -rw-r--r-- | types/wlr_keyboard_shortcuts_inhibit_v1.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/types/wlr_keyboard_shortcuts_inhibit_v1.c b/types/wlr_keyboard_shortcuts_inhibit_v1.c index cc9bac14..c5401907 100644 --- a/types/wlr_keyboard_shortcuts_inhibit_v1.c +++ b/types/wlr_keyboard_shortcuts_inhibit_v1.c @@ -93,6 +93,20 @@ static void manager_handle_inhibit_shortcuts(struct wl_client *client,  		wlr_keyboard_shortcuts_inhibit_manager_v1_from_resource(  				manager_resource); +	uint32_t version = wl_resource_get_version(manager_resource); +	struct wl_resource *inhibitor_resource = wl_resource_create(client, +		&zwp_keyboard_shortcuts_inhibitor_v1_interface, version, id); +	if (inhibitor_resource == NULL) { +		wl_client_post_no_memory(client); +		return; +	} +	wl_resource_set_implementation(inhibitor_resource, +		&keyboard_shortcuts_inhibitor_impl, NULL, +		keyboard_shortcuts_inhibitor_v1_handle_resource_destroy); +	if (seat_client == NULL) { +		return; +	} +  	struct wlr_seat *seat = seat_client->seat;  	struct wlr_keyboard_shortcuts_inhibitor_v1 *existing_inhibitor;  	wl_list_for_each(existing_inhibitor, &manager->inhibitors, link) { @@ -115,15 +129,6 @@ static void manager_handle_inhibit_shortcuts(struct wl_client *client,  		return;  	} -	uint32_t version = wl_resource_get_version(manager_resource); -	struct wl_resource *inhibitor_resource = wl_resource_create(client, -		&zwp_keyboard_shortcuts_inhibitor_v1_interface, version, id); -	if (!inhibitor_resource) { -		wl_client_post_no_memory(client); -		free(inhibitor); -		return; -	} -  	inhibitor->resource = inhibitor_resource;  	inhibitor->surface = surface;  	inhibitor->seat = seat; @@ -138,10 +143,7 @@ static void manager_handle_inhibit_shortcuts(struct wl_client *client,  		keyboard_shortcuts_inhibitor_handle_seat_destroy;  	wl_signal_add(&seat->events.destroy, &inhibitor->seat_destroy); -	wl_resource_set_implementation(inhibitor_resource, -		&keyboard_shortcuts_inhibitor_impl, inhibitor, -		keyboard_shortcuts_inhibitor_v1_handle_resource_destroy); - +	wl_resource_set_user_data(inhibitor_resource, inhibitor);  	wl_list_insert(&manager->inhibitors, &inhibitor->link);  	wl_signal_emit_mutable(&manager->events.new_inhibitor, inhibitor);  }  | 
