logging
[psensor.git] / src / ui_status.c
index 55f732c..df79172 100644 (file)
  * 02110-1301 USA
  */
 
-#include <gtk/gtk.h>
-
 #include "log.h"
 #include "ui_status.h"
 
-void ui_status_create()
+static GtkStatusIcon *status;
+static unsigned status_attention;
+
+static void cb_activate(GtkStatusIcon *icon,
+                       gpointer data)
+{
+       log_debug("cb_activate()");
+
+       ui_window_show((struct ui_psensor *)data);
+}
+
+static void cb_popup_menu(GtkStatusIcon *icon,
+                         guint button,
+                         guint activate_time,
+                         gpointer data)
+{
+       log_debug("cb_popup_menu()");
+}
+
+void ui_status_init(struct ui_psensor *ui)
+{
+       if (status)
+               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);
+
+       g_signal_connect(G_OBJECT(status),
+                        "popup-menu",
+                        G_CALLBACK(cb_popup_menu),
+                        NULL);
+
+       g_signal_connect(G_OBJECT(status),
+                        "activate",
+                        G_CALLBACK(cb_activate),
+                        ui);
+}
+
+int is_status_supported()
+{
+       return gtk_status_icon_is_embedded(status);
+}
+
+void ui_status_cleanup()
+{
+       log_debug("ui_status_cleanup()");
+
+       g_object_unref(G_OBJECT(status));
+}
+
+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");
+       else if (!status_attention && attention)
+               gtk_status_icon_set_from_icon_name(status, "psensor_hot");
+
+       status_attention = attention;
+}
+
+GtkStatusIcon *ui_status_get_icon()
 {
-       GtkStatusIcon *tray_icon;
-       
-       log_printf(LOG_DEBUG, "ui_status_create()");
-
-        tray_icon = gtk_status_icon_new();
-        gtk_status_icon_set_from_icon_name(tray_icon, 
-                                           GTK_STOCK_MEDIA_STOP);
-        gtk_status_icon_set_tooltip(tray_icon, 
-                                    "Example Tray Icon");
-        gtk_status_icon_set_visible(tray_icon, TRUE);
+       return status;
 }