diff options
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r-- | calendar/gui/e-day-view.c | 407 |
1 files changed, 63 insertions, 344 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index d305190352..fc03a044c1 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -41,19 +41,15 @@ #include <gtk/gtkvscrollbar.h> #include <gtk/gtkwindow.h> #include <gal/e-text/e-text.h> +#include <gal/widgets/e-popup-menu.h> #include <gal/widgets/e-canvas-utils.h> -#include <gal/widgets/e-gui-utils.h> #include <gal/widgets/e-unicode.h> #include <libgnomeui/gnome-canvas-rect-ellipse.h> #include <libgnome/gnome-i18n.h> -#include <libgnome/gnome-exec.h> -#include <libgnome/gnome-util.h> -#include <e-util/e-dialog-utils.h> #include "cal-util/timeutil.h" #include "dialogs/delete-comp.h" #include "dialogs/send-comp.h" -#include "print.h" #include "comp-util.h" #include "itip-utils.h" #include "calendar-commands.h" @@ -335,32 +331,12 @@ static void e_day_view_on_new_appointment (GtkWidget *widget, gpointer data); static void e_day_view_on_new_event (GtkWidget *widget, gpointer data); -static void e_day_view_on_new_meeting (GtkWidget *widget, - gpointer data); -static void e_day_view_on_new_task (GtkWidget *widget, - gpointer data); static void e_day_view_on_goto_today (GtkWidget *widget, gpointer data); static void e_day_view_on_goto_date (GtkWidget *widget, gpointer data); static void e_day_view_on_edit_appointment (GtkWidget *widget, gpointer data); -static void e_day_view_on_save_as (GtkWidget *widget, - gpointer data); -static void e_day_view_on_print (GtkWidget *widget, - gpointer data); -static void e_day_view_on_print_event (GtkWidget *widget, - gpointer data); -static void e_day_view_on_meeting (GtkWidget *widget, - gpointer data); -static void e_day_view_on_forward (GtkWidget *widget, - gpointer data); -static void e_day_view_on_publish (GtkWidget *widget, - gpointer data); -static void e_day_view_on_settings (GtkWidget *widget, - gpointer data); -static void e_day_view_on_pilot_settings (GtkWidget *widget, - gpointer data); static void e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data); static void e_day_view_on_delete_appointment (GtkWidget *widget, @@ -2945,7 +2921,7 @@ e_day_view_on_top_canvas_button_press (GtkWidget *widget, &dtend); gnome_calendar_new_appointment_for (day_view->calendar, dtstart, dtend, - TRUE, FALSE); + TRUE); return TRUE; } @@ -3079,7 +3055,7 @@ e_day_view_on_main_canvas_button_press (GtkWidget *widget, &dtend); gnome_calendar_new_appointment_for (day_view->calendar, dtstart, dtend, - FALSE, FALSE); + FALSE); return TRUE; } @@ -3515,7 +3491,7 @@ e_day_view_on_event_double_click (EDayView *day_view, gtk_signal_disconnect (GTK_OBJECT (event->comp), id); if (day_view->calendar) - gnome_calendar_edit_object (day_view->calendar, event->comp, FALSE); + gnome_calendar_edit_object (day_view->calendar, event->comp); else g_warning ("Calendar not set"); } @@ -3546,88 +3522,57 @@ enum { }; static EPopupMenu main_items [] = { - E_POPUP_ITEM (N_("New _Appointment"), - e_day_view_on_new_appointment, 0), - E_POPUP_ITEM (N_("New All Day _Event"), - e_day_view_on_new_event, 0), - E_POPUP_ITEM (N_("New Meeting"), - e_day_view_on_new_meeting, 0), - E_POPUP_ITEM (N_("New Task"), - e_day_view_on_new_task, 0), - - E_POPUP_SEPARATOR, - - E_POPUP_ITEM (N_("Print..."), - e_day_view_on_print, 0), - - E_POPUP_SEPARATOR, - - E_POPUP_ITEM (N_("_Paste"), - e_day_view_on_paste, 0), - - E_POPUP_SEPARATOR, - - E_POPUP_SUBMENU (N_("Current View"), NULL, 0), - - E_POPUP_ITEM (N_("Go to _Today"), - e_day_view_on_goto_today, 0), - E_POPUP_ITEM (N_("_Go to Date..."), - e_day_view_on_goto_date, 0), + { N_("New _Appointment"), NULL, + e_day_view_on_new_appointment, NULL, 0 }, + { N_("New All Day _Event"), NULL, + e_day_view_on_new_event, NULL, 0 }, - E_POPUP_SEPARATOR, + { "", NULL, NULL, NULL, 0 }, - E_POPUP_ITEM (N_("_Publish Free/Busy Information"), - e_day_view_on_publish, 0), + { N_("_Paste"), NULL, + e_day_view_on_paste, NULL, 0 }, - E_POPUP_SEPARATOR, + { "", NULL, NULL, NULL, 0 }, - E_POPUP_ITEM (N_("_Configure..."), - e_day_view_on_settings, 0), - E_POPUP_ITEM (N_("_Configure Pilot..."), - e_day_view_on_pilot_settings, 0), + { N_("Go to _Today"), NULL, + e_day_view_on_goto_today, NULL, 0 }, + { N_("_Go to Date..."), NULL, + e_day_view_on_goto_date, NULL, 0 }, - E_POPUP_TERMINATOR + { NULL, NULL, NULL, NULL, 0 } }; static EPopupMenu child_items [] = { - - E_POPUP_ITEM (N_("_Open"), e_day_view_on_edit_appointment, MASK_EDITABLE | MASK_EDITING), - E_POPUP_ITEM (N_("_Save As..."), e_day_view_on_save_as, MASK_EDITABLE | MASK_EDITING), - E_POPUP_ITEM (N_("_Print..."), e_day_view_on_print_event, MASK_EDITABLE | MASK_EDITING), + { N_("_Open"), NULL, + e_day_view_on_edit_appointment, NULL, MASK_EDITABLE | MASK_EDITING }, + { N_("_Delete this Appointment"), NULL, + e_day_view_on_delete_appointment, NULL, MASK_EDITABLE | MASK_SINGLE | MASK_EDITING }, /* Only show this separator if one of the above is shown. */ - E_POPUP_SEPARATOR, - - E_POPUP_ITEM (N_("C_ut"), e_day_view_on_cut, MASK_EDITABLE | MASK_EDITING), - E_POPUP_ITEM (N_("_Copy"), e_day_view_on_copy, 0), - E_POPUP_ITEM (N_("_Paste"), e_day_view_on_paste, 0), + { "", NULL, NULL, NULL, MASK_EDITABLE | MASK_EDITING }, - E_POPUP_SEPARATOR, - E_POPUP_ITEM (N_("_Schedule Meeting..."), e_day_view_on_meeting, MASK_EDITABLE | MASK_EDITING), - E_POPUP_ITEM (N_("_Forward as iCalendar..."), e_day_view_on_forward, MASK_EDITABLE | MASK_EDITING), - - E_POPUP_SEPARATOR, + { N_("C_ut"), NULL, + e_day_view_on_cut, NULL, MASK_EDITABLE | MASK_EDITING }, + { N_("_Copy"), NULL, + e_day_view_on_copy, NULL, 0 }, + { N_("_Paste"), NULL, + e_day_view_on_paste, NULL, 0 }, - E_POPUP_ITEM (N_("_Delete"), e_day_view_on_delete_appointment, MASK_EDITABLE | MASK_SINGLE | MASK_EDITING), - E_POPUP_ITEM (N_("Make this Occurrence _Movable"), e_day_view_on_unrecur_appointment, MASK_RECURRING | MASK_EDITING), - E_POPUP_ITEM (N_("Delete this _Occurrence"), e_day_view_on_delete_occurrence, MASK_RECURRING | MASK_EDITING), - E_POPUP_ITEM (N_("Delete _All Occurrences"), e_day_view_on_delete_appointment, MASK_RECURRING | MASK_EDITING), - - E_POPUP_TERMINATOR -}; -static void -free_view_popup (GtkWidget *widget, gpointer data) -{ - EDayView *day_view = E_DAY_VIEW (data); - - if (day_view->view_menu == NULL) - return; + /* + * The following are only shown if this is a recurring event + */ + { "", NULL, NULL, NULL, MASK_RECURRING | MASK_EDITING }, + { N_("Make this Occurrence _Movable"), NULL, + e_day_view_on_unrecur_appointment, NULL, MASK_RECURRING | MASK_EDITING }, + { N_("Delete this _Occurrence"), NULL, + e_day_view_on_delete_occurrence, NULL, MASK_RECURRING | MASK_EDITING }, + { N_("Delete _All Occurrences"), NULL, + e_day_view_on_delete_appointment, NULL, MASK_RECURRING | MASK_EDITING }, - gnome_calendar_discard_view_popup (day_view->calendar, day_view->view_menu); - day_view->view_menu = NULL; -} + { NULL, NULL, NULL, NULL, 0 } +}; static void e_day_view_on_event_right_click (EDayView *day_view, @@ -3639,7 +3584,6 @@ e_day_view_on_event_right_click (EDayView *day_view, int have_selection; gboolean being_edited; EPopupMenu *context_menu; - GtkMenu *popup; int hide_mask = 0; int disable_mask = 0; @@ -3655,11 +3599,9 @@ e_day_view_on_event_right_click (EDayView *day_view, have_selection = GTK_WIDGET_HAS_FOCUS (day_view) && day_view->selection_start_day != -1; - if (event_num == -1) { - day_view->view_menu = gnome_calendar_setup_view_popup (day_view->calendar); - main_items[9].submenu = day_view->view_menu; + if (event_num == -1) context_menu = main_items; - } else { + else { context_menu = child_items; if (day == E_DAY_VIEW_LONG_EVENT) @@ -3680,11 +3622,8 @@ e_day_view_on_event_right_click (EDayView *day_view, day_view->popup_event_day = day; day_view->popup_event_num = event_num; - - popup = e_popup_menu_create (context_menu, disable_mask, hide_mask, day_view); - gtk_signal_connect (GTK_OBJECT (popup), "selection-done", - GTK_SIGNAL_FUNC (free_view_popup), day_view); - e_popup_menu (popup, (GdkEvent *) bevent); + + e_popup_menu_run (context_menu, (GdkEvent *) bevent, disable_mask, hide_mask, day_view); } static void @@ -3714,7 +3653,7 @@ e_day_view_on_new_appointment (GtkWidget *widget, gpointer data) } gnome_calendar_new_appointment_for ( - day_view->calendar, dtstart, dtend, FALSE, FALSE); + day_view->calendar, dtstart, dtend, FALSE); } static void @@ -3725,45 +3664,7 @@ e_day_view_on_new_event (GtkWidget *widget, gpointer data) e_day_view_get_selected_time_range (day_view, &dtstart, &dtend); gnome_calendar_new_appointment_for ( - day_view->calendar, dtstart, dtend, TRUE, FALSE); -} - -static void -e_day_view_on_new_meeting (GtkWidget *widget, gpointer data) -{ - EDayView *day_view = E_DAY_VIEW (data); - time_t dtstart, dtend; - struct icaltimetype itt; - - /* Edit a new event. If only one day is selected in the top canvas, - we set the time to the first 1/2-hour of the working day. */ - if (day_view->selection_in_top_canvas - && day_view->selection_start_day != -1 - && day_view->selection_start_day == day_view->selection_end_day) { - dtstart = day_view->day_starts[day_view->selection_start_day]; - itt = icaltime_from_timet_with_zone (dtstart, FALSE, - day_view->zone); - itt.hour = calendar_config_get_day_start_hour (); - itt.minute = calendar_config_get_day_start_minute (); - dtstart = icaltime_as_timet_with_zone (itt, day_view->zone); - - icaltime_adjust (&itt, 0, 0, 30, 0); - dtend = icaltime_as_timet_with_zone (itt, day_view->zone); - } else { - e_day_view_get_selected_time_range (day_view, &dtstart, - &dtend); - } - - gnome_calendar_new_appointment_for ( - day_view->calendar, dtstart, dtend, FALSE, TRUE); -} - -static void -e_day_view_on_new_task (GtkWidget *widget, gpointer data) -{ - EDayView *day_view = E_DAY_VIEW (data); - - gnome_calendar_new_task (day_view->calendar); + day_view->calendar, dtstart, dtend, TRUE); } static void @@ -3795,188 +3696,11 @@ e_day_view_on_edit_appointment (GtkWidget *widget, gpointer data) return; if (day_view->calendar) - gnome_calendar_edit_object (day_view->calendar, event->comp, FALSE); + gnome_calendar_edit_object (day_view->calendar, event->comp); else g_warning ("Calendar not set"); } -static void -e_day_view_on_save_as (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - char *filename; - char *ical_string; - FILE *file; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - filename = e_file_dialog_save (_("Save as...")); - if (filename == NULL) - return; - - ical_string = cal_client_get_component_as_string (day_view->client, event->comp); - if (ical_string == NULL) { - g_warning ("Couldn't convert item to a string"); - return; - } - - file = fopen (filename, "w"); - if (file == NULL) { - g_warning ("Couldn't save item"); - return; - } - - fprintf (file, ical_string); - g_free (ical_string); - fclose (file); -} - -static void -e_day_view_on_print (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - time_t start; - GnomeCalendarViewType view_type; - PrintView print_view; - - day_view = E_DAY_VIEW (data); - - gnome_calendar_get_current_time_range (day_view->calendar, &start, NULL); - view_type = gnome_calendar_get_view (day_view->calendar); - - switch (view_type) { - case GNOME_CAL_DAY_VIEW: - print_view = PRINT_VIEW_DAY; - break; - - case GNOME_CAL_WORK_WEEK_VIEW: - print_view = PRINT_VIEW_WEEK; - break; - - default: - g_assert_not_reached (); - return; - } - - print_calendar (day_view->calendar, FALSE, start, print_view); -} - -static void -e_day_view_on_print_event (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - print_comp (event->comp, day_view->client, FALSE); -} - -static void -e_day_view_on_meeting (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - if (day_view->calendar) - gnome_calendar_edit_object (day_view->calendar, event->comp, TRUE); - else - g_warning ("Calendar not set"); -} - -static void -e_day_view_on_forward (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, event->comp, - day_view->client, NULL); -} - -static void -e_day_view_on_publish (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - icaltimezone *utc; - time_t start = time (NULL), end; - GList *comp_list; - - day_view = E_DAY_VIEW (data); - - utc = icaltimezone_get_utc_timezone (); - start = time_day_begin_with_zone (start, utc); - end = time_add_week_with_zone (start, 6, utc); - - comp_list = cal_client_get_free_busy (day_view->client, NULL, start, end); - if (comp_list) { - GList *l; - - for (l = comp_list; l; l = l->next) { - CalComponent *comp = CAL_COMPONENT (l->data); - itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, - day_view->client, NULL); - - gtk_object_unref (GTK_OBJECT (comp)); - } - - g_list_free (comp_list); - } -} - -static void -e_day_view_on_settings (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - - day_view = E_DAY_VIEW (data); - - control_util_show_settings (day_view->calendar); -} - -static void -e_day_view_on_pilot_settings (GtkWidget *widget, gpointer data) -{ - char *args[] = { - "gpilotd-control-applet", - NULL - }; - int pid; - - args[0] = gnome_is_program_in_path ("gpilotd-control-applet"); - if (!args[0]) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("The GNOME Pilot tools do not appear to be installed on this system.")); - return; - } - - pid = gnome_execute_async (NULL, 4, args); - if (pid == -1) - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, _("Error executing %s."), args[0]); - - g_free (args[0]); -} static void e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data) @@ -3996,7 +3720,7 @@ e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data) comp = cal_component_clone (event->comp); cal_comp_util_add_exdate (comp, event->start, day_view->zone); - if (cal_client_update_object (day_view->client, comp) != CAL_CLIENT_RESULT_SUCCESS) + if (!cal_client_update_object (day_view->client, comp)) g_message ("e_day_view_on_delete_occurrence(): Could not update the object!"); gtk_object_unref (GTK_OBJECT (comp)); @@ -4172,12 +3896,12 @@ e_day_view_on_unrecur_appointment (GtkWidget *widget, gpointer data) /* Now update both CalComponents. Note that we do this last since at * present the updates happen synchronously so our event may disappear. */ - if (cal_client_update_object (day_view->client, comp) != CAL_CLIENT_RESULT_SUCCESS) + if (!cal_client_update_object (day_view->client, comp)) g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!"); gtk_object_unref (GTK_OBJECT (comp)); - if (cal_client_update_object (day_view->client, new_comp) != CAL_CLIENT_RESULT_SUCCESS) + if (!cal_client_update_object (day_view->client, new_comp)) g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!"); gtk_object_unref (GTK_OBJECT (new_comp)); @@ -4712,8 +4436,8 @@ e_day_view_finish_long_event_resize (EDayView *day_view) day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - if (cal_client_update_object (day_view->client, comp) == CAL_CLIENT_RESULT_SUCCESS) { - if (cal_component_has_attendees (comp) && send_component_dialog (comp, FALSE)) + if (cal_client_update_object (day_view->client, comp)) { + if (cal_component_has_attendees (comp) && send_component_dialog (comp)) itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, day_view->client, NULL); } else { g_message ("e_day_view_finish_long_event_resize(): Could not update the object!"); @@ -4773,8 +4497,8 @@ e_day_view_finish_resize (EDayView *day_view) day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - if (cal_client_update_object (day_view->client, comp) == CAL_CLIENT_RESULT_SUCCESS) { - if (cal_component_has_attendees (comp) && send_component_dialog (comp, FALSE)) + if (cal_client_update_object (day_view->client, comp)) { + if (cal_component_has_attendees (comp) && send_component_dialog (comp)) itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, day_view->client, NULL); } else { g_message ("e_day_view_finish_resize(): Could not update the object!"); @@ -6116,10 +5840,9 @@ e_day_view_on_editing_stopped (EDayView *day_view, summary.altrep = NULL; cal_component_set_summary (event->comp, &summary); - if (cal_client_update_object (day_view->client, event->comp) == CAL_CLIENT_RESULT_SUCCESS) { - if (cal_component_has_attendees (event->comp) && send_component_dialog (event->comp, FALSE)) - itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, event->comp, - day_view->client, NULL); + if (cal_client_update_object (day_view->client, event->comp)) { + if (cal_component_has_attendees (event->comp) && send_component_dialog (event->comp)) + itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, event->comp, day_view->client, NULL); } else { g_message ("e_day_view_on_editing_stopped(): Could not update the object!"); } @@ -7165,11 +6888,9 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, if (event->canvas_item) gnome_canvas_item_show (event->canvas_item); - if (cal_client_update_object (day_view->client, comp) - == CAL_CLIENT_RESULT_SUCCESS) { - if (cal_component_has_attendees (comp) && send_component_dialog (comp, FALSE)) - itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, - day_view->client, NULL); + if (cal_client_update_object (day_view->client, comp)) { + if (cal_component_has_attendees (comp) && send_component_dialog (comp)) + itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, day_view->client, NULL); } else { g_message ("e_day_view_on_top_canvas_drag_data_received(): Could " "not update the object!"); @@ -7279,11 +7000,9 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget, if (event->canvas_item) gnome_canvas_item_show (event->canvas_item); - if (cal_client_update_object (day_view->client, comp) - == CAL_CLIENT_RESULT_SUCCESS) { - if (cal_component_has_attendees (comp) && send_component_dialog (comp, FALSE)) - itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, - day_view->client, NULL); + if (cal_client_update_object (day_view->client, comp)) { + if (cal_component_has_attendees (comp) && send_component_dialog (comp)) + itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp, day_view->client, NULL); } else { g_message ("e_day_view_on_main_canvas_drag_data_received(): " "Could not update the object!"); |