From a83ca848ba834defb5bc54fe03ffb7409964846b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 10 Nov 2011 22:33:09 +0000 Subject: [PATCH] status icon support --- src/Makefile.am | 3 ++- src/Makefile.in | 19 ++++++++++--------- src/main.c | 6 ++---- src/ui.c | 26 +++++++++++--------------- src/ui_appindicator.h | 5 +++++ src/ui_status.c | 37 +++++++++++++++++++++++++++++++++---- src/ui_status.h | 4 +++- 7 files changed, 66 insertions(+), 34 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index f6e2f84..622d225 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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.c +psensor_SOURCES += ui_appindicator.c LIBS += $(APPINDICATOR_LIBS) AM_CPPFLAGS += $(APPINDICATOR_CFLAGS) endif diff --git a/src/Makefile.in b/src/Makefile.in index 6e6109b..0760728 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -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.c +@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 diff --git a/src/main.c b/src/main.c index e9277d1..d2d7e8b 100644 --- a/src/main.c +++ b/src/main.c @@ -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 */ diff --git a/src/ui.c b/src/ui.c index 9bf4b82..01cc804 100644 --- 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) diff --git a/src/ui_appindicator.h b/src/ui_appindicator.h index a756388..606e698 100644 --- a/src/ui_appindicator.h +++ b/src/ui_appindicator.h @@ -20,11 +20,16 @@ #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 diff --git a/src/ui_status.c b/src/ui_status.c index b3a0b2d..d9781de 100644 --- a/src/ui_status.c +++ b/src/ui_status.c @@ -24,13 +24,42 @@ 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() diff --git a/src/ui_status.h b/src/ui_status.h index ec65075..918ac91 100644 --- a/src/ui_status.h +++ b/src/ui_status.h @@ -20,7 +20,9 @@ #ifndef _PSENSOR_UI_STATUS_H_ #define _PSENSOR_UI_STATUS_H_ -void ui_status_init(); +#include + +void ui_status_init(struct ui_psensor *ui); void ui_status_cleanup(); /* Whether status icon is supported i.e. visible. */ -- 2.7.4