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

Bug#771519: marked as done (unblock: gnome-settings-daemon/3.14.2-1)



Your message dated Sun, 30 Nov 2014 12:40:56 +0000
with message-id <1417351256.2472.11.camel@adam-barratt.org.uk>
and subject line Re: Bug#771519: unblock: gnome-settings-daemon/3.14.2-1
has caused the Debian Bug report #771519,
regarding unblock: gnome-settings-daemon/3.14.2-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
771519: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771519
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
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

--- End Message ---
--- Begin Message ---
On Sun, 2014-11-30 at 13:23 +0100, Josselin Mouette wrote:
> 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.

Unblocked, thanks.

Regards,

Adam

--- End Message ---

Reply to: