diff options
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/gui/calendar-commands.c | 15 | ||||
-rw-r--r-- | calendar/gui/e-cal-view.c | 43 | ||||
-rw-r--r-- | calendar/gui/e-cal-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/e-calendar-table.c | 4 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 43 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 5 |
8 files changed, 127 insertions, 1 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 6829698209..b721b38270 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,15 @@ +2003-12-29 Kidd Wang <kidd.wang@sun.com> + + * gui/calendar-commands.c (file_open_event_cb): add a menu item + for "open appointment". + + * gui/e-cal-view.[ch] (e_calendar_view_open_event): add a signal + "open_event" and bind it to "ctrl+o". When the signal is delivered, + a dialog will be opened to edit the selected event. + + * gui/e-calendar-table.c (e_calendar_table_on_key_press): press "ctrl-o" + to open a dialog. + 2003-12-24 JP Rosevear <jpr@ximian.com> * gui/e-select-names-renderer.c (esnr_start_editing): fix the diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c index c03b722de9..9127ab8d84 100644 --- a/calendar/gui/calendar-commands.c +++ b/calendar/gui/calendar-commands.c @@ -71,6 +71,17 @@ typedef struct { guint taskpad_focused : 1; } FocusData; +static void +file_open_event_cb (BonoboUIComponent *uic, gpointer data, const char *path) +{ + GnomeCalendar *gcal; + + gcal = GNOME_CALENDAR (data); + + e_calendar_view_open_event (gnome_calendar_get_current_view_widget (gcal)); +} + + /* Prints the calendar at its current view and time range */ static void print (GnomeCalendar *gcal, gboolean preview) @@ -532,6 +543,9 @@ calendar_control_sensitize_calendar_commands (BonoboControl *control, GnomeCalen read_only = TRUE; } + bonobo_ui_component_set_prop (uic, "/commands/EventOpen", "sensitive", + n_selected == 0 || read_only ? "0" : "1", + NULL); bonobo_ui_component_set_prop (uic, "/commands/Cut", "sensitive", n_selected == 0 || read_only ? "0" : "1", NULL); @@ -685,6 +699,7 @@ gcal_taskpad_focus_change_cb (GnomeCalendar *gcal, gboolean in, gpointer data) static BonoboUIVerb verbs [] = { + BONOBO_UI_VERB ("EventOpen", file_open_event_cb), BONOBO_UI_VERB ("CalendarPrint", file_print_cb), BONOBO_UI_VERB ("CalendarPrintPreview", file_print_preview_cb), diff --git a/calendar/gui/e-cal-view.c b/calendar/gui/e-cal-view.c index ffaca9bedb..1f65723d2b 100644 --- a/calendar/gui/e-cal-view.c +++ b/calendar/gui/e-cal-view.c @@ -25,6 +25,8 @@ #include <string.h> #include <gtk/gtkimage.h> #include <gtk/gtkstock.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkbindings.h> #include <libgnome/gnome-i18n.h> #include <gal/util/e-util.h> #include "e-util/e-dialog-utils.h" @@ -94,6 +96,7 @@ enum { TIMEZONE_CHANGED, EVENT_CHANGED, EVENT_ADDED, + OPEN_EVENT, LAST_SIGNAL }; @@ -143,6 +146,8 @@ e_calendar_view_class_init (ECalendarViewClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); + GtkBindingSet *binding_set; + parent_class = g_type_class_peek_parent (klass); /* Method override */ @@ -160,6 +165,7 @@ e_calendar_view_class_init (ECalendarViewClass *klass) klass->set_selected_time_range = NULL; klass->get_visible_time_range = NULL; klass->update_query = NULL; + klass->open_event = e_calendar_view_open_event; g_object_class_install_property (gobject_class, PROP_MODEL, g_param_spec_object ("model", NULL, NULL, E_TYPE_CAL_MODEL, @@ -202,6 +208,15 @@ e_calendar_view_class_init (ECalendarViewClass *klass) G_TYPE_NONE, 1, G_TYPE_POINTER); + e_calendar_view_signals[OPEN_EVENT] = + g_signal_new ("open_event", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarViewClass, open_event), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + e_calendar_view_signals[EVENT_ADDED] = g_signal_new ("event_added", G_TYPE_FROM_CLASS (object_class), @@ -216,6 +231,17 @@ e_calendar_view_class_init (ECalendarViewClass *klass) if (!clipboard_atom) clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); + + /* + * Key bindings + */ + + binding_set = gtk_binding_set_by_class (klass); + + gtk_binding_entry_add_signal (binding_set, GDK_o, + GDK_CONTROL_MASK, + "open_event", 0); + /* init the accessibility support for e_day_view */ e_cal_view_a11y_init (); } @@ -1333,6 +1359,23 @@ e_calendar_view_create_popup_menu (ECalendarView *cal_view) return popup; } +void +e_calendar_view_open_event (ECalendarView *cal_view) +{ + GList *selected; + + selected = e_calendar_view_get_selected_events (cal_view); + if (selected) { + ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; + + if (event) + e_calendar_view_edit_appointment (cal_view, event->comp_data->client, + event->comp_data->icalcomp, FALSE); + + g_list_free (selected); + } +} + /** * e_calendar_view_new_appointment_for * @cal_view: A calendar view. diff --git a/calendar/gui/e-cal-view.h b/calendar/gui/e-cal-view.h index a1b11023b3..c224098554 100644 --- a/calendar/gui/e-cal-view.h +++ b/calendar/gui/e-cal-view.h @@ -87,6 +87,7 @@ struct _ECalendarViewClass { void (* set_selected_time_range) (ECalendarView *cal_view, time_t start_time, time_t end_time); 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); }; GType e_calendar_view_get_type (void); @@ -131,6 +132,8 @@ void e_calendar_view_edit_appointment (ECalendarView *cal_view, ECal *client, icalcomponent *icalcomp, gboolean meeting); +void e_calendar_view_open_event (ECalendarView *cal_view); + G_END_DECLS diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c index d04315799d..4200f2421b 100644 --- a/calendar/gui/e-calendar-table.c +++ b/calendar/gui/e-calendar-table.c @@ -1283,6 +1283,10 @@ e_calendar_table_on_key_press (ETable *table, if (event->keyval == GDK_Delete) { delete_cb (NULL, cal_table); return TRUE; + } else if ((event->keyval == GDK_o) + &&(event->state & GDK_CONTROL_MASK)) { + open_task_by_row (cal_table, row); + return TRUE; } return FALSE; diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index ffaca9bedb..1f65723d2b 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -25,6 +25,8 @@ #include <string.h> #include <gtk/gtkimage.h> #include <gtk/gtkstock.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkbindings.h> #include <libgnome/gnome-i18n.h> #include <gal/util/e-util.h> #include "e-util/e-dialog-utils.h" @@ -94,6 +96,7 @@ enum { TIMEZONE_CHANGED, EVENT_CHANGED, EVENT_ADDED, + OPEN_EVENT, LAST_SIGNAL }; @@ -143,6 +146,8 @@ e_calendar_view_class_init (ECalendarViewClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass); + GtkBindingSet *binding_set; + parent_class = g_type_class_peek_parent (klass); /* Method override */ @@ -160,6 +165,7 @@ e_calendar_view_class_init (ECalendarViewClass *klass) klass->set_selected_time_range = NULL; klass->get_visible_time_range = NULL; klass->update_query = NULL; + klass->open_event = e_calendar_view_open_event; g_object_class_install_property (gobject_class, PROP_MODEL, g_param_spec_object ("model", NULL, NULL, E_TYPE_CAL_MODEL, @@ -202,6 +208,15 @@ e_calendar_view_class_init (ECalendarViewClass *klass) G_TYPE_NONE, 1, G_TYPE_POINTER); + e_calendar_view_signals[OPEN_EVENT] = + g_signal_new ("open_event", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarViewClass, open_event), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + e_calendar_view_signals[EVENT_ADDED] = g_signal_new ("event_added", G_TYPE_FROM_CLASS (object_class), @@ -216,6 +231,17 @@ e_calendar_view_class_init (ECalendarViewClass *klass) if (!clipboard_atom) clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); + + /* + * Key bindings + */ + + binding_set = gtk_binding_set_by_class (klass); + + gtk_binding_entry_add_signal (binding_set, GDK_o, + GDK_CONTROL_MASK, + "open_event", 0); + /* init the accessibility support for e_day_view */ e_cal_view_a11y_init (); } @@ -1333,6 +1359,23 @@ e_calendar_view_create_popup_menu (ECalendarView *cal_view) return popup; } +void +e_calendar_view_open_event (ECalendarView *cal_view) +{ + GList *selected; + + selected = e_calendar_view_get_selected_events (cal_view); + if (selected) { + ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; + + if (event) + e_calendar_view_edit_appointment (cal_view, event->comp_data->client, + event->comp_data->icalcomp, FALSE); + + g_list_free (selected); + } +} + /** * e_calendar_view_new_appointment_for * @cal_view: A calendar view. diff --git a/calendar/gui/e-calendar-view.h b/calendar/gui/e-calendar-view.h index a1b11023b3..c224098554 100644 --- a/calendar/gui/e-calendar-view.h +++ b/calendar/gui/e-calendar-view.h @@ -87,6 +87,7 @@ struct _ECalendarViewClass { void (* set_selected_time_range) (ECalendarView *cal_view, time_t start_time, time_t end_time); 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); }; GType e_calendar_view_get_type (void); @@ -131,6 +132,8 @@ void e_calendar_view_edit_appointment (ECalendarView *cal_view, ECal *client, icalcomponent *icalcomp, gboolean meeting); +void e_calendar_view_open_event (ECalendarView *cal_view); + G_END_DECLS diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 0c08468a7d..d4e436dc6d 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -2101,7 +2101,7 @@ e_day_view_recalc_day_starts (EDayView *day_view, day_view->lower = start_time; day_view->upper = day_view->day_starts[day_view->days_shown]; - e_day_view_update_query (day_view); + e_day_view_update_query ((ECalendarView *) day_view); } @@ -3906,6 +3906,9 @@ e_day_view_free_events (EDayView *day_view) day_view->resize_event_day = -1; day_view->pressed_event_day = -1; day_view->drag_event_day = -1; + day_view->editing_event_num = -1; + day_view->popup_event_num = -1; + e_day_view_free_event_array (day_view, day_view->long_events); |