diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/im-menu-item.c | 32 | ||||
-rw-r--r-- | src/im-menu-item.h | 5 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/im-menu-item.c b/src/im-menu-item.c index b5940ac..eaf65a6 100644 --- a/src/im-menu-item.c +++ b/src/im-menu-item.c @@ -27,6 +27,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <gtk/gtk.h> #include "im-menu-item.h" +enum { + TIME_CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + typedef struct _ImMenuItemPrivate ImMenuItemPrivate; struct _ImMenuItemPrivate @@ -35,6 +42,8 @@ struct _ImMenuItemPrivate IndicateListenerServer * server; IndicateListenerIndicator * indicator; + glong seconds; + GtkHBox * hbox; GtkLabel * user; GtkLabel * time; @@ -92,6 +101,16 @@ im_menu_item_class_init (ImMenuItemClass *klass) object_class->dispose = im_menu_item_dispose; object_class->finalize = im_menu_item_finalize; + + signals[TIME_CHANGED] = g_signal_new(IM_MENU_ITEM_SIGNAL_TIME_CHANGED, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (ImMenuItemClass, time_changed), + NULL, NULL, + g_cclosure_marshal_VOID__LONG, + G_TYPE_NONE, 1, G_TYPE_LONG); + + return; } static void @@ -104,6 +123,8 @@ im_menu_item_init (ImMenuItem *self) priv->server = NULL; priv->indicator = NULL; + priv->seconds = 0; + /* build widgets first */ priv->icon = GTK_IMAGE(gtk_image_new()); priv->user = GTK_LABEL(gtk_label_new("")); @@ -185,6 +206,8 @@ time_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateL ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(self); + priv->seconds = propertydata->tv_sec; + time_t timet; struct tm * structtm; @@ -198,6 +221,8 @@ time_cb (IndicateListener * listener, IndicateListenerServer * server, IndicateL gtk_label_set_label(priv->time, timestring); gtk_widget_show(GTK_WIDGET(priv->time)); + g_signal_emit(G_OBJECT(self), signals[TIME_CHANGED], 0, priv->seconds, TRUE); + return; } @@ -276,3 +301,10 @@ im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, return self; } + +glong +im_menu_item_get_seconds (ImMenuItem * menuitem) +{ + ImMenuItemPrivate * priv = IM_MENU_ITEM_GET_PRIVATE(menuitem); + return priv->seconds; +} diff --git a/src/im-menu-item.h b/src/im-menu-item.h index a70f55a..34da453 100644 --- a/src/im-menu-item.h +++ b/src/im-menu-item.h @@ -36,11 +36,15 @@ G_BEGIN_DECLS #define IS_IM_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), IM_MENU_ITEM_TYPE)) #define IM_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), IM_MENU_ITEM_TYPE, ImMenuItemClass)) +#define IM_MENU_ITEM_SIGNAL_TIME_CHANGED "time-changed" + typedef struct _ImMenuItem ImMenuItem; typedef struct _ImMenuItemClass ImMenuItemClass; struct _ImMenuItemClass { GtkMenuItemClass parent_class; + + void (*time_changed) (glong seconds); }; struct _ImMenuItem { @@ -49,6 +53,7 @@ struct _ImMenuItem { GType im_menu_item_get_type (void); ImMenuItem * im_menu_item_new (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator); +glong im_menu_item_get_seconds (ImMenuItem * menuitem); G_END_DECLS |