From d052f9c07078f50e59b8d44a1db3b2aa8cf66eb6 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 6 Mar 2020 14:53:45 +0100 Subject: [PATCH 47/48] backends: Drop internal WacomDevice in MetaInputSettings Use the one from MetaInputDevice instead. Since we no longer try to ask for WacomDevices that weren't first retrieved: Closes: https://gitlab.gnome.org/GNOME/mutter/issues/1086 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1109 --- src/backends/meta-input-settings-private.h | 5 - src/backends/meta-input-settings.c | 109 +++++---------------- src/core/display.c | 4 +- 3 files changed, 29 insertions(+), 89 deletions(-) diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h index 135b17f1a..f89020884 100644 --- a/src/backends/meta-input-settings-private.h +++ b/src/backends/meta-input-settings-private.h @@ -150,11 +150,6 @@ gchar * meta_input_settings_get_pad_action_label (MetaIn MetaPadActionType action, guint number); -#ifdef HAVE_LIBWACOM -WacomDevice * meta_input_settings_get_tablet_wacom_device (MetaInputSettings *settings, - ClutterInputDevice *device); -#endif - void meta_input_settings_maybe_save_numlock_state (MetaInputSettings *input_settings); void meta_input_settings_maybe_restore_numlock_state (MetaInputSettings *input_settings); diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c index 7c3afdaff..73f4131fe 100644 --- a/src/backends/meta-input-settings.c +++ b/src/backends/meta-input-settings.c @@ -31,6 +31,7 @@ #include #include "backends/meta-backend-private.h" +#include "backends/meta-input-device-private.h" #include "backends/meta-input-settings-private.h" #include "backends/meta-input-mapper-private.h" #include "backends/meta-logical-monitor.h" @@ -59,9 +60,6 @@ struct _DeviceMappingInfo ClutterInputDevice *device; GSettings *settings; gulong changed_id; -#ifdef HAVE_LIBWACOM - WacomDevice *wacom_device; -#endif guint *group_modes; }; @@ -85,10 +83,6 @@ struct _MetaInputSettingsPrivate ClutterVirtualInputDevice *virtual_pad_keyboard; -#ifdef HAVE_LIBWACOM - WacomDeviceDatabase *wacom_db; -#endif - GHashTable *two_finger_devices; /* Pad ring/strip emission */ @@ -177,11 +171,6 @@ meta_input_settings_dispose (GObject *object) g_clear_object (&priv->monitor_manager); -#ifdef HAVE_LIBWACOM - if (priv->wacom_db) - libwacom_database_destroy (priv->wacom_db); -#endif - g_clear_pointer (&priv->two_finger_devices, g_hash_table_destroy); G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object); @@ -576,9 +565,8 @@ device_is_tablet_touchpad (MetaInputSettings *input_settings, if (clutter_input_device_get_device_type (device) != CLUTTER_TOUCHPAD_DEVICE) return FALSE; - wacom_device = - meta_input_settings_get_tablet_wacom_device (input_settings, - device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + if (wacom_device) { flags = libwacom_get_integration_flags (wacom_device); @@ -953,8 +941,7 @@ meta_input_settings_delegate_on_mapper (MetaInputSettings *input_settings, WacomIntegrationFlags flags = 0; wacom_device = - meta_input_settings_get_tablet_wacom_device (input_settings, - device); + meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); if (wacom_device) { @@ -991,8 +978,8 @@ update_tablet_keep_aspect (MetaInputSettings *input_settings, { WacomDevice *wacom_device; - wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings, - device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + /* Keep aspect only makes sense in external tablets */ if (wacom_device && libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE) @@ -1081,8 +1068,8 @@ update_tablet_mapping (MetaInputSettings *input_settings, { WacomDevice *wacom_device; - wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings, - device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + /* Tablet mapping only makes sense on external tablets */ if (wacom_device && (libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)) @@ -1121,8 +1108,8 @@ update_tablet_area (MetaInputSettings *input_settings, { WacomDevice *wacom_device; - wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings, - device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + /* Tablet area only makes sense on system/display integrated tablets */ if (wacom_device && (libwacom_get_integration_flags (wacom_device) & @@ -1163,8 +1150,8 @@ update_tablet_left_handed (MetaInputSettings *input_settings, { WacomDevice *wacom_device; - wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings, - device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + /* Left handed mode only makes sense on external tablets */ if (wacom_device && (libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE)) @@ -1643,10 +1630,6 @@ input_mapper_device_mapped_cb (MetaInputMapper *mapper, static void device_mapping_info_free (DeviceMappingInfo *info) { -#ifdef HAVE_LIBWACOM - if (info->wacom_device) - libwacom_destroy (info->wacom_device); -#endif g_clear_signal_handler (&info->changed_id, info->settings); g_object_unref (info->settings); g_free (info->group_modes); @@ -1683,26 +1666,6 @@ check_add_mappable_device (MetaInputSettings *input_settings, info->device = device; info->settings = settings; -#ifdef HAVE_LIBWACOM - if (device_type == CLUTTER_TABLET_DEVICE || - device_type == CLUTTER_PAD_DEVICE) - { - WacomError *error = libwacom_error_new (); - - info->wacom_device = libwacom_new_from_path (priv->wacom_db, - clutter_input_device_get_device_node (device), - WFALLBACK_NONE, error); - if (!info->wacom_device) - { - g_warning ("Could not get tablet information for '%s': %s", - clutter_input_device_get_device_name (device), - libwacom_error_get_message (error)); - } - - libwacom_error_free (&error); - } -#endif - if (device_type == CLUTTER_PAD_DEVICE) { info->group_modes = @@ -2078,15 +2041,6 @@ meta_input_settings_init (MetaInputSettings *settings) g_signal_connect (priv->monitor_manager, "power-save-mode-changed", G_CALLBACK (power_save_mode_changed_cb), settings); -#ifdef HAVE_LIBWACOM - priv->wacom_db = libwacom_database_new (); - if (!priv->wacom_db) - { - g_warning ("Could not create database of Wacom devices, " - "expect tablets to misbehave"); - } -#endif - priv->two_finger_devices = g_hash_table_new (NULL, NULL); priv->input_mapper = meta_input_mapper_new (); @@ -2171,25 +2125,6 @@ meta_input_settings_get_pad_button_action (MetaInputSettings *input_settings, return action; } -#ifdef HAVE_LIBWACOM -WacomDevice * -meta_input_settings_get_tablet_wacom_device (MetaInputSettings *settings, - ClutterInputDevice *device) -{ - MetaInputSettingsPrivate *priv; - DeviceMappingInfo *info; - - g_return_val_if_fail (META_IS_INPUT_SETTINGS (settings), NULL); - g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL); - - priv = meta_input_settings_get_instance_private (settings); - info = g_hash_table_lookup (priv->mappable_devices, device); - g_return_val_if_fail (info != NULL, NULL); - - return info->wacom_device; -} -#endif /* HAVE_LIBWACOM */ - static gboolean cycle_logical_monitors (MetaInputSettings *settings, MetaLogicalMonitor *current_logical_monitor, @@ -2234,6 +2169,9 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings, DeviceMappingInfo *info; MetaLogicalMonitor *logical_monitor = NULL; const gchar *edid[4] = { 0 }, *pretty_name = NULL; +#ifdef HAVE_LIBWACOM + WacomDevice *wacom_device; +#endif g_return_if_fail (META_IS_INPUT_SETTINGS (input_settings)); g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device)); @@ -2245,13 +2183,15 @@ meta_input_settings_cycle_tablet_output (MetaInputSettings *input_settings, g_return_if_fail (info != NULL); #ifdef HAVE_LIBWACOM - if (info->wacom_device) + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (device)); + + if (wacom_device) { /* Output rotation only makes sense on external tablets */ - if (libwacom_get_integration_flags (info->wacom_device) != WACOM_DEVICE_INTEGRATED_NONE) + if (libwacom_get_integration_flags (wacom_device) != WACOM_DEVICE_INTEGRATED_NONE) return; - pretty_name = libwacom_get_name (info->wacom_device); + pretty_name = libwacom_get_name (wacom_device); } #endif @@ -2393,13 +2333,18 @@ meta_input_settings_handle_pad_button (MetaInputSettings *input_settin const gchar *pretty_name = NULL; MetaInputSettingsPrivate *priv; DeviceMappingInfo *info; +#ifdef HAVE_LIBWACOM + WacomDevice *wacom_device; +#endif priv = meta_input_settings_get_instance_private (input_settings); info = g_hash_table_lookup (priv->mappable_devices, pad); #ifdef HAVE_LIBWACOM - if (info && info->wacom_device) - pretty_name = libwacom_get_name (info->wacom_device); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (pad)); + + if (wacom_device) + pretty_name = libwacom_get_name (wacom_device); #endif meta_display_notify_pad_group_switch (meta_get_display (), pad, pretty_name, group, mode, n_modes); diff --git a/src/core/display.c b/src/core/display.c index 6a7e75d55..6377ed697 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -44,6 +44,7 @@ #include "backends/meta-cursor-sprite-xcursor.h" #include "backends/meta-cursor-tracker-private.h" #include "backends/meta-idle-monitor-dbus.h" +#include "backends/meta-input-device-private.h" #include "backends/meta-input-settings-private.h" #include "backends/meta-logical-monitor.h" #include "backends/meta-stage-private.h" @@ -2988,8 +2989,7 @@ meta_display_request_pad_osd (MetaDisplay *display, logical_monitor = meta_input_settings_get_tablet_logical_monitor (input_settings, pad); #ifdef HAVE_LIBWACOM - wacom_device = meta_input_settings_get_tablet_wacom_device (input_settings, - pad); + wacom_device = meta_input_device_get_wacom_device (META_INPUT_DEVICE (pad)); layout_path = libwacom_get_layout_filename (wacom_device); #endif } -- 2.26.0.rc2