1
0
mirror of https://github.com/brl/mutter.git synced 2025-03-25 20:53:54 +00:00

backends: Update MetaInputSettings to apply settings based on capabilities

Since devices may be multiple things now, check all capabilities in order
to ensure all aspects of the device are correctly configured.

This change does the following observations:
- Devices that have TOUCHPAD | POINTER capabilities prefer the 'touchpad'
  settings path. The regular pointer settings path is left for all
  non-touchpads.
- Devices that are both a tablet and a touchscreen prefer the tablet
  relocatable schema. This works for both aspects as the touchscreen
  schema is a subset of the tablet one.

Other than that it's a rather boring, even if verbose search and replace.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2331>
This commit is contained in:
Carlos Garnacho 2022-03-08 17:51:40 +01:00 committed by Marge Bot
parent fff3654941
commit 286562ea53

@ -109,9 +109,27 @@ enum
static guint signals[N_SIGNALS] = { 0 }; static guint signals[N_SIGNALS] = { 0 };
static gboolean
device_matches_capabilities (ClutterInputDevice *device,
ClutterInputCapabilities require_capabilities,
ClutterInputCapabilities reject_capabilities)
{
ClutterInputCapabilities capabilities;
capabilities = clutter_input_device_get_capabilities (device);
if ((capabilities & require_capabilities) != require_capabilities)
return FALSE;
if ((capabilities & reject_capabilities) != 0)
return FALSE;
return TRUE;
}
static GSList * static GSList *
meta_input_settings_get_devices (MetaInputSettings *settings, meta_input_settings_get_devices (MetaInputSettings *settings,
ClutterInputDeviceType type) ClutterInputCapabilities require_capabilities,
ClutterInputCapabilities reject_capabilities)
{ {
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
GList *l; GList *l;
@ -123,8 +141,14 @@ meta_input_settings_get_devices (MetaInputSettings *settings,
{ {
ClutterInputDevice *device = l->data; ClutterInputDevice *device = l->data;
if (clutter_input_device_get_device_type (device) == type && if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_LOGICAL)
clutter_input_device_get_device_mode (device) != CLUTTER_INPUT_MODE_LOGICAL) continue;
if (!device_matches_capabilities (device,
require_capabilities,
reject_capabilities))
continue;
list = g_slist_prepend (list, device); list = g_slist_prepend (list, device);
} }
@ -161,14 +185,17 @@ settings_device_set_bool_setting (MetaInputSettings *input_settings,
static void static void
settings_set_bool_setting (MetaInputSettings *input_settings, settings_set_bool_setting (MetaInputSettings *input_settings,
ClutterInputDeviceType type, ClutterInputCapabilities capabilities,
ClutterInputCapabilities unset_capabilities,
ConfigBoolMappingFunc mapping_func, ConfigBoolMappingFunc mapping_func,
ConfigBoolFunc func, ConfigBoolFunc func,
gboolean enabled) gboolean enabled)
{ {
GSList *devices, *l; GSList *devices, *l;
devices = meta_input_settings_get_devices (input_settings, type); devices = meta_input_settings_get_devices (input_settings,
capabilities,
unset_capabilities);
for (l = devices; l; l = l->next) for (l = devices; l; l = l->next)
{ {
@ -193,13 +220,16 @@ settings_device_set_double_setting (MetaInputSettings *input_settings,
static void static void
settings_set_double_setting (MetaInputSettings *input_settings, settings_set_double_setting (MetaInputSettings *input_settings,
ClutterInputDeviceType type, ClutterInputCapabilities capabilities,
ClutterInputCapabilities unset_capabilities,
ConfigDoubleFunc func, ConfigDoubleFunc func,
gdouble value) gdouble value)
{ {
GSList *devices, *d; GSList *devices, *d;
devices = meta_input_settings_get_devices (input_settings, type); devices = meta_input_settings_get_devices (input_settings,
capabilities,
unset_capabilities);
for (d = devices; d; d = d->next) for (d = devices; d; d = d->next)
settings_device_set_double_setting (input_settings, d->data, func, value); settings_device_set_double_setting (input_settings, d->data, func, value);
@ -218,13 +248,16 @@ settings_device_set_uint_setting (MetaInputSettings *input_settings,
static void static void
settings_set_uint_setting (MetaInputSettings *input_settings, settings_set_uint_setting (MetaInputSettings *input_settings,
ClutterInputDeviceType type, ClutterInputCapabilities capabilities,
ClutterInputCapabilities unset_capabilities,
ConfigUintFunc func, ConfigUintFunc func,
guint value) guint value)
{ {
GSList *devices, *d; GSList *devices, *d;
devices = meta_input_settings_get_devices (input_settings, type); devices = meta_input_settings_get_devices (input_settings,
capabilities,
unset_capabilities);
for (d = devices; d; d = d->next) for (d = devices; d; d = d->next)
settings_device_set_uint_setting (input_settings, d->data, func, value); settings_device_set_uint_setting (input_settings, d->data, func, value);
@ -242,7 +275,9 @@ update_touchpad_left_handed (MetaInputSettings *input_settings,
gboolean enabled = FALSE; gboolean enabled = FALSE;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -272,7 +307,10 @@ update_touchpad_left_handed (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL,
input_settings_class->set_left_handed, input_settings_class->set_left_handed,
enabled); enabled);
} }
@ -287,7 +325,9 @@ update_mouse_left_handed (MetaInputSettings *input_settings,
gboolean enabled; gboolean enabled;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_POINTER_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_POINTER,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -304,7 +344,10 @@ update_mouse_left_handed (MetaInputSettings *input_settings,
{ {
GDesktopTouchpadHandedness touchpad_handedness; GDesktopTouchpadHandedness touchpad_handedness;
settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, NULL, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_POINTER,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
NULL,
input_settings_class->set_left_handed, input_settings_class->set_left_handed,
enabled); enabled);
@ -373,20 +416,19 @@ update_pointer_accel_profile (MetaInputSettings *input_settings,
} }
static GSettings * static GSettings *
get_settings_for_device_type (MetaInputSettings *input_settings, get_settings_for_capabilities (MetaInputSettings *input_settings,
ClutterInputDeviceType type) ClutterInputCapabilities capabilities)
{ {
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
switch (type)
{ if (capabilities & CLUTTER_INPUT_CAPABILITY_TOUCHPAD)
case CLUTTER_POINTER_DEVICE:
return priv->mouse_settings;
case CLUTTER_TOUCHPAD_DEVICE:
return priv->touchpad_settings; return priv->touchpad_settings;
default: if (capabilities & CLUTTER_INPUT_CAPABILITY_POINTER)
return priv->mouse_settings;
return NULL; return NULL;
}
} }
static void static void
@ -417,7 +459,9 @@ update_middle_click_emulation (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_POINTER,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL, func, NULL, func,
g_settings_get_boolean (settings, key)); g_settings_get_boolean (settings, key));
} }
@ -435,8 +479,8 @@ update_device_speed (MetaInputSettings *input_settings,
if (device) if (device)
{ {
settings = get_settings_for_device_type (input_settings, settings = get_settings_for_capabilities (input_settings,
clutter_input_device_get_device_type (device)); clutter_input_device_get_capabilities (device));
if (!settings) if (!settings)
return; return;
@ -445,11 +489,20 @@ update_device_speed (MetaInputSettings *input_settings,
} }
else else
{ {
settings = get_settings_for_device_type (input_settings, CLUTTER_POINTER_DEVICE); settings = get_settings_for_capabilities (input_settings,
settings_set_double_setting (input_settings, CLUTTER_POINTER_DEVICE, func, CLUTTER_INPUT_CAPABILITY_POINTER);
settings_set_double_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_POINTER,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
func,
g_settings_get_double (settings, key)); g_settings_get_double (settings, key));
settings = get_settings_for_device_type (input_settings, CLUTTER_TOUCHPAD_DEVICE);
settings_set_double_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, func, settings = get_settings_for_capabilities (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD);
settings_set_double_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
func,
g_settings_get_double (settings, key)); g_settings_get_double (settings, key));
} }
} }
@ -466,8 +519,8 @@ update_device_natural_scroll (MetaInputSettings *input_settings,
if (device) if (device)
{ {
settings = get_settings_for_device_type (input_settings, settings = get_settings_for_capabilities (input_settings,
clutter_input_device_get_device_type (device)); clutter_input_device_get_capabilities (device));
if (!settings) if (!settings)
return; return;
@ -476,12 +529,19 @@ update_device_natural_scroll (MetaInputSettings *input_settings,
} }
else else
{ {
settings = get_settings_for_device_type (input_settings, CLUTTER_POINTER_DEVICE); settings = get_settings_for_capabilities (input_settings,
settings_set_bool_setting (input_settings, CLUTTER_POINTER_DEVICE, CLUTTER_INPUT_CAPABILITY_POINTER);
settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_POINTER,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
NULL, func, NULL, func,
g_settings_get_boolean (settings, key)); g_settings_get_boolean (settings, key));
settings = get_settings_for_device_type (input_settings, CLUTTER_TOUCHPAD_DEVICE);
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings = get_settings_for_capabilities (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD);
settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL, func, NULL, func,
g_settings_get_boolean (settings, key)); g_settings_get_boolean (settings, key));
} }
@ -498,7 +558,9 @@ update_touchpad_disable_while_typing (MetaInputSettings *input_settings,
const gchar *key = "disable-while-typing"; const gchar *key = "disable-while-typing";
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -507,8 +569,8 @@ update_touchpad_disable_while_typing (MetaInputSettings *input_settings,
if (device) if (device)
{ {
settings = get_settings_for_device_type (input_settings, settings = get_settings_for_capabilities (input_settings,
clutter_input_device_get_device_type (device)); clutter_input_device_get_capabilities (device));
if (!settings) if (!settings)
return; return;
@ -519,7 +581,10 @@ update_touchpad_disable_while_typing (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL,
input_settings_class->set_disable_while_typing, input_settings_class->set_disable_while_typing,
enabled); enabled);
} }
@ -533,7 +598,10 @@ device_is_tablet_touchpad (MetaInputSettings *input_settings,
WacomIntegrationFlags flags = 0; WacomIntegrationFlags flags = 0;
WacomDevice *wacom_device; WacomDevice *wacom_device;
if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) if (device &&
!device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return FALSE; return FALSE;
wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device));
@ -568,7 +636,9 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
gboolean enabled; gboolean enabled;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -584,7 +654,9 @@ update_touchpad_tap_enabled (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
force_enable_on_tablet, force_enable_on_tablet,
input_settings_class->set_tap_enabled, input_settings_class->set_tap_enabled,
enabled); enabled);
@ -600,7 +672,9 @@ update_touchpad_tap_button_map (MetaInputSettings *input_settings,
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -615,7 +689,9 @@ update_touchpad_tap_button_map (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_uint_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_uint_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
(ConfigUintFunc) input_settings_class->set_tap_button_map, (ConfigUintFunc) input_settings_class->set_tap_button_map,
method); method);
} }
@ -630,7 +706,9 @@ update_touchpad_tap_and_drag_enabled (MetaInputSettings *input_settings,
gboolean enabled; gboolean enabled;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -646,7 +724,9 @@ update_touchpad_tap_and_drag_enabled (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
force_enable_on_tablet, force_enable_on_tablet,
input_settings_class->set_tap_and_drag_enabled, input_settings_class->set_tap_and_drag_enabled,
enabled); enabled);
@ -662,7 +742,9 @@ update_touchpad_tap_and_drag_lock_enabled (MetaInputSettings *input_settings,
gboolean enabled; gboolean enabled;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -677,7 +759,9 @@ update_touchpad_tap_and_drag_lock_enabled (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL, NULL,
input_settings_class->set_tap_and_drag_lock_enabled, input_settings_class->set_tap_and_drag_lock_enabled,
enabled); enabled);
@ -695,7 +779,9 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -716,7 +802,10 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL,
(ConfigBoolFunc) input_settings_class->set_edge_scroll, (ConfigBoolFunc) input_settings_class->set_edge_scroll,
edge_scroll_enabled); edge_scroll_enabled);
} }
@ -731,7 +820,9 @@ update_touchpad_two_finger_scroll (MetaInputSettings *input_settings,
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -750,7 +841,10 @@ update_touchpad_two_finger_scroll (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, NULL, settings_set_bool_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
NULL,
(ConfigBoolFunc) input_settings_class->set_two_finger_scroll, (ConfigBoolFunc) input_settings_class->set_two_finger_scroll,
two_finger_scroll_enabled); two_finger_scroll_enabled);
} }
@ -769,7 +863,9 @@ update_touchpad_click_method (MetaInputSettings *input_settings,
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -784,7 +880,9 @@ update_touchpad_click_method (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_uint_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_uint_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
(ConfigUintFunc) input_settings_class->set_click_method, (ConfigUintFunc) input_settings_class->set_click_method,
method); method);
} }
@ -799,7 +897,9 @@ update_touchpad_send_events (MetaInputSettings *input_settings,
GDesktopDeviceSendEvents mode; GDesktopDeviceSendEvents mode;
if (device && if (device &&
clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) !device_matches_capabilities (device,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE))
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -814,7 +914,9 @@ update_touchpad_send_events (MetaInputSettings *input_settings,
} }
else else
{ {
settings_set_uint_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE, settings_set_uint_setting (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE,
input_settings_class->set_send_events, input_settings_class->set_send_events,
mode); mode);
} }
@ -890,9 +992,8 @@ update_tablet_keep_aspect (MetaInputSettings *input_settings,
gboolean keep_aspect; gboolean keep_aspect;
double aspect_ratio; double aspect_ratio;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_TOOL) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
return; return;
priv = meta_input_settings_get_instance_private (input_settings); priv = meta_input_settings_get_instance_private (input_settings);
@ -933,9 +1034,8 @@ update_tablet_mapping (MetaInputSettings *input_settings,
MetaInputSettingsClass *input_settings_class; MetaInputSettingsClass *input_settings_class;
GDesktopTabletMapping mapping; GDesktopTabletMapping mapping;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_TOOL) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
return; return;
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
@ -969,9 +1069,8 @@ update_tablet_area (MetaInputSettings *input_settings,
const gdouble *area; const gdouble *area;
gsize n_elems; gsize n_elems;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_TOOL) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
return; return;
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
@ -1010,10 +1109,9 @@ update_tablet_left_handed (MetaInputSettings *input_settings,
MetaInputSettingsClass *input_settings_class; MetaInputSettingsClass *input_settings_class;
gboolean enabled; gboolean enabled;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && (CLUTTER_INPUT_CAPABILITY_TABLET_TOOL |
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_PAD)) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_PAD_DEVICE)
return; return;
#ifdef HAVE_LIBWACOM #ifdef HAVE_LIBWACOM
@ -1125,14 +1223,13 @@ static void
apply_mappable_device_settings (MetaInputSettings *input_settings, apply_mappable_device_settings (MetaInputSettings *input_settings,
DeviceMappingInfo *info) DeviceMappingInfo *info)
{ {
ClutterInputDeviceType device_type; ClutterInputCapabilities capabilities;
device_type = clutter_input_device_get_device_type (info->device); capabilities = clutter_input_device_get_capabilities (info->device);
if (device_type == CLUTTER_TABLET_DEVICE || if (capabilities &
device_type == CLUTTER_PEN_DEVICE || (CLUTTER_INPUT_CAPABILITY_TABLET_TOOL |
device_type == CLUTTER_ERASER_DEVICE || CLUTTER_INPUT_CAPABILITY_TABLET_PAD))
device_type == CLUTTER_PAD_DEVICE)
{ {
update_tablet_mapping (input_settings, info->settings, info->device); update_tablet_mapping (input_settings, info->settings, info->device);
update_tablet_area (input_settings, info->settings, info->device); update_tablet_area (input_settings, info->settings, info->device);
@ -1223,28 +1320,28 @@ static GSettings *
lookup_device_settings (ClutterInputDevice *device) lookup_device_settings (ClutterInputDevice *device)
{ {
const gchar *group, *schema, *vendor, *product; const gchar *group, *schema, *vendor, *product;
ClutterInputDeviceType type; ClutterInputCapabilities capabilities;
GSettings *settings; GSettings *settings;
gchar *path; gchar *path;
type = clutter_input_device_get_device_type (device); capabilities = clutter_input_device_get_capabilities (device);
if (type == CLUTTER_TOUCHSCREEN_DEVICE) if ((capabilities &
{ (CLUTTER_INPUT_CAPABILITY_TABLET_TOOL |
group = "touchscreens"; CLUTTER_INPUT_CAPABILITY_TABLET_PAD)) != 0)
schema = "org.gnome.desktop.peripherals.touchscreen";
}
else if (type == CLUTTER_TABLET_DEVICE ||
type == CLUTTER_PEN_DEVICE ||
type == CLUTTER_ERASER_DEVICE ||
type == CLUTTER_CURSOR_DEVICE ||
type == CLUTTER_PAD_DEVICE)
{ {
group = "tablets"; group = "tablets";
schema = "org.gnome.desktop.peripherals.tablet"; schema = "org.gnome.desktop.peripherals.tablet";
} }
else if ((capabilities & CLUTTER_INPUT_CAPABILITY_TOUCH) != 0)
{
group = "touchscreens";
schema = "org.gnome.desktop.peripherals.touchscreen";
}
else else
{
return NULL; return NULL;
}
vendor = clutter_input_device_get_vendor_id (device); vendor = clutter_input_device_get_vendor_id (device);
product = clutter_input_device_get_product_id (device); product = clutter_input_device_get_product_id (device);
@ -1310,15 +1407,14 @@ check_add_mappable_device (MetaInputSettings *input_settings,
{ {
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
DeviceMappingInfo *info; DeviceMappingInfo *info;
ClutterInputDeviceType device_type; ClutterInputCapabilities capabilities;
GSettings *settings; GSettings *settings;
device_type = clutter_input_device_get_device_type (device); capabilities = clutter_input_device_get_capabilities (device);
if ((device_type == CLUTTER_TABLET_DEVICE || if ((capabilities &
device_type == CLUTTER_PEN_DEVICE || (CLUTTER_INPUT_CAPABILITY_TABLET_TOOL |
device_type == CLUTTER_ERASER_DEVICE || CLUTTER_INPUT_CAPABILITY_TABLET_PAD)) != 0 &&
device_type == CLUTTER_PAD_DEVICE) &&
g_getenv ("MUTTER_DISABLE_WACOM_CONFIGURATION") != NULL) g_getenv ("MUTTER_DISABLE_WACOM_CONFIGURATION") != NULL)
return FALSE; return FALSE;
@ -1334,7 +1430,7 @@ check_add_mappable_device (MetaInputSettings *input_settings,
info->device = device; info->device = device;
info->settings = settings; info->settings = settings;
if (device_type == CLUTTER_PAD_DEVICE) if ((capabilities & CLUTTER_INPUT_CAPABILITY_TABLET_PAD) != 0)
{ {
info->group_modes = info->group_modes =
g_new0 (guint, clutter_input_device_get_n_mode_groups (device)); g_new0 (guint, clutter_input_device_get_n_mode_groups (device));
@ -1398,9 +1494,8 @@ update_stylus_pressure (MetaInputSettings *input_settings,
GVariant *variant; GVariant *variant;
gsize n_elems; gsize n_elems;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_TOOL) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
return; return;
if (!tool) if (!tool)
@ -1431,9 +1526,8 @@ update_stylus_buttonmap (MetaInputSettings *input_settings,
GDesktopStylusButtonAction primary, secondary, tertiary; GDesktopStylusButtonAction primary, secondary, tertiary;
GSettings *tool_settings; GSettings *tool_settings;
if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && if ((clutter_input_device_get_capabilities (device) &
clutter_input_device_get_device_type (device) != CLUTTER_PEN_DEVICE && CLUTTER_INPUT_CAPABILITY_TABLET_TOOL) == 0)
clutter_input_device_get_device_type (device) != CLUTTER_ERASER_DEVICE)
return; return;
if (!tool) if (!tool)
@ -1466,7 +1560,8 @@ evaluate_two_finger_scrolling (MetaInputSettings *input_settings,
MetaInputSettingsClass *klass; MetaInputSettingsClass *klass;
MetaInputSettingsPrivate *priv; MetaInputSettingsPrivate *priv;
if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) if ((clutter_input_device_get_capabilities (device) &
CLUTTER_INPUT_CAPABILITY_TOUCHPAD) == 0)
return; return;
klass = META_INPUT_SETTINGS_GET_CLASS (input_settings); klass = META_INPUT_SETTINGS_GET_CLASS (input_settings);
@ -1594,7 +1689,9 @@ meta_input_settings_constructed (GObject *object)
MetaInputSettings *input_settings = META_INPUT_SETTINGS (object); MetaInputSettings *input_settings = META_INPUT_SETTINGS (object);
GSList *devices, *d; GSList *devices, *d;
devices = meta_input_settings_get_devices (input_settings, CLUTTER_TOUCHPAD_DEVICE); devices = meta_input_settings_get_devices (input_settings,
CLUTTER_INPUT_CAPABILITY_TOUCHPAD,
CLUTTER_INPUT_CAPABILITY_NONE);
for (d = devices; d; d = d->next) for (d = devices; d; d = d->next)
evaluate_two_finger_scrolling (input_settings, d->data); evaluate_two_finger_scrolling (input_settings, d->data);