From 91975606424c3926d46344fdf3775eab11529bb2 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Tue, 20 Jul 2010 10:52:31 +0200 Subject: Calendar keyboard navigation. --- src/idocalendarmenuitem.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/idocalendarmenuitem.c b/src/idocalendarmenuitem.c index f9d1532..9ad68bb 100644 --- a/src/idocalendarmenuitem.c +++ b/src/idocalendarmenuitem.c @@ -32,6 +32,9 @@ static gboolean ido_calendar_menu_item_button_release (GtkWidget *widget GdkEventButton *event); static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget, GdkEventButton *event); +static gboolean ido_calendar_menu_item_key_press (GtkWidget *widget, + GdkEventKey *event, + gpointer data); static void ido_calendar_menu_item_send_focus_change (GtkWidget *widget, gboolean in); static void calendar_realized_cb (GtkWidget *widget, @@ -138,6 +141,36 @@ ido_calendar_menu_item_send_focus_change (GtkWidget *widget, gdk_event_free (event); } +static gboolean +ido_calendar_menu_item_key_press (GtkWidget *widget, + GdkEventKey *event, + gpointer data) +{ + IdoCalendarMenuItem *menuitem = (IdoCalendarMenuItem *)data; + + if (menuitem->priv->selected) + { + GtkWidget *calendar = menuitem->priv->calendar; + + gtk_widget_event (calendar, + ((GdkEvent *)(void*)(event))); + + if (calendar->window != NULL) + { + gdk_window_raise (calendar->window); + } + + if (!gtk_widget_has_focus (calendar)) + { + gtk_widget_grab_focus (calendar); + } + + return event->keyval != GDK_Return; + } + + return FALSE; +} + static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget, GdkEventButton *event) @@ -203,6 +236,11 @@ calendar_realized_cb (GtkWidget *widget, gdk_window_raise (widget->window); } + g_signal_connect (GTK_WIDGET (item)->parent, + "key-press-event", + G_CALLBACK (ido_calendar_menu_item_key_press), + item); + ido_calendar_menu_item_send_focus_change (widget, TRUE); } -- cgit v1.2.3