[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#771519: unblock: gnome-settings-daemon/3.14.2-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Hi,

please unblock gnome-settings-daemon for the following changes:

gnome-settings-daemon (3.14.2-1) unstable; urgency=medium

  * New upstream translation and bugfix release.
  * 30_xrandr_dbus_init.patch: patch from upstream git. Fixes a crash
    due to a race condition in dbus initialization.

Attaching non-translation upstream changes between 3.14.1 and 3.14.2, as 
well as Debian changes.

unblock gnome-settings-daemon/3.14.2-1

Thanks,
-- 
 .''`.        Josselin Mouette
: :' :
`. `'
  `-
Index: debian/changelog
===================================================================
--- debian/changelog	(révision 43953)
+++ debian/changelog	(copie de travail)
@@ -1,3 +1,11 @@
+gnome-settings-daemon (3.14.2-1) unstable; urgency=medium
+
+  * New upstream translation and bugfix release.
+  * 30_xrandr_dbus_init.patch: patch from upstream git. Fixes a crash
+    due to a race condition in dbus initialization.
+
+ -- Josselin Mouette <joss@debian.org>  Sun, 30 Nov 2014 12:46:20 +0100
+
 gnome-settings-daemon (3.14.1-1) unstable; urgency=medium
 
   * New upstream release.
Index: debian/control
===================================================================
--- debian/control	(révision 43953)
+++ debian/control	(copie de travail)
@@ -6,7 +6,7 @@
 Section: gnome
 Priority: optional
 Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
-Uploaders: Andreas Henriksson <andreas@fatal.se>, Emilio Pozuelo Monfort <pochu@debian.org>, Laurent Bigonville <bigon@debian.org>, Sjoerd Simons <sjoerd@debian.org>
+Uploaders: Andreas Henriksson <andreas@fatal.se>, Emilio Pozuelo Monfort <pochu@debian.org>, Josselin Mouette <joss@debian.org>, Laurent Bigonville <bigon@debian.org>
 Build-Depends: cdbs,
                debhelper (>= 9),
                gnome-pkg-tools,
@@ -45,7 +45,7 @@
                libgeocode-glib-dev (>= 3.10.0),
                geoclue-2.0 (>= 2.1.2),
                xkb-data
-Standards-Version: 3.9.5
+Standards-Version: 3.9.6
 Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-gnome/desktop/unstable/gnome-settings-daemon/
 Vcs-Svn: svn://anonscm.debian.org/pkg-gnome/desktop/unstable/gnome-settings-daemon/
 
Index: debian/patches/30_xrandr_dbus_init.patch
===================================================================
--- debian/patches/30_xrandr_dbus_init.patch	(révision 0)
+++ debian/patches/30_xrandr_dbus_init.patch	(copie de travail)
@@ -0,0 +1,65 @@
+From e4b1d27d5d1df77301a5c018ddfb086e4da9e8e4 Mon Sep 17 00:00:00 2001
+From: Rui Matos <tiagomatos@gmail.com>
+Date: Fri, 14 Nov 2014 23:27:54 +0100
+Subject: xrandr: Register our DBus API only after all other initialization
+
+Otherwise we risk being called and not have all out internal state
+ready (e.g. priv->rw_screen being NULL) leading to crashes.
+
+We also need to disown our well known name on stop() since we'll
+reaquire it if start() gets called again.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740151
+
+diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
+index 007beab..67b3ed1 100644
+--- a/plugins/xrandr/gsd-xrandr-manager.c
++++ b/plugins/xrandr/gsd-xrandr-manager.c
+@@ -129,6 +129,7 @@ static void get_allowed_rotations_for_output (GnomeRRConfig *config,
+                                               GnomeRRRotation *out_rotations);
+ static void handle_fn_f7 (GsdXrandrManager *mgr, gint64 timestamp);
+ static void handle_rotate_windows (GsdXrandrManager *mgr, GnomeRRRotation rotation, gint64 timestamp);
++static void register_manager_dbus (GsdXrandrManager *manager);
+ 
+ G_DEFINE_TYPE (GsdXrandrManager, gsd_xrandr_manager, G_TYPE_OBJECT)
+ 
+@@ -1232,6 +1233,7 @@ on_rr_screen_acquired (GObject      *object,
+         manager->priv->settings = g_settings_new (CONF_SCHEMA);
+ 
+         manager_init_devices (manager);
++        register_manager_dbus (manager);
+ 
+         log_close ();
+ }
+@@ -1283,6 +1285,9 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
+                 manager->priv->upower_client = NULL;
+         }
+ 
++        if (manager->priv->name_id != 0)
++                g_bus_unown_name (manager->priv->name_id);
++
+         if (manager->priv->introspection_data) {
+                 g_dbus_node_info_unref (manager->priv->introspection_data);
+                 manager->priv->introspection_data = NULL;
+@@ -1341,9 +1346,6 @@ gsd_xrandr_manager_finalize (GObject *object)
+ 
+         gsd_xrandr_manager_stop (manager);
+ 
+-        if (manager->priv->name_id != 0)
+-                g_bus_unown_name (manager->priv->name_id);
+-
+         G_OBJECT_CLASS (gsd_xrandr_manager_parent_class)->finalize (object);
+ }
+ 
+@@ -1462,8 +1464,6 @@ gsd_xrandr_manager_new (void)
+                 manager_object = g_object_new (GSD_TYPE_XRANDR_MANAGER, NULL);
+                 g_object_add_weak_pointer (manager_object,
+                                            (gpointer *) &manager_object);
+-
+-                register_manager_dbus (manager_object);
+         }
+ 
+         return GSD_XRANDR_MANAGER (manager_object);
+-- 
+cgit v0.10.1
+
Index: debian/patches/series
===================================================================
--- debian/patches/series	(révision 43953)
+++ debian/patches/series	(copie de travail)
@@ -1 +1,2 @@
 04_superP.patch
