From 18fd0fa741f818ed8a6d09b8a2a4623e85d6bbdf Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Mon, 3 Mar 2014 17:18:05 +0800 Subject: set brightness via powerd if it exist (using dbus) --- debian/changelog | 7 ++ src/Makefile.am | 2 + src/ib-brightness-powerd-control.c | 166 +++++++++++++++++++++++++++++++++++++ src/ib-brightness-powerd-control.h | 34 ++++++++ src/service.c | 53 ++++++++++-- 5 files changed, 257 insertions(+), 5 deletions(-) create mode 100644 src/ib-brightness-powerd-control.c create mode 100644 src/ib-brightness-powerd-control.h diff --git a/debian/changelog b/debian/changelog index e108d70..d5eefe5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +indicator-power (12.10.6+14.04.20140207-0ubuntu2) UNRELEASED; urgency=low + + [ Yuan-Chen Cheng ] + * set brightness via powerd if it exist (using dbus) + + -- Yuan-Chen Cheng Mon, 03 Mar 2014 17:07:47 +0800 + indicator-power (12.10.6+14.04.20140207-0ubuntu1) trusty; urgency=low [ Ted Gould ] diff --git a/src/Makefile.am b/src/Makefile.am index be746db..2461592 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -46,6 +46,8 @@ libindciatorpower_upower_a_LDFLAGS = $(COVERAGE_LDFLAGS) libindicatorpower_service_a_SOURCES = \ ib-brightness-control.c \ ib-brightness-control.h \ + ib-brightness-powerd-control.c \ + ib-brightness-powerd-control.h \ device-provider.c \ device-provider.h \ device.c \ diff --git a/src/ib-brightness-powerd-control.c b/src/ib-brightness-powerd-control.c new file mode 100644 index 0000000..3395bda --- /dev/null +++ b/src/ib-brightness-powerd-control.c @@ -0,0 +1,166 @@ +/* + * Copyright 2014 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . + * + * Authors: + * Yuan-Chen Cheng + */ + +#include + +#include +#include +#include +#include + +#include "ib-brightness-powerd-control.h" + +GDBusProxy* +powerd_get_proxy(void) +{ + GError *error = NULL; + GDBusProxy* powerd_proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + "com.canonical.powerd", + "/com/canonical/powerd", + "com.canonical.powerd", + NULL, + &error); + + if (error != NULL) { + g_error_free (error); + g_debug ("could not connect to powerd: %s", error->message); + return NULL; + } + return powerd_proxy; +} + + +static gboolean +getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, int *dflt, gboolean *ab_supported) +{ + GVariant *ret = NULL; + GError *error = NULL; + + ret = g_dbus_proxy_call_sync(powerd_proxy, + "getBrightnessParams", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, &error); + if (!ret) { + g_warning("getBrightnessParams failed: %s", error->message); + g_error_free(error); + return FALSE; + } + + g_variant_get(ret, "((iiib))", min, max, dflt, ab_supported); + g_variant_unref(ret); + return TRUE; +} + +static gboolean setUserBrightness(GDBusProxy* powerd_proxy, int brightness) +{ + GVariant *ret = NULL; + GError *error = NULL; + + ret = g_dbus_proxy_call_sync(powerd_proxy, + "setUserBrightness", + g_variant_new("(i)", brightness), + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, &error); + if (!ret) { + g_warning("setUserBrightness failed: %s", error->message); + g_error_free(error); + return FALSE; + } else { + g_variant_unref(ret); + return TRUE; + } +} + +struct _IbBrightnessPowerdControl +{ + gboolean inited; + + GDBusProxy *powerd_proxy; + + int min; + int max; + int dflt; + gboolean ab_supported; + + int current; +}; + + +static void ib_brightness_init(IbBrightnessPowerdControl *control) +{ + gboolean ret = getBrightnessParams(control->powerd_proxy, &(control->min), + &(control->max), &(control->dflt), &(control->ab_supported)); + if (! ret) return; + + ib_brightness_powerd_control_set_value(control, control->max); + + control->inited = TRUE; +} + +IbBrightnessPowerdControl* +ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy) +{ + IbBrightnessPowerdControl *control; + + control = g_new0 (IbBrightnessPowerdControl, 1); + control->inited = FALSE; + control->powerd_proxy = powerd_proxy; + + ib_brightness_init(control); + + return control; +} + +void +ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value) +{ + gboolean ret; + if (! self->inited) return; + if (value > self->max || value < self->min) return; + ret = setUserBrightness(self->powerd_proxy, value); + if (ret) + { + self->current = value; + } +} + +gint +ib_brightness_powerd_control_get_value (IbBrightnessPowerdControl* self) +{ + if (! self->inited) return 0; + return self->current; +} + +gint +ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self) +{ + if (! self->inited) return 0; + return self->max; +} + +void +ib_brightness_powerd_control_free (IbBrightnessPowerdControl *self) +{ + g_object_unref (self->powerd_proxy); + g_free (self); +} + diff --git a/src/ib-brightness-powerd-control.h b/src/ib-brightness-powerd-control.h new file mode 100644 index 0000000..77e44cb --- /dev/null +++ b/src/ib-brightness-powerd-control.h @@ -0,0 +1,34 @@ +/* + * Copyright 2014 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . + * + * Authors: + * Y.C Cheng + */ + +#ifndef __IB_BRIGHTNESS_POWERD_CONTROL_H__ +#define __IB_BRIGHTNESS_POWERD_CONTROL_H__ + +#include +GDBusProxy* powerd_get_proxy(); + +typedef struct _IbBrightnessPowerdControl IbBrightnessPowerdControl; + +IbBrightnessPowerdControl* ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy); +void ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value); +gint ib_brightness_powerd_control_get_value (IbBrightnessPowerdControl* self); +gint ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self); +void ib_brightness_powerd_control_free (IbBrightnessPowerdControl *self); + +#endif diff --git a/src/service.c b/src/service.c index 982a24e..0f976d1 100644 --- a/src/service.c +++ b/src/service.c @@ -27,6 +27,7 @@ #include "device.h" #include "device-provider.h" #include "ib-brightness-control.h" +#include "ib-brightness-powerd-control.h" #include "service.h" #define BUS_NAME "com.canonical.indicator.power" @@ -104,6 +105,7 @@ struct _IndicatorPowerServicePrivate GSettings * settings; IbBrightnessControl * brightness_control; + IbBrightnessPowerdControl * brightness_powerd_control; guint own_id; guint actions_export_id; @@ -440,7 +442,12 @@ create_phone_devices_section (IndicatorPowerService * self G_GNUC_UNUSED) static void get_brightness_range (IndicatorPowerService * self, gint * low, gint * high) { - const int max = ib_brightness_control_get_max_value (self->priv->brightness_control); + int max = 0; + if (self->priv->brightness_control) { + max = ib_brightness_control_get_max_value (self->priv->brightness_control); + } else { + max = ib_brightness_powerd_control_get_max_value (self->priv->brightness_powerd_control); + } *low = max * 0.05; /* 5% minimum -- don't let the screen go completely dark */ *high = max; } @@ -483,7 +490,15 @@ static GVariant * action_state_for_brightness (IndicatorPowerService * self) { priv_t * p = self->priv; - const gint brightness = ib_brightness_control_get_value (p->brightness_control); + gint brightness = 0; + if (p->brightness_control) + { + brightness = ib_brightness_control_get_value (p->brightness_control); + } + else if (p->brightness_powerd_control) + { + brightness = ib_brightness_powerd_control_get_value (p->brightness_powerd_control); + } return g_variant_new_double (brightness_to_percentage (self, brightness)); } @@ -502,7 +517,16 @@ on_brightness_change_requested (GSimpleAction * action G_GNUC_UNUSED, IndicatorPowerService * self = INDICATOR_POWER_SERVICE (gself); const gdouble percentage = g_variant_get_double (parameter); const int brightness = percentage_to_brightness (self, percentage); - ib_brightness_control_set_value (self->priv->brightness_control, brightness); + + if (self->priv->brightness_control) + { + ib_brightness_control_set_value (self->priv->brightness_control, brightness); + } + else if (self->priv->brightness_powerd_control) + { + ib_brightness_powerd_control_set_value (self->priv->brightness_powerd_control, brightness); + } + update_brightness_action_state (self); } @@ -999,7 +1023,14 @@ my_dispose (GObject * o) g_clear_object (&p->conn); - g_clear_pointer (&p->brightness_control, ib_brightness_control_free); + if (p->brightness_control) + { + g_clear_pointer (&p->brightness_control, ib_brightness_control_free); + } + else if (p->brightness_powerd_control) + { + g_clear_pointer (&p->brightness_powerd_control, ib_brightness_powerd_control_free); + } indicator_power_service_set_device_provider (self, NULL); @@ -1013,6 +1044,7 @@ my_dispose (GObject * o) static void indicator_power_service_init (IndicatorPowerService * self) { + GDBusProxy *powerd_proxy = NULL; priv_t * p = G_TYPE_INSTANCE_GET_PRIVATE (self, INDICATOR_TYPE_POWER_SERVICE, IndicatorPowerServicePrivate); @@ -1022,7 +1054,18 @@ indicator_power_service_init (IndicatorPowerService * self) p->settings = g_settings_new ("com.canonical.indicator.power"); - p->brightness_control = ib_brightness_control_new (); + p->brightness_control = NULL; + p->brightness_powerd_control = NULL; + + powerd_proxy = powerd_get_proxy(); + if (powerd_proxy != NULL) + { + p->brightness_powerd_control = ib_brightness_powerd_control_new(powerd_proxy); + } + else + { + p->brightness_control = ib_brightness_control_new (); + } init_gactions (self); -- cgit v1.2.3 From 6a577e1b2d6941af7eef77a7a6a8c4c064dcbcf4 Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Wed, 5 Mar 2014 13:32:26 +0800 Subject: clean up / wrong code fix --- src/ib-brightness-powerd-control.c | 27 +++++++++++++++++++-------- src/service.c | 28 ++++++++++++---------------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/ib-brightness-powerd-control.c b/src/ib-brightness-powerd-control.c index 3395bda..e7d4e0e 100644 --- a/src/ib-brightness-powerd-control.c +++ b/src/ib-brightness-powerd-control.c @@ -40,8 +40,8 @@ powerd_get_proxy(void) &error); if (error != NULL) { - g_error_free (error); g_debug ("could not connect to powerd: %s", error->message); + g_error_free (error); return NULL; } return powerd_proxy; @@ -109,11 +109,12 @@ static void ib_brightness_init(IbBrightnessPowerdControl *control) { gboolean ret = getBrightnessParams(control->powerd_proxy, &(control->min), &(control->max), &(control->dflt), &(control->ab_supported)); - if (! ret) return; - - ib_brightness_powerd_control_set_value(control, control->max); + if (! ret) + return; control->inited = TRUE; + + ib_brightness_powerd_control_set_value(control, control->max * 8 / 10); } IbBrightnessPowerdControl* @@ -134,8 +135,16 @@ void ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value) { gboolean ret; - if (! self->inited) return; - if (value > self->max || value < self->min) return; + if (! self->inited) + return; + if (value > self->max) + { + value = self->max; + } + else if (value < self->min) + { + value = self->min; + } ret = setUserBrightness(self->powerd_proxy, value); if (ret) { @@ -146,14 +155,16 @@ ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint va gint ib_brightness_powerd_control_get_value (IbBrightnessPowerdControl* self) { - if (! self->inited) return 0; + if (! self->inited) + return 0; return self->current; } gint ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self) { - if (! self->inited) return 0; + if (! self->inited) + return 0; return self->max; } diff --git a/src/service.c b/src/service.c index 0f976d1..959e316 100644 --- a/src/service.c +++ b/src/service.c @@ -442,12 +442,16 @@ create_phone_devices_section (IndicatorPowerService * self G_GNUC_UNUSED) static void get_brightness_range (IndicatorPowerService * self, gint * low, gint * high) { + priv_t * p = self->priv; int max = 0; - if (self->priv->brightness_control) { - max = ib_brightness_control_get_max_value (self->priv->brightness_control); - } else { - max = ib_brightness_powerd_control_get_max_value (self->priv->brightness_powerd_control); - } + if (p->brightness_control) + { + max = ib_brightness_control_get_max_value (self->priv->brightness_control); + } + else if (p->brightness_powerd_control) + { + max = ib_brightness_powerd_control_get_max_value (self->priv->brightness_powerd_control); + } *low = max * 0.05; /* 5% minimum -- don't let the screen go completely dark */ *high = max; } @@ -1023,14 +1027,9 @@ my_dispose (GObject * o) g_clear_object (&p->conn); - if (p->brightness_control) - { - g_clear_pointer (&p->brightness_control, ib_brightness_control_free); - } - else if (p->brightness_powerd_control) - { - g_clear_pointer (&p->brightness_powerd_control, ib_brightness_powerd_control_free); - } + // g_clear_pointer has NULL check inside. + g_clear_pointer (&p->brightness_control, ib_brightness_control_free); + g_clear_pointer (&p->brightness_powerd_control, ib_brightness_powerd_control_free); indicator_power_service_set_device_provider (self, NULL); @@ -1054,9 +1053,6 @@ indicator_power_service_init (IndicatorPowerService * self) p->settings = g_settings_new ("com.canonical.indicator.power"); - p->brightness_control = NULL; - p->brightness_powerd_control = NULL; - powerd_proxy = powerd_get_proxy(); if (powerd_proxy != NULL) { -- cgit v1.2.3 From 237ba715a189e550f86b3b2ac11e4aefa43e3955 Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Wed, 5 Mar 2014 16:09:10 +0800 Subject: brightness parameters as necessary condition to use powerd --- src/ib-brightness-powerd-control.c | 57 ++++++++++++++++++++------------------ src/ib-brightness-powerd-control.h | 12 ++++++-- src/service.c | 5 ++-- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/ib-brightness-powerd-control.c b/src/ib-brightness-powerd-control.c index e7d4e0e..461bb54 100644 --- a/src/ib-brightness-powerd-control.c +++ b/src/ib-brightness-powerd-control.c @@ -26,10 +26,18 @@ #include "ib-brightness-powerd-control.h" +static gboolean getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, + int *dflt, gboolean *ab_supported); + GDBusProxy* -powerd_get_proxy(void) +powerd_get_proxy(brightness_params_t *params) { GError *error = NULL; + gboolean ret; + + if (params == NULL) + return NULL; + GDBusProxy* powerd_proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -39,11 +47,23 @@ powerd_get_proxy(void) NULL, &error); - if (error != NULL) { + if (error != NULL) + { g_debug ("could not connect to powerd: %s", error->message); g_error_free (error); return NULL; } + + ret = getBrightnessParams(powerd_proxy, &(params->min), &(params->max), + &(params->dflt), &(params->ab_supported)); + + if (! ret) + { + g_debug ("can't get brightness parameters from powerd"); + g_object_unref (powerd_proxy); + return NULL; + } + return powerd_proxy; } @@ -58,7 +78,7 @@ getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, int *dflt, gbo "getBrightnessParams", NULL, G_DBUS_CALL_FLAGS_NONE, - -1, NULL, &error); + 400, NULL, &error); // timeout: 400 ms if (!ret) { g_warning("getBrightnessParams failed: %s", error->message); g_error_free(error); @@ -92,8 +112,6 @@ static gboolean setUserBrightness(GDBusProxy* powerd_proxy, int brightness) struct _IbBrightnessPowerdControl { - gboolean inited; - GDBusProxy *powerd_proxy; int min; @@ -104,29 +122,20 @@ struct _IbBrightnessPowerdControl int current; }; - -static void ib_brightness_init(IbBrightnessPowerdControl *control) -{ - gboolean ret = getBrightnessParams(control->powerd_proxy, &(control->min), - &(control->max), &(control->dflt), &(control->ab_supported)); - if (! ret) - return; - - control->inited = TRUE; - - ib_brightness_powerd_control_set_value(control, control->max * 8 / 10); -} - IbBrightnessPowerdControl* -ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy) +ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy, brightness_params_t params) { IbBrightnessPowerdControl *control; control = g_new0 (IbBrightnessPowerdControl, 1); - control->inited = FALSE; control->powerd_proxy = powerd_proxy; - ib_brightness_init(control); + control->min = params.min; + control->max = params.max; + control->dflt = params.dflt; + control->ab_supported = params.ab_supported; + + ib_brightness_powerd_control_set_value(control, control->max * 8 / 10); return control; } @@ -135,8 +144,6 @@ void ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value) { gboolean ret; - if (! self->inited) - return; if (value > self->max) { value = self->max; @@ -155,16 +162,12 @@ ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint va gint ib_brightness_powerd_control_get_value (IbBrightnessPowerdControl* self) { - if (! self->inited) - return 0; return self->current; } gint ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self) { - if (! self->inited) - return 0; return self->max; } diff --git a/src/ib-brightness-powerd-control.h b/src/ib-brightness-powerd-control.h index 77e44cb..77f6c8d 100644 --- a/src/ib-brightness-powerd-control.h +++ b/src/ib-brightness-powerd-control.h @@ -21,11 +21,19 @@ #define __IB_BRIGHTNESS_POWERD_CONTROL_H__ #include -GDBusProxy* powerd_get_proxy(); + +typedef struct { + int max; + int min; + int dflt; + gboolean ab_supported; +} brightness_params_t; + +GDBusProxy* powerd_get_proxy(brightness_params_t *); typedef struct _IbBrightnessPowerdControl IbBrightnessPowerdControl; -IbBrightnessPowerdControl* ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy); +IbBrightnessPowerdControl* ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy, brightness_params_t params); void ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value); gint ib_brightness_powerd_control_get_value (IbBrightnessPowerdControl* self); gint ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self); diff --git a/src/service.c b/src/service.c index 959e316..9be5eca 100644 --- a/src/service.c +++ b/src/service.c @@ -1044,6 +1044,7 @@ static void indicator_power_service_init (IndicatorPowerService * self) { GDBusProxy *powerd_proxy = NULL; + brightness_params_t powerd_brigtness_params; priv_t * p = G_TYPE_INSTANCE_GET_PRIVATE (self, INDICATOR_TYPE_POWER_SERVICE, IndicatorPowerServicePrivate); @@ -1053,10 +1054,10 @@ indicator_power_service_init (IndicatorPowerService * self) p->settings = g_settings_new ("com.canonical.indicator.power"); - powerd_proxy = powerd_get_proxy(); + powerd_proxy = powerd_get_proxy(&powerd_brigtness_params); if (powerd_proxy != NULL) { - p->brightness_powerd_control = ib_brightness_powerd_control_new(powerd_proxy); + p->brightness_powerd_control = ib_brightness_powerd_control_new(powerd_proxy, powerd_brigtness_params); } else { -- cgit v1.2.3 From a046fce39f86760337af2666bd8a883e42dc4fcf Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Wed, 5 Mar 2014 17:16:36 +0800 Subject: add GCancellable and cancel it before free --- src/ib-brightness-powerd-control.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ib-brightness-powerd-control.c b/src/ib-brightness-powerd-control.c index 461bb54..96afe7d 100644 --- a/src/ib-brightness-powerd-control.c +++ b/src/ib-brightness-powerd-control.c @@ -90,7 +90,7 @@ getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, int *dflt, gbo return TRUE; } -static gboolean setUserBrightness(GDBusProxy* powerd_proxy, int brightness) +static gboolean setUserBrightness(GDBusProxy* powerd_proxy, GCancellable *gcancel, int brightness) { GVariant *ret = NULL; GError *error = NULL; @@ -99,7 +99,7 @@ static gboolean setUserBrightness(GDBusProxy* powerd_proxy, int brightness) "setUserBrightness", g_variant_new("(i)", brightness), G_DBUS_CALL_FLAGS_NONE, - -1, NULL, &error); + -1, gcancel, &error); if (!ret) { g_warning("setUserBrightness failed: %s", error->message); g_error_free(error); @@ -113,6 +113,7 @@ static gboolean setUserBrightness(GDBusProxy* powerd_proxy, int brightness) struct _IbBrightnessPowerdControl { GDBusProxy *powerd_proxy; + GCancellable *gcancel; int min; int max; @@ -129,6 +130,7 @@ ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy, brightness_params_t control = g_new0 (IbBrightnessPowerdControl, 1); control->powerd_proxy = powerd_proxy; + control->gcancel = g_cancellable_new(); control->min = params.min; control->max = params.max; @@ -152,7 +154,7 @@ ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint va { value = self->min; } - ret = setUserBrightness(self->powerd_proxy, value); + ret = setUserBrightness(self->powerd_proxy, self->gcancel, value); if (ret) { self->current = value; @@ -174,6 +176,8 @@ ib_brightness_powerd_control_get_max_value (IbBrightnessPowerdControl* self) void ib_brightness_powerd_control_free (IbBrightnessPowerdControl *self) { + g_cancellable_cancel (self->gcancel); + g_object_unref (self->gcancel); g_object_unref (self->powerd_proxy); g_free (self); } -- cgit v1.2.3 From a67018fec5c2d6ffa54cff364c513223844559f3 Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Thu, 6 Mar 2014 11:27:12 +0800 Subject: refine and use default value as initial brightness value --- src/ib-brightness-powerd-control.c | 43 ++++++++++++++++++-------------------- src/service.c | 8 +++---- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/ib-brightness-powerd-control.c b/src/ib-brightness-powerd-control.c index 96afe7d..2136fcd 100644 --- a/src/ib-brightness-powerd-control.c +++ b/src/ib-brightness-powerd-control.c @@ -17,13 +17,6 @@ * Yuan-Chen Cheng */ -#include - -#include -#include -#include -#include - #include "ib-brightness-powerd-control.h" static gboolean getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, @@ -35,8 +28,7 @@ powerd_get_proxy(brightness_params_t *params) GError *error = NULL; gboolean ret; - if (params == NULL) - return NULL; + g_return_val_if_fail (params != NULL, NULL); GDBusProxy* powerd_proxy = g_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, @@ -79,9 +71,16 @@ getBrightnessParams(GDBusProxy* powerd_proxy, int *min, int *max, int *dflt, gbo NULL, G_DBUS_CALL_FLAGS_NONE, 400, NULL, &error); // timeout: 400 ms - if (!ret) { - g_warning("getBrightnessParams failed: %s", error->message); - g_error_free(error); + if (!ret) + { + if (error != NULL) + { + if (!g_error_matches(error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + { + g_warning("getBrightnessParams from powerd failed: %s", error->message); + } + g_error_free(error); + } return FALSE; } @@ -101,7 +100,7 @@ static gboolean setUserBrightness(GDBusProxy* powerd_proxy, GCancellable *gcance G_DBUS_CALL_FLAGS_NONE, -1, gcancel, &error); if (!ret) { - g_warning("setUserBrightness failed: %s", error->message); + g_warning("setUserBrightness via powerd failed: %s", error->message); g_error_free(error); return FALSE; } else { @@ -117,7 +116,7 @@ struct _IbBrightnessPowerdControl int min; int max; - int dflt; + int dflt; // defalut value gboolean ab_supported; int current; @@ -137,7 +136,11 @@ ib_brightness_powerd_control_new (GDBusProxy* powerd_proxy, brightness_params_t control->dflt = params.dflt; control->ab_supported = params.ab_supported; - ib_brightness_powerd_control_set_value(control, control->max * 8 / 10); + // XXX: set the brightness value is the only way to sync the brightness value with + // powerd, and we should set the user prefered / last set brightness value upon startup. + // Before we have code to store last set brightness value or other mechanism, we set + // it to default brightness that powerd proposed. + ib_brightness_powerd_control_set_value(control, control->dflt); return control; } @@ -146,14 +149,8 @@ void ib_brightness_powerd_control_set_value (IbBrightnessPowerdControl* self, gint value) { gboolean ret; - if (value > self->max) - { - value = self->max; - } - else if (value < self->min) - { - value = self->min; - } + + value = CLAMP(value, self->min, self->max); ret = setUserBrightness(self->powerd_proxy, self->gcancel, value); if (ret) { diff --git a/src/service.c b/src/service.c index 9be5eca..f6653f4 100644 --- a/src/service.c +++ b/src/service.c @@ -1043,8 +1043,8 @@ my_dispose (GObject * o) static void indicator_power_service_init (IndicatorPowerService * self) { - GDBusProxy *powerd_proxy = NULL; - brightness_params_t powerd_brigtness_params; + GDBusProxy *powerd_proxy; + brightness_params_t powerd_brightness_params; priv_t * p = G_TYPE_INSTANCE_GET_PRIVATE (self, INDICATOR_TYPE_POWER_SERVICE, IndicatorPowerServicePrivate); @@ -1054,10 +1054,10 @@ indicator_power_service_init (IndicatorPowerService * self) p->settings = g_settings_new ("com.canonical.indicator.power"); - powerd_proxy = powerd_get_proxy(&powerd_brigtness_params); + powerd_proxy = powerd_get_proxy(&powerd_brightness_params); if (powerd_proxy != NULL) { - p->brightness_powerd_control = ib_brightness_powerd_control_new(powerd_proxy, powerd_brigtness_params); + p->brightness_powerd_control = ib_brightness_powerd_control_new(powerd_proxy, powerd_brightness_params); } else { -- cgit v1.2.3 From 20aa7e18cac91520469a3cd3fb431e6d44a6622d Mon Sep 17 00:00:00 2001 From: "Y.C cheng" Date: Wed, 26 Mar 2014 12:58:56 +0800 Subject: remove modificaiton in changelog for CI --- debian/changelog | 7 ------- 1 file changed, 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index d5eefe5..e108d70 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,3 @@ -indicator-power (12.10.6+14.04.20140207-0ubuntu2) UNRELEASED; urgency=low - - [ Yuan-Chen Cheng ] - * set brightness via powerd if it exist (using dbus) - - -- Yuan-Chen Cheng Mon, 03 Mar 2014 17:07:47 +0800 - indicator-power (12.10.6+14.04.20140207-0ubuntu1) trusty; urgency=low [ Ted Gould ] -- cgit v1.2.3