/*
- * Copyright (C) 2010-2012 jeanfi@gmail.com
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
*/
#include <unity.h>
-#include "psensor.h"
+#include <cfg.h>
+#include <temperature.h>
+#include <ui_unity.h>
-static int initialized;
static UnityLauncherEntry *psensor_entry;
-static unsigned int last_visible = -1;
+static bool count_visible;
-void ui_unity_launcher_entry_update(struct psensor **sensors,
- unsigned int show)
+static void
+count_visible_changed_cbk(GSettings *settings, gchar *key, gpointer data)
{
- if (!initialized) {
- psensor_entry = unity_launcher_entry_get_for_desktop_file
- ("psensor.desktop");
+ count_visible = config_is_count_visible();
+ if (count_visible) {
unity_launcher_entry_set_count(psensor_entry, 0);
- initialized = 1;
+ unity_launcher_entry_set_count_visible(psensor_entry, TRUE);
+ } else {
+ unity_launcher_entry_set_count_visible(psensor_entry, FALSE);
}
+}
+
+static double get_max_current_value(struct psensor **sensors, unsigned int type)
+{
+ double m, v;
+ struct psensor *s;
+
+ m = UNKNOWN_DBL_VALUE;
+ while (*sensors) {
+ s = *sensors;
+
+ if ((s->type & type) && config_is_sensor_graph_enabled(s->id)) {
+ v = psensor_get_current_value(s);
- if (last_visible != show) {
- if (show)
- unity_launcher_entry_set_count_visible(psensor_entry,
- TRUE);
- else
- unity_launcher_entry_set_count_visible(psensor_entry,
- FALSE);
- last_visible = show;
+ if (m == UNKNOWN_DBL_VALUE || v > m)
+ m = v;
+ }
+
+ sensors++;
}
- if (sensors && *sensors) {
- double v;
+ return m;
+}
+
+void ui_unity_launcher_entry_update(struct psensor **sensors)
+{
+ double v;
+
+ if (!count_visible || !sensors || !*sensors)
+ return;
- v = psensor_get_max_current_value(sensors, SENSOR_TYPE_TEMP);
+ v = get_max_current_value(sensors, SENSOR_TYPE_TEMP);
+
+ if (v != UNKNOWN_DBL_VALUE) {
+ if (config_get_temperature_unit() == FAHRENHEIT)
+ v = celsius_to_fahrenheit(v);
unity_launcher_entry_set_count(psensor_entry, v);
}
}
+
+void ui_unity_init(void)
+{
+ psensor_entry = unity_launcher_entry_get_for_desktop_file
+ (PSENSOR_DESKTOP_FILE);
+
+ count_visible = config_is_count_visible();
+
+ if (count_visible) {
+ unity_launcher_entry_set_count(psensor_entry, 0);
+ unity_launcher_entry_set_count_visible(psensor_entry, TRUE);
+ } else {
+ unity_launcher_entry_set_count_visible(psensor_entry, FALSE);
+ }
+
+ g_signal_connect_after(config_get_GSettings(),
+ "changed::interface-unity-launcher-count-disabled",
+ G_CALLBACK(count_visible_changed_cbk),
+ NULL);
+}