aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog12
-rw-r--r--calendar/gui/e-day-view.c139
-rw-r--r--calendar/gui/e-week-view.c29
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,