Package: release.debian.org Severity: normal User: release.debian....@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 <j...@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-maintain...@lists.alioth.debian.org> -Uploaders: Andreas Henriksson <andr...@fatal.se>, Emilio Pozuelo Monfort <po...@debian.org>, Laurent Bigonville <bi...@debian.org>, Sjoerd Simons <sjo...@debian.org> +Uploaders: Andreas Henriksson <andr...@fatal.se>, Emilio Pozuelo Monfort <po...@debian.org>, Josselin Mouette <j...@debian.org>, Laurent Bigonville <bi...@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 <tiagoma...@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