1 diff --git a/src/gpm-engine.c b/src/gpm-engine.c
2 index fe458e3..56d19e2 100644
5 @@ -84,7 +84,29 @@ static UpDevice *gpm_engine_get_composite_device (GpmEngine *engine, UpDevice *o
6 static UpDevice *gpm_engine_update_composite_device (GpmEngine *engine, UpDevice *original_device);
7 #if UP_CHECK_VERSION (0, 99, 0)
8 static void gpm_engine_device_changed_cb (UpDevice *device, GParamSpec *pspec, GpmEngine *engine);
11 +#define GPM_ENGINE_WARNING_NONE UP_DEVICE_LEVEL_NONE
12 +#define GPM_ENGINE_WARNING_DISCHARGING UP_DEVICE_LEVEL_DISCHARGING
13 +#define GPM_ENGINE_WARNING_LOW UP_DEVICE_LEVEL_LOW
14 +#define GPM_ENGINE_WARNING_CRITICAL UP_DEVICE_LEVEL_CRITICAL
15 +#define GPM_ENGINE_WARNING_ACTION UP_DEVICE_LEVEL_ACTION
18 + * gpm_engine_get_warning:
20 + * This gets the possible engine state for the device according to the
21 + * policy, which could be per-percent, or per-time.
23 + * Return value: A GpmEngine state, e.g. GPM_ENGINE_WARNING_DISCHARGING
26 +gpm_engine_get_warning (GpmEngine *engine, UpDevice *device)
28 + UpDeviceLevel warning;
29 + g_object_get (device, "warning-level", &warning, NULL);
35 GPM_ENGINE_WARNING_NONE = 0,
36 @@ -226,6 +248,7 @@ gpm_engine_get_warning (GpmEngine *engine, UpDevice *device)
43 * gpm_engine_get_summary:
44 @@ -282,12 +305,20 @@ gpm_engine_get_summary (GpmEngine *engine)
48 +#if UP_CHECK_VERSION (0, 99, 0)
49 +gpm_engine_get_icon_priv (GpmEngine *engine, UpDeviceKind device_kind, UpDeviceLevel warning, gboolean use_state)
51 gpm_engine_get_icon_priv (GpmEngine *engine, UpDeviceKind device_kind, GpmEngineWarning warning, gboolean use_state)
57 +#if UP_CHECK_VERSION (0, 99, 0)
58 + UpDeviceLevel warning_temp;
60 GpmEngineWarning warning_temp;
65 @@ -572,6 +603,9 @@ gpm_engine_device_check_capacity (GpmEngine *engine, UpDevice *device)
67 gpm_engine_get_composite_device (GpmEngine *engine, UpDevice *original_device)
69 +#if UP_CHECK_VERSION (0, 99, 0)
70 + return engine->priv->battery_composite;
72 guint battery_devices = 0;
75 @@ -601,6 +635,7 @@ gpm_engine_get_composite_device (GpmEngine *engine, UpDevice *original_device)
77 /* return composite device or original device */
83 @@ -609,6 +644,18 @@ gpm_engine_get_composite_device (GpmEngine *engine, UpDevice *original_device)
85 gpm_engine_update_composite_device (GpmEngine *engine, UpDevice *original_device)
87 +#if UP_CHECK_VERSION (0, 99, 0)
90 + text = up_device_to_text (engine->priv->battery_composite);
91 + egg_debug ("composite:\n%s", text);
94 + /* force update of icon */
95 + gpm_engine_recalculate_state_icon (engine);
97 + return engine->priv->battery_composite;
100 gdouble percentage = 0.0;
101 gdouble energy = 0.0;
102 @@ -720,6 +767,7 @@ gpm_engine_update_composite_device (GpmEngine *engine, UpDevice *original_device
104 /* return composite device or original device */
110 @@ -728,7 +776,11 @@ gpm_engine_update_composite_device (GpmEngine *engine, UpDevice *original_device
112 gpm_engine_device_add (GpmEngine *engine, UpDevice *device)
114 +#if UP_CHECK_VERSION (0, 99, 0)
115 + UpDeviceLevel warning;
117 GpmEngineWarning warning;
122 @@ -762,9 +814,9 @@ gpm_engine_device_add (GpmEngine *engine, UpDevice *device)
125 #if UP_CHECK_VERSION (0, 99, 0)
126 - if (kind == UP_DEVICE_KIND_BATTERY || kind == UP_DEVICE_KIND_UPS || kind == UP_DEVICE_KIND_LINE_POWER)
128 g_signal_connect (device, "notify", G_CALLBACK (gpm_engine_device_changed_cb), engine);
129 + g_ptr_array_add (engine->priv->array, g_object_ref (device));
130 + gpm_engine_recalculate_state (engine);
134 @@ -820,10 +872,14 @@ gpm_engine_coldplug_idle_cb (GpmEngine *engine)
136 gpm_engine_device_added_cb (UpClient *client, UpDevice *device, GpmEngine *engine)
138 +#if UP_CHECK_VERSION (0, 99, 0)
139 + gpm_engine_device_add (engine, device);
142 g_ptr_array_add (engine->priv->array, g_object_ref (device));
144 gpm_engine_recalculate_state (engine);
149 @@ -866,15 +922,17 @@ gpm_engine_device_changed_cb (UpDevice *device, GParamSpec *pspec, GpmEngine *en
150 gpm_engine_device_changed_cb (UpClient *client, UpDevice *device, GpmEngine *engine)
153 -#if !UP_CHECK_VERSION(0, 99, 0)
157 UpDeviceState state_old;
158 +#if UP_CHECK_VERSION(0, 99, 0)
159 + UpDeviceLevel warning_old;
160 + UpDeviceLevel warning;
162 GpmEngineWarning warning_old;
163 GpmEngineWarning warning;
166 -#if !UP_CHECK_VERSION(0, 99, 0)
167 /* get device properties */
168 g_object_get (device,
170 @@ -885,7 +943,6 @@ gpm_engine_device_changed_cb (UpClient *client, UpDevice *device, GpmEngine *eng
171 egg_debug ("updating because %s changed", up_device_get_object_path (device));
172 device = gpm_engine_update_composite_device (engine, device);
176 /* get device properties (may be composite) */
177 g_object_get (device,
178 @@ -1070,22 +1127,10 @@ gpm_engine_init (GpmEngine *engine)
179 g_signal_connect (engine->priv->phone, "device-refresh",
180 G_CALLBACK (phone_device_refresh_cb), engine);
182 -#if UP_CHECK_VERSION(0, 99, 0)
184 - array = up_client_get_devices(engine->priv->client);
186 - for (i = 0; i < array->len; i++) {
187 - UpDevice *device = g_ptr_array_index (array, i);
188 - gpm_engine_device_added_cb(engine->priv->client, device, engine);
190 - g_ptr_array_free (array, TRUE);
194 /* create a fake virtual composite battery */
195 #if UP_CHECK_VERSION(0, 99, 0)
196 engine->priv->battery_composite = up_client_get_display_device (engine->priv->client);
197 - g_signal_connect (engine->priv->client, "notify",
198 + g_signal_connect (engine->priv->battery_composite, "notify",
199 G_CALLBACK (gpm_engine_device_changed_cb), engine);
201 engine->priv->battery_composite = up_device_new ();
202 diff --git a/src/gpm-manager.c b/src/gpm-manager.c
203 index df84cac..09bd0c0 100644
204 --- a/src/gpm-manager.c
205 +++ b/src/gpm-manager.c
206 @@ -1858,7 +1858,9 @@ gpm_manager_init (GpmManager *manager)
207 G_CALLBACK (gpm_manager_settings_changed_cb), manager);
208 manager->priv->client = up_client_new ();
209 #if UP_CHECK_VERSION(0, 99, 0)
210 - g_signal_connect (manager->priv->client, "notify",
211 + g_signal_connect (manager->priv->client, "notify::lid-is-closed",
212 + G_CALLBACK (gpm_manager_client_changed_cb), manager);
213 + g_signal_connect (manager->priv->client, "notify::on-battery",
214 G_CALLBACK (gpm_manager_client_changed_cb), manager);
216 g_signal_connect (manager->priv->client, "changed",