Fixed restoration of the panel divider position.
[psensor.git] / src / ui_status.c
index df79172..22ba5c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2011 jeanfi@gmail.com
+ * Copyright (C) 2010-2016 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
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 02110-1301 USA
  */
-
-#include "log.h"
+#include <plog.h>
 #include "ui_status.h"
 
+static const char *ICON = "psensor_normal";
+static const char *ATTENTION_ICON = "psensor_hot";
+
 static GtkStatusIcon *status;
-static unsigned status_attention;
+static unsigned int status_attention;
 
 static void cb_activate(GtkStatusIcon *icon,
                        gpointer data)
 {
        log_debug("cb_activate()");
-
        ui_window_show((struct ui_psensor *)data);
 }
 
@@ -42,13 +43,13 @@ static void cb_popup_menu(GtkStatusIcon *icon,
 void ui_status_init(struct ui_psensor *ui)
 {
        if (status)
-               return ;
+               return;
 
        log_debug("ui_status_create()");
 
        status = gtk_status_icon_new();
-       gtk_status_icon_set_from_icon_name(status, "psensor_normal");
-       gtk_status_icon_set_visible(status, TRUE);
+       gtk_status_icon_set_from_icon_name(status, ICON);
+       ui_status_set_visible(0);
 
        g_signal_connect(G_OBJECT(status),
                         "popup-menu",
@@ -61,16 +62,19 @@ void ui_status_init(struct ui_psensor *ui)
                         ui);
 }
 
-int is_status_supported()
+int is_status_supported(void)
 {
-       return gtk_status_icon_is_embedded(status);
+       return status && gtk_status_icon_is_embedded(status);
 }
 
-void ui_status_cleanup()
+void ui_status_cleanup(void)
 {
        log_debug("ui_status_cleanup()");
 
-       g_object_unref(G_OBJECT(status));
+       if (status) {
+               g_object_unref(G_OBJECT(status));
+               status = NULL;
+       }
 }
 
 void ui_status_update(struct ui_psensor *ui, unsigned int attention)
@@ -78,14 +82,29 @@ void ui_status_update(struct ui_psensor *ui, unsigned int attention)
        log_debug("ui_status_update()");
 
        if (status_attention && !attention)
-               gtk_status_icon_set_from_icon_name(status, "psensor_normal");
+               gtk_status_icon_set_from_icon_name(status, ICON);
        else if (!status_attention && attention)
-               gtk_status_icon_set_from_icon_name(status, "psensor_hot");
+               gtk_status_icon_set_from_icon_name(status, ATTENTION_ICON);
 
        status_attention = attention;
 }
 
-GtkStatusIcon *ui_status_get_icon()
+GtkStatusIcon *ui_status_get_icon(struct ui_psensor *ui)
 {
+       if (!status)
+               ui_status_init(ui);
+
        return status;
 }
+
+void ui_status_set_visible(unsigned int visible)
+{
+       log_debug("ui_status_set_visible(%d)", visible);
+
+       if (status) {
+               if (visible)
+                       gtk_status_icon_set_visible(status, TRUE);
+               else
+                       gtk_status_icon_set_visible(status, FALSE);
+       }
+}