backend/wayland: add error flow in create_wl_seat
This commit is contained in:
		
							parent
							
								
									36395e5b1c
								
							
						
					
					
						commit
						41bf1c6871
					
				|  | @ -105,7 +105,9 @@ static void registry_global(void *data, struct wl_registry *registry, | ||||||
| 	} else if (strcmp(iface, wl_seat_interface.name) == 0) { | 	} else if (strcmp(iface, wl_seat_interface.name) == 0) { | ||||||
| 		struct wl_seat *wl_seat = wl_registry_bind(registry, name, | 		struct wl_seat *wl_seat = wl_registry_bind(registry, name, | ||||||
| 			&wl_seat_interface, 5); | 			&wl_seat_interface, 5); | ||||||
| 		create_wl_seat(wl_seat, wl); | 		if (!create_wl_seat(wl_seat, wl)) { | ||||||
|  | 			wl_seat_destroy(wl_seat); | ||||||
|  | 		} | ||||||
| 	} else if (strcmp(iface, xdg_wm_base_interface.name) == 0) { | 	} else if (strcmp(iface, xdg_wm_base_interface.name) == 0) { | ||||||
| 		wl->xdg_wm_base = wl_registry_bind(registry, name, | 		wl->xdg_wm_base = wl_registry_bind(registry, name, | ||||||
| 			&xdg_wm_base_interface, 1); | 			&xdg_wm_base_interface, 1); | ||||||
|  |  | ||||||
|  | @ -372,12 +372,17 @@ static struct wlr_wl_input_device *get_wl_input_device_from_input_device( | ||||||
| 	return (struct wlr_wl_input_device *)wlr_dev; | 	return (struct wlr_wl_input_device *)wlr_dev; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl) { | bool create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl) { | ||||||
| 	assert(!wl->seat);  // only one seat supported at the moment
 | 	assert(!wl->seat);  // only one seat supported at the moment
 | ||||||
| 	struct wlr_wl_seat *seat = calloc(1, sizeof(struct wlr_wl_seat)); | 	struct wlr_wl_seat *seat = calloc(1, sizeof(struct wlr_wl_seat)); | ||||||
|  | 	if (!seat) { | ||||||
|  | 		wlr_log_errno(WLR_ERROR, "Allocation failed"); | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
| 	seat->wl_seat = wl_seat; | 	seat->wl_seat = wl_seat; | ||||||
| 	wl->seat = seat; | 	wl->seat = seat; | ||||||
| 	wl_seat_add_listener(wl_seat, &seat_listener, wl); | 	wl_seat_add_listener(wl_seat, &seat_listener, wl); | ||||||
|  | 	return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void destroy_wl_seats(struct wlr_wl_backend *wl) { | void destroy_wl_seats(struct wlr_wl_backend *wl) { | ||||||
|  |  | ||||||
|  | @ -121,7 +121,7 @@ void create_wl_keyboard(struct wl_keyboard *wl_keyboard, struct wlr_wl_backend * | ||||||
| void create_wl_touch(struct wl_touch *wl_touch, struct wlr_wl_backend *wl); | void create_wl_touch(struct wl_touch *wl_touch, struct wlr_wl_backend *wl); | ||||||
| struct wlr_wl_input_device *create_wl_input_device( | struct wlr_wl_input_device *create_wl_input_device( | ||||||
| 	struct wlr_wl_backend *backend, enum wlr_input_device_type type); | 	struct wlr_wl_backend *backend, enum wlr_input_device_type type); | ||||||
| void create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl); | bool create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl); | ||||||
| void destroy_wl_seats(struct wlr_wl_backend *wl); | void destroy_wl_seats(struct wlr_wl_backend *wl); | ||||||
| 
 | 
 | ||||||
| extern const struct wl_seat_listener seat_listener; | extern const struct wl_seat_listener seat_listener; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue