put cleanup stuff into a separate fct
[psensor.git] / src / main.c
index f104c6a..c42f18e 100644 (file)
@@ -135,30 +135,22 @@ update_psensor_values_size(struct psensor **sensors, struct config *cfg)
        }
 }
 
-static void log_measures(struct psensor **sensors)
+static void update_measures(struct ui_psensor *ui)
 {
-       if (log_level == LOG_DEBUG)
-               while (*sensors) {
-                       log_debug("Measure: %s %.2f",
-                                  (*sensors)->name,
-                                  psensor_get_current_value(*sensors));
-
-                       sensors++;
-               }
-}
+       struct psensor **sensors;
+       struct config *cfg;
+       int period;
 
-void update_psensor_measures(struct ui_psensor *ui)
-{
-       struct psensor **sensors = ui->sensors;
-       struct config *cfg = ui->config;
+       cfg = ui->config;
 
        while (1) {
                g_mutex_lock(ui->sensors_mutex);
 
+               sensors = ui->sensors;
                if (!sensors)
                        return;
 
-               update_psensor_values_size(sensors, ui->config);
+               update_psensor_values_size(sensors, cfg);
 
                psensor_list_update_measures(sensors);
 #ifdef HAVE_REMOTE_SUPPORT
@@ -171,11 +163,13 @@ void update_psensor_measures(struct ui_psensor *ui)
                amd_psensor_list_update(sensors);
 #endif
 
-               log_measures(sensors);
+               psensor_log_measures(sensors);
+
+               period = cfg->sensor_update_interval;
 
                g_mutex_unlock(ui->sensors_mutex);
 
-               sleep(cfg->sensor_update_interval);
+               sleep(period);
        }
 }
 
@@ -215,7 +209,7 @@ gboolean ui_refresh_thread(gpointer data)
 
        g_mutex_lock(ui->sensors_mutex);
 
-       graph_update(ui->sensors, ui->w_graph, ui->config);
+       graph_update(ui->sensors, ui->w_graph, ui->config, ui->main_window);
 
        ui_sensorlist_update(ui);
 
@@ -224,7 +218,8 @@ gboolean ui_refresh_thread(gpointer data)
 
 #ifdef HAVE_UNITY
        ui_unity_launcher_entry_update(ui->sensors,
-                                      !cfg->unity_launcher_count_disabled);
+                                      !cfg->unity_launcher_count_disabled,
+                                      cfg->temperature_unit == CELCIUS);
 #endif
 
        if (ui->graph_update_interval != cfg->graph_update_interval) {
@@ -241,7 +236,7 @@ gboolean ui_refresh_thread(gpointer data)
        return ret;
 }
 
-void cb_alarm_raised(struct psensor *sensor, void *data)
+static void cb_alarm_raised(struct psensor *sensor, void *data)
 {
 #ifdef HAVE_LIBNOTIFY
        if (sensor->enabled)
@@ -319,8 +314,10 @@ static void associate_preferences(struct psensor **sensors)
 
                n = config_get_sensor_name(s->id);
 
-               if (n)
+               if (n) {
+                       free(s->name);
                        s->name = n;
+               }
 
                sensor_cur++;
        }
@@ -392,6 +389,49 @@ static void log_glib_info()
                  glib_micro_version);
 }
 
+static void activate(GApplication *application,
+                    gpointer data)
+{
+       ui_window_show((struct ui_psensor *)data);
+}
+
+/*
+ * Release memory for Valgrind.
+ */
+static void cleanup(struct ui_psensor *ui)
+{
+       g_mutex_lock(ui->sensors_mutex);
+
+       psensor_cleanup();
+
+#ifdef HAVE_NVIDIA
+       nvidia_cleanup();
+#endif
+#ifdef HAVE_LIBATIADL
+       amd_cleanup();
+#endif
+#ifdef HAVE_REMOTE_SUPPORT
+       rsensor_cleanup();
+#endif
+
+       psensor_list_free(ui->sensors);
+       ui->sensors = NULL;
+
+#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
+       ui_appindicator_cleanup();
+#endif
+
+       ui_status_cleanup();
+
+       g_mutex_unlock(ui->sensors_mutex);
+
+       config_cleanup();
+
+       log_debug("Cleanup done, closing log");
+
+       log_close();
+}
+
 int main(int argc, char **argv)
 {
        struct ui_psensor ui;
@@ -399,6 +439,7 @@ int main(int argc, char **argv)
        GThread *thread;
        int optc, cmdok, opti, use_libatasmart;
        char *url = NULL;
+       GApplication *app;
 
        program_name = argv[0];
 
@@ -447,6 +488,17 @@ int main(int argc, char **argv)
 
        log_init();
 
+       app = g_application_new("wpitchoune.psensor", 0);
+       g_application_register(app, NULL, NULL);
+
+       if (g_application_get_is_remote(app)) {
+               g_application_activate(app);
+               log_debug(_("Psensor instance already exists"));
+               exit(EXIT_SUCCESS);
+       }
+
+       g_signal_connect(app, "activate", G_CALLBACK(activate), &ui);
+
        log_glib_info();
 #if !(GLIB_CHECK_VERSION(2, 31, 0))
        /*
@@ -507,10 +559,12 @@ int main(int argc, char **argv)
        /* drawing box */
        ui.w_graph = ui_graph_create(&ui);
 
+       ui_enable_alpha_channel(&ui);
+
        /* sensor list */
        ui_sensorlist_create(&ui);
 
-       thread = g_thread_create((GThreadFunc) update_psensor_measures,
+       thread = g_thread_create((GThreadFunc) update_measures,
                                 &ui, TRUE, &error);
 
        if (!thread)
@@ -537,34 +591,8 @@ int main(int argc, char **argv)
        /* main loop */
        gtk_main();
 
-       g_mutex_lock(ui.sensors_mutex);
-
-       psensor_cleanup();
-
-#ifdef HAVE_NVIDIA
-       nvidia_cleanup();
-#endif
-#ifdef HAVE_LIBATIADL
-       amd_cleanup();
-#endif
-#ifdef HAVE_REMOTE_SUPPORT
-       rsensor_cleanup();
-#endif
-
-       psensor_list_free(ui.sensors);
-       ui.sensors = NULL;
-
-#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
-       ui_appindicator_cleanup();
-#endif
-
-       ui_status_cleanup();
-
-       g_mutex_unlock(ui.sensors_mutex);
-
-       config_cleanup();
-
-       log_close();
+       log_debug("Quitting...");
+       cleanup(&ui);
 
        return 0;
 }