aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-08-15 07:34:43 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-08-16 17:40:00 +0800
commitad17dfabe588f03cc21e4ee5aca86f4c540e517e (patch)
tree060199eb8fe6c722d1140274fe65d30037a2f1ad /calendar
parent260c0c8e1eabeefd3d364f62114b4aa8d2b0028e (diff)
downloadgsoc2013-evolution-ad17dfabe588f03cc21e4ee5aca86f4c540e517e.tar.gz
gsoc2013-evolution-ad17dfabe588f03cc21e4ee5aca86f4c540e517e.tar.zst
gsoc2013-evolution-ad17dfabe588f03cc21e4ee5aca86f4c540e517e.zip
Get the calendar view popup menu working.
Diffstat (limited to 'calendar')
-rw-r--r--calendar/gui/calendar-commands.c49
-rw-r--r--calendar/gui/e-cal-list-view.c15
-rw-r--r--calendar/gui/e-calendar-view.c688
-rw-r--r--calendar/gui/e-calendar-view.h4
-rw-r--r--calendar/gui/e-day-view.c13
-rw-r--r--calendar/gui/e-week-view.c8
-rw-r--r--calendar/gui/gnome-cal.h4
7 files changed, 105 insertions, 676 deletions
diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c
index 32bf54ea85..6368857ead 100644
--- a/calendar/gui/calendar-commands.c
+++ b/calendar/gui/calendar-commands.c
@@ -136,54 +136,6 @@ show_list_view_clicked (BonoboUIComponent *uic, gpointer data, const gchar *path
gnome_calendar_set_view (gcal, GNOME_CAL_LIST_VIEW);
}
-static void
-purge_cmd (BonoboUIComponent *uic, gpointer data, const gchar *path)
-{
- GnomeCalendar *gcal;
- GtkWidget *dialog, *parent, *box, *label, *spin;
- gint response;
-
- gcal = GNOME_CALENDAR (data);
-
- /* create the dialog */
- parent = gtk_widget_get_toplevel (GTK_WIDGET (gcal));
- dialog = gtk_message_dialog_new (
- (GtkWindow *)parent,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK_CANCEL,
- _("This operation will permanently erase all events older than the selected amount of time. If you continue, you will not be able to recover these events."));
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL);
-
- box = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), box, TRUE, FALSE, 6);
-
- label = gtk_label_new (_("Purge events older than"));
- gtk_box_pack_start (GTK_BOX (box), label, TRUE, FALSE, 6);
- spin = gtk_spin_button_new_with_range (0.0, 1000.0, 1.0);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), 60.0);
- gtk_box_pack_start (GTK_BOX (box), spin, FALSE, FALSE, 6);
- label = gtk_label_new (_("days"));
- gtk_box_pack_start (GTK_BOX (box), label, TRUE, FALSE, 6);
-
- gtk_widget_show_all (box);
-
- /* run the dialog */
- response = gtk_dialog_run (GTK_DIALOG (dialog));
- if (response == GTK_RESPONSE_OK) {
- gint days;
- time_t tt;
-
- days = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin));
- tt = time (NULL);
- tt -= (days * (24 * 3600));
-
- gnome_calendar_purge (gcal, tt);
- }
-
- gtk_widget_destroy (dialog);
-}
-
struct _sensitize_item {
const gchar *command;
guint32 enable;
@@ -342,7 +294,6 @@ static BonoboUIVerb verbs [] = {
BONOBO_UI_VERB ("ShowMonthView", show_month_view_clicked),
BONOBO_UI_VERB ("ShowListView", show_list_view_clicked),
- BONOBO_UI_VERB ("CalendarPurge", purge_cmd),
BONOBO_UI_VERB ("HelpDebug", help_debug),
BONOBO_UI_VERB_END
};
diff --git a/calendar/gui/e-cal-list-view.c b/calendar/gui/e-cal-list-view.c
index 1f9ca3fdcc..e82bd3c796 100644
--- a/calendar/gui/e-cal-list-view.c
+++ b/calendar/gui/e-cal-list-view.c
@@ -72,7 +72,7 @@ static gboolean e_cal_list_view_get_visible_time_range (ECalendarView *cal_view
static gboolean e_cal_list_view_popup_menu (GtkWidget *widget);
static void e_cal_list_view_show_popup_menu (ECalListView *cal_list_view, gint row,
- GdkEvent *gdk_event);
+ GdkEventButton *event);
static gboolean e_cal_list_view_on_table_double_click (GtkWidget *table, gint row, gint col,
GdkEvent *event, gpointer data);
static gboolean e_cal_list_view_on_table_right_click (GtkWidget *table, gint row, gint col,
@@ -364,14 +364,11 @@ e_cal_list_view_destroy (GtkObject *object)
}
static void
-e_cal_list_view_show_popup_menu (ECalListView *cal_list_view, gint row, GdkEvent *gdk_event)
+e_cal_list_view_show_popup_menu (ECalListView *cal_list_view,
+ gint row,
+ GdkEventButton *event)
{
-#if 0 /* KILL-BONOBO */
- GtkMenu *menu;
-
- menu = e_calendar_view_create_popup_menu (E_CALENDAR_VIEW (cal_list_view));
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL, gdk_event?gdk_event->button.button:0, gdk_event?gdk_event->button.time:gtk_get_current_event_time());
-#endif
+ e_calendar_view_popup_event (E_CALENDAR_VIEW (cal_list_view), event);
}
static gboolean
@@ -413,7 +410,7 @@ e_cal_list_view_on_table_right_click (GtkWidget *table, gint row, gint col, GdkE
{
ECalListView *cal_list_view = E_CAL_LIST_VIEW (data);
- e_cal_list_view_show_popup_menu (cal_list_view, row, event);
+ e_cal_list_view_show_popup_menu (cal_list_view, row, (GdkEventButton *) event);
return TRUE;
}
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index 3575c11eda..f2d20b3729 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -57,7 +57,6 @@
#include "print.h"
#include "goto.h"
/*#include "a11y/ea-calendar.h"*/ /* KILL-BONOBO */
-#include "e-cal-popup.h"
#include "misc.h"
#define E_CALENDAR_VIEW_GET_PRIVATE(obj) \
@@ -83,6 +82,7 @@ enum {
/* FIXME Why are we emitting these event signals here? Can't the model just be listened to? */
/* Signal IDs */
enum {
+ POPUP_EVENT,
SELECTION_CHANGED,
SELECTED_TIME_CHANGED,
TIMEZONE_CHANGED,
@@ -221,69 +221,82 @@ e_calendar_view_class_init (ECalendarViewClass *class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
- /* Create class' signals */
- signals[SELECTION_CHANGED] =
- g_signal_new ("selection_changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalendarViewClass, selection_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals[SELECTED_TIME_CHANGED] =
- g_signal_new ("selected_time_changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalendarViewClass, selected_time_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals[TIMEZONE_CHANGED] =
- g_signal_new ("timezone_changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalendarViewClass, timezone_changed),
- NULL, NULL,
- e_marshal_VOID__POINTER_POINTER,
- G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER);
-
- signals[EVENT_CHANGED] =
- g_signal_new ("event_changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ECalendarViewClass, event_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- signals[EVENT_ADDED] =
- g_signal_new ("event_added",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ECalendarViewClass, event_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,
- G_TYPE_POINTER);
-
- signals[USER_CREATED] =
- g_signal_new ("user_created",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalendarViewClass, user_created),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[OPEN_EVENT] =
- g_signal_new ("open_event",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ECalendarViewClass, open_event),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ signals[POPUP_EVENT] = g_signal_new (
+ "popup-event",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ECalendarViewClass, popup_event),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE, 1,
+ GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
+
+ signals[SELECTION_CHANGED] = g_signal_new (
+ "selection-changed",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalendarViewClass, selection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[SELECTED_TIME_CHANGED] = g_signal_new (
+ "selected-time-changed",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalendarViewClass, selected_time_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[TIMEZONE_CHANGED] = g_signal_new (
+ "timezone-changed",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalendarViewClass, timezone_changed),
+ NULL, NULL,
+ e_marshal_VOID__POINTER_POINTER,
+ G_TYPE_NONE, 2,
+ G_TYPE_POINTER,
+ G_TYPE_POINTER);
+
+ signals[EVENT_CHANGED] = g_signal_new (
+ "event-changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (ECalendarViewClass, event_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ signals[EVENT_ADDED] = g_signal_new (
+ "event-added",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (ECalendarViewClass, event_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ signals[USER_CREATED] = g_signal_new (
+ "user-created",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalendarViewClass, user_created),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[OPEN_EVENT] = g_signal_new (
+ "open-event",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (ECalendarViewClass, open_event),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
/*
* Key bindings
@@ -291,9 +304,8 @@ e_calendar_view_class_init (ECalendarViewClass *class)
binding_set = gtk_binding_set_by_class (class);
- gtk_binding_entry_add_signal (binding_set, GDK_o,
- GDK_CONTROL_MASK,
- "open_event", 0);
+ gtk_binding_entry_add_signal (
+ binding_set, GDK_o, GDK_CONTROL_MASK, "open-event", 0);
#if 0 /* KILL-BONOBO */
/* init the accessibility support for e_day_view */
@@ -308,10 +320,19 @@ e_calendar_view_init (ECalendarView *calendar_view)
}
void
+e_calendar_view_popup_event (ECalendarView *calendar_view,
+ GdkEventButton *event)
+{
+ g_return_if_fail (E_IS_CALENDAR_VIEW (calendar_view));
+ g_return_if_fail (event != NULL);
+
+ g_signal_emit (calendar_view, signals[POPUP_EVENT], 0, event);
+}
+
+void
e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart,
icaltimezone *default_zone, icalcomponent *icalcomp, gboolean in_top_canvas)
{
-#if 0 /* KILL-BONOBO */
ECalComponent *comp;
struct icaltimetype itime, old_dtstart, old_dtend;
time_t tt_start, tt_end, new_dtstart = 0;
@@ -429,7 +450,6 @@ e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart
}
g_object_unref (comp);
-#endif
}
GnomeCalendar *
@@ -1184,536 +1204,6 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
g_object_unref (comp);
}
-static void
-on_new_task (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
-#if 0 /* KILL-BONOBO */
- ECalendarView *cal_view = data;
- time_t dtstart, dtend;
-
- e_calendar_view_get_selected_time_range (cal_view, &dtstart, &dtend);
- gnome_calendar_new_task (cal_view->priv->calendar, &dtstart, &dtend);
-#endif
-}
-
-static void
-on_edit_appointment (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- 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,
- icalcomponent_get_first_property(event->comp_data->icalcomp, ICAL_ATTENDEE_PROPERTY) != NULL);
-
- g_list_free (selected);
- }
-}
-
-static void
-on_print (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
-#if 0 /* KILL-BONOBO */
- ECalendarView *cal_view = data;
-
- calendar_command_print (cal_view->priv->calendar, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG);
-#endif
-}
-
-static void
-on_save_as (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
- gchar *filename;
- gchar *ical_string;
- ECalendarViewEvent *event;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (!selected)
- return;
-
- filename = e_file_dialog_save (_("Save as..."), NULL);
- if (filename == NULL)
- return;
-
- event = (ECalendarViewEvent *) selected->data;
- ical_string = e_cal_get_component_as_string (event->comp_data->client, event->comp_data->icalcomp);
- if (ical_string == NULL) {
- g_warning ("Couldn't convert item to a string");
- return;
- }
-
- e_write_file_uri (filename, ical_string);
- g_free (ical_string);
-
- g_list_free (selected);
-}
-
-static void
-transfer_item_to (ECalendarViewEvent *event, ECal *dest_client, gboolean remove_item)
-{
- const gchar *uid;
- gchar *new_uid;
- icalcomponent *orig_icalcomp;
- icalproperty *icalprop;
-
- uid = icalcomponent_get_uid (event->comp_data->icalcomp);
-
- /* put the new object into the destination calendar */
- if (e_cal_get_object (dest_client, uid, NULL, &orig_icalcomp, NULL)) {
- icalcomponent_free (orig_icalcomp);
-
- if (!e_cal_modify_object (dest_client, event->comp_data->icalcomp, CALOBJ_MOD_ALL, NULL))
- return;
- } else {
- if (e_cal_util_component_is_instance (event->comp_data->icalcomp)) {
- icalcomponent *icalcomp = NULL;
-
- if (e_cal_get_object (event->comp_data->client, uid, NULL, &icalcomp, NULL)) {
- /* use master object when working with recurring event */
- orig_icalcomp = icalcomponent_new_clone (icalcomp);
- icalcomponent_free (icalcomp);
- } else {
- /* ... or remove the recurrence id property... */
- orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
-
- if (e_cal_util_component_has_recurrences (orig_icalcomp)) {
- /* ... for non-detached instances, to make it a master object */
- icalproperty *prop;
-
- prop = icalcomponent_get_first_property (orig_icalcomp, ICAL_RECURRENCEID_PROPERTY);
- if (prop)
- icalcomponent_remove_property (orig_icalcomp, prop);
- }
- }
- } else
- orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
-
- icalprop = icalproperty_new_x ("1");
- icalproperty_set_x_name (icalprop, "X-EVOLUTION-MOVE-CALENDAR");
- icalcomponent_add_property (orig_icalcomp, icalprop);
-
- if (!remove_item) {
- /* change the UID to avoid problems with duplicated UIDs */
- new_uid = e_cal_component_gen_uid ();
- icalcomponent_set_uid (orig_icalcomp, new_uid);
-
- g_free (new_uid);
- }
-
- new_uid = NULL;
- if (!e_cal_create_object (dest_client, orig_icalcomp, &new_uid, NULL)) {
- icalcomponent_free (orig_icalcomp);
- return;
- }
-
- if (new_uid)
- g_free (new_uid);
- icalcomponent_free (orig_icalcomp);
- }
-
- /* remove the item from the source calendar */
- if (remove_item) {
- if (e_cal_util_component_is_instance (event->comp_data->icalcomp) || e_cal_util_component_has_recurrences (event->comp_data->icalcomp)) {
- gchar *rid = NULL;
- struct icaltimetype recur_id = icalcomponent_get_recurrenceid (event->comp_data->icalcomp);
-
- if (!icaltime_is_null_time (recur_id))
- rid = icaltime_as_ical_string_r (recur_id);
-
- e_cal_remove_object_with_mod (event->comp_data->client, uid, rid, CALOBJ_MOD_ALL, NULL);
- g_free (rid);
- } else
- e_cal_remove_object (event->comp_data->client, uid, NULL);
- }
-}
-
-static void
-transfer_selected_items (ECalendarView *cal_view, gboolean remove_item)
-{
- GList *selected, *l;
- ESource *destination_source;
- ECal *dest_client;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (!selected)
- return;
-
- /* prompt the user for destination source */
- destination_source = select_source_dialog ((GtkWindow *) gtk_widget_get_toplevel ((GtkWidget *)cal_view), E_CAL_SOURCE_TYPE_EVENT);
- if (!destination_source)
- return;
-
- /* open the destination calendar */
- dest_client = auth_new_cal_from_source (destination_source, E_CAL_SOURCE_TYPE_EVENT);
- if (!dest_client || !e_cal_open (dest_client, FALSE, NULL)) {
- if (dest_client)
- g_object_unref (dest_client);
- g_object_unref (destination_source);
- return;
- }
-
-#if 0 /* KILL-BONOBO */
- /* process all selected events */
- if (remove_item)
- e_calendar_view_set_status_message (cal_view, _("Moving items"), -1);
- else
- e_calendar_view_set_status_message (cal_view, _("Copying items"), -1);
-#endif
-
- for (l = selected; l != NULL; l = l->next)
- transfer_item_to ((ECalendarViewEvent *) l->data, dest_client, remove_item);
-
-#if 0 /* KILL-BONOBO */
- e_calendar_view_set_status_message (cal_view, NULL, -1);
-#endif
-
- /* free memory */
- g_object_unref (destination_source);
- g_object_unref (dest_client);
- g_list_free (selected);
-}
-
-static void
-on_copy_to (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- transfer_selected_items (cal_view, FALSE);
-}
-
-static void
-on_move_to (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- transfer_selected_items (cal_view, TRUE);
-}
-
-static void
-on_meeting (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (selected) {
- ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data;
- e_calendar_view_edit_appointment (cal_view, event->comp_data->client, event->comp_data->icalcomp, TRUE);
-
- g_list_free (selected);
- }
-}
-
-static void
-set_attendee_status_for_delegate (icalcomponent *icalcomp, ECal *client)
-{
- icalproperty *prop;
- icalparameter *param;
- gchar *address = NULL;
- ECalComponent *comp;
- gboolean found = FALSE;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp));
-
- address = itip_get_comp_attendee (comp, client);
-
- for (prop = icalcomponent_get_first_property (icalcomp, ICAL_ATTENDEE_PROPERTY);
- prop;
- prop = icalcomponent_get_next_property (icalcomp, ICAL_ATTENDEE_PROPERTY)) {
- const gchar *attendee = icalproperty_get_attendee (prop);
-
- if (!g_ascii_strcasecmp (itip_strip_mailto (attendee), address)) {
- param = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT);
- icalproperty_set_parameter (prop, param);
-
- param = icalparameter_new_partstat (ICAL_PARTSTAT_DELEGATED);
- icalproperty_set_parameter (prop, param);
-
- found = TRUE;
- break;
- }
-
- }
-
- /* We couldn find the attendee in the component, so add a new attendee */
- if (!found) {
- gchar *temp = g_strdup_printf ("MAILTO:%s", address);
-
- prop = icalproperty_new_attendee ((const gchar *) temp);
- icalcomponent_add_property (icalcomp, prop);
-
- param = icalparameter_new_partstat (ICAL_PARTSTAT_DELEGATED);
- icalproperty_add_parameter (prop, param);
-
- param = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT);
- icalproperty_add_parameter (prop, param);
-
- param = icalparameter_new_cutype (ICAL_CUTYPE_INDIVIDUAL);
- icalproperty_add_parameter (prop, param);
-
- param = icalparameter_new_rsvp (ICAL_RSVP_TRUE);
- icalproperty_add_parameter (prop, param);
-
- g_free (temp);
- }
-
- g_free (address);
- g_object_unref (comp);
-}
-
-static void
-on_delegate (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
- guint32 flags = 0;
- icalcomponent *clone;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (selected) {
- ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data;
-
- clone = icalcomponent_new_clone (event->comp_data->icalcomp);
- set_attendee_status_for_delegate (clone, event->comp_data->client);
-
- flags |= COMP_EDITOR_MEETING | COMP_EDITOR_DELEGATE;
-
- e_calendar_view_open_event_with_flags (cal_view, event->comp_data->client, clone, flags);
-
- icalcomponent_free (clone);
- g_list_free (selected);
- }
-}
-
-static void
-on_forward (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (selected) {
- ECalComponent *comp;
- ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, event->comp_data->client, NULL, NULL, NULL, TRUE, FALSE);
-
- g_list_free (selected);
- g_object_unref (comp);
- }
-}
-
-static void
-on_reply (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
- gboolean reply_all = FALSE;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (selected) {
- ECalComponent *comp;
- ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- reply_to_calendar_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, event->comp_data->client, reply_all, NULL, NULL);
-
- g_list_free (selected);
- g_object_unref (comp);
- }
-}
-
-static void
-on_reply_all (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- GList *selected;
- gboolean reply_all = TRUE;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (selected) {
- ECalComponent *comp;
- ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- reply_to_calendar_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, event->comp_data->client, reply_all, NULL, NULL);
-
- g_list_free (selected);
- g_object_unref (comp);
- }
-}
-
-static void
-on_delete_appointment (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- e_calendar_view_delete_selected_event (cal_view);
-}
-
-static void
-on_unrecur_appointment (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
- ECalendarViewEvent *event;
- ECalComponent *comp, *new_comp;
- ECalComponentDateTime date;
- struct icaltimetype itt;
- GList *selected;
- ECal *client;
- gchar *new_uid;
- ECalComponentId *id = NULL;
-
- selected = e_calendar_view_get_selected_events (cal_view);
- if (!selected)
- return;
-
- event = (ECalendarViewEvent *) selected->data;
- client = g_object_ref (event->comp_data->client);
-
- date.value = &itt;
- date.tzid = NULL;
-
- /* For the recurring object, we add an exception to get rid of the
- instance. */
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- id = e_cal_component_get_id (comp);
-
- /* For the unrecurred instance we duplicate the original object,
- create a new uid for it, get rid of the recurrence rules, and set
- the start & end times to the instances times. */
- new_comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (new_comp, icalcomponent_new_clone (event->comp_data->icalcomp));
-
- new_uid = e_cal_component_gen_uid ();
- e_cal_component_set_uid (new_comp, new_uid);
- g_free (new_uid);
- e_cal_component_set_recurid (new_comp, NULL);
- e_cal_component_set_rdate_list (new_comp, NULL);
- e_cal_component_set_rrule_list (new_comp, NULL);
- e_cal_component_set_exdate_list (new_comp, NULL);
- e_cal_component_set_exrule_list (new_comp, NULL);
-
- date.value = &itt;
- date.tzid = icaltimezone_get_tzid (e_calendar_view_get_timezone (cal_view));
-
- *date.value = icaltime_from_timet_with_zone (event->comp_data->instance_start, FALSE,
- e_calendar_view_get_timezone (cal_view));
- cal_comp_set_dtstart_with_oldzone (client, new_comp, &date);
- *date.value = icaltime_from_timet_with_zone (event->comp_data->instance_end, FALSE,
- e_calendar_view_get_timezone (cal_view));
- cal_comp_set_dtend_with_oldzone (client, new_comp, &date);
- e_cal_component_commit_sequence (new_comp);
-
- /* Now update both ECalComponents. Note that we do this last since at
- * present the updates happen synchronously so our event may disappear.
- */
-
- if (!e_cal_remove_object_with_mod (client, id->uid, id->rid, CALOBJ_MOD_THIS,
- NULL))
- g_message ("on_unrecur_appointment(): Could not remove the old object!");
-
- e_cal_component_free_id (id);
- g_object_unref (comp);
-
- if (!e_cal_create_object (client, e_cal_component_get_icalcomponent (new_comp), &new_uid, NULL))
- g_message ("on_unrecur_appointment(): Could not update the object!");
- else
- g_free (new_uid);
-
- g_object_unref (new_comp);
- g_object_unref (client);
- g_list_free (selected);
-}
-
-static void
-on_delete_occurrence (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- e_calendar_view_delete_selected_occurrence (cal_view);
-}
-
-static void
-on_cut (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- e_calendar_view_cut_clipboard (cal_view);
-}
-
-static void
-on_copy (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- e_calendar_view_copy_clipboard (cal_view);
-}
-
-static void
-on_paste (EPopup *ep, EPopupItem *pitem, gpointer data)
-{
- ECalendarView *cal_view = data;
-
- e_calendar_view_paste_clipboard (cal_view);
-}
-
-static EPopupItem ecv_main_items [] = {
- { E_POPUP_ITEM, (gchar *) "30.task", (gchar *) N_("New _Task"), on_new_task, NULL, (gchar *) "stock_task", 0, 0},
-
- { E_POPUP_BAR, (gchar *) "40."},
- { E_POPUP_ITEM, (gchar *) "40.print", (gchar *) N_("P_rint..."), on_print, NULL, (gchar *) GTK_STOCK_PRINT, 0, 0 },
-
- { E_POPUP_BAR, (gchar *) "50." },
- { E_POPUP_ITEM, (gchar *) "50.paste", (gchar *) N_("_Paste"), on_paste, NULL, (gchar *) GTK_STOCK_PASTE, 0, E_CAL_POPUP_SELECT_EDITABLE },
-
- { E_POPUP_BAR, (gchar *) "60." },
- /* FIXME: hook in this somehow */
- { E_POPUP_SUBMENU, (gchar *) "60.view", (gchar *) N_("_Current View") },
-};
-
-static EPopupItem ecv_child_items [] = {
- { E_POPUP_ITEM, (gchar *) "00.open", (gchar *) N_("_Open"), on_edit_appointment, NULL, (gchar *) GTK_STOCK_OPEN, 0, E_CAL_POPUP_SELECT_NOTEDITING },
- { E_POPUP_ITEM, (gchar *) "10.saveas", (gchar *) N_("_Save As..."), on_save_as, NULL, (gchar *) GTK_STOCK_SAVE_AS, 0, E_CAL_POPUP_SELECT_NOTEDITING },
-
- { E_POPUP_BAR, (gchar *) "30." },
-
- { E_POPUP_ITEM, (gchar *) "31.cut", (gchar *) N_("C_ut"), on_cut, NULL, (gchar *) GTK_STOCK_CUT, 0, E_CAL_POPUP_SELECT_NOTEDITING|E_CAL_POPUP_SELECT_EDITABLE|E_CAL_POPUP_SELECT_ORGANIZER },
- { E_POPUP_ITEM, (gchar *) "32.copy", (gchar *) N_("_Copy"), on_copy, NULL, (gchar *) GTK_STOCK_COPY, 0, E_CAL_POPUP_SELECT_NOTEDITING|E_CAL_POPUP_SELECT_ORGANIZER },
- { E_POPUP_ITEM, (gchar *) "33.paste", (gchar *) N_("_Paste"), on_paste, NULL, (gchar *) GTK_STOCK_PASTE, 0, E_CAL_POPUP_SELECT_EDITABLE },
-
- { E_POPUP_BAR, (gchar *) "40." },
-
- { E_POPUP_ITEM, (gchar *) "43.copyto", (gchar *) N_("Cop_y to Calendar..."), on_copy_to, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING },
- { E_POPUP_ITEM, (gchar *) "44.moveto", (gchar *) N_("Mo_ve to Calendar..."), on_move_to, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, (gchar *) "45.delegate", (gchar *) N_("_Delegate Meeting..."), on_delegate, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_DELEGATABLE | E_CAL_POPUP_SELECT_MEETING},
- { E_POPUP_ITEM, (gchar *) "46.schedule", (gchar *) N_("_Schedule Meeting..."), on_meeting, NULL, NULL, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE | E_CAL_POPUP_SELECT_NOTMEETING },
- { E_POPUP_ITEM, (gchar *) "47.forward", (gchar *) N_("_Forward as iCalendar..."), on_forward, NULL, (gchar *) "mail-forward", 0, E_CAL_POPUP_SELECT_NOTEDITING },
- { E_POPUP_ITEM, (gchar *) "48.reply", (gchar *) N_("_Reply"), on_reply, NULL, (gchar *) "mail-reply-sender", E_CAL_POPUP_SELECT_MEETING | E_CAL_POPUP_SELECT_NOTEDITING },
- { E_POPUP_ITEM, (gchar *) "49.reply-all", (gchar *) N_("Reply to _All"), on_reply_all, NULL, (gchar *) "mail-reply-all", E_CAL_POPUP_SELECT_MEETING, E_CAL_POPUP_SELECT_NOTEDITING },
-
- { E_POPUP_BAR, (gchar *) "50." },
-
- { E_POPUP_ITEM, (gchar *) "51.delete", (gchar *) N_("_Delete"), on_delete_appointment, NULL, (gchar *) GTK_STOCK_DELETE, E_CAL_POPUP_SELECT_NONRECURRING, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, (gchar *) "52.move", (gchar *) N_("Make this Occurrence _Movable"), on_unrecur_appointment, NULL, NULL, E_CAL_POPUP_SELECT_RECURRING | E_CAL_POPUP_SELECT_INSTANCE, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, (gchar *) "53.delete", (gchar *) N_("Delete this _Occurrence"), on_delete_occurrence, NULL, (gchar *) GTK_STOCK_DELETE, E_CAL_POPUP_SELECT_RECURRING, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE },
- { E_POPUP_ITEM, (gchar *) "54.delete", (gchar *) N_("Delete _All Occurrences"), on_delete_appointment, NULL, (gchar *) GTK_STOCK_DELETE, E_CAL_POPUP_SELECT_RECURRING, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_EDITABLE },
-};
-
void
e_calendar_view_open_event (ECalendarView *cal_view)
{
diff --git a/calendar/gui/e-calendar-view.h b/calendar/gui/e-calendar-view.h
index 58334d3264..5af1d77801 100644
--- a/calendar/gui/e-calendar-view.h
+++ b/calendar/gui/e-calendar-view.h
@@ -108,6 +108,7 @@ struct _ECalendarViewClass {
GtkTableClass parent_class;
/* Notification signals */
+ void (* popup_event) (ECalendarView *cal_view, GdkEventButton *event);
void (* selection_changed) (ECalendarView *cal_view);
void (* selected_time_changed) (ECalendarView *cal_view);
void (* timezone_changed) (ECalendarView *cal_view, icaltimezone *old_zone, icaltimezone *new_zone);
@@ -150,7 +151,8 @@ void e_calendar_view_delete_selected_events (ECalendarView *cal_view);
void e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view);
CompEditor* e_calendar_view_open_event_with_flags (ECalendarView *cal_view, ECal *client, icalcomponent *icalcomp, guint32 flags);
-GtkMenu *e_calendar_view_create_popup_menu (ECalendarView *cal_view);
+void e_calendar_view_popup_event (ECalendarView *cal_view,
+ GdkEventButton *event);
void e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart,
icaltimezone *default_zone, icalcomponent *icalcomp, gboolean in_top_canvas);
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 879155fe85..ffd980e23a 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -261,7 +261,7 @@ static void e_day_view_on_event_right_click (EDayView *day_view,
gint day,
gint event_num);
static void e_day_view_show_popup_menu (EDayView *day_view,
- GdkEvent *gdk_event,
+ GdkEventButton *event,
gint day,
gint event_num);
@@ -3748,7 +3748,7 @@ popup_destroyed_cb (gpointer data, GObject *where_object_was)
static void
e_day_view_show_popup_menu (EDayView *day_view,
- GdkEvent *gdk_event,
+ GdkEventButton *event,
gint day,
gint event_num)
{
@@ -3757,11 +3757,7 @@ e_day_view_show_popup_menu (EDayView *day_view,
day_view->popup_event_day = day;
day_view->popup_event_num = event_num;
-#if 0 /* KILL-BONOBO */
- popup = e_calendar_view_create_popup_menu (E_CALENDAR_VIEW (day_view));
- g_object_weak_ref (G_OBJECT (popup), popup_destroyed_cb, day_view);
- gtk_menu_popup (popup, NULL, NULL, NULL, NULL, gdk_event?gdk_event->button.button:0, gdk_event?gdk_event->button.time:gtk_get_current_event_time());
-#endif
+ e_calendar_view_popup_event (E_CALENDAR_VIEW (day_view), event);
}
static gboolean
@@ -3843,8 +3839,7 @@ e_day_view_on_event_right_click (EDayView *day_view,
gint day,
gint event_num)
{
- e_day_view_show_popup_menu (day_view, (GdkEvent*)bevent,
- day, event_num);
+ e_day_view_show_popup_menu (day_view, bevent, day, event_num);
}
static gboolean
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 7efd90a8c7..e027ef2429 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -4324,15 +4324,9 @@ e_week_view_show_popup_menu (EWeekView *week_view,
GdkEventButton *bevent,
gint event_num)
{
- GtkMenu *popup;
-
week_view->popup_event_num = event_num;
-#if 0 /* KILL-BONOBO */
- popup = e_calendar_view_create_popup_menu (E_CALENDAR_VIEW (week_view));
- g_object_weak_ref (G_OBJECT (popup), popup_destroyed_cb, week_view);
- gtk_menu_popup (popup, NULL, NULL, NULL, NULL, bevent?bevent->button:0, bevent?bevent->time:gtk_get_current_event_time());
-#endif
+ e_calendar_view_popup_event (E_CALENDAR_VIEW (week_view), bevent);
}
static gboolean
diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h
index 437bce0f01..adcacf86fd 100644
--- a/calendar/gui/gnome-cal.h
+++ b/calendar/gui/gnome-cal.h
@@ -24,8 +24,8 @@
*
*/
-#ifndef GNOME_CALENDAR_APP_H
-#define GNOME_CALENDAR_APP_H
+#ifndef GNOME_CALENDAR_H
+#define GNOME_CALENDAR_H
#include <time.h>
#include <gtk/gtk.h>