clutter: Drop clutter_input_device_get_associated_device()
And the private setter. One may ask the seat for the pointer/keyboard instead of asking the device for its counterpart. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:
parent
c4fa5ef88a
commit
be9c531ab9
@ -85,9 +85,6 @@ struct _ClutterInputDevice
|
|||||||
|
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
|
|
||||||
/* the associated device */
|
|
||||||
ClutterInputDevice *associated;
|
|
||||||
|
|
||||||
/* the actor underneath the pointer */
|
/* the actor underneath the pointer */
|
||||||
ClutterActor *cursor_actor;
|
ClutterActor *cursor_actor;
|
||||||
GHashTable *inv_touch_sequence_actors;
|
GHashTable *inv_touch_sequence_actors;
|
||||||
@ -136,9 +133,6 @@ struct _ClutterInputDevice
|
|||||||
ClutterPtrA11yData *ptr_a11y_data;
|
ClutterPtrA11yData *ptr_a11y_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
void _clutter_input_device_set_associated_device (ClutterInputDevice *device,
|
|
||||||
ClutterInputDevice *associated);
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
void clutter_input_device_update_from_tool (ClutterInputDevice *device,
|
void clutter_input_device_update_from_tool (ClutterInputDevice *device,
|
||||||
ClutterInputDeviceTool *tool);
|
ClutterInputDeviceTool *tool);
|
||||||
|
@ -94,13 +94,6 @@ clutter_input_device_dispose (GObject *gobject)
|
|||||||
g_clear_pointer (&device->product_id, g_free);
|
g_clear_pointer (&device->product_id, g_free);
|
||||||
g_clear_pointer (&device->node_path, g_free);
|
g_clear_pointer (&device->node_path, g_free);
|
||||||
|
|
||||||
if (device->associated != NULL)
|
|
||||||
{
|
|
||||||
_clutter_input_device_set_associated_device (device->associated, NULL);
|
|
||||||
g_object_unref (device->associated);
|
|
||||||
device->associated = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (device->accessibility_virtual_device)
|
if (device->accessibility_virtual_device)
|
||||||
g_clear_object (&device->accessibility_virtual_device);
|
g_clear_object (&device->accessibility_virtual_device);
|
||||||
|
|
||||||
@ -1073,69 +1066,6 @@ _clutter_input_device_remove_event_sequence (ClutterInputDevice *device,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*< internal >
|
|
||||||
* clutter_input_device_set_associated_device:
|
|
||||||
* @device: a #ClutterInputDevice
|
|
||||||
* @associated: (allow-none): a #ClutterInputDevice, or %NULL
|
|
||||||
*
|
|
||||||
* Sets the associated device for @device.
|
|
||||||
*
|
|
||||||
* This function keeps a reference on the associated device.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
_clutter_input_device_set_associated_device (ClutterInputDevice *device,
|
|
||||||
ClutterInputDevice *associated)
|
|
||||||
{
|
|
||||||
if (device->associated == associated)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (device->associated != NULL)
|
|
||||||
g_object_unref (device->associated);
|
|
||||||
|
|
||||||
device->associated = associated;
|
|
||||||
if (device->associated != NULL)
|
|
||||||
g_object_ref (device->associated);
|
|
||||||
|
|
||||||
CLUTTER_NOTE (MISC, "Associating device '%s' to device '%s'",
|
|
||||||
clutter_input_device_get_device_name (device),
|
|
||||||
device->associated != NULL
|
|
||||||
? clutter_input_device_get_device_name (device->associated)
|
|
||||||
: "(none)");
|
|
||||||
|
|
||||||
if (device->device_mode != CLUTTER_INPUT_MODE_LOGICAL)
|
|
||||||
{
|
|
||||||
if (device->associated != NULL)
|
|
||||||
device->device_mode = CLUTTER_INPUT_MODE_PHYSICAL;
|
|
||||||
else
|
|
||||||
device->device_mode = CLUTTER_INPUT_MODE_FLOATING;
|
|
||||||
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (device), obj_props[PROP_DEVICE_MODE]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clutter_input_device_get_associated_device:
|
|
||||||
* @device: a #ClutterInputDevice
|
|
||||||
*
|
|
||||||
* Retrieves a pointer to the #ClutterInputDevice that has been
|
|
||||||
* associated to @device.
|
|
||||||
*
|
|
||||||
* If the #ClutterInputDevice:device-mode property of @device is
|
|
||||||
* set to %CLUTTER_INPUT_MODE_LOGICAL, this function will return
|
|
||||||
* %NULL.
|
|
||||||
*
|
|
||||||
* Return value: (transfer none): a #ClutterInputDevice, or %NULL
|
|
||||||
*
|
|
||||||
* Since: 1.6
|
|
||||||
*/
|
|
||||||
ClutterInputDevice *
|
|
||||||
clutter_input_device_get_associated_device (ClutterInputDevice *device)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL);
|
|
||||||
|
|
||||||
return device->associated;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_input_device_keycode_to_evdev:
|
* clutter_input_device_keycode_to_evdev:
|
||||||
* @device: A #ClutterInputDevice
|
* @device: A #ClutterInputDevice
|
||||||
|
@ -104,9 +104,6 @@ gboolean clutter_input_device_get_axis_value (ClutterInputDev
|
|||||||
ClutterInputAxis axis,
|
ClutterInputAxis axis,
|
||||||
gdouble *value);
|
gdouble *value);
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
ClutterInputDevice * clutter_input_device_get_associated_device (ClutterInputDevice *device);
|
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
void clutter_input_device_grab (ClutterInputDevice *device,
|
void clutter_input_device_grab (ClutterInputDevice *device,
|
||||||
ClutterActor *actor);
|
ClutterActor *actor);
|
||||||
|
@ -1510,7 +1510,7 @@ evdev_add_device (MetaSeatImpl *seat_impl,
|
|||||||
struct libinput_device *libinput_device)
|
struct libinput_device *libinput_device)
|
||||||
{
|
{
|
||||||
ClutterInputDeviceType type;
|
ClutterInputDeviceType type;
|
||||||
ClutterInputDevice *device, *master = NULL;
|
ClutterInputDevice *device;
|
||||||
gboolean is_touchscreen, is_tablet_switch;
|
gboolean is_touchscreen, is_tablet_switch;
|
||||||
|
|
||||||
device = meta_input_device_native_new (seat_impl, libinput_device);
|
device = meta_input_device_native_new (seat_impl, libinput_device);
|
||||||
@ -1521,14 +1521,6 @@ evdev_add_device (MetaSeatImpl *seat_impl,
|
|||||||
* ClutterInputDevice API */
|
* ClutterInputDevice API */
|
||||||
type = meta_input_device_native_determine_type (libinput_device);
|
type = meta_input_device_native_determine_type (libinput_device);
|
||||||
|
|
||||||
if (type == CLUTTER_KEYBOARD_DEVICE)
|
|
||||||
master = seat_impl->core_keyboard;
|
|
||||||
else if (type == CLUTTER_POINTER_DEVICE)
|
|
||||||
master = seat_impl->core_pointer;
|
|
||||||
|
|
||||||
if (master)
|
|
||||||
_clutter_input_device_set_associated_device (device, master);
|
|
||||||
|
|
||||||
is_touchscreen = type == CLUTTER_TOUCHSCREEN_DEVICE;
|
is_touchscreen = type == CLUTTER_TOUCHSCREEN_DEVICE;
|
||||||
is_tablet_switch =
|
is_tablet_switch =
|
||||||
device_is_tablet_switch (META_INPUT_DEVICE_NATIVE (device));
|
device_is_tablet_switch (META_INPUT_DEVICE_NATIVE (device));
|
||||||
|
@ -615,8 +615,7 @@ update_touch_mode (MetaSeatX11 *seat_x11)
|
|||||||
static ClutterInputDevice *
|
static ClutterInputDevice *
|
||||||
add_device (MetaSeatX11 *seat_x11,
|
add_device (MetaSeatX11 *seat_x11,
|
||||||
ClutterBackend *backend,
|
ClutterBackend *backend,
|
||||||
XIDeviceInfo *info,
|
XIDeviceInfo *info)
|
||||||
gboolean in_construction)
|
|
||||||
{
|
{
|
||||||
ClutterInputDevice *device;
|
ClutterInputDevice *device;
|
||||||
|
|
||||||
@ -652,21 +651,6 @@ add_device (MetaSeatX11 *seat_x11,
|
|||||||
if (clutter_input_device_get_device_type (device) == CLUTTER_PAD_DEVICE)
|
if (clutter_input_device_get_device_type (device) == CLUTTER_PAD_DEVICE)
|
||||||
pad_passive_button_grab (device);
|
pad_passive_button_grab (device);
|
||||||
|
|
||||||
/* relationships between devices and signal emissions are not
|
|
||||||
* necessary while we're constructing the device manager instance
|
|
||||||
*/
|
|
||||||
if (!in_construction)
|
|
||||||
{
|
|
||||||
if (info->use == XISlavePointer || info->use == XISlaveKeyboard)
|
|
||||||
{
|
|
||||||
ClutterInputDevice *logical;
|
|
||||||
|
|
||||||
logical = g_hash_table_lookup (seat_x11->devices_by_id,
|
|
||||||
GINT_TO_POINTER (info->attachment));
|
|
||||||
_clutter_input_device_set_associated_device (device, logical);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -741,21 +725,6 @@ meta_seat_x11_handle_event_post (ClutterSeat *seat,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
relate_logical_devices (gpointer key,
|
|
||||||
gpointer value,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
MetaSeatX11 *seat_x11 = data;
|
|
||||||
ClutterInputDevice *device, *relative;
|
|
||||||
|
|
||||||
device = g_hash_table_lookup (seat_x11->devices_by_id, key);
|
|
||||||
relative = g_hash_table_lookup (seat_x11->devices_by_id, value);
|
|
||||||
|
|
||||||
_clutter_input_device_set_associated_device (device, relative);
|
|
||||||
_clutter_input_device_set_associated_device (relative, device);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint
|
static uint
|
||||||
device_get_tool_serial (ClutterInputDevice *device)
|
device_get_tool_serial (ClutterInputDevice *device)
|
||||||
{
|
{
|
||||||
@ -814,7 +783,7 @@ translate_hierarchy_event (ClutterBackend *backend,
|
|||||||
{
|
{
|
||||||
ClutterInputDevice *device;
|
ClutterInputDevice *device;
|
||||||
|
|
||||||
device = add_device (seat_x11, backend, &info[0], FALSE);
|
device = add_device (seat_x11, backend, &info[0]);
|
||||||
|
|
||||||
event->any.type = CLUTTER_DEVICE_ADDED;
|
event->any.type = CLUTTER_DEVICE_ADDED;
|
||||||
event->any.time = ev->time;
|
event->any.time = ev->time;
|
||||||
@ -848,40 +817,10 @@ translate_hierarchy_event (ClutterBackend *backend,
|
|||||||
else if ((ev->info[i].flags & XISlaveAttached) ||
|
else if ((ev->info[i].flags & XISlaveAttached) ||
|
||||||
(ev->info[i].flags & XISlaveDetached))
|
(ev->info[i].flags & XISlaveDetached))
|
||||||
{
|
{
|
||||||
ClutterInputDevice *logical, *physical;
|
|
||||||
XIDeviceInfo *info;
|
|
||||||
int n_devices;
|
|
||||||
|
|
||||||
g_debug ("Hierarchy event: physical device %s",
|
g_debug ("Hierarchy event: physical device %s",
|
||||||
(ev->info[i].flags & XISlaveAttached)
|
(ev->info[i].flags & XISlaveAttached)
|
||||||
? "attached"
|
? "attached"
|
||||||
: "detached");
|
: "detached");
|
||||||
|
|
||||||
physical = g_hash_table_lookup (seat_x11->devices_by_id,
|
|
||||||
GINT_TO_POINTER (ev->info[i].deviceid));
|
|
||||||
logical = clutter_input_device_get_associated_device (physical);
|
|
||||||
|
|
||||||
/* detach the physical device in both cases */
|
|
||||||
if (logical != NULL)
|
|
||||||
_clutter_input_device_set_associated_device (physical, NULL);
|
|
||||||
|
|
||||||
/* and attach the physical device to the new logical device if needed */
|
|
||||||
if (ev->info[i].flags & XISlaveAttached)
|
|
||||||
{
|
|
||||||
clutter_x11_trap_x_errors ();
|
|
||||||
info = XIQueryDevice (clutter_x11_get_default_display (),
|
|
||||||
ev->info[i].deviceid,
|
|
||||||
&n_devices);
|
|
||||||
clutter_x11_untrap_x_errors ();
|
|
||||||
if (info != NULL)
|
|
||||||
{
|
|
||||||
logical = g_hash_table_lookup (seat_x11->devices_by_id,
|
|
||||||
GINT_TO_POINTER (info->attachment));
|
|
||||||
if (logical != NULL)
|
|
||||||
_clutter_input_device_set_associated_device (physical, logical);
|
|
||||||
XIFreeDeviceInfo (info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1389,7 +1328,6 @@ meta_seat_x11_constructed (GObject *object)
|
|||||||
{
|
{
|
||||||
MetaSeatX11 *seat_x11 = META_SEAT_X11 (object);
|
MetaSeatX11 *seat_x11 = META_SEAT_X11 (object);
|
||||||
ClutterBackend *backend = clutter_get_default_backend ();
|
ClutterBackend *backend = clutter_get_default_backend ();
|
||||||
GHashTable *logical_devices;
|
|
||||||
XIDeviceInfo *info;
|
XIDeviceInfo *info;
|
||||||
XIEventMask event_mask;
|
XIEventMask event_mask;
|
||||||
unsigned char mask[XIMaskLen(XI_LASTEVENT)] = { 0, };
|
unsigned char mask[XIMaskLen(XI_LASTEVENT)] = { 0, };
|
||||||
@ -1397,7 +1335,6 @@ meta_seat_x11_constructed (GObject *object)
|
|||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
|
|
||||||
xdisplay = clutter_x11_get_default_display ();
|
xdisplay = clutter_x11_get_default_display ();
|
||||||
logical_devices = g_hash_table_new (NULL, NULL);
|
|
||||||
|
|
||||||
info = XIQueryDevice (clutter_x11_get_default_display (),
|
info = XIQueryDevice (clutter_x11_get_default_display (),
|
||||||
XIAllDevices, &n_devices);
|
XIAllDevices, &n_devices);
|
||||||
@ -1409,22 +1346,11 @@ meta_seat_x11_constructed (GObject *object)
|
|||||||
if (!xi_device->enabled)
|
if (!xi_device->enabled)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
add_device (seat_x11, backend, xi_device, TRUE);
|
add_device (seat_x11, backend, xi_device);
|
||||||
|
|
||||||
if (xi_device->use == XIMasterPointer ||
|
|
||||||
xi_device->use == XIMasterKeyboard)
|
|
||||||
{
|
|
||||||
g_hash_table_insert (logical_devices,
|
|
||||||
GINT_TO_POINTER (xi_device->deviceid),
|
|
||||||
GINT_TO_POINTER (xi_device->attachment));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XIFreeDeviceInfo (info);
|
XIFreeDeviceInfo (info);
|
||||||
|
|
||||||
g_hash_table_foreach (logical_devices, relate_logical_devices, seat_x11);
|
|
||||||
g_hash_table_destroy (logical_devices);
|
|
||||||
|
|
||||||
XISetMask (mask, XI_HierarchyChanged);
|
XISetMask (mask, XI_HierarchyChanged);
|
||||||
XISetMask (mask, XI_DeviceChanged);
|
XISetMask (mask, XI_DeviceChanged);
|
||||||
XISetMask (mask, XI_PropertyEvent);
|
XISetMask (mask, XI_PropertyEvent);
|
||||||
|
Loading…
Reference in New Issue
Block a user