summaryrefslogtreecommitdiff
path: root/panels/power
diff options
context:
space:
mode:
authorIan Douglas Scott <idscott@system76.com>2020-08-05 13:55:07 -0700
committerRobert Ancell <robert.ancell@gmail.com>2020-08-18 03:01:02 +0000
commit3893a1da77d6afcc663225f4832df11bb8177fce (patch)
tree0b2d079aa6a4ba122e8c602a4444cab661eb31c4 /panels/power
parentfd60c313dfe5397992b7830ce0c0cbf1ed577395 (diff)
downloadgnome-control-center-3893a1da77d6afcc663225f4832df11bb8177fce.tar.gz
power: Refactor brightness scale code into a CcBrightnessScale class
This reduces some redundancy between the screen brightness and keyboard brightness code. Such refactoring is a prerequisite for including a keyboard backlight control in the Keyboard panel, as has been [proposed][1]. But hopefully this makes the code a bit neater and more managable even without that. [1]: https://gitlab.gnome.org/Teams/Design/settings-mockups/-/blob/master/keyboard/Keyboard-with-dialogs.png
Diffstat (limited to 'panels/power')
-rw-r--r--panels/power/cc-brightness-scale.c282
-rw-r--r--panels/power/cc-brightness-scale.h38
-rw-r--r--panels/power/cc-power-panel.c286
-rw-r--r--panels/power/meson.build9
4 files changed, 372 insertions, 243 deletions
diff --git a/panels/power/cc-brightness-scale.c b/panels/power/cc-brightness-scale.c
new file mode 100644
index 000000000..517177771
--- /dev/null
+++ b/panels/power/cc-brightness-scale.c
@@ -0,0 +1,282 @@
+/* cc-brightness-scale.c
+ *
+ * Copyright (C) 2010 Red Hat, Inc
+ * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
+ * Copyright (C) 2010,2015 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2020 System76, 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 <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "cc-brightness-scale.h"
+#include "shell/cc-object-storage.h"
+
+struct _CcBrightnessScale {
+ GtkScale parent_instance;
+
+ GCancellable *cancellable;
+ BrightnessDevice device;
+ gboolean has_brightness;
+ GDBusProxy *proxy;
+ gboolean setting_brightness;
+};
+
+enum
+{
+ PROP_0,
+ PROP_HAS_BRIGHTNESS,
+ PROP_DEVICE,
+};
+
+G_DEFINE_TYPE (CcBrightnessScale, cc_brightness_scale, GTK_TYPE_SCALE)
+
+static void
+set_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(GVariant) result = NULL;
+ GDBusProxy *proxy = G_DBUS_PROXY (source_object);
+
+ result = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (result == NULL)
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_printerr ("Error setting brightness: %s\n", error->message);
+ return;
+ }
+
+ CcBrightnessScale *self = CC_BRIGHTNESS_SCALE (user_data);
+
+ /* not setting, so pay attention to changed signals */
+ self->setting_brightness = FALSE;
+}
+
+static void
+brightness_slider_value_changed_cb (CcBrightnessScale *self, GtkRange *range)
+{
+ guint percentage;
+ g_autoptr(GVariant) variant = NULL;
+
+ percentage = (guint) gtk_range_get_value (range);
+
+ /* do not loop */
+ if (self->setting_brightness)
+ return;
+
+ self->setting_brightness = TRUE;
+
+ if (self->device == BRIGHTNESS_DEVICE_KBD)
+ variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Keyboard',"
+ "'Brightness', %v)",
+ g_variant_new_int32 (percentage));
+ else
+ variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Screen',"
+ "'Brightness', %v)",
+ g_variant_new_int32 (percentage));
+
+ /* push this to g-s-d */
+ g_dbus_proxy_call (self->proxy,
+ "org.freedesktop.DBus.Properties.Set",
+ g_variant_ref_sink (variant),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ self->cancellable,
+ set_brightness_cb,
+ self);
+}
+
+static void
+sync_brightness (CcBrightnessScale *self)
+{
+ g_autoptr(GVariant) result = NULL;
+ gint brightness;
+ GtkRange *range;
+
+ result = g_dbus_proxy_get_cached_property (self->proxy, "Brightness");
+
+ if (result)
+ {
+ /* set the slider */
+ brightness = g_variant_get_int32 (result);
+ self->has_brightness = brightness >= 0.0;
+ }
+ else
+ {
+ self->has_brightness = FALSE;
+ }
+
+ g_object_notify (G_OBJECT (self), "has-brightness");
+
+ if (self->has_brightness)
+ {
+ range = GTK_RANGE (self);
+ self->setting_brightness = TRUE;
+ gtk_range_set_value (range, brightness);
+ self->setting_brightness = FALSE;
+ }
+}
+
+static void
+got_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ g_autoptr(GError) error = NULL;
+ CcBrightnessScale *self;
+ GDBusProxy *proxy;
+
+ self = CC_BRIGHTNESS_SCALE (user_data);
+
+ proxy = cc_object_storage_create_dbus_proxy_finish (res, &error);
+ if (proxy == NULL)
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_printerr ("Error creating proxy: %s\n", error->message);
+ return;
+ }
+
+ self->proxy = proxy;
+
+ g_signal_connect_object (proxy, "g-properties-changed",
+ G_CALLBACK (sync_brightness), self, G_CONNECT_SWAPPED);
+
+ sync_brightness (self);
+}
+
+static void
+cc_brightness_scale_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CcBrightnessScale *self;
+
+ self = CC_BRIGHTNESS_SCALE (object);
+
+ switch (prop_id) {
+ case PROP_HAS_BRIGHTNESS:
+ g_value_set_boolean (value, self->has_brightness);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+cc_brightness_scale_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CcBrightnessScale *self;
+
+ self = CC_BRIGHTNESS_SCALE (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE:
+ self->device = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+cc_brightness_scale_constructed (GObject *object)
+{
+ CcBrightnessScale *self;
+ const gchar *interface;
+
+ G_OBJECT_CLASS (cc_brightness_scale_parent_class)->constructed (object);
+
+ self = CC_BRIGHTNESS_SCALE (object);
+
+ self->cancellable = g_cancellable_new();
+
+ g_signal_connect_object (GTK_SCALE (self), "value-changed",
+ G_CALLBACK (brightness_slider_value_changed_cb), self, G_CONNECT_SWAPPED);
+
+ if (self->device == BRIGHTNESS_DEVICE_KBD)
+ interface = "org.gnome.SettingsDaemon.Power.Keyboard";
+ else
+ interface = "org.gnome.SettingsDaemon.Power.Screen";
+
+ cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ "org.gnome.SettingsDaemon.Power",
+ "/org/gnome/SettingsDaemon/Power",
+ interface,
+ self->cancellable,
+ got_proxy_cb,
+ self);
+
+ gtk_range_set_range (GTK_RANGE (self), 0, 100);
+ gtk_range_set_increments (GTK_RANGE (self), 1, 10);
+ gtk_range_set_round_digits (GTK_RANGE (self), 0);
+ gtk_scale_set_draw_value (GTK_SCALE (self), FALSE);
+}
+
+static void
+cc_brightness_scale_finalize (GObject *object)
+{
+ CcBrightnessScale *self = CC_BRIGHTNESS_SCALE (object);
+
+ g_cancellable_cancel (self->cancellable);
+
+ G_OBJECT_CLASS (cc_brightness_scale_parent_class)->finalize (object);
+}
+
+void
+cc_brightness_scale_class_init (CcBrightnessScaleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = cc_brightness_scale_get_property;
+ object_class->set_property = cc_brightness_scale_set_property;
+ object_class->constructed = cc_brightness_scale_constructed;
+ object_class->finalize = cc_brightness_scale_finalize;
+
+ g_object_class_install_property (object_class,
+ PROP_DEVICE,
+ g_param_spec_enum ("device",
+ "device",
+ "device",
+ brightness_device_get_type(),
+ BRIGHTNESS_DEVICE_SCREEN,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
+ g_object_class_install_property (object_class,
+ PROP_HAS_BRIGHTNESS,
+ g_param_spec_boolean ("has-brightness",
+ "has brightness",
+ "has brightness",
+ FALSE,
+ G_PARAM_READABLE));
+}
+
+static void
+cc_brightness_scale_init (CcBrightnessScale *self)
+{
+}
+
+
+gboolean
+cc_brightness_scale_get_has_brightness (CcBrightnessScale *self)
+{
+ g_return_val_if_fail (CC_IS_BRIGHTNESS_SCALE (self), FALSE);
+
+ return self->has_brightness;
+}
diff --git a/panels/power/cc-brightness-scale.h b/panels/power/cc-brightness-scale.h
new file mode 100644
index 000000000..b55d05b33
--- /dev/null
+++ b/panels/power/cc-brightness-scale.h
@@ -0,0 +1,38 @@
+/* cc-brightness-scale.h
+ *
+ * Copyright (C) 2020 System76, 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 <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+#include "cc-brightness-scale-types.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+ BRIGHTNESS_DEVICE_SCREEN,
+ BRIGHTNESS_DEVICE_KBD,
+} BrightnessDevice;
+
+#define CC_TYPE_BRIGHTNESS_SCALE (cc_brightness_scale_get_type())
+G_DECLARE_FINAL_TYPE (CcBrightnessScale, cc_brightness_scale, CC, BRIGHTNESS_SCALE, GtkBox)
+
+gboolean cc_brightness_scale_get_has_brightness (CcBrightnessScale*);
+
+G_END_DECLS
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index e565ee934..044f633f9 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -31,6 +31,7 @@
#include "shell/cc-object-storage.h"
#include "list-box-helper.h"
+#include "cc-brightness-scale.h"
#include "cc-power-panel.h"
#include "cc-power-resources.h"
#include "cc-util.h"
@@ -75,8 +76,6 @@ struct _CcPowerPanel
GtkListStore *liststore_power_button;
UpClient *up_client;
GPtrArray *devices;
- GDBusProxy *screen_proxy;
- GDBusProxy *kbd_proxy;
gboolean has_batteries;
char *chassis_type;
@@ -99,11 +98,9 @@ struct _CcPowerPanel
GtkWidget *dim_screen_row;
GtkWidget *brightness_row;
- GtkWidget *brightness_scale;
- gboolean setting_brightness;
+ CcBrightnessScale *brightness_scale;
GtkWidget *kbd_brightness_row;
- GtkWidget *kbd_brightness_scale;
- gboolean kbd_setting_brightness;
+ CcBrightnessScale *kbd_brightness_scale;
GtkWidget *automatic_suspend_row;
GtkWidget *automatic_suspend_label;
@@ -150,8 +147,6 @@ cc_power_panel_dispose (GObject *object)
g_clear_object (&self->session_settings);
g_clear_object (&self->interface_settings);
g_clear_pointer (&self->automatic_suspend_dialog, gtk_widget_destroy);
- g_clear_object (&self->screen_proxy);
- g_clear_object (&self->kbd_proxy);
g_clear_pointer (&self->devices, g_ptr_array_unref);
g_clear_object (&self->up_client);
g_clear_object (&self->bt_rfkill);
@@ -1035,144 +1030,6 @@ up_client_device_added (CcPowerPanel *self,
}
static void
-set_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- CcPowerPanel *self = CC_POWER_PANEL (user_data);
- g_autoptr(GError) error = NULL;
- g_autoptr(GVariant) result = NULL;
- GDBusProxy *proxy = G_DBUS_PROXY (source_object);
-
- /* not setting, so pay attention to changed signals */
- if (proxy == self->screen_proxy)
- self->setting_brightness = FALSE;
- else if (proxy == self->kbd_proxy)
- self->kbd_setting_brightness = FALSE;
-
- result = g_dbus_proxy_call_finish (proxy, res, &error);
- if (result == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_printerr ("Error setting brightness: %s\n", error->message);
- return;
- }
-}
-
-static void
-brightness_slider_value_changed_cb (CcPowerPanel *self, GtkRange *range)
-{
- guint percentage;
- g_autoptr(GVariant) variant = NULL;
- GDBusProxy *proxy;
-
- percentage = (guint) gtk_range_get_value (range);
-
- if (range == GTK_RANGE (self->brightness_scale))
- {
- /* do not loop */
- if (self->setting_brightness)
- return;
-
- self->setting_brightness = TRUE;
- proxy = self->screen_proxy;
-
- variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Screen',"
- "'Brightness', %v)",
- g_variant_new_int32 (percentage));
- }
- else
- {
- /* do not loop */
- if (self->kbd_setting_brightness)
- return;
-
- self->kbd_setting_brightness = TRUE;
- proxy = self->kbd_proxy;
-
- variant = g_variant_new_parsed ("('org.gnome.SettingsDaemon.Power.Keyboard',"
- "'Brightness', %v)",
- g_variant_new_int32 (percentage));
- }
-
- /* push this to g-s-d */
- g_dbus_proxy_call (proxy,
- "org.freedesktop.DBus.Properties.Set",
- g_variant_ref_sink (variant),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cc_panel_get_cancellable (CC_PANEL (self)),
- set_brightness_cb,
- self);
-}
-
-static void
-sync_kbd_brightness (CcPowerPanel *self)
-{
- g_autoptr(GVariant) result = NULL;
- gint brightness;
- gboolean visible;
- GtkRange *range;
-
- result = g_dbus_proxy_get_cached_property (self->kbd_proxy, "Brightness");
- if (result)
- {
- /* set the slider */
- brightness = g_variant_get_int32 (result);
- visible = brightness >= 0.0;
- }
- else
- {
- visible = FALSE;
- }
-
- gtk_widget_set_visible (self->kbd_brightness_row, visible);
-
- if (visible)
- {
- range = GTK_RANGE (self->kbd_brightness_scale);
- gtk_range_set_range (range, 0, 100);
- gtk_range_set_increments (range, 1, 10);
- self->kbd_setting_brightness = TRUE;
- gtk_range_set_value (range, brightness);
- self->kbd_setting_brightness = FALSE;
- }
-}
-
-static void
-sync_screen_brightness (CcPowerPanel *self)
-{
- g_autoptr(GVariant) result = NULL;
- gint brightness;
- gboolean visible;
- GtkRange *range;
-
- result = g_dbus_proxy_get_cached_property (self->screen_proxy, "Brightness");
-
- if (result)
- {
- /* set the slider */
- brightness = g_variant_get_int32 (result);
- visible = brightness >= 0.0;
- }
- else
- {
- visible = FALSE;
- }
-
- gtk_widget_set_visible (self->brightness_row, visible);
- gtk_widget_set_visible (self->dim_screen_row, visible);
-
- if (visible)
- {
- range = GTK_RANGE (self->brightness_scale);
- gtk_range_set_range (range, 0, 100);
- gtk_range_set_increments (range, 1, 10);
- self->setting_brightness = TRUE;
- gtk_range_set_value (range, brightness);
- self->setting_brightness = FALSE;
- }
-}
-
-static void
als_switch_changed (CcPowerPanel *self)
{
gboolean enabled;
@@ -1188,12 +1045,7 @@ als_enabled_state_changed (CcPowerPanel *self)
gboolean has_brightness = FALSE;
gboolean visible = FALSE;
- if (self->screen_proxy != NULL)
- {
- g_autoptr(GVariant) v = g_dbus_proxy_get_cached_property (self->screen_proxy, "Brightness");
- if (v != NULL)
- has_brightness = g_variant_get_int32 (v) >= 0.0;
- }
+ has_brightness = cc_brightness_scale_get_has_brightness (self->brightness_scale);
if (self->iio_proxy != NULL)
{
@@ -1211,69 +1063,6 @@ als_enabled_state_changed (CcPowerPanel *self)
}
static void
-on_screen_property_change (CcPowerPanel *self)
-{
- sync_screen_brightness (self);
-}
-
-static void
-got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- g_autoptr(GError) error = NULL;
- CcPowerPanel *self;
- GDBusProxy *screen_proxy;
-
- screen_proxy = cc_object_storage_create_dbus_proxy_finish (res, &error);
- if (screen_proxy == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_printerr ("Error creating screen proxy: %s\n", error->message);
- return;
- }
-
- self = CC_POWER_PANEL (user_data);
- self->screen_proxy = screen_proxy;
-
- /* we want to change the bar if the user presses brightness buttons */
- g_signal_connect_object (screen_proxy, "g-properties-changed",
- G_CALLBACK (on_screen_property_change), self, G_CONNECT_SWAPPED);
-
- sync_screen_brightness (self);
- als_enabled_state_changed (self);
-}
-
-static void
-on_kbd_property_change (CcPowerPanel *self)
-{
- sync_kbd_brightness (self);
-}
-
-static void
-got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
- CcPowerPanel *self;
- g_autoptr(GError) error = NULL;
- GDBusProxy *kbd_proxy;
-
- kbd_proxy = cc_object_storage_create_dbus_proxy_finish (res, &error);
- if (kbd_proxy == NULL)
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_printerr ("Error creating keyboard proxy: %s\n", error->message);
- return;
- }
-
- self = CC_POWER_PANEL (user_data);
- self->kbd_proxy = kbd_proxy;
-
- /* we want to change the bar if the user presses brightness buttons */
- g_signal_connect_object (kbd_proxy, "g-properties-changed",
- G_CALLBACK (on_kbd_property_change), self, G_CONNECT_SWAPPED);
-
- sync_kbd_brightness (self);
-}
-
-static void
combo_time_changed_cb (CcPowerPanel *self, GtkWidget *widget)
{
GtkTreeIter iter;
@@ -1739,9 +1528,10 @@ combo_power_button_changed_cb (CcPowerPanel *self)
}
static GtkWidget *
-add_brightness_row (CcPowerPanel *self,
- const char *text,
- GtkWidget **brightness_scale)
+add_brightness_row (CcPowerPanel *self,
+ BrightnessDevice device,
+ const char *text,
+ CcBrightnessScale **brightness_scale)
{
GtkWidget *row, *box, *label, *title, *box2, *w, *scale;
@@ -1759,15 +1549,14 @@ add_brightness_row (CcPowerPanel *self,
gtk_box_pack_start (GTK_BOX (box2), w, FALSE, TRUE, 0);
gtk_size_group_add_widget (self->charge_sizegroup, w);
- *brightness_scale = scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 100, 1);
+ scale = g_object_new (CC_TYPE_BRIGHTNESS_SCALE,
+ "device", device,
+ NULL);
gtk_widget_show (scale);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), scale);
- gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_box_pack_start (GTK_BOX (box2), scale, TRUE, TRUE, 0);
gtk_size_group_add_widget (self->level_sizegroup, scale);
- gtk_range_set_round_digits (GTK_RANGE (scale), 0);
- g_signal_connect_object (scale, "value-changed",
- G_CALLBACK (brightness_slider_value_changed_cb), self, G_CONNECT_SWAPPED);
+ *brightness_scale = CC_BRIGHTNESS_SCALE (scale);
gtk_box_pack_start (GTK_BOX (box), box2, TRUE, TRUE, 0);
@@ -2009,6 +1798,32 @@ can_suspend_or_hibernate (CcPowerPanel *self,
}
static void
+has_brightness_cb (CcPowerPanel *self)
+{
+ gboolean has_brightness;
+
+ has_brightness = cc_brightness_scale_get_has_brightness (self->brightness_scale);
+
+ gtk_widget_set_visible (self->brightness_row, has_brightness);
+ gtk_widget_set_visible (self->dim_screen_row, has_brightness);
+
+ als_enabled_state_changed (self);
+
+}
+
+static void
+has_kbd_brightness_cb (CcPowerPanel *self,
+ GParamSpec *pspec,
+ GObject *object)
+{
+ gboolean has_brightness;
+
+ has_brightness = cc_brightness_scale_get_has_brightness (self->kbd_brightness_scale);
+
+ gtk_widget_set_visible (self->kbd_brightness_row, has_brightness);
+}
+
+static void
add_power_saving_section (CcPowerPanel *self)
{
GtkWidget *widget, *box, *label, *row;
@@ -2054,7 +1869,9 @@ add_power_saving_section (CcPowerPanel *self)
gtk_container_add (GTK_CONTAINER (box), widget);
gtk_box_pack_start (GTK_BOX (self->vbox_power), box, FALSE, TRUE, 0);
- row = add_brightness_row (self, _("_Screen Brightness"), &self->brightness_scale);
+ row = add_brightness_row (self, BRIGHTNESS_DEVICE_SCREEN, _("_Screen Brightness"), &self->brightness_scale);
+ g_signal_connect_object (self->brightness_scale, "notify::has-brightness",
+ G_CALLBACK (has_brightness_cb), self, G_CONNECT_SWAPPED);
gtk_widget_show (row);
self->brightness_row = row;
@@ -2088,7 +1905,9 @@ add_power_saving_section (CcPowerPanel *self)
g_signal_connect_object (self->als_switch, "notify::active",
G_CALLBACK (als_switch_changed), self, G_CONNECT_SWAPPED);
- row = add_brightness_row (self, _("_Keyboard Brightness"), &self->kbd_brightness_scale);
+ row = add_brightness_row (self, BRIGHTNESS_DEVICE_KBD, _("_Keyboard Brightness"), &self->kbd_brightness_scale);
+ g_signal_connect_object (self->kbd_brightness_scale, "notify::has-brightness",
+ G_CALLBACK (has_kbd_brightness_cb), self, G_CONNECT_SWAPPED);
gtk_widget_show (row);
self->kbd_brightness_row = row;
@@ -2548,23 +2367,6 @@ cc_power_panel_init (CcPowerPanel *self)
gtk_widget_init_template (GTK_WIDGET (self));
load_custom_css (self);
- cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.SettingsDaemon.Power",
- "/org/gnome/SettingsDaemon/Power",
- "org.gnome.SettingsDaemon.Power.Screen",
- cc_panel_get_cancellable (CC_PANEL (self)),
- got_screen_proxy_cb,
- self);
- cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.gnome.SettingsDaemon.Power",
- "/org/gnome/SettingsDaemon/Power",
- "org.gnome.SettingsDaemon.Power.Keyboard",
- cc_panel_get_cancellable (CC_PANEL (self)),
- got_kbd_proxy_cb,
- self);
-
self->chassis_type = get_chassis_type (cc_panel_get_cancellable (CC_PANEL (self)));
self->up_client = up_client_new ();
diff --git a/panels/power/meson.build b/panels/power/meson.build
index 737d86817..1700c91e8 100644
--- a/panels/power/meson.build
+++ b/panels/power/meson.build
@@ -17,7 +17,14 @@ i18n.merge_file(
install_dir: control_center_desktopdir
)
-sources = files('cc-power-panel.c')
+sources = files(
+ 'cc-brightness-scale.c',
+ 'cc-power-panel.c'
+)
+
+sources += gnome.mkenums_simple(
+ 'cc-brightness-scale-types',
+ sources: ['cc-brightness-scale.h'])
resource_data = files('cc-power-panel.ui')