mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	Add touchpad device type
				
					
				
			It is nice to have finer granularity for device types to allow for configurations such as using `naturalScroll` on touchpads, but not on regular pointer devices such as mice.
This commit is contained in:
		
							parent
							
								
									e3cd189769
								
							
						
					
					
						commit
						6faee17d20
					
				
					 6 changed files with 30 additions and 15 deletions
				
			
		| 
						 | 
					@ -435,11 +435,11 @@ windows using the mouse.
 | 
				
			||||||
*<libinput><device category="">*
 | 
					*<libinput><device category="">*
 | 
				
			||||||
	Define a category of devices to use the configuration values that
 | 
						Define a category of devices to use the configuration values that
 | 
				
			||||||
	follow. The category can be set to touch (devices that define a width
 | 
						follow. The category can be set to touch (devices that define a width
 | 
				
			||||||
	and height), non-touch, default, or the name of a device. You can obtain
 | 
						and height), touchpad, non-touch, default, or the name of a device. You
 | 
				
			||||||
	your devices name by running *libinput list-devices* (you may need to
 | 
						can obtain your devices name by running *libinput list-devices* (you may
 | 
				
			||||||
	be root or a part of the input group to perform this.) Any members of
 | 
						need to be root or a part of the input group to perform this.) Any
 | 
				
			||||||
	this category that are not set use the default for the device. With the
 | 
						members of this category that are not set use the default for the
 | 
				
			||||||
	exception of tap-to-click, which is enabled by default.
 | 
						device. With the exception of tap-to-click, which is enabled by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*<libinput><device category=""><naturalScroll>* [yes|no]
 | 
					*<libinput><device category=""><naturalScroll>* [yes|no]
 | 
				
			||||||
	Use natural scrolling for this category if available.
 | 
						Use natural scrolling for this category if available.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -394,9 +394,9 @@
 | 
				
			||||||
  </mouse>
 | 
					  </mouse>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <!--
 | 
					  <!--
 | 
				
			||||||
    The *category* element can be set to touch, non-touch, default or the name
 | 
					    The *category* element can be set to touch, touchpad, non-touch, default or
 | 
				
			||||||
    of a device. You can obtain device names by running *libinput list-devices*
 | 
					    the name of a device. You can obtain device names by running *libinput
 | 
				
			||||||
    as root or member of the input group.
 | 
					    list-devices* as root or member of the input group.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Tap is set to *yes* be default. All others are left blank in order to use
 | 
					    Tap is set to *yes* be default. All others are left blank in order to use
 | 
				
			||||||
    device defaults.
 | 
					    device defaults.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@
 | 
				
			||||||
enum device_type {
 | 
					enum device_type {
 | 
				
			||||||
	DEFAULT_DEVICE,
 | 
						DEFAULT_DEVICE,
 | 
				
			||||||
	TOUCH_DEVICE,
 | 
						TOUCH_DEVICE,
 | 
				
			||||||
 | 
						TOUCHPAD_DEVICE,
 | 
				
			||||||
	NON_TOUCH_DEVICE,
 | 
						NON_TOUCH_DEVICE,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,9 @@ get_device_type(const char *s)
 | 
				
			||||||
	if (!strcasecmp(s, "touch")) {
 | 
						if (!strcasecmp(s, "touch")) {
 | 
				
			||||||
		return TOUCH_DEVICE;
 | 
							return TOUCH_DEVICE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (!strcasecmp(s, "touchpad")) {
 | 
				
			||||||
 | 
							return TOUCHPAD_DEVICE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if (!strcasecmp(s, "non-touch")) {
 | 
						if (!strcasecmp(s, "non-touch")) {
 | 
				
			||||||
		return NON_TOUCH_DEVICE;
 | 
							return NON_TOUCH_DEVICE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -460,6 +460,7 @@ fill_libinput_category(char *nodename, char *content)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!strcmp(nodename, "category")) {
 | 
						if (!strcmp(nodename, "category")) {
 | 
				
			||||||
		if (!strcmp(content, "touch")
 | 
							if (!strcmp(content, "touch")
 | 
				
			||||||
 | 
									|| !strcmp(content, "touchpad")
 | 
				
			||||||
				|| !strcmp(content, "non-touch")
 | 
									|| !strcmp(content, "non-touch")
 | 
				
			||||||
				|| !strcmp(content, "default")) {
 | 
									|| !strcmp(content, "default")) {
 | 
				
			||||||
			current_libinput_category->type = get_device_type(content);
 | 
								current_libinput_category->type = get_device_type(content);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								src/seat.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								src/seat.c
									
										
									
									
									
								
							| 
						 | 
					@ -33,17 +33,28 @@ input_device_destroy(struct wl_listener *listener, void *data)
 | 
				
			||||||
	free(input);
 | 
						free(input);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool
 | 
					static enum device_type
 | 
				
			||||||
is_touch_device(struct wlr_input_device *wlr_input_device)
 | 
					device_type_from_wlr_device(struct wlr_input_device *wlr_input_device)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	switch (wlr_input_device->type) {
 | 
						switch (wlr_input_device->type) {
 | 
				
			||||||
	case WLR_INPUT_DEVICE_TOUCH:
 | 
						case WLR_INPUT_DEVICE_TOUCH:
 | 
				
			||||||
	case WLR_INPUT_DEVICE_TABLET_TOOL:
 | 
						case WLR_INPUT_DEVICE_TABLET_TOOL:
 | 
				
			||||||
		return true;
 | 
							return TOUCH_DEVICE;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return false;
 | 
					
 | 
				
			||||||
 | 
						if (wlr_input_device->type == WLR_INPUT_DEVICE_POINTER &&
 | 
				
			||||||
 | 
								wlr_input_device_is_libinput(wlr_input_device)) {
 | 
				
			||||||
 | 
							struct libinput_device *libinput_device =
 | 
				
			||||||
 | 
								wlr_libinput_get_device_handle(wlr_input_device);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (libinput_device_config_tap_get_finger_count(libinput_device) > 0) {
 | 
				
			||||||
 | 
								return TOUCHPAD_DEVICE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NON_TOUCH_DEVICE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
| 
						 | 
					@ -64,9 +75,8 @@ configure_libinput(struct wlr_input_device *wlr_input_device)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enum device_type current_type;
 | 
						enum device_type current_type =
 | 
				
			||||||
	current_type = is_touch_device(wlr_input_device)
 | 
							device_type_from_wlr_device(wlr_input_device);
 | 
				
			||||||
			? TOUCH_DEVICE : NON_TOUCH_DEVICE;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct libinput_category *device_category, *dc = NULL;
 | 
						struct libinput_category *device_category, *dc = NULL;
 | 
				
			||||||
	wl_list_for_each(device_category, &rc.libinput_categories, link) {
 | 
						wl_list_for_each(device_category, &rc.libinput_categories, link) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue