power: Cache D-Bus proxies and NMClient

This commit is contained in:
Georges Basile Stavracas Neto 2018-03-27 18:03:13 -03:00
parent 77ac09aa04
commit eb62419b4b

View file

@ -29,6 +29,7 @@
#include <NetworkManager.h> #include <NetworkManager.h>
#endif #endif
#include "shell/cc-object-storage.h"
#include "shell/list-box-helper.h" #include "shell/list-box-helper.h"
#include "cc-power-panel.h" #include "cc-power-panel.h"
#include "cc-power-resources.h" #include "cc-power-resources.h"
@ -1083,7 +1084,7 @@ got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_da
CcPowerPanel *self; CcPowerPanel *self;
GDBusProxy *screen_proxy; 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 (screen_proxy == NULL)
{ {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) 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; self->priv->screen_proxy = screen_proxy;
/* 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 (screen_proxy, "g-properties-changed", g_signal_connect_object (screen_proxy, "g-properties-changed",
G_CALLBACK (on_screen_property_change), self); G_CALLBACK (on_screen_property_change), self, 0);
sync_screen_brightness (self); sync_screen_brightness (self);
als_enabled_state_changed (self); als_enabled_state_changed (self);
@ -1120,7 +1121,7 @@ got_kbd_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
CcPowerPanel *self; CcPowerPanel *self;
GDBusProxy *kbd_proxy; 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 (kbd_proxy == NULL)
{ {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) 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; self->priv->kbd_proxy = kbd_proxy;
/* 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 (kbd_proxy, "g-properties-changed", g_signal_connect_object (kbd_proxy, "g-properties-changed",
G_CALLBACK (on_kbd_property_change), self); G_CALLBACK (on_kbd_property_change), self, 0);
sync_kbd_brightness (self); sync_kbd_brightness (self);
} }
@ -1440,13 +1441,31 @@ nm_device_changed (NMClient *client,
gtk_widget_set_visible (priv->mobile_row, has_mobile_devices (priv->nm_client)); gtk_widget_set_visible (priv->mobile_row, has_mobile_devices (priv->nm_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 static void
nm_client_ready_cb (GObject *source_object, nm_client_ready_cb (GObject *source_object,
GAsyncResult *res, GAsyncResult *res,
gpointer user_data) gpointer user_data)
{ {
CcPowerPanel *self; CcPowerPanel *self;
CcPowerPanelPrivate *priv;
NMClient *client; NMClient *client;
GError *error = NULL; GError *error = NULL;
@ -1467,18 +1486,12 @@ nm_client_ready_cb (GObject *source_object,
} }
self = user_data; self = user_data;
priv = self->priv;
priv->nm_client = client;
g_signal_connect (priv->nm_client, "notify", /* Setup the client */
G_CALLBACK (nm_client_state_changed), self); setup_nm_client (self, client);
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);
nm_client_state_changed (priv->nm_client, NULL, self); /* Store the object in the cache too */
nm_device_changed (priv->nm_client, NULL, self); cc_object_storage_add_object (CC_OBJECT_NMCLIENT, client);
} }
#endif #endif
@ -1648,13 +1661,12 @@ iio_proxy_appeared_cb (GDBusConnection *connection,
GError *error = NULL; GError *error = NULL;
self->priv->iio_proxy = self->priv->iio_proxy =
g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SYSTEM,
G_DBUS_PROXY_FLAGS_NONE, G_DBUS_PROXY_FLAGS_NONE,
NULL, "net.hadess.SensorProxy",
"net.hadess.SensorProxy", "/net/hadess/SensorProxy",
"/net/hadess/SensorProxy", "net.hadess.SensorProxy",
"net.hadess.SensorProxy", NULL, &error);
NULL, &error);
if (error != NULL) if (error != NULL)
{ {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) 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_signal_connect (G_OBJECT (priv->mobile_switch), "notify::active",
G_CALLBACK (mobile_switch_changed), self); 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_signal_connect (G_OBJECT (priv->wifi_switch), "notify::active",
G_CALLBACK (wifi_switch_changed), self); G_CALLBACK (wifi_switch_changed), self);
#endif #endif
#ifdef HAVE_BLUETOOTH #ifdef HAVE_BLUETOOTH
priv->bt_rfkill = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE, priv->bt_rfkill = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION,
NULL, G_DBUS_PROXY_FLAGS_NONE,
"org.gnome.SettingsDaemon.Rfkill", "org.gnome.SettingsDaemon.Rfkill",
"/org/gnome/SettingsDaemon/Rfkill", "/org/gnome/SettingsDaemon/Rfkill",
"org.gnome.SettingsDaemon.Rfkill", "org.gnome.SettingsDaemon.Rfkill",
NULL, NULL); NULL,
NULL);
if (priv->bt_rfkill) if (priv->bt_rfkill)
{ {
priv->bt_properties = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, priv->bt_properties = cc_object_storage_create_dbus_proxy_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE, G_DBUS_PROXY_FLAGS_NONE,
NULL, "org.gnome.SettingsDaemon.Rfkill",
"org.gnome.SettingsDaemon.Rfkill", "/org/gnome/SettingsDaemon/Rfkill",
"/org/gnome/SettingsDaemon/Rfkill", "org.freedesktop.DBus.Properties",
"org.freedesktop.DBus.Properties", NULL,
NULL, NULL); NULL);
} }
row = no_prelight_row_new (); row = no_prelight_row_new ();
@ -1944,8 +1962,8 @@ add_power_saving_section (CcPowerPanel *self)
gtk_widget_show_all (box); gtk_widget_show_all (box);
gtk_widget_set_no_show_all (row, TRUE); gtk_widget_set_no_show_all (row, TRUE);
priv->bt_row = row; priv->bt_row = row;
g_signal_connect_swapped (G_OBJECT (priv->bt_rfkill), "g-properties-changed", g_signal_connect_object (priv->bt_rfkill, "g-properties-changed",
G_CALLBACK (bt_powered_state_changed), self); G_CALLBACK (bt_powered_state_changed), self, G_CONNECT_SWAPPED);
g_signal_connect (G_OBJECT (priv->bt_switch), "notify::active", g_signal_connect (G_OBJECT (priv->bt_switch), "notify::active",
G_CALLBACK (bt_switch_changed), self); G_CALLBACK (bt_switch_changed), self);
@ -2509,24 +2527,22 @@ cc_power_panel_init (CcPowerPanel *self)
priv->cancellable = g_cancellable_new (); priv->cancellable = g_cancellable_new ();
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE, G_DBUS_PROXY_FLAGS_NONE,
NULL, "org.gnome.SettingsDaemon.Power",
"org.gnome.SettingsDaemon.Power", "/org/gnome/SettingsDaemon/Power",
"/org/gnome/SettingsDaemon/Power", "org.gnome.SettingsDaemon.Power.Screen",
"org.gnome.SettingsDaemon.Power.Screen", priv->cancellable,
priv->cancellable, got_screen_proxy_cb,
got_screen_proxy_cb, self);
self); cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE,
G_DBUS_PROXY_FLAGS_NONE, "org.gnome.SettingsDaemon.Power",
NULL, "/org/gnome/SettingsDaemon/Power",
"org.gnome.SettingsDaemon.Power", "org.gnome.SettingsDaemon.Power.Keyboard",
"/org/gnome/SettingsDaemon/Power", priv->cancellable,
"org.gnome.SettingsDaemon.Power.Keyboard", got_kbd_proxy_cb,
priv->cancellable, self);
got_kbd_proxy_cb,
self);
priv->chassis_type = get_chassis_type (priv->cancellable); priv->chassis_type = get_chassis_type (priv->cancellable);