backends: Fetch libwacom information for tablets in MetaInputSettings
Given that information defines largely how such devices are to be configured, it makes sense to have that information at hand. A getter has been also added for the places where it could be useful, although it will require HAVE_LIBWACOM checks in callers too.
This commit is contained in:
parent
f3b94d9a78
commit
77b33a86b8
@ -27,6 +27,10 @@
|
|||||||
|
|
||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
#include <libwacom/libwacom.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define META_TYPE_INPUT_SETTINGS (meta_input_settings_get_type ())
|
#define META_TYPE_INPUT_SETTINGS (meta_input_settings_get_type ())
|
||||||
#define META_INPUT_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_INPUT_SETTINGS, MetaInputSettings))
|
#define META_INPUT_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_INPUT_SETTINGS, MetaInputSettings))
|
||||||
#define META_INPUT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_INPUT_SETTINGS, MetaInputSettingsClass))
|
#define META_INPUT_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_INPUT_SETTINGS, MetaInputSettingsClass))
|
||||||
@ -102,4 +106,9 @@ MetaInputSettings * meta_input_settings_create (void);
|
|||||||
GDesktopTabletMapping meta_input_settings_get_tablet_mapping (MetaInputSettings *settings,
|
GDesktopTabletMapping meta_input_settings_get_tablet_mapping (MetaInputSettings *settings,
|
||||||
ClutterInputDevice *device);
|
ClutterInputDevice *device);
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
WacomDevice * meta_input_settings_get_tablet_wacom_device (MetaInputSettings *settings,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* META_INPUT_SETTINGS_PRIVATE_H */
|
#endif /* META_INPUT_SETTINGS_PRIVATE_H */
|
||||||
|
@ -48,6 +48,9 @@ struct _DeviceMappingInfo
|
|||||||
MetaInputSettings *input_settings;
|
MetaInputSettings *input_settings;
|
||||||
ClutterInputDevice *device;
|
ClutterInputDevice *device;
|
||||||
GSettings *settings;
|
GSettings *settings;
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
WacomDevice *wacom_device;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _MetaInputSettingsPrivate
|
struct _MetaInputSettingsPrivate
|
||||||
@ -62,6 +65,10 @@ struct _MetaInputSettingsPrivate
|
|||||||
GSettings *keyboard_settings;
|
GSettings *keyboard_settings;
|
||||||
|
|
||||||
GHashTable *mappable_devices;
|
GHashTable *mappable_devices;
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
WacomDeviceDatabase *wacom_db;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*ConfigBoolFunc) (MetaInputSettings *input_settings,
|
typedef void (*ConfigBoolFunc) (MetaInputSettings *input_settings,
|
||||||
@ -122,6 +129,9 @@ meta_input_settings_dispose (GObject *object)
|
|||||||
|
|
||||||
g_clear_object (&priv->monitor_manager);
|
g_clear_object (&priv->monitor_manager);
|
||||||
|
|
||||||
|
if (priv->wacom_db)
|
||||||
|
libwacom_database_destroy (priv->wacom_db);
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object);
|
G_OBJECT_CLASS (meta_input_settings_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -851,6 +861,10 @@ monitors_changed_cb (MetaMonitorManager *monitor_manager,
|
|||||||
static void
|
static void
|
||||||
device_mapping_info_free (DeviceMappingInfo *info)
|
device_mapping_info_free (DeviceMappingInfo *info)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
if (info->wacom_device)
|
||||||
|
libwacom_destroy (info->wacom_device);
|
||||||
|
#endif
|
||||||
g_object_unref (info->settings);
|
g_object_unref (info->settings);
|
||||||
g_slice_free (DeviceMappingInfo, info);
|
g_slice_free (DeviceMappingInfo, info);
|
||||||
}
|
}
|
||||||
@ -875,6 +889,26 @@ check_add_mappable_device (MetaInputSettings *input_settings,
|
|||||||
info->device = device;
|
info->device = device;
|
||||||
info->settings = settings;
|
info->settings = settings;
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBWACOM
|
||||||
|
if (clutter_input_device_get_device_type (device) == CLUTTER_TABLET_DEVICE ||
|
||||||
|
clutter_input_device_get_device_type (device) == 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
|
||||||
|
|
||||||
g_signal_connect (settings, "changed",
|
g_signal_connect (settings, "changed",
|
||||||
G_CALLBACK (mapped_device_changed_cb), info);
|
G_CALLBACK (mapped_device_changed_cb), info);
|
||||||
|
|
||||||
@ -1000,6 +1034,13 @@ meta_input_settings_init (MetaInputSettings *settings)
|
|||||||
priv->monitor_manager = g_object_ref (meta_monitor_manager_get ());
|
priv->monitor_manager = g_object_ref (meta_monitor_manager_get ());
|
||||||
g_signal_connect (priv->monitor_manager, "monitors-changed",
|
g_signal_connect (priv->monitor_manager, "monitors-changed",
|
||||||
G_CALLBACK (monitors_changed_cb), settings);
|
G_CALLBACK (monitors_changed_cb), settings);
|
||||||
|
|
||||||
|
priv->wacom_db = libwacom_database_new ();
|
||||||
|
if (!priv->wacom_db)
|
||||||
|
{
|
||||||
|
g_warning ("Could not create database of Wacom devices, "
|
||||||
|
"expect tablets to misbehave");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaInputSettings *
|
MetaInputSettings *
|
||||||
@ -1037,3 +1078,22 @@ meta_input_settings_get_tablet_mapping (MetaInputSettings *settings,
|
|||||||
|
|
||||||
return g_settings_get_enum (info->settings, "mapping");
|
return g_settings_get_enum (info->settings, "mapping");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user