X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fui_status.c;h=22ba5c0123356aca7a800f82af73e1835f1f67b3;hb=c1e20f2631a1249720e9c75d753eacfcb0f6c7b9;hp=60e6e03ea23956919e7ea5a2881641591645a560;hpb=ffa830625c29e4715949f604bde2b4c743b996d4;p=psensor.git diff --git a/src/ui_status.c b/src/ui_status.c index 60e6e03..22ba5c0 100644 --- a/src/ui_status.c +++ b/src/ui_status.c @@ -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 @@ -16,21 +16,95 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ +#include +#include "ui_status.h" -#include +static const char *ICON = "psensor_normal"; +static const char *ATTENTION_ICON = "psensor_hot"; -#include "log.h" -#include "ui_status.h" +static GtkStatusIcon *status; +static unsigned int 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, ICON); + ui_status_set_visible(0); + + 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(void) +{ + return status && gtk_status_icon_is_embedded(status); +} + +void ui_status_cleanup(void) +{ + 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, ICON); + else if (!status_attention && attention) + gtk_status_icon_set_from_icon_name(status, ATTENTION_ICON); + + status_attention = attention; +} + +GtkStatusIcon *ui_status_get_icon(struct ui_psensor *ui) +{ + if (!status) + ui_status_init(ui); + + return status; +} -void ui_status_create() +void ui_status_set_visible(unsigned int visible) { - GtkStatusIcon *status; - - log_printf(LOG_DEBUG, "ui_status_create()"); + log_debug("ui_status_set_visible(%d)", visible); - status = gtk_status_icon_new(); - gtk_status_icon_set_from_icon_name(status, "psensor"); - gtk_status_icon_set_tooltip(status, - "Psensor - Hardware Sensors Monitoring"); - gtk_status_icon_set_visible(status, TRUE); + if (status) { + if (visible) + gtk_status_icon_set_visible(status, TRUE); + else + gtk_status_icon_set_visible(status, FALSE); + } }