power: Adapt to new DBus interface for setting screen brightness

https://bugzilla.gnome.org/show_bug.cgi?id=698757
This commit is contained in:
Jasper St. Pierre 2013-04-23 21:32:56 -04:00
parent 137a0508e3
commit e5c0be9d55

View file

@ -831,9 +831,10 @@ brightness_slider_value_changed_cb (GtkRange *range, gpointer user_data)
/* push this to g-s-d */ /* push this to g-s-d */
percentage = (guint) gtk_range_get_value (range); percentage = (guint) gtk_range_get_value (range);
g_dbus_proxy_call (priv->screen_proxy, g_dbus_proxy_call (priv->screen_proxy,
"SetPercentage", "org.freedesktop.DBus.Properties.Set",
g_variant_new ("(u)", g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Screen',"
percentage), "'Brightness', %v)",
g_variant_new_int32 (percentage)),
G_DBUS_CALL_FLAGS_NONE, G_DBUS_CALL_FLAGS_NONE,
-1, -1,
priv->cancellable, priv->cancellable,
@ -842,79 +843,50 @@ brightness_slider_value_changed_cb (GtkRange *range, gpointer user_data)
} }
static void static void
get_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) sync_brightness (CcPowerPanel *self)
{ {
CcPowerPanel *self = CC_POWER_PANEL (user_data);
GError *error = NULL;
GVariant *result; GVariant *result;
guint brightness; guint brightness;
gboolean visible;
GtkRange *range; GtkRange *range;
result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error); result = g_dbus_proxy_get_cached_property (self->priv->screen_proxy, "Brightness");
if (result == NULL)
{
/* We got cancelled, so we're probably exiting */
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_error_free (error);
return;
}
gtk_widget_hide (self->priv->brightness_row);
gtk_widget_hide (self->priv->dim_screen_row);
if (error->message &&
strstr (error->message, "No backlight devices present") == NULL)
{
g_warning ("Error getting brightness: %s", error->message);
}
g_error_free (error);
return;
}
/* set the slider */ /* set the slider */
g_variant_get (result, "(u)", &brightness); g_variant_get (result, "i", &brightness);
visible = brightness >= 0.0;
gtk_widget_set_visible (self->priv->brightness_row, visible);
gtk_widget_set_visible (self->priv->dim_screen_row, visible);
if (visible)
{
range = GTK_RANGE (self->priv->brightness_scale); range = GTK_RANGE (self->priv->brightness_scale);
gtk_range_set_range (range, 0, 100); gtk_range_set_range (range, 0, 100);
gtk_range_set_increments (range, 1, 10); gtk_range_set_increments (range, 1, 10);
self->priv->setting_brightness = TRUE;
gtk_range_set_value (range, brightness); gtk_range_set_value (range, brightness);
g_signal_connect (range, "value-changed", self->priv->setting_brightness = FALSE;
G_CALLBACK (brightness_slider_value_changed_cb), user_data);
g_variant_unref (result); g_variant_unref (result);
}
} }
static void static void
on_signal (GDBusProxy *proxy, on_property_change (GDBusProxy *proxy,
gchar *sender_name, GVariant *changed_properties,
gchar *signal_name, GVariant *invalidated_properties,
GVariant *parameters,
gpointer user_data) gpointer user_data)
{ {
CcPowerPanel *self = CC_POWER_PANEL (user_data); CcPowerPanel *self = CC_POWER_PANEL (user_data);
sync_brightness (self);
if (g_strcmp0 (signal_name, "Changed") == 0)
{
/* changed, but ignoring */
if (self->priv->setting_brightness)
return;
/* retrieve the value again from g-s-d */
g_dbus_proxy_call (self->priv->screen_proxy,
"GetPercentage",
NULL,
G_DBUS_CALL_FLAGS_NONE,
200, /* we don't want to randomly move the bar */
self->priv->cancellable,
get_brightness_cb,
user_data);
}
} }
static void static void
got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{ {
GError *error = NULL; GError *error = NULL;
CcPowerPanelPrivate *priv = CC_POWER_PANEL (user_data)->priv; CcPowerPanel *self = CC_POWER_PANEL (user_data);
CcPowerPanelPrivate *priv = self->priv;
priv->screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error); priv->screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
if (priv->screen_proxy == NULL) if (priv->screen_proxy == NULL)
@ -925,18 +897,10 @@ got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_da
} }
/* we want to change the bar if the user presses brightness buttons */ /* we want to change the bar if the user presses brightness buttons */
g_signal_connect (priv->screen_proxy, "g-signal", g_signal_connect (priv->screen_proxy, "g-properties-changed",
G_CALLBACK (on_signal), user_data); G_CALLBACK (on_property_change), self);
/* get the initial state */ sync_brightness (self);
g_dbus_proxy_call (priv->screen_proxy,
"GetPercentage",
NULL,
G_DBUS_CALL_FLAGS_NONE,
200, /* we don't want to randomly move the bar */
priv->cancellable,
get_brightness_cb,
user_data);
} }
static void static void
@ -1448,6 +1412,8 @@ add_power_saving_section (CcPowerPanel *self)
gtk_widget_set_margin_right (scale, 20); gtk_widget_set_margin_right (scale, 20);
gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
gtk_size_group_add_widget (priv->level_sizegroup, scale); gtk_size_group_add_widget (priv->level_sizegroup, scale);
g_signal_connect (scale, "value-changed",
G_CALLBACK (brightness_slider_value_changed_cb), self);
gtk_box_pack_start (GTK_BOX (box), box2, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), box2, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (widget), box); gtk_container_add (GTK_CONTAINER (widget), box);