Fixed restoration of the panel divider position.
[psensor.git] / src / main.c
index 484addd..69df91b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2014 jeanfi@gmail.com
+ * Copyright (C) 2010-2017 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
@@ -31,6 +31,7 @@
 #include <config.h>
 
 #include <amd.h>
+#include <bcm2835.h>
 #include <cfg.h>
 #include <graph.h>
 #include <hdd.h>
@@ -144,6 +145,7 @@ static void *update_measures(void *data)
                gtop2_psensor_list_update(sensors);
                atasmart_psensor_list_update(sensors);
                hddtemp_psensor_list_update(sensors);
+               bcm2835_psensor_list_update(sensors);
 
                psensor_log_measures(sensors);
 
@@ -185,27 +187,20 @@ static gboolean ui_refresh_thread(gpointer data)
        struct config *cfg;
        gboolean ret;
        struct ui_psensor *ui = (struct ui_psensor *)data;
-       int use_celsius;
 
        ret = TRUE;
        cfg = ui->config;
 
        pmutex_lock(&ui->sensors_mutex);
 
-       graph_update(ui->sensors, ui->w_graph, ui->config, ui->main_window);
+       graph_update(ui->sensors, ui_get_graph(), ui->config, ui->main_window);
 
        ui_sensorlist_update(ui, 0);
 
        if (is_appindicator_supported() || is_status_supported())
                indicators_update(ui);
 
-       if (config_get_temperature_unit() == CELSIUS)
-               use_celsius = 1;
-       else
-               use_celsius = 0;
-       ui_unity_launcher_entry_update(ui->sensors,
-                                      !cfg->unity_launcher_count_disabled,
-                                      use_celsius);
+       ui_unity_launcher_entry_update(ui->sensors);
 
        if (ui->graph_update_interval != cfg->graph_update_interval) {
                ui->graph_update_interval = cfg->graph_update_interval;
@@ -234,7 +229,7 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
 {
        bool ret;
        struct psensor *s;
-       double d, high_temp;
+       double high_temp, high_default, low_default;
 
        high_temp = config_get_default_high_threshold_temperature();
 
@@ -244,23 +239,31 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
                s->cb_alarm_raised = cb_alarm_raised;
                s->cb_alarm_raised_data = ui;
 
-               ret = config_get_sensor_alarm_high_threshold
-                       (s->id, &s->alarm_high_threshold);
-
-               if (!ret) {
-                       if (s->max == UNKNOWN_DBL_VALUE) {
-                               if (s->type & SENSOR_TYPE_TEMP)
-                                       s->alarm_high_threshold = high_temp;
-                       } else {
-                               s->alarm_high_threshold = s->max;
-                       }
+               if (s->max == UNKNOWN_DBL_VALUE) {
+                       if (s->type & SENSOR_TYPE_TEMP)
+                               high_default = high_temp;
+                       else
+                               high_default = UNKNOWN_DBL_VALUE;
+               } else {
+                       high_default = s->max;
                }
 
+               ret = config_get_sensor_alarm_high_threshold
+                       (s->id, &s->alarm_high_threshold, high_default);
+
+               if (!ret)
+                       s->alarm_high_threshold = high_default;
+
+               if (s->min == UNKNOWN_DBL_VALUE)
+                       low_default = 0;
+               else
+                       low_default = s->min;
+
                ret = config_get_sensor_alarm_low_threshold
-                       (s->id, &s->alarm_low_threshold);
+                       (s->id, &s->alarm_low_threshold, low_default);
 
-               if (!ret && s->min != UNKNOWN_DBL_VALUE)
-                       s->alarm_low_threshold = s->min;
+               if (!ret)
+                       s->alarm_low_threshold = low_default;
 
                sensors++;
        }
@@ -312,25 +315,25 @@ static struct option long_options[] = {
        {NULL, 0, NULL, 0}
 };
 
-static gboolean initial_window_show(gpointer data)
+/*
+ * show the main window if there will be no way for the user to show
+ * it (no appindicator, no status icon).
+ */
+static gboolean check_ui_visible(gpointer data)
 {
        struct ui_psensor *ui;
 
-       log_debug("initial_window_show()");
+       log_debug("check_ui_visible()");
 
        ui = (struct ui_psensor *)data;
 
        log_debug("is_status_supported: %d", is_status_supported());
        log_debug("is_appindicator_supported: %d",
                   is_appindicator_supported());
-       log_debug("hide_on_startup: %d", ui->config->hide_on_startup);
 
-       if (!ui->config->hide_on_startup
-           || (!is_appindicator_supported() && !is_status_supported()))
+       if (!is_appindicator_supported() && !is_status_supported())
                ui_window_show(ui);
 
-       ui_window_update(ui);
-
        return FALSE;
 }
 
@@ -422,6 +425,8 @@ static struct psensor **create_sensors_list(const char *url)
 
                if (config_is_udisks2_enabled())
                        udisks2_psensor_list_append(&sensors, 600);
+
+               bcm2835_psensor_list_append(&sensors, 600);
        }
 
        associate_preferences(sensors);
@@ -538,19 +543,20 @@ int main(int argc, char **argv)
        g_timeout_add(1000 * ui.graph_update_interval, ui_refresh_thread, &ui);
 
        ui_appindicator_init(&ui);
+       ui_unity_init();
 
        gdk_notify_startup_complete();
 
-       /*
-        * hack, did not find a cleaner solution.
-        * wait 30s to ensure that the status icon is attempted to be
-        * drawn before determining whether the main window must be
-        * show.
-        */
-       if  (ui.config->hide_on_startup)
-               g_timeout_add(30000, (GSourceFunc)initial_window_show, &ui);
+       log_debug("hide_on_startup: %d", ui.config->hide_on_startup);
+       if (ui.config->hide_on_startup)
+               /* Wait 30s to allow attempt to show status icon or other UI,
+                * then check whether any UI is accessible. If not, then main
+                * window must be shown despite hide_on_startup preference.
+                * There may be a cleaner way to deal with this.
+                */
+               g_timeout_add(30000, (GSourceFunc)check_ui_visible, &ui);
        else
-               initial_window_show(&ui);
+               ui_window_show(&ui);
 
        /* main loop */
        gtk_main();