diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2018-03-27 18:03:13 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2018-04-06 22:23:39 -0300 |
commit | eb62419b4bd989b5a39f9fe8f37209edf9f8c606 (patch) | |
tree | 2a90417e7dac564af2abce464fdb3909b0ef1984 /panels | |
parent | 77ac09aa04c26a88b3c75466ab3c8432b3682b0c (diff) | |
download | gnome-control-center-eb62419b4bd989b5a39f9fe8f37209edf9f8c606.tar.gz |
power: Cache D-Bus proxies and NMClient
Diffstat (limited to 'panels')
-rw-r--r-- | panels/power/cc-power-panel.c | 134 |
1 files changed, 75 insertions, 59 deletions
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c index f9b67a458..b78c17a49 100644 --- a/panels/power/cc-power-panel.c +++ b/panels/power/cc-power-panel.c @@ -29,6 +29,7 @@ #include <NetworkManager.h> #endif +#include "shell/cc-object-storage.h" #include "shell/list-box-helper.h" #include "cc-power-panel.h" #include "cc-power-resources.h" @@ -1083,7 +1084,7 @@ got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_da CcPowerPanel *self; GDBusProxy *screen_proxy; - screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error); + 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)) @@ -1096,8 +1097,8 @@ got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_da self->priv->screen_proxy = screen_proxy; /* we want to change the bar if the user presses brightness buttons */ - g_signal_connect (screen_proxy, "g-properties-changed", - G_CALLBACK (on_screen_property_change), self); + g_signal_connect_object (screen_proxy, "g-properties-changed", + G_CALLBACK (on_screen_property_change), self, 0); sync_screen_brightness (self); als_enabled_state_changed (self); @@ -1120,7 +1121,7 @@ got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) CcPowerPanel *self; GDBusProxy *kbd_proxy; - kbd_proxy = g_dbus_proxy_new_for_bus_finish (res, &error); + 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)) @@ -1133,8 +1134,8 @@ got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) self->priv->kbd_proxy = kbd_proxy; /* we want to change the bar if the user presses brightness buttons */ - g_signal_connect (kbd_proxy, "g-properties-changed", - G_CALLBACK (on_kbd_property_change), self); + g_signal_connect_object (kbd_proxy, "g-properties-changed", + G_CALLBACK (on_kbd_property_change), self, 0); sync_kbd_brightness (self); } @@ -1441,12 +1442,30 @@ nm_device_changed (NMClient *client, } static void +setup_nm_client (CcPowerPanel *self, + NMClient *client) +{ + CcPowerPanelPrivate *priv = self->priv; + + priv->nm_client = client; + + g_signal_connect_object (priv->nm_client, "notify", + G_CALLBACK (nm_client_state_changed), self, 0); + g_signal_connect_object (priv->nm_client, "device-added", + G_CALLBACK (nm_device_changed), self, 0); + g_signal_connect_object (priv->nm_client, "device-removed", + G_CALLBACK (nm_device_changed), self, 0); + + nm_client_state_changed (priv->nm_client, NULL, self); + nm_device_changed (priv->nm_client, NULL, self); +} + +static void nm_client_ready_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { CcPowerPanel *self; - CcPowerPanelPrivate *priv; NMClient *client; GError *error = NULL; @@ -1467,18 +1486,12 @@ nm_client_ready_cb (GObject *source_object, } self = user_data; - priv = self->priv; - priv->nm_client = client; - g_signal_connect (priv->nm_client, "notify", - G_CALLBACK (nm_client_state_changed), self); - g_signal_connect (priv->nm_client, "device-added", - G_CALLBACK (nm_device_changed), self); - g_signal_connect (priv->nm_client, "device-removed", - G_CALLBACK (nm_device_changed), self); + /* Setup the client */ + setup_nm_client (self, client); - nm_client_state_changed (priv->nm_client, NULL, self); - nm_device_changed (priv->nm_client, NULL, self); + /* Store the object in the cache too */ + cc_object_storage_add_object (CC_OBJECT_NMCLIENT, client); } #endif @@ -1648,13 +1661,12 @@ iio_proxy_appeared_cb (GDBusConnection *connection, GError *error = NULL; self->priv->iio_proxy = - g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "net.hadess.SensorProxy", - "/net/hadess/SensorProxy", - "net.hadess.SensorProxy", - NULL, &error); + cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + "net.hadess.SensorProxy", + "/net/hadess/SensorProxy", + "net.hadess.SensorProxy", + NULL, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) @@ -1887,29 +1899,35 @@ add_power_saving_section (CcPowerPanel *self) g_signal_connect (G_OBJECT (priv->mobile_switch), "notify::active", G_CALLBACK (mobile_switch_changed), self); - nm_client_new_async (priv->cancellable, nm_client_ready_cb, self); + /* Create and store a NMClient instance if it doesn't exist yet */ + if (cc_object_storage_has_object (CC_OBJECT_NMCLIENT)) + setup_nm_client (self, cc_object_storage_get_object (CC_OBJECT_NMCLIENT)); + else + nm_client_new_async (priv->cancellable, nm_client_ready_cb, self); g_signal_connect (G_OBJECT (priv->wifi_switch), "notify::active", G_CALLBACK (wifi_switch_changed), self); #endif #ifdef HAVE_BLUETOOTH - priv->bt_rfkill = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.SettingsDaemon.Rfkill", - "/org/gnome/SettingsDaemon/Rfkill", - "org.gnome.SettingsDaemon.Rfkill", - NULL, NULL); + + priv->bt_rfkill = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.SettingsDaemon.Rfkill", + "/org/gnome/SettingsDaemon/Rfkill", + "org.gnome.SettingsDaemon.Rfkill", + NULL, + NULL); + if (priv->bt_rfkill) { - priv->bt_properties = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.SettingsDaemon.Rfkill", - "/org/gnome/SettingsDaemon/Rfkill", - "org.freedesktop.DBus.Properties", - NULL, NULL); + priv->bt_properties = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_NONE, + "org.gnome.SettingsDaemon.Rfkill", + "/org/gnome/SettingsDaemon/Rfkill", + "org.freedesktop.DBus.Properties", + NULL, + NULL); } row = no_prelight_row_new (); @@ -1944,8 +1962,8 @@ add_power_saving_section (CcPowerPanel *self) gtk_widget_show_all (box); gtk_widget_set_no_show_all (row, TRUE); priv->bt_row = row; - g_signal_connect_swapped (G_OBJECT (priv->bt_rfkill), "g-properties-changed", - G_CALLBACK (bt_powered_state_changed), self); + g_signal_connect_object (priv->bt_rfkill, "g-properties-changed", + G_CALLBACK (bt_powered_state_changed), self, G_CONNECT_SWAPPED); g_signal_connect (G_OBJECT (priv->bt_switch), "notify::active", G_CALLBACK (bt_switch_changed), self); @@ -2509,24 +2527,22 @@ cc_power_panel_init (CcPowerPanel *self) priv->cancellable = g_cancellable_new (); - g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.SettingsDaemon.Power", - "/org/gnome/SettingsDaemon/Power", - "org.gnome.SettingsDaemon.Power.Screen", - priv->cancellable, - got_screen_proxy_cb, - self); - g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.gnome.SettingsDaemon.Power", - "/org/gnome/SettingsDaemon/Power", - "org.gnome.SettingsDaemon.Power.Keyboard", - priv->cancellable, - got_kbd_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.Screen", + priv->cancellable, + 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", + priv->cancellable, + got_kbd_proxy_cb, + self); priv->chassis_type = get_chassis_type (priv->cancellable); |