diff options
Diffstat (limited to 'calendar/gui/dialogs/comp-editor.c')
-rw-r--r-- | calendar/gui/dialogs/comp-editor.c | 109 |
1 files changed, 101 insertions, 8 deletions
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 3e245a0c98..1179453aff 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -35,9 +35,11 @@ #include <libgnomeui/gnome-dialog-util.h> #include <libgnomeui/gnome-stock.h> #include <libgnomeui/gnome-window-icon.h> +#include <libgnomeui/gnome-messagebox.h> #include <bonobo/bonobo-ui-container.h> #include <bonobo/bonobo-ui-util.h> #include <gal/widgets/e-unicode.h> +#include <gal/widgets/e-gui-utils.h> #include <e-util/e-dialog-utils.h> #include <evolution-shell-component-utils.h> #include "../print.h" @@ -70,7 +72,12 @@ struct _CompEditorPrivate { gboolean changed; gboolean needs_send; - gboolean needs_send_new; + + gboolean existing_org; + gboolean user_org; + + gboolean warned; + gboolean updating; }; @@ -240,7 +247,9 @@ comp_editor_init (CompEditor *editor) priv->pages = NULL; priv->changed = FALSE; priv->needs_send = FALSE; - priv->needs_send_new = FALSE; + priv->existing_org = FALSE; + priv->user_org = FALSE; + priv->warned = FALSE; } @@ -311,7 +320,13 @@ save_comp (CompEditor *editor) return FALSE; } } - cal_component_commit_sequence (clone); + + /* If we are not the organizer, we don't update the sequence number */ + if (!cal_component_has_organizer (clone) || itip_organizer_is_user (clone)) + cal_component_commit_sequence (clone); + else + cal_component_abort_sequence (clone); + gtk_object_unref (GTK_OBJECT (priv->comp)); priv->comp = clone; @@ -364,8 +379,12 @@ save_comp_with_send (CompEditor *editor) if (!save_comp (editor)) return FALSE; - if (send && send_component_dialog (priv->comp, priv->needs_send_new)) - comp_editor_send_comp (editor, CAL_COMPONENT_METHOD_REQUEST); + if (send && send_component_dialog (priv->comp, priv->existing_org)) { + if (itip_organizer_is_user (priv->comp)) + comp_editor_send_comp (editor, CAL_COMPONENT_METHOD_REQUEST); + else + comp_editor_send_comp (editor, CAL_COMPONENT_METHOD_REPLY); + } return TRUE; } @@ -437,6 +456,59 @@ close_dialog (CompEditor *editor) +void +comp_editor_set_existing_org (CompEditor *editor, gboolean existing_org) +{ + CompEditorPrivate *priv; + + g_return_if_fail (editor != NULL); + g_return_if_fail (IS_COMP_EDITOR (editor)); + + priv = editor->priv; + + priv->existing_org = existing_org; +} + +gboolean +comp_editor_get_existing_org (CompEditor *editor) +{ + CompEditorPrivate *priv; + + g_return_val_if_fail (editor != NULL, FALSE); + g_return_val_if_fail (IS_COMP_EDITOR (editor), FALSE); + + priv = editor->priv; + + return priv->existing_org; +} + +void +comp_editor_set_user_org (CompEditor *editor, gboolean user_org) +{ + CompEditorPrivate *priv; + + g_return_if_fail (editor != NULL); + g_return_if_fail (IS_COMP_EDITOR (editor)); + + priv = editor->priv; + + priv->user_org = user_org; +} + +gboolean +comp_editor_get_user_org (CompEditor *editor) +{ + CompEditorPrivate *priv; + + g_return_val_if_fail (editor != NULL, FALSE); + g_return_val_if_fail (IS_COMP_EDITOR (editor), FALSE); + + priv = editor->priv; + + return priv->user_org; +} + + /** * comp_editor_set_changed: * @editor: A component editor @@ -853,7 +925,7 @@ static void real_edit_comp (CompEditor *editor, CalComponent *comp) { CompEditorPrivate *priv; - + g_return_if_fail (editor != NULL); g_return_if_fail (IS_COMP_EDITOR (editor)); @@ -867,8 +939,10 @@ real_edit_comp (CompEditor *editor, CalComponent *comp) if (comp) priv->comp = cal_component_clone (comp); - priv->needs_send_new = !priv->needs_send; - + priv->existing_org = cal_component_has_organizer (comp); + priv->user_org = itip_organizer_is_user (comp); + priv->warned = FALSE; + set_title_from_comp (editor); set_icon_from_comp (editor); fill_widgets (editor); @@ -1219,6 +1293,13 @@ page_changed_cb (GtkObject *obj, gpointer data) priv = editor->priv; priv->changed = TRUE; + + if (!priv->warned && priv->existing_org && !priv->user_org) { + e_notice (NULL, GNOME_MESSAGE_BOX_INFO, + _("Changes made to this item may be discarded if an update arrives via email")); + priv->warned = TRUE; + } + } /* Page signal callbacks */ @@ -1236,6 +1317,12 @@ page_summary_changed_cb (GtkObject *obj, const char *summary, gpointer data) comp_editor_page_set_summary (l->data, summary); priv->changed = TRUE; + + if (!priv->warned && priv->existing_org && !priv->user_org) { + e_notice (NULL, GNOME_MESSAGE_BOX_INFO, + _("Changes made to this item may be discarded if an update arrives via email")); + priv->warned = TRUE; + } } static void @@ -1254,6 +1341,12 @@ page_dates_changed_cb (GtkObject *obj, comp_editor_page_set_dates (l->data, dates); priv->changed = TRUE; + + if (!priv->warned && priv->existing_org && !priv->user_org) { + e_notice (NULL, GNOME_MESSAGE_BOX_INFO, + _("Changes made to this item may be discarded if an update arrives via email")); + priv->warned = TRUE; + } } static void |