This is an automated email from the git hooks/post-receive script. eric pushed a commit to branch master in repository xfce/xfce4-power-manager.
commit ae97be6f3500eea509d61c914e22c5355e7d57de Author: Stefan Seyfried <seife+...@b1-systems.com> Date: Sun Apr 13 12:05:19 2014 +0200 port xfpm to libupower-glib / add support for upower-0.99.0 API * port most of the upower interfaces to upower-glib * conditionalize stuff that has been deprecated in upower >= 0.99.0 * suspend / hibernate is handled by systemd/logind * if upower is >= 0.99.0 and logind is not running, log errors (as functionality will be missing) Signed-off-by: Eric Koegel <eric.koe...@gmail.com> --- configure.ac.in | 2 + src/Makefile.am | 4 + src/xfpm-battery.c | 136 ++++++++---------------- src/xfpm-battery.h | 3 +- src/xfpm-power-common.c | 79 -------------- src/xfpm-power-common.h | 13 +-- src/xfpm-power-info.c | 220 ++++++++++++++------------------------- src/xfpm-power.c | 265 ++++++++++++++++------------------------------- 8 files changed, 225 insertions(+), 497 deletions(-) diff --git a/configure.ac.in b/configure.ac.in index 7a4af87..527f399 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -64,6 +64,7 @@ m4_define([libxfce4util_minimum_version],[4.10.0]) m4_define([libxfce4panel_minimum_version],[4.10.0]) m4_define([libnotify_minimum_version], [0.4.1]) +m4_define([upower_minimum_version], [0.9.8]) m4_define([xrandr_minimum_version], [1.2.0]) m4_define([x11_minimum_version], [1.0.0]) @@ -78,6 +79,7 @@ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0],[xfconf_minimum_version]) XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1],[libxfce4ui_minimum_version]) XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0],[libxfce4util_minimum_version]) XDT_CHECK_PACKAGE([LIBNOTIFY],[libnotify], [libnotify_minimum_version]) +XDT_CHECK_PACKAGE([UPOWER],[upower-glib], [upower_minimum_version]) XDT_CHECK_PACKAGE([XRANDR],[xrandr], [xrandr_minimum_version]) XDT_CHECK_PACKAGE([X11], [x11], [x11_minimum_version]) diff --git a/src/Makefile.am b/src/Makefile.am index 316a823..9899733 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -56,6 +56,7 @@ xfce4_power_manager_CFLAGS = \ $(LIBXFCE4UI_CFLAGS) \ $(XFCONF_CFLAGS) \ $(LIBNOTIFY_CFLAGS) \ + $(UPOWER_CFLAGS) \ $(XRANDR_CFLAGS) \ $(DPMS_CFLAGS) \ $(PLATFORM_CPPFLAGS) \ @@ -74,6 +75,7 @@ xfce4_power_manager_LDADD = \ $(LIBXFCE4UI_LIBS) \ $(XFCONF_LIBS) \ $(LIBNOTIFY_LIBS) \ + $(UPOWER_LIBS) \ $(XRANDR_LIBS) \ $(DPMS_LIBS) @@ -90,6 +92,7 @@ xfce4_power_information_CFLAGS = \ -DG_LOG_DOMAIN=\"xfce4-power-information\"\ $(GOBJECT_CFLAGS) \ $(DBUS_GLIB_CFLAGS) \ + $(UPOWER_CFLAGS) \ $(LIBXFCE4UI_CFLAGS) \ $(PLATFORM_CPPFLAGS) \ $(PLATFORM_CFLAGS) @@ -101,6 +104,7 @@ xfce4_power_information_LDFLAGS = \ xfce4_power_information_LDADD = \ $(GOBJECT_LIBS) \ $(DBUS_GLIB_LIBS) \ + $(UPOWER_LIBS) \ $(LIBXFCE4UI_LIBS) \ $(top_builddir)/libdbus/libxfpmdbus.la diff --git a/src/xfpm-battery.c b/src/xfpm-battery.c index 2034c60..9d1b590 100644 --- a/src/xfpm-battery.c +++ b/src/xfpm-battery.c @@ -27,6 +27,7 @@ #include <string.h> #include <gtk/gtk.h> +#include <upower.h> #include <libxfce4util/libxfce4util.h> @@ -53,8 +54,8 @@ struct XfpmBatteryPrivate XfpmXfconf *conf; XfpmNotify *notify; XfpmButton *button; - DBusGProxy *proxy; - DBusGProxy *proxy_prop; + UpDevice *device; + UpClient *client; gchar *icon_prefix; @@ -71,6 +72,7 @@ struct XfpmBatteryPrivate gulong sig; gulong sig_bt; + gulong sig_up; guint notify_idle; }; @@ -525,45 +527,28 @@ xfpm_battery_check_charge (XfpmBattery *battery) } static void -xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props) +xfpm_battery_refresh (XfpmBattery *battery, UpDevice *device) { - GValue *value; + gboolean present; guint state; - - value = g_hash_table_lookup (props, "IsPresent"); - - if ( value == NULL ) - { - g_warning ("No 'IsPresent' property found"); - goto out; - } - - battery->priv->present = g_value_get_boolean (value); - - value = g_hash_table_lookup (props, "State"); - - if ( value == NULL ) - { - g_warning ("No 'State' property found"); - } - - state = g_value_get_uint (value); + gdouble percentage; + guint64 to_empty, to_full; + g_object_get(device, + "is-present", &present, + "percentage", &percentage, + "state", &state, + "time-to-empty", &to_empty, + "time-to-full", &to_full, + NULL); + + battery->priv->present = present; if ( state != battery->priv->state ) { battery->priv->state = state; xfpm_battery_refresh_visible (battery); xfpm_battery_notify_state (battery); } - - value = g_hash_table_lookup (props, "Percentage"); - - if ( value == NULL ) - { - g_warning ("No 'Percentage' property found on battery device"); - goto out; - } - - battery->priv->percentage = (guint) g_value_get_double (value); + battery->priv->percentage = (guint) percentage; xfpm_battery_check_charge (battery); @@ -572,29 +557,9 @@ xfpm_battery_refresh (XfpmBattery *battery, GHashTable *props) if ( battery->priv->type == XFPM_DEVICE_TYPE_BATTERY || battery->priv->type == XFPM_DEVICE_TYPE_UPS ) { - value = g_hash_table_lookup (props, "TimeToEmpty"); - - if ( value == NULL ) - { - g_warning ("No 'TimeToEmpty' property found on battery device"); - goto out; - } - - battery->priv->time_to_empty = g_value_get_int64 (value); - - value = g_hash_table_lookup (props, "TimeToFull"); - - if ( value == NULL ) - { - g_warning ("No 'TimeToFull' property found on battery device"); - goto out; - } - - battery->priv->time_to_full = g_value_get_int64 (value); + battery->priv->time_to_empty = to_empty; + battery->priv->time_to_full = to_empty; } - - out: - g_hash_table_destroy (props); } static void @@ -605,30 +570,13 @@ xfpm_battery_button_pressed_cb (XfpmButton *button, XfpmButtonKey type, XfpmBatt } static void -xfpm_battery_changed_cb (DBusGProxy *proxy, XfpmBattery *battery) +xfpm_battery_changed_cb (UpDevice *device, +#if UP_CHECK_VERSION(0, 99, 0) + GParamSpec *pspec, +#endif + XfpmBattery *battery) { - GHashTable *props; - GValue *value; - const gchar *cstr; - const gchar *p; - - props = xfpm_power_get_interface_properties (battery->priv->proxy_prop, - UPOWER_IFACE_DEVICE); - - value = g_hash_table_lookup (props, "NativePath"); - if ( value ) - { - cstr = g_value_get_string (value); - p = strrchr (cstr, '/'); - if ( p && (strncmp( p, "/hid-", 5 ) == 0) ) - { - XFPM_DEBUG("Ignoring battery '%s' - is a HID device\n", cstr); - return; - } - } - - if ( props ) - xfpm_battery_refresh (battery, props); + xfpm_battery_refresh (battery, device); } static gboolean @@ -760,7 +708,8 @@ xfpm_battery_init (XfpmBattery *battery) battery->priv->conf = xfpm_xfconf_new (); battery->priv->notify = xfpm_notify_new (); - battery->priv->proxy_prop = NULL; + battery->priv->device = NULL; + battery->priv->client = NULL; battery->priv->state = XFPM_DEVICE_STATE_UNKNOWN; battery->priv->type = XFPM_DEVICE_TYPE_UNKNOWN; battery->priv->charge = XFPM_BATTERY_CHARGE_UNKNOWN; @@ -790,8 +739,8 @@ xfpm_battery_finalize (GObject *object) if (battery->priv->notify_idle != 0) g_source_remove (battery->priv->notify_idle); - dbus_g_proxy_disconnect_signal (battery->priv->proxy, "Changed", - G_CALLBACK (xfpm_battery_changed_cb), battery); + if ( g_signal_handler_is_connected (battery->priv->device, battery->priv->sig_up ) ) + g_signal_handler_disconnect (G_OBJECT (battery->priv->device), battery->priv->sig_up); if ( g_signal_handler_is_connected (battery->priv->conf, battery->priv->sig ) ) g_signal_handler_disconnect (G_OBJECT (battery->priv->conf), battery->priv->sig); @@ -799,8 +748,7 @@ xfpm_battery_finalize (GObject *object) if ( g_signal_handler_is_connected (battery->priv->button, battery->priv->sig_bt ) ) g_signal_handler_disconnect (G_OBJECT (battery->priv->button), battery->priv->sig_bt); - g_object_unref (battery->priv->proxy); - g_object_unref (battery->priv->proxy_prop); + g_object_unref (battery->priv->device); g_object_unref (battery->priv->conf); g_object_unref (battery->priv->notify); g_object_unref (battery->priv->button); @@ -884,26 +832,28 @@ xfpm_battery_new (void) } void xfpm_battery_monitor_device (XfpmBattery *battery, - DBusGProxy *proxy, - DBusGProxy *proxy_prop, + const char *object_path, XfpmDeviceType device_type) { + UpDevice *device; battery->priv->type = device_type; - battery->priv->proxy_prop = proxy_prop; - battery->priv->proxy = proxy; + battery->priv->client = up_client_new(); battery->priv->icon_prefix = xfpm_battery_get_icon_prefix_device_enum_type (device_type); battery->priv->battery_name = xfpm_battery_get_name (device_type); - - dbus_g_proxy_add_signal (proxy, "Changed", G_TYPE_INVALID); - dbus_g_proxy_connect_signal (proxy, "Changed", - G_CALLBACK (xfpm_battery_changed_cb), battery, NULL); - + device = up_device_new(); + up_device_set_object_path_sync (device, object_path, NULL, NULL); + battery->priv->device = device; +#if UP_CHECK_VERSION(0, 99, 0) + battery->priv->sig_up = g_signal_connect (battery->priv->device, "notify", G_CALLBACK (xfpm_battery_changed_cb), battery); +#else + battery->priv->sig_up = g_signal_connect (battery->priv->device, "changed", G_CALLBACK (xfpm_battery_changed_cb), battery); +#endif g_object_set (G_OBJECT (battery), "has-tooltip", TRUE, NULL); - xfpm_battery_changed_cb (proxy, battery); + xfpm_battery_refresh (battery, device); } XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery) diff --git a/src/xfpm-battery.h b/src/xfpm-battery.h index 4d4ca34..a3b57cf 100644 --- a/src/xfpm-battery.h +++ b/src/xfpm-battery.h @@ -56,8 +56,7 @@ GType xfpm_battery_get_type (void) G_GNUC_CONST; GtkStatusIcon *xfpm_battery_new (void); void xfpm_battery_monitor_device (XfpmBattery *battery, - DBusGProxy *proxy, - DBusGProxy *proxy_prop, + const char *object_path, XfpmDeviceType device_type); XfpmDeviceType xfpm_battery_get_device_type (XfpmBattery *battery); diff --git a/src/xfpm-power-common.c b/src/xfpm-power-common.c index 39ecc18..d2c4ab5 100644 --- a/src/xfpm-power-common.c +++ b/src/xfpm-power-common.c @@ -31,85 +31,6 @@ #include "xfpm-icons.h" /** - * xfpm_power_enumerate_devices: - * - **/ -GPtrArray * -xfpm_power_enumerate_devices (DBusGProxy *proxy) -{ - gboolean ret; - GError *error = NULL; - GPtrArray *array = NULL; - GType g_type_array; - - g_type_array = dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH); - - ret = dbus_g_proxy_call (proxy, "EnumerateDevices", &error, - G_TYPE_INVALID, - g_type_array, &array, - G_TYPE_INVALID); - if (!ret) - { - g_critical ("Couldn't enumerate power devices: %s", error->message); - g_error_free (error); - } - - return array; -} - -/** - * xfpm_power_get_interface_properties: - * - **/ -GHashTable *xfpm_power_get_interface_properties (DBusGProxy *proxy_prop, const gchar *iface_name) -{ - gboolean ret; - GError *error = NULL; - GHashTable *props = NULL; - - props = NULL; - - ret = dbus_g_proxy_call (proxy_prop, "GetAll", &error, - G_TYPE_STRING, iface_name, - G_TYPE_INVALID, - dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &props, - G_TYPE_INVALID); - - if (!ret) - { - g_warning ("Unable to get interface properties for : %s : %s", iface_name, error->message); - g_error_free (error); - } - - return props; -} - -/** - * xfpm_power_get_interface_property: - * - **/ -GValue xfpm_power_get_interface_property (DBusGProxy *proxy, const gchar *iface_name, const gchar *prop_name) -{ - gboolean ret; - GError *error = NULL; - GValue value = { 0, }; - - ret = dbus_g_proxy_call (proxy, "Get", &error, - G_TYPE_STRING, iface_name, - G_TYPE_STRING, prop_name, - G_TYPE_INVALID, - G_TYPE_VALUE, &value, G_TYPE_INVALID); - - if (!ret) - { - g_warning ("Unable to get property %s on interface %s : %s", prop_name, iface_name, error->message); - g_error_free (error); - } - - return value; -} - -/** * xfpm_power_translate_device_type: * **/ diff --git a/src/xfpm-power-common.h b/src/xfpm-power-common.h index 1040aed..dbf6e16 100644 --- a/src/xfpm-power-common.h +++ b/src/xfpm-power-common.h @@ -33,18 +33,13 @@ #define UPOWER_PATH_WAKEUPS "/org/freedesktop/UPower/Wakeups" #define UPOWER_IFACE_WAKEUPS "org.freedesktop.UPower.Wakeups" -#define POLKIT_AUTH_SUSPEND "org.freedesktop.upower.suspend" -#define POLKIT_AUTH_HIBERNATE "org.freedesktop.upower.hibernate" +#define POLKIT_AUTH_SUSPEND_UPOWER "org.freedesktop.upower.suspend" +#define POLKIT_AUTH_HIBERNATE_UPOWER "org.freedesktop.upower.hibernate" +#define POLKIT_AUTH_SUSPEND_LOGIND "org.freedesktop.login1.suspend" +#define POLKIT_AUTH_HIBERNATE_LOGIND "org.freedesktop.login1.hibernate" -GPtrArray *xfpm_power_enumerate_devices (DBusGProxy *proxy); -GHashTable *xfpm_power_get_interface_properties (DBusGProxy *proxy_prop, - const gchar *iface_name); - -GValue xfpm_power_get_interface_property (DBusGProxy *proxy, - const gchar *iface_name, - const gchar *prop_name); const gchar *xfpm_power_translate_device_type (guint type); diff --git a/src/xfpm-power-info.c b/src/xfpm-power-info.c index a53a6be..263ccbd 100644 --- a/src/xfpm-power-info.c +++ b/src/xfpm-power-info.c @@ -39,6 +39,7 @@ #include <dbus/dbus-glib.h> #include <dbus/dbus-glib-lowlevel.h> +#include <upower.h> #include "xfpm-icons.h" #include "xfpm-power-common.h" @@ -59,6 +60,8 @@ typedef struct GtkWidget *wakeups; /* Tree view processor wakeups*/ + UpClient *upower; + } XfpmInfo; enum @@ -253,18 +256,9 @@ gpm_stats_format_details (const gchar *command_details) } static gchar * -xfpm_info_get_energy_property (GHashTable *props, const gchar *prop, const gchar *unit) +xfpm_info_get_energy_property (gdouble energy, const gchar *unit) { - GValue *value; gchar *val = NULL; - gdouble energy; - - value = g_hash_table_lookup (props, prop); - - if ( !value ) - return NULL; - - energy = g_value_get_double (value); val = g_strdup_printf ("%.1f %s", energy, unit); @@ -301,7 +295,7 @@ xfpm_info_add_sidebar_icon (XfpmInfo *info, const gchar *name, const gchar *icon } static void -xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *object_path) +xfpm_info_add_device_view (XfpmInfo *info, UpDevice *device, const gchar *object_path) { GtkWidget *view; @@ -309,11 +303,12 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec GtkTreeIter iter; GtkTreeViewColumn *col; GtkCellRenderer *renderer; - GValue *value; - const gchar *cstr; gchar *str; gint i = 0; - guint type = 0; + guint type = 0, tech = 0; + gdouble energy_full_design = -1.0, energy_full = -1.0, energy_empty = -1.0, voltage = -1.0, percent = -1.0; + gboolean p_supply = FALSE; + gchar *model = NULL, *vendor = NULL, *serial = NULL; const gchar *battery_type = NULL; view = gtk_tree_view_new (); @@ -352,11 +347,26 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec /*Type*/ - value = g_hash_table_lookup (props, "Type"); - - if ( value ) + /* hack, this depends on XFPM_DEVICE_TYPE_* being in sync with UP_DEVICE_KIND_* */ + g_object_get (device, + "kind", &type, + "power-supply", &p_supply, + "model", &model, + "vendor", &vendor, + "serial", &serial, + "technology", &tech, + "energy-full-design", &energy_full_design, + "energy-full", &energy_full, + "energy-empty", &energy_empty, + "voltage", &voltage, + "percentage", &percent, + NULL); + + if (type > XFPM_DEVICE_TYPE_PHONE) + type = XFPM_DEVICE_TYPE_UNKNOWN; + + if (type != XFPM_DEVICE_TYPE_UNKNOWN) { - type = g_value_get_uint (value); battery_type = xfpm_power_translate_device_type (type); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, @@ -366,55 +376,37 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec i++; } - value = g_hash_table_lookup (props, "PowerSupply"); - - if ( value ) - { - gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("PowerSupply"), - XFPM_DEVICE_INFO_VALUE, g_value_get_boolean (value) == TRUE ? _("True") : _("False"), - -1); - i++; - } + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + XFPM_DEVICE_INFO_NAME, _("PowerSupply"), + XFPM_DEVICE_INFO_VALUE, p_supply == TRUE ? _("True") : _("False"), + -1); + i++; if ( type != XFPM_DEVICE_TYPE_LINE_POWER ) { /*Model*/ - value = g_hash_table_lookup (props, "Model"); - - if ( value ) - { - cstr = g_value_get_string (value); - if ( cstr && strlen (cstr) > 0) - { - gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("Model"), - XFPM_DEVICE_INFO_VALUE, g_value_get_string (value), - -1); - i++; - } - } - - /*Technology*/ - value = g_hash_table_lookup (props, "Technology"); - - if ( value ) + if (model && strlen (model) > 0) { gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("Technology"), - XFPM_DEVICE_INFO_VALUE, xfpm_power_translate_technology (g_value_get_uint (value)), + gtk_list_store_set (list_store, &iter, + XFPM_DEVICE_INFO_NAME, _("Model"), + XFPM_DEVICE_INFO_VALUE, model, -1); i++; } - value = g_hash_table_lookup (props, "Percentage"); + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + XFPM_DEVICE_INFO_NAME, _("Technology"), + XFPM_DEVICE_INFO_VALUE, xfpm_power_translate_technology (tech), + -1); + i++; - if ( value ) + /*Percentage*/ + if (percent >= 0) { - str = g_strdup_printf("%d", (guint) g_value_get_double (value)); + str = g_strdup_printf("%d", (guint) percent); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, XFPM_DEVICE_INFO_NAME, _("Energy percent"), @@ -424,11 +416,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec g_free(str); } - /* TRANSLATORS: Unit here is What hour*/ - str = xfpm_info_get_energy_property (props, "EnergyFullDesign", _("Wh")); - - if ( str ) + if (energy_full_design > 0) { + /* TRANSLATORS: Unit here is Watt hour*/ + str = xfpm_info_get_energy_property (energy_full_design, _("Wh")); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, XFPM_DEVICE_INFO_NAME, _("Energy full design"), @@ -438,11 +429,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec g_free (str); } - /* TRANSLATORS: Unit here is What hour*/ - str = xfpm_info_get_energy_property (props, "EnergyFull", _("Wh")); - - if ( str ) + if (energy_full > 0) { + /* TRANSLATORS: Unit here is Watt hour*/ + str = xfpm_info_get_energy_property (energy_full, _("Wh")); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, XFPM_DEVICE_INFO_NAME, _("Energy full"), @@ -452,11 +442,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec g_free (str); } - /* TRANSLATORS: Unit here is What hour*/ - str = xfpm_info_get_energy_property (props, "EnergyEmpty", _("Wh")); - - if ( str ) + if (energy_empty > 0) { + /* TRANSLATORS: Unit here is Watt hour*/ + str = xfpm_info_get_energy_property (energy_empty, _("Wh")); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, XFPM_DEVICE_INFO_NAME, _("Energy empty"), @@ -466,10 +455,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec g_free (str); } - /* TRANSLATORS: Unit here is volt*/ - str = xfpm_info_get_energy_property (props, "Voltage", _("V")); - if ( str ) + if (voltage > 0) { + /* TRANSLATORS: Unit here is Volt*/ + str = xfpm_info_get_energy_property (voltage, _("V")); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, XFPM_DEVICE_INFO_NAME, _("Voltage"), @@ -478,52 +467,25 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec i++; g_free (str); } - - /*Percentage*/ - str = xfpm_info_get_energy_property (props, "Percentage", _("%")); - if ( str ) + + if (vendor && strlen (vendor) > 0) { gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("Percentage"), - XFPM_DEVICE_INFO_VALUE, str, + XFPM_DEVICE_INFO_NAME, _("Vendor"), + XFPM_DEVICE_INFO_VALUE, vendor, -1); i++; - g_free (str); } - /*Vendor*/ - value = g_hash_table_lookup (props, "Vendor"); - - if ( value ) + if (serial && strlen (serial) > 0) { - cstr = g_value_get_string (value); - if ( cstr && strlen (cstr) > 0) - { - gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("Vendor"), - XFPM_DEVICE_INFO_VALUE, g_value_get_string (value), - -1); - i++; - } - } - - /*Serial*/ - value = g_hash_table_lookup (props, "Serial"); - - if ( value ) - { - cstr = g_value_get_string (value); - if ( cstr && strlen (cstr) > 0) - { - gtk_list_store_append (list_store, &iter); - gtk_list_store_set (list_store, &iter, - XFPM_DEVICE_INFO_NAME, _("Serial"), - XFPM_DEVICE_INFO_VALUE, g_value_get_string (value), - -1); - i++; - } + gtk_list_store_append (list_store, &iter); + gtk_list_store_set (list_store, &iter, + XFPM_DEVICE_INFO_NAME, _("Serial"), + XFPM_DEVICE_INFO_VALUE, serial, + -1); + i++; } } @@ -534,29 +496,10 @@ xfpm_info_add_device_view (XfpmInfo *info, GHashTable *props, const gchar *objec } static void -xfpm_info_add_device (XfpmInfo *info, const gchar *object_path) +xfpm_info_add_device (XfpmInfo *info, UpDevice *device) { - DBusGProxy *proxy_prop; - GHashTable *props; - - proxy_prop = dbus_g_proxy_new_for_name (info->bus, - UPOWER_NAME, - object_path, - DBUS_INTERFACE_PROPERTIES); - - if ( !proxy_prop ) - { - g_warning ("Unable to create proxy for : %s", object_path); - return; - } - - props = xfpm_power_get_interface_properties (proxy_prop, UPOWER_IFACE_DEVICE); - - if ( props ) - { - xfpm_info_add_device_view (info, props, object_path); - g_hash_table_destroy (props); - } + const gchar *object_path = up_device_get_object_path(device); + xfpm_info_add_device_view (info, device, object_path); } static void @@ -564,22 +507,18 @@ xfpm_info_power_devices (XfpmInfo *info) { GPtrArray *array = NULL; guint i; - +#if !UP_CHECK_VERSION(0, 99, 0) + up_client_enumerate_devices_sync(info->upower, NULL, NULL); +#endif /*Check for upower/devkit power here*/ - - info->power_proxy = dbus_g_proxy_new_for_name (info->bus, - UPOWER_NAME, - UPOWER_PATH, - UPOWER_IFACE); - - array = xfpm_power_enumerate_devices (info->power_proxy); + array = up_client_get_devices(info->upower); if ( array ) { for ( i = 0; i < array->len; i++) { - const gchar *object_path = ( const gchar *) g_ptr_array_index (array, i); - xfpm_info_add_device (info, object_path); + UpDevice *device = g_ptr_array_index (array, i); + xfpm_info_add_device (info, device); } g_ptr_array_free (array, TRUE); } @@ -928,6 +867,7 @@ xfpm_info_new (void) info->power_proxy = NULL; info->wakeups_proxy = NULL; info->dialog = NULL; + info->upower = up_client_new (); return info; } diff --git a/src/xfpm-power.c b/src/xfpm-power.c index 618944a..35fbd12 100644 --- a/src/xfpm-power.c +++ b/src/xfpm-power.c @@ -28,6 +28,7 @@ #include <dbus/dbus-glib.h> #include <dbus/dbus-glib-lowlevel.h> +#include <upower.h> #include <libxfce4util/libxfce4util.h> #include <libxfce4ui/libxfce4ui.h> @@ -72,8 +73,7 @@ struct XfpmPowerPrivate { DBusGConnection *bus; - DBusGProxy *proxy; - DBusGProxy *proxy_prop; + UpClient *upower; GHashTable *hash; @@ -148,61 +148,28 @@ G_DEFINE_TYPE (XfpmPower, xfpm_power, G_TYPE_OBJECT) static void xfpm_power_check_polkit_auth (XfpmPower *power) { - power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit, - POLKIT_AUTH_SUSPEND); - - power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit, - POLKIT_AUTH_HIBERNATE); - -} -#endif - -static void -xfpm_power_check_pm (XfpmPower *power, GHashTable *props) -{ - GValue *value; - gboolean ret; - - value = g_hash_table_lookup (props, "CanSuspend"); - - if (value == NULL) + const char *suspend, *hibernate; + if (LOGIND_RUNNING()) { - g_warning ("No 'CanSuspend' property"); + suspend = POLKIT_AUTH_SUSPEND_LOGIND; + hibernate = POLKIT_AUTH_HIBERNATE_LOGIND; } - ret = g_value_get_boolean (value); - - if (ret != power->priv->can_suspend) - { - power->priv->can_suspend = ret; - } - - value = g_hash_table_lookup (props, "CanHibernate"); - - if (value == NULL) + else { - g_warning ("No 'CanHibernate' property"); + suspend = POLKIT_AUTH_SUSPEND_UPOWER; + hibernate = POLKIT_AUTH_HIBERNATE_UPOWER; } + power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit, + suspend); - ret = g_value_get_boolean (value); - - if (ret != power->priv->can_hibernate) - { - power->priv->can_hibernate = ret; - } + power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit, + hibernate); } +#endif static void -xfpm_power_check_power (XfpmPower *power, GHashTable *props) +xfpm_power_check_power (XfpmPower *power, gboolean on_battery) { - GValue *value; - gboolean on_battery; - - value = g_hash_table_lookup (props, "OnBattery"); - - if (G_LIKELY (value)) - { - on_battery = g_value_get_boolean (value); - if (on_battery != power->priv->on_battery ) { GList *list; @@ -218,42 +185,15 @@ xfpm_power_check_power (XfpmPower *power, GHashTable *props) NULL); } } - } - else - { - g_warning ("No 'OnBattery' property"); - } } static void -xfpm_power_check_lid (XfpmPower *power, GHashTable *props) +xfpm_power_check_lid (XfpmPower *power, gboolean present, gboolean closed) { - GValue *value; - - value = g_hash_table_lookup (props, "LidIsPresent"); - - if (value == NULL) - { - g_warning ("No 'LidIsPresent' property"); - return; - } - - power->priv->lid_is_present = g_value_get_boolean (value); + power->priv->lid_is_present = present; if (power->priv->lid_is_present) { - gboolean closed; - - value = g_hash_table_lookup (props, "LidIsClosed"); - - if (value == NULL) - { - g_warning ("No 'LidIsClosed' property"); - return; - } - - closed = g_value_get_boolean (value); - if (closed != power->priv->lid_is_closed ) { power->priv->lid_is_closed = closed; @@ -276,10 +216,15 @@ xfpm_power_check_lid (XfpmPower *power, GHashTable *props) static void xfpm_power_get_properties (XfpmPower *power) { - GHashTable *props; - - props = xfpm_power_get_interface_properties (power->priv->proxy_prop, UPOWER_IFACE); + gboolean on_battery; + gboolean lid_is_closed; + gboolean lid_is_present; + /* TODO: newer versions of upower don't have that => logind handles it */ +#if !UP_CHECK_VERSION(0, 99, 0) + power->priv->can_suspend = up_client_get_can_suspend(power->priv->upower); + power->priv->can_hibernate = up_client_get_can_hibernate(power->priv->upower); +#else if ( LOGIND_RUNNING () ) { g_object_get (G_OBJECT (power->priv->systemd), @@ -291,13 +236,17 @@ xfpm_power_get_properties (XfpmPower *power) } else { - xfpm_power_check_pm (power, props); + g_warning("Error: using upower >= 0.99.0 but logind is not running"); + g_warning(" suspend / hibernate will not work!"); } - - xfpm_power_check_lid (power, props); - xfpm_power_check_power (power, props); - - g_hash_table_destroy (props); +#endif + g_object_get (power->priv->upower, + "on-battery", &on_battery, + "lid-is-closed", &lid_is_closed, + "lid-is-present", &lid_is_present, + NULL); + xfpm_power_check_lid (power, lid_is_present, lid_is_closed); + xfpm_power_check_power (power, on_battery); } static void @@ -370,9 +319,19 @@ xfpm_power_sleep (XfpmPower *power, const gchar *sleep_time, gboolean force) } else { - dbus_g_proxy_call (power->priv->proxy, sleep_time, &error, - G_TYPE_INVALID, - G_TYPE_INVALID); +#if !UP_CHECK_VERSION(0, 99, 0) + if (!g_strcmp0 (sleep_time, "Hibernate")) + { + up_client_hibernate_sync(power->priv->upower, NULL, &error); + } + else + { + up_client_suspend_sync(power->priv->upower, NULL, &error); + } +#else + g_warning("Error: using upower >= 0.99.0 but logind is not running"); + g_warning(" suspend / hibernate will not work!"); +#endif } if ( error ) @@ -1028,26 +987,18 @@ xfpm_power_battery_charge_changed_cb (XfpmBattery *battery, XfpmPower *power) } static void -xfpm_power_add_device (XfpmPower *power, const gchar *object_path) +xfpm_power_add_device (UpDevice *device, XfpmPower *power) { - DBusGProxy *proxy_prop; guint device_type = XFPM_DEVICE_TYPE_UNKNOWN; - GValue value; + const gchar *object_path = up_device_get_object_path(device); - proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus, - UPOWER_NAME, - object_path, - DBUS_INTERFACE_PROPERTIES); - - if ( !proxy_prop ) - { - g_warning ("Unable to create proxy for : %s", object_path); - return; - } - - value = xfpm_power_get_interface_property (proxy_prop, UPOWER_IFACE_DEVICE, "Type"); + /* hack, this depends on XFPM_DEVICE_TYPE_* being in sync with UP_DEVICE_KIND_* */ + g_object_get (device, + "kind", &device_type, + NULL); - device_type = g_value_get_uint (&value); + if (device_type > XFPM_DEVICE_TYPE_PHONE) + device_type = XFPM_DEVICE_TYPE_UNKNOWN; XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, " device added"); @@ -1058,20 +1009,13 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path) device_type == XFPM_DEVICE_TYPE_PHONE) { GtkStatusIcon *battery; - DBusGProxy *proxy; XFPM_DEBUG_ENUM (device_type, XFPM_TYPE_DEVICE_TYPE, "Battery device detected at : %s", object_path); - proxy = dbus_g_proxy_new_for_name (power->priv->bus, - UPOWER_NAME, - object_path, - UPOWER_IFACE_DEVICE); battery = xfpm_battery_new (); gtk_status_icon_set_visible (battery, FALSE); xfpm_battery_monitor_device (XFPM_BATTERY (battery), - proxy, - proxy_prop, + object_path, device_type); - g_hash_table_insert (power->priv->hash, g_strdup (object_path), battery); g_signal_connect (battery, "popup-menu", @@ -1082,32 +1026,32 @@ xfpm_power_add_device (XfpmPower *power, const gchar *object_path) xfpm_power_refresh_adaptor_visible (power); } - else if ( device_type != XFPM_DEVICE_TYPE_LINE_POWER ) - { - g_warning ("Unable to monitor unknown power device with object_path : %s", object_path); - g_object_unref (proxy_prop); - } } static void xfpm_power_get_power_devices (XfpmPower *power) { +#if !UP_CHECK_VERSION(0, 99, 0) + /* the device-add callback is called for each device */ + up_client_enumerate_devices_sync(power->priv->upower, NULL, NULL); +#else GPtrArray *array = NULL; guint i; - array = xfpm_power_enumerate_devices (power->priv->proxy); + array = up_client_get_devices(power->priv->upower); if ( array ) { for ( i = 0; i < array->len; i++) { - const gchar *object_path = ( const gchar *) g_ptr_array_index (array, i); + UpDevice *device = g_ptr_array_index (array, i); + const gchar *object_path = up_device_get_object_path(device); XFPM_DEBUG ("Power device detected at : %s", object_path); - xfpm_power_add_device (power, object_path); + xfpm_power_add_device (device, power); } g_ptr_array_free (array, TRUE); } - +#endif } static void @@ -1124,23 +1068,36 @@ xfpm_power_inhibit_changed_cb (XfpmInhibit *inhibit, gboolean is_inhibit, XfpmPo } static void -xfpm_power_changed_cb (DBusGProxy *proxy, XfpmPower *power) +xfpm_power_changed_cb (UpClient *upower, +#if UP_CHECK_VERSION(0, 99, 0) + GParamSpec *pspec, +#endif + XfpmPower *power) { xfpm_power_get_properties (power); xfpm_power_refresh_adaptor_visible (power); } static void -xfpm_power_device_added_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power) +xfpm_power_device_added_cb (UpClient *upower, UpDevice *device, XfpmPower *power) { - xfpm_power_add_device (power, object_path); + xfpm_power_add_device (device, power); } +#if UP_CHECK_VERSION(0, 99, 0) +static void +xfpm_power_device_removed_cb (UpClient *upower, const gchar *object_path, XfpmPower *power) +{ + xfpm_power_remove_device (power, object_path); +} +#else static void -xfpm_power_device_removed_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power) +xfpm_power_device_removed_cb (UpClient *upower, UpDevice *device, XfpmPower *power) { + const gchar *object_path = up_device_get_object_path(device); xfpm_power_remove_device (power, object_path); } +#endif static void xfpm_power_device_changed_cb (DBusGProxy *proxy, const gchar *object_path, XfpmPower *power) @@ -1378,6 +1335,7 @@ xfpm_power_init (XfpmPower *power) power->priv->inhibit = xfpm_inhibit_new (); power->priv->notify = xfpm_notify_new (); power->priv->conf = xfpm_xfconf_new (); + power->priv->upower = up_client_new (); power->priv->systemd = NULL; power->priv->console = NULL; @@ -1407,44 +1365,19 @@ xfpm_power_init (XfpmPower *power) goto out; } - power->priv->proxy = dbus_g_proxy_new_for_name (power->priv->bus, - UPOWER_NAME, - UPOWER_PATH, - UPOWER_IFACE); - - - power->priv->proxy_prop = dbus_g_proxy_new_for_name (power->priv->bus, - UPOWER_NAME, - UPOWER_PATH, - DBUS_INTERFACE_PROPERTIES); - if (power->priv->proxy_prop == NULL) - { - g_critical ("Unable to create proxy for %s", UPOWER_NAME); - goto out; - } - + g_signal_connect (power->priv->upower, "device-added", G_CALLBACK (xfpm_power_device_added_cb), power); + g_signal_connect (power->priv->upower, "device-removed", G_CALLBACK (xfpm_power_device_removed_cb), power); +#if UP_CHECK_VERSION(0, 99, 0) + g_signal_connect (power->priv->upower, "notify", G_CALLBACK (xfpm_power_changed_cb), power); +#else + g_signal_connect (power->priv->upower, "changed", G_CALLBACK (xfpm_power_changed_cb), power); +#endif xfpm_power_get_power_devices (power); xfpm_power_get_properties (power); #ifdef ENABLE_POLKIT xfpm_power_check_polkit_auth (power); #endif - dbus_g_proxy_add_signal (power->priv->proxy, "Changed", G_TYPE_INVALID); - dbus_g_proxy_add_signal (power->priv->proxy, "DeviceAdded", G_TYPE_STRING, G_TYPE_INVALID); - dbus_g_proxy_add_signal (power->priv->proxy, "DeviceRemoved", G_TYPE_STRING, G_TYPE_INVALID); - dbus_g_proxy_add_signal (power->priv->proxy, "DeviceChanged", G_TYPE_STRING, G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (power->priv->proxy, "Changed", - G_CALLBACK (xfpm_power_changed_cb), power, NULL); - dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceRemoved", - G_CALLBACK (xfpm_power_device_removed_cb), power, NULL); - dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceAdded", - G_CALLBACK (xfpm_power_device_added_cb), power, NULL); - - dbus_g_proxy_connect_signal (power->priv->proxy, "DeviceChanged", - G_CALLBACK (xfpm_power_device_changed_cb), power, NULL); - - out: xfpm_power_refresh_adaptor_visible (power); @@ -1512,22 +1445,6 @@ xfpm_power_finalize (GObject *object) dbus_g_connection_unref (power->priv->bus); - if ( power->priv->proxy ) - { - dbus_g_proxy_disconnect_signal (power->priv->proxy, "Changed", - G_CALLBACK (xfpm_power_changed_cb), power); - dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceRemoved", - G_CALLBACK (xfpm_power_device_removed_cb), power); - dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceAdded", - G_CALLBACK (xfpm_power_device_added_cb), power); - dbus_g_proxy_disconnect_signal (power->priv->proxy, "DeviceChanged", - G_CALLBACK (xfpm_power_device_changed_cb), power); - g_object_unref (power->priv->proxy); - } - - if ( power->priv->proxy_prop ) - g_object_unref (power->priv->proxy_prop); - g_hash_table_destroy (power->priv->hash); #ifdef ENABLE_POLKIT -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits