aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch')
-rw-r--r--meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch589
1 files changed, 0 insertions, 589 deletions
diff --git a/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch b/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch
deleted file mode 100644
index 3c9b3dad9b..0000000000
--- a/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0005-pointers-detect-a-change-of-pointer-device-used-and-.patch
+++ /dev/null
@@ -1,589 +0,0 @@
-From 78353322ce1070ee1fd7bb5367e2c4dd43928f42 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
-Date: Thu, 20 Dec 2012 16:58:19 +0100
-Subject: [PATCH 5/5] pointers: detect a change of pointer-device used and set
- "touchscreen-pointer" as found in xfconf
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-To detect pointer device in use the DevicePresence-, DeviceMotionNotify- and
-DeviceButtonPress-events are handled. Tests showed that by repopenning and
-closing the pointer devices (e.g when another setting was modified), the events
-stopped working. Therefore all pointer devices are opened only once and managed
-in a hash table.
-
-Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
-Upstream-Status: Submitted [1]
-[1] https://bugzilla.xfce.org/show_bug.cgi?id=9474
----
- xfsettingsd/pointers.c | 342 ++++++++++++++++++++++++++++++++-----------------
- 1 file changed, 225 insertions(+), 117 deletions(-)
-
-diff --git a/xfsettingsd/pointers.c b/xfsettingsd/pointers.c
-index cfa56e2..41c8bba 100644
---- a/xfsettingsd/pointers.c
-+++ b/xfsettingsd/pointers.c
-@@ -66,11 +66,9 @@ static void xfce_pointers_helper_channel_property_changed (XfconfCha
- const gchar *property_name,
- const GValue *value,
- XfcePointersHelper *helper);
--#ifdef DEVICE_HOTPLUGGING
- static GdkFilterReturn xfce_pointers_helper_event_filter (GdkXEvent *xevent,
- GdkEvent *gdk_event,
- gpointer user_data);
--#endif
- static void xfce_pointers_helper_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
-@@ -96,8 +94,11 @@ struct _XfcePointersHelper
- GPid syndaemon_pid;
- #endif
-
-+ GHashTable *pointer_devices;
-+ XID last_pointer_active;
-+ gint device_motion_event_type;
-+ gint device_button_press_event_type;
- #ifdef DEVICE_HOTPLUGGING
-- /* device presence event type */
- gint device_presence_event_type;
- #endif
- };
-@@ -117,6 +118,15 @@ G_DEFINE_TYPE (XfcePointersHelper, xfce_pointers_helper, G_TYPE_OBJECT);
-
-
-
-+typedef struct
-+{
-+ XDevice *device;
-+ gchar* name;
-+}
-+XfcePointerDeviceData;
-+
-+
-+
- static void
- xfce_pointers_helper_class_init (XfcePointersHelperClass *klass)
- {
-@@ -147,6 +157,18 @@ xfce_pointers_helper_init (XfcePointersHelper *helper)
-
-
- static void
-+xfce_pointers_device_close (gpointer data)
-+{
-+ XfcePointerDeviceData *device_data = data;
-+
-+ XCloseDevice (GDK_DISPLAY (), device_data->device);
-+ g_free (device_data->name);
-+ g_free (device_data);
-+}
-+
-+
-+
-+static void
- xfce_pointers_helper_constructed (GObject *object)
- {
- XfcePointersHelper *helper = XFCE_POINTERS_HELPER (object);
-@@ -185,6 +207,10 @@ xfce_pointers_helper_constructed (GObject *object)
- helper->channel = xfconf_channel_get ("pointers");
-
- /* restore the pointer devices */
-+ helper->pointer_devices = g_hash_table_new_full (g_int_hash,
-+ g_int_equal,
-+ g_free,
-+ xfce_pointers_device_close);
- xfce_pointers_helper_restore_devices (helper, NULL);
-
- /* monitor the channel */
-@@ -194,21 +220,20 @@ xfce_pointers_helper_constructed (GObject *object)
- /* launch syndaemon if required */
- xfce_pointers_helper_syndaemon_check (helper);
-
--#ifdef DEVICE_HOTPLUGGING
- if (G_LIKELY (xdisplay != NULL))
- {
-+#ifdef DEVICE_HOTPLUGGING
- /* monitor device changes */
- gdk_error_trap_push ();
- DevicePresence (xdisplay, helper->device_presence_event_type, event_class);
- XSelectExtensionEvent (xdisplay, RootWindow (xdisplay, DefaultScreen (xdisplay)), &event_class, 1);
-
- /* add an event filter */
-- if (gdk_error_trap_pop () == 0)
-- gdk_window_add_filter (NULL, xfce_pointers_helper_event_filter, helper);
-- else
-+ if (gdk_error_trap_pop () != 0)
- g_warning ("Failed to create device filter");
-- }
- #endif
-+ gdk_window_add_filter (NULL, xfce_pointers_helper_event_filter, helper);
-+ }
- }
- }
-
-@@ -238,7 +263,10 @@ xfce_pointers_helper_set_property (GObject *object,
- static void
- xfce_pointers_helper_finalize (GObject *object)
- {
-- xfce_pointers_helper_syndaemon_stop (XFCE_POINTERS_HELPER (object));
-+ XfcePointersHelper* helper = XFCE_POINTERS_HELPER (object);
-+
-+ xfce_pointers_helper_syndaemon_stop (helper);
-+ g_hash_table_destroy (helper->pointer_devices);
-
- (*G_OBJECT_CLASS (xfce_pointers_helper_parent_class)->finalize) (object);
- }
-@@ -267,19 +295,19 @@ static void
- xfce_pointers_helper_syndaemon_check (XfcePointersHelper *helper)
- {
- #ifdef DEVICE_PROPERTIES
-- Display *xdisplay = GDK_DISPLAY ();
-- XDeviceInfo *device_list;
-- XDevice *device;
-- gint n, ndevices;
-- Atom touchpad_type;
-- Atom touchpad_off_prop;
-- Atom *props;
-- gint i, nprops;
-- gboolean have_synaptics = FALSE;
-- gdouble disable_duration;
-- gchar disable_duration_string[64];
-- gchar *args[] = { "syndaemon", "-i", disable_duration_string, "-K", "-R", NULL };
-- GError *error = NULL;
-+ Display *xdisplay = GDK_DISPLAY ();
-+ XDeviceInfo *device_list;
-+ XfcePointerDeviceData *device_data;
-+ gint n, ndevices;
-+ Atom touchpad_type;
-+ Atom touchpad_off_prop;
-+ Atom *props;
-+ gint i, nprops;
-+ gboolean have_synaptics = FALSE;
-+ gdouble disable_duration;
-+ gchar disable_duration_string[64];
-+ gchar *args[] = { "syndaemon", "-i", disable_duration_string, "-K", "-R", NULL };
-+ GError *error = NULL;
-
- /* only stop a running daemon */
- if (!xfconf_channel_get_bool (helper->channel, "/DisableTouchpadWhileTyping", FALSE))
-@@ -299,17 +327,16 @@ xfce_pointers_helper_syndaemon_check (XfcePointersHelper *helper)
- if (device_list[n].type != touchpad_type)
- continue;
-
-- gdk_error_trap_push ();
-- device = XOpenDevice (xdisplay, device_list[n].id);
-- if (gdk_error_trap_pop () != 0 || device == NULL)
-+ device_data = g_hash_table_lookup (helper->pointer_devices, &device_list[n].id);
-+ if (device_data == NULL)
- {
-- g_critical ("Unable to open device %s", device_list[n].name);
-+ g_critical ("xfce_pointers_helper_syndaemon_check: Unable to find device %s / ID %i in hash table", device_list[n].name, device_list[n].id);
- break;
- }
-
- /* look for the Synaptics Off property */
- gdk_error_trap_push ();
-- props = XListDeviceProperties (xdisplay, device, &nprops);
-+ props = XListDeviceProperties (xdisplay, device_data->device, &nprops);
- if (gdk_error_trap_pop () == 0
- && props != NULL)
- {
-@@ -319,8 +346,6 @@ xfce_pointers_helper_syndaemon_check (XfcePointersHelper *helper)
- XFree (props);
- }
-
-- XCloseDevice (xdisplay, device);
--
- if (have_synaptics)
- break;
- }
-@@ -847,24 +872,56 @@ xfce_pointers_helper_change_properties (gpointer key,
-
-
- static void
-+xfce_pointers_helper_change_current_device (XfcePointersHelper *helper,
-+ XID *xid)
-+{
-+ XfcePointerDeviceData *device_data;
-+ gchar* prop;
-+ GValue bool_val = { 0, };
-+
-+ helper->last_pointer_active = *xid;
-+ device_data = g_hash_table_lookup (helper->pointer_devices, xid);
-+ if (device_data == NULL)
-+ {
-+ g_critical ("Unable to find device ID %i in hash table", *xid);
-+ return;
-+ }
-+ if (G_LIKELY (G_IS_OBJECT (helper->xsettings_helper)))
-+ {
-+ prop = g_strconcat ("/", device_data->name, "/TouchscreenPointer", NULL);
-+ g_value_init (&bool_val, G_TYPE_BOOLEAN);
-+ g_value_set_boolean (&bool_val,
-+ xfconf_channel_get_bool (helper->channel, prop, FALSE));
-+ g_object_set_property (helper->xsettings_helper, "touchscreen-pointer", &bool_val);
-+ g_value_unset (&bool_val);
-+ g_free (prop);
-+ }
-+ else
-+ g_critical ("xsettings_helper was not properly set");
-+}
-+
-+
-+static void
- xfce_pointers_helper_restore_devices (XfcePointersHelper *helper,
- XID *xid)
- {
-- Display *xdisplay = GDK_DISPLAY ();
-- XDeviceInfo *device_list, *device_info;
-- gint n, ndevices;
-- XDevice *device;
-- gchar *device_name;
-- gchar prop[256];
-- gboolean right_handed;
-- gboolean reverse_scrolling;
-- gint threshold;
-- gdouble acceleration;
-+ Display *xdisplay = GDK_DISPLAY ();
-+ XDeviceInfo *device_list, *device_info;
-+ gint n, ndevices;
-+ XDevice *device;
-+ XfcePointerDeviceData *device_data;
-+ gchar *device_name;
-+ gchar prop[256];
-+ gboolean right_handed;
-+ gboolean reverse_scrolling;
-+ gint threshold;
-+ gdouble acceleration;
-+ XEventClass event_classes[2];
- #ifdef DEVICE_PROPERTIES
-- GHashTable *props;
-- XfcePointerData pointer_data;
-+ GHashTable *props;
-+ XfcePointerData pointer_data;
- #endif
-- const gchar *mode;
-+ const gchar *mode;
-
- gdk_error_trap_push ();
- device_list = XListInputDevices (xdisplay, &ndevices);
-@@ -874,86 +931,110 @@ xfce_pointers_helper_restore_devices (XfcePointersHelper *helper,
- return;
- }
-
-+ device_data = NULL;
- for (n = 0; n < ndevices; n++)
- {
-- /* filter the pointer devices */
-+ /* filter the physical pointer devices */
- device_info = &device_list[n];
- if (device_info->use != IsXExtensionPointer
-- || device_info->name == NULL)
-+ || device_info->name == NULL
-+ || g_str_has_prefix (device_info->name, "Virtual core XTEST"))
- continue;
-
- /* filter out the device if one is set */
- if (xid != NULL && device_info->id != *xid)
- continue;
-
-- /* open the device */
-- gdk_error_trap_push ();
-- device = XOpenDevice (xdisplay, device_info->id);
-- if (gdk_error_trap_pop () != 0 || device == NULL)
-+ device_data = g_hash_table_lookup (helper->pointer_devices, &device_info->id);
-+ if (device_data == NULL)
- {
-- g_critical ("Unable to open device %s", device_info->name);
-- continue;
-- }
-+ /* open the device and insert to hash */
-+ gdk_error_trap_push ();
-+ device = XOpenDevice (xdisplay, device_info->id);
-+ if (G_UNLIKELY(gdk_error_trap_pop () != 0 || device == NULL))
-+ {
-+ g_critical ("Unable to open device %s / ID: %i", device_info->name, device_info->id);
-+ continue;
-+ }
-
-- /* create a valid xfconf property name for the device */
-- device_name = xfce_pointers_helper_device_xfconf_name (device_info->name);
-+ /* create a valid xfconf property name for the device */
-+ device_name = xfce_pointers_helper_device_xfconf_name (device_info->name);
-
-- /* read buttonmap properties */
-- g_snprintf (prop, sizeof (prop), "/%s/RightHanded", device_name);
-- right_handed = xfconf_channel_get_bool (helper->channel, prop, -1);
-+ /* add device to our list */
-+ device_data = g_new (XfcePointerDeviceData, 1);
-+ device_data->device = device;
-+ device_data->name = device_name;
-+ g_hash_table_insert (helper->pointer_devices, g_memdup (&device_info->id, sizeof(device_info->id)), device_data);
-
-- g_snprintf (prop, sizeof (prop), "/%s/ReverseScrolling", device_name);
-- reverse_scrolling = xfconf_channel_get_bool (helper->channel, prop, -1);
-+ /* catch motion event / button-press for new device */
-+ gdk_error_trap_push ();
-+ DeviceMotionNotify (device, helper->device_motion_event_type, event_classes[0]);
-+ DeviceButtonPress (device, helper->device_button_press_event_type, event_classes[1]);
-+ XSelectExtensionEvent (xdisplay, RootWindow (xdisplay, DefaultScreen (xdisplay)), event_classes, 2);
-+ if (G_UNLIKELY (gdk_error_trap_pop () != 0))
-+ g_critical ("Unable to register DeviceButtonPress/DeviceMotionNotify for %i", device_info->id);
-
-- if (right_handed != -1 || reverse_scrolling != -1)
-- {
-- xfce_pointers_helper_change_button_mapping (device_info, device, xdisplay,
-+
-+ /* read buttonmap properties */
-+ g_snprintf (prop, sizeof (prop), "/%s/RightHanded", device_name);
-+ right_handed = xfconf_channel_get_bool (helper->channel, prop, -1);
-+
-+ g_snprintf (prop, sizeof (prop), "/%s/ReverseScrolling", device_name);
-+ reverse_scrolling = xfconf_channel_get_bool (helper->channel, prop, -1);
-+
-+ if (right_handed != -1 || reverse_scrolling != -1)
-+ {
-+ xfce_pointers_helper_change_button_mapping (device_info, device, xdisplay,
- right_handed, reverse_scrolling);
-- }
-+ }
-
-- /* read feedback settings */
-- g_snprintf (prop, sizeof (prop), "/%s/Threshold", device_name);
-- threshold = xfconf_channel_get_int (helper->channel, prop, -1);
-+ /* read feedback settings */
-+ g_snprintf (prop, sizeof (prop), "/%s/Threshold", device_name);
-+ threshold = xfconf_channel_get_int (helper->channel, prop, -1);
-
-- g_snprintf (prop, sizeof (prop), "/%s/Acceleration", device_name);
-- acceleration = xfconf_channel_get_double (helper->channel, prop, -1.00);
-+ g_snprintf (prop, sizeof (prop), "/%s/Acceleration", device_name);
-+ acceleration = xfconf_channel_get_double (helper->channel, prop, -1.00);
-
-- if (threshold != -1 || acceleration != -1.00)
-- {
-- xfce_pointers_helper_change_feedback (device_info, device, xdisplay,
-- threshold, acceleration);
-- }
-+ if (threshold != -1 || acceleration != -1.00)
-+ {
-+ xfce_pointers_helper_change_feedback (device_info, device, xdisplay,
-+ threshold, acceleration);
-+ }
-
-- /* read mode settings */
-- g_snprintf (prop, sizeof (prop), "/%s/Mode", device_name);
-- mode = xfconf_channel_get_string (helper->channel, prop, NULL);
-+ /* read mode settings */
-+ g_snprintf (prop, sizeof (prop), "/%s/Mode", device_name);
-+ mode = xfconf_channel_get_string (helper->channel, prop, NULL);
-
-- if (mode != NULL)
-- xfce_pointers_helper_change_mode (device_info, device, xdisplay, mode);
-+ if (mode != NULL)
-+ xfce_pointers_helper_change_mode (device_info, device, xdisplay, mode);
-
- #ifdef DEVICE_PROPERTIES
-- /* set device properties */
-- g_snprintf (prop, sizeof (prop), "/%s/Properties", device_name);
-- props = xfconf_channel_get_properties (helper->channel, prop);
-+ /* set device properties */
-+ g_snprintf (prop, sizeof (prop), "/%s/Properties", device_name);
-+ props = xfconf_channel_get_properties (helper->channel, prop);
-
-- if (props != NULL)
-- {
-- pointer_data.xdisplay = xdisplay;
-- pointer_data.device = device;
-- pointer_data.device_info = device_info;
-- pointer_data.prop_name_len = strlen (prop) + 1;
-+ if (props != NULL)
-+ {
-+ pointer_data.xdisplay = xdisplay;
-+ pointer_data.device = device;
-+ pointer_data.device_info = device_info;
-+ pointer_data.prop_name_len = strlen (prop) + 1;
-
-- g_hash_table_foreach (props, xfce_pointers_helper_change_properties, &pointer_data);
-+ g_hash_table_foreach (props, xfce_pointers_helper_change_properties, &pointer_data);
-
-- g_hash_table_destroy (props);
-- }
-+ g_hash_table_destroy (props);
-+ }
- #endif
--
-- g_free (device_name);
-- XCloseDevice (xdisplay, device);
-+ }
- }
--
- XFreeDeviceList (device_list);
-+ if (G_LIKELY (device_data != NULL))
-+ {
-+ if (helper->last_pointer_active != device_data->device->device_id)
-+ xfce_pointers_helper_change_current_device (helper, &device_data->device->device_id);
-+ }
-+ else
-+ g_critical("no device selected in xfce_pointers_helper_restore_devices");
- }
-
-
-@@ -964,12 +1045,12 @@ xfce_pointers_helper_channel_property_changed (XfconfChannel *channel,
- const GValue *value,
- XfcePointersHelper *helper)
- {
-- Display *xdisplay = GDK_DISPLAY ();
-- XDeviceInfo *device_list, *device_info;
-- XDevice *device;
-- gint n, ndevices;
-- gchar **names;
-- gchar *device_name;
-+ Display *xdisplay = GDK_DISPLAY ();
-+ XDeviceInfo *device_list, *device_info;
-+ XfcePointerDeviceData *device_data;
-+ gint n, ndevices;
-+ gchar **names;
-+ gchar *device_name;
-
- if (G_UNLIKELY (property_name == NULL))
- return;
-@@ -1000,63 +1081,72 @@ xfce_pointers_helper_channel_property_changed (XfconfChannel *channel,
- /* filter the pointer devices */
- device_info = &device_list[n];
- if (device_info->use != IsXExtensionPointer
-- || device_info->name == NULL)
-+ || device_info->name == NULL
-+ || g_str_has_prefix (device_info->name, "Virtual core XTEST"))
- continue;
-
- /* search the device name */
- device_name = xfce_pointers_helper_device_xfconf_name (device_info->name);
- if (strcmp (names[0], device_name) == 0)
- {
-- /* open the device */
-- gdk_error_trap_push ();
-- device = XOpenDevice (xdisplay, device_info->id);
-- if (gdk_error_trap_pop () != 0 || device == NULL)
-+ /* find the device */
-+ device_data = g_hash_table_lookup (helper->pointer_devices, &device_info->id);
-+ if (device_data == NULL)
- {
-- g_critical ("Unable to open device %s", device_info->name);
-+ g_critical ("xfce_pointers_helper_channel_property_changed: Unable to find device %s / ID %i in hash table", device_info->name, device_info->id);
- continue;
- }
-
- /* check the property that requires updating */
- if (strcmp (names[1], "RightHanded") == 0)
- {
-- xfce_pointers_helper_change_button_mapping (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_button_mapping (device_info, device_data->device, xdisplay,
- g_value_get_boolean (value), -1);
- }
- else if (strcmp (names[1], "ReverseScrolling") == 0)
- {
-- xfce_pointers_helper_change_button_mapping (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_button_mapping (device_info, device_data->device, xdisplay,
- -1, g_value_get_boolean (value));
- }
- else if (strcmp (names[1], "Threshold") == 0)
- {
-- xfce_pointers_helper_change_feedback (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_feedback (device_info, device_data->device, xdisplay,
- g_value_get_int (value), -2.00);
- }
- else if (strcmp (names[1], "Acceleration") == 0)
- {
-- xfce_pointers_helper_change_feedback (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_feedback (device_info, device_data->device, xdisplay,
- -2, g_value_get_double (value));
- }
- #ifdef DEVICE_PROPERTIES
- else if (strcmp (names[1], "Properties") == 0)
- {
-- xfce_pointers_helper_change_property (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_property (device_info, device_data->device, xdisplay,
- names[2], value);
- }
- #endif
- else if (strcmp (names[1], "Mode") == 0)
- {
-- xfce_pointers_helper_change_mode (device_info, device, xdisplay,
-+ xfce_pointers_helper_change_mode (device_info, device_data->device, xdisplay,
- g_value_get_string (value));
- }
-+ else if (strcmp (names[1], "TouchscreenPointer") == 0)
-+ {
-+ /* only hide if the current device's property was changed */
-+ if (device_info->id == helper->last_pointer_active)
-+ {
-+ if (G_LIKELY (G_IS_OBJECT (helper->xsettings_helper)))
-+ g_object_set_property (helper->xsettings_helper, "touchscreen-pointer", value);
-+ else
-+ g_critical ("xsettings_helper was not properly set");
-+ }
-+ }
- else
- {
- g_warning ("Unknown property %s set for device %s",
- property_name, device_info->name);
- }
-
-- XCloseDevice (xdisplay, device);
--
- /* stop searching */
- n = ndevices;
- }
-@@ -1072,26 +1162,44 @@ xfce_pointers_helper_channel_property_changed (XfconfChannel *channel,
-
-
-
--#ifdef DEVICE_HOTPLUGGING
- static GdkFilterReturn
- xfce_pointers_helper_event_filter (GdkXEvent *xevent,
- GdkEvent *gdk_event,
- gpointer user_data)
- {
-+ XDevicePresenceNotifyEvent *dpn_event;
- XEvent *event = xevent;
-- XDevicePresenceNotifyEvent *dpn_event = xevent;
- XfcePointersHelper *helper = XFCE_POINTERS_HELPER (user_data);
-
-- if (event->type == helper->device_presence_event_type)
-+ /* Comparison for device changed is done here redundantly to prevent call
-+ * on every mouse move.
-+ */
-+ if (event->type == helper->device_motion_event_type
-+ && helper->last_pointer_active != ((XDeviceMotionEvent*)xevent)->deviceid)
-+ xfce_pointers_helper_change_current_device (helper, &((XDeviceMotionEvent*)xevent)->deviceid);
-+ else if (event->type == helper->device_button_press_event_type
-+ && helper->last_pointer_active != ((XDeviceButtonEvent*)xevent)->deviceid)
-+ xfce_pointers_helper_change_current_device (helper, &((XDeviceButtonEvent*)xevent)->deviceid);
-+
-+#ifdef DEVICE_HOTPLUGGING
-+ /* handle device add/remove */
-+ else if (event->type == helper->device_presence_event_type)
- {
-+ dpn_event = xevent;
- /* restore device settings */
- if (dpn_event->devchange == DeviceAdded)
- xfce_pointers_helper_restore_devices (helper, &dpn_event->deviceid);
-+ else if(dpn_event->devchange == DeviceRemoved)
-+ /* we could try to find a remaining pointer to set that as active
-+ * one but that might not fit and as soon as the user works with
-+ * another pointer we are changing to correct one.
-+ */
-+ g_hash_table_remove (helper->pointer_devices, &dpn_event->deviceid);
-
- /* check if we need to launch syndaemon */
- xfce_pointers_helper_syndaemon_check (helper);
- }
-+#endif
-
- return GDK_FILTER_CONTINUE;
- }
--#endif
---
-1.8.3.1
-