diff options
| -rw-r--r-- | rootston/seat.c | 23 | 
1 files changed, 18 insertions, 5 deletions
diff --git a/rootston/seat.c b/rootston/seat.c index 130c7b27..c0cda3b0 100644 --- a/rootston/seat.c +++ b/rootston/seat.c @@ -293,11 +293,6 @@ struct roots_seat *roots_seat_create(struct roots_input *input, char *name) {  		return NULL;  	} -	wlr_seat_set_capabilities(seat->seat, -		WL_SEAT_CAPABILITY_KEYBOARD | -		WL_SEAT_CAPABILITY_POINTER | -		WL_SEAT_CAPABILITY_TOUCH); -  	wl_list_insert(&input->seats, &seat->link);  	seat->seat_destroy.notify = roots_seat_handle_seat_destroy; @@ -306,6 +301,20 @@ struct roots_seat *roots_seat_create(struct roots_input *input, char *name) {  	return seat;  } +static void seat_update_capabilities(struct roots_seat *seat) { +	uint32_t caps = 0; +	if (!wl_list_empty(&seat->keyboards)) { +		caps |= WL_SEAT_CAPABILITY_KEYBOARD; +	} +	if (!wl_list_empty(&seat->pointers) || !wl_list_empty(&seat->tablet_tools)) { +		caps |= WL_SEAT_CAPABILITY_POINTER; +	} +	if (!wl_list_empty(&seat->touch)) { +		caps |= WL_SEAT_CAPABILITY_TOUCH; +	} +	wlr_seat_set_capabilities(seat->seat, caps); +} +  static void seat_add_keyboard(struct roots_seat *seat,  		struct wlr_input_device *device) {  	assert(device->type == WLR_INPUT_DEVICE_KEYBOARD); @@ -404,6 +413,8 @@ void roots_seat_add_device(struct roots_seat *seat,  		seat_add_tablet_tool(seat, device);  		break;  	} + +	seat_update_capabilities(seat);  }  static void seat_remove_keyboard(struct roots_seat *seat, @@ -480,6 +491,8 @@ void roots_seat_remove_device(struct roots_seat *seat,  		seat_remove_tablet_tool(seat, device);  		break;  	} + +	seat_update_capabilities(seat);  }  void roots_seat_configure_xcursor(struct roots_seat *seat) {  | 