+30_xrandr_dbus_init.patch
diff --git a/NEWS b/NEWS
index 29c12a2..ed6261a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,29 @@
 ==============
+Version 3.14.2
+==============
+
+- Updated translations
+
+Media-keys:
+- Fixed a few minor leaks
+
+Power:
+- Disable touchscreens when turning off its screen
+
+Smartcard:
+- Fixed a locking issue
+
+Wacom:
+- Fix possible crash in GsdDeviceMapper
+- Make sure that display-less tablets can be set back to mapping to
+  the full desktop extent
+- Make sure that the output is looked up again from settings when the
+  connected outputs change
+
+XSettings:
+- Don't check for hi-dpi on monitors with broken EDID
+
+==============
 Version 3.14.1
 ==============
 
diff --git a/configure.ac b/configure.ac
index 5132ae9..4bf280e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
 AC_PREREQ([2.60])
 
 AC_INIT([gnome-settings-daemon],
-        [3.14.1],
+        [3.14.2],
         [http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-settings-daemon])
 
 AC_CONFIG_SRCDIR([gnome-settings-daemon/gnome-settings-manager.c])
diff --git a/plugins/a11y-settings/gsd-a11y-settings-manager.c b/plugins/a11y-settings/gsd-a11y-settings-manager.c
index de9d469..ad5e650 100644
--- a/plugins/a11y-settings/gsd-a11y-settings-manager.c
+++ b/plugins/a11y-settings/gsd-a11y-settings-manager.c
@@ -148,6 +148,8 @@ gsd_a11y_settings_manager_finalize (GObject *object)
 
         g_return_if_fail (a11y_settings_manager->priv != NULL);
 
+        gsd_a11y_settings_manager_stop (a11y_settings_manager);
+
         G_OBJECT_CLASS (gsd_a11y_settings_manager_parent_class)->finalize (object);
 }
 
diff --git a/plugins/clipboard/gsd-clipboard-manager.c b/plugins/clipboard/gsd-clipboard-manager.c
index c9d5276..09d778f 100644
--- a/plugins/clipboard/gsd-clipboard-manager.c
+++ b/plugins/clipboard/gsd-clipboard-manager.c
@@ -1011,6 +1011,8 @@ gsd_clipboard_manager_finalize (GObject *object)
 
         g_return_if_fail (clipboard_manager->priv != NULL);
 
