From 65f56468d1c02a02ea51a3ac336dc3ffe60db524 Mon Sep 17 00:00:00 2001 From: CI Train Bot Date: Fri, 15 May 2015 16:39:51 +0000 Subject: Releasing 12.10.6+15.04.20150515-0ubuntu1 --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 098b590..0f45e80 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +indicator-power (12.10.6+15.04.20150515-0ubuntu1) vivid; urgency=medium + + [ Charles Kerr ] + * Fix timing issue that caused "Adjust brightness automatically" + menuitem to sometimes not be shown. (LP: #1382861) + + -- CI Train Bot Fri, 15 May 2015 16:39:51 +0000 + indicator-power (12.10.6+15.04.20150402-0ubuntu1) vivid; urgency=medium [ Marc Deslauriers ] -- cgit v1.2.3 From 108a1e2314ac61595cf2d1727cf42d2508d59ae8 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 May 2015 10:34:26 -0500 Subject: in brightness.c, add a powerd proxy and listen to it for brightness property changes. --- src/CMakeLists.txt | 4 ++ src/brightness.c | 128 +++++++++++++++++++++++++++---------------- src/com.canonical.powerd.xml | 84 ++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+), 46 deletions(-) create mode 100644 src/com.canonical.powerd.xml diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6f4bfaf..8748484 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,10 @@ set(SERVICE_MANUAL_SOURCES # generated sources include(GdbusCodegen) set(SERVICE_GENERATED_SOURCES) +add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-powerd + com.canonical + Dbus + ${CMAKE_SOURCE_DIR}/src/com.canonical.powerd.xml) add_gdbus_codegen_with_namespace(SERVICE_GENERATED_SOURCES dbus-battery com.canonical.indicator.power Dbus diff --git a/src/brightness.c b/src/brightness.c index 5e7c5e5..076610b 100644 --- a/src/brightness.c +++ b/src/brightness.c @@ -45,7 +45,8 @@ typedef struct GSettings * settings; - guint powerd_name_tag; + DbusPowerd * powerd_proxy; + char * powerd_name_owner; double percentage; @@ -136,14 +137,15 @@ my_dispose(GObject * o) g_clear_object(&p->cancellable); } - if (p->powerd_name_tag) + if (p->powerd_proxy != NULL) { - g_bus_unwatch_name(p->powerd_name_tag); - p->powerd_name_tag = 0; + g_signal_handlers_disconnect_by_data(p->powerd_proxy, o); + g_clear_object(&p->powerd_proxy); } g_clear_object(&p->settings); g_clear_object(&p->system_bus); + g_clear_pointer(&p->powerd_name_owner, g_free); G_OBJECT_CLASS(indicator_power_brightness_parent_class)->dispose(o); } @@ -204,28 +206,23 @@ percentage_to_brightness(IndicatorPowerBrightness * self, double percentage) static void set_brightness_global(IndicatorPowerBrightness*, int); static void -on_powerd_brightness_params_ready(GObject * source, +on_powerd_brightness_params_ready(DbusPowerd * dbus_proxy, GAsyncResult * res, gpointer gself) { GError * error; GVariant * v; + v = NULL; error = NULL; - v = g_dbus_connection_call_finish(G_DBUS_CONNECTION(source), res, &error); - if (v == NULL) - { - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - g_warning("Unable to get system bus: %s", error->message); - - g_error_free(error); - } - else + if (dbus_powerd_call_get_brightness_params_finish (dbus_proxy, &v, res, &error)) { IndicatorPowerBrightness * self = INDICATOR_POWER_BRIGHTNESS(gself); priv_t * p = get_priv(self); const gboolean old_ab_supported = p->powerd_ab_supported; + g_message("%s", g_variant_print(v, TRUE)); + p->have_powerd_params = TRUE; g_variant_get(v, "((iiiib))", &p->powerd_dim, &p->powerd_min, @@ -262,52 +259,83 @@ on_powerd_brightness_params_ready(GObject * source, /* cleanup */ g_variant_unref(v); } + else if (error != NULL) + { + if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning("Unable to get system bus: %s", error->message); + + g_error_free(error); + } } static void -call_powerd_get_brightness_params(IndicatorPowerBrightness * self) +on_powerd_name_owner_changed(GDBusProxy * powerd_proxy, + GParamSpec * pspec G_GNUC_UNUSED, + gpointer gself) { - priv_t * p = get_priv(self); + priv_t * p = get_priv(INDICATOR_POWER_BRIGHTNESS(gself)); + gchar * owner = g_dbus_proxy_get_name_owner(powerd_proxy); - g_dbus_connection_call(p->system_bus, - "com.canonical.powerd", - "/com/canonical/powerd", - "com.canonical.powerd", - "getBrightnessParams", - NULL, - G_VARIANT_TYPE("((iiiib))"), - G_DBUS_CALL_FLAGS_NONE, - -1, /* default timeout */ - p->cancellable, - on_powerd_brightness_params_ready, - self); + if (g_strcmp0(p->powerd_name_owner, owner)) + { + p->have_powerd_params = FALSE; + + if (owner != NULL) + { + dbus_powerd_call_get_brightness_params(powerd_proxy, + p->cancellable, + on_powerd_brightness_params_ready, + gself); + } + + g_free(p->powerd_name_owner); + p->powerd_name_owner = owner; + } } static void -on_powerd_appeared(GDBusConnection * connection, - const gchar * bus_name G_GNUC_UNUSED, - const gchar * name_owner G_GNUC_UNUSED, - gpointer gself) +on_powerd_brightness_changed(DbusPowerd * powerd_proxy, + GParamSpec * pspec G_GNUC_UNUSED, + gpointer gself) { - IndicatorPowerBrightness * self = INDICATOR_POWER_BRIGHTNESS(gself); - priv_t * p = get_priv(self); - - /* keep a handle to the system bus */ - g_clear_object(&p->system_bus); - p->system_bus = g_object_ref(connection); - - /* update our cache of powerd's brightness params */ - call_powerd_get_brightness_params(self); + set_brightness_local(gself, dbus_powerd_get_brightness(powerd_proxy)); } static void -on_powerd_vanished(GDBusConnection * connection G_GNUC_UNUSED, - const gchar * bus_name G_GNUC_UNUSED, - gpointer gself) +on_powerd_proxy_ready(GObject * source_object G_GNUC_UNUSED, + GAsyncResult * res, + gpointer gself) { - priv_t * p = get_priv(INDICATOR_POWER_BRIGHTNESS(gself)); + GError * error; + DbusPowerd * powerd_proxy; - p->have_powerd_params = FALSE; + error = NULL; + powerd_proxy = dbus_powerd_proxy_new_for_bus_finish(res, &error); + + if (powerd_proxy != NULL) + { + priv_t * p; + + /* keep a handle to the system bus */ + g_clear_object(&p->system_bus); + p->system_bus = g_object_ref(g_dbus_proxy_get_connection(powerd_proxy)); + + /* keep the proxy and listen to owner changes */ + p = get_priv(INDICATOR_POWER_BRIGHTNESS(gself)); + p->powerd_proxy = powerd_proxy; + g_signal_connect(p->powerd_proxy, "notify::g-name-owner", + G_CALLBACK(on_powerd_name_owner_changed), gself); + g_signal_connect(p->powerd_proxy, "brightness", + G_CALLBACK(on_powerd_brightness_changed), gself); + on_powerd_name_owner_changed(powerd_proxy, NULL, gself); + } + else if (error != NULL) + { + if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning("Unable to get powerd proxy: %s", error->message); + + g_error_free(error); + } } /** @@ -433,6 +461,14 @@ indicator_power_brightness_init(IndicatorPowerBrightness * self) g_settings_schema_unref(schema); } + dbus_powerd_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES, + "com.canonical.powerd", + "/com/canonical/powerd", + p->cancellable, + on_powerd_proxy_ready, + self); + p->powerd_name_tag = g_bus_watch_name(G_BUS_TYPE_SYSTEM, "com.canonical.powerd", G_BUS_NAME_WATCHER_FLAGS_NONE, diff --git a/src/com.canonical.powerd.xml b/src/com.canonical.powerd.xml new file mode 100644 index 0000000..b5b4ac4 --- /dev/null +++ b/src/com.canonical.powerd.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From f4c8e264fc59d9dca502f0a1d099b95c1c2de7cf Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 May 2015 13:35:30 -0500 Subject: a little more work on getting the powerd proxy running --- src/brightness.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/brightness.c b/src/brightness.c index 076610b..9a5303e 100644 --- a/src/brightness.c +++ b/src/brightness.c @@ -18,6 +18,7 @@ */ #include "brightness.h" +#include "dbus-powerd.h" #include @@ -204,9 +205,10 @@ percentage_to_brightness(IndicatorPowerBrightness * self, double percentage) */ static void set_brightness_global(IndicatorPowerBrightness*, int); +static void set_brightness_local(IndicatorPowerBrightness*, int); static void -on_powerd_brightness_params_ready(DbusPowerd * dbus_proxy, +on_powerd_brightness_params_ready(GObject * oproxy, GAsyncResult * res, gpointer gself) { @@ -215,7 +217,7 @@ on_powerd_brightness_params_ready(DbusPowerd * dbus_proxy, v = NULL; error = NULL; - if (dbus_powerd_call_get_brightness_params_finish (dbus_proxy, &v, res, &error)) + if (dbus_powerd_call_get_brightness_params_finish(DBUS_POWERD(oproxy), &v, res, &error)) { IndicatorPowerBrightness * self = INDICATOR_POWER_BRIGHTNESS(gself); priv_t * p = get_priv(self); @@ -282,7 +284,7 @@ on_powerd_name_owner_changed(GDBusProxy * powerd_proxy, if (owner != NULL) { - dbus_powerd_call_get_brightness_params(powerd_proxy, + dbus_powerd_call_get_brightness_params(DBUS_POWERD(powerd_proxy), p->cancellable, on_powerd_brightness_params_ready, gself); @@ -315,19 +317,19 @@ on_powerd_proxy_ready(GObject * source_object G_GNUC_UNUSED, if (powerd_proxy != NULL) { priv_t * p; + p = get_priv(INDICATOR_POWER_BRIGHTNESS(gself)); /* keep a handle to the system bus */ g_clear_object(&p->system_bus); - p->system_bus = g_object_ref(g_dbus_proxy_get_connection(powerd_proxy)); + p->system_bus = g_object_ref(g_dbus_proxy_get_connection(G_DBUS_PROXY(powerd_proxy))); /* keep the proxy and listen to owner changes */ - p = get_priv(INDICATOR_POWER_BRIGHTNESS(gself)); p->powerd_proxy = powerd_proxy; g_signal_connect(p->powerd_proxy, "notify::g-name-owner", G_CALLBACK(on_powerd_name_owner_changed), gself); - g_signal_connect(p->powerd_proxy, "brightness", + g_signal_connect(p->powerd_proxy, "notify::brightness", G_CALLBACK(on_powerd_brightness_changed), gself); - on_powerd_name_owner_changed(powerd_proxy, NULL, gself); + on_powerd_name_owner_changed(G_DBUS_PROXY(powerd_proxy), NULL, gself); } else if (error != NULL) { @@ -468,14 +470,6 @@ indicator_power_brightness_init(IndicatorPowerBrightness * self) p->cancellable, on_powerd_proxy_ready, self); - - p->powerd_name_tag = g_bus_watch_name(G_BUS_TYPE_SYSTEM, - "com.canonical.powerd", - G_BUS_NAME_WATCHER_FLAGS_NONE, - on_powerd_appeared, - on_powerd_vanished, - self, - NULL); } static void -- cgit v1.2.3 From 05d60820029f19e808f1dc8f255d516a4b520db6 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 May 2015 13:38:31 -0500 Subject: fix the get-brightness-params return signature now that it's wrapped in a proxy --- src/brightness.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/brightness.c b/src/brightness.c index 9a5303e..277d5f4 100644 --- a/src/brightness.c +++ b/src/brightness.c @@ -226,11 +226,11 @@ on_powerd_brightness_params_ready(GObject * oproxy, g_message("%s", g_variant_print(v, TRUE)); p->have_powerd_params = TRUE; - g_variant_get(v, "((iiiib))", &p->powerd_dim, - &p->powerd_min, - &p->powerd_max, - &p->powerd_default_value, - &p->powerd_ab_supported); + g_variant_get(v, "(iiiib)", &p->powerd_dim, + &p->powerd_min, + &p->powerd_max, + &p->powerd_default_value, + &p->powerd_ab_supported); g_debug("powerd brightness settings: dim=%d, min=%d, max=%d, default=%d, ab_supported=%d", p->powerd_dim, p->powerd_min, -- cgit v1.2.3 From 5288b423da2c18e91c10be9aab71ba26da314540 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 May 2015 13:42:55 -0500 Subject: remove g_message tracer --- src/brightness.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/brightness.c b/src/brightness.c index 277d5f4..eb48515 100644 --- a/src/brightness.c +++ b/src/brightness.c @@ -223,8 +223,6 @@ on_powerd_brightness_params_ready(GObject * oproxy, priv_t * p = get_priv(self); const gboolean old_ab_supported = p->powerd_ab_supported; - g_message("%s", g_variant_print(v, TRUE)); - p->have_powerd_params = TRUE; g_variant_get(v, "(iiiib)", &p->powerd_dim, &p->powerd_min, -- cgit v1.2.3