X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fui_status.c;h=618b7ee57eaadd50574a290ec07fa1f5b9e6b8d1;hb=45c8086f97097df36ba8cd0552f152be80f79b12;hp=b3a0b2d01257b1588f998eb4e4ba0429ef16c695;hpb=d915d840d60e6a634fbd38be2b92c1a293aed18c;p=psensor.git diff --git a/src/ui_status.c b/src/ui_status.c index b3a0b2d..618b7ee 100644 --- a/src/ui_status.c +++ b/src/ui_status.c @@ -16,31 +16,81 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ - -#include - #include "log.h" #include "ui_status.h" -GtkStatusIcon *status; +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); +} -void ui_status_init() +static void cb_popup_menu(GtkStatusIcon *icon, + guint button, + guint activate_time, + gpointer data) { - log_printf(LOG_DEBUG, "ui_status_create()"); + 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"); - gtk_status_icon_set_visible(status, TRUE); + 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); + return status && gtk_status_icon_is_embedded(status); } void ui_status_cleanup() { - log_printf(LOG_DEBUG, "ui_status_cleanup()"); + log_debug("ui_status_cleanup()"); + + if (status) { + g_object_unref(G_OBJECT(status)); + status = NULL; + } +} + +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(struct ui_psensor *ui) +{ + if (!status) + ui_status_init(ui); - g_object_unref(G_OBJECT(status)); + return status; }