summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2008-07-24 18:30:00 +0100
committerRichard Hughes <richard@hughsie.com>2008-07-24 18:30:00 +0100
commit32df1e0cc1ae92503902a1e329ed56952a942841 (patch)
tree9913c352e4028f4f0b07d4866e7a1178f698b032 /src
parent2bb27aaf1a6f754a042d67463328eb988cba88f3 (diff)
add two bits of data that session applications really want -- battery mode and low battery mode
Diffstat (limited to 'src')
-rw-r--r--src/devkit-power-daemon.c46
-rw-r--r--src/devkit-power-daemon.h4
-rw-r--r--src/org.freedesktop.DeviceKit.Power.xml63
3 files changed, 113 insertions, 0 deletions
diff --git a/src/devkit-power-daemon.c b/src/devkit-power-daemon.c
index ea9d869..06a423d 100644
--- a/src/devkit-power-daemon.c
+++ b/src/devkit-power-daemon.c
@@ -44,6 +44,8 @@ enum
DEVICE_ADDED_SIGNAL,
DEVICE_REMOVED_SIGNAL,
DEVICE_CHANGED_SIGNAL,
+ ON_BATTERY_CHANGED_SIGNAL,
+ LOW_BATTERY_CHANGED_SIGNAL,
LAST_SIGNAL,
};
@@ -57,6 +59,8 @@ struct DevkitPowerDaemonPrivate
PolKitTracker *pk_tracker;
GHashTable *map_native_path_to_device;
+ gboolean on_battery;
+ gboolean low_battery;
DevkitClient *devkit_client;
};
@@ -161,6 +165,24 @@ devkit_power_daemon_class_init (DevkitPowerDaemonClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+ signals[ON_BATTERY_CHANGED_SIGNAL] =
+ g_signal_new ("on-battery-changed",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ signals[LOW_BATTERY_CHANGED_SIGNAL] =
+ g_signal_new ("low-battery-changed",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
dbus_g_object_type_install_info (DEVKIT_TYPE_POWER_DAEMON, &dbus_glib_devkit_power_daemon_object_info);
dbus_g_error_domain_register (DEVKIT_POWER_DAEMON_ERROR,
@@ -172,6 +194,8 @@ static void
devkit_power_daemon_init (DevkitPowerDaemon *daemon)
{
daemon->priv = DEVKIT_POWER_DAEMON_GET_PRIVATE (daemon);
+ daemon->priv->on_battery = FALSE;
+ daemon->priv->low_battery = FALSE;
daemon->priv->map_native_path_to_device = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
@@ -366,6 +390,10 @@ device_remove (DevkitPowerDaemon *daemon, DevkitDevice *d)
}
}
+//TODO: hook into the devices
+//g_signal_emit (daemon, signals[ON_BATTERY_CHANGED_SIGNAL], 0, FALSE);
+//g_signal_emit (daemon, signals[LOW_BATTERY_CHANGED_SIGNAL], 0, FALSE);
+
static void
device_event_signal_handler (DevkitClient *client,
const char *action,
@@ -631,6 +659,24 @@ devkit_power_daemon_enumerate_devices (DevkitPowerDaemon *daemon,
}
gboolean
+devkit_power_daemon_get_on_battery (DevkitPowerDaemon *daemon,
+ DBusGMethodInvocation *context)
+{
+ /* this is cached as it's expensive to check all sources */
+ dbus_g_method_return (context, daemon->priv->on_battery);
+ return TRUE;
+}
+
+gboolean
+devkit_power_daemon_get_low_battery (DevkitPowerDaemon *daemon,
+ DBusGMethodInvocation *context)
+{
+ /* this is cached as it's expensive to check all sources */
+ dbus_g_method_return (context, daemon->priv->low_battery);
+ return TRUE;
+}
+
+gboolean
devkit_power_daemon_suspend (DevkitPowerDaemon *daemon, DBusGMethodInvocation *context)
{
gboolean ret;
diff --git a/src/devkit-power-daemon.h b/src/devkit-power-daemon.h
index cb8b2a4..63987f5 100644
--- a/src/devkit-power-daemon.h
+++ b/src/devkit-power-daemon.h
@@ -78,6 +78,10 @@ gboolean devkit_power_damon_local_check_auth (DevkitPowerDaemon *daemon
gboolean devkit_power_daemon_enumerate_devices (DevkitPowerDaemon *daemon,
DBusGMethodInvocation *context);
+gboolean devkit_power_daemon_get_on_battery (DevkitPowerDaemon *daemon,
+ DBusGMethodInvocation *context);
+gboolean devkit_power_daemon_get_low_battery (DevkitPowerDaemon *daemon,
+ DBusGMethodInvocation *context);
gboolean devkit_power_daemon_suspend (DevkitPowerDaemon *daemon,
DBusGMethodInvocation *context);
gboolean devkit_power_daemon_hibernate (DevkitPowerDaemon *daemon,
diff --git a/src/org.freedesktop.DeviceKit.Power.xml b/src/org.freedesktop.DeviceKit.Power.xml
index 7227c4e..48a96e2 100644
--- a/src/org.freedesktop.DeviceKit.Power.xml
+++ b/src/org.freedesktop.DeviceKit.Power.xml
@@ -71,6 +71,69 @@
</signal>
<!-- ************************************************************ -->
+ <signal name="OnBatteryChanged">
+ <arg name="on_battery" type="b">
+ <doc:doc><doc:summary>If we are on battery power.</doc:summary></doc:doc>
+ </arg>
+
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Emitted when the main power source of the system has changed.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+
+ <!-- ************************************************************ -->
+ <signal name="LowBatteryChanged">
+ <arg name="low_battery" type="b">
+ <doc:doc><doc:summary>If we are critically low on battery power.</doc:summary></doc:doc>
+ </arg>
+
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Emitted when the main power source of the system is critically low in power.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </signal>
+
+ <!-- ************************************************************ -->
+ <method name="GetOnBattery">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="on_battery" type="b">
+ <doc:doc><doc:summary>If we are on battery power.</doc:summary></doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Finds out if we are using battery so we can make policy decisions,
+ for instance not running the indexer when we are on battery power.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <!-- ************************************************************ -->
+ <method name="GetLowBattery">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg name="low_battery" type="b">
+ <doc:doc><doc:summary>If we are critically low on battery power.</doc:summary></doc:doc>
+ </arg>
+ <doc:doc>
+ <doc:description>
+ <doc:para>
+ Finds out if we are critically low on battery so we can make policy
+ decisions, for instance saving documents or turning off network
+ connections.
+ </doc:para>
+ </doc:description>
+ </doc:doc>
+ </method>
+
+ <!-- ************************************************************ -->
<method name="Suspend">
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>