[Goodies-commits] r6891 - in xfce4-power-manager/trunk: . libxfpm panel-plugins/brightness src
Ali Abdallah
aliov at xfce.org
Fri Mar 13 14:01:30 CET 2009
Author: aliov
Date: 2009-03-13 13:01:30 +0000 (Fri, 13 Mar 2009)
New Revision: 6891
Added:
xfce4-power-manager/trunk/libxfpm/hal-battery.c
xfce4-power-manager/trunk/libxfpm/hal-battery.h
xfce4-power-manager/trunk/libxfpm/hal-manager.c
xfce4-power-manager/trunk/libxfpm/hal-manager.h
xfce4-power-manager/trunk/libxfpm/hal-marshal.c
xfce4-power-manager/trunk/libxfpm/hal-marshal.h
xfce4-power-manager/trunk/libxfpm/hal-marshal.list
Removed:
xfce4-power-manager/trunk/libxfpm/hal-ctx.c
xfce4-power-manager/trunk/libxfpm/hal-ctx.h
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/configure.ac.in
xfce4-power-manager/trunk/libxfpm/Makefile.am
xfce4-power-manager/trunk/libxfpm/hal-device.c
xfce4-power-manager/trunk/libxfpm/hal-device.h
xfce4-power-manager/trunk/libxfpm/hal-enum.h
xfce4-power-manager/trunk/libxfpm/hal-power.c
xfce4-power-manager/trunk/libxfpm/hal-power.h
xfce4-power-manager/trunk/panel-plugins/brightness/Makefile.am
xfce4-power-manager/trunk/panel-plugins/brightness/main.c
xfce4-power-manager/trunk/src/Makefile.am
xfce4-power-manager/trunk/src/xfpm-adapter.c
xfce4-power-manager/trunk/src/xfpm-adapter.h
xfce4-power-manager/trunk/src/xfpm-battery-info.c
xfce4-power-manager/trunk/src/xfpm-battery-info.h
xfce4-power-manager/trunk/src/xfpm-battery.c
xfce4-power-manager/trunk/src/xfpm-battery.h
xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
xfce4-power-manager/trunk/src/xfpm-cpu.c
xfce4-power-manager/trunk/src/xfpm-lid-hal.c
xfce4-power-manager/trunk/src/xfpm-supply.c
xfce4-power-manager/trunk/src/xfpm-supply.h
Log:
Dropping the libhal dependency, just doing simple proxy calls to get informations from hald
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/ChangeLog 2009-03-13 13:01:30 UTC (rev 6891)
@@ -1,4 +1,7 @@
+2009-03-13 14:01 Ali aliov at xfce.org
+ * : Dropping the libhal dependency, just doing simple proxy calls to get informations from hald
+
2009-03-11 20:38 Ali aliov at xfce.org
* : Implement critical battery level settings+the option to disable lock screen when suspend/hibernate
Modified: xfce4-power-manager/trunk/configure.ac.in
===================================================================
--- xfce4-power-manager/trunk/configure.ac.in 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/configure.ac.in 2009-03-13 13:01:30 UTC (rev 6891)
@@ -56,7 +56,6 @@
m4_define([glib_minimum_version], [2.14.0])
m4_define([dbus_minimum_version], [0.60])
m4_define([dbus_glib_minimum_version], [0.70])
-m4_define([hal_minimum_version], [0.5.6])
m4_define([xfconf_minimum_version], [4.6.0])
m4_define([libxfcegui4_minimum_version],[4.6.0])
@@ -71,7 +70,6 @@
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [gtk_minimum_version])
XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [glib_minimum_version])
XDT_CHECK_PACKAGE([DBUS], [dbus-1], [dbus_minimum_version])
-XDT_CHECK_PACKAGE([HAL], [hal], [hal_minimum_version])
XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [dbus_glib_minimum_version])
XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0],[xfconf_minimum_version])
XDT_CHECK_PACKAGE([LIBXFCE4GUI], [libxfcegui4-1.0],[libxfcegui4_minimum_version])
Modified: xfce4-power-manager/trunk/libxfpm/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/libxfpm/Makefile.am 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/Makefile.am 2009-03-13 13:01:30 UTC (rev 6891)
@@ -4,15 +4,20 @@
libxfpmcommon.la
libxfpmhal_la_SOURCES = \
- hal-ctx.c \
- hal-ctx.h \
+ xfpm-string.c \
+ xfpm-string.h \
+ hal-marshal.c \
+ hal-mardhal.h \
+ hal-manager.c \
+ hal-manager.h \
hal-power.c \
hal-power.h \
hal-device.c \
- hal-device.h
+ hal-device.h \
+ hal-battery.c \
+ hal-battery.h
libxfpmhal_la_CFLAGS = \
- $(HAL_CFLAGS) \
$(GLIB_CFLAGS) \
$(DBUS_GLIB_CFLAGS)
@@ -41,4 +46,24 @@
$(GTK_CFLAGS) \
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
- $(LIBXFCE4UTIL_CFLAGS)
\ No newline at end of file
+ $(LIBXFCE4UTIL_CFLAGS)
+
+if MAINTAINER_MODE
+
+BUILT_SOURCES = \
+ hal-marshal.c \
+ hal-marshal.h
+
+hal-marshal.h: hal-marshal.list
+ glib-genmarshal --header --prefix="_hal_marshal" \
+ hal-marshal.list > tmp-marshal.h && \
+ cp tmp-marshal.h $(@F) && \
+ rm -f tmp-marshal.h tmp-marshal.h~
+
+hal-marshal.c: hal-marshal.h
+ glib-genmarshal --body --prefix="_hal_marshal" \
+ hal-marshal.list > tmp-marshal.c && \
+ cp tmp-marshal.c $(@F) && \
+ rm -f tmp-marshal.c tmp-marshal.c~
+
+endif
\ No newline at end of file
Added: xfce4-power-manager/trunk/libxfpm/hal-battery.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-battery.c (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-battery.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,582 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include "hal-battery.h"
+#include "hal-manager.h"
+#include "hal-enum.h"
+
+#include "xfpm-string.h"
+
+/* Init */
+static void hal_battery_class_init (HalBatteryClass *klass);
+static void hal_battery_init (HalBattery *device);
+static void hal_battery_finalize (GObject *object);
+
+static void hal_battery_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+#define HAL_BATTERY_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE((o), HAL_TYPE_BATTERY, HalBatteryPrivate))
+
+struct HalBatteryPrivate
+{
+ HalManager *manager;
+
+ /* Properties read-only */
+ HalDeviceType type;
+
+ gboolean is_present;
+ gboolean is_charging;
+ gboolean is_discharging;
+
+ gchar *unit;
+ gchar *technology;
+ gchar *vendor;
+ gchar *model;
+ guint percentage;
+
+ guint32 current_charge;
+ guint32 last_full;
+
+ guint32 reporting_design;
+ guint32 reporting_last_full;
+
+ guint time;
+
+};
+
+enum
+{
+ PROP_0,
+ PROP_TYPE,
+ PROP_IS_PRESENT,
+ PROP_IS_CHARGING,
+ PROP_IS_DISCHARGING,
+ PROP_CURRENT_CHARGE,
+ PROP_PERCENTAGE,
+ PROP_REPORTING_DESIGN,
+ PROP_LAST_FULL,
+ PROP_REPORTING_LAST_FULL,
+ PROP_TIME,
+ PROP_TECHNOLOGY,
+ PROP_VENDOR,
+ PROP_MODEL,
+ PROP_UNIT
+};
+
+enum
+{
+ BATTERY_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE(HalBattery, hal_battery, HAL_TYPE_DEVICE)
+
+static void
+hal_battery_class_init(HalBatteryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ object_class->get_property = hal_battery_get_property;
+ object_class->finalize = hal_battery_finalize;
+
+ signals[BATTERY_CHANGED] =
+ g_signal_new("battery-changed",
+ HAL_TYPE_BATTERY,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalBatteryClass, battery_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+
+ g_object_class_install_property(object_class,
+ PROP_IS_PRESENT,
+ g_param_spec_boolean("is-present",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_IS_CHARGING,
+ g_param_spec_boolean("is-charging",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_IS_DISCHARGING,
+ g_param_spec_boolean("is-discharging",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_CURRENT_CHARGE,
+ g_param_spec_uint("current-charge",
+ NULL, NULL,
+ 0,
+ G_MAXUINT32,
+ 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_LAST_FULL,
+ g_param_spec_uint("last-full",
+ NULL, NULL,
+ 0,
+ G_MAXUINT32,
+ 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_REPORTING_DESIGN,
+ g_param_spec_uint("reporting-design",
+ NULL, NULL,
+ 0,
+ G_MAXUINT32,
+ 0,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_REPORTING_LAST_FULL,
+ g_param_spec_uint("reporting-last-full",
+ NULL, NULL,
+ 0,
+ G_MAXUINT32,
+ 0,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_TIME,
+ g_param_spec_uint("time",
+ NULL, NULL,
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_TYPE,
+ g_param_spec_uint("type",
+ NULL, NULL,
+ 0,
+ HAL_DEVICE_TYPE_UNKNOWN,
+ HAL_DEVICE_TYPE_UNKNOWN,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_PERCENTAGE,
+ g_param_spec_uint("percentage",
+ NULL, NULL,
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property(object_class,
+ PROP_TECHNOLOGY,
+ g_param_spec_string("technology",
+ NULL, NULL,
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_VENDOR,
+ g_param_spec_string("vendor",
+ NULL, NULL,
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_MODEL,
+ g_param_spec_string("model",
+ NULL, NULL,
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property(object_class,
+ PROP_UNIT,
+ g_param_spec_string("unit",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_type_class_add_private(klass,sizeof(HalBatteryPrivate));
+}
+
+static void
+hal_battery_init (HalBattery *battery)
+{
+
+ battery->priv = HAL_BATTERY_GET_PRIVATE(battery);
+
+ battery->priv->manager = hal_manager_new ();
+
+ battery->priv->is_present = FALSE;
+ battery->priv->is_charging = FALSE;
+ battery->priv->is_discharging = FALSE;
+
+ battery->priv->unit = NULL;
+ battery->priv->vendor = NULL;
+ battery->priv->technology = NULL;
+ battery->priv->model = NULL;
+ battery->priv->type = HAL_DEVICE_TYPE_UNKNOWN;
+
+ battery->priv->percentage = 0;
+ battery->priv->current_charge = 0;
+ battery->priv->last_full = 0;
+ battery->priv->time = 0;
+ battery->priv->reporting_design = 0;
+ battery->priv->reporting_last_full = 0;
+}
+
+static void hal_battery_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ HalBattery *battery;
+ battery = HAL_BATTERY(object);
+
+ switch (prop_id)
+ {
+ case PROP_TYPE:
+ g_value_set_uint (value, battery->priv->type);
+ break;
+ case PROP_IS_PRESENT:
+ g_value_set_boolean (value, battery->priv->is_present);
+ break;
+ case PROP_IS_CHARGING:
+ g_value_set_boolean (value, battery->priv->is_charging);
+ break;
+ case PROP_IS_DISCHARGING:
+ g_value_set_boolean (value, battery->priv->is_discharging);
+ break;
+ case PROP_UNIT:
+ g_value_set_string (value, battery->priv->unit);
+ break;
+ case PROP_TECHNOLOGY:
+ g_value_set_string (value, battery->priv->technology);
+ break;
+ case PROP_VENDOR:
+ g_value_set_string (value, battery->priv->vendor);
+ break;
+ case PROP_MODEL:
+ g_value_set_string (value, battery->priv->model);
+ break;
+ case PROP_PERCENTAGE:
+ g_value_set_uint (value, battery->priv->percentage);
+ break;
+ case PROP_CURRENT_CHARGE:
+ g_value_set_uint (value, battery->priv->current_charge);
+ break;
+ case PROP_LAST_FULL:
+ g_value_set_uint (value, battery->priv->last_full);
+ break;
+ case PROP_REPORTING_DESIGN:
+ g_value_set_uint (value, battery->priv->reporting_design);
+ break;
+ case PROP_REPORTING_LAST_FULL:
+ g_value_set_uint (value, battery->priv->reporting_last_full);
+ break;
+ case PROP_TIME:
+ g_value_set_uint (value, battery->priv->time);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+ break;
+ }
+}
+
+static void
+hal_battery_finalize(GObject *object)
+{
+ HalBattery *battery;
+
+ battery = HAL_BATTERY(object);
+
+ if ( battery->priv->manager )
+ g_object_unref(battery->priv->manager);
+
+ if ( battery->priv->technology )
+ g_free (battery->priv->technology);
+
+ if ( battery->priv->vendor )
+ g_free (battery->priv->vendor);
+
+ if ( battery->priv->model )
+ g_free (battery->priv->model);
+
+ if ( battery->priv->unit )
+ g_free (battery->priv->unit);
+
+ G_OBJECT_CLASS(hal_battery_parent_class)->finalize(object);
+}
+
+static HalDeviceType
+hal_battery_type_enum_from_string(const gchar *string)
+{
+ if ( xfpm_strequal (string, "primary") )
+ {
+ return HAL_DEVICE_TYPE_PRIMARY;
+ }
+ else if ( xfpm_strequal (string, "ups") )
+ {
+ return HAL_DEVICE_TYPE_UPS;
+ }
+ else if ( xfpm_strequal (string, "mouse") )
+ {
+ return HAL_DEVICE_TYPE_MOUSE;
+ }
+ else if ( xfpm_strequal (string, "keyboard") )
+ {
+ return HAL_DEVICE_TYPE_KEYBOARD;
+ }
+ else if ( xfpm_strequal (string, "camera") )
+ {
+ return HAL_DEVICE_TYPE_CAMERA;
+ }
+ else if ( xfpm_strequal (string, "keyboard_mouse") )
+ {
+ return HAL_DEVICE_TYPE_KEYBOARD_MOUSE;
+ }
+
+ return HAL_DEVICE_TYPE_UNKNOWN;
+}
+
+static HalDeviceType
+hal_battery_get_device_type (HalBattery *battery)
+{
+ gchar *udi = NULL;
+ gchar *type = NULL;
+ HalDeviceType type_enum = HAL_DEVICE_TYPE_UNKNOWN;
+
+ g_object_get (G_OBJECT(battery), "udi", &udi, NULL);
+
+ g_return_val_if_fail (udi != NULL, HAL_DEVICE_TYPE_UNKNOWN);
+
+ type = hal_manager_get_device_property_string (battery->priv->manager, udi, "battery.type");
+
+ if ( type )
+ {
+ type_enum = hal_battery_type_enum_from_string(type);
+ g_free(type);
+ }
+
+ g_free (udi);
+ return type_enum;
+}
+
+static void
+hal_battery_refresh_all (HalBattery *battery)
+{
+ gchar *udi = NULL;
+
+ g_object_get (G_OBJECT(battery), "udi", &udi, NULL);
+
+ g_return_if_fail (udi != NULL);
+
+ battery->priv->is_present =
+ hal_manager_get_device_property_bool(battery->priv->manager, udi, "battery.present");
+
+ battery->priv->is_charging =
+ hal_manager_get_device_property_bool(battery->priv->manager, udi, "battery.rechargeable.is_charging");
+
+ battery->priv->is_discharging =
+ hal_manager_get_device_property_bool(battery->priv->manager, udi, "battery.rechargeable.is_discharging");
+
+ battery->priv->current_charge =
+ hal_manager_get_device_property_int(battery->priv->manager, udi, "battery.charge_level.current");
+
+ battery->priv->last_full =
+ hal_manager_get_device_property_int(battery->priv->manager, udi, "battery.charge_level.last_full");
+
+ if ( hal_manager_device_has_key (battery->priv->manager, udi, "battery.remaining_time") )
+ battery->priv->time =
+ hal_manager_get_device_property_int(battery->priv->manager, udi, "battery.remaining_time");
+ else
+ battery->priv->time = 0;
+
+ //FIXME: calculate the percentage if it is not found on HAL
+ if ( hal_manager_device_has_key(battery->priv->manager, udi, "battery.charge_level.percentage") )
+ battery->priv->percentage =
+ hal_manager_get_device_property_int(battery->priv->manager, udi, "battery.charge_level.percentage");
+ else battery->priv->percentage = 0;
+
+ if ( hal_manager_device_has_key(battery->priv->manager, udi, "battery.reporting.last_full") )
+ battery->priv->reporting_last_full =
+ hal_manager_get_device_property_int(battery->priv->manager, udi, "battery.reporting.last_full");
+
+}
+
+static const gchar *
+_translate_technology (const gchar *tech)
+{
+ if ( xfpm_strequal (tech, "lithium-ion") )
+ {
+ return _("Lithium ion");
+ }
+ else if ( xfpm_strequal (tech, "lead-acid") )
+ {
+ return _("Lead acid");
+ }
+ else if ( xfpm_strequal (tech, "lithium-polymer") )
+ {
+ return _("Lithium polymer");
+ }
+ else if ( xfpm_strequal (tech, "nickel-metal-hydride") )
+ {
+ return _("Nickel metal hydride");
+ }
+
+ return _("Unknown");
+}
+
+static const gchar *
+_translate_unit (const gchar *unit)
+{
+ if ( xfpm_strequal (unit, "mWh") )
+ {
+ return _("mWh");
+ }
+ else if ( xfpm_strequal (unit, "mAh") )
+ {
+ return _("mAh");
+ }
+
+ return _("Unknown unit");
+}
+
+static void
+hal_battery_get_battery_info (HalBattery *battery)
+{
+ gchar *udi = NULL;
+ g_object_get (G_OBJECT(battery), "udi", &udi, NULL);
+
+ g_return_if_fail (udi != NULL);
+
+ if ( hal_manager_device_has_key (battery->priv->manager, udi, "battery.technology") )
+ {
+ gchar *tech = hal_manager_get_device_property_string (battery->priv->manager, udi, "battery.technology");
+ if ( tech )
+ {
+ battery->priv->technology = g_strdup (_translate_technology (tech));
+ g_free (tech);
+ }
+ }
+
+ if ( hal_manager_device_has_key (battery->priv->manager, udi, "battery.vendor") )
+ {
+ gchar *vendor = hal_manager_get_device_property_string (battery->priv->manager, udi, "battery.vendor");
+ if ( vendor )
+ {
+ battery->priv->vendor = g_strdup ( vendor);
+ g_free (vendor);
+ }
+ }
+
+ if ( hal_manager_device_has_key (battery->priv->manager, udi, "battery.model") )
+ {
+ gchar *model = hal_manager_get_device_property_string (battery->priv->manager, udi, "battery.model");
+ if ( model )
+ {
+ battery->priv->model = g_strdup (model);
+ g_free (model);
+ }
+ }
+
+ battery->priv->reporting_design = hal_manager_get_device_property_int (battery->priv->manager,
+ udi,
+ "battery.reporting.design");
+
+ if ( hal_manager_device_has_key (battery->priv->manager, udi, "battery.reporting.unit") )
+ {
+ gchar *unit = hal_manager_get_device_property_string (battery->priv->manager, udi, "battery.reporting.unit");
+
+ if ( unit )
+ {
+ battery->priv->unit = g_strdup(_translate_unit(unit));
+ g_free(unit);
+ }
+ }
+}
+
+static void
+hal_battery_battery_changed_cb (HalBattery *battery, const gchar *key)
+{
+ if ( xfpm_strequal (key, "battery.present") ||
+ xfpm_strequal (key, "battery.rechargeable.is_charging") ||
+ xfpm_strequal (key, "battery.rechargeable.is_discharging") ||
+ xfpm_strequal (key, "battery.charge_level.current") ||
+ xfpm_strequal (key, "battery.remaining_time") ||
+ xfpm_strequal (key, "battery.charge_level.percentage") )
+ {
+ hal_battery_refresh_all (battery);
+ g_signal_emit (G_OBJECT (battery), signals[BATTERY_CHANGED], 0);
+ }
+
+}
+
+
+static void
+hal_battery_property_modified_cb(HalBattery *battery,
+ const gchar *udi,
+ const gchar *key,
+ gboolean is_removed,
+ gboolean is_added,
+ gpointer data)
+{
+ hal_battery_battery_changed_cb (battery, key);
+}
+
+HalBattery *
+hal_battery_new (const gchar *udi)
+{
+ HalBattery *battery = NULL;
+
+ battery = g_object_new (HAL_TYPE_BATTERY, "udi", udi, NULL);
+
+ battery->priv->type = hal_battery_get_device_type (battery);
+
+ hal_battery_refresh_all (battery);
+ hal_battery_get_battery_info (battery);
+
+ hal_device_watch (HAL_DEVICE(battery));
+ g_signal_connect (G_OBJECT(battery), "device-changed",
+ G_CALLBACK(hal_battery_property_modified_cb), battery);
+ return battery;
+}
Added: xfce4-power-manager/trunk/libxfpm/hal-battery.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-battery.h (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-battery.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,57 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __HAL_BATTERY_H
+#define __HAL_BATTERY_H
+
+#include <glib-object.h>
+
+#include "hal-device.h"
+#include "hal-enum.h"
+
+G_BEGIN_DECLS
+
+#define HAL_TYPE_BATTERY (hal_battery_get_type () )
+#define HAL_BATTERY(o) (G_TYPE_CHECK_INSTANCE_CAST((o), HAL_TYPE_BATTERY, HalBattery))
+#define HAL_IS_BATTERY(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), HAL_TYPE_BATTERY))
+
+typedef struct HalBatteryPrivate HalBatteryPrivate;
+
+typedef struct
+{
+ HalDevice parent;
+ HalBatteryPrivate *priv;
+
+} HalBattery;
+
+typedef struct
+{
+ HalDeviceClass parent_class;
+
+ void (*battery_changed) (HalBattery *device);
+
+} HalBatteryClass;
+
+GType hal_battery_get_type (void) G_GNUC_CONST;
+HalBattery *hal_battery_new (const gchar *udi);
+
+G_END_DECLS
+
+#endif /* __HAL_BATTERY_H */
Modified: xfce4-power-manager/trunk/libxfpm/hal-device.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/hal-device.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -23,32 +23,24 @@
#endif
#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STRING_H
#include <string.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
+#include <dbus/dbus-glib.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-
#include "hal-device.h"
-#include "hal-ctx.h"
-#include "xfpm-string.h"
-#include "hal-enum.h"
+#include "hal-marshal.h"
/* Init */
static void hal_device_class_init (HalDeviceClass *klass);
static void hal_device_init (HalDevice *device);
static void hal_device_finalize (GObject *object);
+static void hal_device_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
static void hal_device_get_property(GObject *object,
guint prop_id,
GValue *value,
@@ -59,50 +51,17 @@
struct HalDevicePrivate
{
- HalCtx *ctx;
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+ gchar *udi;
- /* Properties read-only */
- HalDeviceType type;
-
- gboolean is_present;
- gboolean is_charging;
- gboolean is_discharging;
-
- gchar *unit;
- gchar *technology;
- gchar *udi;
- gchar *vendor;
- gchar *model;
- guint percentage;
-
- guint32 current_charge;
- guint32 last_full;
-
- guint32 reporting_design;
- guint32 reporting_last_full;
-
- guint time;
-
+ gboolean watch_added;
};
enum
{
PROP_0,
- PROP_TYPE,
- PROP_IS_PRESENT,
- PROP_IS_CHARGING,
- PROP_IS_DISCHARGING,
- PROP_UDI,
- PROP_CURRENT_CHARGE,
- PROP_PERCENTAGE,
- PROP_REPORTING_DESIGN,
- PROP_LAST_FULL,
- PROP_REPORTING_LAST_FULL,
- PROP_TIME,
- PROP_TECHNOLOGY,
- PROP_VENDOR,
- PROP_MODEL,
- PROP_UNIT
+ PROP_UDI
};
enum
@@ -119,157 +78,51 @@
hal_device_class_init(HalDeviceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
-
+
+ object_class->set_property = hal_device_set_property;
object_class->get_property = hal_device_get_property;
- object_class->finalize = hal_device_finalize;
-
- signals[DEVICE_CHANGED] =
- g_signal_new("device-changed",
- HAL_TYPE_DEVICE,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(HalDeviceClass, device_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0, G_TYPE_NONE);
+ signals[DEVICE_CHANGED] =
+ g_signal_new("device-changed",
+ HAL_TYPE_DEVICE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalDeviceClass, device_changed),
+ NULL, NULL,
+ _hal_marshal_VOID__STRING_STRING_BOOLEAN_BOOLEAN,
+ G_TYPE_NONE, 4,
+ G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+
g_object_class_install_property(object_class,
- PROP_IS_PRESENT,
- g_param_spec_boolean("is-present",
- NULL, NULL,
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
- PROP_IS_CHARGING,
- g_param_spec_boolean("is-charging",
- NULL, NULL,
- FALSE,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
- PROP_IS_DISCHARGING,
- g_param_spec_boolean("is-discharging",
- NULL, NULL,
- FALSE,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_CURRENT_CHARGE,
- g_param_spec_uint("current-charge",
- NULL, NULL,
- 0,
- G_MAXUINT32,
- 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
- PROP_LAST_FULL,
- g_param_spec_uint("last-full",
- NULL, NULL,
- 0,
- G_MAXUINT32,
- 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
- PROP_REPORTING_DESIGN,
- g_param_spec_uint("reporting-design",
- NULL, NULL,
- 0,
- G_MAXUINT32,
- 0,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_REPORTING_LAST_FULL,
- g_param_spec_uint("reporting-last-full",
- NULL, NULL,
- 0,
- G_MAXUINT32,
- 0,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_TIME,
- g_param_spec_uint("time",
- NULL, NULL,
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_TYPE,
- g_param_spec_uint("type",
- NULL, NULL,
- 0,
- HAL_DEVICE_TYPE_UNKNOWN,
- HAL_DEVICE_TYPE_UNKNOWN,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_PERCENTAGE,
- g_param_spec_uint("percentage",
- NULL, NULL,
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
PROP_UDI,
g_param_spec_string("udi",
NULL, NULL,
NULL,
- G_PARAM_READABLE));
-
- g_object_class_install_property(object_class,
- PROP_TECHNOLOGY,
- g_param_spec_string("technology",
- NULL, NULL,
- NULL,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_VENDOR,
- g_param_spec_string("vendor",
- NULL, NULL,
- NULL,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_MODEL,
- g_param_spec_string("model",
- NULL, NULL,
- NULL,
- G_PARAM_READABLE));
- g_object_class_install_property(object_class,
- PROP_UNIT,
- g_param_spec_string("unit",
- NULL, NULL,
- FALSE,
- G_PARAM_READABLE));
-
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_WRITABLE |
+ G_PARAM_READABLE));
+ object_class->finalize = hal_device_finalize;
+
g_type_class_add_private(klass,sizeof(HalDevicePrivate));
}
-static void
-hal_device_init(HalDevice *device)
+static void hal_device_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- device->priv = HAL_DEVICE_GET_PRIVATE(device);
+ HalDevice *device = (HalDevice *) object;
- device->priv->ctx = hal_ctx_new();
+ switch (prop_id )
+ {
+ case PROP_UDI:
+ device->priv->udi = g_strdup(g_value_get_string (value) );
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
- device->priv->is_present = FALSE;
- device->priv->is_charging = FALSE;
- device->priv->is_discharging = FALSE;
-
- device->priv->unit = NULL;
- device->priv->vendor = NULL;
- device->priv->technology = NULL;
- device->priv->udi = NULL;
- device->priv->model = NULL;
- device->priv->type = HAL_DEVICE_TYPE_UNKNOWN;
-
- device->priv->percentage = 0;
- device->priv->current_charge = 0;
- device->priv->last_full = 0;
- device->priv->time = 0;
- device->priv->reporting_design = 0;
- device->priv->reporting_last_full = 0;
}
static void hal_device_get_property(GObject *object,
@@ -277,344 +130,144 @@
GValue *value,
GParamSpec *pspec)
{
- HalDevice *device;
- device = HAL_DEVICE(object);
-
- switch (prop_id)
+ HalDevice *device = (HalDevice *) object;
+
+ switch (prop_id )
{
- case PROP_TYPE:
- g_value_set_uint (value, device->priv->type);
- break;
- case PROP_IS_PRESENT:
- g_value_set_boolean (value, device->priv->is_present);
- break;
- case PROP_IS_CHARGING:
- g_value_set_boolean (value, device->priv->is_charging);
- break;
- case PROP_IS_DISCHARGING:
- g_value_set_boolean (value, device->priv->is_discharging);
- break;
- case PROP_UNIT:
- g_value_set_string (value, device->priv->unit);
- break;
- case PROP_UDI:
- g_value_set_string (value, device->priv->udi);
- break;
- case PROP_TECHNOLOGY:
- g_value_set_string (value, device->priv->technology);
- break;
- case PROP_VENDOR:
- g_value_set_string (value, device->priv->vendor);
- break;
- case PROP_MODEL:
- g_value_set_string (value, device->priv->model);
- break;
- case PROP_PERCENTAGE:
- g_value_set_uint (value, device->priv->percentage);
- break;
- case PROP_CURRENT_CHARGE:
- g_value_set_uint (value, device->priv->current_charge);
- break;
- case PROP_LAST_FULL:
- g_value_set_uint (value, device->priv->last_full);
- break;
- case PROP_REPORTING_DESIGN:
- g_value_set_uint (value, device->priv->reporting_design);
- break;
- case PROP_REPORTING_LAST_FULL:
- g_value_set_uint (value, device->priv->reporting_last_full);
- break;
- case PROP_TIME:
- g_value_set_uint (value, device->priv->time);
- break;
+ case PROP_UDI:
+ g_value_set_string (value, device->priv->udi);
+ break;
default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
- break;
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
}
+
}
static void
-hal_device_finalize(GObject *object)
+hal_device_property_modified_cb (DBusGProxy *proxy,
+ gint type,
+ GPtrArray *properties,
+ HalDevice *device)
{
- HalDevice *device;
-
- device = HAL_DEVICE(object);
+ GValueArray *array;
+ const gchar *udi;
+ const gchar *key;
+ gboolean is_added;
+ gboolean is_removed;
+ int i;
- if ( device->priv->ctx )
- g_object_unref(device->priv->ctx);
-
- if ( device->priv->udi)
- g_free(device->priv->udi);
-
- if ( device->priv->technology )
- g_free (device->priv->technology);
-
- if ( device->priv->vendor )
- g_free (device->priv->vendor);
-
- if ( device->priv->model )
- g_free (device->priv->model);
-
- if ( device->priv->unit )
- g_free (device->priv->unit);
-
- G_OBJECT_CLASS(hal_device_parent_class)->finalize(object);
-}
-
-static HalDeviceType
-hal_device_type_enum_from_string(const gchar *string)
-{
- if ( xfpm_strequal (string, "primary") )
- {
- return HAL_DEVICE_TYPE_PRIMARY;
- }
- else if ( xfpm_strequal (string, "ups") )
- {
- return HAL_DEVICE_TYPE_UPS;
- }
- else if ( xfpm_strequal (string, "mouse") )
- {
- return HAL_DEVICE_TYPE_MOUSE;
- }
- else if ( xfpm_strequal (string, "keyboard") )
- {
- return HAL_DEVICE_TYPE_KEYBOARD;
- }
- else if ( xfpm_strequal (string, "camera") )
- {
- return HAL_DEVICE_TYPE_CAMERA;
- }
- else if ( xfpm_strequal (string, "keyboard_mouse") )
- {
- return HAL_DEVICE_TYPE_KEYBOARD_MOUSE;
- }
+ udi = dbus_g_proxy_get_path (proxy);
- return HAL_DEVICE_TYPE_UNKNOWN;
-}
-
-static HalDeviceType
-hal_device_get_device_type(HalDevice *device)
-{
- if ( hal_ctx_device_has_capability(device->priv->ctx, device->priv->udi, "battery") )
+ for ( i = 0; i < properties->len; i++ )
{
- gchar *type = hal_ctx_get_property_string(device->priv->ctx, device->priv->udi, "battery.type");
- if ( type )
- {
- HalDeviceType type_enum = hal_device_type_enum_from_string(type);
- g_free(type);
- return type_enum;
- }
- else
- goto out;
+ array = g_ptr_array_index (properties, i);
+ if ( array->n_values != 3 )
+ continue;
+
+ key = g_value_get_string (g_value_array_get_nth (array, 0));
+ is_removed = g_value_get_boolean (g_value_array_get_nth (array, 1));
+ is_added = g_value_get_boolean (g_value_array_get_nth (array, 2));
+ g_signal_emit (G_OBJECT(device), signals[DEVICE_CHANGED], 0, udi, key, is_added, is_removed);
}
- else if ( hal_ctx_device_has_capability(device->priv->ctx, device->priv->udi, "ac_adapter") )
- {
- return HAL_DEVICE_TYPE_ADAPTER;
- }
-
-out:
- return HAL_DEVICE_TYPE_UNKNOWN;
}
-
+
static void
-hal_device_refresh_all_adapter (HalDevice *device)
+hal_device_add_watch (HalDevice *device)
{
- device->priv->is_present =
- hal_ctx_get_property_bool(device->priv->ctx, device->priv->udi, "ac_adapter.present");
-
-}
+ GType array_gtype, gtype;
+ device->priv->proxy = dbus_g_proxy_new_for_name (device->priv->bus,
+ "org.freedesktop.Hal",
+ device->priv->udi,
+ "org.freedesktop.Hal.Device");
-static void
-hal_device_refresh_all_battery (HalDevice *device)
-{
- device->priv->is_present =
- hal_ctx_get_property_bool(device->priv->ctx, device->priv->udi, "battery.present");
-
- device->priv->is_charging =
- hal_ctx_get_property_bool(device->priv->ctx, device->priv->udi, "battery.rechargeable.is_charging");
-
- device->priv->is_discharging =
- hal_ctx_get_property_bool(device->priv->ctx, device->priv->udi, "battery.rechargeable.is_discharging");
-
- device->priv->current_charge =
- hal_ctx_get_property_int(device->priv->ctx, device->priv->udi, "battery.charge_level.current");
-
- device->priv->last_full =
- hal_ctx_get_property_int(device->priv->ctx, device->priv->udi, "battery.charge_level.last_full");
-
- if ( hal_ctx_device_has_key(device->priv->ctx, device->priv->udi, "battery.remaining_time") )
- device->priv->time =
- hal_ctx_get_property_int(device->priv->ctx, device->priv->udi, "battery.remaining_time");
- else
- device->priv->time = 0;
-
- //FIXME: calculate the percentage if it is not found on HAL
- if ( hal_ctx_device_has_key(device->priv->ctx, device->priv->udi, "battery.charge_level.percentage") )
- device->priv->percentage =
- hal_ctx_get_property_int(device->priv->ctx, device->priv->udi, "battery.charge_level.percentage");
- else device->priv->percentage = 0;
-
- if ( hal_ctx_device_has_key(device->priv->ctx, device->priv->udi, "battery.reporting.last_full") )
- device->priv->reporting_last_full =
- hal_ctx_get_property_int(device->priv->ctx, device->priv->udi, "battery.reporting.last_full");
-
-}
+ g_return_if_fail ( DBUS_IS_G_PROXY (device->priv->proxy) );
-static const gchar *
-_translate_technology (const gchar *tech)
-{
- if ( xfpm_strequal (tech, "lithium-ion") )
- {
- return _("Lithium ion");
- }
- else if ( xfpm_strequal (tech, "lead-acid") )
- {
- return _("Lead acid");
- }
- else if ( xfpm_strequal (tech, "lithium-polymer") )
- {
- return _("Lithium polymer");
- }
- else if ( xfpm_strequal (tech, "nickel-metal-hydride") )
- {
- return _("Nickel metal hydride");
- }
-
- return _("Unknown");
-}
+ gtype = dbus_g_type_get_struct ("GValueArray",
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_INVALID);
-static const gchar *
-_translate_unit (const gchar *unit)
-{
- if ( xfpm_strequal (unit, "mWh") )
- {
- return _("mWh");
- }
- else if ( xfpm_strequal (unit, "mAh") )
- {
- return _("mAh");
- }
-
- return _("Unknown unit");
-}
+ array_gtype = dbus_g_type_get_collection ("GPtrArray", gtype);
-static void
-hal_device_get_battery_info (HalDevice *device)
-{
- if ( hal_ctx_device_has_key (device->priv->ctx, device->priv->udi, "battery.technology") )
- {
- gchar *tech = hal_ctx_get_property_string (device->priv->ctx, device->priv->udi, "battery.technology");
- if ( tech )
- {
- device->priv->technology = g_strdup (_translate_technology (tech));
- g_free (tech);
- }
- }
+ dbus_g_object_register_marshaller (_hal_marshal_VOID__INT_BOXED,
+ G_TYPE_NONE, G_TYPE_INT,
+ array_gtype, G_TYPE_INVALID);
- if ( hal_ctx_device_has_key (device->priv->ctx, device->priv->udi, "battery.vendor") )
- {
- gchar *vendor = hal_ctx_get_property_string (device->priv->ctx, device->priv->udi, "battery.vendor");
- if ( vendor )
- {
- device->priv->vendor = g_strdup ( vendor);
- g_free (vendor);
- }
- }
+
+ dbus_g_proxy_add_signal (device->priv->proxy,
+ "PropertyModified",
+ G_TYPE_INT,
+ array_gtype,
+ G_TYPE_INVALID);
- if ( hal_ctx_device_has_key (device->priv->ctx, device->priv->udi, "battery.model") )
- {
- gchar *model = hal_ctx_get_property_string (device->priv->ctx, device->priv->udi, "battery.model");
- if ( model )
- {
- device->priv->model = g_strdup (model);
- g_free (model);
- }
- }
+ dbus_g_proxy_connect_signal (device->priv->proxy, "PropertyModified",
+ G_CALLBACK(hal_device_property_modified_cb), device, NULL);
- device->priv->reporting_design = hal_ctx_get_property_int (device->priv->ctx,
- device->priv->udi,
- "battery.reporting.design");
-
- if ( hal_ctx_device_has_key (device->priv->ctx, device->priv->udi, "battery.reporting.unit") )
- {
- gchar *unit = hal_ctx_get_property_string (device->priv->ctx, device->priv->udi, "battery.reporting.unit");
-
- if ( unit )
- {
- device->priv->unit = g_strdup(_translate_unit(unit));
- g_free(unit);
- }
- }
+ device->priv->watch_added = TRUE;
}
static void
-hal_device_adapter_changed_cb (HalDevice *device, const gchar *key)
+hal_device_init(HalDevice *device)
{
- if ( xfpm_strequal (key, "ac_adapter.present") )
- {
- hal_device_refresh_all_adapter(device);
- g_signal_emit(G_OBJECT(device), signals[DEVICE_CHANGED], 0);
- }
+ device->priv = HAL_DEVICE_GET_PRIVATE(device);
-}
-
-static void
-hal_device_battery_changed_cb (HalDevice *device, const gchar *key)
-{
- if ( xfpm_strequal (key, "battery.present") ||
- xfpm_strequal (key, "battery.rechargeable.is_charging") ||
- xfpm_strequal (key, "battery.rechargeable.is_discharging") ||
- xfpm_strequal (key, "battery.charge_level.current") ||
- xfpm_strequal (key, "battery.remaining_time") ||
- xfpm_strequal (key, "battery.charge_level.percentage") )
- {
- hal_device_refresh_all_battery(device);
- g_signal_emit(G_OBJECT(device), signals[DEVICE_CHANGED], 0);
- }
+ device->priv->bus = NULL;
+ device->priv->proxy = NULL;
+ device->priv->udi = NULL;
+ device->priv->watch_added = FALSE;
}
-
static void
-hal_device_property_modified(LibHalContext *ctx,
- const gchar *udi,
- const gchar *key,
- dbus_bool_t is_removed,
- dbus_bool_t is_added)
+hal_device_finalize(GObject *object)
{
- HalDevice *device = libhal_ctx_get_user_data(ctx);
+ HalDevice *device;
+
+ device = HAL_DEVICE(object);
- if ( device->priv->type == HAL_DEVICE_TYPE_ADAPTER )
- hal_device_adapter_changed_cb (device, key);
- else
- hal_device_battery_changed_cb (device, key);
+ if ( device->priv->udi )
+ g_free (device->priv->udi);
+
+ if ( device->priv->bus )
+ dbus_g_connection_unref (device->priv->bus);
+
+ if ( device->priv->watch_added )
+ dbus_g_proxy_disconnect_signal (device->priv->proxy, "PropertyModified",
+ G_CALLBACK(hal_device_property_modified_cb), device);
+
+ if ( device->priv->proxy )
+ g_object_unref (device->priv->proxy);
+
+ G_OBJECT_CLASS(hal_device_parent_class)->finalize(object);
}
HalDevice *
-hal_device_new(const gchar *udi)
+hal_device_new (const gchar *udi)
{
HalDevice *device = NULL;
- device = g_object_new(HAL_TYPE_DEVICE,NULL);
+ device = g_object_new (HAL_TYPE_DEVICE, "udi", udi, NULL);
+ return device;
+}
+
+gboolean
+hal_device_watch (HalDevice *device)
+{
+ GError *error = NULL;
+
+ device->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- device->priv->udi = g_strdup(udi);
-
- if ( !hal_ctx_connect(device->priv->ctx)) goto out;
-
- device->priv->type = hal_device_get_device_type(device);
-
- if ( device->priv->type == HAL_DEVICE_TYPE_ADAPTER )
- hal_device_refresh_all_adapter(device);
- else
+ if ( error )
{
- hal_device_refresh_all_battery (device);
- hal_device_get_battery_info (device);
+ g_critical ("Unable to get bus system: %s\n", error->message);
+ g_error_free (error);
+ goto out;
}
-
- hal_ctx_set_user_data(device->priv->ctx, device);
- hal_ctx_set_device_property_callback(device->priv->ctx,
- hal_device_property_modified);
- hal_ctx_watch_device(device->priv->ctx, device->priv->udi);
-
+
+ hal_device_add_watch(device);
+
out:
- return device;
+ return device->priv->watch_added;
+ ;
}
Modified: xfce4-power-manager/trunk/libxfpm/hal-device.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-device.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/hal-device.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -23,8 +23,6 @@
#include <glib-object.h>
-#include "hal-enum.h"
-
G_BEGIN_DECLS
#define HAL_TYPE_DEVICE (hal_device_get_type () )
@@ -42,13 +40,19 @@
typedef struct
{
- GObjectClass parent_class;
- void (*device_changed) (HalDevice *device);
+ GObjectClass parent_class;
+ void (*device_changed) (HalDevice *device,
+ const gchar *udi,
+ const gchar *key,
+ gboolean is_added,
+ gboolean is_removed);
+
} HalDeviceClass;
GType hal_device_get_type (void) G_GNUC_CONST;
HalDevice *hal_device_new (const gchar *udi);
+gboolean hal_device_watch (HalDevice *device);
G_END_DECLS
Modified: xfce4-power-manager/trunk/libxfpm/hal-enum.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-enum.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/hal-enum.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -23,7 +23,6 @@
typedef enum
{
- HAL_DEVICE_TYPE_ADAPTER,
HAL_DEVICE_TYPE_PRIMARY,
HAL_DEVICE_TYPE_UPS,
HAL_DEVICE_TYPE_MOUSE,
Added: xfce4-power-manager/trunk/libxfpm/hal-manager.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-manager.c (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-manager.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,394 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <dbus/dbus-glib.h>
+#include <glib.h>
+
+#include "hal-manager.h"
+
+/* Init */
+static void hal_manager_class_init (HalManagerClass *klass);
+static void hal_manager_init (HalManager *manager);
+static void hal_manager_finalize (GObject *object);
+
+#define HAL_MANAGER_GET_PRIVATE(o) \
+(G_TYPE_INSTANCE_GET_PRIVATE((o), HAL_TYPE_MANAGER, HalManagerPrivate))
+
+struct HalManagerPrivate
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+ gboolean connected;
+};
+
+enum
+{
+ DEVICE_ADDED,
+ DEVICE_REMOVED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (HalManager, hal_manager, G_TYPE_OBJECT)
+
+static void
+hal_manager_class_init(HalManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+ signals[DEVICE_ADDED] =
+ g_signal_new("device-added",
+ HAL_TYPE_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalManagerClass, device_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ signals[DEVICE_REMOVED] =
+ g_signal_new("device-removed",
+ HAL_TYPE_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalManagerClass, device_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ object_class->finalize = hal_manager_finalize;
+
+
+ g_type_class_add_private (klass,sizeof(HalManagerPrivate));
+}
+
+static void
+hal_manager_init (HalManager *manager)
+{
+ manager->priv = HAL_MANAGER_GET_PRIVATE (manager);
+
+ manager->priv->bus = NULL;
+ manager->priv->proxy = NULL;
+ manager->priv->connected = FALSE;
+}
+
+static void
+hal_manager_finalize(GObject *object)
+{
+ HalManager *manager;
+
+ manager = HAL_MANAGER(object);
+
+ if ( manager->priv->proxy )
+ g_object_unref (manager->priv->proxy);
+
+ if ( manager->priv->bus )
+ dbus_g_connection_unref (manager->priv->bus);
+
+ G_OBJECT_CLASS(hal_manager_parent_class)->finalize(object);
+}
+
+static void
+hal_manager_device_added_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
+{
+ g_signal_emit (G_OBJECT(manager), signals[DEVICE_ADDED], 0, udi);
+}
+
+static void
+hal_manager_device_removed_cb (DBusGProxy *proxy, const gchar *udi, HalManager *manager)
+{
+ g_signal_emit (G_OBJECT(manager), signals[DEVICE_REMOVED], 0, udi);
+}
+
+static void
+hal_manager_connect (HalManager *manager)
+{
+ GError *error = NULL;
+
+ manager->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+
+ if ( error )
+ {
+ g_critical ("Failed to get bus system %s\n", error->message);
+ g_error_free (error);
+ goto out;
+ }
+ manager->priv->connected = TRUE;
+
+ manager->priv->proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ "/org/freedesktop/Hal/Manager",
+ "org.freedesktop.Hal.Manager");
+
+ if ( !manager->priv->proxy )
+ {
+ g_critical ("Unable to get proxy for \n");
+ goto out;
+ }
+
+ dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceAdded",
+ G_TYPE_STRING, G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceAdded",
+ G_CALLBACK (hal_manager_device_added_cb), manager, NULL);
+
+ dbus_g_proxy_add_signal (manager->priv->proxy, "DeviceRemoved",
+ G_TYPE_STRING, G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (manager->priv->proxy, "DeviceRemoved",
+ G_CALLBACK (hal_manager_device_removed_cb), manager, NULL);
+out:
+ ;
+}
+
+HalManager *
+hal_manager_new(void)
+{
+ HalManager *manager = NULL;
+ manager = g_object_new (HAL_TYPE_MANAGER, NULL);
+
+ hal_manager_connect (manager);
+
+ return manager;
+}
+
+gchar **hal_manager_find_device_by_capability (HalManager *manager, const gchar *capability)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), NULL);
+ g_return_val_if_fail (manager->priv->connected, NULL);
+
+ gchar **udi = NULL;
+ GError *error = NULL;
+
+ dbus_g_proxy_call (manager->priv->proxy, "FindDeviceByCapability", &error,
+ G_TYPE_STRING, capability,
+ G_TYPE_INVALID,
+ G_TYPE_STRV, &udi,
+ G_TYPE_INVALID);
+ if ( error )
+ {
+ g_critical ("Error finding devices by capability %s\n", error->message);
+ g_error_free (error);
+ }
+
+ return udi;
+}
+
+gboolean hal_manager_get_device_property_bool (HalManager *manager, const gchar *udi, const gchar *property)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), FALSE);
+ g_return_val_if_fail (manager->priv->connected, FALSE);
+
+ gboolean value = FALSE;
+ GError *error = NULL;
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device");
+
+ if ( !proxy )
+ {
+ g_critical ("Unable to get proxy on interface %s\n", udi);
+ return value;
+ }
+
+ dbus_g_proxy_call (proxy, "GetPropertyBoolean", &error,
+ G_TYPE_STRING, property,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &value,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+
+ if ( error )
+ {
+ g_critical ("Error getting bool property on device %s: %s\n", udi, error->message);
+ g_error_free (error);
+ }
+
+ return value;
+}
+
+gint hal_manager_get_device_property_int (HalManager *manager, const gchar *udi, const gchar *property)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), 0);
+ g_return_val_if_fail (manager->priv->connected, 0);
+
+ gint value = 0;
+ GError *error = NULL;
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device");
+
+ if ( !proxy )
+ {
+ g_critical ("Unable to get proxy on interface %s\n", udi);
+ return value;
+ }
+
+ dbus_g_proxy_call (proxy, "GetPropertyInteger", &error,
+ G_TYPE_STRING, property,
+ G_TYPE_INVALID,
+ G_TYPE_INT, &value,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+
+ if ( error )
+ {
+ g_critical ("Error getting integer property on device %s: %s\n", udi, error->message);
+ g_error_free (error);
+ }
+
+ return value;
+
+ return 0;
+}
+
+gchar *hal_manager_get_device_property_string (HalManager *manager, const gchar *udi, const gchar *property)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), NULL);
+ g_return_val_if_fail (manager->priv->connected, NULL);
+
+ gchar *value = NULL;
+ GError *error = NULL;
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device");
+
+ if ( !proxy )
+ {
+ g_critical ("Unable to get proxy on interface %s\n", udi);
+ return value;
+ }
+
+ dbus_g_proxy_call (proxy, "GetPropertyString", &error,
+ G_TYPE_STRING, property,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, &value,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+
+ if ( error )
+ {
+ g_critical ("Error getting string property on device %s: %s\n", udi, error->message);
+ g_error_free (error);
+ }
+
+ return value;
+
+ return NULL;
+}
+
+gboolean hal_manager_device_has_key (HalManager *manager, const gchar *udi, const gchar *key)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), FALSE);
+ g_return_val_if_fail (manager->priv->connected, FALSE);
+
+ gboolean value = FALSE;
+ GError *error = NULL;
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device");
+
+ if ( !proxy )
+ {
+ g_critical ("Unable to get proxy on interface %s\n", udi);
+ return value;
+ }
+
+ dbus_g_proxy_call (proxy, "PropertyExists", &error,
+ G_TYPE_STRING, key,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &value,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+
+ if ( error )
+ {
+ g_critical ("Error getting property exists on device %s: %s\n", udi, error->message);
+ g_error_free (error);
+ }
+
+ return value;
+
+ return value;
+}
+
+gboolean hal_manager_device_has_capability (HalManager *manager, const gchar *udi, const gchar *capability)
+{
+ g_return_val_if_fail (HAL_IS_MANAGER(manager), FALSE);
+ g_return_val_if_fail (manager->priv->connected, FALSE);
+
+ gboolean value = FALSE;
+ GError *error = NULL;
+
+ DBusGProxy *proxy = dbus_g_proxy_new_for_name (manager->priv->bus,
+ "org.freedesktop.Hal",
+ udi,
+ "org.freedesktop.Hal.Device");
+
+ if ( !proxy )
+ {
+ g_critical ("Unable to get proxy on interface %s\n", udi);
+ return value;
+ }
+
+ dbus_g_proxy_call (proxy, "QueryCapability", &error,
+ G_TYPE_STRING, capability,
+ G_TYPE_INVALID,
+ G_TYPE_BOOLEAN, &value,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+
+ if ( error )
+ {
+ g_critical ("Error getting querying capability on device %s: %s\n", udi, error->message);
+ g_error_free (error);
+ }
+
+ return value;
+}
+
+void hal_manager_free_string_array (gchar **array)
+{
+ gint i;
+
+ if (array == NULL)
+ return;
+
+ for (i=0; array[i]; i++)
+ g_free (array[i]);
+
+ g_free (array);
+}
Added: xfce4-power-manager/trunk/libxfpm/hal-manager.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-manager.h (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-manager.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,82 @@
+/*
+ * * Copyright (C) 2008-2009 Ali <aliov at xfce.org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __HAL_MANAGER_H
+#define __HAL_MANAGER_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define HAL_TYPE_MANAGER (hal_manager_get_type () )
+#define HAL_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), HAL_TYPE_MANAGER, HalManager))
+#define HAL_IS_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), HAL_TYPE_MANAGER))
+
+typedef struct HalManagerPrivate HalManagerPrivate;
+
+typedef struct
+{
+ GObject parent;
+ HalManagerPrivate *priv;
+
+} HalManager;
+
+typedef struct
+{
+ GObjectClass parent_class;
+
+ void (*device_added) (HalManager *manager,
+ const gchar *udi);
+ void (*device_removed) (HalManager *manager,
+ const gchar *udi);
+
+} HalManagerClass;
+
+GType hal_manager_get_type (void) G_GNUC_CONST;
+HalManager *hal_manager_new (void);
+
+gchar **hal_manager_find_device_by_capability (HalManager *manager,
+ const gchar *capability);
+
+gboolean hal_manager_get_device_property_bool (HalManager *manager,
+ const gchar *udi,
+ const gchar *property);
+
+gint hal_manager_get_device_property_int (HalManager *manager,
+ const gchar *udi,
+ const gchar *property);
+
+gchar *hal_manager_get_device_property_string (HalManager *manager,
+ const gchar *udi,
+ const gchar *property);
+
+gboolean hal_manager_device_has_key (HalManager *manager,
+ const gchar *udi,
+ const gchar *key);
+
+gboolean hal_manager_device_has_capability (HalManager *manager,
+ const gchar *udi,
+ const gchar *capability);
+
+void hal_manager_free_string_array (gchar **array);
+
+G_END_DECLS
+
+#endif /* __HAL_MANAGER_H */
Added: xfce4-power-manager/trunk/libxfpm/hal-marshal.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-marshal.c (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-marshal.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,127 @@
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* NONE:INT,BOXED (hal-marshal.list:1) */
+void
+_hal_marshal_VOID__INT_BOXED (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__INT_BOXED) (gpointer data1,
+ gint arg_1,
+ gpointer arg_2,
+ gpointer data2);
+ register GMarshalFunc_VOID__INT_BOXED callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 3);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__INT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_int (param_values + 1),
+ g_marshal_value_peek_boxed (param_values + 2),
+ data2);
+}
+
+/* NONE:STRING,STRING,BOOLEAN,BOOLEAN (hal-marshal.list:2) */
+void
+_hal_marshal_VOID__STRING_STRING_BOOLEAN_BOOLEAN (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_STRING_BOOLEAN_BOOLEAN) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gboolean arg_3,
+ gboolean arg_4,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_STRING_BOOLEAN_BOOLEAN callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 5);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_STRING_BOOLEAN_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_string (param_values + 2),
+ g_marshal_value_peek_boolean (param_values + 3),
+ g_marshal_value_peek_boolean (param_values + 4),
+ data2);
+}
+
Added: xfce4-power-manager/trunk/libxfpm/hal-marshal.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-marshal.h (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-marshal.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,30 @@
+
+#ifndef ___hal_marshal_MARSHAL_H__
+#define ___hal_marshal_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* NONE:INT,BOXED (hal-marshal.list:1) */
+extern void _hal_marshal_VOID__INT_BOXED (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+#define _hal_marshal_NONE__INT_BOXED _hal_marshal_VOID__INT_BOXED
+
+/* NONE:STRING,STRING,BOOLEAN,BOOLEAN (hal-marshal.list:2) */
+extern void _hal_marshal_VOID__STRING_STRING_BOOLEAN_BOOLEAN (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+#define _hal_marshal_NONE__STRING_STRING_BOOLEAN_BOOLEAN _hal_marshal_VOID__STRING_STRING_BOOLEAN_BOOLEAN
+
+G_END_DECLS
+
+#endif /* ___hal_marshal_MARSHAL_H__ */
+
Added: xfce4-power-manager/trunk/libxfpm/hal-marshal.list
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-marshal.list (rev 0)
+++ xfce4-power-manager/trunk/libxfpm/hal-marshal.list 2009-03-13 13:01:30 UTC (rev 6891)
@@ -0,0 +1,2 @@
+NONE:INT,BOXED
+NONE:STRING,STRING,BOOLEAN,BOOLEAN
Modified: xfce4-power-manager/trunk/libxfpm/hal-power.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -23,23 +23,14 @@
#endif
#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STRING_H
#include <string.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
#include <glib.h>
-#include "hal-ctx.h"
+#include "hal-manager.h"
#include "hal-power.h"
+#include "xfpm-string.h"
/* Init */
static void hal_power_class_init (HalPowerClass *klass);
@@ -51,14 +42,19 @@
struct HalPowerPrivate
{
- GHashTable *hash ;
- HalCtx *ctx ;
+ GHashTable *hash ;
+ HalManager *manager ;
+
+ HalDevice *adapter ;
+ gboolean adapter_found;
};
enum
{
- DEVICE_ADDED,
- DEVICE_REMOVED,
+ BATTERY_ADDED,
+ BATTERY_REMOVED,
+ ADAPTER_ADDED,
+ ADAPTER_REMOVED,
LAST_SIGNAL
};
@@ -70,78 +66,97 @@
* Sanity check of the keys present of a battery device
*/
static gboolean
-hal_power_chech_battery (HalPower *power, const gchar *udi)
+hal_power_check_battery (HalPower *power, const gchar *udi)
{
- if ( hal_ctx_device_has_key(power->priv->ctx, udi, "battery.present") &&
- hal_ctx_device_has_key(power->priv->ctx, udi, "battery.rechargeable.is_charging") &&
- hal_ctx_device_has_key(power->priv->ctx, udi, "battery.rechargeable.is_discharging") &&
- hal_ctx_device_has_key(power->priv->ctx, udi, "battery.charge_level.current") &&
- hal_ctx_device_has_key(power->priv->ctx, udi, "battery.charge_level.last_full") )
+ if ( hal_manager_device_has_key(power->priv->manager, udi, "battery.present") &&
+ hal_manager_device_has_key(power->priv->manager, udi, "battery.rechargeable.is_charging") &&
+ hal_manager_device_has_key(power->priv->manager, udi, "battery.rechargeable.is_discharging") &&
+ hal_manager_device_has_key(power->priv->manager, udi, "battery.charge_level.current") &&
+ hal_manager_device_has_key(power->priv->manager, udi, "battery.charge_level.last_full") )
return TRUE;
return FALSE;
}
-static gboolean
-hal_power_is_power_device(HalPower *power, const gchar *udi)
+static HalBattery *
+hal_power_add_battery (HalPower *power, const gchar *udi)
{
- if ( hal_ctx_device_has_capability(power->priv->ctx, udi, "battery") ||
- hal_ctx_device_has_capability(power->priv->ctx, udi, "ac_adapter") )
- return TRUE;
+ HalBattery *battery;
+ battery = hal_battery_new (udi);
- return FALSE;
+ g_hash_table_insert (power->priv->hash, g_strdup(udi), battery );
+
+ return battery ;
}
-static HalDevice *
-hal_power_add_device(HalPower *power, const gchar *udi)
+static void
+hal_power_remove_battery (HalPower *power, HalBattery *battery, const gchar *udi)
{
- HalDevice *device;
- device = hal_device_new (udi);
+ g_signal_emit (power, signals[BATTERY_REMOVED], 0, battery);
- g_hash_table_insert (power->priv->hash, g_strdup(udi), device);
+ g_object_unref(battery );
- return device;
+ if (!g_hash_table_remove(power->priv->hash, udi))
+ g_warning ("Unable to removed object from hash\n");
}
static void
-hal_power_remove_device(HalPower *power, HalDevice *device, const gchar *udi)
+hal_power_remove_adapter (HalPower *power )
{
- g_object_unref(device);
- if (!g_hash_table_remove(power->priv->hash, udi))
- g_warning ("Unable to removed object from hash\n");
+ g_signal_emit (G_OBJECT(power), signals[ADAPTER_REMOVED], 0);
+ g_object_unref (power->priv->adapter);
+ power->priv->adapter_found = FALSE;
}
-static HalDevice *
-hal_power_get_device(HalPower *power, const gchar *udi)
+static HalBattery *
+hal_power_get_battery_from_hash (HalPower *power, const gchar *udi)
{
- HalDevice *device = NULL;
- device = g_hash_table_lookup(power->priv->hash, udi);
- return device;
+ HalBattery *battery = NULL;
+
+ battery = g_hash_table_lookup(power->priv->hash, udi);
+
+ return battery;
}
static void
-hal_power_device_added_cb (LibHalContext *context, const gchar *udi)
+hal_power_device_added_cb (HalManager *manager, const gchar *udi, HalPower *power)
{
- HalPower *power = libhal_ctx_get_user_data(context);
- if ( !hal_power_is_power_device(power, udi) ) return;
-
- HalDevice *device = hal_power_add_device(power, udi);
-
- g_signal_emit(G_OBJECT(power), signals[DEVICE_ADDED], 0, device);
+ if ( hal_manager_device_has_capability (manager, udi, "battery") )
+ {
+ HalBattery *battery = hal_power_add_battery (power, udi);
+ g_signal_emit (G_OBJECT(power), signals[BATTERY_ADDED], 0, battery);
+ }
+ else if ( hal_manager_device_has_capability (manager, udi, "ac_adapter") )
+ {
+ if ( !power->priv->adapter_found )
+ {
+ power->priv->adapter = hal_device_new (udi);
+ g_signal_emit (G_OBJECT(power), signals[ADAPTER_ADDED], 0, power->priv->adapter);
+ }
+ }
}
static void
-hal_power_device_removed_cb (LibHalContext *context, const gchar *udi)
+hal_power_device_removed_cb (HalManager *manager, const gchar *udi, HalPower *power)
{
- HalPower *power = libhal_ctx_get_user_data (context);
+ HalBattery *battery = hal_power_get_battery_from_hash (power, udi);
- HalDevice *device = hal_power_get_device (power, udi);
-
- if (device)
+ if (battery )
{
- g_signal_emit(power, signals[DEVICE_REMOVED], 0, device);
- hal_power_remove_device(power, device, udi);
+ hal_power_remove_battery (power, battery , udi);
}
+ else if ( power->priv->adapter_found )
+ {
+ gchar *adapter_udi = NULL;
+ g_object_get (G_OBJECT(power->priv->adapter), "udi", &adapter_udi, NULL);
+ if (adapter_udi)
+ {
+ if ( xfpm_strequal (udi, adapter_udi ) )
+ hal_power_remove_adapter (power);
+
+ g_free (adapter_udi);
+ }
+ }
}
static void
@@ -149,104 +164,112 @@
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
- signals[DEVICE_ADDED] =
- g_signal_new("device-added",
+ signals[BATTERY_ADDED] =
+ g_signal_new("battery-added",
HAL_TYPE_POWER,
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(HalPowerClass, device_added),
+ G_STRUCT_OFFSET(HalPowerClass, battery_added),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
- signals[DEVICE_REMOVED] =
- g_signal_new("device-removed",
+ signals[BATTERY_REMOVED] =
+ g_signal_new("battery-removed",
HAL_TYPE_POWER,
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET(HalPowerClass, device_removed),
+ G_STRUCT_OFFSET(HalPowerClass, battery_removed),
NULL, NULL,
g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
+ signals[ADAPTER_ADDED] =
+ g_signal_new("adapter-added",
+ HAL_TYPE_POWER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalPowerClass, adapter_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ signals[ADAPTER_REMOVED] =
+ g_signal_new("adapter-removed",
+ HAL_TYPE_POWER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(HalPowerClass, adapter_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+
object_class->finalize = hal_power_finalize;
g_type_class_add_private(klass,sizeof(HalPowerPrivate));
}
static void
-hal_power_get_batteries(HalPower *power)
+hal_power_get_batteries_internal (HalPower *power)
{
- gint number = 0;
gchar **batteries = NULL;
gint i;
- batteries = hal_ctx_get_device_by_capability(power->priv->ctx, "battery", &number);
+ batteries = hal_manager_find_device_by_capability (power->priv->manager, "battery");
- if ( !batteries || number == 0 )
+ if ( !batteries )
goto out;
for ( i = 0; batteries[i]; i++ )
{
- if (!hal_power_chech_battery(power, batteries[i]))
+ if (!hal_power_check_battery(power, batteries[i]))
continue;
- hal_power_add_device(power, batteries[i]);
+ hal_power_add_battery (power, batteries[i]);
}
-
- libhal_free_string_array(batteries);
+ hal_manager_free_string_array (batteries);
+
out:
;
}
+
static void
-hal_power_get_adapter(HalPower *power)
+hal_power_get_adapter_internal (HalPower *power)
{
- gint number = 0;
gchar **adapter = NULL;
- gint i = 0;
- adapter = hal_ctx_get_device_by_capability(power->priv->ctx, "ac_adapter", &number);
+ adapter = hal_manager_find_device_by_capability (power->priv->manager, "ac_adapter");
- if ( !adapter || number == 0 )
+ if ( !adapter )
goto out;
+
+ power->priv->adapter = hal_device_new (adapter[0]);
+ power->priv->adapter_found = TRUE;
- if ( number > 1)
- g_warning("More than one adapter were found on the system");
-
- hal_power_add_device (power, adapter[i]);
-
- libhal_free_string_array(adapter);
-
+ hal_manager_free_string_array (adapter);
out:
;
-
}
+
static void
hal_power_init(HalPower *power)
{
power->priv = HAL_POWER_GET_PRIVATE(power);
- power->priv->ctx = hal_ctx_new();
- power->priv->hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
+ power->priv->manager = hal_manager_new ();
+ power->priv->hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ power->priv->adapter_found = FALSE;
+ power->priv->adapter = NULL;
- if ( !hal_ctx_connect(power->priv->ctx) )
- {
- g_critical("Unable to connect to HAL");
- goto out;
- }
+ g_signal_connect (power->priv->manager, "device-added",
+ G_CALLBACK(hal_power_device_added_cb), power);
- hal_ctx_set_user_data (power->priv->ctx, power);
- hal_ctx_set_device_added_callback (power->priv->ctx, hal_power_device_added_cb);
- hal_ctx_set_device_removed_callback (power->priv->ctx, hal_power_device_removed_cb);
+ g_signal_connect (power->priv->manager, "device-removed",
+ G_CALLBACK(hal_power_device_removed_cb), power);
- hal_power_get_adapter (power);
- hal_power_get_batteries (power);
-
-out:
- ;
+ hal_power_get_adapter_internal (power);
+ hal_power_get_batteries_internal (power);
}
static void
@@ -259,8 +282,8 @@
if (power->priv->hash)
g_hash_table_unref(power->priv->hash);
- if ( power->priv->ctx )
- g_object_unref(power->priv->ctx);
+ if ( power->priv->manager )
+ g_object_unref(power->priv->manager);
G_OBJECT_CLASS(hal_power_parent_class)->finalize(object);
}
@@ -277,11 +300,13 @@
* Return an array of power devices, the array should be freed by the caller
*/
GPtrArray *
-hal_power_get_devices (HalPower *power)
+hal_power_get_batteries (HalPower *power)
{
+ g_return_val_if_fail (HAL_IS_POWER (power), NULL);
+
guint i;
GPtrArray *array;
- HalDevice *device;
+ HalBattery *battery;
array = g_ptr_array_new ();
@@ -293,14 +318,28 @@
for ( i=0; i < g_list_length (list); i++)
{
- device = g_list_nth_data (list, i);
- g_object_ref (device);
- g_ptr_array_add (array, device);
+ battery = g_list_nth_data (list, i);
+ g_object_ref (battery );
+ g_ptr_array_add (array, battery);
}
g_list_free (list);
-
out:
-
return array;
}
+
+gboolean hal_power_adapter_found (HalPower *power)
+{
+ g_return_val_if_fail (HAL_IS_POWER (power), FALSE);
+
+ return power->priv->adapter_found;
+}
+
+const HalDevice *hal_power_get_adapter (HalPower *power)
+{
+ g_return_val_if_fail (HAL_IS_POWER (power), NULL);
+ g_return_val_if_fail (power->priv->adapter_found == TRUE, NULL);
+
+ return (const HalDevice *)power->priv->adapter;
+
+}
Modified: xfce4-power-manager/trunk/libxfpm/hal-power.h
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -24,6 +24,7 @@
#include <glib-object.h>
#include "hal-device.h"
+#include "hal-battery.h"
G_BEGIN_DECLS
@@ -35,26 +36,35 @@
typedef struct
{
- GObject parent;
- HalPowerPrivate *priv;
+ GObject parent;
+ HalPowerPrivate *priv;
} HalPower;
typedef struct
{
- GObjectClass parent_class;
+ GObjectClass parent_class;
- void (*device_added) (HalPower *power,
- const HalDevice *device);
- void (*device_removed) (HalPower *power,
- const HalDevice *device);
+ void (*battery_added) (HalPower *power,
+ const HalBattery *battery);
+
+ void (*battery_removed) (HalPower *power,
+ const HalBattery *battery);
+
+ void (*adapter_added) (HalPower *power,
+ const HalDevice *device);
+
+ void (*adapter_removed) (HalPower *power);
} HalPowerClass;
-GType hal_power_get_type (void) G_GNUC_CONST;
-HalPower *hal_power_new (void);
-GPtrArray *hal_power_get_devices (HalPower *power);
+GType hal_power_get_type (void) G_GNUC_CONST;
+HalPower *hal_power_new (void);
+GPtrArray *hal_power_get_batteries (HalPower *power);
+gboolean hal_power_adapter_found (HalPower *power);
+const HalDevice *hal_power_get_adapter (HalPower *power);
+
G_END_DECLS
#endif /* __HAL_POWER_H */
Modified: xfce4-power-manager/trunk/panel-plugins/brightness/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/panel-plugins/brightness/Makefile.am 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/panel-plugins/brightness/Makefile.am 2009-03-13 13:01:30 UTC (rev 6891)
@@ -9,15 +9,13 @@
$(LIBXFCE4PANEL_CFLAGS) \
$(LIBXFCE4UTIL_CFLAGS) \
$(GTK_CFLAGS) \
- $(GLIB_CFLAGS) \
- $(HAL_CFLAGS)
+ $(GLIB_CFLAGS)
xfce4_brightness_plugin_LDADD = \
$(LIBXFCE4PANEL_LIBS) \
$(LIBXFCE4UTIL_LIBS) \
$(GTK_LIBS) \
- $(GLIB_LIBS) \
- $(HAL_LIBS)
+ $(GLIB_LIBS)
#
# Desktop file
Modified: xfce4-power-manager/trunk/panel-plugins/brightness/main.c
===================================================================
--- xfce4-power-manager/trunk/panel-plugins/brightness/main.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/panel-plugins/brightness/main.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -29,8 +29,6 @@
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4util/libxfce4util.h>
-#include <hal/libhal.h>
-
static void
register_plugin(XfcePanelPlugin *plugin)
{
Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/Makefile.am 2009-03-13 13:01:30 UTC (rev 6891)
@@ -49,7 +49,6 @@
$(GLIB_CFLAGS) \
$(DBUS_CFLAGS) \
$(DBUS_GLIB_CFLAGS) \
- $(HAL_CFLAGS) \
$(LIBXFCE4GUI_CFLAGS) \
$(LIBXFCE4UTIL_CFLAGS) \
$(XFCONF_CFLAGS) \
@@ -66,7 +65,6 @@
$(DBUS_GLIB_LIBS) \
$(LIBXFCE4GUI_LIBS) \
$(LIBXFCE4UTIL_LIBS) \
- $(HAL_LIBS) \
$(XFCONF_LIBS) \
$(LIBNOTIFY_LIBS) \
$(DPMS_LIBS)
Modified: xfce4-power-manager/trunk/src/xfpm-adapter.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-adapter.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-adapter.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -163,5 +163,4 @@
g_return_if_fail ( XFPM_IS_ADAPTER (adapter));
xfpm_tray_icon_set_tooltip (adapter->priv->icon, text);
-
}
Modified: xfce4-power-manager/trunk/src/xfpm-adapter.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-adapter.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-adapter.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -51,10 +51,12 @@
GType xfpm_adapter_get_type (void) G_GNUC_CONST;
XfpmAdapter *xfpm_adapter_new (const HalDevice *device);
+
gboolean xfpm_adapter_get_presence (XfpmAdapter *adapter);
void xfpm_adapter_set_visible (XfpmAdapter *adapter,
gboolean visible);
+
void xfpm_adapter_set_tooltip (XfpmAdapter *adapter,
const gchar *text);
G_END_DECLS
Modified: xfce4-power-manager/trunk/src/xfpm-battery-info.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-info.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-battery-info.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -24,7 +24,7 @@
#include "xfpm-battery-info.h"
static GtkWidget *
-xfpm_battery_info (HalDevice *device)
+xfpm_battery_info (HalBattery *device)
{
PangoFontDescription *pfd;
@@ -188,7 +188,7 @@
return table;
}
-GtkWidget *xfpm_battery_info_new (HalDevice *device, const gchar *icon_name)
+GtkWidget *xfpm_battery_info_new (HalBattery *device, const gchar *icon_name)
{
GtkWidget *info;
GtkWidget *mainbox;
Modified: xfce4-power-manager/trunk/src/xfpm-battery-info.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery-info.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-battery-info.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -24,11 +24,11 @@
#include <gtk/gtk.h>
#include <glib.h>
-#include "libxfpm/hal-device.h"
+#include "libxfpm/hal-battery.h"
G_BEGIN_DECLS
-GtkWidget *xfpm_battery_info_new (HalDevice *device, const gchar *icon_name);
+GtkWidget *xfpm_battery_info_new (HalBattery *device, const gchar *icon_name);
G_END_DECLS
Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -54,7 +54,7 @@
struct XfpmBatteryPrivate
{
XfpmTrayIcon *icon;
- HalDevice *device;
+ HalBattery *device;
HalDeviceType type;
gchar *icon_prefix;
@@ -437,7 +437,7 @@
}
static void
-xfpm_battery_device_changed_cb (HalDevice *device, XfpmBattery *battery)
+xfpm_battery_device_changed_cb (HalBattery *device, XfpmBattery *battery)
{
TRACE("start");
xfpm_battery_refresh (battery);
@@ -487,20 +487,21 @@
}
XfpmBattery *
-xfpm_battery_new(const HalDevice *device)
+xfpm_battery_new(const HalBattery *device)
{
XfpmBattery *battery = NULL;
battery = g_object_new(XFPM_TYPE_BATTERY, NULL);
- battery->priv->device = (HalDevice *)g_object_ref(G_OBJECT(device));
+ battery->priv->device = (HalBattery *)g_object_ref(G_OBJECT(device));
g_object_get(G_OBJECT(battery->priv->device), "type", &battery->priv->type, NULL);
battery->priv->icon_prefix = _get_icon_prefix_from_enum_type(battery->priv->type);
xfpm_battery_refresh (battery);
- g_signal_connect (G_OBJECT(battery->priv->device), "device-changed",
+
+ g_signal_connect (G_OBJECT(battery->priv->device), "battery-changed",
G_CALLBACK(xfpm_battery_device_changed_cb), battery);
g_signal_connect (G_OBJECT(xfpm_tray_icon_get_tray_icon(battery->priv->icon)), "popup-menu",
@@ -526,7 +527,7 @@
xfpm_battery_refresh_visible_icon (battery);
}
-const HalDevice *
+const HalBattery*
xfpm_battery_get_device (XfpmBattery *battery)
{
g_return_val_if_fail (XFPM_IS_BATTERY(battery), NULL);
Modified: xfce4-power-manager/trunk/src/xfpm-battery.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-battery.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -24,7 +24,7 @@
#include <glib-object.h>
#include <gtk/gtk.h>
-#include "libxfpm/hal-device.h"
+#include "libxfpm/hal-battery.h"
#include "xfpm-enum-glib.h"
#include "xfpm-notify.h"
@@ -50,6 +50,7 @@
void (*battery_state_changed) (XfpmBattery *battery,
XfpmBatteryState state);
+
void (*popup_battery_menu) (XfpmBattery *battery,
GtkStatusIcon *icon,
guint button,
@@ -59,16 +60,24 @@
} XfpmBatteryClass;
GType xfpm_battery_get_type (void) G_GNUC_CONST;
-XfpmBattery *xfpm_battery_new (const HalDevice *device);
+XfpmBattery *xfpm_battery_new (const HalBattery *device);
+
void xfpm_battery_set_adapter_presence(XfpmBattery *battery,
gboolean adapter_present);
+
void xfpm_battery_set_show_icon (XfpmBattery *battery,
XfpmShowIcon show_icon);
-const HalDevice *xfpm_battery_get_device (XfpmBattery *battery);
+
+const HalBattery *xfpm_battery_get_device (XfpmBattery *battery);
+
XfpmBatteryState xfpm_battery_get_state (XfpmBattery *battery);
+
GtkStatusIcon *xfpm_battery_get_status_icon (XfpmBattery *battery);
+
const gchar *xfpm_battery_get_icon_name (XfpmBattery *battery);
+
void xfpm_battery_show_info (XfpmBattery *battery);
+
void xfpm_battery_set_critical_level (XfpmBattery *battery,
guint8 critical_level);
Modified: xfce4-power-manager/trunk/src/xfpm-brightness-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-brightness-hal.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-brightness-hal.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -36,6 +36,10 @@
#include <errno.h>
#endif
+#include <libxfce4util/libxfce4util.h>
+
+#include "libxfpm/xfpm-string.h"
+
#include "xfpm-brightness-hal.h"
/* Init */
@@ -48,7 +52,8 @@
struct XfpmBrightnessHalPrivate
{
- gboolean hw_found;
+ //HalCtx *ctx;
+ gboolean hw_found;
};
G_DEFINE_TYPE(XfpmBrightnessHal, xfpm_brightness_hal, G_TYPE_OBJECT)
@@ -68,6 +73,9 @@
xfpm_brightness_hal_init(XfpmBrightnessHal *brg)
{
brg->priv = XFPM_BRIGHTNESS_HAL_GET_PRIVATE(brg);
+
+ //brg->priv->ctx = NULL;
+ brg->priv->hw_found = FALSE;
}
static void
@@ -80,11 +88,59 @@
G_OBJECT_CLASS(xfpm_brightness_hal_parent_class)->finalize(object);
}
+/*
+static void
+xfpm_brightness_hal_property_modified_cb (LibHalContext *ctx,
+ const gchar *udi,
+ const gchar *key,
+ dbus_bool_t is_removed,
+ dbus_bool_t is_added)
+{
+ g_print("BRIGHTNESS: udi=%s key=%s is_removed=%s is_added=%s\n",
+ udi, key, xfpm_bool_to_string(is_removed), xfpm_bool_to_string(is_added) );
+
+}
+
+static gboolean
+xfpm_brightness_hal_setup (XfpmBrightnessHal *brg)
+{
+ brg->priv->ctx = hal_ctx_new ();
+
+ if ( !hal_ctx_connect(brg->priv->ctx) )
+ return FALSE;
+
+ gchar **udi = NULL;
+ gint num = 0;
+
+ udi = hal_ctx_get_device_by_capability (brg->priv->ctx, "laptop_panel", &num );
+
+ if ( !udi )
+ return FALSE;
+
+ g_return_val_if_fail (num == 1, FALSE);
+
+ hal_ctx_set_device_property_callback (brg->priv->ctx, xfpm_brightness_hal_property_modified_cb);
+ hal_ctx_set_user_data (brg->priv->ctx, brg);
+
+ if ( hal_ctx_device_has_key (brg->priv->ctx, udi[0], "laptop_panel.num_levels") )
+ {
+ TRACE ("Found laptop_panel with udi=%s\n", udi[0]);
+ brg->priv->hw_found = TRUE;
+ hal_ctx_watch_device (brg->priv->ctx, udi[0] );
+ }
+
+ libhal_free_string_array (udi);
+
+ return TRUE;
+}
+*/
XfpmBrightnessHal *
xfpm_brightness_hal_new(void)
{
XfpmBrightnessHal *brg = NULL;
brg = g_object_new (XFPM_TYPE_BRIGHTNESS_HAL, NULL);
+ //xfpm_brightness_hal_setup (brg);
+
return brg;
}
Modified: xfce4-power-manager/trunk/src/xfpm-cpu.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-cpu.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -201,7 +201,7 @@
cpu->priv->cpu_governors |= CPU_PERFORMANCE;
}
- libhal_free_string_array (governors);
+ //libhal_free_string_array (governors);
return TRUE;
Modified: xfce4-power-manager/trunk/src/xfpm-lid-hal.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-lid-hal.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-lid-hal.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -38,7 +38,8 @@
#include <libxfce4util/libxfce4util.h>
-#include "libxfpm/hal-ctx.h"
+#include "libxfpm/hal-manager.h"
+#include "libxfpm/hal-device.h"
#include "libxfpm/xfpm-string.h"
#include "xfpm-lid-hal.h"
@@ -53,10 +54,9 @@
struct XfpmLidHalPrivate
{
- HalCtx *ctx;
-
- //gchar *udi;
- gboolean hw_found;
+ HalManager *manager;
+ HalDevice *device;
+ gboolean hw_found;
};
enum
@@ -95,8 +95,9 @@
{
lid->priv = XFPM_LID_HAL_GET_PRIVATE(lid);
- lid->priv->ctx = NULL;
- lid->priv->hw_found = FALSE;
+ lid->priv->manager = NULL;
+ lid->priv->device = NULL;
+ lid->priv->hw_found = FALSE;
}
static void
@@ -106,26 +107,29 @@
lid = XFPM_LID_HAL(object);
- if ( lid->priv->ctx )
- g_object_unref (lid->priv->ctx);
+ if ( lid->priv->manager )
+ g_object_unref (lid->priv->manager);
+ if ( lid->priv->device )
+ g_object_unref (lid->priv->device);
+
G_OBJECT_CLASS(xfpm_lid_hal_parent_class)->finalize(object);
}
static void
-xfpm_lid_property_modified_cb (LibHalContext *ctx,
+xfpm_lid_hal_device_changed_cb(HalDevice *device,
const gchar *udi,
const gchar *key,
- dbus_bool_t is_removed,
- dbus_bool_t is_added)
+ gboolean is_removed,
+ gboolean is_added,
+ XfpmLidHal *lid)
{
if ( !xfpm_strequal (key, "button.state.value") )
return;
TRACE("Property modified key=%s key=%s\n", key, udi);
- XfpmLidHal *lid = libhal_ctx_get_user_data (ctx);
- gboolean pressed = hal_ctx_get_property_bool (lid->priv->ctx, udi, key);
+ gboolean pressed = hal_manager_get_device_property_bool (lid->priv->manager, udi, key);
if ( pressed )
{
@@ -138,31 +142,24 @@
static gboolean
xfpm_lid_hal_setup (XfpmLidHal *lid)
{
- lid->priv->ctx = hal_ctx_new ();
+ lid->priv->manager = hal_manager_new ();
- if ( !hal_ctx_connect(lid->priv->ctx) )
- return FALSE;
-
gchar **udi = NULL;
- gint num = 0;
- udi = hal_ctx_get_device_by_capability (lid->priv->ctx, "button", &num );
+ udi = hal_manager_find_device_by_capability (lid->priv->manager, "button");
if ( !udi )
return FALSE;
- hal_ctx_set_device_property_callback (lid->priv->ctx, xfpm_lid_property_modified_cb);
- hal_ctx_set_user_data (lid->priv->ctx, lid);
-
int i;
for ( i = 0; udi[i]; i++ )
{
- if ( hal_ctx_device_has_key (lid->priv->ctx, udi[i], "button.type" ) &&
- hal_ctx_device_has_key (lid->priv->ctx, udi[i], "button.has_state" ) )
+ if ( hal_manager_device_has_key (lid->priv->manager, udi[i], "button.type" ) &&
+ hal_manager_device_has_key (lid->priv->manager, udi[i], "button.has_state" ) )
{
gchar *button_type =
- hal_ctx_get_property_string (lid->priv->ctx, udi[i], "button.type");
+ hal_manager_get_device_property_string (lid->priv->manager, udi[i], "button.type");
if ( !button_type )
continue;
@@ -170,16 +167,20 @@
if ( xfpm_strequal (button_type, "lid") )
{
lid->priv->hw_found = TRUE;
- hal_ctx_watch_device (lid->priv->ctx, udi[i] );
+ lid->priv->device = hal_device_new (udi[i]);
+ g_signal_connect (lid->priv->device, "device-changed",
+ G_CALLBACK(xfpm_lid_hal_device_changed_cb), lid);
+ if ( !hal_device_watch (lid->priv->device) )
+ g_critical ("Unable to watch lid button device: %s\n", udi[i]);
+
g_free(button_type);
TRACE ("Found lid switch on device: %s\n", udi[i]);
- goto out;
+ break;
}
}
}
-out:
- libhal_free_string_array (udi);
+ hal_manager_free_string_array (udi);
return TRUE;
}
@@ -189,11 +190,8 @@
XfpmLidHal *lid = NULL;
lid = g_object_new (XFPM_TYPE_LID_HAL, NULL);
- if ( !xfpm_lid_hal_setup (lid) )
- goto out;
-
-
-out:
+ xfpm_lid_hal_setup (lid);
+
return lid;
}
Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c 2009-03-13 13:01:30 UTC (rev 6891)
@@ -235,7 +235,7 @@
if ( !battery )
continue;
- const HalDevice *device = xfpm_battery_get_device (battery);
+ const HalBattery *device = xfpm_battery_get_device (battery);
g_object_get (G_OBJECT(device), "type", &type, "percentage", &percentage, NULL);
if ( type != HAL_DEVICE_TYPE_PRIMARY )
continue;
@@ -409,7 +409,7 @@
xfpm_supply_show_battery_notification (XfpmSupply *supply, XfpmBatteryState state, XfpmBattery *battery)
{
HalDeviceType type;
- const HalDevice *device = xfpm_battery_get_device (battery);
+ const HalBattery *device = xfpm_battery_get_device (battery);
if ( device )
g_object_get (G_OBJECT(device), "type", &type, NULL);
@@ -534,6 +534,7 @@
}
//FIXME: Change the name of this function
+
static void
xfpm_supply_set_adapter_presence (XfpmSupply *supply)
{
@@ -555,7 +556,6 @@
}
g_list_free (list);
-
}
static void
@@ -579,118 +579,63 @@
}
static void
-xfpm_supply_add_device (XfpmSupply *supply, const HalDevice *device)
+xfpm_supply_add_battery (XfpmSupply *supply, const HalBattery *device)
{
- HalDeviceType type;
gchar *udi = NULL;
- g_object_get(G_OBJECT(device), "type", &type, "udi", &udi, NULL);
+ g_object_get(G_OBJECT(device), "udi", &udi, NULL);
+
+ TRACE("New battery found %s", udi);
+
+ XfpmBattery *battery = xfpm_battery_new (device);
+ xfpm_battery_set_show_icon (battery, supply->priv->show_icon);
+ xfpm_battery_set_adapter_presence (battery, supply->priv->adapter_present);
+ xfpm_battery_set_critical_level (battery, supply->priv->critical_level);
+ g_hash_table_insert (supply->priv->hash, g_strdup(udi), battery);
- if ( type == HAL_DEVICE_TYPE_ADAPTER )
- {
- TRACE("Adapter found %s", udi);
- if ( supply->priv->adapter_found )
- {
- TRACE("System with more than one AC adapter"); /* g_strange */
- goto out;
- }
- supply->priv->adapter = xfpm_adapter_new (device);
- g_signal_connect (supply->priv->adapter, "adapter-changed",
- G_CALLBACK (xfpm_supply_adapter_changed_cb), supply);
-
- supply->priv->adapter_found = TRUE;
- gboolean adapter_present;
- g_object_get (G_OBJECT(device), "is-present", &adapter_present, NULL);
- supply->priv->adapter_present = adapter_present;
- g_signal_emit (G_OBJECT(supply), signals[ON_BATTERY], 0, supply->priv->adapter_present);
- xfpm_supply_set_adapter_presence (supply);
- }
- else
- {
- TRACE("New battery found %s", udi);
- XfpmBattery *battery = xfpm_battery_new (device);
- xfpm_battery_set_show_icon (battery, supply->priv->show_icon);
- xfpm_battery_set_adapter_presence (battery, supply->priv->adapter_present);
- xfpm_battery_set_critical_level (battery, supply->priv->critical_level);
- g_hash_table_insert (supply->priv->hash, g_strdup(udi), battery);
-
- g_signal_connect (G_OBJECT(battery), "battery-state-changed",
- G_CALLBACK(xfpm_supply_battery_state_changed_cb), supply);
+ g_signal_connect (G_OBJECT(battery), "battery-state-changed",
+ G_CALLBACK(xfpm_supply_battery_state_changed_cb), supply);
- g_signal_connect (G_OBJECT(battery), "popup-battery-menu",
- G_CALLBACK(xfpm_supply_popup_battery_menu_cb), supply);
- }
-out:
+ g_signal_connect (G_OBJECT(battery), "popup-battery-menu",
+ G_CALLBACK(xfpm_supply_popup_battery_menu_cb), supply);
+
if (udi)
g_free (udi);
}
static void
-xfpm_supply_remove_device(XfpmSupply *supply, const HalDevice *device)
+xfpm_supply_remove_battery (XfpmSupply *supply, const HalBattery *device)
{
- HalDeviceType type;
- gchar *udi = NULL;
+ gchar *udi;
+ g_object_get(G_OBJECT(device), "udi", &udi, NULL);
- g_object_get(G_OBJECT(device), "type", &type, "udi", &udi, NULL);
-
- if ( type == HAL_DEVICE_TYPE_ADAPTER )
+ XfpmBattery *battery = xfpm_supply_get_battery(supply, udi);
+
+ if ( battery )
{
- if ( !supply->priv->adapter_found )
- {
- g_warning ("No adapter found in the system to removed from the data\n");
- goto out;
- }
- TRACE("Adapter removed %s", udi);
- g_object_unref (supply->priv->adapter);
- supply->priv->adapter_found = FALSE;
+ TRACE("Removing battery %s", udi);
+ g_object_unref(battery);
+ if (!g_hash_table_remove(supply->priv->hash, udi))
+ g_critical ("Unable to removed battery object from hash\n");
}
- else
- {
- XfpmBattery *battery = xfpm_supply_get_battery(supply, udi);
-
- if ( battery )
- {
- TRACE("Removing battery %s", udi);
- g_object_unref(battery);
- if (!g_hash_table_remove(supply->priv->hash, udi))
- g_critical ("Unable to removed battery object from hash\n");
- }
- }
-out:
if (udi)
g_free (udi);
}
static void
-xfpm_supply_monitor_start (XfpmSupply *supply)
+xfpm_supply_battery_added_cb (HalPower *power, const HalBattery *device, XfpmSupply *supply)
{
- GPtrArray *array = hal_power_get_devices (supply->priv->power);
-
- int i = 0;
- for ( i = 0; i<array->len; i++ )
- {
- HalDevice *device;
- device = (HalDevice *)g_ptr_array_index(array, i);
- xfpm_supply_add_device (supply, device);
- }
-
- g_ptr_array_free(array, TRUE);
+ xfpm_supply_add_battery (supply, device);
}
static void
-xfpm_supply_device_added_cb (HalPower *power, const HalDevice *device, XfpmSupply *supply)
+xfpm_supply_battery_removed_cb (HalPower *power, const HalBattery *device, XfpmSupply *supply)
{
- xfpm_supply_add_device (supply, device);
+ xfpm_supply_remove_battery (supply, device);
}
static void
-xfpm_supply_device_removed_cb (HalPower *power, const HalDevice *device, XfpmSupply *supply)
-{
- xfpm_supply_remove_device (supply, device);
-}
-
-static void
xfpm_supply_set_battery_show_tray_icon (XfpmSupply *supply)
{
GList *list = NULL;
@@ -739,6 +684,83 @@
}
static void
+xfpm_supply_add_adapter (XfpmSupply *supply, const HalDevice *device)
+{
+ supply->priv->adapter_found = TRUE;
+
+ supply->priv->adapter = xfpm_adapter_new (device);
+ g_signal_connect (supply->priv->adapter, "adapter-changed",
+ G_CALLBACK(xfpm_supply_adapter_changed_cb), supply);
+}
+
+static void
+xfpm_supply_get_adapter (XfpmSupply *supply)
+{
+ const HalDevice *device;
+
+ if ( hal_power_adapter_found (supply->priv->power) )
+ {
+ device = hal_power_get_adapter (supply->priv->power);
+ if ( device )
+ {
+#ifdef DEBUG
+ gchar *udi;
+ g_object_get (G_OBJECT(device), "udi", &udi, NULL);
+ TRACE ("Adapter found in the system with udi=%s\n", udi);
+ g_free (udi);
+#endif
+ xfpm_supply_add_adapter (supply, device);
+ }
+ }
+ else
+ {
+ supply->priv->adapter_found = FALSE;
+ }
+}
+
+static void
+xfpm_supply_removed_adapter (XfpmSupply *supply)
+{
+ supply->priv->adapter_found = FALSE;
+ g_object_unref (supply->priv->adapter);
+}
+
+static void
+xfpm_supply_adapter_added_cb (HalPower *power, const HalDevice *device, XfpmSupply *supply)
+{
+ if ( supply->priv->adapter_found )
+ return;
+
+ xfpm_supply_add_adapter (supply, device);
+}
+
+static void
+xfpm_supply_adapter_removed_cb (HalPower *power, XfpmSupply *supply)
+{
+ if ( supply->priv->adapter_found )
+ xfpm_supply_removed_adapter (supply);
+}
+
+static void
+xfpm_supply_monitor_start (XfpmSupply *supply)
+{
+ //FIXME: Check the system formfactor
+ xfpm_supply_get_adapter (supply );
+
+ GPtrArray *array = hal_power_get_batteries (supply->priv->power);
+
+ int i = 0;
+ for ( i = 0; i<array->len; i++ )
+ {
+ HalBattery *device;
+ device = (HalBattery *)g_ptr_array_index(array, i);
+ xfpm_supply_add_battery (supply, device);
+ }
+
+ g_ptr_array_free(array, TRUE);
+}
+
+static void
xfpm_supply_property_changed_cb (XfconfChannel *channel, gchar *property, GValue *value, XfpmSupply *supply)
{
if ( G_VALUE_TYPE(value) == G_TYPE_INVALID )
@@ -829,10 +851,16 @@
xfpm_supply_monitor_start(supply);
- g_signal_connect(supply->priv->power, "device-added",
- G_CALLBACK(xfpm_supply_device_added_cb), supply);
+ g_signal_connect(supply->priv->power, "battery-added",
+ G_CALLBACK(xfpm_supply_battery_added_cb), supply);
- g_signal_connect(supply->priv->power, "device-removed",
- G_CALLBACK(xfpm_supply_device_removed_cb), supply);
+ g_signal_connect(supply->priv->power, "battery-removed",
+ G_CALLBACK(xfpm_supply_battery_removed_cb), supply);
+
+ g_signal_connect(supply->priv->power, "adapter-added",
+ G_CALLBACK(xfpm_supply_adapter_added_cb), supply);
+
+ g_signal_connect(supply->priv->power, "adapter-removed",
+ G_CALLBACK(xfpm_supply_adapter_removed_cb), supply);
return supply;
}
Modified: xfce4-power-manager/trunk/src/xfpm-supply.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.h 2009-03-13 10:28:27 UTC (rev 6890)
+++ xfce4-power-manager/trunk/src/xfpm-supply.h 2009-03-13 13:01:30 UTC (rev 6891)
@@ -50,15 +50,19 @@
void (*shutdown_request) (XfpmSupply *supply,
XfpmShutdownRequest action);
+
void (*block_shutdown) (XfpmSupply *supply,
gboolean block);
+
void (*on_battery ) (XfpmSupply *supply,
gboolean on_battery);
+
void (*on_low_battery) (XfpmSupply *supply);
} XfpmSupplyClass;
GType xfpm_supply_get_type (void) G_GNUC_CONST;
+
XfpmSupply *xfpm_supply_new (DbusHal *bus,
XfconfChannel *channel);
G_END_DECLS
More information about the Goodies-commits
mailing list