+        gsd_clipboard_manager_stop (clipboard_manager);
+
         if (clipboard_manager->priv->start_idle_id !=0)
                 g_source_remove (clipboard_manager->priv->start_idle_id);
 
diff --git a/plugins/color/gsd-color-manager.c b/plugins/color/gsd-color-manager.c
index 5ad4517..dd6ec5c 100644
--- a/plugins/color/gsd-color-manager.c
+++ b/plugins/color/gsd-color-manager.c
@@ -120,6 +120,8 @@ gsd_color_manager_finalize (GObject *object)
 
         manager = GSD_COLOR_MANAGER (object);
 
+        gsd_color_manager_stop (manager);
+
         g_clear_object (&manager->priv->calibrate);
         g_clear_object (&manager->priv->profiles);
         g_clear_object (&manager->priv->state);
diff --git a/plugins/common/gsd-device-mapper.c b/plugins/common/gsd-device-mapper.c
index 3b1cab4..41cd0f5 100644
--- a/plugins/common/gsd-device-mapper.c
+++ b/plugins/common/gsd-device-mapper.c
@@ -124,6 +124,8 @@ enum {
 
 static GnomeRROutput * input_info_find_size_match (GsdInputInfo  *input,
                                                    GnomeRRScreen *rr_screen);
+static void            input_info_update_settings_output (GsdInputInfo *info);
+
 
 static guint signals[N_SIGNALS] = { 0 };
 
@@ -500,6 +502,9 @@ input_info_set_output (GsdInputInfo  *input,
 static GsdOutputInfo *
 input_info_get_output (GsdInputInfo *input)
 {
+	if (!input)
+		return NULL;
+
 	if (input->output)
 		return input->output;
 
@@ -814,6 +819,8 @@ mapper_recalculate_candidates (GsdDeviceMapper *mapper)
 	while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &input)) {
 		GnomeRROutput *outputs[N_OUTPUT_PRIORITIES] = { 0 };
 
+		input_info_update_settings_output (input);
+
 		/* Device has an output from settings */
 		if (input->output)
 			continue;
@@ -918,25 +925,40 @@ input_info_update_capabilities (GsdInputInfo *info)
 }
 
 static void
+input_info_update_settings_output (GsdInputInfo *info)
+{
+	GsdOutputInfo *output = NULL;
+	GnomeRROutput *rr_output;
+
+	if (!info->settings || !info->mapper->rr_screen)
+		return;
+
+	rr_output = settings_get_display (info->settings, info->mapper);
+
+	if (rr_output)
+		output = g_hash_table_lookup (info->mapper->output_devices,
+					      rr_output);
+
+	if (output == info->output)
+		return;
+
+	if (output) {
+		input_info_set_output (info, output, FALSE, FALSE);
+		input_info_remap (info);
+	} else {
+		/* Guess an output for this device */
+		input_info_set_output (info, NULL, FALSE, FALSE);
+		mapper_recalculate_input (info->mapper, info);
+	}
+}
+
+static void
 device_settings_changed_cb (GSettings	 *settings,
 			    gchar	 *key,
 			    GsdInputInfo *input)
 {
 	if (g_str_equal (key, KEY_DISPLAY)) {
-		GnomeRROutput *rr_output;
-		GsdOutputInfo *output;
-
-		rr_output = settings_get_display (settings, input->mapper);
-
-		if (rr_output) {
-			output = g_hash_table_lookup (input->mapper->output_devices,
-						      rr_output);
-			input_info_set_output (input, output, FALSE, FALSE);
-			input_info_remap (input);
-		} else if (input->mapper->rr_screen) {
-			/* Guess an output for this device */
-			mapper_recalculate_input (input->mapper, input);
-		}
+		input_info_update_settings_output (input);
 	} else if (g_str_equal (key, KEY_ROTATION)) {
 		/* Remap the device so the new rotation is applied */
 		input_info_remap (input);
@@ -948,8 +970,6 @@ input_info_new (GdkDevice	*device,
 		GSettings	*settings,
 		GsdDeviceMapper *mapper)
 {
-	GnomeRROutput *rr_output = NULL;
-	GsdOutputInfo *output = NULL;
 	GsdInputInfo *info;
 
 	info = g_new0 (GsdInputInfo, 1);
@@ -961,22 +981,10 @@ input_info_new (GdkDevice	*device,
 		info->changed_id = g_signal_connect (info->settings, "changed",
 						     G_CALLBACK (device_settings_changed_cb),
 						     info);
-
-		/* Assign output from config */
-		if (mapper->rr_screen)
-			rr_output = settings_get_display (settings, mapper);
 	}
 
 	input_info_update_capabilities (info);
-
-	if (rr_output) {
-		output = g_hash_table_lookup (mapper->output_devices,
-					      rr_output);
-		input_info_set_output (info, output, FALSE, FALSE);
-		input_info_remap (info);
-	} else if (mapper->rr_screen) {
-		mapper_recalculate_input (mapper, info);
-	}
+	input_info_update_settings_output (info);
 
 	return info;
 }
diff --git a/plugins/cursor/gsd-cursor-manager.c b/plugins/cursor/gsd-cursor-manager.c
index 46cb0ca..57da7f7 100644
--- a/plugins/cursor/gsd-cursor-manager.c
+++ b/plugins/cursor/gsd-cursor-manager.c
@@ -477,8 +477,20 @@ gsd_cursor_manager_stop (GsdCursorManager *manager)
 }
 
 static void
+gsd_cursor_manager_finalize (GObject *object)
+{
+        gsd_cursor_manager_stop (GSD_CURSOR_MANAGER (object));
+
+        G_OBJECT_CLASS (gsd_cursor_manager_parent_class)->finalize (object);
+}
+
+static void
 gsd_cursor_manager_class_init (GsdCursorManagerClass *klass)
 {
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+        object_class->finalize = gsd_cursor_manager_finalize;
+
         g_type_class_add_private (klass, sizeof (GsdCursorManagerPrivate));
 }
 
diff --git a/plugins/housekeeping/gsd-housekeeping-manager.c b/plugins/housekeeping/gsd-housekeeping-manager.c
index ac15c2b..df0ff3a 100644
--- a/plugins/housekeeping/gsd-housekeeping-manager.c
+++ b/plugins/housekeeping/gsd-housekeeping-manager.c
@@ -445,8 +445,20 @@ gsd_housekeeping_manager_stop (GsdHousekeepingManager *manager)
 }
 
 static void
+gsd_housekeeping_manager_finalize (GObject *object)
+{
+        gsd_housekeeping_manager_stop (GSD_HOUSEKEEPING_MANAGER (object));
+
+        G_OBJECT_CLASS (gsd_housekeeping_manager_parent_class)->finalize (object);
+}
+
+static void
 gsd_housekeeping_manager_class_init (GsdHousekeepingManagerClass *klass)
 {
+        GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+        object_class->finalize = gsd_housekeeping_manager_finalize;
+
         g_type_class_add_private (klass, sizeof (GsdHousekeepingManagerPrivate));
 }
 
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index 58972e0..e7b79dd 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -871,6 +871,8 @@ gsd_keyboard_manager_finalize (GObject *object)
 
         g_return_if_fail (keyboard_manager->priv != NULL);
 
+        gsd_keyboard_manager_stop (keyboard_manager);
+
         if (keyboard_manager->priv->start_idle_id != 0)
                 g_source_remove (keyboard_manager->priv->start_idle_id);
 
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 39fe789..dcd14f2 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -2316,6 +2316,7 @@ shell_presence_changed (GsdMediaKeysManager *manager)
         } else {
                 g_ptr_array_set_size (manager->priv->keys, 0);
                 g_clear_object (&manager->priv->key_grabber);
+                g_clear_object (&manager->priv->screencast_proxy);
         }
 }
 
@@ -2412,6 +2413,11 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
 
         g_debug ("Stopping media_keys manager");
 
+        if (priv->start_idle_id != 0) {
+                g_source_remove (priv->start_idle_id);
+                priv->start_idle_id = 0;
+        }
+
         if (priv->bus_cancellable != NULL) {
                 g_cancellable_cancel (priv->bus_cancellable);
                 g_object_unref (priv->bus_cancellable);
@@ -2464,6 +2470,8 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 priv->keys = NULL;
         }
 
+        g_clear_object (&priv->key_grabber);
+
         if (priv->grab_cancellable != NULL) {
                 g_cancellable_cancel (priv->grab_cancellable);
                 g_clear_object (&priv->grab_cancellable);
@@ -2482,6 +2490,8 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 g_list_free_full (priv->media_players, (GDestroyNotify) free_media_player);
                 priv->media_players = NULL;
         }
+
+        g_clear_object (&priv->shell_proxy);
 }
 
 static void
@@ -2588,13 +2598,13 @@ gsd_media_keys_manager_finalize (GObject *object)
 
         g_return_if_fail (media_keys_manager->priv != NULL);
 
-        if (media_keys_manager->priv->start_idle_id != 0)
-                g_source_remove (media_keys_manager->priv->start_idle_id);
+        gsd_media_keys_manager_stop (media_keys_manager);
+
         if (media_keys_manager->priv->inhibit_keys_fd != -1)
                 close (media_keys_manager->priv->inhibit_keys_fd);
 
+        g_clear_object (&media_keys_manager->priv->logind_proxy);
         g_clear_object (&media_keys_manager->priv->screen_saver_proxy);
-        g_clear_object (&media_keys_manager->priv->shell_proxy);
 
         G_OBJECT_CLASS (gsd_media_keys_manager_parent_class)->finalize (object);
 }
diff --git a/plugins/orientation/gsd-orientation-manager.c b/plugins/orientation/gsd-orientation-manager.c
index fbb89bd..e1ad447 100644
--- a/plugins/orientation/gsd-orientation-manager.c
+++ b/plugins/orientation/gsd-orientation-manager.c
@@ -507,6 +507,8 @@ gsd_orientation_manager_finalize (GObject *object)
 
         g_return_if_fail (orientation_manager->priv != NULL);
 
+        gsd_orientation_manager_stop (orientation_manager);
+
         if (orientation_manager->priv->start_idle_id != 0)
                 g_source_remove (orientation_manager->priv->start_idle_id);
 
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index 069ddaf..0c2469d 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -37,6 +37,7 @@
 #include <libgnome-desktop/gnome-idle-monitor.h>
 
 #include <gsd-input-helper.h>
+#include <gsd-device-mapper.h>
 
 #include "gsd-power-constants.h"
 #include "gsm-inhibitor-flag.h"
@@ -128,6 +129,7 @@ struct GsdPowerManagerPrivate
         /* Screensaver */
         GsdScreenSaver          *screensaver_proxy;
         gboolean                 screensaver_active;
+        GList                   *disabled_devices;
 
         /* State */
         gboolean                 lid_is_present;
@@ -915,6 +917,47 @@ action_hibernate (GsdPowerManager *manager)
 }
 
 static void
+screen_devices_disable (GsdPowerManager *manager)
+{
+        GsdDeviceMapper *mapper;
+        GdkDeviceManager *device_manager;
+        GList *devices, *l, *to_change;
+
+        mapper = gsd_device_mapper_get ();
+        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;
+
+                if (gsd_device_mapper_get_device_output (mapper, device) != NULL) {
+                        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_list_free (devices);
+
+        for (l = to_change; 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;
+}
+
+static void
+screen_devices_enable (GsdPowerManager *manager)
+{
+        GList *l;
+
+        for (l = manager->priv->disabled_devices; l != NULL; l = l->next)
+                set_device_enabled (GPOINTER_TO_INT (l->data), TRUE);
+
+        g_clear_pointer (&manager->priv->disabled_devices, g_list_free);
+}
+
+static void
 backlight_enable (GsdPowerManager *manager)
 {
         gboolean ret;
@@ -929,6 +972,8 @@ backlight_enable (GsdPowerManager *manager)
                 g_error_free (error);
         }
 
+        screen_devices_enable (manager);
+
         g_debug ("TESTSUITE: Unblanked screen");
 }
 
@@ -946,6 +991,9 @@ backlight_disable (GsdPowerManager *manager)
                            error->message);
                 g_error_free (error);
         }
