power: Cache D-Bus proxies and NMClient
This commit is contained in:
parent
77ac09aa04
commit
eb62419b4b
1 changed files with 75 additions and 59 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue