diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/debian/changelog unity-settings-daemon-15.04.1+15.04.20141127/debian/changelog --- unity-settings-daemon-15.04.0+15.10.20141030/debian/changelog 2014-11-27 11:47:15.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/debian/changelog 2014-11-27 11:47:15.000000000 +0000 @@ -1,3 +1,14 @@ +unity-settings-daemon (15.04.1+15.04.20141127-0ubuntu1) vivid; urgency=medium + + [ Iain Lane ] + * Add patch from Tim Lunn to support upower 0.99 properly. (LP: #1394063) + + [ Dmitry Shachnev ] + * Add Gtk/DecorationLayout XSettings export (based on + org.gnome.desktop.wm.preferences button-layout GSettings key). + + -- Ubuntu daily release Thu, 27 Nov 2014 11:42:11 +0000 + unity-settings-daemon (15.04.0+15.10.20141030-0ubuntu1) vivid; urgency=medium [ Tim Lunn ] diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/debian/control unity-settings-daemon-15.04.1+15.04.20141127/debian/control --- unity-settings-daemon-15.04.0+15.10.20141030/debian/control 2014-11-27 11:47:15.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/debian/control 2014-11-27 11:47:15.000000000 +0000 @@ -30,7 +30,7 @@ libaccountsservice-dev (>= 0.6.34), libappindicator3-dev (>= 0.4.90), hwdata, - libupower-glib-dev (>= 0.9.11), + libupower-glib-dev (>= 0.99.1), libcolord-dev (>= 0.1.12), liblcms2-dev, libnss3-dev, diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/power/gsd-power-manager.c unity-settings-daemon-15.04.1+15.04.20141127/plugins/power/gsd-power-manager.c --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/power/gsd-power-manager.c 2014-11-27 11:47:15.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/power/gsd-power-manager.c 2014-11-27 11:41:51.000000000 +0000 @@ -242,6 +242,7 @@ static void inhibit_lid_switch (GsdPowerManager *manager); static void uninhibit_lid_switch (GsdPowerManager *manager); static void main_battery_or_ups_low_changed (GsdPowerManager *manager, gboolean is_low); +static void device_properties_changed_cb (UpDevice *device, GParamSpec *pspec, GsdPowerManager *manager); static gboolean idle_is_session_inhibited (GsdPowerManager *manager, guint mask, gboolean *is_inhibited); static void idle_set_mode (GsdPowerManager *manager, GsdPowerIdleMode mode); static void idle_triggered_idle_cb (GsdIdleMonitor *monitor, guint watch_id, gpointer user_data); @@ -1036,6 +1037,13 @@ GUINT_TO_POINTER(state)); } + g_ptr_array_add (manager->priv->devices_array, g_object_ref(device)); + + g_signal_connect (device, "notify::state", + G_CALLBACK (device_properties_changed_cb), manager); + g_signal_connect (device, "notify::warning-level", + G_CALLBACK (device_properties_changed_cb), manager); + /* the device is recalled */ if (recall_notice) device_perhaps_recall (manager, device); @@ -1083,14 +1091,6 @@ gboolean ret; GError *error = NULL; - /* get devices from UPower */ - ret = up_client_enumerate_devices_sync (manager->priv->up_client, NULL, &error); - if (!ret) { - g_warning ("failed to get device list: %s", error->message); - g_error_free (error); - goto out; - } - engine_recalculate_state (manager); /* add to database */ @@ -1121,13 +1121,18 @@ } static void -engine_device_removed_cb (UpClient *client, UpDevice *device, GsdPowerManager *manager) +engine_device_removed_cb (UpClient *client, const char *object_path, GsdPowerManager *manager) { - gboolean ret; - ret = g_ptr_array_remove (manager->priv->devices_array, device); - if (!ret) - return; - engine_recalculate_state (manager); + guint i; + + for (i = 0; i < manager->priv->devices_array->len; i++) { + UpDevice *device = g_ptr_array_index (manager->priv->devices_array, i); + + if (g_strcmp0 (object_path, up_device_get_object_path (device)) == 0) { + g_ptr_array_remove_index (manager->priv->devices_array, i); + break; + } + } } static void @@ -1246,13 +1251,15 @@ GVariant *result = NULL; policy = g_settings_get_enum (manager->priv->settings, "critical-battery-action"); + if (policy == GSD_POWER_ACTION_SUSPEND) { - if (is_ups == FALSE) + if (is_ups == FALSE) { result = g_dbus_proxy_call_sync (manager->priv->logind_proxy, "CanSuspend", NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL); + } } else if (policy == GSD_POWER_ACTION_HIBERNATE) { result = g_dbus_proxy_call_sync (manager->priv->logind_proxy, "CanHibernate", @@ -1266,9 +1273,12 @@ if (result) { const char *s; + g_variant_get (result, "(s)", &s); if (g_strcmp0 (s, "yes") != 0) policy = GSD_POWER_ACTION_SHUTDOWN; + + g_variant_unref (result); } else { policy = GSD_POWER_ACTION_SHUTDOWN; } @@ -1780,7 +1790,7 @@ } static void -engine_device_changed_cb (UpClient *client, UpDevice *device, GsdPowerManager *manager) +device_properties_changed_cb (UpDevice *device, GParamSpec *pspec, GsdPowerManager *manager) { UpDeviceKind kind; UpDeviceState state; @@ -2306,7 +2316,7 @@ } static void -up_client_changed_cb (UpClient *client, GsdPowerManager *manager) +lid_state_changed_cb (UpClient *client, GParamSpec *pspec, GsdPowerManager *manager) { gboolean tmp; @@ -3494,10 +3504,8 @@ G_CALLBACK (engine_device_added_cb), manager); g_signal_connect (manager->priv->up_client, "device-removed", G_CALLBACK (engine_device_removed_cb), manager); - g_signal_connect (manager->priv->up_client, "device-changed", - G_CALLBACK (engine_device_changed_cb), manager); - g_signal_connect_after (manager->priv->up_client, "changed", - G_CALLBACK (up_client_changed_cb), manager); + g_signal_connect_after (manager->priv->up_client, "notify::lid-is-closed", + G_CALLBACK (lid_state_changed_cb), manager); g_signal_connect (manager->priv->up_client, "notify::on-battery", G_CALLBACK (up_client_on_battery_cb), manager); diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xrandr/gsd-xrandr-manager.c unity-settings-daemon-15.04.1+15.04.20141127/plugins/xrandr/gsd-xrandr-manager.c --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xrandr/gsd-xrandr-manager.c 2014-10-30 15:29:31.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xrandr/gsd-xrandr-manager.c 2014-11-27 11:41:51.000000000 +0000 @@ -2015,7 +2015,7 @@ } static void -power_client_changed_cb (UpClient *client, gpointer data) +lid_state_changed_cb (UpClient *client, GParamSpec *pspec, gpointer data) { GsdXrandrManager *manager = data; GsdXrandrManagerPrivate *priv = manager->priv; @@ -2267,8 +2267,8 @@ manager->priv->upower_client = up_client_new (); manager->priv->laptop_lid_is_closed = up_client_get_lid_is_closed (manager->priv->upower_client); - g_signal_connect (manager->priv->upower_client, "changed", - G_CALLBACK (power_client_changed_cb), manager); + g_signal_connect (manager->priv->upower_client, "notify::lid-is-closed", + G_CALLBACK (lid_state_changed_cb), manager); log_msg ("State of screen at startup:\n"); log_screen (manager->priv->rw_screen); diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/gsd-xsettings-manager.c unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/gsd-xsettings-manager.c --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/gsd-xsettings-manager.c 2014-10-30 15:29:31.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/gsd-xsettings-manager.c 2014-11-27 11:42:00.000000000 +0000 @@ -44,6 +44,7 @@ #include "gsd-xsettings-gtk.h" #include "xsettings-manager.h" #include "fontconfig-monitor.h" +#include "wm-button-layout-translation.h" #define GNOME_XSETTINGS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNOME_TYPE_XSETTINGS_MANAGER, GnomeXSettingsManagerPrivate)) @@ -51,6 +52,7 @@ #define INTERFACE_SETTINGS_SCHEMA "org.gnome.desktop.interface" #define SOUND_SETTINGS_SCHEMA "org.gnome.desktop.sound" #define PRIVACY_SETTINGS_SCHEMA "org.gnome.desktop.privacy" +#define WM_SETTINGS_SCHEMA "org.gnome.desktop.wm.preferences" #define XSETTINGS_PLUGIN_SCHEMA "org.gnome.settings-daemon.plugins.xsettings" #define XSETTINGS_OVERRIDE_KEY "overrides" @@ -337,6 +339,24 @@ } } +static void +translate_button_layout (GnomeXSettingsManager *manager, + TranslationEntry *trans, + GVariant *value) +{ + char *layout = g_variant_dup_string (value, NULL); + int i; + + translate_wm_button_layout_to_gtk (layout); + + for (i = 0; manager->priv->managers [i]; i++) + xsettings_manager_set_string (manager->priv->managers [i], + trans->xsetting_name, + layout); + + g_free (layout); +} + static TranslationEntry translations [] = { { "org.gnome.settings-daemon.peripherals.mouse", "double-click", "Net/DoubleClickTime", translate_int_int }, { "org.gnome.settings-daemon.peripherals.mouse", "drag-threshold", "Net/DndDragThreshold", translate_int_int }, @@ -373,7 +393,8 @@ { "org.gnome.desktop.sound", "input-feedback-sounds", "Net/EnableInputFeedbackSounds", translate_bool_int }, { "org.gnome.desktop.privacy", "recent-files-max-age", "Gtk/RecentFilesMaxAge", translate_int_int }, - { "org.gnome.desktop.privacy", "remember-recent-files", "Gtk/RecentFilesEnabled", translate_bool_int } + { "org.gnome.desktop.privacy", "remember-recent-files", "Gtk/RecentFilesEnabled", translate_bool_int }, + { "org.gnome.desktop.wm.preferences", "button-layout", "Gtk/DecorationLayout", translate_button_layout } }; static gboolean @@ -989,6 +1010,8 @@ SOUND_SETTINGS_SCHEMA, g_settings_new (SOUND_SETTINGS_SCHEMA)); g_hash_table_insert (manager->priv->settings, PRIVACY_SETTINGS_SCHEMA, g_settings_new (PRIVACY_SETTINGS_SCHEMA)); + g_hash_table_insert (manager->priv->settings, + WM_SETTINGS_SCHEMA, g_settings_new (WM_SETTINGS_SCHEMA)); for (i = 0; i < G_N_ELEMENTS (translations); i++) { GVariant *val; diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/Makefile.am unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/Makefile.am --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/Makefile.am 2014-10-30 15:29:31.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/Makefile.am 2014-11-27 11:42:00.000000000 +0000 @@ -26,6 +26,24 @@ -DGTK_MODULES_DIRECTORY=\""$(libdir)/unity-settings-daemon-@GSD_API_VERSION@/gtk-modules/"\" \ $(AM_CPPFLAGS) +noinst_PROGRAMS += test-wm-button-layout-translations + +test_wm_button_layout_translations_SOURCES = \ + test-wm-button-layout-translations.c \ + wm-button-layout-translation.c \ + wm-button-layout-translation.h \ + $(NULL) + +test_wm_button_layout_translations_CFLAGS = \ + $(SETTINGS_PLUGIN_CFLAGS) \ + $(XSETTINGS_CFLAGS) \ + $(AM_CFLAGS) \ + $(NULL) + +test_wm_button_layout_translations_LDADD = \ + $(XSETTINGS_LIBS) \ + $(NULL) + libexec_PROGRAMS = usd-test-xsettings usd_test_xsettings_SOURCES = \ @@ -39,6 +57,8 @@ xsettings-manager.h \ fontconfig-monitor.c \ fontconfig-monitor.h \ + wm-button-layout-translation.c \ + wm-button-layout-translation.h \ test-xsettings.c usd_test_xsettings_CFLAGS = $(test_gtk_modules_CFLAGS) @@ -61,6 +81,8 @@ xsettings-manager.c \ fontconfig-monitor.h \ fontconfig-monitor.c \ + wm-button-layout-translation.c \ + wm-button-layout-translation.h \ $(NULL) libxsettings_la_CPPFLAGS = \ diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/test-wm-button-layout-translations.c unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/test-wm-button-layout-translations.c --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/test-wm-button-layout-translations.c 1970-01-01 00:00:00.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/test-wm-button-layout-translations.c 2014-11-27 11:42:00.000000000 +0000 @@ -0,0 +1,54 @@ +#include + +#include "wm-button-layout-translation.h" + +static void +test_button_layout_translations (void) +{ + static struct { + char *layout; + char *expected; + } tests[] = { + { "", "" }, + { "invalid", "" }, + + { ":", ":" }, + { ":invalid", ":" }, + { "invalid:", ":" }, + { "invalid:invalid", ":" }, + + { "appmenu", "menu" }, + { "appmenu:", "menu:" }, + { ":menu", ":icon" }, + { "appmenu:close", "menu:close" }, + { "appmenu:minimize,maximize,close", "menu:minimize,maximize,close" }, + { "menu,appmenu:minimize,maximize,close", "icon,menu:minimize,maximize,close" }, + + { "close,close,close:close,close,close", "close,close,close:close,close,close" }, + + { "invalid,appmenu:invalid,minimize", "menu:minimize" }, + { "appmenu,invalid:minimize,invalid", "menu:minimize" }, + { "invalidmenu:invalidclose", ":" }, + { "invalid,invalid,invalid:invalid,minimize,maximize,close", ":minimize,maximize,close" }, + }; + int i; + + for (i = 0; i < G_N_ELEMENTS (tests); i++) + { + char *layout = g_strdup (tests[i].layout); + + translate_wm_button_layout_to_gtk (layout); + g_assert_cmpstr (layout, ==, tests[i].expected); + g_free (layout); + } +} + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/layout-translations", test_button_layout_translations); + + return g_test_run (); +} diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/wm-button-layout-translation.c unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/wm-button-layout-translation.c --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/wm-button-layout-translation.c 1970-01-01 00:00:00.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/wm-button-layout-translation.c 2014-11-27 11:42:00.000000000 +0000 @@ -0,0 +1,88 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2014 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * Author: Florian Müllner + */ + +#include +#include +#include + +#include "wm-button-layout-translation.h" + +static void +translate_buttons (char *layout, int *len_p) +{ + char *strp = layout, *button; + int len = 0; + + if (!layout || !*layout) + goto out; + + while ((button = strsep (&strp, ","))) + { + char *gtkbutton; + + if (strcmp (button, "menu") == 0) + gtkbutton = "icon"; + else if (strcmp (button, "appmenu") == 0) + gtkbutton = "menu"; + else if (strcmp (button, "minimize") == 0) + gtkbutton = "minimize"; + else if (strcmp (button, "maximize") == 0) + gtkbutton = "maximize"; + else if (strcmp (button, "close") == 0) + gtkbutton = "close"; + else + continue; + + if (len) + layout[len++] = ','; + + strcpy (layout + len, gtkbutton); + len += strlen (gtkbutton); + } + layout[len] = '\0'; + +out: + if (len_p) + *len_p = len; +} + +void +translate_wm_button_layout_to_gtk (char *layout) +{ + char *strp = layout, *left_buttons, *right_buttons; + int left_len, right_len = 0; + + left_buttons = strsep (&strp, ":"); + right_buttons = strp; + + translate_buttons (left_buttons, &left_len); + memmove (layout, left_buttons, left_len); + + if (strp == NULL) + goto out; /* no ":" in layout */ + + layout[left_len++] = ':'; + + translate_buttons (right_buttons, &right_len); + memmove (layout + left_len, right_buttons, right_len); + +out: + layout[left_len + right_len] = '\0'; +} diff -Nru unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/wm-button-layout-translation.h unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/wm-button-layout-translation.h --- unity-settings-daemon-15.04.0+15.10.20141030/plugins/xsettings/wm-button-layout-translation.h 1970-01-01 00:00:00.000000000 +0000 +++ unity-settings-daemon-15.04.1+15.04.20141127/plugins/xsettings/wm-button-layout-translation.h 2014-11-27 11:42:00.000000000 +0000 @@ -0,0 +1,26 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2014 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * Author: Florian Müllner + */ + +#ifndef __WM_BUTTON_LAYOUT_TRANSLATION__ +#define __WM_BUTTON_LAYOUT_TRANSLATION__ + +void translate_wm_button_layout_to_gtk (char *layout); + +#endif