From c65fbd94c0daff4ed02df7447e8eeaddd9cff9c0 Mon Sep 17 00:00:00 2001 From: Harry Lu Date: Fri, 5 Dec 2003 02:01:46 +0000 Subject: Fix for bugzilla bug #51624 and #51627. 2003-12-04 Harry Lu Fix for bugzilla bug #51624 and #51627. * e-calendar-item.c: (e_calendar_item_selection_add_days): set the date to the first day of the month so that user can use keyboard's arrow key to select a date. (e_calendar_item_set_selection_if_emission): only set selection_changed if emission is TRUE. * e-calendar.c: (e_calendar_init): add back the "clicked" handler so that user can use keyboard to click the button. (e_calendar_start_auto_move): no need to move since it is already handled by the clicked handler (e_calendar_on_prev_clicked), (e_calendar_on_next_clicked): move the month here. * e-dateedit.c: (e_date_edit_show_date_popup): use gdk_window_focus instead of gdk_keyboard_grab so that the focus won't lost if user click the button with keyboard. (hide_date_popup): no need to call gdk_keyboard_ungrab. svn path=/trunk/; revision=23642 --- widgets/misc/ChangeLog | 20 ++++++++++++++++++++ widgets/misc/e-calendar-item.c | 13 +++++++++---- widgets/misc/e-calendar.c | 29 ++++++++++++++++++++++------- widgets/misc/e-dateedit.c | 3 +-- 4 files changed, 52 insertions(+), 13 deletions(-) (limited to 'widgets/misc') diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index 09dbb12325..e5d357b31e 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,23 @@ +2003-12-04 Harry Lu + + Fix for bugzilla bug #51624 and #51627. + + * e-calendar-item.c: (e_calendar_item_selection_add_days): + set the date to the first day of the month so that user can use + keyboard's arrow key to select a date. + (e_calendar_item_set_selection_if_emission): only set selection_changed + if emission is TRUE. + * e-calendar.c: (e_calendar_init): add back the "clicked" handler so + that user can use keyboard to click the button. + (e_calendar_start_auto_move): no need to move since it is already + handled by the clicked handler + (e_calendar_on_prev_clicked), (e_calendar_on_next_clicked): move the + month here. + * e-dateedit.c: (e_date_edit_show_date_popup): use gdk_window_focus + instead of gdk_keyboard_grab so that the focus won't lost if user click + the button with keyboard. + (hide_date_popup): no need to call gdk_keyboard_ungrab. + 2003-12-02 Ettore Perazzoli * e-source-selector.c (init): Set the mode on the text cell diff --git a/widgets/misc/e-calendar-item.c b/widgets/misc/e-calendar-item.c index 83bdbab49e..bde45441f6 100644 --- a/widgets/misc/e-calendar-item.c +++ b/widgets/misc/e-calendar-item.c @@ -1624,8 +1624,12 @@ e_calendar_item_selection_add_days (ECalendarItem *calitem, gint n_days, g_return_if_fail (E_IS_CALENDAR_ITEM (calitem)); - if (!e_calendar_item_get_selection (calitem, &gdate_start, &gdate_end)) - return; + if (!e_calendar_item_get_selection (calitem, &gdate_start, &gdate_end)) { + /* We set the date to the first day of the month */ + g_date_set_dmy (&gdate_start, 1, calitem->month + 1, calitem->year); + gdate_end = gdate_start; + } + if (multi_selection && calitem->max_days_selected > 1) { gint days_between; @@ -2898,9 +2902,10 @@ e_calendar_item_set_selection_if_emission (ECalendarItem *calitem, || calitem->selection_end_month_offset != new_end_month_offset || calitem->selection_end_day != new_end_day) { need_update = TRUE; - calitem->selection_changed = TRUE; - if (emission) + if (emission) { + calitem->selection_changed = TRUE; e_calendar_item_queue_signal_emission (calitem); + } calitem->selection_set = TRUE; calitem->selection_start_month_offset = new_start_month_offset; calitem->selection_start_day = new_start_day; diff --git a/widgets/misc/e-calendar.c b/widgets/misc/e-calendar.c index 9a5f75769f..402e390df0 100644 --- a/widgets/misc/e-calendar.c +++ b/widgets/misc/e-calendar.c @@ -93,8 +93,10 @@ static gboolean e_calendar_focus (GtkWidget *widget, static void e_calendar_on_prev_pressed (ECalendar *cal); static void e_calendar_on_prev_released (ECalendar *cal); +static void e_calendar_on_prev_clicked (ECalendar *cal); static void e_calendar_on_next_pressed (ECalendar *cal); static void e_calendar_on_next_released (ECalendar *cal); +static void e_calendar_on_next_clicked (ECalendar *cal); static void e_calendar_start_auto_move (ECalendar *cal, gboolean moving_forward); @@ -165,6 +167,9 @@ e_calendar_init (ECalendar *cal) gtk_signal_connect_object (GTK_OBJECT (button), "released", G_CALLBACK (e_calendar_on_prev_released), GTK_OBJECT (cal)); + gtk_signal_connect_object (GTK_OBJECT (button), "clicked", + G_CALLBACK (e_calendar_on_prev_clicked), + GTK_OBJECT (cal)); pixmap = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE); gtk_widget_show (pixmap); @@ -184,6 +189,9 @@ e_calendar_init (ECalendar *cal) gtk_signal_connect_object (GTK_OBJECT (button), "released", G_CALLBACK (e_calendar_on_next_released), GTK_OBJECT (cal)); + gtk_signal_connect_object (GTK_OBJECT (button), "clicked", + G_CALLBACK (e_calendar_on_next_clicked), + GTK_OBJECT (cal)); pixmap = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE); gtk_widget_show (pixmap); @@ -442,9 +450,6 @@ static void e_calendar_start_auto_move (ECalendar *cal, gboolean moving_forward) { - ECalendarItem *calitem; - gint offset; - if (cal->timeout_id == 0) { cal->timeout_id = g_timeout_add (E_CALENDAR_AUTO_MOVE_TIMEOUT, e_calendar_auto_move_handler, @@ -453,10 +458,6 @@ e_calendar_start_auto_move (ECalendar *cal, cal->timeout_delay = E_CALENDAR_AUTO_MOVE_TIMEOUT_DELAY; cal->moving_forward = moving_forward; - calitem = cal->calitem; - offset = cal->moving_forward ? 1 : -1; - e_calendar_item_set_first_month (calitem, calitem->year, - calitem->month + offset); } @@ -510,6 +511,20 @@ e_calendar_stop_auto_move (ECalendar *cal) } } +static void +e_calendar_on_prev_clicked (ECalendar *cal) +{ + e_calendar_item_set_first_month (cal->calitem, cal->calitem->year, + cal->calitem->month - 1); +} + +static void +e_calendar_on_next_clicked (ECalendar *cal) +{ + e_calendar_item_set_first_month (cal->calitem, cal->calitem->year, + cal->calitem->month + 1); +} + static gint e_calendar_drag_motion (GtkWidget *widget, diff --git a/widgets/misc/e-dateedit.c b/widgets/misc/e-dateedit.c index c6c2ad9bc7..94cd4a2874 100644 --- a/widgets/misc/e-dateedit.c +++ b/widgets/misc/e-dateedit.c @@ -1180,7 +1180,6 @@ e_date_edit_show_date_popup (EDateEdit *dedit) position_date_popup (dedit); gtk_widget_show (priv->cal_popup); - gdk_keyboard_grab (priv->cal_popup->window, TRUE, GDK_CURRENT_TIME); gtk_widget_grab_focus (priv->cal_popup); gtk_grab_add (priv->cal_popup); gdk_pointer_grab (priv->cal_popup->window, TRUE, @@ -1188,6 +1187,7 @@ e_date_edit_show_date_popup (EDateEdit *dedit) | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK), NULL, NULL, GDK_CURRENT_TIME); + gdk_window_focus (priv->cal_popup->window, GDK_CURRENT_TIME); } @@ -1366,7 +1366,6 @@ hide_date_popup (EDateEdit *dedit) gtk_widget_hide (dedit->priv->cal_popup); gtk_grab_remove (dedit->priv->cal_popup); gdk_pointer_ungrab (GDK_CURRENT_TIME); - gdk_keyboard_ungrab (GDK_CURRENT_TIME); } -- cgit v1.2.3