summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dkp-backend.h6
-rw-r--r--src/dkp-daemon.c236
-rw-r--r--src/dkp-daemon.h3
-rw-r--r--src/dkp-device.c137
-rw-r--r--src/dkp-device.h5
-rw-r--r--src/dkp-qos.c3
-rw-r--r--src/dummy/dkp-backend.c12
-rw-r--r--src/linux/Makefile.am3
-rw-r--r--src/linux/dkp-backend.c107
-rw-r--r--src/linux/dkp-device-csr.c4
-rw-r--r--src/linux/dkp-device-hid.c4
-rw-r--r--src/linux/dkp-device-supply.c4
-rw-r--r--src/linux/dkp-device-wup.c4
-rw-r--r--src/linux/dkp-input.c9
-rw-r--r--src/org.freedesktop.DeviceKit.Power.xml22
15 files changed, 266 insertions, 293 deletions
diff --git a/src/dkp-backend.h b/src/dkp-backend.h
index 20d2e88..a866693 100644
--- a/src/dkp-backend.h
+++ b/src/dkp-backend.h
@@ -52,12 +52,10 @@ typedef struct
GObjectClass parent_class;
void (* device_added) (DkpBackend *backend,
GObject *native,
- DkpDevice *device,
- gboolean emit_signal);
+ DkpDevice *device);
void (* device_changed) (DkpBackend *backend,
GObject *native,
- DkpDevice *device,
- gboolean emit_signal);
+ DkpDevice *device);
void (* device_removed) (DkpBackend *backend,
GObject *native,
DkpDevice *device);
diff --git a/src/dkp-daemon.c b/src/dkp-daemon.c
index ba1ceb7..e31154a 100644
--- a/src/dkp-daemon.c
+++ b/src/dkp-daemon.c
@@ -58,14 +58,14 @@ enum
enum
{
- DEVICE_ADDED_SIGNAL,
- DEVICE_REMOVED_SIGNAL,
- DEVICE_CHANGED_SIGNAL,
- CHANGED_SIGNAL,
- LAST_SIGNAL,
+ SIGNAL_DEVICE_ADDED,
+ SIGNAL_DEVICE_REMOVED,
+ SIGNAL_DEVICE_CHANGED,
+ SIGNAL_CHANGED,
+ SIGNAL_LAST,
};
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[SIGNAL_LAST] = { 0 };
struct DkpDaemonPrivate
{
@@ -75,17 +75,18 @@ struct DkpDaemonPrivate
DkpBackend *backend;
DkpDeviceList *power_devices;
gboolean on_battery;
- gboolean low_battery;
+ gboolean on_low_battery;
gboolean lid_is_closed;
gboolean lid_is_present;
gboolean kernel_can_suspend;
gboolean kernel_can_hibernate;
gboolean kernel_has_swap_space;
+ gboolean during_coldplug;
};
static void dkp_daemon_finalize (GObject *object);
static gboolean dkp_daemon_get_on_battery_local (DkpDaemon *daemon);
-static gboolean dkp_daemon_get_low_battery_local (DkpDaemon *daemon);
+static gboolean dkp_daemon_get_on_low_battery_local (DkpDaemon *daemon);
static gboolean dkp_daemon_get_on_ac_local (DkpDaemon *daemon);
G_DEFINE_TYPE (DkpDaemon, dkp_daemon, G_TYPE_OBJECT)
@@ -99,42 +100,10 @@ G_DEFINE_TYPE (DkpDaemon, dkp_daemon, G_TYPE_OBJECT)
#define DKP_DAEMON_ON_BATTERY_REFRESH_DEVICES_DELAY 3 /* seconds */
/**
- * dkp_daemon_set_lid_is_closed:
- **/
-gboolean
-dkp_daemon_set_lid_is_closed (DkpDaemon *daemon, gboolean lid_is_closed, gboolean notify)
-{
- gboolean ret = FALSE;
-
- g_return_val_if_fail (DKP_IS_DAEMON (daemon), FALSE);
-
- egg_debug ("lid_is_closed=%i", lid_is_closed);
- if (daemon->priv->lid_is_closed == lid_is_closed) {
- egg_debug ("ignoring duplicate");
- goto out;
- }
-
- /* save */
- if (!notify) {
- /* Do not emit an event on startup. Otherwise, e. g.
- * gnome-power-manager would pick up a "lid is closed" change
- * event when dk-p gets D-BUS activated, and thus would
- * immediately suspend the machine on startup. FD#22574 */
- egg_debug ("not emitting lid change event for daemon startup");
- } else {
- g_signal_emit (daemon, signals[CHANGED_SIGNAL], 0);
- }
- daemon->priv->lid_is_closed = lid_is_closed;
- ret = TRUE;
-out:
- return ret;
-}
-
-/**
- * dkp_daemon_check_state:
+ * dkp_daemon_check_sleep_states:
**/
static gboolean
-dkp_daemon_check_state (DkpDaemon *daemon)
+dkp_daemon_check_sleep_states (DkpDaemon *daemon)
{
gchar *contents = NULL;
GError *error = NULL;
@@ -261,17 +230,17 @@ dkp_daemon_get_number_devices_of_type (DkpDaemon *daemon, DkpDeviceType type)
}
/**
- * dkp_daemon_get_low_battery_local:
+ * dkp_daemon_get_on_low_battery_local:
*
* As soon as _all_ batteries are low, this is true
**/
static gboolean
-dkp_daemon_get_low_battery_local (DkpDaemon *daemon)
+dkp_daemon_get_on_low_battery_local (DkpDaemon *daemon)
{
guint i;
gboolean ret;
gboolean result = TRUE;
- gboolean low_battery;
+ gboolean on_low_battery;
DkpDevice *device;
const GPtrArray *array;
@@ -279,8 +248,8 @@ dkp_daemon_get_low_battery_local (DkpDaemon *daemon)
array = dkp_device_list_get_array (daemon->priv->power_devices);
for (i=0; i<array->len; i++) {
device = (DkpDevice *) g_ptr_array_index (array, i);
- ret = dkp_device_get_low_battery (device, &low_battery);
- if (ret && !low_battery) {
+ ret = dkp_device_get_low_battery (device, &on_low_battery);
+ if (ret && !on_low_battery) {
result = FALSE;
break;
}
@@ -549,6 +518,8 @@ gboolean
dkp_daemon_startup (DkpDaemon *daemon)
{
gboolean ret;
+ gboolean on_battery;
+ gboolean on_low_battery;
/* register on bus */
ret = dkp_daemon_register_power_daemon (daemon);
@@ -557,6 +528,10 @@ dkp_daemon_startup (DkpDaemon *daemon)
goto out;
}
+ /* stop signals and callbacks */
+ g_object_freeze_notify (G_OBJECT(daemon));
+ daemon->priv->during_coldplug = TRUE;
+
/* coldplug backend backend */
ret = dkp_backend_coldplug (daemon->priv->backend, daemon);
if (!ret) {
@@ -565,9 +540,17 @@ dkp_daemon_startup (DkpDaemon *daemon)
}
/* get battery state */
- daemon->priv->on_battery = (dkp_daemon_get_on_battery_local (daemon) &&
- !dkp_daemon_get_on_ac_local (daemon));
- daemon->priv->low_battery = dkp_daemon_get_low_battery_local (daemon);
+ on_battery = (dkp_daemon_get_on_battery_local (daemon) &&
+ !dkp_daemon_get_on_ac_local (daemon));
+ on_low_battery = dkp_daemon_get_on_low_battery_local (daemon);
+ g_object_set (daemon,
+ "on-battery", on_battery,
+ "on-low-battery", on_low_battery,
+ NULL);
+
+ /* start signals and callbacks */
+ g_object_thaw_notify (G_OBJECT(daemon));
+ daemon->priv->during_coldplug = FALSE;
/* set pm-utils power policy */
dkp_daemon_set_pmutils_powersave (daemon, daemon->priv->on_battery);
@@ -587,16 +570,6 @@ dkp_daemon_refresh_battery_devices_cb (DkpDaemon *daemon)
}
/**
- * dkp_daemon_device_went_away_cb:
- **/
-static void
-dkp_daemon_device_went_away_cb (gpointer user_data, GObject *device)
-{
- DkpDaemon *daemon = DKP_DAEMON (user_data);
- dkp_device_list_remove (daemon->priv->power_devices, device);
-}
-
-/**
* dkp_daemon_get_device_list:
**/
DkpDeviceList *
@@ -609,7 +582,7 @@ dkp_daemon_get_device_list (DkpDaemon *daemon)
* dkp_daemon_device_added_cb:
**/
static void
-dkp_daemon_device_added_cb (DkpBackend *backend, GObject *native, DkpDevice *device, gboolean emit_signal, DkpDaemon *daemon)
+dkp_daemon_device_added_cb (DkpBackend *backend, GObject *native, DkpDevice *device, DkpDaemon *daemon)
{
const gchar *object_path;
@@ -617,24 +590,22 @@ dkp_daemon_device_added_cb (DkpBackend *backend, GObject *native, DkpDevice *dev
g_return_if_fail (native != NULL);
g_return_if_fail (device != NULL);
- object_path = dkp_device_get_object_path (device);
- egg_debug ("added: native:%p, device:%s (%i)", native, object_path, emit_signal);
-
- /* only take a weak ref; the device will stay on the bus until
- * it's unreffed. So if we ref it, it'll never go away */
- g_object_weak_ref (G_OBJECT (device), dkp_daemon_device_went_away_cb, daemon);
+ /* add to device list */
dkp_device_list_insert (daemon->priv->power_devices, native, G_OBJECT (device));
/* emit */
- if (emit_signal)
- g_signal_emit (daemon, signals[DEVICE_ADDED_SIGNAL], 0, object_path);
+ if (!daemon->priv->during_coldplug) {
+ object_path = dkp_device_get_object_path (device);
+ egg_debug ("emitting added: %s (during coldplug %i)", object_path, daemon->priv->during_coldplug);
+ g_signal_emit (daemon, signals[SIGNAL_DEVICE_ADDED], 0, object_path);
+ }
}
/**
* dkp_daemon_device_changed_cb:
**/
static void
-dkp_daemon_device_changed_cb (DkpBackend *backend, GObject *native, DkpDevice *device, gboolean emit_signal, DkpDaemon *daemon)
+dkp_daemon_device_changed_cb (DkpBackend *backend, GObject *native, DkpDevice *device, DkpDaemon *daemon)
{
const gchar *object_path;
DkpDeviceType type;
@@ -644,11 +615,6 @@ dkp_daemon_device_changed_cb (DkpBackend *backend, GObject *native, DkpDevice *d
g_return_if_fail (native != NULL);
g_return_if_fail (device != NULL);
- object_path = dkp_device_get_object_path (device);
- egg_debug ("changed: native:%p, device:%s (%i)", native, object_path, emit_signal);
-
- dkp_device_changed (device, native, emit_signal);
-
/* refresh battery devices when AC state changes */
g_object_get (device,
"type", &type,
@@ -660,21 +626,24 @@ dkp_daemon_device_changed_cb (DkpBackend *backend, GObject *native, DkpDevice *d
(GSourceFunc) dkp_daemon_refresh_battery_devices_cb, daemon);
}
- /* second, check if the on_battery and low_battery state has changed */
+ /* second, check if the on_battery and on_low_battery state has changed */
ret = (dkp_daemon_get_on_battery_local (daemon) && !dkp_daemon_get_on_ac_local (daemon));
if (ret != daemon->priv->on_battery) {
- daemon->priv->on_battery = ret;
- egg_debug ("now on_battery = %s", ret ? "yes" : "no");
- g_signal_emit (daemon, signals[CHANGED_SIGNAL], 0);
+ g_object_set (daemon, "on-battery", ret, NULL);
/* set pm-utils power policy */
- dkp_daemon_set_pmutils_powersave (daemon, daemon->priv->on_battery);
+ dkp_daemon_set_pmutils_powersave (daemon, ret);
}
- ret = dkp_daemon_get_low_battery_local (daemon);
- if (ret != daemon->priv->low_battery) {
- daemon->priv->low_battery = ret;
- egg_debug ("now low_battery = %s", ret ? "yes" : "no");
- g_signal_emit (daemon, signals[CHANGED_SIGNAL], 0);
+ ret = dkp_daemon_get_on_low_battery_local (daemon);
+ if (ret != daemon->priv->on_low_battery) {
+ g_object_set (daemon, "on-low-battery", ret, NULL);
+ }
+
+ /* emit */
+ if (!daemon->priv->during_coldplug) {
+ object_path = dkp_device_get_object_path (device);
+ egg_debug ("emitting device-changed: %s", object_path);
+ g_signal_emit (daemon, signals[SIGNAL_DEVICE_CHANGED], 0, object_path);
}
}
@@ -690,12 +659,28 @@ dkp_daemon_device_removed_cb (DkpBackend *backend, GObject *native, DkpDevice *d
g_return_if_fail (native != NULL);
g_return_if_fail (device != NULL);
- object_path = dkp_device_get_object_path (device);
- egg_debug ("removed: native:%p, device:%s", native, object_path);
+ /* remove from list */
+ dkp_device_list_remove (daemon->priv->power_devices, G_OBJECT(device));
- dkp_device_removed (device);
- g_signal_emit (daemon, signals[DEVICE_REMOVED_SIGNAL], 0, object_path);
- g_object_unref (device);
+ /* emit */
+ if (!daemon->priv->during_coldplug) {
+ object_path = dkp_device_get_object_path (device);
+ egg_debug ("emitting device-removed: %s", object_path);
+ g_signal_emit (daemon, signals[SIGNAL_DEVICE_REMOVED], 0, object_path);
+ }
+}
+
+/**
+ * dkp_daemon_properties_changed_cb:
+ **/
+static void
+dkp_daemon_properties_changed_cb (GObject *object, GParamSpec *pspec, DkpDaemon *daemon)
+{
+ /* emit */
+ if (!daemon->priv->during_coldplug) {
+ egg_debug ("emitting changed");
+ g_signal_emit (daemon, signals[SIGNAL_CHANGED], 0);
+ }
}
/**
@@ -715,7 +700,8 @@ dkp_daemon_init (DkpDaemon *daemon)
daemon->priv->kernel_has_swap_space = FALSE;
daemon->priv->power_devices = dkp_device_list_new ();
daemon->priv->on_battery = FALSE;
- daemon->priv->low_battery = FALSE;
+ daemon->priv->on_low_battery = FALSE;
+ daemon->priv->during_coldplug = FALSE;
daemon->priv->backend = dkp_backend_new ();
g_signal_connect (daemon->priv->backend, "device-added",
@@ -725,8 +711,18 @@ dkp_daemon_init (DkpDaemon *daemon)
g_signal_connect (daemon->priv->backend, "device-removed",
G_CALLBACK (dkp_daemon_device_removed_cb), daemon);
+ /* watch when these properties change */
+ g_signal_connect (daemon, "notify::lid-is-present",
+ G_CALLBACK (dkp_daemon_properties_changed_cb), daemon);
+ g_signal_connect (daemon, "notify::lid-is-closed",
+ G_CALLBACK (dkp_daemon_properties_changed_cb), daemon);
+ g_signal_connect (daemon, "notify::on-battery",
+ G_CALLBACK (dkp_daemon_properties_changed_cb), daemon);
+ g_signal_connect (daemon, "notify::on-low-battery",
+ G_CALLBACK (dkp_daemon_properties_changed_cb), daemon);
+
/* check if we have support */
- dkp_daemon_check_state (daemon);
+ dkp_daemon_check_sleep_states (daemon);
/* do we have enough swap? */
if (daemon->priv->kernel_can_hibernate) {
@@ -773,59 +769,35 @@ dkp_daemon_error_get_type (void)
}
/**
- * dkp_daemon_constructor:
- **/
-static GObject *
-dkp_daemon_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties)
-{
- DkpDaemon *daemon;
- DkpDaemonClass *klass;
-
- klass = DKP_DAEMON_CLASS (g_type_class_peek (DKP_TYPE_DAEMON));
- daemon = DKP_DAEMON (G_OBJECT_CLASS (dkp_daemon_parent_class)->constructor (type, n_construct_properties, construct_properties));
- return G_OBJECT (daemon);
-}
-
-/**
* dkp_daemon_get_property:
**/
static void
dkp_daemon_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
DkpDaemon *daemon;
-
daemon = DKP_DAEMON (object);
-
switch (prop_id) {
-
case PROP_DAEMON_VERSION:
g_value_set_string (value, PACKAGE_VERSION);
break;
-
case PROP_CAN_SUSPEND:
g_value_set_boolean (value, daemon->priv->kernel_can_suspend);
break;
-
case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, (daemon->priv->kernel_can_hibernate && daemon->priv->kernel_has_swap_space));
break;
-
case PROP_ON_BATTERY:
g_value_set_boolean (value, daemon->priv->on_battery);
break;
-
case PROP_ON_LOW_BATTERY:
- g_value_set_boolean (value, daemon->priv->on_battery && daemon->priv->low_battery);
+ g_value_set_boolean (value, daemon->priv->on_battery && daemon->priv->on_low_battery);
break;
-
case PROP_LID_IS_CLOSED:
g_value_set_boolean (value, daemon->priv->lid_is_closed);
break;
-
case PROP_LID_IS_PRESENT:
g_value_set_boolean (value, daemon->priv->lid_is_present);
break;
-
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -839,15 +811,22 @@ static void
dkp_daemon_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
DkpDaemon *daemon = DKP_DAEMON (object);
-
switch (prop_id) {
-
case PROP_LID_IS_CLOSED:
daemon->priv->lid_is_closed = g_value_get_boolean (value);
+ egg_debug ("now lid_is_closed = %s", daemon->priv->lid_is_closed ? "yes" : "no");
break;
-
case PROP_LID_IS_PRESENT:
daemon->priv->lid_is_present = g_value_get_boolean (value);
+ egg_debug ("now lid_is_present = %s", daemon->priv->lid_is_present ? "yes" : "no");
+ break;
+ case PROP_ON_BATTERY:
+ daemon->priv->on_battery = g_value_get_boolean (value);
+ egg_debug ("now on_battery = %s", daemon->priv->on_battery ? "yes" : "no");
+ break;
+ case PROP_ON_LOW_BATTERY:
+ daemon->priv->on_low_battery = g_value_get_boolean (value);
+ egg_debug ("now on_low_battery = %s", daemon->priv->on_low_battery ? "yes" : "no");
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -862,15 +841,13 @@ static void
dkp_daemon_class_init (DkpDaemonClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructor = dkp_daemon_constructor;
object_class->finalize = dkp_daemon_finalize;
object_class->get_property = dkp_daemon_get_property;
object_class->set_property = dkp_daemon_set_property;
g_type_class_add_private (klass, sizeof (DkpDaemonPrivate));
- signals[DEVICE_ADDED_SIGNAL] =
+ signals[SIGNAL_DEVICE_ADDED] =
g_signal_new ("device-added",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
@@ -878,7 +855,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
- signals[DEVICE_REMOVED_SIGNAL] =
+ signals[SIGNAL_DEVICE_REMOVED] =
g_signal_new ("device-removed",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
@@ -886,7 +863,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
- signals[DEVICE_CHANGED_SIGNAL] =
+ signals[SIGNAL_DEVICE_CHANGED] =
g_signal_new ("device-changed",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
@@ -894,7 +871,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
- signals[CHANGED_SIGNAL] =
+ signals[SIGNAL_CHANGED] =
g_signal_new ("changed",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
@@ -941,7 +918,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
"On Battery",
"Whether the system is running on battery",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_ON_LOW_BATTERY,
@@ -949,7 +926,7 @@ dkp_daemon_class_init (DkpDaemonClass *klass)
"On Low Battery",
"Whether the system is running on battery and if the battery is critically low",
FALSE,
- G_PARAM_READABLE));
+ G_PARAM_READWRITE));
g_object_class_install_property (object_class,
PROP_LID_IS_CLOSED,
@@ -983,8 +960,7 @@ dkp_daemon_finalize (GObject *object)
g_object_unref (daemon->priv->proxy);
if (daemon->priv->connection != NULL)
dbus_g_connection_unref (daemon->priv->connection);
- if (daemon->priv->power_devices != NULL)
- g_object_unref (daemon->priv->power_devices);
+ g_object_unref (daemon->priv->power_devices);
g_object_unref (daemon->priv->polkit);
g_object_unref (daemon->priv->backend);
diff --git a/src/dkp-daemon.h b/src/dkp-daemon.h
index 9ea1210..fa371fa 100644
--- a/src/dkp-daemon.h
+++ b/src/dkp-daemon.h
@@ -71,9 +71,6 @@ DkpDaemon *dkp_daemon_new (void);
guint dkp_daemon_get_number_devices_of_type (DkpDaemon *daemon,
DkpDeviceType type);
DkpDeviceList *dkp_daemon_get_device_list (DkpDaemon *daemon);
-gboolean dkp_daemon_set_lid_is_closed (DkpDaemon *daemon,
- gboolean lid_is_closed,
- gboolean notify);
gboolean dkp_daemon_startup (DkpDaemon *daemon);
/* exported */
diff --git a/src/dkp-device.c b/src/dkp-device.c
index df57313..254724a 100644
--- a/src/dkp-device.c
+++ b/src/dkp-device.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
- * Copyright (C) 2008 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2008-2009 Richard Hughes <richard@hughsie.com>
*
* 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
@@ -119,11 +119,11 @@ enum
enum
{
- CHANGED_SIGNAL,
- LAST_SIGNAL,
+ SIGNAL_CHANGED,
+ SIGNAL_LAST,
};
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint signals[SIGNAL_LAST] = { 0 };
G_DEFINE_TYPE (DkpDevice, dkp_device, G_TYPE_OBJECT)
#define DKP_DEVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DKP_TYPE_DEVICE, DkpDevicePrivate))
@@ -368,18 +368,6 @@ dkp_device_set_property (GObject *object, guint prop_id, const GValue *value, GP
}
/**
- * dkp_device_removed:
- **/
-void
-dkp_device_removed (DkpDevice *device)
-{
- //DkpDeviceClass *klass = DKP_DEVICE_GET_CLASS (device);
- //klass->removed (device);
- g_return_if_fail (DKP_IS_DEVICE (device));
- egg_warning ("do something here?");
-}
-
-/**
* dkp_device_get_on_battery:
*
* Note: Only implement for system devices, i.e. ones supplying the system
@@ -485,8 +473,32 @@ dkp_device_get_id (DkpDevice *device)
id = g_string_free (string, FALSE);
} else {
- /* generic fallback */
- id = g_strdup_printf ("%s-%s-%s", device->priv->vendor, device->priv->model, device->priv->serial);
+ /* generic fallback, get what data we can */
+ string = g_string_new ("");
+ if (device->priv->vendor != NULL) {
+ g_string_append (string, device->priv->vendor);
+ g_string_append_c (string, '-');
+ }
+ if (device->priv->model != NULL) {
+ g_string_append (string, device->priv->model);
+ g_string_append_c (string, '-');
+ }
+ if (device->priv->serial != NULL) {
+ g_string_append (string, device->priv->serial);
+ g_string_append_c (string, '-');
+ }
+
+ /* make sure we are sane */
+ if (string->len == 0) {
+ /* just use something generic */
+ g_string_append (string, "generic_id");
+ } else {
+ /* remove trailing '-' */
+ g_string_set_size (string, string->len - 1);
+ }
+
+ /* the id may have invalid chars that need to be replaced */
+ id = g_string_free (string, FALSE);
}
g_strdelimit (id, "\\\t\"?' /,.", '_');
@@ -534,7 +546,7 @@ dkp_device_coldplug (DkpDevice *device, DkpDaemon *daemon, GObject *native)
if (klass->coldplug != NULL) {
ret = klass->coldplug (device);
if (!ret) {
- egg_debug ("failed to coldplug %p", device);
+ egg_debug ("failed to coldplug %s", device->priv->native_path);
goto out;
}
}
@@ -542,14 +554,14 @@ dkp_device_coldplug (DkpDevice *device, DkpDaemon *daemon, GObject *native)
/* only put on the bus if we succeeded */
ret = dkp_device_register_device (device);
if (!ret) {
- egg_warning ("failed to register device");
+ egg_warning ("failed to register device %s", device->priv->native_path);
goto out;
}
/* force a refresh, although failure isn't fatal */
ret = dkp_device_refresh_internal (device);
if (!ret) {
- egg_debug ("failed to refresh");
+ egg_debug ("failed to refresh %s", device->priv->native_path);
/* TODO: refresh should really have seporate
* success _and_ changed parameters */
@@ -744,32 +756,6 @@ dkp_device_refresh (DkpDevice *device, DBusGMethodInvocation *context)
return ret;
}
-
-/**
- * dkp_device_changed:
- **/
-gboolean
-dkp_device_changed (DkpDevice *device, GObject *native, gboolean emit_signal)
-{
- gboolean ret;
-
- g_return_val_if_fail (DKP_IS_DEVICE (device), FALSE);
-
- g_object_unref (device->priv->native);
- device->priv->native = g_object_ref (native);
-
- ret = dkp_device_refresh_internal (device);
-
- /* we failed to refresh, don't emit changed */
- if (!ret)
- goto out;
-
- /* no, it's good .. keep it */
- dkp_device_emit_changed (device);
-out:
- return ret;
-}
-
/**
* dkp_device_get_object_path:
**/
@@ -788,33 +774,6 @@ dkp_device_get_native (DkpDevice *device)
}
/**
- * dkp_device_emit_changed:
- **/
-void
-dkp_device_emit_changed (DkpDevice *device)
-{
- g_return_if_fail (DKP_IS_DEVICE (device));
-
- /* save new history */
- dkp_history_set_state (device->priv->history, device->priv->state);
- dkp_history_set_charge_data (device->priv->history, device->priv->percentage);
- dkp_history_set_rate_data (device->priv->history, device->priv->energy_rate);
- dkp_history_set_time_full_data (device->priv->history, device->priv->time_to_full);
- dkp_history_set_time_empty_data (device->priv->history, device->priv->time_to_empty);
-
- egg_debug ("emitting changed on %s", device->priv->native_path);
-
- /* The order here matters; we want Device::Changed() before
- * the DeviceChanged() signal on the main object; otherwise
- * clients that only listens on DeviceChanged() won't be
- * fully caught up...
- */
- g_signal_emit (device, signals[CHANGED_SIGNAL], 0);
- g_signal_emit_by_name (device->priv->daemon, "device-changed",
- device->priv->object_path, NULL);
-}
-
-/**
* dkp_device_compute_object_path:
**/
static gchar *
@@ -871,6 +830,33 @@ dkp_device_register_device (DkpDevice *device)
}
/**
+ * dkp_device_perhaps_changed_cb:
+ **/
+static void
+dkp_device_perhaps_changed_cb (GObject *object, GParamSpec *pspec, DkpDevice *device)
+{
+ g_return_if_fail (DKP_IS_DEVICE (device));
+
+ /* save new history */
+ dkp_history_set_state (device->priv->history, device->priv->state);
+ dkp_history_set_charge_data (device->priv->history, device->priv->percentage);
+ dkp_history_set_rate_data (device->priv->history, device->priv->energy_rate);
+ dkp_history_set_time_full_data (device->priv->history, device->priv->time_to_full);
+ dkp_history_set_time_empty_data (device->priv->history, device->priv->time_to_empty);
+
+ /* The order here matters; we want Device::Changed() before
+ * the DeviceChanged() signal on the main object; otherwise
+ * clients that only listens on DeviceChanged() won't be
+ * fully caught up...
+ */
+ egg_debug ("emitting changed on %s", device->priv->native_path);
+ g_signal_emit (device, signals[SIGNAL_CHANGED], 0);
+ egg_debug ("emitting device-changed on %s", device->priv->native_path);
+ g_signal_emit_by_name (device->priv->daemon, "device-changed",
+ device->priv->object_path, NULL);
+}
+
+/**
* dkp_device_init:
**/
static void
@@ -892,6 +878,7 @@ dkp_device_init (DkpDevice *device)
egg_error ("error getting system bus: %s", error->message);
g_error_free (error);
}
+ g_signal_connect (device, "notify::update-time", G_CALLBACK (dkp_device_perhaps_changed_cb), device);
}
/**
@@ -934,7 +921,7 @@ dkp_device_class_init (DkpDeviceClass *klass)
g_type_class_add_private (klass, sizeof (DkpDevicePrivate));
- signals[CHANGED_SIGNAL] =
+ signals[SIGNAL_CHANGED] =
g_signal_new ("changed",
G_OBJECT_CLASS_TYPE (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
diff --git a/src/dkp-device.h b/src/dkp-device.h
index f26dba0..0e03f0f 100644
--- a/src/dkp-device.h
+++ b/src/dkp-device.h
@@ -78,10 +78,6 @@ gboolean dkp_device_coldplug (DkpDevice *device,
DkpDaemon *daemon,
GObject *native);
DkpDaemon *dkp_device_get_daemon (DkpDevice *device);
-gboolean dkp_device_changed (DkpDevice *device,
- GObject *native,
- gboolean synthesized);
-void dkp_device_removed (DkpDevice *device);
GObject *dkp_device_get_native (DkpDevice *device);
const gchar *dkp_device_get_object_path (DkpDevice *device);
gboolean dkp_device_get_on_battery (DkpDevice *device,
@@ -90,7 +86,6 @@ gboolean dkp_device_get_low_battery (DkpDevice *device,
gboolean *low_battery);
gboolean dkp_device_get_online (DkpDevice *device,
gboolean *online);
-void dkp_device_emit_changed (DkpDevice *device);
gboolean dkp_device_refresh_internal (DkpDevice *device);
/* exported methods */
diff --git a/src/dkp-qos.c b/src/dkp-qos.c
index e1d4c60..407e369 100644
--- a/src/dkp-qos.c
+++ b/src/dkp-qos.c
@@ -620,7 +620,8 @@ dkp_qos_finalize (GObject *object)
g_ptr_array_foreach (qos->priv->data, (GFunc) dkp_qos_free_data_obj, NULL);
g_ptr_array_free (qos->priv->data, TRUE);
g_object_unref (qos->priv->proxy);
- g_object_unref (qos->priv->polkit);
+//FIXME: causes bt
+// g_object_unref (qos->priv->polkit);
G_OBJECT_CLASS (dkp_qos_parent_class)->finalize (object);
}
diff --git a/src/dummy/dkp-backend.c b/src/dummy/dkp-backend.c
index 0241a76..8db6277 100644
--- a/src/dummy/dkp-backend.c
+++ b/src/dummy/dkp-backend.c
@@ -66,7 +66,7 @@ static gboolean
dkp_backend_changed_time_cb (DkpBackend *backend)
{
/* emit */
- g_signal_emit (backend, signals[SIGNAL_DEVICE_CHANGED], 0, backend->priv->native, backend->priv->device, TRUE);
+ g_signal_emit (backend, signals[SIGNAL_DEVICE_CHANGED], 0, backend->priv->native, backend->priv->device);
return TRUE;
}
@@ -86,7 +86,7 @@ dkp_backend_add_cb (DkpBackend *backend)
}
/* emit */
- g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, backend->priv->native, backend->priv->device, TRUE);
+ g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, backend->priv->native, backend->priv->device);
/* setup poll */
g_timeout_add_seconds (2, (GSourceFunc) dkp_backend_changed_time_cb, backend);
@@ -130,14 +130,14 @@ dkp_backend_class_init (DkpBackendClass *klass)
g_signal_new ("device-added",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DkpBackendClass, device_added),
- NULL, NULL, dkp_marshal_VOID__POINTER_POINTER_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+ NULL, NULL, dkp_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
signals [SIGNAL_DEVICE_CHANGED] =
g_signal_new ("device-changed",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DkpBackendClass, device_changed),
- NULL, NULL, dkp_marshal_VOID__POINTER_POINTER_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+ NULL, NULL, dkp_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
signals [SIGNAL_DEVICE_REMOVED] =
g_signal_new ("device-removed",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
diff --git a/src/linux/Makefile.am b/src/linux/Makefile.am
index d5fd21d..039cccb 100644
--- a/src/linux/Makefile.am
+++ b/src/linux/Makefile.am
@@ -36,6 +36,9 @@ libdkpshared_la_SOURCES = \
sysfs-utils.h \
$(BUILT_SOURCES)
+libdkpshared_la_CFLAGS = \
+ $(WARNINGFLAGS_C)
+
clean-local :
rm -f *~
diff --git a/src/linux/dkp-backend.c b/src/linux/dkp-backend.c
index 5788acc..4210561 100644
--- a/src/linux/dkp-backend.c
+++ b/src/linux/dkp-backend.c
@@ -66,40 +66,14 @@ static guint signals [SIGNAL_LAST] = { 0 };
G_DEFINE_TYPE (DkpBackend, dkp_backend, G_TYPE_OBJECT)
-static gboolean dkp_backend_device_add (DkpBackend *backend, GUdevDevice *native, gboolean emit_signal);
+static gboolean dkp_backend_device_add (DkpBackend *backend, GUdevDevice *native);
static void dkp_backend_device_remove (DkpBackend *backend, GUdevDevice *native);
/**
- * dkp_backend_device_changed:
- **/
-static void
-dkp_backend_device_changed (DkpBackend *backend, GUdevDevice *native, gboolean emit_signal)
-{
- GObject *object;
- DkpDevice *device;
-
- /* first, change the device and add it if it doesn't exist */
- object = dkp_device_list_lookup (backend->priv->device_list, G_OBJECT (native));
- if (object == NULL) {
- egg_debug ("treating change event as add on %s", g_udev_device_get_sysfs_path (native));
- dkp_backend_device_add (backend, native, TRUE);
- goto out;
- }
-
- device = DKP_DEVICE (object);
- egg_debug ("changed %s", dkp_device_get_object_path (device));
-
- /* emit */
- g_signal_emit (backend, signals[SIGNAL_DEVICE_CHANGED], 0, native, device, emit_signal);
-out:
- return;
-}
-
-/**
- * dkp_backend_device_get:
+ * dkp_backend_device_new:
**/
static DkpDevice *
-dkp_backend_device_get (DkpBackend *backend, GUdevDevice *native)
+dkp_backend_device_new (DkpBackend *backend, GUdevDevice *native)
{
const gchar *subsys;
const gchar *native_path;
@@ -129,7 +103,7 @@ dkp_backend_device_get (DkpBackend *backend, GUdevDevice *native)
goto out;
g_object_unref (device);
- /* no valid TTY object ;-( */
+ /* no valid TTY object */
device = NULL;
} else if (g_strcmp0 (subsys, "usb") == 0) {
@@ -148,7 +122,7 @@ dkp_backend_device_get (DkpBackend *backend, GUdevDevice *native)
goto out;
g_object_unref (device);
- /* no valid USB object ;-( */
+ /* no valid USB object */
device = NULL;
} else if (g_strcmp0 (subsys, "input") == 0) {
@@ -181,10 +155,43 @@ out:
}
/**
+ * dkp_backend_device_changed:
+ **/
+static void
+dkp_backend_device_changed (DkpBackend *backend, GUdevDevice *native)
+{
+ GObject *object;
+ DkpDevice *device;
+ gboolean ret;
+
+ /* first, check the device and add it if it doesn't exist */
+ object = dkp_device_list_lookup (backend->priv->device_list, G_OBJECT (native));
+ if (object == NULL) {
+ egg_warning ("treating change event as add on %s", g_udev_device_get_sysfs_path (native));
+ dkp_backend_device_add (backend, native);
+ goto out;
+ }
+
+ /* need to refresh device */
+ device = DKP_DEVICE (object);
+ ret = dkp_device_refresh_internal (device);
+ if (!ret) {
+ egg_debug ("no changes on %s", dkp_device_get_object_path (device));
+ goto out;
+ }
+
+ /* emit */
+ egg_debug ("emitting changed %s", dkp_device_get_object_path (device));
+ g_signal_emit (backend, signals[SIGNAL_DEVICE_CHANGED], 0, native, device);
+out:
+ return;
+}
+
+/**
* dkp_backend_device_add:
**/
static gboolean
-dkp_backend_device_add (DkpBackend *backend, GUdevDevice *native, gboolean emit_signal)
+dkp_backend_device_add (DkpBackend *backend, GUdevDevice *native)
{
GObject *object;
DkpDevice *device;
@@ -195,21 +202,21 @@ dkp_backend_device_add (DkpBackend *backend, GUdevDevice *native, gboolean emit_
if (object != NULL) {
device = DKP_DEVICE (object);
/* we already have the device; treat as change event */
- egg_debug ("treating add event as change event on %s", dkp_device_get_object_path (device));
- dkp_backend_device_changed (backend, native, FALSE);
+ egg_warning ("treating add event as change event on %s", dkp_device_get_object_path (device));
+ dkp_backend_device_changed (backend, native);
goto out;
}
/* get the right sort of device */
- device = dkp_backend_device_get (backend, native);
+ device = dkp_backend_device_new (backend, native);
if (device == NULL) {
- egg_debug ("not adding device %s", g_udev_device_get_sysfs_path (native));
ret = FALSE;
goto out;
}
/* emit */
- g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, native, device, emit_signal);
+ g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, native, device);
+ g_object_unref (device);
out:
return ret;
}
@@ -226,11 +233,15 @@ dkp_backend_device_remove (DkpBackend *backend, GUdevDevice *native)
/* does device exist in db? */
object = dkp_device_list_lookup (backend->priv->device_list, G_OBJECT (native));
if (object == NULL) {
- egg_debug ("ignoring remove event on %s", g_udev_device_get_sysfs_path (native));
+ egg_warning ("ignoring remove event on %s", g_udev_device_get_sysfs_path (native));
} else {
device = DKP_DEVICE (object);
/* emit */
+ egg_debug ("emitting device-removed: %s", g_udev_device_get_sysfs_path (native));
g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, native, device);
+
+ /* destroy */
+ g_object_unref (device);
}
}
@@ -244,14 +255,14 @@ dkp_backend_uevent_signal_handler_cb (GUdevClient *client, const gchar *action,
DkpBackend *backend = DKP_BACKEND (user_data);
if (g_strcmp0 (action, "add") == 0) {
- egg_debug ("add %s", g_udev_device_get_sysfs_path (device));
- dkp_backend_device_add (backend, device, TRUE);
+ egg_debug ("SYSFS add %s", g_udev_device_get_sysfs_path (device));
+ dkp_backend_device_add (backend, device);
} else if (g_strcmp0 (action, "remove") == 0) {
- egg_debug ("remove %s", g_udev_device_get_sysfs_path (device));
+ egg_debug ("SYSFS remove %s", g_udev_device_get_sysfs_path (device));
dkp_backend_device_remove (backend, device);
} else if (g_strcmp0 (action, "change") == 0) {
- egg_debug ("change %s", g_udev_device_get_sysfs_path (device));
- dkp_backend_device_changed (backend, device, FALSE);
+ egg_debug ("SYSFS change %s", g_udev_device_get_sysfs_path (device));
+ dkp_backend_device_changed (backend, device);
} else {
egg_warning ("unhandled action '%s' on %s", action, g_udev_device_get_sysfs_path (device));
}
@@ -288,7 +299,7 @@ dkp_backend_coldplug (DkpBackend *backend, DkpDaemon *daemon)
devices = g_udev_client_query_by_subsystem (backend->priv->gudev_client, subsystems[i]);
for (l = devices; l != NULL; l = l->next) {
native = l->data;
- dkp_backend_device_add (backend, native, FALSE);
+ dkp_backend_device_add (backend, native);
}
g_list_foreach (devices, (GFunc) g_object_unref, NULL);
g_list_free (devices);
@@ -311,14 +322,14 @@ dkp_backend_class_init (DkpBackendClass *klass)
g_signal_new ("device-added",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DkpBackendClass, device_added),
- NULL, NULL, dkp_marshal_VOID__POINTER_POINTER_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+ NULL, NULL, dkp_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
signals [SIGNAL_DEVICE_CHANGED] =
g_signal_new ("device-changed",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DkpBackendClass, device_changed),
- NULL, NULL, dkp_marshal_VOID__POINTER_POINTER_BOOLEAN,
- G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_BOOLEAN);
+ NULL, NULL, dkp_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
signals [SIGNAL_DEVICE_REMOVED] =
g_signal_new ("device-removed",
G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
diff --git a/src/linux/dkp-device-csr.c b/src/linux/dkp-device-csr.c
index b2f5d8a..75ac383 100644
--- a/src/linux/dkp-device-csr.c
+++ b/src/linux/dkp-device-csr.c
@@ -78,8 +78,8 @@ dkp_device_csr_poll_cb (DkpDeviceCsr *csr)
egg_debug ("Polling: %s", dkp_device_get_object_path (device));
ret = dkp_device_csr_refresh (device);
- if (ret)
- dkp_device_emit_changed (device);
+
+ /* always continue polling */
return TRUE;
}
diff --git a/src/linux/dkp-device-hid.c b/src/linux/dkp-device-hid.c
index 9ecf08e..77b0a44 100644
--- a/src/linux/dkp-device-hid.c
+++ b/src/linux/dkp-device-hid.c
@@ -137,8 +137,8 @@ dkp_device_hid_poll (DkpDeviceHid *hid)
egg_debug ("Polling: %s", dkp_device_get_object_path (device));
ret = dkp_device_hid_refresh (device);
- if (ret)
- dkp_device_emit_changed (device);
+
+ /* always continue polling */
return TRUE;
}
diff --git a/src/linux/dkp-device-supply.c b/src/linux/dkp-device-supply.c
index 05ce8fa..56f873a 100644
--- a/src/linux/dkp-device-supply.c
+++ b/src/linux/dkp-device-supply.c
@@ -614,8 +614,8 @@ dkp_device_supply_poll_battery (DkpDeviceSupply *supply)
egg_debug ("No updates on supply %s for %i seconds; forcing update", dkp_device_get_object_path (device), DKP_DEVICE_SUPPLY_REFRESH_TIMEOUT);
supply->priv->poll_timer_id = 0;
ret = dkp_device_supply_refresh (device);
- if (ret)
- dkp_device_emit_changed (device);
+
+ /* never repeat */
return FALSE;
}
diff --git a/src/linux/dkp-device-wup.c b/src/linux/dkp-device-wup.c
index d321342..99f9393 100644
--- a/src/linux/dkp-device-wup.c
+++ b/src/linux/dkp-device-wup.c
@@ -90,8 +90,8 @@ dkp_device_wup_poll_cb (DkpDeviceWup *wup)
egg_debug ("Polling: %s", dkp_device_get_object_path (device));
ret = dkp_device_wup_refresh (device);
- if (ret)
- dkp_device_emit_changed (device);
+
+ /* always continue polling */
return TRUE;
}
diff --git a/src/linux/dkp-input.c b/src/linux/dkp-input.c
index 59b4cf4..0ea72b5 100644
--- a/src/linux/dkp-input.c
+++ b/src/linux/dkp-input.c
@@ -152,7 +152,9 @@ dkp_input_event_io (GIOChannel *channel, GIOCondition condition, gpointer data)
/* are we set */
ret = test_bit (input->priv->event.code, bitmask);
- dkp_daemon_set_lid_is_closed (input->priv->daemon, ret, TRUE);
+ g_object_set (input->priv->daemon,
+ "lid-is-closed", ret,
+ NULL);
}
out:
return TRUE;
@@ -251,8 +253,9 @@ dkp_input_coldplug (DkpInput *input, DkpDaemon *daemon, GUdevDevice *d)
/* set if we are closed */
egg_debug ("using %s for lid event", native_path);
- dkp_daemon_set_lid_is_closed (daemon, test_bit (SW_LID, bitmask), FALSE);
-
+ g_object_set (input->priv->daemon,
+ "lid-is-closed", test_bit (SW_LID, bitmask),
+ NULL);
out:
g_free (path);
g_free (contents);
diff --git a/src/org.freedesktop.DeviceKit.Power.xml b/src/org.freedesktop.DeviceKit.Power.xml
index dd310cd..f6f3df9 100644
--- a/src/org.freedesktop.DeviceKit.Power.xml
+++ b/src/org.freedesktop.DeviceKit.Power.xml
@@ -101,6 +101,17 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
<!-- ************************************************************ -->
+ <signal name="Changed">
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Emitted when one or more properties on the object changes.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+ <!-- ************************************************************ -->
+
<method name="Suspend">
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
<doc:doc>
@@ -127,6 +138,7 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
</doc:doc>
</method>
+
<!-- ************************************************************ -->
<property name="daemon-version" type="s" access="read">
@@ -181,16 +193,6 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
</doc:doc>
</property>
- <signal name="Changed">
- <doc:doc>
- <doc:description>
- <doc:para>
- Emitted when one or more properties on the object changes.
- </doc:para>
- </doc:description>
- </doc:doc>
- </signal>
-
</interface>
</node>