gdk,xi2: Make more resilient about not yet known devices

Dealing with disabled devices may turn into hierarchy/device
changed events on device IDs with no backing GdkDevice yet,
so protect against that. The device attachment will be handled
correctly when the device is enabled later.
This commit is contained in:
Carlos Garnacho
2011-12-18 18:56:51 +01:00
committed by Matthias Clasen
parent 98c44a0ea8
commit c6cc1a848f

View File

@@ -605,6 +605,9 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
slave = g_hash_table_lookup (device_manager->id_table,
GINT_TO_POINTER (ev->info[i].deviceid));
if (!slave)
continue;
/* Remove old master info */
master = gdk_device_get_associated_device (slave);
@@ -627,7 +630,10 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
master = g_hash_table_lookup (device_manager->id_table,
GINT_TO_POINTER (info->attachment));
XIFreeDeviceInfo (info);
}
if (master)
{
_gdk_device_set_associated_device (slave, master);
_gdk_device_add_slave (master, slave);
@@ -651,10 +657,13 @@ handle_device_changed (GdkX11DeviceManagerXI2 *device_manager,
device = g_hash_table_lookup (device_manager->id_table,
GUINT_TO_POINTER (ev->deviceid));
_gdk_device_reset_axes (device);
translate_device_classes (display, device, ev->classes, ev->num_classes);
if (device)
{
_gdk_device_reset_axes (device);
translate_device_classes (display, device, ev->classes, ev->num_classes);
g_signal_emit_by_name (G_OBJECT (device), "changed");
g_signal_emit_by_name (G_OBJECT (device), "changed");
}
}
static GdkCrossingMode