mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-02-06 02:20:34 +01:00
daemon: Add GetDisplayDevice method
And export a DisplayDevice object which can be used by desktop shells to show/hide the status icon.
This commit is contained in:
parent
e7eed719f2
commit
bda51f5284
5 changed files with 99 additions and 0 deletions
|
|
@ -51,6 +51,52 @@ method return sender=:1.386 -> dest=:1.451 reply_serial=2
|
|||
</doc:doc>
|
||||
</method>
|
||||
|
||||
<method name="GetDisplayDevice">
|
||||
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
|
||||
<arg name="device" direction="out" type="o">
|
||||
<doc:doc><doc:summary>An object path for the "display device.</doc:summary></doc:doc>
|
||||
</arg>
|
||||
|
||||
<doc:doc>
|
||||
<doc:description>
|
||||
<doc:para>
|
||||
Get the object to the "display device", a composite device that represents the
|
||||
status icon to show in desktop environments. The following standard org.freedesktop.UPower.Device
|
||||
properties will be defined (only <doc:ref type="property" to="Source:IsPresent">IsPresent</doc:ref> takes a special meaning):
|
||||
<doc:list>
|
||||
<doc:item>
|
||||
<doc:term>Type</doc:term><doc:definition>the type of the display device, UPS or Battery. Note that this value can change, as opposed to real devices.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>State</doc:term><doc:definition>the power state of the display device, such as Charging or Discharging.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>Percentage</doc:term><doc:definition>the amount of energy left on the device.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>Energy</doc:term><doc:definition>Amount of energy (measured in Wh) currently available in the power source.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>EnergyFull</doc:term><doc:definition>Amount of energy (measured in Wh) in the power source when it's considered full.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>EnergyRate</doc:term><doc:definition>Amount of energy being drained from the source, measured in W. If positive, the source is being discharged, if negative it's being charged.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>TimeToEmpty</doc:term><doc:definition>Number of seconds until the power source is considered empty.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>TimeToFull</doc:term><doc:definition>Number of seconds until the power source is considered full.</doc:definition>
|
||||
</doc:item>
|
||||
<doc:item>
|
||||
<doc:term>IsPresent</doc:term><doc:definition>Whether a status icon using this information should be presented.</doc:definition>
|
||||
</doc:item>
|
||||
</doc:list>
|
||||
</doc:para>
|
||||
</doc:description>
|
||||
</doc:doc>
|
||||
</method>
|
||||
|
||||
<!-- ************************************************************ -->
|
||||
|
||||
<signal name="DeviceAdded">
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ struct UpDaemonPrivate
|
|||
guint props_idle_id;
|
||||
|
||||
/* Display battery properties */
|
||||
UpDevice *display_device;
|
||||
UpDeviceKind kind;
|
||||
UpDeviceState state;
|
||||
gdouble percentage;
|
||||
|
|
@ -199,6 +200,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
|
|||
gdouble energy_rate_total = 0.0;
|
||||
gint64 time_to_empty_total = 0;
|
||||
gint64 time_to_full_total = 0;
|
||||
gboolean is_present_total = FALSE;
|
||||
guint num_batteries = 0;
|
||||
|
||||
/* Gather state from each device */
|
||||
|
|
@ -239,6 +241,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
|
|||
time_to_empty_total = time_to_empty;
|
||||
time_to_full_total = time_to_full;
|
||||
percentage_total = percentage;
|
||||
is_present_total = TRUE;
|
||||
break;
|
||||
}
|
||||
if (kind != UP_DEVICE_KIND_BATTERY)
|
||||
|
|
@ -259,6 +262,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
|
|||
|
||||
/* sum up composite */
|
||||
kind_total = UP_DEVICE_KIND_BATTERY;
|
||||
is_present_total = TRUE;
|
||||
energy_total += energy;
|
||||
energy_full_total += energy_full;
|
||||
energy_rate_total += energy_rate;
|
||||
|
|
@ -298,6 +302,19 @@ out:
|
|||
|
||||
daemon->priv->percentage = percentage_total;
|
||||
|
||||
g_object_set (daemon->priv->display_device,
|
||||
"type", kind_total,
|
||||
"state", state_total,
|
||||
"energy", energy_total,
|
||||
"energy-full", energy_full_total,
|
||||
"energy-rate", energy_rate_total,
|
||||
"time-to-empty", time_to_empty_total,
|
||||
"time-to-full", time_to_full_total,
|
||||
"percentage", percentage_total,
|
||||
"is-present", is_present_total,
|
||||
"power-supply", TRUE,
|
||||
NULL);
|
||||
|
||||
/* FIXME: Return whether the above actually changed significantly */
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -411,6 +428,17 @@ up_daemon_enumerate_devices (UpDaemon *daemon, DBusGMethodInvocation *context)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* up_daemon_get_display_device:
|
||||
**/
|
||||
gboolean
|
||||
up_daemon_get_display_device (UpDaemon *daemon,
|
||||
DBusGMethodInvocation *context)
|
||||
{
|
||||
dbus_g_method_return (context, up_device_get_object_path (daemon->priv->display_device));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* up_daemon_register_power_daemon:
|
||||
**/
|
||||
|
|
@ -430,6 +458,10 @@ up_daemon_register_power_daemon (UpDaemon *daemon)
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* Register the display device */
|
||||
up_device_register_display_device (daemon->priv->display_device,
|
||||
daemon);
|
||||
|
||||
/* connect to DBUS */
|
||||
priv->proxy = dbus_g_proxy_new_for_name (priv->connection,
|
||||
DBUS_SERVICE_DBUS,
|
||||
|
|
@ -1002,6 +1034,7 @@ up_daemon_init (UpDaemon *daemon)
|
|||
daemon->priv->polkit = up_polkit_new ();
|
||||
daemon->priv->config = up_config_new ();
|
||||
daemon->priv->power_devices = up_device_list_new ();
|
||||
daemon->priv->display_device = up_device_new ();
|
||||
|
||||
daemon->priv->use_percentage_for_policy = up_config_get_boolean (daemon->priv->config, "UsePercentageForPolicy");
|
||||
load_percentage_policy (daemon, FALSE);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,8 @@ void up_daemon_emit_properties_changed (DBusGConnection *gconnection,
|
|||
/* exported */
|
||||
gboolean up_daemon_enumerate_devices (UpDaemon *daemon,
|
||||
DBusGMethodInvocation *context);
|
||||
gboolean up_daemon_get_display_device (UpDaemon *daemon,
|
||||
DBusGMethodInvocation *context);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
|
|||
|
|
@ -717,6 +717,22 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* up_device_register_display_device:
|
||||
**/
|
||||
gboolean
|
||||
up_device_register_display_device (UpDevice *device,
|
||||
UpDaemon *daemon)
|
||||
{
|
||||
g_return_val_if_fail (UP_IS_DEVICE (device), FALSE);
|
||||
|
||||
device->priv->daemon = g_object_ref (daemon);
|
||||
device->priv->object_path = g_build_filename (UP_DEVICES_DBUS_PATH, "DisplayDevice", NULL);
|
||||
dbus_g_connection_register_g_object (device->priv->system_bus_connection,
|
||||
device->priv->object_path, G_OBJECT (device));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* up_device_get_statistics:
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -76,6 +76,8 @@ UpDevice *up_device_new (void);
|
|||
gboolean up_device_coldplug (UpDevice *device,
|
||||
UpDaemon *daemon,
|
||||
GObject *native);
|
||||
gboolean up_device_register_display_device (UpDevice *device,
|
||||
UpDaemon *daemon);
|
||||
UpDaemon *up_device_get_daemon (UpDevice *device);
|
||||
GObject *up_device_get_native (UpDevice *device);
|
||||
const gchar *up_device_get_object_path (UpDevice *device);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue