status icon support
authorJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 10 Nov 2011 22:33:09 +0000 (22:33 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Thu, 10 Nov 2011 22:33:09 +0000 (22:33 +0000)
src/Makefile.am
src/Makefile.in
src/main.c
src/ui.c
src/ui_appindicator.h
src/ui_status.c
src/ui_status.h

index f6e2f84..622d225 100644 (file)
@@ -30,6 +30,7 @@ psensor_SOURCES = \
        graph.h graph.c \
        main.c \
        ui.h ui.c \
+       ui_appindicator.h \
        ui_color.h ui_color.c \
        ui_graph.h ui_graph.c \
        ui_pref.h ui_pref.c \
@@ -49,7 +50,7 @@ AM_CPPFLAGS += $(LIBNOTIFY_CFLAGS)
 endif
 
 if APPINDICATOR 
-psensor_SOURCES += ui_appindicator.h ui_appindicator.
+psensor_SOURCES += ui_appindicator.c 
 LIBS +=        $(APPINDICATOR_LIBS)
 AM_CPPFLAGS += $(APPINDICATOR_CFLAGS)
 endif
index 6e6109b..0760728 100644 (file)
@@ -41,7 +41,7 @@ bin_PROGRAMS = psensor$(EXEEXT)
 @LIBNOTIFY_TRUE@am__append_4 = ui_notify.h ui_notify.c
 @LIBNOTIFY_TRUE@am__append_5 = $(LIBNOTIFY_LIBS)
 @LIBNOTIFY_TRUE@am__append_6 = $(LIBNOTIFY_CFLAGS)
-@APPINDICATOR_TRUE@am__append_7 = ui_appindicator.h ui_appindicator.
+@APPINDICATOR_TRUE@am__append_7 = ui_appindicator.c 
 @APPINDICATOR_TRUE@am__append_8 = $(APPINDICATOR_LIBS)
 @APPINDICATOR_TRUE@am__append_9 = $(APPINDICATOR_CFLAGS)
 @NVIDIA_TRUE@am__append_10 = $(NVIDIA_CFLAGS)
@@ -68,11 +68,11 @@ CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
 PROGRAMS = $(bin_PROGRAMS)
 am__psensor_SOURCES_DIST = compat.h cfg.h cfg.c graph.h graph.c main.c \
-       ui.h ui.c ui_color.h ui_color.c ui_graph.h ui_graph.c \
-       ui_pref.h ui_pref.c ui_sensorlist.h ui_sensorlist.c \
+       ui.h ui.c ui_appindicator.h ui_color.h ui_color.c ui_graph.h \
+       ui_graph.c ui_pref.h ui_pref.c ui_sensorlist.h ui_sensorlist.c \
        ui_sensorpref.h ui_sensorpref.c ui_status.h ui_status.c \
-       ui_notify.h ui_notify.c ui_appindicator.h ui_appindicator.c \
-       ui_unity.h ui_unity.c rsensor.h rsensor.c
+       ui_notify.h ui_notify.c ui_appindicator.c ui_unity.h \
+       ui_unity.c rsensor.h rsensor.c
 @LIBNOTIFY_TRUE@am__objects_1 = ui_notify.$(OBJEXT)
 @APPINDICATOR_TRUE@am__objects_2 = ui_appindicator.$(OBJEXT)
 @UNITY_TRUE@am__objects_3 = ui_unity.$(OBJEXT)
@@ -316,10 +316,11 @@ AM_CPPFLAGS = -Wall -pedantic -Werror \
        $(am__append_10) $(am__append_12) $(am__append_15) \
        $(am__append_19)
 psensor_SOURCES = compat.h cfg.h cfg.c graph.h graph.c main.c ui.h \
-       ui.c ui_color.h ui_color.c ui_graph.h ui_graph.c ui_pref.h \
-       ui_pref.c ui_sensorlist.h ui_sensorlist.c ui_sensorpref.h \
-       ui_sensorpref.c ui_status.h ui_status.c $(am__append_4) \
-       $(am__append_7) $(am__append_14) $(am__append_17)
+       ui.c ui_appindicator.h ui_color.h ui_color.c ui_graph.h \
+       ui_graph.c ui_pref.h ui_pref.c ui_sensorlist.h ui_sensorlist.c \
+       ui_sensorpref.h ui_sensorpref.c ui_status.h ui_status.c \
+       $(am__append_4) $(am__append_7) $(am__append_14) \
+       $(am__append_17)
 dist_man_MANS = psensor.1
 EXTRA_DIST = description.txt
 all: all-recursive
index e9277d1..d2d7e8b 100644 (file)
@@ -58,9 +58,7 @@
 #include "rsensor.h"
 #endif
 
-#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
 #include "ui_appindicator.h"
-#endif
 
 #ifdef HAVE_LIBNOTIFY
 #include "ui_notify.h"
@@ -422,6 +420,8 @@ int main(int argc, char **argv)
        associate_colors(ui.sensors);
        associate_cb_alarm_raised(ui.sensors, &ui);
 
+       ui_status_init(&ui);
+
        /* main window */
        ui_window_create(&ui);
        ui.sensor_box = NULL;
@@ -448,8 +448,6 @@ int main(int argc, char **argv)
        ui_appindicator_init(&ui);
 #endif
 
-       ui_status_init();
-
        gdk_notify_startup_complete();
 
        /* main loop */
index 9bf4b82..01cc804 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -23,6 +23,7 @@
 #include "ui_pref.h"
 #include "ui_sensorpref.h"
 #include "ui_sensorlist.h"
+#include "ui_status.h"
 #include "ui_appindicator.h"
 
 static void save_window_pos(struct ui_psensor *ui)
@@ -67,18 +68,13 @@ on_delete_event_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
 
        save_window_pos(ui);
 
-#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
-       if (is_appindicator_supported()) {
-               log_printf(LOG_DEBUG, "hiding, WM is supporting appindicator");
+       log_printf(LOG_DEBUG,
+                  "is_status_supported: %d\n", is_status_supported());
+
+       if (is_appindicator_supported() || is_status_supported())
                gtk_widget_hide(ui->main_window);
-       } else {
-               log_printf(LOG_DEBUG,
-                          "quitting, WM not supporting appindicator");
+       else
                ui_psensor_quit(ui);
-       }
-#else
-       ui_psensor_quit(ui);
-#endif
 
        return TRUE;
 }
@@ -279,14 +275,14 @@ void ui_window_create(struct ui_psensor *ui)
        ui->main_window = window;
        ui->menu_bar = menubar;
 
-#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
-       if (ui->config->hide_on_startup)
+       log_printf(LOG_DEBUG,
+                  "is_status_supported: %d\n", is_status_supported());
+
+       if (ui->config->hide_on_startup
+           && (is_appindicator_supported() || is_status_supported()))
                gtk_widget_show_all(ui->main_box);
        else
                ui_window_show(ui);
-#else
-       ui_window_show(ui);
-#endif
 }
 
 static void menu_bar_show(unsigned int show, struct ui_psensor *ui)
index a756388..606e698 100644 (file)
 #ifndef _PSENSOR_UI_APPINDICATOR_H_
 #define _PSENSOR_UI_APPINDICATOR_H_
 
+#include "config.h"
 #include "ui.h"
 
+#if defined(HAVE_APPINDICATOR) || defined(HAVE_APPINDICATOR_029)
 void ui_appindicator_init(struct ui_psensor *ui);
 void ui_appindicator_update(struct ui_psensor *ui);
 int is_appindicator_supported();
 void ui_appindicator_cleanup();
+#else
+#define is_appindicator_supported() 0
+#endif
 
 #endif
index b3a0b2d..d9781de 100644 (file)
 
 GtkStatusIcon *status;
 
-void ui_status_init()
+static void cb_activate(GtkStatusIcon *icon,
+                       gpointer data)
+{
+       struct ui_psensor *ui;
+
+       log_printf(LOG_DEBUG, "cb_activate()");
+
+       ui = (struct ui_psensor *)data;
+       gtk_window_present(GTK_WINDOW(ui->main_window));
+}
+
+static void cb_popup_menu(GtkStatusIcon *icon,
+                         guint button,
+                         guint activate_time,
+                         gpointer data)
+{
+       log_printf(LOG_DEBUG, "cb_popup_menu()");
+}
+
+void ui_status_init(struct ui_psensor *ui)
 {
        log_printf(LOG_DEBUG, "ui_status_create()");
 
-        status = gtk_status_icon_new();
-        gtk_status_icon_set_from_icon_name(status, "psensor");
-        gtk_status_icon_set_visible(status, TRUE);
+       status = gtk_status_icon_new();
+       gtk_status_icon_set_from_icon_name(status, "psensor");
+       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()
index ec65075..918ac91 100644 (file)
@@ -20,7 +20,9 @@
 #ifndef _PSENSOR_UI_STATUS_H_
 #define _PSENSOR_UI_STATUS_H_
 
-void ui_status_init();
+#include <ui.h>
+
+void ui_status_init(struct ui_psensor *ui);
 void ui_status_cleanup();
 
 /* Whether status icon is supported i.e. visible. */