From 368393bf30ff81a02a800441ddef5640c4b0d207 Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Sun, 6 Mar 2011 13:01:20 +0000 Subject: Added new API to the calendar menu item so we can change the selected day/date. Also added new signals for selecting days and selecting with double click. In indicator-datetime these signals will be connected to either launching evolution (double), or invoking a re-building of the appointments menu (single) from the selected day forward. In this case we should also set the date of the calendar to today by default when opening the menu. --- src/idocalendarmenuitem.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++- src/idocalendarmenuitem.h | 4 ++++ 2 files changed, 57 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/idocalendarmenuitem.c b/src/idocalendarmenuitem.c index ba46ae2..d49aacf 100644 --- a/src/idocalendarmenuitem.c +++ b/src/idocalendarmenuitem.c @@ -83,6 +83,15 @@ ido_calendar_menu_item_class_init (IdoCalendarMenuItemClass *klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + g_signal_new("day-selected", G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 1, G_TYPE_UINT); + g_signal_new("day-selected-double-click", G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 1, G_TYPE_UINT); } static void @@ -246,7 +255,15 @@ calendar_realized_cb (GtkWidget *widget, "month-changed", G_CALLBACK (calendar_month_changed_cb), item); - + g_signal_connect (item->priv->calendar, + "day-selected", + G_CALLBACK (calendar_day_selected_cb), + item); + g_signal_connect (item->priv->calendar, + "day-selected-double-click", + G_CALLBACK (calendar_day_selected_double_click_cb), + item); + ido_calendar_menu_item_send_focus_change (widget, TRUE); } @@ -270,6 +287,26 @@ calendar_month_changed_cb (GtkWidget *widget, g_signal_emit_by_name (item, "month-changed", NULL); } +static void +calendar_day_selected_cb (GtkWidget *widget, + gpointer user_data) +{ + IdoCalendarMenuItem *item = (IdoCalendarMenuItem *)user_data; + guint day, month, year; + gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), &year, &month, &day); + g_signal_emit_by_name (item, "day-selected", day, NULL); +} + +static void +calendar_day_selected_double_click_cb (GtkWidget *widget, + gpointer user_data) +{ + IdoCalendarMenuItem *item = (IdoCalendarMenuItem *)user_data; + guint day, month, year; + gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), &year, &month, &day); + g_signal_emit_by_name (item, "day-selected-double-click", day, NULL); +} + /* Public API */ GtkWidget * ido_calendar_menu_item_new (void) @@ -327,3 +364,18 @@ ido_calendar_menu_item_get_date (IdoCalendarMenuItem *menuitem, g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem)); gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), year, month, day); } + +gboolean +ido_calendar_menu_item_set_date (IdoCalendarMenuItem *menuitem, + guint year, + guint month, + guint day) +{ + g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem)); + gtk_calendar_select_month (GTK_CALENDAR (menuitem->priv->calendar), month, year); + gtk_calendar_select_day (GTK_CALENDAR (menuitem->priv->calendar), day); + return TRUE; +} + + + diff --git a/src/idocalendarmenuitem.h b/src/idocalendarmenuitem.h index cecab16..00bb7d5 100644 --- a/src/idocalendarmenuitem.h +++ b/src/idocalendarmenuitem.h @@ -65,6 +65,10 @@ void ido_calendar_menu_item_get_date (IdoCalendarMenuItem *menu guint *year, guint *month, guint *day); +gboolean ido_calendar_menu_item_set_date (IdoCalendarMenuItem *menuitem, + guint year, + guint month, + guint day); G_END_DECLS #endif /* __IDO_CALENDAR_MENU_ITEM_H__ */ -- cgit v1.2.3