try to display tray bar icon
[psensor.git] / src / main.c
index 95163e0..aaff079 100644 (file)
@@ -308,8 +308,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++;
        }
@@ -381,6 +383,12 @@ static void log_glib_info()
                  glib_micro_version);
 }
 
+static void activate(GApplication *application,
+                    gpointer data)
+{
+       ui_window_show((struct ui_psensor *)data);
+}
+
 int main(int argc, char **argv)
 {
        struct ui_psensor ui;
@@ -388,6 +396,7 @@ int main(int argc, char **argv)
        GThread *thread;
        int optc, cmdok, opti, use_libatasmart;
        char *url = NULL;
+       GApplication *app;
 
        program_name = argv[0];
 
@@ -436,6 +445,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))
        /*
@@ -513,6 +533,7 @@ int main(int argc, char **argv)
 
 #if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
        ui_appindicator_init(&ui);
+       ui_status_set_visible(1);
 #endif
 
        /*
@@ -528,6 +549,8 @@ int main(int argc, char **argv)
        /* main loop */
        gtk_main();
 
+       log_debug("Quitting...");
+
        g_mutex_lock(ui.sensors_mutex);
 
        psensor_cleanup();
@@ -555,6 +578,8 @@ int main(int argc, char **argv)
 
        config_cleanup();
 
+       log_debug("Cleanup done, closing log");
+
        log_close();
 
        return 0;