aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2012-11-14 11:09:49 +0100
committerSebastien Bacher <seb128@ubuntu.com>2012-11-14 11:09:49 +0100
commit7ef9fc96bc96d178d84930a466fa8b1f214cfdcf (patch)
tree8e73a42fb7cc85d32f256e954d11962718bf8dbb /src
parent74bed2a1ceda75184dbc174b457f5d09d3dd47f0 (diff)
parentfb0e7bddb26dfa7b9163754269341c1449be821d (diff)
downloadayatana-indicator-power-7ef9fc96bc96d178d84930a466fa8b1f214cfdcf.tar.gz
ayatana-indicator-power-7ef9fc96bc96d178d84930a466fa8b1f214cfdcf.tar.bz2
ayatana-indicator-power-7ef9fc96bc96d178d84930a466fa8b1f214cfdcf.zip
* New upstream release:
- Fix a device display bug introduced in 12.10.3 (LP: #1075192)
Diffstat (limited to 'src')
-rw-r--r--src/device.c2
-rw-r--r--src/indicator-power.c43
2 files changed, 43 insertions, 2 deletions
diff --git a/src/device.c b/src/device.c
index 490ff1a..d028ab7 100644
--- a/src/device.c
+++ b/src/device.c
@@ -612,7 +612,7 @@ indicator_power_device_get_time_details (const IndicatorPowerDevice * device,
{
*details = g_strdup (device_name);
*accessible_name = g_strdup (device_name);
- *short_details = g_strdup (device_name);
+ *short_details = g_strdup ("");
}
else
{
diff --git a/src/indicator-power.c b/src/indicator-power.c
index 4118dcc..06f1c2e 100644
--- a/src/indicator-power.c
+++ b/src/indicator-power.c
@@ -352,12 +352,38 @@ build_menu (IndicatorPower *self)
gtk_widget_show_all (GTK_WIDGET (priv->menu));
}
+/* the higher the weight, the more interesting the device */
+static int
+get_device_kind_weight (const IndicatorPowerDevice * device)
+{
+ UpDeviceKind kind;
+ static gboolean initialized = FALSE;
+ static int weights[UP_DEVICE_KIND_LAST];
+
+ kind = indicator_power_device_get_kind (device);
+ g_return_val_if_fail (0<=kind && kind<UP_DEVICE_KIND_LAST, 0);
+
+ if (G_UNLIKELY(!initialized))
+ {
+ int i;
+
+ initialized = TRUE;
+
+ for (i=0; i<UP_DEVICE_KIND_LAST; i++)
+ weights[i] = 1;
+ weights[UP_DEVICE_KIND_BATTERY] = 2;
+ weights[UP_DEVICE_KIND_LINE_POWER] = 0;
+ }
+
+ return weights[kind];
+}
+
/* sort devices from most interesting to least interesting on this criteria:
1. discharging items from least time remaining until most time remaining
2. discharging items with an unknown time remaining
3. charging items from most time left to charge to least time left to charge
4. charging items with an unknown time remaining
- 5. everything else */
+ 5. batteries, then non-line power, then line-power */
static gint
device_compare_func (gconstpointer ga, gconstpointer gb)
{
@@ -418,6 +444,21 @@ device_compare_func (gconstpointer ga, gconstpointer gb)
}
}
+ if (!ret) /* neither device is charging nor discharging... */
+ {
+ const int weight_a = get_device_kind_weight (a);
+ const int weight_b = get_device_kind_weight (b);
+
+ if (weight_a > weight_b)
+ {
+ ret = -1;
+ }
+ else if (weight_a < weight_b)
+ {
+ ret = 1;
+ }
+ }
+
if (!ret)
ret = a_state - b_state;