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(-) 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 From 3a78f4ca394856de3e7d46bdd7cca0d234b1980f Mon Sep 17 00:00:00 2001 From: karl-qdh Date: Sun, 6 Mar 2011 13:28:21 +0000 Subject: minor fixes --- src/idocalendarmenuitem.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/idocalendarmenuitem.c b/src/idocalendarmenuitem.c index 0496cc4..346b3d6 100644 --- a/src/idocalendarmenuitem.c +++ b/src/idocalendarmenuitem.c @@ -44,7 +44,10 @@ static void calendar_move_focus_cb (GtkWidget *widg IdoCalendarMenuItem *item); static void calendar_month_changed_cb (GtkWidget *widget, gpointer user_data); - +static void calendar_day_selected_double_click_cb (GtkWidget *widget, + gpointer user_data); +static void calendar_day_selected_cb (GtkWidget *widget, + gpointer user_data); struct _IdoCalendarMenuItemPrivate { GtkWidget *box; @@ -293,17 +296,17 @@ calendar_day_selected_cb (GtkWidget *widget, { IdoCalendarMenuItem *item = (IdoCalendarMenuItem *)user_data; guint day, month, year; - gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), &year, &month, &day); + gtk_calendar_get_date (GTK_CALENDAR (widget), &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) + gpointer user_data) { IdoCalendarMenuItem *item = (IdoCalendarMenuItem *)user_data; guint day, month, year; - gtk_calendar_get_date (GTK_CALENDAR (menuitem->priv->calendar), &year, &month, &day); + gtk_calendar_get_date (GTK_CALENDAR (widget), &year, &month, &day); g_signal_emit_by_name (item, "day-selected-double-click", day, NULL); } @@ -378,7 +381,7 @@ ido_calendar_menu_item_set_date (IdoCalendarMenuItem *menuitem, guint month, guint day) { - g_return_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem)); + g_return_val_if_fail(IDO_IS_CALENDAR_MENU_ITEM(menuitem), FALSE); gtk_calendar_select_month (GTK_CALENDAR (menuitem->priv->calendar), month, year); gtk_calendar_select_day (GTK_CALENDAR (menuitem->priv->calendar), day); return TRUE; -- cgit v1.2.3