aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorChenthill Palanisamy <pchen@src.gnome.org>2006-08-10 15:34:30 +0800
committerChenthill Palanisamy <pchen@src.gnome.org>2006-08-10 15:34:30 +0800
commitd7e017d1bf0c1237bcd4c94e62378a2bd6f56538 (patch)
tree021e61e54f2878644e2c7eef3de11a8315b734af /calendar/gui
parentd37f6d14e38072a1550e7573cb958299c417de1f (diff)
downloadgsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar.gz
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar.bz2
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar.lz
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar.xz
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.tar.zst
gsoc2013-evolution-d7e017d1bf0c1237bcd4c94e62378a2bd6f56538.zip
Fixes shared memos for File system.
svn path=/trunk/; revision=32520
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/dialogs/comp-editor.c48
-rw-r--r--calendar/gui/dialogs/event-editor.c2
-rw-r--r--calendar/gui/dialogs/memo-page.c45
-rw-r--r--calendar/gui/dialogs/send-comp.c3
-rw-r--r--calendar/gui/dialogs/task-editor.c2
-rw-r--r--calendar/gui/e-cal-model-calendar.c2
-rw-r--r--calendar/gui/e-calendar-table.c2
-rw-r--r--calendar/gui/e-calendar-view.c12
-rw-r--r--calendar/gui/e-itip-control.c6
-rw-r--r--calendar/gui/e-memo-table.c2
-rw-r--r--calendar/gui/itip-utils.c21
-rw-r--r--calendar/gui/itip-utils.h2
-rw-r--r--calendar/gui/tasks-control.c2
13 files changed, 120 insertions, 29 deletions
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index 80827036f9..83a1f09d40 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -861,9 +861,12 @@ save_comp_with_send (CompEditor *editor)
return FALSE;
if ((delegate && !e_cal_get_save_schedules (priv->client)) || (send && send_component_dialog ((GtkWindow *) editor, priv->client, priv->comp, !priv->existing_org))) {
- if (itip_organizer_is_user (priv->comp, priv->client))
- return comp_editor_send_comp (editor, E_CAL_COMPONENT_METHOD_REQUEST);
- else {
+ if (itip_organizer_is_user (priv->comp, priv->client)) {
+ if (e_cal_component_get_vtype (priv->comp) == E_CAL_COMPONENT_JOURNAL)
+ return comp_editor_send_comp (editor, E_CAL_COMPONENT_METHOD_PUBLISH);
+ else
+ return comp_editor_send_comp (editor, E_CAL_COMPONENT_METHOD_REQUEST);
+ } else {
if (!comp_editor_send_comp (editor, E_CAL_COMPONENT_METHOD_REQUEST))
return FALSE;
@@ -2460,12 +2463,43 @@ set_attendees_for_delegation (ECalComponent *comp, const char *address, ECalComp
}
+static void
+get_users_from_memo_comp (ECalComponent *comp, GList **users)
+{
+ icalcomponent *icalcomp;
+ icalproperty *icalprop;
+ const char *attendees = NULL;
+ char **emails, **iter;
+
+ icalcomp = e_cal_component_get_icalcomponent (comp);
+
+ for (icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY); icalprop;
+ icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY)) {
+ if (g_str_equal (icalproperty_get_x_name (icalprop), "X-EVOLUTION-RECIPIENTS")) {
+ break;
+ }
+ }
+
+ if (icalprop) {
+ attendees = icalproperty_get_x (icalprop);
+ emails = g_strsplit (attendees, ";", -1);
+
+ iter = emails;
+ while (*iter) {
+ *users = g_list_append (*users, g_strdup (*iter));
+ iter++;
+ }
+ g_strfreev (emails);
+ }
+}
+
static gboolean
real_send_comp (CompEditor *editor, ECalComponentItipMethod method)
{
CompEditorPrivate *priv;
ECalComponent *send_comp;
char *address = NULL;
+ GList *users = NULL;
g_return_val_if_fail (editor != NULL, FALSE);
g_return_val_if_fail (IS_COMP_EDITOR (editor), FALSE);
@@ -2473,6 +2507,10 @@ real_send_comp (CompEditor *editor, ECalComponentItipMethod method)
priv = editor->priv;
send_comp = e_cal_component_clone (priv->comp);
+
+ if (e_cal_component_get_vtype (send_comp) == E_CAL_COMPONENT_JOURNAL)
+ get_users_from_memo_comp (send_comp, &users);
+
/* The user updates the delegated status to the Organizer, so remove all other attendees */
if ((priv->flags & COMP_EDITOR_DELEGATE)) {
address = itip_get_comp_attendee (send_comp, priv->client);
@@ -2483,7 +2521,7 @@ real_send_comp (CompEditor *editor, ECalComponentItipMethod method)
if (!e_cal_component_has_attachments (priv->comp)) {
if (itip_send_comp (method, send_comp, priv->client,
- NULL, NULL)) {
+ NULL, NULL, users)) {
g_object_unref (send_comp);
return TRUE;
}
@@ -2504,7 +2542,7 @@ real_send_comp (CompEditor *editor, ECalComponentItipMethod method)
/* mime_attach_list is freed by itip_send_comp */
mime_attach_list = comp_editor_get_mime_attach_list (editor);
if (itip_send_comp (method, send_comp, priv->client,
- NULL, mime_attach_list)) {
+ NULL, mime_attach_list, users)) {
save_comp (editor);
g_object_unref (send_comp);
return TRUE;
diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
index 389834180f..4869f8887a 100644
--- a/calendar/gui/dialogs/event-editor.c
+++ b/calendar/gui/dialogs/event-editor.c
@@ -767,7 +767,7 @@ event_editor_send_comp (CompEditor *editor, ECalComponentItipMethod method)
client = e_meeting_store_get_e_cal (priv->model);
result = itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp,
- client, NULL, NULL);
+ client, NULL, NULL, NULL);
g_object_unref (comp);
if (!result)
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 42850b60b3..41d03f322b 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -485,7 +485,7 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
}
if (book) {
- GList *contacts;
+ GList *contacts = NULL;
EContact *n_con = NULL;
char *qu;
EBookQuery *query;
@@ -496,7 +496,6 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
if (!e_book_get_contacts (book, query, &contacts, NULL)) {
g_warning ("Could not get contact from the book \n");
- return;
} else {
des = e_destination_new ();
n_con = contacts->data;
@@ -704,7 +703,7 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
if (str)
g_free (str);
- if ((page->flags & COMP_EDITOR_PAGE_IS_SHARED) && fill_comp_with_recipients (priv->name_selector, comp)) {
+ if ((page->flags & COMP_EDITOR_PAGE_IS_SHARED) && (page->flags & COMP_EDITOR_PAGE_NEW_ITEM) && fill_comp_with_recipients (priv->name_selector, comp)) {
ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
EAccount *a;
@@ -732,6 +731,8 @@ memo_page_fill_component (CompEditorPage *page, ECalComponent *comp)
organizer.cn = a->id->name;
e_cal_component_set_organizer (comp, &organizer);
+ comp_editor_page_notify_needs_send (page);
+
g_free (addr);
}
@@ -899,6 +900,27 @@ widget_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer data)
return FALSE;
}
+
+/* Callback used when the summary changes; we emit the notification signal. */
+static void
+summary_changed_cb (GtkEditable *editable, gpointer data)
+{
+ MemoPage *mpage;
+ MemoPagePrivate *priv;
+ gchar *summary;
+
+ mpage = MEMO_PAGE (data);
+ priv = mpage->priv;
+
+ if (priv->updating)
+ return;
+
+ summary = e_dialog_editable_get (GTK_WIDGET (editable));
+ comp_editor_page_notify_summary_changed (COMP_EDITOR_PAGE (mpage),
+ summary);
+ g_free (summary);
+}
+
static void
to_button_clicked_cb (GtkButton *button, gpointer data)
{
@@ -925,6 +947,14 @@ init_widgets (MemoPage *mpage)
priv = mpage->priv;
+ /* Summary */
+ g_signal_connect((priv->summary_entry), "changed",
+ G_CALLBACK (summary_changed_cb), mpage);
+ g_signal_connect(priv->summary_entry, "focus-in-event",
+ G_CALLBACK (widget_focus_in_cb), mpage);
+ g_signal_connect(priv->summary_entry, "focus-out-event",
+ G_CALLBACK (widget_focus_out_cb), mpage);
+
/* Memo Content */
text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->memo_content));
@@ -942,7 +972,7 @@ init_widgets (MemoPage *mpage)
/* Source selector */
g_signal_connect((priv->source_selector), "source_selected",
G_CALLBACK (source_changed_cb), mpage);
-
+
/* Connect the default signal handler to use to make sure the "changed"
field gets set whenever a field is changed. */
@@ -955,6 +985,12 @@ init_widgets (MemoPage *mpage)
g_signal_connect((priv->summary_entry), "changed",
G_CALLBACK (field_changed_cb), mpage);
+
+ g_signal_connect((priv->source_selector), "changed",
+ G_CALLBACK (field_changed_cb), mpage);
+
+ g_signal_connect((priv->start_date), "changed",
+ G_CALLBACK (field_changed_cb), mpage);
if (priv->name_selector) {
ENameSelectorDialog *name_selector_dialog;
@@ -964,6 +1000,7 @@ init_widgets (MemoPage *mpage)
g_signal_connect (name_selector_dialog, "response",
G_CALLBACK (response_cb), mpage);
g_signal_connect ((priv->to_button), "clicked", G_CALLBACK (to_button_clicked_cb), mpage);
+ g_signal_connect ((priv->to_entry), "changed", G_CALLBACK (field_changed_cb), mpage);
}
memo_page_set_show_categories (mpage, calendar_config_get_show_categories());
diff --git a/calendar/gui/dialogs/send-comp.c b/calendar/gui/dialogs/send-comp.c
index 9e88f302eb..e9f6275400 100644
--- a/calendar/gui/dialogs/send-comp.c
+++ b/calendar/gui/dialogs/send-comp.c
@@ -61,7 +61,8 @@ send_component_dialog (GtkWindow *parent, ECal *client, ECalComponent *comp, gbo
else
id = "calendar:prompt-send-updated-task-info";
break;
-
+ case E_CAL_COMPONENT_JOURNAL:
+ return TRUE;
default:
g_message ("send_component_dialog(): "
"Cannot handle object of type %d", vtype);
diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c
index 11b6443843..482fb4ef39 100644
--- a/calendar/gui/dialogs/task-editor.c
+++ b/calendar/gui/dialogs/task-editor.c
@@ -584,7 +584,7 @@ task_editor_send_comp (CompEditor *editor, ECalComponentItipMethod method)
client = e_meeting_store_get_e_cal (priv->model);
result = itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp,
- client, NULL, NULL);
+ client, NULL, NULL, NULL);
g_object_unref (comp);
if (!result)
diff --git a/calendar/gui/e-cal-model-calendar.c b/calendar/gui/e-cal-model-calendar.c
index f27bd8b451..e7af82566e 100644
--- a/calendar/gui/e-cal-model-calendar.c
+++ b/calendar/gui/e-cal-model-calendar.c
@@ -381,7 +381,7 @@ ecmc_set_value_at (ETableModel *etm, int col, int row, const void *value)
if (itip_organizer_is_user (comp, comp_data->client) &&
send_component_dialog (NULL, comp_data->client, comp, FALSE))
itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp,
- comp_data->client, NULL, NULL);
+ comp_data->client, NULL, NULL, NULL);
} else {
g_warning (G_STRLOC ": Could not modify the object!");
diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c
index 300b9dbeb0..ad017e534d 100644
--- a/calendar/gui/e-calendar-table.c
+++ b/calendar/gui/e-calendar-table.c
@@ -1183,7 +1183,7 @@ e_calendar_table_on_forward (EPopup *ep, EPopupItem *pitem, void *data)
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp));
- itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL, NULL);
g_object_unref (comp);
}
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index c8408c647c..6ab0e7f908 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -385,7 +385,7 @@ e_calendar_view_add_event (ECalendarView *cal_view, ECal *client, time_t dtstart
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
client, comp, TRUE)) {
itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp,
- client, NULL, NULL);
+ client, NULL, NULL, NULL);
}
} else {
g_message (G_STRLOC ": Could not create the object!");
@@ -690,7 +690,7 @@ e_calendar_view_cut_clipboard (ECalendarView *cal_view)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client, comp, TRUE))
itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp,
- event->comp_data->client, NULL, NULL);
+ event->comp_data->client, NULL, NULL, NULL);
e_cal_component_get_uid (comp, &uid);
if (e_cal_component_is_instance (comp)) {
@@ -961,7 +961,7 @@ delete_event (ECalendarView *cal_view, ECalendarViewEvent *event)
event->comp_data->client,
comp, TRUE))
itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp,
- event->comp_data->client, NULL, NULL);
+ event->comp_data->client, NULL, NULL, NULL);
e_cal_component_get_uid (comp, &uid);
if (!uid || !*uid) {
@@ -1108,7 +1108,7 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
e_cal_component_free_datetime (&range.datetime);
}
- itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp, event->comp_data->client, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_CANCEL, comp, event->comp_data->client, NULL, NULL, NULL);
}
if (is_instance)
@@ -1507,7 +1507,7 @@ on_forward (EPopup *ep, EPopupItem *pitem, void *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);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, event->comp_data->client, NULL, NULL, NULL);
g_list_free (selected);
g_object_unref (comp);
@@ -2024,7 +2024,7 @@ e_calendar_view_modify_and_send (ECalComponent *comp,
if (e_cal_modify_object (client, e_cal_component_get_icalcomponent (comp), mod, NULL)) {
if (itip_organizer_is_user (comp, client) &&
send_component_dialog (toplevel, client, comp, new))
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, client, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, client, NULL, NULL, NULL);
} else {
g_message (G_STRLOC ": Could not update the object!");
}
diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c
index 314387e1eb..bc4ac19369 100644
--- a/calendar/gui/e-itip-control.c
+++ b/calendar/gui/e-itip-control.c
@@ -1993,7 +1993,7 @@ send_item (EItipControl *itip)
comp = get_real_item (itip);
if (comp != NULL) {
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, priv->current_ecal, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, priv->current_ecal, NULL, NULL, NULL);
g_object_unref (comp);
dialog = gnome_ok_dialog (_("Item sent!\n"));
} else {
@@ -2039,7 +2039,7 @@ send_freebusy (EItipControl *itip)
for (l = comp_list; l; l = l->next) {
ECalComponent *comp = E_CAL_COMPONENT (l->data);
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, NULL, NULL, NULL);
g_object_unref (comp);
}
@@ -2478,7 +2478,7 @@ ok_clicked_cb (GtkWidget *widget, gpointer data)
g_slist_free (list);
e_cal_component_rescan (comp);
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, priv->top_level, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, priv->top_level, NULL, NULL);
g_object_unref (comp);
}
diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c
index 212d12187f..49594300dd 100644
--- a/calendar/gui/e-memo-table.c
+++ b/calendar/gui/e-memo-table.c
@@ -863,7 +863,7 @@ e_memo_table_on_forward (EPopup *ep, EPopupItem *pitem, void *data)
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp));
- itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL, NULL);
g_object_unref (comp);
}
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index 08af83cab3..e34ec28c78 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -601,7 +601,23 @@ comp_to_list (ECalComponentItipMethod method, ECalComponent *comp, GList *users,
e_cal_component_free_attendee_list (attendees);
break;
+ case E_CAL_COMPONENT_METHOD_PUBLISH:
+ if(users) {
+ len = g_list_length (users);
+ to_list = GNOME_Evolution_Composer_RecipientList__alloc ();
+ to_list->_maximum = len;
+ to_list->_length = 0;
+ to_list->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (len);
+
+ for (l = users; l != NULL; l = l->next) {
+ recipient = &(to_list->_buffer[to_list->_length]);
+ recipient->name = CORBA_string_dup ("");
+ recipient->address = CORBA_string_dup (l->data);
+ to_list->_length++;
+ }
+ break;
+ }
default:
to_list = GNOME_Evolution_Composer_RecipientList__alloc ();
to_list->_maximum = to_list->_length = 0;
@@ -1145,12 +1161,11 @@ append_cal_attachments (GNOME_Evolution_Composer composer_server, ECalComponent
gboolean
itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp,
- ECal *client, icalcomponent *zones, GSList *attachments_list)
+ ECal *client, icalcomponent *zones, GSList *attachments_list, GList *users)
{
GNOME_Evolution_Composer composer_server;
ECalComponent *comp = NULL;
icalcomponent *top_level = NULL;
- GList *users = NULL;
GNOME_Evolution_Composer_RecipientList *to_list = NULL;
GNOME_Evolution_Composer_RecipientList *cc_list = NULL;
GNOME_Evolution_Composer_RecipientList *bcc_list = NULL;
@@ -1267,7 +1282,7 @@ itip_send_comp (ECalComponentItipMethod method, ECalComponent *send_comp,
retval = TRUE;
}
- if (method == E_CAL_COMPONENT_METHOD_PUBLISH) {
+ if ((method == E_CAL_COMPONENT_METHOD_PUBLISH) && !users) {
GNOME_Evolution_Composer_show (composer_server, &ev);
if (BONOBO_EX (&ev))
g_warning ("Unable to show the composer while sending iTip message");
diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h
index 843ae8210d..eded65974d 100644
--- a/calendar/gui/itip-utils.h
+++ b/calendar/gui/itip-utils.h
@@ -40,7 +40,7 @@ const gchar *itip_strip_mailto (const gchar *address);
char *itip_get_comp_attendee (ECalComponent *comp, ECal *client);
gboolean itip_send_comp (ECalComponentItipMethod method, ECalComponent *comp,
- ECal *client, icalcomponent *zones, GSList *attachments_list);
+ ECal *client, icalcomponent *zones, GSList *attachments_list, GList *users);
gboolean itip_publish_comp (ECal *client, gchar* uri, gchar* username,
gchar* password, ECalComponent **pub_comp);
diff --git a/calendar/gui/tasks-control.c b/calendar/gui/tasks-control.c
index ec35373445..0ef93c932a 100644
--- a/calendar/gui/tasks-control.c
+++ b/calendar/gui/tasks-control.c
@@ -540,7 +540,7 @@ tasks_control_forward_cmd (BonoboUIComponent *uic,
ECalComponent *comp;
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp));
- itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL, NULL);
g_object_unref (comp);
}
}