summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2015-01-20 16:58:16 +0100
committerBastien Nocera <hadess@hadess.net>2015-01-20 17:09:28 +0100
commit03294b8a4d9dcd166534887f801de4003e1468b7 (patch)
tree577d15e170550c89da6679a75c8ef4a218ef6d9f
parent7fc7a0d8f4684800399624a1a65d6a88bfc864f7 (diff)
downloadgnome-settings-daemon-03294b8a4d9dcd166534887f801de4003e1468b7.tar.gz
power: Don't forget about disabled touchscreens
When blanking the screen twice, which can happen when suspending, don't forget about previously disabled touchscreens. See https://bugzilla.redhat.com/show_bug.cgi?id=1173849 https://bugzilla.gnome.org/show_bug.cgi?id=743252 Conflicts: plugins/power/gsd-power-manager.c
-rw-r--r--plugins/power/gsd-power-manager.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 1732598a..83adbef2 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -131,7 +131,7 @@ struct GsdPowerManagerPrivate
/* Screensaver */
GsdScreenSaver *screensaver_proxy;
gboolean screensaver_active;
- GList *disabled_devices;
+ GHashTable *disabled_devices;
/* State */
gboolean lid_is_present;
@@ -922,7 +922,7 @@ static void
screen_devices_disable (GsdPowerManager *manager)
{
GdkDeviceManager *device_manager;
- GList *devices, *l, *to_change;
+ GList *devices, *l;
/* This will be managed by the compositor eventually on X11 too:
* https://bugzilla.gnome.org/show_bug.cgi?id=742598
@@ -932,7 +932,6 @@ screen_devices_disable (GsdPowerManager *manager)
device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_SLAVE);
- to_change = NULL;
for (l = devices; l != NULL; l = l->next ) {
GdkDevice *device = l->data;
GdkInputSource source;
@@ -945,30 +944,33 @@ screen_devices_disable (GsdPowerManager *manager)
int device_id;
g_object_get (device, "device-id", &device_id, NULL);
- to_change = g_list_prepend (to_change, GINT_TO_POINTER (device_id));
+ g_hash_table_insert (manager->priv->disabled_devices,
+ GINT_TO_POINTER (device_id),
+ GINT_TO_POINTER (TRUE));
}
}
g_list_free (devices);
- for (l = to_change; l != NULL; l = l->next)
+ devices = g_hash_table_get_keys (manager->priv->disabled_devices);
+ for (l = devices; l != NULL; l = l->next)
set_device_enabled (GPOINTER_TO_INT (l->data), FALSE);
-
- g_clear_pointer (&manager->priv->disabled_devices, g_list_free);
- manager->priv->disabled_devices = to_change;
+ g_list_free (devices);
}
static void
screen_devices_enable (GsdPowerManager *manager)
{
- GList *l;
+ GList *l, *disabled_devices;
if (gnome_settings_is_wayland ())
return;
- for (l = manager->priv->disabled_devices; l != NULL; l = l->next)
+ disabled_devices = g_hash_table_get_keys (manager->priv->disabled_devices);
+ for (l = disabled_devices; l != NULL; l = l->next)
set_device_enabled (GPOINTER_TO_INT (l->data), TRUE);
+ g_list_free (disabled_devices);
- g_clear_pointer (&manager->priv->disabled_devices, g_list_free);
+ g_hash_table_remove_all (manager->priv->disabled_devices);
}
static void
@@ -1842,6 +1844,8 @@ gsd_power_manager_finalize (GObject *object)
gsd_power_manager_stop (manager);
+ g_clear_pointer (&manager->priv->disabled_devices, g_hash_table_unref);
+
g_clear_object (&manager->priv->connection);
if (manager->priv->name_id != 0)
@@ -2535,6 +2539,7 @@ gsd_power_manager_init (GsdPowerManager *manager)
manager->priv->inhibit_lid_switch_fd = -1;
manager->priv->inhibit_suspend_fd = -1;
manager->priv->bus_cancellable = g_cancellable_new ();
+ manager->priv->disabled_devices = g_hash_table_new (g_direct_hash, g_direct_equal);
}
/* returns new level */