diff options
-rw-r--r-- | calendar/ChangeLog | 15 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 56 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.h | 1 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 39 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 48 |
5 files changed, 64 insertions, 95 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index e3e41de86f..0eb4e2b263 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,18 @@ +2004-03-29 Kidd Wang <kidd.wang@sun.com> + + * gui/e-calendar-view.c: (e_calendar_view_class_init): remove the + EVENT_MOVE signal which was binded to Alt + Arrows. + * gui/e-calendar-view.h: ditto. + * gui/e-day-view.c: (e_day_view_class_init), + (e_day_view_do_key_press), (e_day_view_event_move): handle Alt + Arrows + in the more general place e_day_view_do_key_press so that we can avoid + the conflicting accessible key. When an appointment is selected, + pressing Alt + Arrows causes it to be moved around. Otherwise, pressing + Alt + LEFT/RIGHT will move the focus to the same day in the + previous/next week. + * gui/e-week-view.c: (e_week_view_class_init), + (e_week_view_event_move), (e_week_view_do_key_press): ditto. + 2004-03-26 JP Rosevear <jpr@ximian.com> * gui/e-cal-model.c (update_e_cal_view_for_client): guard against diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 51bd3ee2cc..68bbfc88f4 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -100,7 +100,6 @@ enum { EVENT_CHANGED, EVENT_ADDED, OPEN_EVENT, - EVENT_MOVE, LAST_SIGNAL }; @@ -170,7 +169,6 @@ e_calendar_view_class_init (ECalendarViewClass *klass) klass->get_visible_time_range = NULL; klass->update_query = NULL; klass->open_event = e_calendar_view_open_event; - klass->event_move = NULL; g_object_class_install_property (gobject_class, PROP_MODEL, g_param_spec_object ("model", NULL, NULL, E_TYPE_CAL_MODEL, @@ -231,16 +229,6 @@ e_calendar_view_class_init (ECalendarViewClass *klass) G_TYPE_NONE, 1, G_TYPE_POINTER); - e_calendar_view_signals [EVENT_MOVE] = - g_signal_new ("event_move", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (ECalendarViewClass, event_move), - NULL, NULL, - g_cclosure_marshal_VOID__INT, - G_TYPE_NONE, 1, - G_TYPE_INT); - /* clipboard atom */ if (!clipboard_atom) clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); @@ -255,49 +243,7 @@ e_calendar_view_class_init (ECalendarViewClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_o, GDK_CONTROL_MASK, "open_event", 0); - - /* Alt+Arrow, move the editing event*/ - gtk_binding_entry_add_signal (binding_set, GDK_Up, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_UP); - gtk_binding_entry_add_signal (binding_set, GDK_KP_Up, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_UP); - gtk_binding_entry_add_signal (binding_set, GDK_Down, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_DOWN); - gtk_binding_entry_add_signal (binding_set, GDK_KP_Down, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_DOWN); - gtk_binding_entry_add_signal (binding_set, GDK_Left, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_LEFT); - gtk_binding_entry_add_signal (binding_set, GDK_KP_Left, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_LEFT); - gtk_binding_entry_add_signal (binding_set, GDK_Right, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_RIGHT); - gtk_binding_entry_add_signal (binding_set, GDK_KP_Right, - GDK_MOD1_MASK, - "event_move", 1, - G_TYPE_ENUM, - E_CAL_VIEW_MOVE_RIGHT); - + /* init the accessibility support for e_day_view */ e_cal_view_a11y_init (); } diff --git a/calendar/gui/e-calendar-view.h b/calendar/gui/e-calendar-view.h index 4d72f1a0c4..9891989eea 100644 --- a/calendar/gui/e-calendar-view.h +++ b/calendar/gui/e-calendar-view.h @@ -95,7 +95,6 @@ struct _ECalendarViewClass { gboolean (* get_visible_time_range) (ECalendarView *cal_view, time_t *start_time, time_t *end_time); void (* update_query) (ECalendarView *cal_view); void (* open_event) (ECalendarView *cal_view); - void (* event_move) (ECalendarView *cal_view, ECalViewMoveDirection direction); }; GType e_calendar_view_get_type (void); diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index a13c059b15..f79f1d9ddd 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -344,7 +344,7 @@ static void e_day_view_stop_editing_event (EDayView *day_view); static gboolean e_day_view_on_text_item_event (GnomeCanvasItem *item, GdkEvent *event, EDayView *day_view); -static void e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction); +static gboolean e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction); static void e_day_view_change_event_time (EDayView *day_view, time_t start_dt, time_t end_dt); static void e_day_view_change_event_end_time_up (EDayView *day_view); @@ -480,7 +480,6 @@ e_day_view_class_init (EDayViewClass *class) view_class->get_selected_time_range = e_day_view_get_selected_time_range; view_class->set_selected_time_range = e_day_view_set_selected_time_range; view_class->get_visible_time_range = e_day_view_get_visible_time_range; - view_class->event_move = e_day_view_event_move; /* init the accessibility support for e_day_view */ e_day_view_a11y_init (); @@ -4682,12 +4681,26 @@ e_day_view_do_key_press (GtkWidget *widget, GdkEventKey *event) } return FALSE; } + + /* Alt + Arrow Keys to move a selected event through time lines */ + if (((event->state & GDK_SHIFT_MASK) != GDK_SHIFT_MASK) + &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK) + &&((event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK)) { + if (keyval == GDK_Up || keyval == GDK_KP_Up) + return e_day_view_event_move ((ECalendarView *) day_view, E_CAL_VIEW_MOVE_UP); + else if (keyval == GDK_Down || keyval == GDK_KP_Down) + return e_day_view_event_move ((ECalendarView *) day_view, E_CAL_VIEW_MOVE_DOWN); + else if (keyval == GDK_Left || keyval == GDK_KP_Left) + return e_day_view_event_move ((ECalendarView *) day_view, E_CAL_VIEW_MOVE_LEFT); + else if (keyval == GDK_Right || keyval == GDK_KP_Right) + return e_day_view_event_move ((ECalendarView *) day_view, E_CAL_VIEW_MOVE_RIGHT); + } /*Go to the start/end of a work day*/ if ((keyval == GDK_Home) - &&((event->state & GDK_SHIFT_MASK) != GDK_SHIFT_MASK) - &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK) - &&((event->state & GDK_MOD1_MASK) != GDK_MOD1_MASK)) { + &&((event->state & GDK_SHIFT_MASK) != GDK_SHIFT_MASK) + &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK) + &&((event->state & GDK_MOD1_MASK) != GDK_MOD1_MASK)) { e_day_view_goto_start_of_work_day (day_view); return TRUE; } @@ -5689,7 +5702,7 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item, return FALSE; } -static void +static gboolean e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) { EDayViewEvent *event; @@ -5703,7 +5716,7 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) event_num = day_view->editing_event_num; if ((day == -1) || (day == E_DAY_VIEW_LONG_EVENT)) - return; + return FALSE; event = &g_array_index (day_view->events[day], EDayViewEvent, event_num); @@ -5719,7 +5732,7 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) switch (direction) { case E_CAL_VIEW_MOVE_UP: if (resize_start_row <= 0) - return; + return FALSE; resize_start_row--; resize_end_row--; start_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_start_row); @@ -5727,7 +5740,7 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) break; case E_CAL_VIEW_MOVE_DOWN: if (resize_end_row >= day_view->rows - 1) - return; + return FALSE; resize_start_row++; resize_end_row++; start_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_start_row); @@ -5735,7 +5748,7 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) break; case E_CAL_VIEW_MOVE_LEFT: if (day <= 0) - return; + return TRUE; start_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_start_row); end_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_end_row + 1); start_time = icaltime_from_timet (start_dt, 0); @@ -5747,7 +5760,7 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) break; case E_CAL_VIEW_MOVE_RIGHT: if (day + 1 >= day_view->days_shown) - return; + return TRUE; start_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_start_row); end_dt = e_day_view_convert_grid_position_to_time (day_view, day, resize_end_row + 1); start_time = icaltime_from_timet (start_dt, 0); @@ -5758,11 +5771,13 @@ e_day_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) end_dt = icaltime_as_timet (end_time); break; default: - return; + return FALSE; } e_day_view_change_event_time (day_view, start_dt, end_dt); e_day_view_ensure_rows_visible (day_view, resize_start_row, resize_end_row); + + return TRUE; } static void diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index 8ada75bbd3..ad3fac971f 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -179,7 +179,7 @@ static void e_week_view_foreach_event_with_uid (EWeekView *week_view, static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item, GdkEvent *event, EWeekView *week_view); -static void e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction); +static gboolean e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction); static gint e_week_view_get_day_offset_of_event (EWeekView *week_view, time_t event_time); static void e_week_view_scroll_a_step (EWeekView *week_view, ECalViewMoveDirection direction); static void e_week_view_change_event_time (EWeekView *week_view, time_t start_dt, time_t end_dt); @@ -244,7 +244,6 @@ e_week_view_class_init (EWeekViewClass *class) view_class->get_selected_time_range = e_week_view_get_selected_time_range; view_class->set_selected_time_range = e_week_view_set_selected_time_range; view_class->get_visible_time_range = e_week_view_get_visible_time_range; - view_class->event_move = e_week_view_event_move; /* init the accessibility support for e_week_view */ e_week_view_a11y_init (); @@ -3171,7 +3170,7 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, return FALSE; } -static void e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) +static gboolean e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirection direction) { EWeekViewEvent *event; gint event_num, span_num, adjust_days, current_start_day, current_end_day; @@ -3185,7 +3184,7 @@ static void e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirecti /* If no item is being edited, just return. */ if (event_num == -1) - return; + return FALSE; event = &g_array_index (week_view->events, EWeekViewEvent, event_num); start_dt = event->start; @@ -3220,19 +3219,20 @@ static void e_week_view_event_move (ECalendarView *cal_view, ECalViewMoveDirecti current_end_day = e_week_view_get_day_offset_of_event (week_view,end_dt); if (current_start_day < 0) { - return; + return TRUE; } if (week_view->multi_week_view) { if (current_end_day > week_view->weeks_shown * 7) { - return; + return TRUE; } }else { if (current_end_day >= 7) { - return; + return TRUE; } } e_week_view_change_event_time (week_view, start_dt, end_dt); + return TRUE; } static gint @@ -3559,12 +3559,14 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event) time_t dtstart, dtend; const char *uid; AddEventData add_event_data; + guint keyval; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); week_view = E_WEEK_VIEW (widget); + keyval = event->keyval; /* The Escape key aborts a resize operation. */ #if 0 @@ -3577,27 +3579,19 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event) #endif /*Navigation through days with arrow keys*/ - if (!((event->state & GDK_SHIFT_MASK) - ||(event->state & GDK_CONTROL_MASK) - ||(event->state & GDK_MOD1_MASK))) { - switch (event->keyval) { - case GDK_Up: - e_week_view_move_selection_day (week_view,E_CAL_VIEW_MOVE_UP); - return TRUE; - case GDK_Down: - e_week_view_move_selection_day (week_view,E_CAL_VIEW_MOVE_DOWN); - return TRUE; - case GDK_Left: - e_week_view_move_selection_day (week_view,E_CAL_VIEW_MOVE_LEFT); - return TRUE; - case GDK_Right: - e_week_view_move_selection_day (week_view,E_CAL_VIEW_MOVE_RIGHT); - return TRUE; - default: - break; - } + if (((event->state & GDK_SHIFT_MASK) != GDK_SHIFT_MASK) + &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK) + &&((event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK)) { + if (keyval == GDK_Up || keyval == GDK_KP_Up) + return e_week_view_event_move ((ECalendarView *) week_view, E_CAL_VIEW_MOVE_UP); + else if (keyval == GDK_Down || keyval == GDK_KP_Down) + return e_week_view_event_move ((ECalendarView *) week_view, E_CAL_VIEW_MOVE_DOWN); + else if (keyval == GDK_Left || keyval == GDK_KP_Left) + return e_week_view_event_move ((ECalendarView *) week_view, E_CAL_VIEW_MOVE_LEFT); + else if (keyval == GDK_Right || keyval == GDK_KP_Right) + return e_week_view_event_move ((ECalendarView *) week_view, E_CAL_VIEW_MOVE_RIGHT); } - + if (week_view->selection_start_day == -1) return FALSE; |