aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-day-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r--calendar/gui/e-day-view.c407
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!");