diff --git a/bgo-558354-alarm-notify-improved.patch b/bgo-558354-alarm-notify-improved.patch
new file mode 100644
index 0000000..5216bb8
--- /dev/null
+++ b/bgo-558354-alarm-notify-improved.patch
@@ -0,0 +1,270 @@
+Index: calendar/gui/alarm-notify/alarm-notify-dialog.c
+===================================================================
+--- calendar/gui/alarm-notify/alarm-notify-dialog.c (revision 36738)
++++ calendar/gui/alarm-notify/alarm-notify-dialog.c (working copy)
+@@ -67,6 +67,7 @@ typedef struct {
+ GtkWidget *snooze_time_min;
+ GtkWidget *snooze_time_hrs;
+ GtkWidget *snooze_btn;
++ GtkWidget *dismiss_btn;
+ GtkWidget *minutes_label;
+ GtkWidget *hrs_label;
+ GtkWidget *description;
+@@ -191,7 +192,30 @@ snooze_pressed_cb (GtkButton *button, gp
+ if (!snooze_timeout)
+ snooze_timeout = DEFAULT_SNOOZE_MINS;
+ (* funcinfo->func) (ALARM_NOTIFY_SNOOZE, snooze_timeout, funcinfo->func_data);
++}
++
++static void
++dismiss_pressed_cb (GtkButton *button, gpointer user_data)
++{
++ AlarmNotify *an = user_data;
++ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (an->treeview));
++
++ g_return_if_fail (model != NULL);
+
++ if (gtk_tree_model_iter_n_children (model, NULL) <= 1) {
++ gtk_dialog_response (GTK_DIALOG (an->dialog), GTK_RESPONSE_CLOSE);
++ } else {
++ GtkTreeIter iter;
++ AlarmFuncInfo *funcinfo = NULL;
++ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (an->treeview));
++
++ if (gtk_tree_selection_get_selected (selection, &model, &iter))
++ gtk_tree_model_get (model, &iter, ALARM_FUNCINFO_COLUMN, &funcinfo, -1);
++
++ g_return_if_fail (funcinfo);
++
++ (* funcinfo->func) (ALARM_NOTIFY_DISMISS, -1, funcinfo->func_data);
++ }
+ }
+
+ static void
+@@ -256,10 +280,11 @@ notified_alarms_dialog_new (void)
+ an->scrolledwindow = glade_xml_get_widget (an->xml, "treeview-scrolledwindow");
+ snooze_btn = glade_xml_get_widget (an->xml, "snooze-button");
+ an->snooze_btn = snooze_btn;
++ an->dismiss_btn = glade_xml_get_widget (an->xml, "dismiss-button");
+ edit_btn = glade_xml_get_widget (an->xml, "edit-button");
+
+ if (!(an->dialog && an->scrolledwindow && an->treeview && an->snooze_time_min && an->snooze_time_hrs
+- && an->description && an->location && edit_btn && snooze_btn)) {
++ && an->description && an->location && edit_btn && snooze_btn && an->dismiss_btn)) {
+ g_message ("alarm_notify_dialog(): Could not find all widgets in Glade file!");
+ g_object_unref (an->xml);
+ g_free (an);
+@@ -292,6 +317,7 @@ notified_alarms_dialog_new (void)
+
+ g_signal_connect (edit_btn, "clicked", G_CALLBACK (edit_pressed_cb), an);
+ g_signal_connect (snooze_btn, "clicked", G_CALLBACK (snooze_pressed_cb), an);
++ g_signal_connect (an->dismiss_btn, "clicked", G_CALLBACK (dismiss_pressed_cb), an);
+ g_signal_connect (G_OBJECT (an->dialog), "response", G_CALLBACK (dialog_response_cb), an);
+ g_signal_connect (G_OBJECT (an->dialog), "destroy", G_CALLBACK (dialog_destroyed_cb), an);
+
+Index: calendar/gui/alarm-notify/alarm-notify-dialog.h
+===================================================================
+--- calendar/gui/alarm-notify/alarm-notify-dialog.h (revision 36738)
++++ calendar/gui/alarm-notify/alarm-notify-dialog.h (working copy)
+@@ -32,7 +32,8 @@
+ typedef enum {
+ ALARM_NOTIFY_CLOSE,
+ ALARM_NOTIFY_SNOOZE,
+- ALARM_NOTIFY_EDIT
++ ALARM_NOTIFY_EDIT,
++ ALARM_NOTIFY_DISMISS
+ } AlarmNotifyResult;
+
+ typedef struct _AlarmNotificationsDialog AlarmNotificationsDialog;
+Index: calendar/gui/alarm-notify/alarm-queue.c
+===================================================================
+--- calendar/gui/alarm-notify/alarm-queue.c (revision 36738)
++++ calendar/gui/alarm-notify/alarm-queue.c (working copy)
+@@ -1248,6 +1248,13 @@ notify_dialog_cb (AlarmNotifyResult resu
+
+ break;
+
++ case ALARM_NOTIFY_DISMISS:
++ if (alarm_notifications_dialog) {
++ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (alarm_notifications_dialog->treeview));
++ gtk_list_store_remove (GTK_LIST_STORE (model), &tray_data->iter);
++ }
++ break;
++
+ case ALARM_NOTIFY_CLOSE:
+ d(printf("%s:%d (notify_dialog_cb) - Dialog close\n",__FILE__, __LINE__));
+ if (alarm_notifications_dialog) {
+@@ -1268,7 +1275,7 @@ notify_dialog_cb (AlarmNotifyResult resu
+
+ /* Task to remove the tray icons */
+ tray_list_remove_icons ();
+- }
++ }
+
+ break;
+
+Index: calendar/gui/alarm-notify/alarm-notify.glade
+===================================================================
+--- calendar/gui/alarm-notify/alarm-notify.glade (revision 36738)
++++ calendar/gui/alarm-notify/alarm-notify.glade (working copy)
+@@ -37,11 +37,73 @@
+ True
+ True
+ True
+- gtk-close
+- True
+ GTK_RELIEF_NORMAL
+ True
+ -7
++
++
++
++ True
++ 0.5
++ 0.5
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
++
++
++
++ True
++ False
++ 2
++
++
++
++ True
++ gtk-close
++ 4
++ 0.5
++ 0.5
++ 0
++ 0
++
++
++ 0
++ False
++ False
++
++
++
++
++
++ True
++ Dismiss _all
++ True
++ False
++ GTK_JUSTIFY_LEFT
++ False
++ False
++ 0.5
++ 0.5
++ 0
++ 0
++ PANGO_ELLIPSIZE_NONE
++ -1
++ False
++ 0
++
++
++ 0
++ False
++ False
++
++
++
++
++
++
+
+
+
+@@ -527,6 +589,84 @@
+ False
+
+
++
++
++
++ True
++ True
++ GTK_RELIEF_NORMAL
++ True
++
++
++
++ True
++ 0.5
++ 0.5
++ 0
++ 0
++ 0
++ 0
++ 0
++ 0
++
++
++
++ True
++ False
++ 2
++
++
++
++ True
++ gtk-apply
++ 4
++ 0.5
++ 0.5
++ 0
++ 0
++
++
++ 0
++ False
++ False
++
++
++
++
++
++ True
++ _Dismiss
++ True
++ False
++ GTK_JUSTIFY_LEFT
++ False
++ False
++ 0.5
++ 0.5
++ 0
++ 0
++ PANGO_ELLIPSIZE_NONE
++ -1
++ False
++ 0
++
++
++ 0
++ False
++ False
++
++
++
++
++
++
++
++
++ 0
++ False
++ False
++
++
+
+
+ 0
diff --git a/bnc-435668-hide-accept.patch b/bnc-435668-hide-accept.patch
new file mode 100644
index 0000000..32bd5af
--- /dev/null
+++ b/bnc-435668-hide-accept.patch
@@ -0,0 +1,17 @@
+--- plugins/itip-formatter/itip-formatter.c
++++ plugins/itip-formatter/itip-formatter.c
+@@ -1923,6 +1923,14 @@ in_proper_folder (CamelFolder *folder)
+ if (!folder)
+ return res;
+
++
++ /*FIXME Currently there is no other way to identify if its a sent items
++ folder, so we just compare the folder name */
++ if (!g_ascii_strcasecmp (folder->name, _("Sent")) ||
++ !g_ascii_strcasecmp (folder->name, _("Sent Items")))
++ return FALSE;
++
++
+ uri = mail_tools_folder_to_url (folder);
+
+ res = !(folder->folder_flags & CAMEL_FOLDER_IS_TRASH) &&
diff --git a/bnc-435722-book-uri-long.patch b/bnc-435722-book-uri-long.patch
new file mode 100644
index 0000000..9f82afe
--- /dev/null
+++ b/bnc-435722-book-uri-long.patch
@@ -0,0 +1,27 @@
+Index: addressbook/printing/e-contact-print.c
+===================================================================
+--- addressbook/printing/e-contact-print.c (revision 36615)
++++ addressbook/printing/e-contact-print.c (working copy)
+@@ -266,8 +266,20 @@
+ if (value == NULL || *value == '\0')
+ continue;
+
+- text = g_strdup_printf ("%s: %s",
+- e_contact_pretty_name (field), value);
++ if (field == E_CONTACT_BOOK_URI) {
++ gchar **tmpv;
++ tmpv = g_strsplit (value, ";", 2);
++ /* To translators: While printing contacts display the addressbook
++ to which the contact belongs.
++ Example: "Address Book: Frequent Contacts"
++ */
++ text = g_strdup_printf ("%s: %s",
++ _( "Address Book" ), tmpv[1]);
++ g_strfreev (tmpv);
++ }
++ else
++ text = g_strdup_printf ("%s: %s",
++ e_contact_pretty_name (field), value);
+
+ if (ctxt->pages == ctxt->page_nr)
+ e_contact_output (
diff --git a/bnc-441763-diff-meeting-icon.patch b/bnc-441763-diff-meeting-icon.patch
new file mode 100644
index 0000000..9c310f2
--- /dev/null
+++ b/bnc-441763-diff-meeting-icon.patch
@@ -0,0 +1,48 @@
+Index: plugins/itip-formatter/itip-formatter.c
+===================================================================
+--- plugins/itip-formatter/itip-formatter.c (revision 35684)
++++ plugins/itip-formatter/itip-formatter.c (working copy)
+@@ -2242,6 +2242,11 @@ format_itip (EPlugin *ep, EMFormatHookTa
+
+ classid = g_strdup_printf("itip:///%s", ((EMFormat *) target->format)->part_id->str);
+
++ /* mark message as containing calendar, thus it will show the icon in message list now on */
++ if (target->format->uid && target->format->folder &&
++ !camel_folder_get_message_user_flag (target->format->folder, target->format->uid, "$has_cal"))
++ camel_folder_set_message_user_flag (target->format->folder, target->format->uid, "$has_cal", TRUE);
++
+ puri = (struct _itip_puri *)em_format_add_puri(target->format, sizeof(struct _itip_puri), classid, target->part, itip_attachment_frame);
+
+ pobj = em_format_html_add_pobject ((EMFormatHTML *) target->format, sizeof (EMFormatHTMLPObject), classid, target->part, format_itip_object);
+Index: mail/message-list.c
+===================================================================
+--- mail/message-list.c (revision 35684)
++++ mail/message-list.c (working copy)
+@@ -234,6 +234,7 @@ static struct {
+ { "stock_score-highest", NULL },
+ { "stock_mail-flag-for-followup", NULL },
+ { "stock_mail-flag-for-followup-done", NULL },
++ { "stock_new-meeting", NULL }
+ };
+
+ /* FIXME: junk prefs */
+@@ -1339,6 +1340,8 @@ ml_tree_value_at (ETreeModel *etm, ETree
+ str = camel_message_info_user_tag(msg_info, "follow-up");
+ return (void *)(str ? str : "");
+ case COL_ATTACHMENT:
++ if (camel_message_info_user_flag (msg_info, "$has_cal"))
++ return GINT_TO_POINTER (2);
+ return GINT_TO_POINTER ((camel_message_info_flags(msg_info) & CAMEL_MESSAGE_ATTACHMENTS) != 0);
+ case COL_FROM:
+ str = camel_message_info_from (msg_info);
+@@ -1733,8 +1736,9 @@ message_list_create_extras (void)
+
+ for (i = 0; i < 2; i++)
+ images [i] = states_pixmaps [i + 6].pixbuf;
++ images [2] = states_pixmaps [18].pixbuf;
+
+- e_table_extras_add_cell (extras, "render_attachment", e_cell_toggle_new (0, 2, images));
++ e_table_extras_add_cell (extras, "render_attachment", e_cell_toggle_new (0, 3, images));
+
+ images [1] = states_pixmaps [8].pixbuf;
+ e_table_extras_add_cell (extras, "render_flagged", e_cell_toggle_new (0, 2, images));
diff --git a/bnc-441770-non-intrusive-calendar.patch b/bnc-441770-non-intrusive-calendar.patch
new file mode 100644
index 0000000..1498799
--- /dev/null
+++ b/bnc-441770-non-intrusive-calendar.patch
@@ -0,0 +1,1168 @@
+--- calendar/calendar.error.xml 2008-10-13 14:13:56.000000000 +0530
++++ calendar/calendar.error.xml 2008-11-05 16:53:41.000000000 +0530
+@@ -176,6 +176,23 @@
+ <_secondary>Your memos will not be available until Evolution is restarted.
+
+
++
++ <_primary>The Evolution calendars have quit unexpectedly.
++ <_secondary>Your calendars will not be available until Evolution is restarted.
++
++
++
++ <_primary>Unable to load the calendar
++ <_secondary>Calendar repository is offline.
++
++
++
++
++ <_primary>Error on '{0}'
++ <_secondary>No response from the server.
++
++
++
+
+ <_primary>Editor could not be loaded.
+ <_secondary>{0}.
+--- calendar/gui/apps_evolution_calendar.schemas.in 2008-10-13 14:13:50.000000000 +0530
++++ calendar/gui/apps_evolution_calendar.schemas.in 2008-11-05 16:53:41.000000000 +0530
+@@ -591,5 +591,30 @@
+
+
+
++
++ /schemas/apps/evolution/calendar/display/error_timeout
++ /apps/evolution/calendar/display/error_timeout
++ evolution-calendar
++ int
++ 60
++
++ Amount of time in seconds the error should be shown on the status bar.
++ Amount of time in seconds the error should be shown on the status bar.
++
++
++
++
++ /schemas/apps/evolution/calendar/display/error_level
++ /apps/evolution/calendar/display/error_level
++ evolution-calendar
++ int
++ 0
++
++ Level beyond which the message should be logged.
++ This can have three possible values. 0 for errors. 1 for warnings.
++ 2 for debug messages.
++
++
++
+
+
+--- calendar/gui/calendar-commands.c 2008-10-17 10:02:39.000000000 +0530
++++ calendar/gui/calendar-commands.c 2008-11-05 17:00:16.000000000 +0530
+@@ -47,6 +47,7 @@
+ #include
+ #include "shell/Evolution.h"
+ #include "calendar-commands.h"
++#include "calendar-component.h"
+ #include "calendar-config.h"
+ #include "e-day-view.h"
+ #include "e-week-view.h"
+@@ -554,6 +555,11 @@ gcal_taskpad_focus_change_cb (GnomeCalen
+
+ }
+
++static void
++help_debug (BonoboUIComponent *uid, void *data, const char *path)
++{
++ calendar_component_show_logger ((GtkWidget *) data);
++}
+
+ static BonoboUIVerb verbs [] = {
+ BONOBO_UI_VERB ("EventOpen", file_open_event_cb),
+@@ -579,7 +585,7 @@ static BonoboUIVerb verbs [] = {
+ BONOBO_UI_VERB ("ShowListView", show_list_view_clicked),
+
+ BONOBO_UI_VERB ("CalendarPurge", purge_cmd),
+-
++ BONOBO_UI_VERB ("HelpDebug", help_debug),
+ BONOBO_UI_VERB_END
+ };
+
+--- calendar/gui/calendar-component.c 2008-10-13 14:13:50.000000000 +0530
++++ calendar/gui/calendar-component.c 2008-11-05 16:53:41.000000000 +0530
+@@ -53,6 +53,8 @@
+ #include "dialogs/copy-source-dialog.h"
+ #include "dialogs/event-editor.h"
+ #include "misc/e-info-label.h"
++#include "e-util/e-non-intrusive-error-dialog.h"
++#include "e-util/gconf-bridge.h"
+ #include "e-util/e-error.h"
+ #include "e-cal-menu.h"
+ #include "e-cal-popup.h"
+@@ -66,6 +68,8 @@
+ #define CONTACTS_BASE_URI "contacts://"
+ #define WEATHER_BASE_URI "weather://"
+ #define PERSONAL_RELATIVE_URI "system"
++#define CALENDAR_ERROR_LEVEL_KEY "/apps/evolution/calendar/display/error_level"
++#define CALENDAR_ERROR_TIME_OUT_KEY "/apps/evolution/calendar/display/error_timeout"
+
+ enum DndTargetType {
+ DND_TARGET_TYPE_CALENDAR_LIST,
+@@ -77,8 +81,9 @@ static GtkTargetEntry drag_types[] = {
+ { XCALENDAR_TYPE, 0, DND_TARGET_TYPE_CALENDAR_LIST }
+ };
+ static gint num_drag_types = sizeof(drag_types) / sizeof(drag_types[0]);
+-
++#define CALENDAR_COMPONENT_DEFAULT(cc) if (cc == NULL) cc = calendar_component_peek()
+ #define PARENT_TYPE bonobo_object_get_type ()
++
+ static BonoboObjectClass *parent_class = NULL;
+
+ typedef struct
+@@ -120,6 +125,9 @@ struct _CalendarComponentPrivate {
+ ESourceList *task_source_list;
+ ESourceList *memo_source_list;
+
++ EActivityHandler *activity_handler;
++ ELogger *logger;
++
+ GList *views;
+
+ ECal *create_ecal;
+@@ -1433,6 +1441,8 @@ create_component_view (CalendarComponent
+ statusbar_widget = e_task_bar_new ();
+ component_view->activity_handler = e_activity_handler_new ();
+ e_activity_handler_attach_task_bar (component_view->activity_handler, E_TASK_BAR (statusbar_widget));
++ e_activity_handler_attach_task_bar (priv->activity_handler, E_TASK_BAR (statusbar_widget));
++
+ gtk_widget_show (statusbar_widget);
+
+ component_view->statusbar_control = bonobo_control_new (statusbar_widget);
+@@ -1670,6 +1680,11 @@ impl_dispose (GObject *object)
+ priv->gconf_client = NULL;
+ }
+
++ if (priv->activity_handler != NULL) {
++ g_object_unref (priv->activity_handler);
++ priv->activity_handler = NULL;
++ }
++
+ if (priv->create_ecal) {
+ g_object_unref (priv->create_ecal);
+ priv->create_ecal = NULL;
+@@ -1706,6 +1721,7 @@ impl_finalize (GObject *object)
+
+ g_free (priv->base_directory);
+ g_free (priv->config_directory);
++ g_object_unref (priv->logger);
+ g_free (priv);
+
+ (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+@@ -1748,6 +1764,11 @@ calendar_component_init (CalendarCompone
+ component);
+ priv->notifications = g_list_prepend (priv->notifications, GUINT_TO_POINTER (not));
+
++ priv->logger = e_logger_create ("calendar");
++ priv->activity_handler = e_activity_handler_new ();
++ e_activity_handler_set_logger (priv->activity_handler, priv->logger);
++ e_activity_handler_set_error_flush_time (priv->activity_handler,eni_config_get_error_timeout (CALENDAR_ERROR_TIME_OUT_KEY)*1000);
++
+ component->priv = priv;
+ ensure_sources (component);
+
+@@ -1798,4 +1819,21 @@ calendar_component_peek_source_list (Cal
+ return component->priv->source_list;
+ }
+
++EActivityHandler *
++calendar_component_peek_activity_handler (CalendarComponent *component)
++{
++ CALENDAR_COMPONENT_DEFAULT(component);
++
++ return component->priv->activity_handler;
++}
++
++void
++calendar_component_show_logger (gpointer top)
++{
++ CalendarComponent *cc = calendar_component_peek ();
++ ELogger *logger = cc->priv->logger;
++
++ eni_show_logger(logger, top, CALENDAR_ERROR_TIME_OUT_KEY, CALENDAR_ERROR_LEVEL_KEY);
++}
++
+ BONOBO_TYPE_FUNC_FULL (CalendarComponent, GNOME_Evolution_Component, PARENT_TYPE, calendar_component)
+--- calendar/gui/calendar-component.h 2008-10-13 14:13:50.000000000 +0530
++++ calendar/gui/calendar-component.h 2008-11-05 17:00:29.000000000 +0530
+@@ -26,6 +26,7 @@
+
+ #include
+ #include
++#include
+ #include "Evolution.h"
+
+
+@@ -60,6 +61,7 @@ CalendarComponent *calendar_component_pe
+ const char *calendar_component_peek_base_directory (CalendarComponent *component);
+ const char *calendar_component_peek_config_directory (CalendarComponent *component);
+ ESourceList *calendar_component_peek_source_list (CalendarComponent *component);
+-
++EActivityHandler *calendar_component_peek_activity_handler (CalendarComponent *component);
++void calendar_component_show_logger (gpointer);
+
+ #endif /* _CALENDAR_COMPONENT_H_ */
+--- calendar/gui/e-calendar-view.h 2008-10-13 14:13:50.000000000 +0530
++++ calendar/gui/e-calendar-view.h 2008-11-05 16:53:41.000000000 +0530
+@@ -27,6 +27,7 @@
+ #include
+ #include "e-cal-model.h"
+ #include "gnome-cal.h"
++#include "e-activity-handler.h"
+
+ G_BEGIN_DECLS
+
+@@ -166,6 +167,8 @@ void e_calendar_view_modify_an
+ CalObjModType mod,
+ GtkWindow *toplevel,
+ gboolean new);
++void e_calendar_utils_show_error_silent (struct _GtkWidget *widget);
++void e_calendar_utils_show_info_silent(struct _GtkWidget *widget);
+
+ gboolean e_calendar_view_get_tooltips (ECalendarViewEventData *data);
+
+--- calendar/gui/gnome-cal.c 2008-10-17 10:02:39.000000000 +0530
++++ calendar/gui/gnome-cal.c 2008-11-05 17:00:47.000000000 +0530
+@@ -93,6 +93,9 @@
+
+ #define d(x) x
+
++/* hash table define for non intrusive error dialog */
++static GHashTable *non_intrusive_error_table = NULL;
++
+ /* Private part of the GnomeCalendar structure */
+ struct _GnomeCalendarPrivate {
+ /* The clients for display */
+@@ -1820,6 +1823,9 @@ gnome_calendar_init (GnomeCalendar *gcal
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++)
+ priv->clients[i] = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+
++ if (non_intrusive_error_table == NULL)
++ non_intrusive_error_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
++
+ e_categories_register_change_listener (G_CALLBACK (categories_changed_cb), gcal);
+
+ priv->current_view_type = GNOME_CAL_DAY_VIEW;
+@@ -1889,7 +1895,7 @@ gnome_calendar_destroy (GtkObject *objec
+ }
+
+ for (i = 0; i < GNOME_CAL_LAST_VIEW; i++) {
+- if (priv->configs[i])
++ if (priv->configs[i])
+ g_object_unref (priv->configs[i]);
+ priv->configs[i] = NULL;
+ }
+@@ -1925,6 +1931,11 @@ gnome_calendar_destroy (GtkObject *objec
+ priv->dn_queries = NULL;
+ }
+
++ if (non_intrusive_error_table) {
++ g_hash_table_destroy (non_intrusive_error_table);
++ non_intrusive_error_table = NULL;
++ }
++
+ if (priv->sexp) {
+ g_free (priv->sexp);
+ priv->sexp = NULL;
+@@ -2711,6 +2722,12 @@ add_mclient (ECalModel *model, ECal *cli
+ message_push ((Message *) msg);
+ }
+
++static void
++non_intrusive_error_remove(GtkWidget *w, void *data)
++{
++ g_hash_table_remove(non_intrusive_error_table, data);
++}
++
+ static void
+ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
+ {
+@@ -2720,6 +2737,8 @@ client_cal_opened_cb (ECal *ecal, ECalen
+ ECalModel *model;
+ ECalLoadState state;
+ char *msg;
++ GtkWidget *w = NULL;
++ gchar *id;
+
+ priv = gcal->priv;
+
+@@ -2751,14 +2770,26 @@ client_cal_opened_cb (ECal *ecal, ECalen
+ e_cal_open_async (ecal, FALSE);
+ return;
+ case E_CALENDAR_STATUS_INVALID_SERVER_VERSION:
+- e_error_run (NULL, "calendar:server-version", NULL);
++ id = g_strdup ("calendar:server-version");
++
++ if (g_hash_table_lookup(non_intrusive_error_table, id)) {
++ /* We already have it */
++ g_message("Error occurred while existing dialog active:\n");
++ return;
++ }
++
++ w = e_error_new(NULL, "calendar:server-version", NULL);
++ e_calendar_utils_show_error_silent (w);
++ g_hash_table_insert (non_intrusive_error_table, id, g_object_ref(w));
++ g_signal_connect(w, "destroy", G_CALLBACK(non_intrusive_error_remove), id);
++
+ status = E_CALENDAR_STATUS_OK;
+ break;
+ case E_CALENDAR_STATUS_AUTHENTICATION_FAILED:
+ {
+ const gchar *auth_domain = e_source_get_property (source, "auth-domain");
+ const gchar *component_name;
+-
++
+ component_name = auth_domain ? auth_domain : "Calendar";
+
+ /* Warn the user password is wrong */
+@@ -2767,8 +2798,21 @@ client_cal_opened_cb (ECal *ecal, ECalen
+ }
+ case E_CALENDAR_STATUS_REPOSITORY_OFFLINE:
+ if (source_type == E_CAL_SOURCE_TYPE_EVENT)
+- e_error_run (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))),
+- "calendar:prompt-no-contents-offline-calendar", NULL);
++ {
++ /* check to see if we have dialog already running for this operation */
++ id = g_strdup ("calendar:unable-to-load-the-calendar");
++
++ if (g_hash_table_lookup(non_intrusive_error_table, id)) {
++ /* We already have it */
++ g_message("Error occurred while existing dialog active:\n");
++ return;
++ }
++
++ w = e_error_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))), "calendar:unable-to-load-the-calendar", e_cal_get_error_message (status), NULL);
++ e_calendar_utils_show_error_silent (w);
++ g_hash_table_insert (non_intrusive_error_table, id, g_object_ref(w));
++ g_signal_connect(w, "destroy", G_CALLBACK(non_intrusive_error_remove), id);
++ }
+ default:
+ /* Make sure the source doesn't disappear on us */
+ g_object_ref (source);
+@@ -2870,7 +2914,7 @@ default_client_cal_opened_cb (ECal *ecal
+ g_hash_table_remove (priv->clients[source_type], e_source_peek_uid (source));
+
+ /* FIXME Is there a better way to handle this? */
+- if (priv->default_client[source_type])
++ if (priv->default_client[source_type])
+ g_object_unref (priv->default_client[source_type]);
+ priv->default_client[source_type] = NULL;
+
+@@ -2948,21 +2992,25 @@ backend_error_cb (ECal *client, const ch
+ GnomeCalendar *gcal;
+ GtkDialog *dialog;
+ char *uristr;
++ gchar *id;
+
+ gcal = GNOME_CALENDAR (data);
+
+ uristr = get_uri_without_password (e_cal_get_uri (client));
++ id = g_strdup ("calendar:error-on-loading-the-calendar");
+
+- dialog = GTK_DIALOG (gtk_message_dialog_new (
+- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))),
+- GTK_DIALOG_DESTROY_WITH_PARENT,
+- GTK_MESSAGE_ERROR,
+- GTK_BUTTONS_OK,
+- _("Error on %s:\n %s"),
+- uristr, message));
+- gtk_dialog_run (GTK_DIALOG (dialog));
+- gtk_widget_destroy (GTK_WIDGET (dialog));
++ if (g_hash_table_lookup(non_intrusive_error_table,id)) {
++ /* We already have it */
++ g_message("Error occurred while existing dialog active:\n");
++ return;
++ }
++
++ dialog = (GtkDialog *)e_error_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))), "calendar:error-on-loading-the-calendar", uristr, message, NULL);
++ e_calendar_utils_show_error_silent(GTK_WIDGET (dialog));
+
++ g_hash_table_insert (non_intrusive_error_table, id, g_object_ref(dialog));
++ g_signal_connect(GTK_WIDGET (dialog), "destroy", G_CALLBACK(non_intrusive_error_remove), id);
++
+ g_free (uristr);
+ }
+
+@@ -2975,6 +3023,7 @@ backend_died_cb (ECal *ecal, gpointer da
+ ECalSourceType source_type;
+ ESource *source;
+ const char *id;
++ GtkWidget *w = NULL;
+
+ gcal = GNOME_CALENDAR (data);
+ priv = gcal->priv;
+@@ -2990,7 +3039,7 @@ backend_died_cb (ECal *ecal, gpointer da
+
+ switch (source_type) {
+ case E_CAL_SOURCE_TYPE_EVENT:
+- id = "calendar:calendar-crashed";
++ id = g_strdup ("calendar:calendar-crashed");
+
+ e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1);
+
+@@ -2998,7 +3047,7 @@ backend_died_cb (ECal *ecal, gpointer da
+ break;
+
+ case E_CAL_SOURCE_TYPE_TODO:
+- id = "calendar:tasks-crashed";
++ id = g_strdup ("calendar:calendar-crashed");
+
+ e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL, -1);
+
+@@ -3006,7 +3055,7 @@ backend_died_cb (ECal *ecal, gpointer da
+ break;
+
+ case E_CAL_SOURCE_TYPE_JOURNAL:
+- id = "calendar:memos-crashed";
++ id = g_strdup ("calendar:calendar-crashed");
+
+ e_memo_table_set_status_message (E_MEMO_TABLE (priv->memo), NULL);
+
+@@ -3018,7 +3067,16 @@ backend_died_cb (ECal *ecal, gpointer da
+
+ g_object_unref (source);
+
+- e_error_run (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))), id, NULL);
++ if (g_hash_table_lookup(non_intrusive_error_table,id)) {
++ /* We already have it */
++ g_message("Error occurred while existing dialog active:\n");
++ return;
++ }
++
++ w = e_error_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))), "calendar:backend_died", NULL);
++ e_calendar_utils_show_error_silent (w);
++ g_hash_table_insert (non_intrusive_error_table, (gpointer) id, g_object_ref(w));
++ g_signal_connect((GtkObject *)w, "destroy", G_CALLBACK(non_intrusive_error_remove), (gpointer) id);
+ }
+
+ GtkWidget *
+--- e-util/Makefile.am 2008-10-13 14:13:22.000000000 +0530
++++ e-util/Makefile.am 2008-11-05 16:53:41.000000000 +0530
+@@ -57,6 +57,7 @@ eutilinclude_HEADERS = \
+ e-icon-factory.h \
+ e-import.h \
+ e-logger.h \
++ e-non-intrusive-error-dialog.h \
+ e-menu.h \
+ e-mktemp.h \
+ e-print.h \
+@@ -98,6 +99,7 @@ libeutil_la_SOURCES = \
+ e-icon-factory.c \
+ e-import.c \
+ e-logger.c \
++ e-non-intrusive-error-dialog.c \
+ e-menu.c \
+ e-mktemp.c \
+ e-plugin.c \
+--- mail/mail-component.c 2008-10-13 14:07:24.000000000 +0530
++++ mail/mail-component.c 2008-11-05 16:53:41.000000000 +0530
+@@ -90,6 +90,11 @@
+ #include
+ #include
+
++#include "e-util/e-non-intrusive-error-dialog.h"
++
++#define MAILER_ERROR_LEVEL_KEY "/apps/evolution/mail/display/error_level"
++#define MAILER_ERROR_TIME_OUT_KEY "/apps/evolution/mail/display/error_timeout"
++
+ #define d(x)
+
+ static void create_local_item_cb(EUserCreatableItemsHandler *handler, const char *item_type_name, void *data);
+@@ -1585,254 +1590,13 @@ mail_indicate_new_mail (gboolean have_ne
+ e_component_view_set_button_icon (mc->priv->component_view, icon);
+ }
+
+-struct _log_data {
+- int level;
+- char *key;
+- char *text;
+- char *stock_id;
+- GdkPixbuf *pbuf;
+-} ldata [] = {
+- { E_LOG_ERROR, N_("Error"), N_("Errors"), GTK_STOCK_DIALOG_ERROR },
+- { E_LOG_WARNINGS, N_("Warning"), N_("Warnings and Errors"), GTK_STOCK_DIALOG_WARNING },
+- { E_LOG_DEBUG, N_("Debug"), N_("Error, Warnings and Debug messages"), GTK_STOCK_DIALOG_INFO }
+-};
+-
+-enum
+-{
+- COL_LEVEL = 0,
+- COL_TIME,
+- COL_DATA
+-};
+-
+-static gboolean
+-query_tooltip_cb (GtkTreeView *view,
+- gint x,
+- gint y,
+- gboolean keyboard_mode,
+- GtkTooltip *tooltip)
+-{
+- GtkTreeViewColumn *column;
+- GtkTreeModel *model;
+- GtkTreePath *path;
+- GtkTreeIter iter;
+- gint level;
+-
+- if (!gtk_tree_view_get_tooltip_context (
+- view, &x, &y, keyboard_mode, NULL, &path, &iter))
+- return FALSE;
+-
+- /* Figure out which column we're pointing at. */
+- if (keyboard_mode)
+- gtk_tree_view_get_cursor (view, NULL, &column);
+- else
+- gtk_tree_view_get_path_at_pos (
+- view, x, y, NULL, &column, NULL, NULL);
+-
+- /* Restrict the tip area to a single cell. */
+- gtk_tree_view_set_tooltip_cell (view, tooltip, path, column, NULL);
+-
+- /* This only works if the tree view is NOT reorderable. */
+- if (column != gtk_tree_view_get_column (view, 0))
+- return FALSE;
+-
+- model = gtk_tree_view_get_model (view);
+- gtk_tree_model_get (model, &iter, COL_LEVEL, &level, -1);
+- gtk_tooltip_set_text (tooltip, ldata[level].key);
+-
+- return TRUE;
+-}
+-
+-static void
+-render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
+- GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+-{
+- gint level;
+-
+- gtk_tree_model_get (model, iter, COL_LEVEL, &level, -1);
+- g_object_set (
+- renderer, "stock-id", ldata[level].stock_id,
+- "stock-size", GTK_ICON_SIZE_MENU, NULL);
+-}
+-
+-static void
+-render_date (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
+- GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+-{
+- time_t t;
+- char sdt[100]; /* Should be sufficient? */
+-
+- gtk_tree_model_get (model, iter, COL_TIME, &t, -1);
+- strftime (sdt, 100, "%x %X", localtime (&t));
+- g_object_set (renderer, "text", sdt, NULL);
+-}
+-
+-
+-
+-static void
+-append_logs (const char *txt, GtkListStore *store)
+-{
+- char **str;
+-
+- str = g_strsplit (txt, ":", 3);
+- if (str[0] && str[1] && str[2]) {
+- GtkTreeIter iter;
+-
+- gtk_list_store_append (store, &iter);
+- gtk_list_store_set (
+- store, &iter,
+- COL_LEVEL, atoi (str[0]),
+- COL_TIME, atol (str[1]),
+- COL_DATA, g_strstrip (str[2]),
+- -1);
+- } else
+- g_printerr ("Unable to decode error log: %s\n", txt);
+-
+- g_strfreev (str);
+-}
+-
+-static void
+-spin_value_changed (GtkSpinButton *b, gpointer data)
+-{
+- int value = gtk_spin_button_get_value_as_int (b);
+- GConfClient *client = mail_config_get_gconf_client ();
+-
+- gconf_client_set_int (client, "/apps/evolution/mail/display/error_timeout", value, NULL);
+-}
+-
+ void
+ mail_component_show_logger (gpointer top)
+ {
+ MailComponent *mc = mail_component_peek ();
+- GConfBridge *bridge;
+- GtkWidget *container;
+- GtkWidget *label;
+- GtkWidget *toplevel;
+- GtkWidget *vbox;
+- GtkWidget *widget;
+- GtkWidget *window;
+ ELogger *logger = mc->priv->logger;
+- int i;
+- GtkListStore *store;
+- GtkCellRenderer *renderer;
+- GtkTreeViewColumn *column;
+-
+- bridge = gconf_bridge_get ();
+- toplevel = gtk_widget_get_toplevel (top);
+-
+- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+- gtk_window_set_default_size (GTK_WINDOW (window), 500, 400);
+- gtk_window_set_title (GTK_WINDOW (window), _("Debug Logs"));
+- gtk_window_set_transient_for (
+- GTK_WINDOW (window), GTK_WINDOW (toplevel));
+- gtk_container_set_border_width (GTK_CONTAINER (window), 12);
+-
+- vbox = gtk_vbox_new (FALSE, 12);
+- gtk_container_add (GTK_CONTAINER (window), vbox);
+-
+- container = gtk_hbox_new (FALSE, 6);
+- gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
+-
+- /* Translators: This is the first part of the sentence
+- * "Show _errors in the status bar for" - XXX - "second(s)." */
+- widget = gtk_label_new_with_mnemonic (
+- _("Show _errors in the status bar for"));
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+- label = widget;
+-
+- widget = gtk_spin_button_new_with_range (1.0, 60.0, 1.0);
+- gtk_spin_button_set_value (
+- GTK_SPIN_BUTTON (widget),
+- (gdouble) mail_config_get_error_timeout ());
+- g_signal_connect (
+- widget, "value-changed",
+- G_CALLBACK (spin_value_changed), NULL);
+- gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+-
+- /* Translators: This is the second part of the sentence
+- * "Show _errors in the status bar for" - XXX - "second(s)." */
+- widget = gtk_label_new_with_mnemonic (_("second(s)."));
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+-
+- container = gtk_hbox_new (FALSE, 6);
+- gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
+-
+- widget = gtk_label_new_with_mnemonic (_("Log Messages:"));
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+- label = widget;
+-
+- widget = gtk_combo_box_new_text ();
+- for (i = E_LOG_ERROR; i <= E_LOG_DEBUG; i++)
+- gtk_combo_box_append_text (
+- GTK_COMBO_BOX (widget), ldata[i].text);
+- gconf_bridge_bind_property (
+- bridge, "/apps/evolution/mail/display/error_level",
+- G_OBJECT (widget), "active");
+- gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+-
+- store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_LONG, G_TYPE_STRING);
+- e_logger_get_logs (logger, (ELogFunction) append_logs, store);
+- gtk_tree_sortable_set_sort_column_id (
+- GTK_TREE_SORTABLE (store), COL_TIME, GTK_SORT_DESCENDING);
+-
+- container = gtk_scrolled_window_new (NULL, NULL);
+- gtk_scrolled_window_set_policy (
+- GTK_SCROLLED_WINDOW (container),
+- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+- gtk_scrolled_window_set_shadow_type (
+- GTK_SCROLLED_WINDOW (container), GTK_SHADOW_IN);
+- gtk_box_pack_start (GTK_BOX (vbox), container, TRUE, TRUE, 0);
+-
+- widget = gtk_tree_view_new();
+- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (widget), TRUE);
+- gtk_tree_view_set_reorderable (GTK_TREE_VIEW (widget), FALSE);
+- gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (store));
+- gtk_tree_view_set_search_column (GTK_TREE_VIEW (widget), COL_DATA);
+- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (widget), TRUE);
+- gtk_widget_set_has_tooltip (widget, TRUE);
+- gtk_container_add (GTK_CONTAINER (container), widget);
+-
+- g_signal_connect (
+- widget, "query-tooltip",
+- G_CALLBACK (query_tooltip_cb), NULL);
+-
+- column = gtk_tree_view_column_new ();
+- gtk_tree_view_column_set_title (column, _("Log Level"));
+- gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
+-
+- renderer = gtk_cell_renderer_pixbuf_new ();
+- gtk_tree_view_column_pack_start (column, renderer, TRUE);
+- gtk_tree_view_column_set_cell_data_func (
+- column, renderer, render_pixbuf, NULL, NULL);
+-
+- column = gtk_tree_view_column_new ();
+- gtk_tree_view_column_set_title (column, _("Time"));
+- gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
+-
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_tree_view_column_pack_start (column, renderer, FALSE);
+- gtk_tree_view_column_set_cell_data_func (
+- column, renderer, render_date, NULL, NULL);
+-
+- renderer = gtk_cell_renderer_text_new ();
+- gtk_tree_view_insert_column_with_attributes(
+- GTK_TREE_VIEW (widget), -1, _("Messages"),
+- renderer, "markup", COL_DATA, NULL);
+-
+- container = gtk_hbutton_box_new ();
+- gtk_button_box_set_layout (
+- GTK_BUTTON_BOX (container), GTK_BUTTONBOX_END);
+- gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
+-
+- widget = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+- gtk_widget_set_tooltip_text (widget, _("Close this window"));
+- g_signal_connect_swapped (
+- widget, "clicked",
+- G_CALLBACK (gtk_widget_destroy), window);
+- gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+
+- gtk_widget_show_all (window);
++ eni_show_logger(logger, top, MAILER_ERROR_TIME_OUT_KEY, MAILER_ERROR_LEVEL_KEY);
+ }
+
+ BONOBO_TYPE_FUNC_FULL (MailComponent, GNOME_Evolution_MailComponent, PARENT_TYPE, mail_component)
+--- ui/evolution-calendar.xml 2008-10-13 14:14:04.000000000 +0530
++++ ui/evolution-calendar.xml 2008-11-05 16:53:41.000000000 +0530
+@@ -25,6 +25,7 @@
+
+
+
++
+
+
+
+
+
+--- /dev/null 2008-10-14 15:16:33.000000000 +0530
++++ e-util/e-non-intrusive-error-dialog.c 2008-11-05 17:01:04.000000000 +0530
+@@ -0,0 +1,308 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Authors: Ashish Shrivastava
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ */
++
++#ifdef HAVE_CONFIG_H
++#include
++#endif
++
++#include
++#include
++#include
++
++#include
++#include
++#include
++#include
++#include "e-non-intrusive-error-dialog.h"
++
++/* eni - non intrusive error */
++
++static gboolean
++eni_query_tooltip_cb (GtkTreeView *view,
++ gint x,
++ gint y,
++ gboolean keyboard_mode,
++ GtkTooltip *tooltip)
++{
++ GtkTreeViewColumn *column;
++ GtkTreeModel *model;
++ GtkTreePath *path;
++ GtkTreeIter iter;
++ gint level;
++
++ if (!gtk_tree_view_get_tooltip_context (
++ view, &x, &y, keyboard_mode, NULL, &path, &iter))
++ return FALSE;
++
++ /* Figure out which column we're pointing at. */
++ if (keyboard_mode)
++ gtk_tree_view_get_cursor (view, NULL, &column);
++ else
++ gtk_tree_view_get_path_at_pos (
++ view, x, y, NULL, &column, NULL, NULL);
++
++ /* Restrict the tip area to a single cell. */
++ gtk_tree_view_set_tooltip_cell (view, tooltip, path, column, NULL);
++
++ /* This only works if the tree view is NOT reorderable. */
++ if (column != gtk_tree_view_get_column (view, 0))
++ return FALSE;
++
++ model = gtk_tree_view_get_model (view);
++ gtk_tree_model_get (model, &iter, COL_LEVEL, &level, -1);
++ gtk_tooltip_set_text (tooltip, ldata[level].key);
++
++ return TRUE;
++}
++
++static void
++eni_render_pixbuf (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
++ GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
++{
++ gint level;
++
++ gtk_tree_model_get (model, iter, COL_LEVEL, &level, -1);
++ g_object_set (
++ renderer, "stock-id", ldata[level].stock_id,
++ "stock-size", GTK_ICON_SIZE_MENU, NULL);
++}
++
++static void
++eni_render_date (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
++ GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
++{
++ time_t t;
++ char sdt[100]; /* Should be sufficient? */
++
++ gtk_tree_model_get (model, iter, COL_TIME, &t, -1);
++ strftime (sdt, 100, "%x %X", localtime (&t));
++ g_object_set (renderer, "text", sdt, NULL);
++}
++
++static void
++eni_append_logs (const char *txt, GtkListStore *store)
++{
++ char **str;
++
++ str = g_strsplit (txt, ":", 3);
++ if (str[0] && str[1] && str[2]) {
++ GtkTreeIter iter;
++
++ gtk_list_store_append (store, &iter);
++ gtk_list_store_set (
++ store, &iter,
++ COL_LEVEL, atoi (str[0]),
++ COL_TIME, atol (str[1]),
++ COL_DATA, g_strstrip (str[2]),
++ -1);
++ } else
++ g_printerr ("Unable to decode error log: %s\n", txt);
++
++ g_strfreev (str);
++}
++
++static guint
++eni_config_get_error_level (const char *path)
++{
++ GConfClient *gconf_client;
++ guint error_level;
++
++ gconf_client = gconf_client_get_default ();
++ error_level = gconf_client_get_int (gconf_client, path, NULL);
++
++ g_object_unref (gconf_client);
++ return error_level;
++}
++
++guint
++eni_config_get_error_timeout (const char *path)
++{
++ GConfClient *gconf_client;
++ guint error_time;
++
++ gconf_client = gconf_client_get_default ();
++ error_time = gconf_client_get_int (gconf_client, path, NULL);
++
++ g_object_unref (gconf_client);
++ return error_time;
++}
++
++static void
++eni_error_timeout_changed (GtkSpinButton *b, void *data)
++{
++ GConfClient *gconf_client;
++ int value = gtk_spin_button_get_value_as_int (b);
++
++ gconf_client = gconf_client_get_default ();
++
++ gconf_client_set_int (gconf_client, (char *) data, value, NULL);
++ g_object_unref (gconf_client);
++}
++
++static void
++eni_error_level_value_changed (GtkComboBox *w, gpointer *data)
++{
++ GConfClient *gconf_client;
++ int value = gtk_combo_box_get_active (w);
++
++ gconf_client = gconf_client_get_default ();
++
++ gconf_client_set_int (gconf_client, (char *) data, value, NULL);
++
++ g_object_unref (gconf_client);
++}
++
++void
++eni_show_logger(ELogger *logger, GtkWidget *top,const char *error_timeout_path, const char *error_level_path)
++{
++ GtkWidget *container;
++ GtkWidget *label;
++ GtkWidget *toplevel;
++ GtkWidget *vbox;
++ GtkWidget *widget;
++ GtkWidget *window;
++ GtkListStore *store;
++ GtkCellRenderer *renderer;
++ GtkTreeViewColumn *column;
++ int i;
++
++ toplevel = gtk_widget_get_toplevel (top);
++
++ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
++ gtk_window_set_default_size (GTK_WINDOW (window), 500, 400);
++ gtk_window_set_title (GTK_WINDOW (window), _("Debug Logs"));
++ gtk_window_set_transient_for (
++ GTK_WINDOW (window), GTK_WINDOW (toplevel));
++ gtk_container_set_border_width (GTK_CONTAINER (window), 12);
++
++ vbox = gtk_vbox_new (FALSE, 12);
++ gtk_container_add (GTK_CONTAINER (window), vbox);
++
++ container = gtk_hbox_new (FALSE, 6);
++ gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
++
++ /* Translators: This is the first part of the sentence
++ * "Show _errors in the status bar for" - XXX - "second(s)." */
++ widget = gtk_label_new_with_mnemonic (
++ _("Show _errors in the status bar for"));
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++ label = widget;
++
++ widget = gtk_spin_button_new_with_range (1.0, 60.0, 1.0);
++ gtk_spin_button_set_value (
++ GTK_SPIN_BUTTON (widget),
++ (gdouble) eni_config_get_error_timeout (error_timeout_path));
++ g_signal_connect (
++ widget, "value-changed",
++ G_CALLBACK (eni_error_timeout_changed),
++ (gpointer) error_timeout_path);
++
++ gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++
++ /* Translators: This is the second part of the sentence
++ * "Show _errors in the status bar for" - XXX - "second(s)." */
++ widget = gtk_label_new_with_mnemonic (_("second(s)."));
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++
++ container = gtk_hbox_new (FALSE, 6);
++ gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
++
++ widget = gtk_label_new_with_mnemonic (_("Log Messages:"));
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++ label = widget;
++
++ widget = gtk_combo_box_new_text ();
++ for (i = E_LOG_ERROR; i <= E_LOG_DEBUG; i++)
++ gtk_combo_box_append_text (
++ GTK_COMBO_BOX (widget), ldata[i].text);
++ gtk_combo_box_set_active ((GtkComboBox *) widget, eni_config_get_error_level(error_level_path));
++
++ g_signal_connect (
++ widget, "changed",
++ G_CALLBACK (eni_error_level_value_changed),
++ (gpointer) error_level_path);
++
++ gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++
++ store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_LONG, G_TYPE_STRING);
++ e_logger_get_logs (logger, (ELogFunction) eni_append_logs, store);
++ gtk_tree_sortable_set_sort_column_id (
++ GTK_TREE_SORTABLE (store), COL_TIME, GTK_SORT_DESCENDING);
++
++ container = gtk_scrolled_window_new (NULL, NULL);
++ gtk_scrolled_window_set_policy (
++ GTK_SCROLLED_WINDOW (container),
++ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
++ gtk_scrolled_window_set_shadow_type (
++ GTK_SCROLLED_WINDOW (container), GTK_SHADOW_IN);
++ gtk_box_pack_start (GTK_BOX (vbox), container, TRUE, TRUE, 0);
++
++ widget = gtk_tree_view_new();
++ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (widget), TRUE);
++ gtk_tree_view_set_reorderable (GTK_TREE_VIEW (widget), FALSE);
++ gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (store));
++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (widget), COL_DATA);
++ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (widget), TRUE);
++ gtk_widget_set_has_tooltip (widget, TRUE);
++ gtk_container_add (GTK_CONTAINER (container), widget);
++
++ g_signal_connect (
++ widget, "query-tooltip",
++ G_CALLBACK (eni_query_tooltip_cb), NULL);
++
++ column = gtk_tree_view_column_new ();
++ gtk_tree_view_column_set_title (column, _("Log Level"));
++ gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
++ renderer = gtk_cell_renderer_pixbuf_new ();
++ gtk_tree_view_column_pack_start (column, renderer, TRUE);
++ gtk_tree_view_column_set_cell_data_func (
++ column, renderer, eni_render_pixbuf, NULL, NULL);
++
++ column = gtk_tree_view_column_new ();
++ gtk_tree_view_column_set_title (column, _("Time"));
++ gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
++
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_tree_view_column_pack_start (column, renderer, FALSE);
++ gtk_tree_view_column_set_cell_data_func (
++ column, renderer, eni_render_date, NULL, NULL);
++
++ renderer = gtk_cell_renderer_text_new ();
++ gtk_tree_view_insert_column_with_attributes(
++ GTK_TREE_VIEW (widget), -1, _("Messages"),
++ renderer, "markup", COL_DATA, NULL);
++
++ container = gtk_hbutton_box_new ();
++ gtk_button_box_set_layout (
++ GTK_BUTTON_BOX (container), GTK_BUTTONBOX_END);
++ gtk_box_pack_start (GTK_BOX (vbox), container, FALSE, FALSE, 0);
++
++ widget = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
++ gtk_widget_set_tooltip_text (widget, _("Close this window"));
++ g_signal_connect_swapped (
++ widget, "clicked",
++ G_CALLBACK (gtk_widget_destroy), window);
++ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
++
++ gtk_widget_show_all (window);
++}
++
+--- /dev/null 2008-10-14 15:16:33.000000000 +0530
++++ e-util/e-non-intrusive-error-dialog.h 2008-11-05 17:01:14.000000000 +0530
+@@ -0,0 +1,61 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Authors: Ashish Shrivastava
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ */
++
++#ifndef __E_ERROR_DIALOG_H__
++#define __E_ERROR_DIALOG_H__
++
++#include
++#include "e-error.h"
++#include "e-icon-factory.h"
++#include "e-logger.h"
++#include "e-util/gconf-bridge.h"
++
++G_BEGIN_DECLS
++
++struct _log_data {
++ int level;
++ char *key;
++ char *text;
++ char *stock_id;
++ GdkPixbuf *pbuf;
++} ldata [] = {
++ { E_LOG_ERROR, N_("Error"), N_("Errors"), GTK_STOCK_DIALOG_ERROR },
++ { E_LOG_WARNINGS, N_("Warning"), N_("Warnings and Errors"), GTK_STOCK_DIALOG_WARNING },
++ { E_LOG_DEBUG, N_("Debug"), N_("Error, Warnings and Debug messages"), GTK_STOCK_DIALOG_INFO }
++};
++
++enum
++{
++ COL_LEVEL = 0,
++ COL_TIME,
++ COL_DATA
++};
++
++/* eni - error non intrusive*/
++guint eni_config_get_error_timeout (const char *path);
++void eni_show_logger (ELogger *logger,
++ GtkWidget *widget,
++ const char *error_timeout_path,
++ const char *error_level_path);
++
++G_END_DECLS
++
++#endif /* __E_ERROR_DIALOG_H__ */
+--- calendar/gui/e-calendar-view.c 2008-10-13 14:13:50.000000000 +0530
++++ calendar/gui/e-calendar-view.c 2008-11-06 15:16:04.000000000 +0530
+@@ -2411,3 +2411,33 @@ draw_curved_rectangle (cairo_t *cr, doub
+ }
+ cairo_close_path (cr);
+ }
++
++static void
++error_response(GtkWidget *widget, gint response, void *data)
++{
++ gtk_widget_destroy(widget);
++}
++
++void
++e_calendar_utils_show_error_silent (GtkWidget *widget)
++{
++ EActivityHandler *handler = calendar_component_peek_activity_handler (calendar_component_peek ());
++
++ if(!g_object_get_data ((GObject *) widget, "response-handled")) {
++ g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL);
++ }
++
++ e_activity_handler_make_error (handler, "calendar", E_LOG_ERROR, widget);
++}
++
++void
++e_calendar_utils_show_info_silent (GtkWidget *widget)
++{
++ EActivityHandler *handler = calendar_component_peek_activity_handler (calendar_component_peek ());
++
++ if(!g_object_get_data ((GObject *) widget, "response-handled")) {
++ g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL);
++ }
++
++ e_activity_handler_make_error (handler, "calendar", E_LOG_WARNINGS, widget);
++}
diff --git a/bnc-442135-exchange-settings-offline.patch b/bnc-442135-exchange-settings-offline.patch
new file mode 100644
index 0000000..3721697
--- /dev/null
+++ b/bnc-442135-exchange-settings-offline.patch
@@ -0,0 +1,76 @@
+Index: plugins/exchange-operations/org-gnome-exchange-operations.error.xml
+===================================================================
+--- plugins/exchange-operations/org-gnome-exchange-operations.error.xml (revision 36615)
++++ plugins/exchange-operations/org-gnome-exchange-operations.error.xml (working copy)
+@@ -48,6 +48,11 @@
+ <_secondary>Cannot display folders.
+
+
++
++ <_primary>Exchange Account is offline.
++ <_secondary>Cannot access the "Exchange settings" tab in offline mode.
++
++
+
+ <_primary>Exchange Account is offline.
+ <_secondary>Cannot perform the operation.
+Index: plugins/exchange-operations/exchange-account-setup.c
+===================================================================
+--- plugins/exchange-operations/exchange-account-setup.c (revision 36615)
++++ plugins/exchange-operations/exchange-account-setup.c (working copy)
+@@ -181,6 +181,7 @@
+ const char *source_url;
+ char *message = NULL, *txt = NULL, *oof_message;
+ gboolean oof_state = FALSE;
++ gint offline_status;
+
+ GtkVBox *vbox_settings;
+
+@@ -234,6 +235,14 @@
+
+ account = exchange_operations_get_exchange_account ();
+
++ exchange_config_listener_get_offline_status (exchange_global_config_listener,
++ &offline_status);
++ if (offline_status == OFFLINE_MODE) {
++ e_error_run (NULL, ERROR_DOMAIN ":exchange-settings-offline", NULL);
++
++ return NULL;
++ }
++
+ oof_data = g_new0 (OOFData, 1);
+
+ oof_data->state = FALSE;
+@@ -815,7 +824,8 @@
+ {
+ if (oof_data->message)
+ g_free (oof_data->message);
+- g_free (oof_data);
++ if (oof_data)
++ g_free (oof_data);
+ }
+
+ void
+@@ -824,6 +834,7 @@
+ EMConfigTargetAccount *target_account;
+ const char *source_url;
+ CamelURL *url;
++ gint offline_status;
+
+ target_account = (EMConfigTargetAccount *)data->config->target;
+ source_url = e_account_get_string (target_account->account, E_ACCOUNT_SOURCE_URL);
+@@ -844,6 +855,14 @@
+ }
+
+ camel_url_free (url);
++
++ exchange_config_listener_get_offline_status (exchange_global_config_listener,
++ &offline_status);
++
++ if (offline_status == OFFLINE_MODE) {
++ return;
++ }
++
+ /* Set oof data in exchange account */
+ set_oof_info ();
+ destroy_oof_data ();
diff --git a/evolution-2.24.1.1.tar.bz2 b/evolution-2.24.1.1.tar.bz2
new file mode 100644
index 0000000..ece072d
--- /dev/null
+++ b/evolution-2.24.1.1.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd27ffd7a86e619cfa1e23b88cdd234040c2324bf54c2361070a200619d37434
+size 32617635
diff --git a/evolution-2.24.1.tar.bz2 b/evolution-2.24.1.tar.bz2
deleted file mode 100644
index 5ba783d..0000000
--- a/evolution-2.24.1.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8d9b5989e0c380e2c24efc836b3c12c006c85a55f994608c849c747679509203
-size 32487183
diff --git a/evolution.changes b/evolution.changes
index cdab42c..49c869f 100644
--- a/evolution.changes
+++ b/evolution.changes
@@ -1,3 +1,30 @@
+-------------------------------------------------------------------
+Thu Nov 6 07:33:08 CET 2008 - abharath@suse.de
+
+- Update to version 2.24.1.1
+ Releasing Evolution under 'GNU LGPL V2 or (at your option) V3'.
+ Refer COPYING file for more details
+ + Bugs fixed: bnc#437226, bnc#440007, bgo#541121, bgo#554450,
+ bgo#557246, bgo#557613, bgo#557726, bgo#558726, bgo#559028,
+ bgo#559041 and bgo#559371
+ + Updated translations.
+
+- Patches added
+ + bgo#558354 - bgo-558354-alarm-notify-improved.patch - Replace
+ "Close" btn in Appts reminder window with a
+ per-item "Dismiss"
+ + bnc#435668 - bnc-435668-hide-accept.patch - Meetings In
+ SentItems Should Hide Accept/Decline
+ + bnc#435722 - bnc-435722-book-uri-long.patch - Book URI:
+ Spills Into Second Column
+ + bnc#441763 - bnc-441763-diff-meeting-icon.patch - Show
+ different icons for meetings
+ + bnc#441770 - bnc-441770-non-intrusive-calendar.patch -
+ Non-intrusive error handling for calendar
+ + bnc#442135 - bnc-442135-exchange-settings-offline.patch -
+ Evolution pops up misleading error dialog
+ + sharepoint-account-setup.patch - Sharepoint account setup.
+
-------------------------------------------------------------------
Mon Nov 3 10:18:56 IST 2008 - msuman@suse.de
diff --git a/evolution.spec b/evolution.spec
index c5846da..37323d4 100644
--- a/evolution.spec
+++ b/evolution.spec
@@ -1,5 +1,5 @@
#
-# spec file for package evolution (Version 2.24.1)
+# spec file for package evolution (Version 2.24.1.1)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -34,6 +34,7 @@ BuildRequires: gnome-pilot-devel
BuildRequires: gtk-doc
BuildRequires: gtkhtml2-devel
BuildRequires: intltool
+BuildRequires: dice
BuildRequires: libidl
BuildRequires: libnotify
BuildRequires: libnotify-devel
@@ -51,12 +52,15 @@ BuildRequires: shared-mime-info
BuildRequires: update-desktop-files
BuildRequires: sqlite3-devel
BuildRequires: libpst-devel
+BuildRequires: dice-devel
+BuildRequires: ndesk-dbus-glib-devel
+BuildRequires: mono-devel
License: GPL v2 or later
Group: Productivity/Networking/Email/Clients
# This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in.
%define evolution_base_version 2.24
-Version: 2.24.1
-Release: 3
+Version: 2.24.1.1
+Release: 1
Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
Source0: %{name}-%{version}.tar.bz2
Source1: summerdance-about2.png
@@ -68,11 +72,26 @@ Patch6: remove-nm-dep.patch
Patch7: calendar-sendbutton.patch
Patch8: fix-exchange-menuitem.diff
Patch9: fix-sendrecv.diff
+# PATCH-FIX-UPSTREAM pst-import.patch abharath@suse.de -- This patch allows you to import PST files into Evolution.
Patch13: pst-import.patch
# PATCH-FIX-OPENSUSE evolution-custom-openldap-includes.patch maw@novell.com -- look for ldap includes in %{_libdir}/evoldap/include
Patch15: evolution-custom-openldap-includes.patch
# PATCH-FEATURE-OPENSUSE evolution-shared-nss-db.patch hpj@novell.com -- Migrate to shared NSS database.
Patch16: evolution-shared-nss-db.patch
+# PATCH-FIX-UPSTREAM bgo-558354-alarm-notify-improved.patch bgo#558354 -- "Close" button replaced with a per-item "Dismiss" button.
+Patch17: bgo-558354-alarm-notify-improved.patch
+# PATCH-FIX-UPSTREAM bnc-435668-hide-accept.patch bnc#435668 -- Meetings In SentItems Should Hide Accept/Decline.
+Patch18: bnc-435668-hide-accept.patch
+# PATCH-FIX-UPSTREAM bnc-435722-book-uri-long.patch bnc#435722 -- Book URI: Spills Into Second Column.
+Patch19: bnc-435722-book-uri-long.patch
+# PATCH-FIX-UPSTREAM bnc-441763-diff-meeting-icon.patch bnc#441763 -- This patch shows different icons for meetings
+Patch20: bnc-441763-diff-meeting-icon.patch
+# PATCH-FIX-UPSTREAM bnc-441770-non-intrusive-calendar.patch bnc#441770 -- This patch makes error dialogs non-intrusive.
+Patch21: bnc-441770-non-intrusive-calendar.patch
+# PATCH-FIX-UPSTREAM bnc-442135-exchange-settings-offline.patch bnc#442135 abharath@suse.de -- This patch fixes wrong error dialogs.
+Patch22: bnc-442135-exchange-settings-offline.patch
+# PATCH-FIX-UPSTREAM sharepoint-account-setup.patch pchenthill@suse.de -- This patch allows you to connect to sharepoint servers.
+Patch23: sharepoint-account-setup.patch
# PATCH-FIX-UPSTREAM evo-core-mapi-changes.diff msuman@suse.de -- This patch contains changes in the core code base for the MAPI provider.
Patch100: evo-core-mapi-changes.diff
Url: http://gnome.org/projects/evolution/
@@ -311,6 +330,13 @@ Authors:
%patch13
%patch15 -p1
%patch16 -p1
+%patch17
+%patch18
+%patch19
+%patch20
+%patch21
+%patch22
+%patch23 -p1
%patch100 -p1
%build
@@ -332,7 +358,9 @@ export FFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fstack-protector"
--with-static-ldap=no \
--enable-nss=yes \
--enable-ipv6=yes \
- --enable-default-binary=yes
+ --enable-default-binary=yes \
+ --enable-mono=yes \
+ --enable-icedesktop=yes
# Processing the files in help uses _lots_ of memory, so running that part in parallel is bad.
pushd help
%{__make}
@@ -366,7 +394,7 @@ done
%fdupes $RPM_BUILD_ROOT
%if %suse_version > 1100
%{__mv} $RPM_BUILD_ROOT/%{_bindir}/evolution $RPM_BUILD_ROOT/%{_bindir}/evolution.bin
-echo -e "#!/bin/sh\n\nLD_LIBRARY_PATH=%{_libdir}/evoldap/lib exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n\nexit \$?" > $RPM_BUILD_ROOT/%{_bindir}/evolution
+echo -e "#!/bin/sh\n\nLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n\nexit \$?" > $RPM_BUILD_ROOT/%{_bindir}/evolution
%{__chmod} +x $RPM_BUILD_ROOT/%{_bindir}/evolution
%endif
@@ -423,6 +451,29 @@ fi
%{_libdir}/evolution/*/conduits
%changelog
+* Thu Nov 06 2008 abharath@suse.de
+- Update to version 2.24.1.1
+ Releasing Evolution under 'GNU LGPL V2 or (at your option) V3'.
+ Refer COPYING file for more details
+ + Bugs fixed: bnc#437226, bnc#440007, bgo#541121, bgo#554450,
+ bgo#557246, bgo#557613, bgo#557726, bgo#558726, bgo#559028,
+ bgo#559041 and bgo#559371
+ + Updated translations.
+- Patches added
+ + bgo#558354 - bgo-558354-alarm-notify-improved.patch - Replace
+ "Close" btn in Appts reminder window with a
+ per-item "Dismiss"
+ + bnc#435668 - bnc-435668-hide-accept.patch - Meetings In
+ SentItems Should Hide Accept/Decline
+ + bnc#435722 - bnc-435722-book-uri-long.patch - Book URI:
+ Spills Into Second Column
+ + bnc#441763 - bnc-441763-diff-meeting-icon.patch - Show
+ different icons for meetings
+ + bnc#441770 - bnc-441770-non-intrusive-calendar.patch -
+ Non-intrusive error handling for calendar
+ + bnc#442135 - bnc-442135-exchange-settings-offline.patch -
+ Evolution pops up misleading error dialog
+ + sharepoint-account-setup.patch - Sharepoint account setup.
* Mon Nov 03 2008 msuman@suse.de
- Clean up the spec file to use proper RPM macros.
- Archive the SUSE specific desktop and pixmap files, unclutter the
@@ -440,7 +491,7 @@ fi
* Mon Oct 27 2008 hpj@novell.com
- Add evolution-shared-nss-db.patch, which migrates the old NSS
cert DB to the new, shared format and location.
-* Fri Oct 24 2008 msuman@suse.de
+* Thu Oct 23 2008 msuman@suse.de
- Update to version 2.24.1
+ Bugs fixed: bgo#364542, bgo#438155, bgo#497928, bgo#511918,
bgo#511947, bgo#514989, bgo#519491, bgo#528816, bgo#530606,
@@ -476,7 +527,7 @@ fi
- Update to version 2.23.92:
+ Bug fixed: bgo#549968
+ Updated translations.
-* Wed Sep 03 2008 maw@suse.de
+* Tue Sep 02 2008 maw@suse.de
- Update to version 2.23.91:
+ Bugs fixed: bgo#458512, bgo#509647, bgo#523327, bgo#525555,
bgo#534762, bgo#544430, bgo#546926, bgo#547822, bgo#547822,
@@ -583,7 +634,7 @@ fi
bug-394641_evo-CVE-2008-1109.diff
- bnc#395708 - bgo-395708_prefer-plain.patch - Outlook meeting invites look as text messages
- bnc#394441 - bnc-394441-exchange-addbook-crash.diff - Addressbook crash
-* Wed May 21 2008 msuman@suse.de
+* Tue May 20 2008 msuman@suse.de
- Added
+ bgo-534012-backup-permission.patch (Sankar P)
+ bgo-533820-fix-crash-on-border-clicking-meetings.diff (Chenthill P) (bnc#391993)
@@ -1108,7 +1159,7 @@ fi
* Thu Mar 22 2007 maw@suse.de
- Update to version 2.10.0
- Update the required intltool version.
-* Tue Mar 13 2007 maw@suse.de
+* Mon Mar 12 2007 maw@suse.de
- Update to version 2.9.91
- Remove upstreamed bnc-214647-add-prefer-plain-plugin.patch
- fix-security-gtkhtml-moreui.diff is now much smaller
@@ -1153,7 +1204,7 @@ fi
* Sat Oct 28 2006 kharish@suse.de
- Add bnc-214647-add-prefer-plain-plugin.patch to
include prefer-plain plugin in the build by default.
-* Tue Oct 03 2006 jhargadon@suse.de
+* Mon Oct 02 2006 jhargadon@suse.de
- update to version 2.8.1
- translation updates
- many bug fixes
@@ -1274,7 +1325,7 @@ fi
325960 - Fix to show subscribed and public folders without restarting evolution (Sushma)
- fix-exchange-menuitem.diff: Changed a menu item name in exchange plugin. (Srini)
- fix-sendrecv.diff: Change 'Send Receive' button to 'Get Mail' (Srini)
-* Thu Apr 20 2006 fejj@suse.de
+* Wed Apr 19 2006 fejj@suse.de
- Added bnc-159736-dbus-restart.patch to the build which replaces
survive-dbus-restarts.patch (it solves the same problem plus more
instances of the same)
@@ -1310,7 +1361,7 @@ fi
- Fixes (bnc)
160049 changed G/W password - no calendar prompt ...
158107 No notification of cancelled meetings
-* Fri Mar 24 2006 vvaradhan@novell.com
+* Thu Mar 23 2006 vvaradhan@novell.com
- Fixes (bnc)
150427 evo 1.6 hang on calendar
153807 msg composer seems to lower instead of raise
@@ -1593,17 +1644,17 @@ fi
- Fixed Send as iCalendar (#72795).
* Tue Mar 15 2005 sbrabec@suse.cz
- Fixed Czech translation.
-* Fri Mar 11 2005 gekker@suse.de
+* Thu Mar 10 2005 gekker@suse.de
- Add Email to %%suse_update_desktop_file (65804).
-* Wed Mar 09 2005 gekker@suse.de
+* Tue Mar 08 2005 gekker@suse.de
- Update to version 2.2.0 (GNOME 2.10).
* Wed Mar 02 2005 gekker@suse.de
- Update to version 2.1.6
-* Thu Feb 10 2005 gekker@suse.de
+* Wed Feb 09 2005 gekker@suse.de
- Update to version 2.1.5
* Sat Feb 05 2005 gekker@suse.de
-Update to version 2.1.4
-* Fri Jan 21 2005 ro@suse.de
+* Thu Jan 20 2005 ro@suse.de
- fixed file list
* Sat Jan 15 2005 clahey@suse.de
- Updated to version 2.1.3.
@@ -1615,7 +1666,7 @@ fi
- update to version 2.0.3 (Ximian 70057)
* Tue Nov 30 2004 ro@suse.de
- adapted evolution-2.0.1-de-po.patch
-* Tue Nov 30 2004 gekker@suse.de
+* Mon Nov 29 2004 gekker@suse.de
- Update version to 2.0.2
- Remove patches that are upstream
- Change the no-groupwise-docs patch to actually apply
@@ -1626,9 +1677,9 @@ fi
* Thu Oct 07 2004 dobey@suse.de
- Update default Inbox patch to not mention Groupwise support
http://bugzilla.ximian.com/show_bugs.cgi?id=67643
-* Tue Oct 05 2004 dobey@suse.de
+* Mon Oct 04 2004 dobey@suse.de
- Add patch to fix bug 67513 in bugzilla.ximian.com
-* Thu Sep 30 2004 dobey@suse.de
+* Wed Sep 29 2004 dobey@suse.de
- Add patch various bug fixes since 2.0.1
- Add patch to disable groupwise docs
* Tue Sep 28 2004 dobey@suse.de
@@ -1636,7 +1687,7 @@ fi
* Mon Sep 27 2004 ke@suse.de
- Fix German translation: keep the "DN" string for Distinguished Name
[#44959].
-* Sat Sep 25 2004 dobey@suse.de
+* Fri Sep 24 2004 dobey@suse.de
- Update to version 2.0.1
- Add shared-mime-info to Prereq
* Wed Sep 15 2004 dobey@suse.de
@@ -1654,16 +1705,16 @@ fi
- Cache evolution help files and show evolution in khelpcenter.
* Wed Aug 18 2004 dobey@suse.de
- Comment out %%debug_package
-* Wed Aug 18 2004 dobey@suse.de
+* Tue Aug 17 2004 dobey@suse.de
- Add MozillaFirefox libdir to rpath
-* Sat Aug 14 2004 dobey@suse.de
+* Fri Aug 13 2004 dobey@suse.de
- Update to version 1.5.93
- Split pilot conduits out into evolution-pilot package
- Update dependencies for new versions
- Remove 64-bit patches that are now in CVS
- Remove patch for com_err.h checks as it is in CVS now
- Add patch for default Inbox and Welcome message
-* Tue Aug 10 2004 adrian@suse.de
+* Mon Aug 09 2004 adrian@suse.de
- move evolution menu entry out of the More menu.
* Mon Aug 09 2004 dobey@suse.de
- Update dependencies to pull in new versions
@@ -1752,7 +1803,7 @@ fi
- updated to version 1.4.4 (GTK2/GNOME2 ported)
* Mon Jul 14 2003 sbrabec@suse.cz
- GNOME prefix change to /opt/gnome.
-* Mon Jun 30 2003 ro@suse.de
+* Sun Jun 29 2003 ro@suse.de
- added directories to filelist
* Thu Jun 05 2003 ro@suse.de
- remove unpackaged files from buildroot
@@ -1782,11 +1833,11 @@ fi
* Thu Aug 22 2002 hhetter@suse.de
- build with rpath /opt/mozilla/%%_lib to correctly link
wombat (Bug Id#18195)
-* Sat Jul 27 2002 adrian@suse.de
+* Fri Jul 26 2002 adrian@suse.de
- fix neededforbuild
* Tue Jul 16 2002 hhetter@suse.de
- updated to bugfix release 1.0.8
-* Wed Jun 26 2002 ro@suse.de
+* Tue Jun 25 2002 ro@suse.de
- build libibex.a with -fPIC, it's linked into a shared library
* Mon Jun 17 2002 jordi@suse.de
- Updated to version 1.0.7
@@ -1807,7 +1858,7 @@ fi
- update to version 1.0.5
- build and link with db 3.1.17, required by
evolution contacts
-* Wed Apr 24 2002 ro@suse.de
+* Tue Apr 23 2002 ro@suse.de
- fix build with latest autoconf
(AM_CONDITIONAL must appear in mainline)
* Tue Mar 26 2002 hhetter@suse.de
@@ -1894,11 +1945,11 @@ fi
- Fixed it a little more....
* Mon Sep 25 2000 egger@suse.de
- Removed a thinko....
-* Mon Sep 25 2000 egger@suse.de
+* Sun Sep 24 2000 egger@suse.de
- Restructuring of the package.
- Use the splitted packages oafdev and bonobod.
- Buildproofed on i386.
-* Fri Sep 22 2000 egger@suse.de
+* Thu Sep 21 2000 egger@suse.de
- Use BuildRoot.
- Buildproofed on i386.
* Tue Sep 19 2000 egger@suse.de
diff --git a/sharepoint-account-setup.patch b/sharepoint-account-setup.patch
new file mode 100644
index 0000000..ff77c32
--- /dev/null
+++ b/sharepoint-account-setup.patch
@@ -0,0 +1,532 @@
+diff --git a/plugins/mono/mono-plugin.c b/plugins/mono/mono-plugin.c
+index 5c5182e..542e6f0 100644
+--- a/plugins/mono/mono-plugin.c
++++ b/plugins/mono/mono-plugin.c
+@@ -79,9 +79,14 @@ epm_invoke(EPlugin *ep, const char *name, void *data)
+ MonoObject *x = NULL, *res;
+ void **params;
+
+- g_print ("\n\a epm_invoke in mono-plugin.c in mono plugin loader is called \n\a");
++ g_print ("\n\a epm_invoke in mono-plugin.c in mono plugin loader is called %s \n\a", epm->location);
+
+ /* we need to do this every time since we may be called from any thread for some uses */
++ if (!domain) {
++ mono_config_parse (NULL);
++ domain = mono_jit_init (epm->location);
++ }
++
+ mono_thread_attach(domain);
+
+ if (p->assembly == NULL) {
+@@ -230,8 +235,6 @@ load_plugin_type_register_function (void *a, void *b)
+ type = g_type_register_static(e_plugin_get_type(), "EPluginMono", &info, 0);
+ e_plugin_register_type (type);
+ d(printf("\nType EPluginMono registered from the mono-plugin-loader\n"));
+- domain = mono_jit_init("Evolution");
+- mono_thread_attach(domain);
+ }
+
+ return GUINT_TO_POINTER(type);
+diff --git a/plugins/sharepoint-account-setup/Makefile.am b/plugins/sharepoint-account-setup/Makefile.am
+new file mode 100644
+index 0000000..b01f3df
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/Makefile.am
+@@ -0,0 +1,37 @@
++CSC = gmcs
++
++ASSEMBLY_NAME = SharepointAccountSetup
++TARGET = $(ASSEMBLY)
++ASSEMBLY = $(ASSEMBLY_NAME).dll
++
++@EVO_PLUGIN_RULE@
++
++CSFILES = SharepointSource.cs SharepointAccount.cs SharepointAccountSetup.cs
++
++EXTRA_DIST = org-gnome-sharepoint-account-setup.eplug.xml \
++ org-gnome-sharepoint-ui.xml \
++ org-gnome-sharepoint-disconnect-ui.xml \
++ $(CSFILES)
++
++ASSEMBLIES = \
++ -r:System \
++ -r:Mono.Posix \
++ $(ICE_DESKTOP_LIBS) \
++ $(MONO_PLATFORM_LIBS)
++
++CSFLAGS = -noconfig -codepage:utf8 -warn:4 -debug -d:DEBUG $(ASSEMBLIES)
++
++#endif
++#if ENABLE_RELEASE
++#CSFLAGS = -noconfig -codepage:utf8 -warn:4
++#endif
++$(ASSEMBLY): $(CSCFILES)
++ $(CSC) -unsafe /out:$(ASSEMBLY) $(CSFLAGS) /target:library $(ASSEMBLIES) $(CSFILES)
++
++plugin_DATA = $(ASSEMBLY) org-gnome-sharepoint-account-setup.eplug org-gnome-sharepoint-ui.xml org-gnome-sharepoint-disconnect-ui.xml
++
++BUILT_SOURCES = $(ASSEMBLY) org-gnome-sharepoint-account-setup.eplug
++
++all: $(ASSEMBLY)
++
++CLEANFILES = org-gnome-sharepoint-account-setup.eplug $(ASSEMBLY) $(ASSEMBLY).mdb
+diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs
+new file mode 100644
+index 0000000..5009e98
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/SharepointAccount.cs
+@@ -0,0 +1,165 @@
++// SharepointAccount.cs created with MonoDevelop
++// User: chen at 12:30 PM 10/21/2008
++//
++// To change standard headers go to Edit->Preferences->Coding->Standard Headers
++//
++
++using System;
++using Evolution;
++using NDesk.DBus;
++using Gtk;
++using System.Threading;
++using GLib;
++using Novell.IceDesktop;
++
++namespace Sharepoint
++{
++
++
++ public class SharepointAccount
++ {
++ static Novell.IceDesktop.IDaemon deskIceDaemon = null;
++ static org.freedesktop.DBus.IBus sessionBus = null;
++ static ObjectPath DaemonPath = new ObjectPath (Novell.IceDesktop.ServiceName.DaemonPath);
++ static string DaemonNamespace = Novell.IceDesktop.ServiceName.DaemonNamespace;
++ static bool initialized = false;
++ static System.Threading.Thread backgroundThread = null;
++
++ public SharepointAccount()
++ {
++ }
++
++ public void CreateAccount ()
++ {
++ try
++ {
++ if (initialized == false) {
++ BusG.Init ();
++ initialized = true;
++ }
++
++
++ sessionBus = Bus.Session.GetObject ("org.freedesktop.DBus",
++ new ObjectPath ("/org/freedesktop/DBus"));
++ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged;
++
++ // Force the daemon to start up if it's not already running
++ if (Bus.Session.NameHasOwner (DaemonNamespace) == false)
++ {
++ Bus.Session.StartServiceByName (DaemonNamespace);
++ }
++
++ ConnectToICEcoreDaemon ();
++ try { deskIceDaemon.CheckAuthentication (String.Empty); }
++ catch (NotAuthenticatedException)
++ { return; }
++
++ Console.WriteLine ("****** Authenticated");
++ StartFetchingFolder ();
++
++ }
++ catch (Exception ex)
++ {
++ Console.WriteLine ("Error creating account: {0}", ex.Message);
++ Console.WriteLine (ex.StackTrace);
++ // Change the status text in the AuthDialog
++ return;
++ }
++ }
++
++ public void DeleteAccount ()
++ {
++ // we remove all share calendars. We currently support creating only one sharepoint account
++ SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null);
++ spSource.DeleteSources ();
++ spSource.Sync ();
++ }
++
++ private static void StartFetchingFolder ()
++ {
++ if (backgroundThread == null)
++ {
++ backgroundThread = new System.Threading.Thread (new ThreadStart (SetupFolders));
++ backgroundThread.IsBackground = true;
++ backgroundThread.Start ();
++ }
++ }
++
++ private static void SetupFolders ()
++ {
++ Console.WriteLine ("Getting folders ");
++ AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo ();
++ SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username,
++ accountInfo.hostUrl);
++
++ if (spSource.AccountExists) {
++ Console.WriteLine ("Account already exists");
++ return;
++ }
++
++ FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces ();
++ foreach (FileInfo workspace in workspaces)
++ {
++ FileInfo[] folders = null;
++
++ if (spSource.srcType == CalSourceType.Event)
++ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id);
++ // else get task folders
++
++
++ if (folders.Length == 0)
++ continue;
++
++ spSource.CreateSources (workspace, folders);
++ }
++ spSource.Sync ();
++ Console.WriteLine ("******* Got folders ");
++ backgroundThread = null;
++ RemoveHandlers ();
++ }
++
++ private static void RemoveHandlers ()
++ {
++ sessionBus.NameOwnerChanged -= OnDBusNameOwnerChanged;
++ deskIceDaemon.Authenticated -= OnAuthenticated;
++ }
++
++ static void OnAuthenticated (string server, string username)
++ {
++ Console.WriteLine ("Auth done\n");
++ StartFetchingFolder ();
++ }
++
++ static void OnDBusNameOwnerChanged (string serviceName, string oldOwner, string newOwner)
++ {
++
++ Console.WriteLine ("O/p {0} {1}", serviceName, DaemonNamespace);
++ if (serviceName == null)
++ return;
++ if (serviceName.CompareTo (DaemonNamespace) != 0)
++ return;
++
++ if (oldOwner != null && oldOwner.Length > 0) {
++ // The daemon just went away
++ // TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?
++ Console.WriteLine ("TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?");
++ } else {
++ // Connect to the new instance of the daemon
++ ConnectToICEcoreDaemon ();
++ }
++ }
++
++ ///
++ /// Connect with the ICEcore Daemon and register event handlers.
++ ///
++ static void ConnectToICEcoreDaemon ()
++ {
++ Console.WriteLine ("Connecting the navigator to the ICEcore Daemon");
++ // Check DBus to see if the Daemon is currently running
++ deskIceDaemon =
++ Bus.Session.GetObject (DaemonNamespace, DaemonPath);
++ // Set up the daemon event handlers
++ deskIceDaemon.Authenticated += OnAuthenticated;
++ }
++ }
++}
+diff --git a/plugins/sharepoint-account-setup/SharepointAccountSetup.cs b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
+new file mode 100644
+index 0000000..70d6b15
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
+@@ -0,0 +1,22 @@
++using System;
++using Sharepoint;
++using Evolution;
++using GLib;
++using Gtk;
++
++public class SharePointAccountSetup
++{
++ public static IntPtr SetupAccount (IntPtr pluginPtr)
++ {
++ SharepointAccount account = new SharepointAccount ();
++ account.CreateAccount ();
++ return (IntPtr) 0;
++ }
++
++ public static IntPtr RemoveAccount (IntPtr pluginPtr)
++ {
++ SharepointAccount account = new SharepointAccount ();
++ account.DeleteAccount ();
++ return (IntPtr) 0;
++ }
++}
+diff --git a/plugins/sharepoint-account-setup/SharepointSource.cs b/plugins/sharepoint-account-setup/SharepointSource.cs
+new file mode 100644
+index 0000000..c61fcf0
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/SharepointSource.cs
+@@ -0,0 +1,97 @@
++// SharepointSource.cs created with MonoDevelop
++// User: chen at 1:38 AM 10/21/2008
++//
++// To change standard headers go to Edit->Preferences->Coding->Standard Headers
++//
++
++using System;
++using Evolution;
++using Novell.IceDesktop;
++using GConf;
++using System.Collections.Generic;
++
++namespace Sharepoint
++{
++
++
++ public class SharepointSource
++ {
++ public CalSourceType srcType;
++ readonly string calPath = "/apps/evolution/calendar/sources";
++ readonly string taskPath = "/apps/evolution/tasks/sources";
++ static Client client;
++ SourceList srcList;
++ readonly string baseUri = "sharepoint://";
++ string username;
++ string hostUrl;
++
++ public SharepointSource(CalSourceType type, string userName, string hosturl)
++ {
++ srcType = type;
++ client = new Client ();
++ username = userName;
++ hostUrl = hosturl;
++
++ if (type == CalSourceType.Event)
++ srcList = new SourceList (calPath);
++ else
++ srcList = new SourceList (taskPath);
++ }
++
++ public bool AccountExists
++ {
++ get
++ {
++ foreach (SourceGroup group in srcList.Groups)
++ {
++ if (group.BaseUri == baseUri)
++ return true;
++ }
++
++ return false;
++ }
++ }
++
++ public void CreateSources (FileInfo workspace, FileInfo [] folders)
++ {
++ SourceGroup group = new SourceGroup (workspace.DisplayName, baseUri);
++
++ foreach (FileInfo folder in folders)
++ {
++ Console.WriteLine (workspace.DisplayName + " folder " + folder.DisplayName);
++ string relativeUri = hostUrl + ":" + folder.Id;
++ Source source= new Source (folder.DisplayName, relativeUri);
++ source.SetProperty ("username", username);
++ source.SetProperty ("workspaceid", workspace.Id);
++ source.SetProperty ("Id", folder.Id);
++ source.SetProperty ("Auth","True");
++ group.AddSource (source, -1);
++ }
++ group.SetProperty ("username", username);
++ srcList.AddGroup (group, -1);
++ }
++
++ public void Sync ()
++ {
++ srcList.Sync ();
++ }
++
++ public void DeleteSources ()
++ {
++ List groupsToRemove = new List ();
++ foreach (SourceGroup group in srcList.Groups)
++ {
++ if (group.BaseUri.StartsWith (baseUri))
++ {
++ /// Currently we remove all sharepoint calendars
++ groupsToRemove.Add (group);
++ }
++ }
++
++ foreach (SourceGroup group in groupsToRemove)
++ {
++ srcList.RemoveGroup (group);
++ }
++ }
++ }
++}
+diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
+new file mode 100644
+index 0000000..80cdeb8
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
+@@ -0,0 +1,36 @@
++
++
++
++
++ <_description>Create a sharepoint account for calendar and tasks
++
++
++
++
++
++
++
+diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
+new file mode 100644
+index 0000000..d2545f8
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
+@@ -0,0 +1,16 @@
++
++
++
++
++
++
++
+diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
+new file mode 100644
+index 0000000..f92e097
+--- /dev/null
++++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
+@@ -0,0 +1,16 @@
++
++
++
++
++
++
++
+diff --git a/ui/evolution.xml b/ui/evolution.xml
+index 9b4231e..4008c95 100644
+--- a/ui/evolution.xml
++++ b/ui/evolution.xml
+@@ -66,6 +66,8 @@
+
+
+
++
++
+
+
+
+--- a/configure.in 2008-11-05 16:29:35.000000000 +0530
++++ b/configure.in 2008-11-06 18:48:19.000000000 +0530
+@@ -900,7 +900,27 @@ if test "x${enable_mono}" = "xyes"; then
+ AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled])
+ mono_package="mono"
+ MONO_PLUGIN="mono"
++ PKG_CHECK_MODULES(MONO_PLATFORM,
++ [glib-sharp-2.0, gtk-sharp-2.0, gconf-sharp-2.0, gnome-sharp-2.0,
++ evolution-sharp, ndesk-dbus-1.0, ndesk-dbus-glib-1.0, solvent])
++ AC_SUBST(MONO_PLATFORM_CFLAGS)
++ AC_SUBST(MONO_PLATFORM_LIBS)
++ MONO_BASED_PLUGINS=""
++
++ dnl Sharepoint account setup
++ AC_ARG_ENABLE([icedesktop],
++ AC_HELP_STRING([--enable-icedesktop],
++ [Build sharepoint provider]),
++ [enable_icedesktop=$enableval],[enable_icedesktop=no])
++ if test "x${enable_icedesktop}" = "xyes"; then
++ PKG_CHECK_MODULES(ICE_DESKTOP, [Novell.IceDesktop])
++ AC_SUBST(ICE_DESKTOP_CFLAGS)
++ AC_SUBST(ICE_DESKTOP_LIBS)
++ MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup"
++ fi
+ fi
++AC_SUBST(MONO_CFLAGS)
++AC_SUBST(MONO_LIBS)
+
+ dnl Python hooks
+ dnl This should just define python CFLAGS etc here, it is used later to
+@@ -1732,7 +1752,7 @@ AC_ARG_ENABLE([plugins],
+ dnl Add any new plugins here
+ plugins_base_always="calendar-file calendar-http calendar-weather itip-formatter plugin-manager default-source addressbook-file startup-wizard mark-all-read groupwise-features groupwise-account-setup mail-account-disable publish-calendar caldav imap-features google-account-setup webdav-account-setup"
+
+-plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN "
++plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN $MONO_BASED_PLUGINS"
+ all_plugins_base="$plugins_base_always sa-junk-plugin bogo-junk-plugin exchange-operations mono"
+
+ plugins_standard_always="bbdb subject-thread save-calendar select-one-source copy-tool mail-to-task mark-calendar-offline audio-inline mailing-list-actions default-mailer import-ics-attachments prefer-plain mail-notification attachment-reminder face backup-restore email-custom-header templates pst-import"
+@@ -1784,6 +1804,11 @@ if test "x${enable_mono}" = "xyes"; then
+ msg_plugins="$msg_plugins (and mono)"
+ fi
+
++if test "x${enable_icedesktop}" = "xyes"; then
++ plugins_enabled="$plugins_enabled sharepoint-account-setup"
++ msg_plugins="$msg_plugins (and sharepoint)"
++fi
++
+
+ if test "x${enable_python}" = "xyes"; then
+ plugins_enabled="$plugins_enabled python"
+@@ -2072,6 +2097,7 @@ plugins/pst-import/Makefile
+ plugins/face/Makefile
+ plugins/external-editor/Makefile
+ plugins/webdav-account-setup/Makefile
++plugins/sharepoint-account-setup/Makefile
+ smime/Makefile
+ smime/lib/Makefile
+ smime/gui/Makefile