diff options
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 139 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 29 |
3 files changed, 138 insertions, 42 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 72b1ff8cf0..f2c74fca14 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,15 @@ +2003-07-29 Bolian Yin <bolian.yin@sun.com> + + Fixes #46847 + + * gui/e-day-view.c (e_day_view_get_next_tab_event, e_day_view_focus): + add day view widget in the tab loop of events. + * gui/e-week-view.c (e_week_view_get_next_tab_event, e_week_view_focus): + add week view widget in the tab loop of events. + + Also: add some comments in gui/e-day-view.c and gui/e-week-view.c + remove two compile warnings in gui/e-day-view.c + 2003-07-24 Rodrigo Moya <rodrigo@ximian.com> * gui/e-cal-view.[ch] (e_cal_view_delete_selected_occurrence): diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index b7979c7bbd..5acd71965b 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -5037,6 +5037,13 @@ e_day_view_focus (GtkWidget *widget, GtkDirectionType direction) &new_day, &new_event_num)) return FALSE; + if ((new_day == -1) && (new_event_num == -1)) { + /* focus should go to the day view widget itself + */ + gtk_widget_grab_focus (GTK_WIDGET(day_view)); + return TRUE; + } + if (new_day != E_DAY_VIEW_LONG_EVENT && new_day != -1) { if (e_day_view_get_event_rows (day_view, new_day, new_event_num, &start_row, &end_row)) @@ -5050,6 +5057,20 @@ e_day_view_focus (GtkWidget *widget, GtkDirectionType direction) return TRUE; } +/** + * e_day_view_get_extreme_event + * @day_view: the day view widget operates on + * @start_day, @end_day: range of search, both inclusive + * @first: %TURE indicate to return the data for the first event in the range, + * %FALSE to return data for the last event in the range. + * @day_out: out value, day of the event found. -1 for no event found. + * @event_num_out: out value, event number of the event found. + * -1 for no event found. + * + * Get day and event_num value for the first or last event found in the day range. + * + * Return value: %TRUE, if a event found. + **/ static gboolean e_day_view_get_extreme_event (EDayView *day_view, gint start_day, gint end_day, gboolean first, @@ -5086,6 +5107,18 @@ e_day_view_get_extreme_event (EDayView *day_view, gint start_day, return FALSE; } +/** + * e_day_view_get_extreme_long_event + * @day_view: the day view widget operates on + * @first: %TURE indicate to return the data for the first event in the range, + * %FALSE to return data for the last event in the range. + * @event_num_out: out value, event number of the event found. + * -1 for no event found. + * + * Similar to e_day_view_get_extreme_event, but run for long events. + * + * Return value: %TRUE, if a event found. + **/ static gboolean e_day_view_get_extreme_long_event (EDayView *day_view, gboolean first, gint *day_out, gint *event_num_out) @@ -5108,6 +5141,20 @@ e_day_view_get_extreme_long_event (EDayView *day_view, gboolean first, return FALSE; } +/** + * e_day_view_get_next_tab_event + * @day_view: the day view widget operates on + * @direction: GTK_DIR_TAB_BACKWARD or GTK_DIR_TAB_FORWARD + * @day_out: out value, day of the event found. -1 for no event found. + * @event_num_out: out value, event number of the event found. + * -1 for no event found. + * + * Decide on which event the focus should go next. + * if ((day_out == -1) && (event_num_out == -1)) is true, focus should go + * to day_view widget itself. + * + * Return value: %TRUE, if a event found. + **/ static gboolean e_day_view_get_next_tab_event (EDayView *day_view, GtkDirectionType direction, gint *day_out, gint *event_num_out) @@ -5142,36 +5189,53 @@ e_day_view_get_next_tab_event (EDayView *day_view, GtkDirectionType direction, /* not current editing event, set to first long event if there is one */ if (new_day == -1) { - if (e_day_view_get_extreme_long_event (day_view, TRUE, - day_out, event_num_out)) + if (direction == GTK_DIR_TAB_FORWARD) { + if (e_day_view_get_extreme_long_event (day_view, TRUE, + day_out, + event_num_out)) + return TRUE; + + /* no long event, set to first event if there is + */ + e_day_view_get_extreme_event (day_view, 0, + days_shown - 1, TRUE, + day_out, event_num_out); + /* go to event if found, or day view widget + */ return TRUE; + } + else { + if (e_day_view_get_extreme_event (day_view, 0, + days_shown - 1, FALSE, + day_out, event_num_out)) + return TRUE; - /* no long event, set to first normal event if there is one - */ - return e_day_view_get_extreme_event (day_view, 0, - days_shown - 1, TRUE, - day_out, event_num_out); + /* no event, set to last long event if there is + */ + e_day_view_get_extreme_long_event (day_view, FALSE, + day_out, + event_num_out); + + /* go to long event if found, or day view widget + */ + return TRUE; + } } /* go backward from the first long event */ else if ((new_day == E_DAY_VIEW_LONG_EVENT) && (new_event_num < 0)) { - if (e_day_view_get_extreme_event (day_view, 0, - days_shown - 1, FALSE, - day_out, event_num_out)) - return TRUE; - return e_day_view_get_extreme_long_event (day_view, FALSE, - day_out, - event_num_out); + /* let focus go to day view widget in this case + */ + return TRUE; } /* go forward from the last long event */ else if ((new_day == E_DAY_VIEW_LONG_EVENT) && (new_event_num >= day_view->long_events->len)) { - if (e_day_view_get_extreme_event (day_view, 0, - days_shown - 1, TRUE, - day_out, event_num_out)) - return TRUE; - return e_day_view_get_extreme_long_event (day_view, TRUE, - day_out, - event_num_out); + e_day_view_get_extreme_event (day_view, 0, + days_shown - 1, TRUE, + day_out, event_num_out); + /* go to the next main item event if found or day view widget + */ + return TRUE; } /* go backward from the first event in current editting day */ @@ -5182,31 +5246,28 @@ e_day_view_get_next_tab_event (EDayView *day_view, GtkDirectionType direction, new_day - 1, FALSE, day_out, event_num_out)) return TRUE; - else if (e_day_view_get_extreme_long_event (day_view, FALSE, - day_out, - event_num_out)) - return TRUE; - return e_day_view_get_extreme_event (day_view, new_day, - days_shown - 1, FALSE, - day_out, event_num_out); + /* try to find a long event + */ + e_day_view_get_extreme_long_event (day_view, FALSE, + day_out, event_num_out); + /* go to a long event if found, or day view widget + */ + return TRUE; } /* go forward from the last event in current editting day */ else if ((new_day < E_DAY_VIEW_LONG_EVENT) && (new_event_num >= day_view->events[new_day]->len)) { /* try to find a event from the next day in days shown */ - if (e_day_view_get_extreme_event (day_view, (new_day + 1), - days_shown - 1, TRUE, - day_out, event_num_out)) - return TRUE; - else if (e_day_view_get_extreme_long_event (day_view, TRUE, - day_out, - event_num_out)) - return TRUE; - return e_day_view_get_extreme_event (day_view, 0, - new_day, TRUE, - day_out, event_num_out); + e_day_view_get_extreme_event (day_view, (new_day + 1), + days_shown - 1, TRUE, + day_out, event_num_out); + /* go to a event found, or day view widget + */ + return TRUE; } + /* in the normal case + */ *day_out = new_day; *event_num_out = new_event_num; return TRUE; diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index ef4f718c4e..9beb123b95 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -930,7 +930,15 @@ e_week_view_expose_event (GtkWidget *widget, return FALSE; } - +/** + * e_week_view_get_next_tab_event + * @week_view: the week_view widget operate on + * @direction: GTK_DIR_TAB_BACKWARD or GTK_DIR_TAB_FORWARD. + * @current_event_num and @current_span_num: current status. + * @next_event_num: the event number focus should go next. + * -1 indicates focus should go to week_view widget. + * @next_span_num: always return 0. + **/ static gboolean e_week_view_get_next_tab_event (EWeekView *week_view, GtkDirectionType direction, @@ -962,10 +970,18 @@ e_week_view_get_next_tab_event (EWeekView *week_view, return FALSE; } - if (event_num < 0) + if (event_num == -1) + /* backward, out of event range, go to week view widget + */ + *next_event_num = -1; + else if (event_num < -1) + /* backward from week_view, go to the last event + */ *next_event_num = week_view->events->len - 1; else if (event_num >= week_view->events->len) - *next_event_num = 0; + /* forward, out of event range, go to week view widget + */ + *next_event_num = -1; else *next_event_num = event_num; return TRUE; @@ -997,6 +1013,13 @@ e_week_view_focus (GtkWidget *widget, GtkDirectionType direction) &new_span_num)) return FALSE; + if (new_event_num == -1) { + /* focus should go to week_view widget + */ + gtk_widget_grab_focus (widget); + return TRUE; + } + editable = e_week_view_start_editing_event (week_view, new_event_num, new_span_num, |