+
+        screen_devices_disable (manager);
+
         g_debug ("TESTSUITE: Blanked screen");
 }
 
@@ -1778,6 +1826,8 @@ gsd_power_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
+        gsd_power_manager_stop (manager);
+
         g_clear_object (&manager->priv->connection);
 
         if (manager->priv->name_id != 0)
@@ -2405,6 +2455,8 @@ gsd_power_manager_stop (GsdPowerManager *manager)
 {
         g_debug ("Stopping power manager");
 
+        screen_devices_enable (manager);
+
         if (manager->priv->inhibit_lid_switch_timer_id != 0) {
                 g_source_remove (manager->priv->inhibit_lid_switch_timer_id);
                 manager->priv->inhibit_lid_switch_timer_id = 0;
@@ -2421,7 +2473,8 @@ gsd_power_manager_stop (GsdPowerManager *manager)
                 manager->priv->introspection_data = NULL;
         }
 
-        g_signal_handlers_disconnect_by_data (manager->priv->up_client, manager);
+        if (manager->priv->up_client)
+                g_signal_handlers_disconnect_by_data (manager->priv->up_client, manager);
 
         g_clear_object (&manager->priv->session);
         g_clear_object (&manager->priv->settings);
diff --git a/plugins/print-notifications/gsd-print-notifications-manager.c b/plugins/print-notifications/gsd-print-notifications-manager.c
index 120b503..34c4927 100644
--- a/plugins/print-notifications/gsd-print-notifications-manager.c
+++ b/plugins/print-notifications/gsd-print-notifications-manager.c
@@ -1382,8 +1382,7 @@ gsd_print_notifications_manager_stop (GsdPrintNotificationsManager *manager)
         if (manager->priv->subscription_id >= 0)
                 cancel_subscription (manager->priv->subscription_id);
 
-        if (manager->priv->printing_printers)
-                g_hash_table_destroy (manager->priv->printing_printers);
+        g_clear_pointer (&manager->priv->printing_printers, g_hash_table_destroy);
 
         g_clear_object (&manager->priv->cups_bus_connection);
 
@@ -1442,6 +1441,8 @@ gsd_print_notifications_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
+        gsd_print_notifications_manager_stop (manager);
+
         if (manager->priv->start_idle_id != 0)
                 g_source_remove (manager->priv->start_idle_id);
 
diff --git a/plugins/screensaver-proxy/gsd-screensaver-proxy-manager.c b/plugins/screensaver-proxy/gsd-screensaver-proxy-manager.c
index a1f37f1..c1111e5 100644
--- a/plugins/screensaver-proxy/gsd-screensaver-proxy-manager.c
+++ b/plugins/screensaver-proxy/gsd-screensaver-proxy-manager.c
@@ -401,6 +401,8 @@ gsd_screensaver_proxy_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
+        gsd_screensaver_proxy_manager_stop (manager);
+
         if (manager->priv->name_id != 0) {
                 g_bus_unown_name (manager->priv->name_id);
                 manager->priv->name_id = 0;
diff --git a/plugins/smartcard/gsd-smartcard-manager.c b/plugins/smartcard/gsd-smartcard-manager.c
index 6c3c1cb..e81ace2 100644
--- a/plugins/smartcard/gsd-smartcard-manager.c
+++ b/plugins/smartcard/gsd-smartcard-manager.c
@@ -852,26 +852,25 @@ PK11SlotInfo *
 gsd_smartcard_manager_get_login_token (GsdSmartcardManager *self)
 {
         GsdSmartcardManagerPrivate *priv = self->priv;
+        PK11SlotInfo *card_slot = NULL;
         GList *node;
 
         G_LOCK (gsd_smartcards_watch_tasks);
         node = priv->smartcards_watch_tasks;
         while (node != NULL) {
-                PK11SlotInfo *card_slot;
-
                 GTask *task = node->data;
                 WatchSmartcardsOperation *operation = g_task_get_task_data (task);
 
                 card_slot = get_login_token_for_operation (self, operation);
 
                 if (card_slot != NULL)
-                        return card_slot;
+                        break;
 
                 node = node->next;
         }
         G_UNLOCK (gsd_smartcards_watch_tasks);
 
-        return NULL;
+        return card_slot;
 }
 
 static GList *
diff --git a/plugins/wacom/gsd-wacom-manager.c b/plugins/wacom/gsd-wacom-manager.c
index 05fdcc7..786a601 100644
--- a/plugins/wacom/gsd-wacom-manager.c
+++ b/plugins/wacom/gsd-wacom-manager.c
@@ -1943,6 +1943,8 @@ gsd_wacom_manager_finalize (GObject *object)
 
         g_return_if_fail (wacom_manager->priv != NULL);
 
+        gsd_wacom_manager_stop (wacom_manager);
+
         if (wacom_manager->priv->warned_devices) {
                 g_hash_table_destroy (wacom_manager->priv->warned_devices);
                 wacom_manager->priv->warned_devices = NULL;
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index be31e06..9b2519a 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -1292,6 +1292,7 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
                                              manager->priv->device_added_id);
                 g_signal_handler_disconnect (manager->priv->device_manager,
                                              manager->priv->device_removed_id);
+                manager->priv->device_manager = NULL;
         }
 
         log_open ();
@@ -1330,6 +1331,8 @@ gsd_xrandr_manager_finalize (GObject *object)
 
         g_return_if_fail (manager->priv != NULL);
 
+        gsd_xrandr_manager_stop (manager);
+
         if (manager->priv->name_id != 0)
                 g_bus_unown_name (manager->priv->name_id);
 
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index e308269..489021c 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -599,6 +599,14 @@ get_window_scale (GnomeXSettingsManager *manager)
                 if (height < HIDPI_MIN_HEIGHT)
                         goto out;
 
+                /* Somebody encoded the aspect ratio (16/9 or 16/10)
+                 * instead of the physical size */
+                if ((width_mm == 160 && height_mm == 90) ||
+                    (width_mm == 160 && height_mm == 100) ||
+                    (width_mm == 16 && height_mm == 9) ||
+                    (width_mm == 16 && height_mm == 10))
+                        goto out;
+
                 window_scale = 1;
                 if (width_mm > 0 && height_mm > 0) {
                         dpi_x = (double)width / (width_mm / 25.4);
@@ -1266,8 +1274,10 @@ gnome_xsettings_manager_stop (GnomeXSettingsManager *manager)
                 g_clear_object (&manager->priv->rr_screen);
         }
 
-        if (p->shell_name_watch_id > 0)
+        if (p->shell_name_watch_id > 0) {
                 g_bus_unwatch_name (p->shell_name_watch_id);
+                p->shell_name_watch_id = 0;
+        }
 
         if (p->manager != NULL) {
                 xsettings_manager_destroy (p->manager);
@@ -1320,6 +1330,8 @@ gnome_xsettings_manager_finalize (GObject *object)
 
         g_return_if_fail (xsettings_manager->priv != NULL);
 
+        gnome_xsettings_manager_stop (xsettings_manager);
+
         if (xsettings_manager->priv->start_idle_id != 0)
                 g_source_remove (xsettings_manager->priv->start_idle_id);
 
diff --git a/po/LINGUAS b/po/LINGUAS
index 5d3ab31..f910735 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -43,6 +43,7 @@ is
 it
 ja
 ka
+kk
 km
 kn
 ko
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 0000000..0368a5e

Reply to: