diff --git a/bgo-332729-invalid-write-econfig.patch b/bgo-332729-invalid-write-econfig.patch
deleted file mode 100644
index 912a345..0000000
--- a/bgo-332729-invalid-write-econfig.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: e-util/e-config.c
-===================================================================
---- e-util/e-config.c (revision 36811)
-+++ e-util/e-config.c (working copy)
-@@ -122,6 +122,10 @@ ep_finalise(GObject *o)
- }
-
- while ( (wn = (struct _widget_node *)e_dlist_remhead(&p->widgets)) ) {
-+ /* disconnect the gtk_widget_destroyed function from the widget */
-+ if (wn->widget)
-+ g_signal_handlers_disconnect_matched (wn->widget, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, &wn->widget);
-+
- g_free(wn);
- }
-
diff --git a/bgo-556224-search-events-offline.patch b/bgo-556224-search-events-offline.patch
deleted file mode 100644
index f59f9d3..0000000
--- a/bgo-556224-search-events-offline.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-Index: calendar/gui/gnome-cal.c
-===================================================================
---- calendar/gui/gnome-cal.c (revision 36783)
-+++ calendar/gui/gnome-cal.c (working copy)
-@@ -194,6 +194,9 @@ struct _GnomeCalendarPrivate {
- /* We should know which calendar has been used to create object, so store it here
- before emitting "user_created" signal and make it NULL just after the emit. */
- ECal *user_created_cal;
-+
-+ /* used in update_todo_view, to prevent interleaving when called in separate thread */
-+ GMutex *todo_update_lock;
- };
-
- /* Signal IDs */
-@@ -885,6 +888,8 @@ update_query_async (struct _date_query_m
-
- real_sexp = adjust_e_cal_view_sexp (gcal, priv->sexp);
- if (!real_sexp) {
-+ g_object_unref (msg->gcal);
-+ g_slice_free (struct _date_query_msg, msg);
- return; /* No time range is set, so don't start a query */
- }
-
-@@ -1304,18 +1309,30 @@ timezone_changed_cb (GConfClient *client
- set_timezone (calendar);
- }
-
-+struct _mupdate_todo_msg {
-+ Message header;
-+ GnomeCalendar *gcal;
-+};
-+
- static void
--update_todo_view (GnomeCalendar *gcal)
-+update_todo_view_async (struct _mupdate_todo_msg *msg)
- {
-+ GnomeCalendar *gcal;
- GnomeCalendarPrivate *priv;
- ECalModel *model;
- char *sexp = NULL;
-
-+ g_return_if_fail (msg != NULL);
-+
-+ gcal = msg->gcal;
- priv = gcal->priv;
-
-+ g_mutex_lock (priv->todo_update_lock);
-+
- /* Set the query on the task pad */
- if (priv->todo_sexp) {
- g_free (priv->todo_sexp);
-+ priv->todo_sexp = NULL;
- }
-
- model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo));
-@@ -1330,6 +1347,22 @@ update_todo_view (GnomeCalendar *gcal)
- e_cal_model_set_search_query (model, priv->todo_sexp);
- }
-
-+ g_mutex_unlock (priv->todo_update_lock);
-+
-+ g_object_unref (msg->gcal);
-+ g_slice_free (struct _mupdate_todo_msg, msg);
-+}
-+
-+static void
-+update_todo_view (GnomeCalendar *gcal)
-+{
-+ struct _mupdate_todo_msg *msg;
-+
-+ msg = g_slice_new0 (struct _mupdate_todo_msg);
-+ msg->header.func = (MessageFunc) update_todo_view_async;
-+ msg->gcal = g_object_ref (gcal);
-+
-+ message_push ((Message *) msg);
- }
-
- static void
-@@ -1661,7 +1694,7 @@ setup_widgets (GnomeCalendar *gcal)
- "TaskPad", NULL);
- e_calendar_table_load_state (E_CALENDAR_TABLE (priv->todo), filename);
-
-- update_todo_view (gcal);
-+ /* update_todo_view (gcal); */
- g_free (filename);
-
- etable = e_calendar_table_get_table (E_CALENDAR_TABLE (priv->todo));
-@@ -1828,6 +1861,8 @@ gnome_calendar_init (GnomeCalendar *gcal
-
- e_categories_register_change_listener (G_CALLBACK (categories_changed_cb), gcal);
-
-+ priv->todo_update_lock = g_mutex_new ();
-+
- priv->current_view_type = GNOME_CAL_DAY_VIEW;
- priv->range_selected = FALSE;
- priv->lview_select_daten_range = TRUE;
-@@ -2004,6 +2039,8 @@ gnome_calendar_destroy (GtkObject *objec
- g_signal_handlers_disconnect_by_func (cal_model,
- G_CALLBACK (view_done_cb), gcal);
-
-+ g_mutex_free (priv->todo_update_lock);
-+
- g_free (priv);
- gcal->priv = NULL;
- }
diff --git a/bgo-558354-alarm-notify-improved.patch b/bgo-558354-alarm-notify-improved.patch
deleted file mode 100644
index 5216bb8..0000000
--- a/bgo-558354-alarm-notify-improved.patch
+++ /dev/null
@@ -1,270 +0,0 @@
-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/bgo-559604-calendar-tooltip-updated.patch b/bgo-559604-calendar-tooltip-updated.patch
deleted file mode 100644
index 2b1041f..0000000
--- a/bgo-559604-calendar-tooltip-updated.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Index: calendar/gui/e-calendar-table.c
-===================================================================
---- calendar/gui/e-calendar-table.c (revision 36811)
-+++ calendar/gui/e-calendar-table.c (working copy)
-@@ -432,7 +432,7 @@ query_tooltip_cb (GtkWidget *widget, gin
- e_cal_component_free_datetime (&dtstart);
- e_cal_component_free_datetime (&dtdue);
-
-- tmp = e_calendar_view_get_attendees_status_info (new_comp);
-+ tmp = e_calendar_view_get_attendees_status_info (new_comp, comp->client);
- if (tmp) {
- l = gtk_label_new (tmp);
- gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
-Index: calendar/gui/e-calendar-view.c
-===================================================================
---- calendar/gui/e-calendar-view.c (revision 36811)
-+++ calendar/gui/e-calendar-view.c (working copy)
-@@ -2137,7 +2137,7 @@ e_calendar_view_move_tip (GtkWidget *wid
- * Free returned pointer with g_free.
- **/
- char *
--e_calendar_view_get_attendees_status_info (ECalComponent *comp)
-+e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECal *client)
- {
- struct _values {
- icalparameter_partstat status;
-@@ -2158,7 +2158,7 @@ e_calendar_view_get_attendees_status_inf
- char *res = NULL;
- int i;
-
-- if (!comp || !e_cal_component_has_attendees (comp))
-+ if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user (comp, client))
- return NULL;
-
- e_cal_component_get_attendee_list (comp, &attendees);
-@@ -2354,7 +2354,7 @@ e_calendar_view_get_tooltips (ECalendarV
- g_free (tmp2);
- g_free (tmp1);
-
-- tmp = e_calendar_view_get_attendees_status_info (newcomp);
-+ tmp = e_calendar_view_get_attendees_status_info (newcomp, pevent->comp_data->client);
- if (tmp) {
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new (tmp), FALSE, FALSE, 0);
-Index: calendar/gui/e-calendar-view.h
-===================================================================
---- calendar/gui/e-calendar-view.h (revision 36811)
-+++ calendar/gui/e-calendar-view.h (working copy)
-@@ -175,7 +175,7 @@ gboolean e_calendar_view_get_tooltips (E
- void e_calendar_view_move_tip (GtkWidget *widget, int x, int y);
-
- const gchar *e_calendar_view_get_icalcomponent_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text);
--char *e_calendar_view_get_attendees_status_info (ECalComponent *comp);
-+char *e_calendar_view_get_attendees_status_info (ECalComponent *comp, ECal *client);
-
- void draw_curved_rectangle (cairo_t *cr,
- double x0,
diff --git a/bgo-559604-tooltip-for-gw.patch b/bgo-559604-tooltip-for-gw.patch
deleted file mode 100644
index 1707bdf..0000000
--- a/bgo-559604-tooltip-for-gw.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Index: calendar/gui/itip-utils.c
-===================================================================
---- calendar/gui/itip-utils.c (revision 37007)
-+++ calendar/gui/itip-utils.c (working copy)
-@@ -83,13 +83,13 @@ itip_addresses_get_default (void)
- }
-
- gboolean
--itip_organizer_is_user (ECalComponent *comp, ECal *client)
-+itip_organizer_is_user_ex (ECalComponent *comp, ECal *client, gboolean skip_cap_test)
- {
- ECalComponentOrganizer organizer;
- const char *strip;
- gboolean user_org = FALSE;
-
-- if (!e_cal_component_has_organizer (comp) || e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER))
-+ if (!e_cal_component_has_organizer (comp) || (!skip_cap_test && e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_NO_ORGANIZER)))
- return FALSE;
-
- e_cal_component_get_organizer (comp, &organizer);
-@@ -117,6 +117,12 @@ itip_organizer_is_user (ECalComponent *c
- }
-
- gboolean
-+itip_organizer_is_user (ECalComponent *comp, ECal *client)
-+{
-+ return itip_organizer_is_user_ex (comp, client, FALSE);
-+}
-+
-+gboolean
- itip_sentby_is_user (ECalComponent *comp)
- {
- ECalComponentOrganizer organizer;
-Index: calendar/gui/itip-utils.h
-===================================================================
---- calendar/gui/itip-utils.h (revision 37007)
-+++ calendar/gui/itip-utils.h (working copy)
-@@ -51,6 +51,7 @@ EAccountList *itip_addresses_get (void);
- EAccount *itip_addresses_get_default (void);
-
- gboolean itip_organizer_is_user (ECalComponent *comp, ECal *client);
-+gboolean itip_organizer_is_user_ex (ECalComponent *comp, ECal *client, gboolean skip_cap_test);
- gboolean itip_sentby_is_user (ECalComponent *comp);
-
- const gchar *itip_strip_mailto (const gchar *address);
-Index: calendar/gui/e-calendar-view.c
-===================================================================
---- calendar/gui/e-calendar-view.c (revision 37007)
-+++ calendar/gui/e-calendar-view.c (working copy)
-@@ -2234,7 +2234,7 @@ e_calendar_view_get_attendees_status_inf
- char *res = NULL;
- int i;
-
-- if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user (comp, client))
-+ if (!comp || !e_cal_component_has_attendees (comp) || !itip_organizer_is_user_ex (comp, client, TRUE))
- return NULL;
-
- e_cal_component_get_attendee_list (comp, &attendees);
diff --git a/bgo-562228-evo-mailbox-field.patch b/bgo-562228-evo-mailbox-field.patch
deleted file mode 100644
index 90952f1..0000000
--- a/bgo-562228-evo-mailbox-field.patch
+++ /dev/null
@@ -1,91 +0,0 @@
---- plugins/exchange-operations/exchange-account-setup.c 2008/12/02 05:51:59 36824
-+++ plugins/exchange-operations/exchange-account-setup.c 2008/12/02 12:23:33 36825
-@@ -613,6 +613,30 @@
- update_mailbox_param_in_url (target->account, E_ACCOUNT_TRANSPORT_URL, mailbox);
- }
-
-+static void
-+want_mailbox_toggled (GtkWidget *toggle, EConfig *config)
-+{
-+ GtkWidget *entry;
-+
-+ g_return_if_fail (toggle != NULL);
-+ g_return_if_fail (config != NULL);
-+
-+ entry = g_object_get_data (G_OBJECT (toggle), "mailbox-entry");
-+ if (entry) {
-+ gboolean is_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
-+ EMConfigTargetAccount *target;
-+ const char *mailbox;
-+
-+ gtk_widget_set_sensitive (entry, is_active);
-+
-+ target = (EMConfigTargetAccount *)config->target;
-+ mailbox = gtk_entry_get_text (GTK_ENTRY (entry));
-+
-+ update_mailbox_param_in_url (target->account, E_ACCOUNT_SOURCE_URL, is_active ? mailbox : NULL);
-+ update_mailbox_param_in_url (target->account, E_ACCOUNT_TRANSPORT_URL, is_active ? mailbox : NULL);
-+ }
-+}
-+
- static char *
- construct_owa_url (CamelURL *url)
- {
-@@ -645,8 +669,8 @@
- {
- EMConfigTargetAccount *target_account;
- const char *source_url;
-- char *owa_url = NULL, *mailbox_name;
-- GtkWidget *owa_entry, *mailbox_entry;
-+ char *owa_url = NULL, *mailbox_name, *username;
-+ GtkWidget *owa_entry, *mailbox_entry, *want_mailbox_check;
- CamelURL *url;
- int row;
- GtkWidget *hbox, *label, *button;
-@@ -679,6 +703,7 @@
-
- owa_url = g_strdup (camel_url_get_param(url, "owa_url"));
- mailbox_name = g_strdup (camel_url_get_param (url, "mailbox"));
-+ username = g_strdup (url->user);
-
- /* if the host is null, then user+other info is dropped silently, force it to be kept */
- if (url->host == NULL) {
-@@ -740,6 +765,19 @@
- owa_editor_entry_changed (owa_entry, data->config);
-
- row++;
-+ want_mailbox_check = gtk_check_button_new_with_mnemonic (_("S_pecify the mailbox name"));
-+ gtk_widget_show (want_mailbox_check);
-+ gtk_table_attach (GTK_TABLE (data->parent), want_mailbox_check, 1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0);
-+ if (!username || !*username || !mailbox_name || !*mailbox_name ||
-+ g_ascii_strcasecmp (username, mailbox_name) == 0 ||
-+ (strchr (username, '/') && g_ascii_strcasecmp (strchr (username, '/') + 1, mailbox_name) == 0)) {
-+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (want_mailbox_check), FALSE);
-+ } else {
-+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (want_mailbox_check), TRUE);
-+ }
-+ g_signal_connect (want_mailbox_check, "toggled", G_CALLBACK (want_mailbox_toggled), data->config);
-+
-+ row++;
- label = gtk_label_new_with_mnemonic (_("_Mailbox:"));
- gtk_widget_show (label);
-
-@@ -750,14 +788,18 @@
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), mailbox_entry);
-
-+ gtk_widget_set_sensitive (mailbox_entry, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (want_mailbox_check)));
-+
- g_signal_connect (mailbox_entry, "changed", G_CALLBACK (mailbox_editor_entry_changed), data->config);
- g_object_set_data (G_OBJECT (button), "mailbox-entry", mailbox_entry);
-+ g_object_set_data (G_OBJECT (want_mailbox_check), "mailbox-entry", mailbox_entry);
-
- gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0);
- gtk_table_attach (GTK_TABLE (data->parent), mailbox_entry, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0);
-
- g_free (owa_url);
- g_free (mailbox_name);
-+ g_free (username);
-
- return hbox;
- }
diff --git a/bgo-564248-evo-copy-paste-images.patch b/bgo-564248-evo-copy-paste-images.patch
deleted file mode 100644
index 40a426a..0000000
--- a/bgo-564248-evo-copy-paste-images.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Index: composer/e-msg-composer.c
-===================================================================
---- composer/e-msg-composer.c (revision 36891)
-+++ composer/e-msg-composer.c (working copy)
-@@ -67,6 +67,7 @@
- #include "e-util/e-plugin-ui.h"
- #include "e-util/e-util-private.h"
- #include "e-util/e-util.h"
-+#include "e-util/e-mktemp.h"
- #include
- #include "e-signature-combo-box.h"
-
-@@ -2454,6 +2455,7 @@ msg_composer_paste_clipboard (GtkhtmlEdi
- EMsgComposer *composer;
- GtkWidget *parent;
- GtkWidget *widget;
-+ GtkClipboard *clipboard;
-
- composer = E_MSG_COMPOSER (editor);
- widget = gtk_window_get_focus (GTK_WINDOW (editor));
-@@ -2464,8 +2466,37 @@ msg_composer_paste_clipboard (GtkhtmlEdi
- return;
- }
-
-- /* Chain up to parent's paste_clipboard() method. */
-- GTKHTML_EDITOR_CLASS (parent_class)->paste_clipboard (editor);
-+ clipboard = gtk_widget_get_clipboard (widget, GDK_SELECTION_CLIPBOARD);
-+ if (clipboard && gtk_clipboard_wait_is_image_available (clipboard)) {
-+ GdkPixbuf *pixbuf;
-+
-+ pixbuf = gtk_clipboard_wait_for_image (clipboard);
-+ if (pixbuf) {
-+ char *tmpl = g_strconcat (_("Image"), "-XXXXXX", NULL);
-+ char *filename = e_mktemp (tmpl);
-+
-+ g_free (tmpl);
-+
-+ if (filename && gdk_pixbuf_save (pixbuf, filename, "png", NULL, NULL)) {
-+ if (gtkhtml_editor_get_html_mode (editor)) {
-+ char *uri = g_strconcat ("file://", filename, NULL);
-+ /* this loads image async, thus cannot remove file from this */
-+ gtkhtml_editor_insert_image (editor, uri);
-+ g_free (uri);
-+ } else {
-+ /* this loads image immediately, remove file from cache to free up disk space */
-+ e_attachment_bar_attach (E_ATTACHMENT_BAR (composer->priv->attachment_bar), filename, "image/png");
-+ g_remove (filename);
-+ }
-+ }
-+
-+ g_free (filename);
-+ g_object_unref (pixbuf);
-+ }
-+ } else {
-+ /* Chain up to parent's paste_clipboard() method. */
-+ GTKHTML_EDITOR_CLASS (parent_class)->paste_clipboard (editor);
-+ }
- }
-
- static void
diff --git a/bnc-434320-mail-notify-fix.patch b/bnc-434320-mail-notify-fix.patch
deleted file mode 100644
index 3be4030..0000000
--- a/bnc-434320-mail-notify-fix.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- plugins/mail-notification/mail-notification.c
-+++ plugins/mail-notification/mail-notification.c
-@@ -56,6 +56,7 @@
-
- static gboolean enabled = FALSE;
- static GtkWidget *get_cfg_widget (void);
-+static GStaticMutex mlock = G_STATIC_MUTEX_INIT;
-
- /**
- * each part should "implement" its own "public" functions:
-@@ -441,6 +442,24 @@ popup_menu_status (GtkStatusIcon *status_icon, guint button, guint activate_time
- g_object_unref (menu);
- }
-
-+static void
-+notifyActionCallback (NotifyNotification *n, gchar *label, gpointer a)
-+{
-+ g_static_mutex_lock (&mlock);
-+
-+ gtk_status_icon_set_visible (status_icon, FALSE);
-+ g_object_unref (status_icon);
-+
-+ if (blink_timeout_id) {
-+ g_source_remove (blink_timeout_id);
-+ blink_timeout_id = 0;
-+ }
-+
-+ status_icon = NULL;
-+ status_count = 0;
-+ g_static_mutex_unlock (&mlock);
-+}
-+
- static void
- new_notify_status (EMEventTargetFolder *t)
- {
-@@ -487,6 +506,7 @@ new_notify_status (EMEventTargetFolder *t)
-
- notify_notification_set_urgency (notify, NOTIFY_URGENCY_NORMAL);
- notify_notification_set_timeout (notify, NOTIFY_EXPIRES_DEFAULT);
-+ notify_notification_add_action(notify, "default", "Default", notifyActionCallback, NULL, NULL);
- g_timeout_add (500, notification_callback, notify);
- }
- }
-@@ -835,7 +855,6 @@ void org_gnome_mail_read_notify (EPlugin *ep, EMEventTargetMessage *t);
- int e_plugin_lib_enable (EPluginLib *ep, int enable);
- GtkWidget *e_plugin_lib_get_configure_widget (EPlugin *epl);
-
--static GStaticMutex mlock = G_STATIC_MUTEX_INIT;
-
- void
- org_gnome_mail_new_notify (EPlugin *ep, EMEventTargetFolder *t)
diff --git a/bnc-435452-lose-attendees-busy-search.patch b/bnc-435452-lose-attendees-busy-search.patch
deleted file mode 100644
index 9e8dd27..0000000
--- a/bnc-435452-lose-attendees-busy-search.patch
+++ /dev/null
@@ -1,33 +0,0 @@
---- calendar/gui/e-meeting-list-view.c
-+++ calendar/gui/e-meeting-list-view.c
-@@ -471,6 +471,21 @@ status_edited_cb (GtkCellRenderer *renderer, const gchar *path, const gchar *tex
- }
-
- static void
-+ense_update (GtkWidget *w, gpointer data1, gpointer user_data)
-+{
-+ gtk_cell_editable_editing_done ((GtkCellEditable *)w);
-+}
-+
-+static void
-+editing_started_cb (GtkCellRenderer *renderer,
-+ GtkCellEditable *editable,
-+ gchar *path,
-+ gpointer user_data)
-+{
-+ g_signal_connect (editable, "updated", G_CALLBACK(ense_update), NULL);
-+}
-+
-+static void
- build_table (EMeetingListView *lview)
- {
- GtkCellRenderer *renderer;
-@@ -501,6 +516,8 @@ build_table (EMeetingListView *lview)
- g_object_set_data (G_OBJECT (col), "mtg-store-col", GINT_TO_POINTER (E_MEETING_STORE_ATTENDEE_COL));
- g_signal_connect (renderer, "cell_edited", G_CALLBACK (attendee_edited_cb), view);
- g_signal_connect (renderer, "editing-canceled", G_CALLBACK (attendee_editing_canceled_cb), view);
-+ g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), view);
-+
- g_hash_table_insert (edit_table, GINT_TO_POINTER (E_MEETING_STORE_ATTENDEE_COL), renderer);
-
- renderer = e_cell_renderer_combo_new ();
diff --git a/bnc-435455-attendees-meeting-resize.patch b/bnc-435455-attendees-meeting-resize.patch
deleted file mode 100644
index c098361..0000000
--- a/bnc-435455-attendees-meeting-resize.patch
+++ /dev/null
@@ -1,496 +0,0 @@
-Index: calendar/gui/e-day-view-main-item.c
-===================================================================
---- calendar/gui/e-day-view-main-item.c (revision 36947)
-+++ calendar/gui/e-day-view-main-item.c (working copy)
-@@ -940,146 +940,18 @@
- if (day_view->resize_drag_pos != E_CALENDAR_VIEW_POS_NONE
- && day_view->resize_event_day == day
- && day_view->resize_event_num == event_num) {
-- resize_flag = TRUE;
-
-+ /* If the item is being resized, don't resized it.
-+ I have removed code which are resized the meeting.
-+ It will block the resize or move the meeting in
-+ calendar UI from attendee side.*/
- if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_TOP_EDGE)
- bar_y1 = item_y + 1;
-
-- else if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE) {
-+ else if (day_view->resize_drag_pos == E_CALENDAR_VIEW_POS_BOTTOM_EDGE)
- bar_y2 = item_y + item_h - 1;
--
-- end_minute = event->end_minute;
--
-- end_hour = end_minute / 60;
-- end_minute = end_minute % 60;
--
-- e_day_view_convert_time_to_display (day_view, end_hour,
-- &end_display_hour,
-- &end_resize_suffix,
-- &end_suffix_width);
--
-- cairo_save (cr);
-- cairo_rectangle (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + 2.75,
-- item_w - E_DAY_VIEW_BAR_WIDTH - 4.5,
-- item_h - 5.5);
-- cairo_clip (cr);
-- cairo_new_path (cr);
--
-- if (e_calendar_view_get_use_24_hour_format (E_CALENDAR_VIEW (day_view))) {
-- cairo_translate (cr, item_x + item_w - E_DAY_VIEW_BAR_WIDTH - 32, item_y + item_h - 8);
-- end_resize_time = g_strdup_printf ("%2i:%02i",
-- end_display_hour, end_minute);
--
-- } else {
-- cairo_translate (cr, item_x + item_w - E_DAY_VIEW_BAR_WIDTH - 48, item_y + item_h - 8);
-- end_resize_time = g_strdup_printf ("%2i:%02i%s",
-- end_display_hour, end_minute,
-- end_resize_suffix);
-- }
-- cairo_set_font_size (cr, 14);
-- if ((red/cc > 0.7) || (green/cc > 0.7) || (blue/cc > 0.7 ))
-- cairo_set_source_rgb (cr, 0, 0, 0);
-- else
-- cairo_set_source_rgb (cr, 1, 1, 1);
-- cairo_set_font_options (cr, font_options);
-- cairo_show_text (cr, end_resize_time);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-- }
- }
-
-- if (bar_y2 > scroll_flag)
-- event->end_minute += day_view->mins_per_row;
-- else if (bar_y2 < scroll_flag)
-- event->end_minute -= day_view->mins_per_row;
--
-- if (!short_event)
-- {
-- if (event->start_minute % day_view->mins_per_row != 0
-- || (day_view->show_event_end_times
-- && event->end_minute % day_view->mins_per_row != 0)) {
-- offset = day_view->first_hour_shown * 60
-- + day_view->first_minute_shown;
-- show_span = TRUE;
-- } else {
-- offset = 0;
-- }
-- start_minute = offset + event->start_minute;
-- end_minute = offset + event->end_minute;
--
-- format_time = (((end_minute - start_minute)/day_view->mins_per_row) >= 2) ? TRUE : FALSE;
--
-- start_hour = start_minute / 60;
-- start_minute = start_minute % 60;
--
-- end_hour = end_minute / 60;
-- end_minute = end_minute % 60;
--
-- e_day_view_convert_time_to_display (day_view, start_hour,
-- &start_display_hour,
-- &start_suffix,
-- &start_suffix_width);
-- e_day_view_convert_time_to_display (day_view, end_hour,
-- &end_display_hour,
-- &end_suffix,
-- &end_suffix_width);
--
-- if (e_calendar_view_get_use_24_hour_format (E_CALENDAR_VIEW (day_view))) {
-- if (day_view->show_event_end_times && show_span) {
-- /* 24 hour format with end time. */
-- text = g_strdup_printf
-- ("%2i:%02i-%2i:%02i",
-- start_display_hour, start_minute,
-- end_display_hour, end_minute);
-- } else {
-- if (format_time) {
-- /* 24 hour format without end time. */
-- text = g_strdup_printf
-- ("%2i:%02i",
-- start_display_hour, start_minute);
-- }
-- }
-- } else {
-- if (day_view->show_event_end_times && show_span) {
-- /* 12 hour format with end time. */
-- text = g_strdup_printf
-- ("%2i:%02i%s-%2i:%02i%s",
-- start_display_hour, start_minute,
-- start_suffix,
-- end_display_hour, end_minute, end_suffix);
-- } else {
-- /* 12 hour format without end time. */
-- text = g_strdup_printf
-- ("%2i:%02i%s",
-- start_display_hour, start_minute,
-- start_suffix);
-- }
-- }
--
-- cairo_save (cr);
-- cairo_rectangle (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + 2.75,
-- item_w - E_DAY_VIEW_BAR_WIDTH - 4.5,
-- 14);
-- cairo_clip (cr);
-- cairo_new_path (cr);
-- if (resize_flag)
-- cairo_move_to (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 10, item_y + 13);
-- else
-- cairo_move_to (cr, item_x + E_DAY_VIEW_BAR_WIDTH + 14, item_y + 13);
-- if ((red/cc > 0.7) || (green/cc > 0.7) || (blue/cc > 0.7 ))
-- cairo_set_source_rgb (cr, 0, 0, 0);
-- else
-- cairo_set_source_rgb (cr, 1, 1, 1);
-- cairo_set_font_size (cr, 14.0);
-- cairo_set_font_options (cr, font_options);
-- cairo_show_text (cr, text);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-- }
--
-- if (font_options)
-- cairo_font_options_destroy (font_options);
--
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
-
-@@ -1115,188 +987,181 @@
- &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]);
-
- /* Draw the reminder & recurrence icons, if needed. */
-- if (!resize_flag) {
-- num_icons = 0;
-- draw_reminder_icon = FALSE;
-- draw_recurrence_icon = FALSE;
-- draw_timezone_icon = FALSE;
-- draw_meeting_icon = FALSE;
-- draw_attach_icon = FALSE;
-- icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD;
-- icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT
-- + E_DAY_VIEW_ICON_Y_PAD;
-+ num_icons = 0;
-+ draw_reminder_icon = FALSE;
-+ draw_recurrence_icon = FALSE;
-+ draw_timezone_icon = FALSE;
-+ draw_meeting_icon = FALSE;
-+ draw_attach_icon = FALSE;
-+ icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD;
-+ icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT
-+ + E_DAY_VIEW_ICON_Y_PAD;
-
-- if (e_cal_component_has_alarms (comp)) {
-- draw_reminder_icon = TRUE;
-- num_icons++;
-- }
-+ if (e_cal_component_has_alarms (comp)) {
-+ draw_reminder_icon = TRUE;
-+ num_icons++;
-+ }
-
-- if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) {
-- draw_recurrence_icon = TRUE;
-- num_icons++;
-- }
-- if (e_cal_component_has_attachments (comp)) {
-- draw_attach_icon = TRUE;
-- num_icons++;
-- }
-- /* If the DTSTART or DTEND are in a different timezone to our current
-- timezone, we display the timezone icon. */
-- if (event->different_timezone) {
-- draw_timezone_icon = TRUE;
-- num_icons++;
-- }
-+ if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) {
-+ draw_recurrence_icon = TRUE;
-+ num_icons++;
-+ }
-+ if (e_cal_component_has_attachments (comp)) {
-+ draw_attach_icon = TRUE;
-+ num_icons++;
-+ }
-+ /* If the DTSTART or DTEND are in a different timezone to our current
-+ timezone, we display the timezone icon. */
-+ if (event->different_timezone) {
-+ draw_timezone_icon = TRUE;
-+ num_icons++;
-+ }
-
-- if (e_cal_component_has_organizer (comp)) {
-- draw_meeting_icon = TRUE;
-- num_icons++;
-- }
-+ if (e_cal_component_has_organizer (comp)) {
-+ draw_meeting_icon = TRUE;
-+ num_icons++;
-+ }
-
-- num_icons += cal_comp_util_get_n_icons (comp);
-- e_cal_component_get_categories_list (comp, &categories_list);
-+ num_icons += cal_comp_util_get_n_icons (comp);
-+ e_cal_component_get_categories_list (comp, &categories_list);
-
-- if (num_icons != 0) {
-- if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD)
-- * num_icons) {
-- icon_x_inc = 0;
-- icon_y_inc = E_DAY_VIEW_ICON_HEIGHT
-- + E_DAY_VIEW_ICON_Y_PAD;
-- } else {
-- icon_x_inc = E_DAY_VIEW_ICON_WIDTH
-- + E_DAY_VIEW_ICON_X_PAD;
-- icon_y_inc = 0;
-- }
-+ if (num_icons != 0) {
-+ if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD)
-+ * num_icons) {
-+ icon_x_inc = 0;
-+ icon_y_inc = E_DAY_VIEW_ICON_HEIGHT
-+ + E_DAY_VIEW_ICON_Y_PAD;
-+ } else {
-+ icon_x_inc = E_DAY_VIEW_ICON_WIDTH
-+ + E_DAY_VIEW_ICON_X_PAD;
-+ icon_y_inc = 0;
-+ }
-
-- if (draw_reminder_icon) {
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-+ if (draw_reminder_icon) {
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- cairo_save (cr);
-- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-- cairo_clip (cr);
-- cairo_new_path (cr);
-- gdk_cairo_set_source_pixbuf (cr, day_view->reminder_icon, icon_x, icon_y);
-- cairo_paint (cr);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-+ cairo_save (cr);
-+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-+ cairo_clip (cr);
-+ cairo_new_path (cr);
-+ gdk_cairo_set_source_pixbuf (cr, day_view->reminder_icon, icon_x, icon_y);
-+ cairo_paint (cr);
-+ cairo_close_path (cr);
-+ cairo_restore (cr);
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
-+ }
-
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
-+ if (draw_recurrence_icon) {
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- if (draw_recurrence_icon) {
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-+ cairo_save (cr);
-+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-+ cairo_clip (cr);
-+ cairo_new_path (cr);
-+ gdk_cairo_set_source_pixbuf (cr, day_view->recurrence_icon, icon_x, icon_y);
-+ cairo_paint (cr);
-+ cairo_close_path (cr);
-+ cairo_restore (cr);
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
-+ }
-+ if (draw_attach_icon) {
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- cairo_save (cr);
-- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-- cairo_clip (cr);
-- cairo_new_path (cr);
-- gdk_cairo_set_source_pixbuf (cr, day_view->recurrence_icon, icon_x, icon_y);
-- cairo_paint (cr);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-+ cairo_save (cr);
-+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-+ cairo_clip (cr);
-+ cairo_new_path (cr);
-+ gdk_cairo_set_source_pixbuf (cr, day_view->attach_icon, icon_x, icon_y);
-+ cairo_paint (cr);
-+ cairo_close_path (cr);
-+ cairo_restore (cr);
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
-+ }
-+ if (draw_timezone_icon) {
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
-- if (draw_attach_icon) {
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-+ cairo_save (cr);
-+ cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-+ cairo_clip (cr);
-+ cairo_new_path (cr);
-+ gdk_cairo_set_source_pixbuf (cr, day_view->timezone_icon, icon_x, icon_y);
-+ cairo_paint (cr);
-+ cairo_close_path (cr);
-+ cairo_restore (cr);
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
-+ }
-
-- cairo_save (cr);
-- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-- cairo_clip (cr);
-- cairo_new_path (cr);
-- gdk_cairo_set_source_pixbuf (cr, day_view->attach_icon, icon_x, icon_y);
-- cairo_paint (cr);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
-- if (draw_timezone_icon) {
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-+ if (draw_meeting_icon) {
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- cairo_save (cr);
-- cairo_rectangle (cr, icon_x, icon_y, max_icon_w, max_icon_h);
-- cairo_clip (cr);
-- cairo_new_path (cr);
-- gdk_cairo_set_source_pixbuf (cr, day_view->timezone_icon, icon_x, icon_y);
-- cairo_paint (cr);
-- cairo_close_path (cr);
-- cairo_restore (cr);
-+ cairo_save (cr);
-+ gdk_cairo_set_source_pixbuf (cr, day_view->meeting_icon, icon_x, icon_y);
-+ cairo_paint (cr);
-+ cairo_restore (cr);
-
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
-+ }
-
-+ /* draw categories icons */
-+ for (elem = categories_list; elem; elem = elem->next) {
-+ char *category;
-+ GdkPixmap *pixmap = NULL;
-+ GdkBitmap *mask = NULL;
-
-- if (draw_meeting_icon) {
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-+ category = (char *) elem->data;
-+ if (!e_categories_config_get_icon_for (category, &pixmap, &mask))
-+ continue;
-
-- cairo_save (cr);
-- gdk_cairo_set_source_pixbuf (cr, day_view->meeting_icon, icon_x, icon_y);
-- cairo_paint (cr);
-- cairo_restore (cr);
-+ max_icon_w = item_x + item_w - icon_x
-+ - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-+ max_icon_h = item_y + item_h - icon_y
-+ - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
-
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
-+ gdk_gc_set_clip_origin (gc, icon_x, icon_y);
-+ if (mask != NULL)
-+ gdk_gc_set_clip_mask (gc, mask);
-+ gdk_draw_drawable (drawable, gc,
-+ pixmap,
-+ 0, 0, icon_x, icon_y,
-+ MIN (E_DAY_VIEW_ICON_WIDTH,
-+ max_icon_w),
-+ MIN (E_DAY_VIEW_ICON_HEIGHT,
-+ max_icon_h));
-
-- /* draw categories icons */
-- for (elem = categories_list; elem; elem = elem->next) {
-- char *category;
-- GdkPixmap *pixmap = NULL;
-- GdkBitmap *mask = NULL;
-+ g_object_unref (pixmap);
-+ if (mask != NULL)
-+ g_object_unref (mask);
-
-- category = (char *) elem->data;
-- if (!e_categories_config_get_icon_for (category, &pixmap, &mask))
-- continue;
--
-- max_icon_w = item_x + item_w - icon_x
-- - E_DAY_VIEW_EVENT_BORDER_WIDTH;
-- max_icon_h = item_y + item_h - icon_y
-- - E_DAY_VIEW_EVENT_BORDER_HEIGHT;
--
-- gdk_gc_set_clip_origin (gc, icon_x, icon_y);
-- if (mask != NULL)
-- gdk_gc_set_clip_mask (gc, mask);
-- gdk_draw_drawable (drawable, gc,
-- pixmap,
-- 0, 0, icon_x, icon_y,
-- MIN (E_DAY_VIEW_ICON_WIDTH,
-- max_icon_w),
-- MIN (E_DAY_VIEW_ICON_HEIGHT,
-- max_icon_h));
--
-- g_object_unref (pixmap);
-- if (mask != NULL)
-- g_object_unref (mask);
--
-- icon_x += icon_x_inc;
-- icon_y += icon_y_inc;
-- }
--
-- gdk_gc_set_clip_mask (gc, NULL);
-+ icon_x += icon_x_inc;
-+ icon_y += icon_y_inc;
- }
-
-- /* free memory */
-- e_cal_component_free_categories_list (categories_list);
-+ gdk_gc_set_clip_mask (gc, NULL);
- }
-
-- g_free (text);
-+ /* free memory */
-+ e_cal_component_free_categories_list (categories_list);
-+
- g_object_unref (comp);
- cairo_destroy (cr);
- }
diff --git a/bnc-435694-retract-feature-broken.patch b/bnc-435694-retract-feature-broken.patch
deleted file mode 100644
index 5cd472c..0000000
--- a/bnc-435694-retract-feature-broken.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: plugins/groupwise-features/mail-retract.c
-===================================================================
---- plugins/groupwise-features/mail-retract.c (revision 36818)
-+++ plugins/groupwise-features/mail-retract.c (working copy)
-@@ -104,8 +104,8 @@
-
- /* for translation*/
- if (!first) {
-- popup_items[0].label = _(popup_items[0].label);
-- popup_items[0].user_data = g_strdup((char *) g_ptr_array_index(uids, 0));
-+ popup_items[1].label = _(popup_items[1].label);
-+ popup_items[1].user_data = g_strdup((char *) g_ptr_array_index(uids, 0));
- }
-
- first++;
diff --git a/bnc-439733-bogofilter-junk-training.patch b/bnc-439733-bogofilter-junk-training.patch
deleted file mode 100644
index 99fc555..0000000
--- a/bnc-439733-bogofilter-junk-training.patch
+++ /dev/null
@@ -1,96 +0,0 @@
---- plugins/bogo-junk-plugin/Makefile.am
-+++ plugins/bogo-junk-plugin/Makefile.am
-@@ -1,5 +1,6 @@
- INCLUDES = \
- -I$(top_srcdir) \
-+ -DWELCOME_MESSAGE=\""$(privdatadir)/default/C/mail/local/Inbox"\" \
- $(EVOLUTION_MAIL_CFLAGS)
-
- @EVO_PLUGIN_RULE@
---- plugins/bogo-junk-plugin/bf-junk-filter.c
-+++ plugins/bogo-junk-plugin/bf-junk-filter.c
-@@ -40,6 +40,8 @@
- #include "mail/em-config.h"
- #include
- #include
-+#include
-+#include
- #include
- #include
- #include
-@@ -69,6 +71,7 @@ void *em_junk_bf_validate_binary (EPlugin *ep, EMJunkHookTarget *target);
- void em_junk_bf_report_junk (EPlugin *ep, EMJunkHookTarget *target);
- void em_junk_bf_report_non_junk (EPlugin *ep, EMJunkHookTarget *target);
- void em_junk_bf_commit_reports (EPlugin *ep, EMJunkHookTarget *target);
-+static gint pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error);
-
- /* eplugin stuff */
- int e_plugin_lib_enable (EPluginLib *ep, int enable);
-@@ -78,6 +81,37 @@ int e_plugin_lib_enable (EPluginLib *ep, int enable);
-
- static gboolean em_junk_bf_unicode = TRUE;
-
-+static void
-+init_db ()
-+{
-+ CamelStream *stream = camel_stream_fs_new_with_name (WELCOME_MESSAGE, O_RDONLY, 0);
-+ CamelMimeParser *parser = camel_mime_parser_new ();
-+ CamelMimeMessage *msg = camel_mime_message_new ();
-+ gchar *argv[] = {
-+ em_junk_bf_binary,
-+ "-n",
-+ NULL,
-+ NULL
-+ };
-+
-+ camel_mime_parser_init_with_stream (parser, stream);
-+ camel_mime_parser_scan_from (parser, FALSE);
-+ camel_object_unref (stream);
-+
-+ camel_mime_part_construct_from_parser ((CamelMimePart *) msg, parser);
-+ camel_object_unref (parser);
-+
-+ d(fprintf (stderr, "Initing the bogofilter DB with Welcome message\n"));
-+
-+ if (em_junk_bf_unicode) {
-+ argv[2] = "--unicode=yes";
-+ }
-+
-+ pipe_to_bogofilter (msg, argv, NULL);
-+ camel_object_unref (msg);
-+
-+}
-+
- static gint
- pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
- {
-@@ -88,7 +122,9 @@ pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
- gint status;
- gint waitres;
- gint res;
-+ static gboolean only_once = FALSE;
-
-+retry:
- if (camel_debug_start ("junk")) {
- int i;
-
-@@ -153,8 +189,17 @@ pipe_to_bogofilter (CamelMimeMessage *msg, gchar **argv, GError **error)
- res = BOGOFILTER_ERROR;
- }
-
-- if (res < 0 || res > 2)
-+ if (res < 0 || res > 2) {
-+ if (!only_once) {
-+ /* Create wordlist.db */
-+ only_once = TRUE;
-+ init_db();
-+
-+ goto retry;
-+ }
- g_set_error (error, EM_JUNK_ERROR, res, _("Pipe to Bogofilter failed, error code: %d."), res);
-+
-+ }
-
- return res;
- }
-
diff --git a/bnc-439987-classify-sensitivity.patch b/bnc-439987-classify-sensitivity.patch
deleted file mode 100644
index 0f4082a..0000000
--- a/bnc-439987-classify-sensitivity.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- calendar/gui/dialogs/comp-editor.c
-+++ calendar/gui/dialogs/comp-editor.c
-@@ -1771,6 +1771,14 @@ comp_editor_class_init (CompEditorClass *class)
- G_TYPE_NONE, 0);
- }
-
-+static void
-+on_classification_changed (GtkRadioAction *action, GtkRadioAction *current, gpointer *data)
-+{
-+ CompEditor *editor = COMP_EDITOR (data);
-+
-+ comp_editor_set_changed (editor, TRUE);
-+}
-+
- static void
- comp_editor_init (CompEditor *editor)
- {
-@@ -1820,7 +1828,7 @@ comp_editor_init (CompEditor *editor)
- action_group, classification_radio_entries,
- G_N_ELEMENTS (classification_radio_entries),
- E_CAL_COMPONENT_CLASS_PUBLIC,
-- NULL, NULL); /* no callback */
-+ G_CALLBACK (on_classification_changed), editor); /* no callback */
- action = e_attachment_bar_recent_action_new (
- E_ATTACHMENT_BAR (priv->attachment_bar),
- "attach-recent", _("Recent _Documents"));
diff --git a/bnc-439998-delete-delegated-events.patch b/bnc-439998-delete-delegated-events.patch
deleted file mode 100644
index a652692..0000000
--- a/bnc-439998-delete-delegated-events.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-Index: calendar/gui/dialogs/comp-editor.c
-===================================================================
---- calendar/gui/dialogs/comp-editor.c (revision 36884)
-+++ calendar/gui/dialogs/comp-editor.c (working copy)
-@@ -1102,6 +1102,24 @@
- g_object_unref (comp);
- }
-
-+static gboolean
-+remove_event_dialog (ECal *client,
-+ ECalComponent *comp,
-+ GtkWindow *parent)
-+{
-+ GtkWidget *dialog;
-+ gboolean ret;
-+
-+ g_return_val_if_fail (E_IS_CAL_COMPONENT (comp), TRUE);
-+
-+ dialog = gtk_message_dialog_new (parent, 0, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", _("Keep original item?"));
-+ gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
-+ ret = gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES;
-+ gtk_widget_destroy (dialog);
-+
-+ return ret;
-+}
-+
- static void
- action_save_cb (GtkAction *action,
- CompEditor *editor)
-@@ -1153,9 +1171,33 @@
- if (!text.value)
- if (!send_component_prompt_subject ((GtkWindow *) editor, priv->client, priv->comp))
- return;
-- if (save_comp_with_send (editor))
-- close_dialog (editor);
-
-+ if (save_comp_with_send (editor)) {
-+ CompEditorFlags flags;
-+ gboolean delegate;
-+
-+ flags = comp_editor_get_flags (editor);
-+ delegate = flags & COMP_EDITOR_DELEGATE;
-+
-+ if (delegate && !remove_event_dialog (priv->client, priv->comp, GTK_WINDOW (editor))) {
-+ const char *uid = NULL;
-+ GError *error = NULL;
-+
-+ e_cal_component_get_uid (priv->comp, &uid);
-+
-+ if (e_cal_component_is_instance (priv->comp) || e_cal_component_has_recurrences (priv->comp)) {
-+ gchar *rid;
-+ rid = e_cal_component_get_recurid_as_string (priv->comp);
-+ e_cal_remove_object_with_mod (priv->client, uid, rid, priv->mod, &error);
-+ g_free (rid);
-+ } else
-+ e_cal_remove_object (priv->client, uid, &error);
-+
-+ g_clear_error (&error);
-+ }
-+ }
-+
-+ close_dialog (editor);
- }
-
- static void
diff --git a/bnc-440624-six-appts-timeslot.patch b/bnc-440624-six-appts-timeslot.patch
deleted file mode 100644
index 98a4a4c..0000000
--- a/bnc-440624-six-appts-timeslot.patch
+++ /dev/null
@@ -1,441 +0,0 @@
-Index: calendar/gui/e-day-view.c
-===================================================================
---- calendar/gui/e-day-view.c (revision 35721)
-+++ calendar/gui/e-day-view.c (working copy)
-@@ -186,8 +186,6 @@ static void e_day_view_top_scroll (EDayV
-
- static void e_day_view_update_top_scroll (EDayView *day_view, gboolean scroll_to_top);
-
--static gboolean e_day_view_check_if_new_event_fits (EDayView *day_view);
--
- static void e_day_view_on_canvas_realized (GtkWidget *widget,
- EDayView *day_view);
-
-@@ -953,6 +951,10 @@ e_day_view_init (EDayView *day_view)
- /*
- * Scrollbar.
- */
-+ day_view->mc_hscrollbar = gtk_hscrollbar_new (GTK_LAYOUT (day_view->main_canvas)->hadjustment);
-+ gtk_table_attach (GTK_TABLE (day_view), day_view->mc_hscrollbar, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
-+ gtk_widget_show (day_view->mc_hscrollbar);
-+
- day_view->tc_vscrollbar = gtk_vscrollbar_new (GTK_LAYOUT (day_view->top_canvas)->vadjustment);
- gtk_table_attach (GTK_TABLE (day_view), day_view->tc_vscrollbar,
- 2, 3, 0, 1, 0, GTK_FILL, 0, 0);
-@@ -1423,28 +1425,19 @@ e_day_view_style_set (GtkWidget *widget,
- pango_font_metrics_unref (font_metrics);
- }
-
--/* This recalculates the sizes of each column. */
- static void
--e_day_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-+e_day_view_recalc_main_canvas_size (EDayView *day_view)
- {
-- EDayView *day_view;
- gint day, scroll_y;
- gboolean need_reshape;
-
--#if 0
-- g_print ("In e_day_view_size_allocate\n");
--#endif
-- day_view = E_DAY_VIEW (widget);
--
-- (*GTK_WIDGET_CLASS (e_day_view_parent_class)->size_allocate) (widget, allocation);
--
-- e_day_view_recalc_cell_sizes (day_view);
--
- /* Set the scroll region of the top canvas */
- e_day_view_update_top_scroll (day_view, TRUE);
-
- need_reshape = e_day_view_update_scroll_regions (day_view);
-
-+ e_day_view_recalc_cell_sizes (day_view);
-+
- /* Scroll to the start of the working day, if this is the initial
- allocation. */
- if (day_view->scroll_to_work_day) {
-@@ -1465,6 +1458,17 @@ e_day_view_size_allocate (GtkWidget *wid
- }
- }
-
-+/* This recalculates the sizes of each column. */
-+static void
-+e_day_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-+{
-+#if 0
-+ g_print ("In e_day_view_size_allocate\n");
-+#endif
-+ (*GTK_WIDGET_CLASS (e_day_view_parent_class)->size_allocate) (widget, allocation);
-+
-+ e_day_view_recalc_main_canvas_size (E_DAY_VIEW (widget));
-+}
-
- static void
- e_day_view_recalc_cell_sizes (EDayView *day_view)
-@@ -1491,6 +1495,8 @@ e_day_view_recalc_cell_sizes (EDayView *
- get divided evenly. Note that we use one more element than the
- number of columns, to make it easy to get the column widths. */
- width = day_view->main_canvas->allocation.width;
-+ if (day_view->days_shown == 1)
-+ width = MAX (width, day_view->max_cols * (E_DAY_VIEW_MIN_DAY_COL_WIDTH + E_DAY_VIEW_GAP_WIDTH) - E_DAY_VIEW_MIN_DAY_COL_WIDTH - 1);
- width /= day_view->days_shown;
- offset = 0;
- for (day = 0; day <= day_view->days_shown; day++) {
-@@ -2638,12 +2644,21 @@ e_day_view_update_scroll_regions (EDayVi
- gnome_canvas_get_scroll_region (GNOME_CANVAS (day_view->main_canvas),
- NULL, NULL, &old_x2, &old_y2);
- new_x2 = day_view->main_canvas->allocation.width - 1;
-+
-+ if (day_view->days_shown == 1)
-+ new_x2 = MAX (new_x2, day_view->max_cols * (E_DAY_VIEW_MIN_DAY_COL_WIDTH + E_DAY_VIEW_GAP_WIDTH) - E_DAY_VIEW_MIN_DAY_COL_WIDTH - 1);
-+
- if (old_x2 != new_x2 || old_y2 != new_y2) {
- need_reshape = TRUE;
- gnome_canvas_set_scroll_region (GNOME_CANVAS (day_view->main_canvas),
- 0, 0, new_x2, new_y2);
- }
-
-+ if (new_x2 <= day_view->main_canvas->allocation.width - 1)
-+ gtk_widget_hide (day_view->mc_hscrollbar);
-+ else
-+ gtk_widget_show (day_view->mc_hscrollbar);
-+
- return need_reshape;
- }
-
-@@ -4232,13 +4247,13 @@ e_day_view_add_event (ECalComponent *com
- return TRUE;
- }
-
--
- /* This lays out the short (less than 1 day) events in the columns.
- Any long events are simply skipped. */
- void
- e_day_view_check_layout (EDayView *day_view)
- {
- gint day, rows_in_top_display;
-+ gint max_cols = -1;
-
- /* Don't bother if we aren't visible. */
- if (!GTK_WIDGET_VISIBLE (day_view))
-@@ -4248,11 +4263,17 @@ e_day_view_check_layout (EDayView *day_v
- e_day_view_ensure_events_sorted (day_view);
-
- for (day = 0; day < day_view->days_shown; day++) {
-- if (day_view->need_layout[day])
-- e_day_view_layout_day_events (day_view->events[day],
-+ if (day_view->need_layout[day]) {
-+ gint cols;
-+
-+ cols = e_day_view_layout_day_events (day_view->events[day],
- day_view->rows,
- day_view->mins_per_row,
-- day_view->cols_per_row[day]);
-+ day_view->cols_per_row[day],
-+ day_view->days_shown == 1 ? -1 : E_DAY_VIEW_MULTI_DAY_MAX_COLUMNS);
-+
-+ max_cols = MAX (cols, max_cols);
-+ }
-
- if (day_view->need_layout[day]
- || day_view->need_reshape[day]) {
-@@ -4278,13 +4299,17 @@ e_day_view_check_layout (EDayView *day_v
- }
- }
-
--
- if (day_view->long_events_need_layout
- || day_view->long_events_need_reshape)
- e_day_view_reshape_long_events (day_view);
-
- day_view->long_events_need_layout = FALSE;
- day_view->long_events_need_reshape = FALSE;
-+
-+ if (max_cols != -1 && max_cols != day_view->max_cols) {
-+ day_view->max_cols = max_cols;
-+ e_day_view_recalc_main_canvas_size (day_view);
-+ }
- }
-
-
-@@ -4826,13 +4851,6 @@ e_day_view_do_key_press (GtkWidget *widg
- if (day_view->selection_start_day == -1)
- return FALSE;
-
-- /* Check if there is room for a new event to be typed in. If there
-- isn't we don't want to add an event as we will then add a new
-- event for every key press. */
-- if (!e_day_view_check_if_new_event_fits (day_view)) {
-- return FALSE;
-- }
--
- /* Check if the client is read only */
- model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
- ecal = e_cal_model_get_default_client (model);
-@@ -5543,33 +5561,6 @@ e_day_view_top_scroll (EDayView *day_vie
- gtk_adjustment_set_value (adj, new_value);
- }
-
--static gboolean
--e_day_view_check_if_new_event_fits (EDayView *day_view)
--{
-- gint day, start_row, end_row, row;
--
-- day = day_view->selection_start_day;
-- start_row = day_view->selection_start_row;
-- end_row = day_view->selection_end_row;
--
-- /* Long events always fit, since we keep adding rows to the top
-- canvas. */
-- if (day != day_view->selection_end_day)
-- return TRUE;
-- if (start_row == 0 && end_row == day_view->rows)
-- return TRUE;
--
-- /* If any of the rows already have E_DAY_VIEW_MAX_COLUMNS columns,
-- return FALSE. */
-- for (row = start_row; row <= end_row; row++) {
-- if (day_view->cols_per_row[day][row] >= E_DAY_VIEW_MAX_COLUMNS)
-- return FALSE;
-- }
--
-- return TRUE;
--}
--
--
- void
- e_day_view_ensure_rows_visible (EDayView *day_view,
- gint start_row,
-Index: calendar/gui/e-day-view.h
-===================================================================
---- calendar/gui/e-day-view.h (revision 35721)
-+++ calendar/gui/e-day-view.h (working copy)
-@@ -45,8 +45,11 @@ G_BEGIN_DECLS
- of a normal event. */
- #define E_DAY_VIEW_LONG_EVENT E_DAY_VIEW_MAX_DAYS
-
--/* The maximum number of columns of appointments within a day. */
--#define E_DAY_VIEW_MAX_COLUMNS 6
-+/* The maximum number of columns of appointments within a day in multi-day view. */
-+#define E_DAY_VIEW_MULTI_DAY_MAX_COLUMNS 6
-+
-+/* minimum width of the event in one-day view in pixels */
-+#define E_DAY_VIEW_MIN_DAY_COL_WIDTH 60
-
- /* The width of the gap between appointments. This should be at least
- E_DAY_VIEW_BAR_WIDTH, since in the top canvas we use this space to draw
-@@ -204,6 +207,9 @@ struct _EDayView
- /* scrollbar for top_canvas */
- GtkWidget *tc_vscrollbar;
-
-+ /* horizontal scrollbar for main_canvas */
-+ GtkWidget *mc_hscrollbar;
-+
- /* The main canvas where the rest of the appointments are shown. */
- GtkWidget *main_canvas;
- GnomeCanvasItem *main_canvas_item;
-@@ -310,6 +316,8 @@ struct _EDayView
- Note that there are a maximum of 12 * 24 rows (when a row is 5 mins)
- but we don't always have that many rows. */
- guint8 cols_per_row[E_DAY_VIEW_MAX_DAYS][12 * 24];
-+ /* The maximum number of columns from all rows in cols_per_row */
-+ gint max_cols;
-
- /* Sizes of the various time strings. */
- gint small_hour_widths[24];
-Index: calendar/gui/e-day-view-layout.c
-===================================================================
---- calendar/gui/e-day-view-layout.c (revision 35721)
-+++ calendar/gui/e-day-view-layout.c (working copy)
-@@ -29,6 +29,7 @@
- #include
-
- #include "e-day-view-layout.h"
-+#include "e-util/e-bit-array.h"
-
- static void e_day_view_layout_long_event (EDayViewEvent *event,
- guint8 *grid,
-@@ -37,13 +38,14 @@ static void e_day_view_layout_long_event
- gint *rows_in_top_display);
-
- static void e_day_view_layout_day_event (EDayViewEvent *event,
-- guint8 *grid,
-+ EBitArray **grid,
- guint16 *group_starts,
- guint8 *cols_per_row,
- gint rows,
-- gint mins_per_row);
-+ gint mins_per_row,
-+ gint max_cols);
- static void e_day_view_expand_day_event (EDayViewEvent *event,
-- guint8 *grid,
-+ EBitArray **grid,
- guint8 *cols_per_row,
- gint mins_per_row);
- static void e_day_view_recalc_cols_per_row (gint rows,
-@@ -127,15 +129,17 @@ e_day_view_layout_long_event (EDayViewEv
- }
-
-
--void
-+/* returns maximum number of columns among all rows */
-+gint
- e_day_view_layout_day_events (GArray *events,
- gint rows,
- gint mins_per_row,
-- guint8 *cols_per_row)
-+ guint8 *cols_per_row,
-+ gint max_cols)
- {
- EDayViewEvent *event;
-- gint row, event_num;
-- guint8 *grid;
-+ gint row, event_num, res;
-+ EBitArray **grid;
-
- /* This is a temporary array which keeps track of rows which are
- connected. When an appointment spans multiple rows then the number
-@@ -145,18 +149,20 @@ e_day_view_layout_day_events (GArray
- rows. */
- guint16 group_starts[12 * 24];
-
-+ /* This is a temporary 2-d grid which is used to place events.
-+ Each element is 0 if the position is empty, or 1 if occupied. */
-+ grid = g_new0 (EBitArray *, rows);
-+
- /* Reset the cols_per_row array, and initialize the connected rows so
- that all rows are not connected - each row is the start of a new
- group. */
- for (row = 0; row < rows; row++) {
- cols_per_row[row] = 0;
- group_starts[row] = row;
-- }
--
-- /* This is a temporary 2-d grid which is used to place events.
-- Each element is 0 if the position is empty, or 1 if occupied. */
-- grid = g_new0 (guint8, rows * E_DAY_VIEW_MAX_COLUMNS);
-
-+ /* row doesn't contain any event at the moment */
-+ grid [row] = e_bit_array_new (0);
-+ }
-
- /* Iterate over the events, finding which rows they cover, and putting
- them in the first free column available. Increment the number of
-@@ -166,7 +172,7 @@ e_day_view_layout_day_events (GArray
- event = &g_array_index (events, EDayViewEvent, event_num);
-
- e_day_view_layout_day_event (event, grid, group_starts,
-- cols_per_row, rows, mins_per_row);
-+ cols_per_row, rows, mins_per_row, max_cols);
- }
-
- /* Recalculate the number of columns needed in each row. */
-@@ -180,8 +186,15 @@ e_day_view_layout_day_events (GArray
- mins_per_row);
- }
-
-- /* Free the grid. */
-+ /* Free the grid and compute maximum number of columns used. */
-+ res = 0;
-+ for (row = 0; row < rows; row++) {
-+ res = MAX (res, e_bit_array_bit_count (grid [row]));
-+ g_object_unref (grid [row]);
-+ }
- g_free (grid);
-+
-+ return res;
- }
-
-
-@@ -190,11 +203,12 @@ e_day_view_layout_day_events (GArray
- sure they are all in one group. */
- static void
- e_day_view_layout_day_event (EDayViewEvent *event,
-- guint8 *grid,
-+ EBitArray **grid,
- guint16 *group_starts,
- guint8 *cols_per_row,
- gint rows,
-- gint mins_per_row)
-+ gint mins_per_row,
-+ gint max_cols)
- {
- gint start_row, end_row, free_col, col, row, group_start;
-
-@@ -214,10 +228,11 @@ e_day_view_layout_day_event (EDayViewEve
- end_row = CLAMP (end_row, 0, rows - 1);
-
- /* Try each column until we find a free one. */
-- for (col = 0; col < E_DAY_VIEW_MAX_COLUMNS; col++) {
-+ for (col = 0; max_cols <= 0 || col < max_cols; col++) {
- free_col = col;
- for (row = start_row; row <= end_row; row++) {
-- if (grid[row * E_DAY_VIEW_MAX_COLUMNS + col]) {
-+ if (e_bit_array_bit_count (grid [row]) > col &&
-+ e_bit_array_value_at (grid [row], col)) {
- free_col = -1;
- break;
- }
-@@ -243,7 +258,11 @@ e_day_view_layout_day_event (EDayViewEve
- all the events have been layed out. Also make sure all the rows that
- the event covers are in one group. */
- for (row = start_row; row <= end_row; row++) {
-- grid[row * E_DAY_VIEW_MAX_COLUMNS + free_col] = 1;
-+ /* resize the array if necessary */
-+ if (e_bit_array_bit_count (grid [row]) <= free_col)
-+ e_bit_array_insert (grid [row], e_bit_array_bit_count (grid [row]), free_col - e_bit_array_bit_count (grid [row]) + 1);
-+
-+ e_bit_array_change_one_row (grid [row], free_col, TRUE);
- cols_per_row[row]++;
- group_starts[row] = group_start;
- }
-@@ -284,7 +303,7 @@ e_day_view_recalc_cols_per_row (gint
- /* Expands the event horizontally to fill any free space. */
- static void
- e_day_view_expand_day_event (EDayViewEvent *event,
-- guint8 *grid,
-+ EBitArray **grid,
- guint8 *cols_per_row,
- gint mins_per_row)
- {
-@@ -300,7 +319,8 @@ e_day_view_expand_day_event (EDayViewEve
- clashed = FALSE;
- for (col = event->start_row_or_col + 1; col < cols_per_row[start_row]; col++) {
- for (row = start_row; row <= end_row; row++) {
-- if (grid[row * E_DAY_VIEW_MAX_COLUMNS + col]) {
-+ if (e_bit_array_bit_count (grid [row]) > col &&
-+ e_bit_array_value_at (grid [row], col)) {
- clashed = TRUE;
- break;
- }
-Index: calendar/gui/e-day-view-layout.h
-===================================================================
---- calendar/gui/e-day-view-layout.h (revision 35721)
-+++ calendar/gui/e-day-view-layout.h (working copy)
-@@ -38,10 +38,11 @@ void e_day_view_layout_long_events (GArr
- gint *rows_in_top_display);
-
-
--void e_day_view_layout_day_events (GArray *events,
-+gint e_day_view_layout_day_events (GArray *events,
- gint rows,
- gint mins_per_row,
-- guint8 *cols_per_row);
-+ guint8 *cols_per_row,
-+ gint max_cols);
-
- gboolean e_day_view_find_long_event_days (EDayViewEvent *event,
- gint days_shown,
-Index: calendar/gui/print.c
-===================================================================
---- calendar/gui/print.c (revision 35721)
-+++ calendar/gui/print.c (working copy)
-@@ -1320,7 +1320,7 @@ print_day_details (GtkPrintContext *cont
-
- /* lay out the short events, within the day. */
- e_day_view_layout_day_events (pdi.events[0], DAY_VIEW_ROWS,
-- DAY_VIEW_MINS_PER_ROW, pdi.cols_per_row);
-+ DAY_VIEW_MINS_PER_ROW, pdi.cols_per_row, -1);
-
- /* print the short events. */
- if (top > bottom )
diff --git a/bnc-440646-set-color-proxy.patch b/bnc-440646-set-color-proxy.patch
deleted file mode 100644
index b1d9063..0000000
--- a/bnc-440646-set-color-proxy.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- plugins/groupwise-account-setup/camel-gw-listener.c 2008/11/11 08:14:34 36770
-+++ plugins/groupwise-account-setup/camel-gw-listener.c 2008/11/11 10:52:26 36771
-@@ -559,7 +559,7 @@
-
- url = camel_url_new (info->source_url, NULL);
-
-- color = g_strdup_printf ("%u", g_random_int_range (0x100000, 0xffffaa));
-+ color = g_strdup_printf ("#%06X", g_random_int_range (0x100000, 0xffffaa));
- /* The above range is chosen so that the colors are neither too light nor too dark
- and appealing in all the themes */
-
diff --git a/bnc-440649-display-meeting-bold.patch b/bnc-440649-display-meeting-bold.patch
deleted file mode 100644
index b73c8d8..0000000
--- a/bnc-440649-display-meeting-bold.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-Index: calendar/gui/e-day-view.c
-===================================================================
---- calendar/gui/e-day-view.c (revision 36769)
-+++ calendar/gui/e-day-view.c (working copy)
-@@ -1775,41 +1775,38 @@
- return TRUE;
- }
-
--#if 0
--/* Checks if the users participation status is Needs action and shows the summary as bold text*/
-+/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
- static void
- set_text_as_bold (EDayViewEvent *event)
- {
- ECalComponent *comp;
-- char *address;
-- GSList *attendees, *l;
-+ GSList *attendees = NULL, *l;
-+ gchar *address;
- ECalComponentAttendee *at = NULL;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- address = itip_get_comp_attendee (comp, event->comp_data->client);
- e_cal_component_get_attendee_list (comp, &attendees);
--
- for (l = attendees; l; l = l->next) {
- ECalComponentAttendee *attendee = l->data;
-
-- if (g_str_equal (itip_strip_mailto (attendee->value), address)) {
-+ if ((g_str_equal (itip_strip_mailto (attendee->value), address))
-+ || (attendee->sentby && g_str_equal (itip_strip_mailto (attendee->sentby), address))) {
- at = attendee;
- break;
- }
- }
--
-- /* The attendee has not yet accepted the meeting, display the summary as bolded .
-- If the attendee is not present, it might have come through a mailing list*/
-- if (!at || (at->status == ICAL_PARTSTAT_NEEDSACTION)) {
-- gnome_canvas_item_set (event->canvas_item, "bold", TRUE, NULL);
-- }
--
- e_cal_component_free_attendee_list (attendees);
-- g_object_unref (comp);
- g_free (address);
-+ g_object_unref (comp);
-+
-+ /* The attendee has not yet accepted the meeting, display the summary as bolded.
-+ If the attendee is not present, it might have come through a mailing list.
-+ In that case, we never show the meeting as bold even if it is unaccepted. */
-+ if (at && (at->status == ICAL_PARTSTAT_NEEDSACTION))
-+ gnome_canvas_item_set (event->canvas_item, "bold", TRUE, NULL);
- }
--#endif
-
- /* This updates the text shown for an event. If the event start or end do not
- lie on a row boundary, the time is displayed before the summary. */
-@@ -1859,9 +1856,9 @@
- "text", text,
- NULL);
-
--/* if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
-+ if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
- && e_cal_util_component_has_attendee (event->comp_data->icalcomp))
-- set_text_as_bold (event); */
-+ set_text_as_bold (event);
-
- if (free_text)
- g_free (text);
-@@ -1891,9 +1888,9 @@
- if (free_text)
- g_free ((gchar*)summary);
-
--/* if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
-+ if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
- && e_cal_util_component_has_attendee (event->comp_data->icalcomp))
-- set_text_as_bold (event); */
-+ set_text_as_bold (event);
- }
-
-
-Index: calendar/gui/e-week-view.c
-===================================================================
---- calendar/gui/e-week-view.c (revision 36769)
-+++ calendar/gui/e-week-view.c (working copy)
-@@ -1877,41 +1877,38 @@
- return FALSE;
- }
-
--#if 0
--/* Checks if the users participation status is Needs action and shows the summary as bold text*/
-+/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
- static void
- set_text_as_bold (EWeekViewEvent *event, EWeekViewEventSpan *span)
- {
- ECalComponent *comp;
-- char *address;
-- GSList *attendees, *l;
-+ GSList *attendees = NULL, *l;
-+ gchar *address;
- ECalComponentAttendee *at = NULL;
-
- comp = e_cal_component_new ();
- e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- address = itip_get_comp_attendee (comp, event->comp_data->client);
- e_cal_component_get_attendee_list (comp, &attendees);
--
- for (l = attendees; l; l = l->next) {
- ECalComponentAttendee *attendee = l->data;
-
-- if (g_str_equal (itip_strip_mailto (attendee->value), address)) {
-+ if ((g_str_equal (itip_strip_mailto (attendee->value), address))
-+ || (attendee->sentby && g_str_equal (itip_strip_mailto (attendee->sentby), address))) {
- at = attendee;
- break;
- }
- }
-+ e_cal_component_free_attendee_list (attendees);
-+ g_free (address);
-+ g_object_unref (comp);
-
- /* The attendee has not yet accepted the meeting, display the summary as bolded.
-- If the attendee is not present, it might have come through a mailing list*/
-- if (!at || (at->status == ICAL_PARTSTAT_NEEDSACTION)) {
-+ If the attendee is not present, it might have come through a mailing list.
-+ In that case, we never show the meeting as bold even if it is unaccepted. */
-+ if (at && (at->status == ICAL_PARTSTAT_NEEDSACTION))
- gnome_canvas_item_set (span->text_item, "bold", TRUE, NULL);
-- }
--
-- e_cal_component_free_attendee_list (attendees);
-- g_object_unref (comp);
-- g_free (address);
- }
--#endif
-
- /* This calls a given function for each event instance that matches the given
- uid. Note that it is safe for the callback to remove the event (since we
-@@ -2816,11 +2813,10 @@
- if (free_text)
- g_free ((gchar*)summary);
-
--/* Uncomment once the pango fix is in
- if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
- && e_cal_util_component_has_attendee (event->comp_data->icalcomp)) {
- set_text_as_bold (event, span);
-- } */
-+ }
- g_object_set_data (G_OBJECT (span->text_item), "event-num", GINT_TO_POINTER (event_num));
- g_signal_connect (span->text_item, "event",
- G_CALLBACK (e_week_view_on_text_item_event),
diff --git a/bnc-441763-diff-meeting-icon.patch b/bnc-441763-diff-meeting-icon.patch
deleted file mode 100644
index 9c310f2..0000000
--- a/bnc-441763-diff-meeting-icon.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-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
deleted file mode 100644
index 1498799..0000000
--- a/bnc-441770-non-intrusive-calendar.patch
+++ /dev/null
@@ -1,1168 +0,0 @@
---- 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
deleted file mode 100644
index 3721697..0000000
--- a/bnc-442135-exchange-settings-offline.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-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/bnc-443190-warning-before-editing-appt.patch b/bnc-443190-warning-before-editing-appt.patch
deleted file mode 100644
index 0e34450..0000000
--- a/bnc-443190-warning-before-editing-appt.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- calendar/gui/dialogs/comp-editor.c 2008/11/09 21:25:02 36767
-+++ calendar/gui/dialogs/comp-editor.c 2008/11/10 10:29:17 36768
-@@ -2903,7 +2903,9 @@
- if (e_cal_component_has_attachments (priv->comp)) {
- GSList *attachment_list = NULL;
- e_cal_component_get_attachment_list (priv->comp, &attachment_list);
-+ g_signal_handlers_block_by_func(priv->attachment_bar, G_CALLBACK (attachment_bar_changed_cb), editor);
- set_attachment_list (editor, attachment_list);
-+ g_signal_handlers_unblock_by_func(priv->attachment_bar, G_CALLBACK (attachment_bar_changed_cb), editor);
- g_slist_foreach (attachment_list, (GFunc)g_free, NULL);
- g_slist_free (attachment_list);
- }
-@@ -2916,7 +2918,6 @@
- real_edit_comp (CompEditor *editor, ECalComponent *comp)
- {
- CompEditorPrivate *priv;
-- const char *uid;
-
- g_return_if_fail (IS_COMP_EDITOR (editor));
-
-@@ -2935,7 +2936,6 @@
- priv->warned = FALSE;
-
- update_window_border (editor, NULL);
-- e_cal_component_get_uid (comp, &uid);
-
- fill_widgets (editor);
-
diff --git a/bnc-443544-evo-free-busy.patch b/bnc-443544-evo-free-busy.patch
deleted file mode 100644
index e6aa95d..0000000
--- a/bnc-443544-evo-free-busy.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-Index: calendar/gui/e-meeting-store.c
-===================================================================
---- calendar/gui/e-meeting-store.c (revision 36995)
-+++ calendar/gui/e-meeting-store.c (working copy)
-@@ -1017,6 +1017,10 @@
- busy_type = E_MEETING_FREE_BUSY_TENTATIVE;
- break;
-
-+ case ICAL_FBTYPE_FREE:
-+ busy_type = E_MEETING_FREE_BUSY_FREE;
-+ break;
-+
- default:
- break;
- }
-Index: calendar/gui/e-meeting-types.h
-===================================================================
---- calendar/gui/e-meeting-types.h (revision 36995)
-+++ calendar/gui/e-meeting-types.h (working copy)
-@@ -48,11 +48,12 @@
- used as for loop counters, so they should start at 0 and be ordered. */
- typedef enum
- {
-- E_MEETING_FREE_BUSY_TENTATIVE = 0,
-+ E_MEETING_FREE_BUSY_TENTATIVE = 0,
- E_MEETING_FREE_BUSY_OUT_OF_OFFICE = 1,
- E_MEETING_FREE_BUSY_BUSY = 2,
-+ E_MEETING_FREE_BUSY_FREE = 3,
-
-- E_MEETING_FREE_BUSY_LAST = 3
-+ E_MEETING_FREE_BUSY_LAST = 4
- } EMeetingFreeBusyType;
-
- /* This is our representation of a time. We use a GDate to store the day,
-Index: calendar/gui/e-meeting-attendee.c
-===================================================================
---- calendar/gui/e-meeting-attendee.c (revision 36995)
-+++ calendar/gui/e-meeting-attendee.c (working copy)
-@@ -845,6 +845,10 @@
- if (compare_times (&period.start, &period.end) > 0)
- return FALSE;
-
-+ /* If the busy_type is FREE, then there is no need to render it in UI */
-+ if (busy_type == E_MEETING_FREE_BUSY_FREE)
-+ goto done;
-+
- /* If the busy range is not set elsewhere, track it as best we can */
- if (!priv->start_busy_range_set) {
- if (!g_date_valid (&priv->busy_periods_start.date)) {
-@@ -871,6 +875,7 @@
- }
- }
- }
-+
- if (!priv->end_busy_range_set) {
- if (!g_date_valid (&priv->busy_periods_end.date)) {
- priv->busy_periods_end.date = period.end.date;
-@@ -898,12 +903,14 @@
- }
-
- g_array_append_val (priv->busy_periods, period);
-- priv->has_calendar_info = TRUE;
-- priv->busy_periods_sorted = FALSE;
-
- period_in_days = g_date_get_julian (&period.end.date) - g_date_get_julian (&period.start.date) + 1;
- priv->longest_period_in_days = MAX (priv->longest_period_in_days, period_in_days);
-
-+done:
-+ priv->has_calendar_info = TRUE;
-+ priv->busy_periods_sorted = FALSE;
-+
- return TRUE;
- }
-
-Index: calendar/gui/e-meeting-time-sel.c
-===================================================================
---- calendar/gui/e-meeting-time-sel.c (revision 36995)
-+++ calendar/gui/e-meeting-time-sel.c (working copy)
-@@ -649,6 +649,7 @@
- e_meeting_time_selector_alloc_named_color (mts, "white", &mts->attendee_list_bg_color);
-
- e_meeting_time_selector_alloc_named_color (mts, "snow4", &mts->meeting_time_bg_color);
-+ e_meeting_time_selector_alloc_named_color (mts, "snow", &mts->busy_colors[E_MEETING_FREE_BUSY_FREE]);
- e_meeting_time_selector_alloc_named_color (mts, "yellow", &mts->busy_colors[E_MEETING_FREE_BUSY_TENTATIVE]);
- e_meeting_time_selector_alloc_named_color (mts, "blue", &mts->busy_colors[E_MEETING_FREE_BUSY_BUSY]);
- e_meeting_time_selector_alloc_named_color (mts, "orange4", &mts->busy_colors[E_MEETING_FREE_BUSY_OUT_OF_OFFICE]);
diff --git a/bnc-443851-calendar-tooltip-info.patch b/bnc-443851-calendar-tooltip-info.patch
deleted file mode 100644
index d430e53..0000000
--- a/bnc-443851-calendar-tooltip-info.patch
+++ /dev/null
@@ -1,141 +0,0 @@
---- calendar/gui/e-calendar-table.c 2008-10-20 08:58:33.000000000 +0530
-+++ calendar/gui/e-calendar-table.c 2008-11-19 12:56:42.000000000 +0530
-@@ -432,6 +432,16 @@ query_tooltip_cb (GtkWidget *widget, gin
- e_cal_component_free_datetime (&dtstart);
- e_cal_component_free_datetime (&dtdue);
-
-+ tmp = e_calendar_view_get_attendees_status_info (new_comp);
-+ if (tmp) {
-+ l = gtk_label_new (tmp);
-+ gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
-+ gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0);
-+
-+ g_free (tmp);
-+ tmp = NULL;
-+ }
-+
- tmp2 = g_string_new ("");
- e_cal_component_get_description_list (new_comp, &desc);
- for (len = 0, p = desc; p != NULL; p = p->next) {
---- calendar/gui/e-calendar-view.c 2008-11-19 12:02:10.000000000 +0530
-+++ calendar/gui/e-calendar-view.c 2008-11-19 12:56:59.000000000 +0530
-@@ -2131,6 +2131,83 @@ e_calendar_view_move_tip (GtkWidget *wid
- gtk_widget_show (widget);
- }
-
-+/**
-+ * Returns information about attendees in the component. If no attendees, then returns NULL.
-+ * The information is like "Status: Accepted: X Declined: Y ...".
-+ * Free returned pointer with g_free.
-+ **/
-+char *
-+e_calendar_view_get_attendees_status_info (ECalComponent *comp)
-+{
-+ struct _values {
-+ icalparameter_partstat status;
-+ const char *caption;
-+ int count;
-+ } values[] = {
-+ { ICAL_PARTSTAT_ACCEPTED, N_("Accepted"), 0 },
-+ { ICAL_PARTSTAT_DECLINED, N_("Declined"), 0 },
-+ { ICAL_PARTSTAT_TENTATIVE, N_("Tentative"), 0 },
-+ { ICAL_PARTSTAT_DELEGATED, N_("Delegated"), 0 },
-+ { ICAL_PARTSTAT_NEEDSACTION, N_("Needs action"), 0 },
-+ { ICAL_PARTSTAT_NONE, N_("Other"), 0 },
-+ { ICAL_PARTSTAT_X, NULL, -1 }
-+ };
-+
-+ GSList *attendees = NULL, *a;
-+ gboolean have = FALSE;
-+ char *res = NULL;
-+ int i;
-+
-+ if (!comp || !e_cal_component_has_attendees (comp))
-+ return NULL;
-+
-+ e_cal_component_get_attendee_list (comp, &attendees);
-+
-+ for (a = attendees; a; a = a->next) {
-+ ECalComponentAttendee *att = a->data;
-+
-+ if (att && att->cutype == ICAL_CUTYPE_INDIVIDUAL &&
-+ (att->role == ICAL_ROLE_CHAIR ||
-+ att->role == ICAL_ROLE_REQPARTICIPANT ||
-+ att->role == ICAL_ROLE_OPTPARTICIPANT)) {
-+ have = TRUE;
-+
-+ for (i = 0; values[i].count != -1; i++) {
-+ if (att->status == values[i].status || values[i].status == ICAL_PARTSTAT_NONE) {
-+ values[i].count++;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (have) {
-+ GString *str = g_string_new ("");
-+
-+ for (i = 0; values[i].count != -1; i++) {
-+ if (values[i].count > 0) {
-+ if (str->str && *str->str)
-+ g_string_append (str, " ");
-+
-+ g_string_append_printf (str, "%s: %d", _(values[i].caption), values[i].count);
-+ }
-+ }
-+
-+ g_string_prepend (str, ": ");
-+
-+ /* To Translators: 'Status' here means the state of the attendees, the resulting string will be in a form:
-+ Status: Accepted: X Declined: Y ... */
-+ g_string_prepend (str, _("Status"));
-+
-+ res = g_string_free (str, FALSE);
-+ }
-+
-+ if (attendees)
-+ e_cal_component_free_attendee_list (attendees);
-+
-+ return res;
-+}
-+
- /*
- * It is expected to show the tooltips in this below format
- *
-@@ -2138,6 +2215,7 @@ e_calendar_view_move_tip (GtkWidget *wid
- * Organiser: NameOfTheUser
- * Location: PlaceOfTheMeeting
- * Time : DateAndTime (xx Minutes)
-+ * Status: Accepted: X Declined: Y ...
- */
-
- gboolean
-@@ -2276,6 +2354,17 @@ e_calendar_view_get_tooltips (ECalendarV
- g_free (tmp2);
- g_free (tmp1);
-
-+ tmp = e_calendar_view_get_attendees_status_info (newcomp);
-+ if (tmp) {
-+ hbox = gtk_hbox_new (FALSE, 0);
-+ gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new (tmp), FALSE, FALSE, 0);
-+ ebox = gtk_event_box_new ();
-+ gtk_container_add ((GtkContainer *)ebox, hbox);
-+ gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
-+
-+ g_free (tmp);
-+ }
-+
- pevent->tooltip = gtk_window_new (GTK_WINDOW_POPUP);
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type ((GtkFrame *)frame, GTK_SHADOW_IN);
---- calendar/gui/e-calendar-view.h 2008-11-19 12:02:10.000000000 +0530
-+++ calendar/gui/e-calendar-view.h 2008-11-19 12:57:07.000000000 +0530
-@@ -175,6 +175,7 @@ gboolean e_calendar_view_get_tooltips (E
- void e_calendar_view_move_tip (GtkWidget *widget, int x, int y);
-
- const gchar *e_calendar_view_get_icalcomponent_summary (ECal *ecal, icalcomponent *icalcomp, gboolean *free_text);
-+char *e_calendar_view_get_attendees_status_info (ECalComponent *comp);
-
- void draw_curved_rectangle (cairo_t *cr,
- double x0,
diff --git a/bnc-446285-traverse-all-entries.patch b/bnc-446285-traverse-all-entries.patch
deleted file mode 100644
index d4083d5..0000000
--- a/bnc-446285-traverse-all-entries.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Index: calendar/gui/e-select-names-editable.c
-===================================================================
---- calendar/gui/e-select-names-editable.c (revision 36818)
-+++ calendar/gui/e-select-names-editable.c (working copy)
-@@ -129,7 +129,7 @@
- e_select_names_editable_get_emails (ESelectNamesEditable *esne)
- {
- EDestinationStore *destination_store;
-- GList *destinations;
-+ GList *destinations, *l;
- EDestination *destination;
- GList *result = NULL;
-
-@@ -140,25 +140,27 @@
- if (!destinations)
- return NULL;
-
-- destination = destinations->data;
-- if (e_destination_is_evolution_list (destination)) {
-- const GList *list_dests, *l;
-+ for (l = destinations; l != NULL; l = l->next) {
-+ destination = l->data;
-+ if (e_destination_is_evolution_list (destination)) {
-+ const GList *list_dests, *l;
-
-- list_dests = e_destination_list_get_dests (destination);
-- for (l = list_dests; l != NULL; l = g_list_next (l)) {
-- result = g_list_append (result, g_strdup (e_destination_get_email (l->data)));
-+ list_dests = e_destination_list_get_dests (destination);
-+ for (l = list_dests; l != NULL; l = g_list_next (l)) {
-+ result = g_list_append (result, g_strdup (e_destination_get_email (l->data)));
-+ }
-+ } else {
-+ /* check if the contact is contact list, it does not contain all the email ids */
-+ /* we dont expand it currently, TODO do we need to expand it by getting it from addressbook*/
-+ if (e_destination_get_contact (destination) &&
-+ e_contact_get (e_destination_get_contact (destination), E_CONTACT_IS_LIST)) {
-+ /* If its a contact_list which is not expanded, it wont have a email id,
-+ so we can use the name as the email id */
-+
-+ result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
-+ } else
-+ result = g_list_append (result, g_strdup (e_destination_get_email (destination)));
- }
-- } else {
-- /* check if the contact is contact list, it does not contain all the email ids */
-- /* we dont expand it currently, TODO do we need to expand it by getting it from addressbook*/
-- if (e_destination_get_contact (destination) &&
-- e_contact_get (e_destination_get_contact (destination), E_CONTACT_IS_LIST)) {
-- /* If its a contact_list which is not expanded, it wont have a email id,
-- so we can use the name as the email id */
--
-- result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
-- } else
-- result = g_list_append (result, g_strdup (e_destination_get_email (destination)));
- }
-
- g_list_free (destinations);
-@@ -191,7 +193,7 @@
- e_select_names_editable_get_names (ESelectNamesEditable *esne)
- {
- EDestinationStore *destination_store;
-- GList *destinations;
-+ GList *destinations, *l;
- EDestination *destination;
- GList *result = NULL;
-
-@@ -202,18 +204,20 @@
- if (!destinations)
- return NULL;
-
-- destination = destinations->data;
-- if (e_destination_is_evolution_list (destination)) {
-- const GList *list_dests, *l;
-+ for (l = destinations; l != NULL; l = l->next) {
-+ destination = l->data;
-+ if (e_destination_is_evolution_list (destination)) {
-+ const GList *list_dests, *l;
-
-- list_dests = e_destination_list_get_dests (destination);
-- for (l = list_dests; l != NULL; l = g_list_next (l)) {
-- result = g_list_append (result, g_strdup (e_destination_get_name (l->data)));
-+ list_dests = e_destination_list_get_dests (destination);
-+ for (l = list_dests; l != NULL; l = g_list_next (l)) {
-+ result = g_list_append (result, g_strdup (e_destination_get_name (l->data)));
-+ }
-+ } else {
-+ result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
- }
-- } else {
-- result = g_list_append (result, g_strdup (e_destination_get_name (destination)));
- }
--
-+
- g_list_free (destinations);
-
- return result;
diff --git a/bnc-446286-message-tracking-status.patch b/bnc-446286-message-tracking-status.patch
deleted file mode 100644
index 68ea74f..0000000
--- a/bnc-446286-message-tracking-status.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Index: plugins/groupwise-features/status-track.c
-===================================================================
---- plugins/groupwise-features/status-track.c (revision 36806)
-+++ plugins/groupwise-features/status-track.c (working copy)
-@@ -79,8 +79,6 @@
-
- gchar *boldmsg;
-
-- const char *status = NULL ;
--
- int row = 0;
-
- EGwConnection *cnc;
-@@ -93,14 +91,6 @@
- return ;
- }
-
-- status = camel_medium_get_header ( CAMEL_MEDIUM(msg), "X-gw-status-opt") ;
-- if (!status) {
-- g_print ("Error!! No header\n");
-- /* No need to make any call if this header is not available.
-- This is the server side identifier for sent-items */
-- return ;
-- }
--
- /*Create the dialog*/
- d = (GtkDialog *) gtk_dialog_new ();
- gtk_dialog_add_button (d, GTK_STOCK_OK, GTK_RESPONSE_OK);
diff --git a/bnc-446287-missing-vcf-reader.patch b/bnc-446287-missing-vcf-reader.patch
deleted file mode 100644
index 75089fd..0000000
--- a/bnc-446287-missing-vcf-reader.patch
+++ /dev/null
@@ -1,227 +0,0 @@
---- mail//em-format-html-display.c 2008-10-13 14:07:24.000000000 +0530
-+++ mail//em-format-html-display.c 2008-12-22 15:19:01.000000000 +0530
-@@ -49,6 +49,7 @@
- #include
- #include
- #include
-+#include
-
- #include
- #include
-@@ -188,6 +189,8 @@ static void efhd_format_secure(EMFormat
- static void efhd_complete(EMFormat *);
- gboolean efhd_mnemonic_show_bar (GtkWidget *widget, gboolean focus, GtkWidget *efhd);
-
-+static gboolean efhd_bonobo_object(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject);
-+static gboolean efhd_use_component(const char *mime_type);
- static void efhd_builtin_init(EMFormatHTMLDisplayClass *efhc);
-
- enum {
-@@ -1303,10 +1306,37 @@ efhd_builtin_init(EMFormatHTMLDisplayCla
- }
-
- /* ********************************************************************** */
--
-+static void
-+efhd_bonobo_unknown(EMFormat *emf, CamelStream *stream, CamelMimePart *part, const EMFormatHandler *info)
-+{
-+ char *classid;
-+
-+ classid = g_strdup_printf("bonobo-unknown:///em-format-html-display/%s", emf->part_id->str);
-+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_bonobo_object);
-+ camel_stream_printf(stream, "
\n", classid, info->mime_type);
-+ g_free(classid);
-+}
-+
-+ /* ********************************************************************** */
- static const EMFormatHandler *efhd_find_handler(EMFormat *emf, const char *mime_type)
- {
-- return ((EMFormatClass *)efhd_parent)->find_handler(emf, mime_type);
-+ const EMFormatHandler *handle;
-+
-+ if ( (handle = ((EMFormatClass *)efhd_parent)->find_handler(emf, mime_type)) == NULL
-+ && efhd_use_component(mime_type)
-+ && (handle = g_hash_table_lookup(efhd_bonobo_handlers, mime_type)) == NULL) {
-+
-+ EMFormatHandler *h = g_malloc0(sizeof(*h));
-+
-+ h->mime_type = g_strdup(mime_type);
-+ h->handler = efhd_bonobo_unknown;
-+ h->flags = EM_FORMAT_HANDLER_INLINE_DISPOSITION;
-+ g_hash_table_insert(efhd_bonobo_handlers, h->mime_type, h);
-+
-+ handle = h;
-+ }
-+
-+ return handle;
- }
-
- static void efhd_format_clone(EMFormat *emf, CamelFolder *folder, const char *uid, CamelMimeMessage *msg, EMFormat *src)
-@@ -1956,6 +1986,154 @@ efhd_attachment_frame(EMFormat *emf, Cam
- }
- }
-
-+static gboolean
-+efhd_bonobo_object(EMFormatHTML *efh, GtkHTMLEmbedded *eb, EMFormatHTMLPObject *pobject)
-+{
-+ CamelDataWrapper *wrapper;
-+ Bonobo_ServerInfo *component;
-+ GtkWidget *embedded;
-+ Bonobo_PersistStream persist;
-+ CORBA_Environment ev;
-+ CamelStreamMem *cstream;
-+ BonoboStream *bstream;
-+ BonoboControlFrame *control_frame;
-+ Bonobo_PropertyBag prop_bag;
-+
-+ component = bonobo_activation_get_default_component_for_mime_type (eb->type);
-+ if (component == NULL)
-+ return FALSE;
-+
-+ embedded = bonobo_widget_new_control(component->iid, NULL);
-+ CORBA_free(component);
-+ if (embedded == NULL)
-+ return FALSE;
-+
-+ CORBA_exception_init(&ev);
-+
-+ control_frame = bonobo_widget_get_control_frame((BonoboWidget *)embedded);
-+ prop_bag = bonobo_control_frame_get_control_property_bag(control_frame, NULL);
-+ if (prop_bag != CORBA_OBJECT_NIL) {
-+ /*
-+ * Now we can take care of business. Currently, the only control
-+ * that needs something passed to it through a property bag is
-+ * the iTip control, and it needs only the From email address,
-+ * but perhaps in the future we can generalize this section of code
-+ * to pass a bunch of useful things to all embedded controls.
-+ */
-+ const CamelInternetAddress *from;
-+ char *from_address;
-+
-+ from = camel_mime_message_get_from((CamelMimeMessage *)((EMFormat *)efh)->message);
-+ from_address = camel_address_encode((CamelAddress *)from);
-+ bonobo_property_bag_client_set_value_string(prop_bag, "from_address", from_address, &ev);
-+ g_free(from_address);
-+
-+ Bonobo_Unknown_unref(prop_bag, &ev);
-+ }
-+
-+ persist = (Bonobo_PersistStream)Bonobo_Unknown_queryInterface(bonobo_widget_get_objref((BonoboWidget *)embedded),
-+ "IDL:Bonobo/PersistStream:1.0", &ev);
-+ if (persist == CORBA_OBJECT_NIL) {
-+ g_object_ref_sink(embedded);
-+ CORBA_exception_free(&ev);
-+ return FALSE;
-+ }
-+
-+ /* Write the data to a CamelStreamMem... */
-+ cstream = (CamelStreamMem *)camel_stream_mem_new();
-+ wrapper = camel_medium_get_content_object((CamelMedium *)pobject->part);
-+ if (FALSE && !g_ascii_strncasecmp (eb->type, "text/", 5)) {
-+ /* do charset conversion, etc */
-+ d(printf("performing charset conversion for %s component\n", eb->type));
-+ em_format_format_text((EMFormat *)efh, (CamelStream *)cstream, wrapper);
-+ } else {
-+ camel_data_wrapper_decode_to_stream (wrapper, (CamelStream *) cstream);
-+ }
-+
-+ /* ...convert the CamelStreamMem to a BonoboStreamMem... */
-+ bstream = bonobo_stream_mem_create((char *)cstream->buffer->data, cstream->buffer->len, TRUE, FALSE);
-+ camel_object_unref(cstream);
-+
-+ /* ...and hydrate the PersistStream from the BonoboStream. */
-+ Bonobo_PersistStream_load(persist,
-+ bonobo_object_corba_objref(BONOBO_OBJECT (bstream)),
-+ eb->type, &ev);
-+ bonobo_object_unref(BONOBO_OBJECT (bstream));
-+ Bonobo_Unknown_unref(persist, &ev);
-+ CORBA_Object_release(persist, &ev);
-+
-+ if (ev._major != CORBA_NO_EXCEPTION) {
-+ g_object_ref_sink(embedded);
-+ CORBA_exception_free(&ev);
-+ return FALSE;
-+ }
-+ CORBA_exception_free(&ev);
-+
-+ gtk_widget_show(embedded);
-+ gtk_container_add(GTK_CONTAINER (eb), embedded);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+efhd_check_server_prop(Bonobo_ServerInfo *component, const char *propname, const char *value)
-+{
-+ CORBA_sequence_CORBA_string stringv;
-+ Bonobo_ActivationProperty *prop;
-+ int i;
-+
-+ prop = bonobo_server_info_prop_find(component, propname);
-+ if (!prop || prop->v._d != Bonobo_ACTIVATION_P_STRINGV)
-+ return FALSE;
-+
-+ stringv = prop->v._u.value_stringv;
-+ for (i = 0; i < stringv._length; i++) {
-+ if (!g_ascii_strcasecmp(value, stringv._buffer[i]))
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+static gboolean
-+efhd_use_component(const char *mime_type)
-+{
-+ GList *components, *iter;
-+ Bonobo_ServerInfo *component = NULL;
-+
-+ /* should this cache it? */
-+
-+ if (g_ascii_strcasecmp(mime_type, "text/x-vcard") != 0
-+ && g_ascii_strcasecmp(mime_type, "text/calendar") != 0) {
-+ const char **mime_types;
-+ int i;
-+
-+ mime_types = mail_config_get_allowable_mime_types();
-+ for (i = 0; mime_types[i]; i++) {
-+ if (!g_ascii_strcasecmp(mime_types[i], mime_type))
-+ goto type_ok;
-+ }
-+ return FALSE;
-+ }
-+type_ok:
-+ components = bonobo_activation_get_all_components_for_mime_type (mime_type);
-+ for (iter = components; iter; iter = iter->next) {
-+ Bonobo_ServerInfo *comp = iter->data;
-+
-+ comp = iter->data;
-+ if (efhd_check_server_prop(comp, "repo_ids", "IDL:Bonobo/PersistStream:1.0")
-+ && efhd_check_server_prop(comp, "bonobo:supported_mime_types", mime_type)) {
-+ component = comp;
-+ break;
-+ }
-+ }
-+
-+ /* FIXME: How should I free the Bonobo_ServerInfo's ? */
-+ g_list_free (components);
-+
-+ return component != NULL;
-+}
-+
- static void
- attachment_bar_arrow_clicked(GtkWidget *w, EMFormatHTMLDisplay *efhd)
- {
-@@ -2329,6 +2507,12 @@ efhd_format_attachment(EMFormat *emf, Ca
- if (handle) {
- if (info->shown)
- handle->handler(emf, stream, part, handle);
-+ } else if (efhd_use_component(mime_type)) {
-+ g_free(classid); /* messy */
-+
-+ classid = g_strdup_printf("bonobo-unknown:///em-format-html-display/%s", emf->part_id->str);
-+ em_format_html_add_pobject((EMFormatHTML *)emf, sizeof(EMFormatHTMLPObject), classid, part, efhd_bonobo_object);
-+ camel_stream_printf(stream, "
>\n", classid, mime_type);
- }
-
- g_free(classid);
diff --git a/bnc-446356-a11y-crash.diff b/bnc-446356-a11y-crash.diff
deleted file mode 100644
index a84bea8..0000000
--- a/bnc-446356-a11y-crash.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: a11y/calendar/ea-cal-view.c
-===================================================================
---- a11y/calendar/ea-cal-view.c (revision 36795)
-+++ a11y/calendar/ea-cal-view.c (working copy)
-@@ -277,7 +277,7 @@
- }
- g_object_notify (G_OBJECT (ea_cal_view), "accessible-name");
- g_signal_emit_by_name (ea_cal_view, "visible_data_changed");
-- g_signal_emit_by_name (ea_cal_view, "children_changed", NULL);
-+ g_signal_emit_by_name (ea_cal_view, "children_changed", NULL, NULL, NULL);
- #ifdef ACC_DEBUG
- printf ("AccDebug: cal view date changed\n");
- #endif
diff --git a/bnc-446390-corrupted-vfolders.patch b/bnc-446390-corrupted-vfolders.patch
deleted file mode 100644
index c026821..0000000
--- a/bnc-446390-corrupted-vfolders.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- mail/mail-vfolder.c
-+++ mail/mail-vfolder.c
-@@ -266,6 +266,11 @@ vfolder_adduri_exec (struct _adduri_msg *m)
- g_warning("Folder '%s' disappeared while I was adding/remove it to/from my vfolder", m->uri);
- return;
- }
-+ if (strncmp(m->uri, "vfolder:/", 9) == 0 ||
-+ strncmp(m->uri, "email://vfolder@local", 21) == 0) {
-+ printf("Ignoring loading vfolder as a subfolder \n");
-+ return;
-+ }
-
- if (folder == NULL)
- folder = mail_tool_uri_to_folder (m->uri, 0, &m->base.ex);
diff --git a/bnc-449952-hotkey-evo-preferences.patch b/bnc-449952-hotkey-evo-preferences.patch
deleted file mode 100644
index 1c7e6a1..0000000
--- a/bnc-449952-hotkey-evo-preferences.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- mail/em-account-editor.c
-+++ mail/em-account-editor.c
-@@ -2001,7 +2001,7 @@ emae_option_checkspin(EMAccountEditorService *service, CamelURL *url, const char
-
- spin = gtk_spin_button_new((GtkAdjustment *)gtk_adjustment_new(def, min, max, 1, 1, 1), 1, 0);
- if (post)
-- label = gtk_label_new(post);
-+ label = gtk_label_new_with_mnemonic(post);
- gtk_box_pack_start((GtkBox *)hbox, check, FALSE, TRUE, 0);
- gtk_box_pack_start((GtkBox *)hbox, spin, FALSE, TRUE, 0);
- if (label)
diff --git a/bnc-456481-evolution-eats-memory.patch b/bnc-456481-evolution-eats-memory.patch
deleted file mode 100644
index 5429f9b..0000000
--- a/bnc-456481-evolution-eats-memory.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- mail/mail-folder-cache.c
-+++ mail/mail-folder-cache.c
-@@ -420,6 +420,7 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
- ((flags & CAMEL_MESSAGE_DELETED) == 0) &&
- (camel_message_info_date_received (info) > last_newmail))
- new++;
-+ camel_message_info_free (info);
- }
- }
- }
diff --git a/bnc-458153-busy-button.patch b/bnc-458153-busy-button.patch
deleted file mode 100644
index c6ab591..0000000
--- a/bnc-458153-busy-button.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Index: calendar/gui/dialogs/comp-editor.c
-===================================================================
---- calendar/gui/dialogs/comp-editor.c (revision 36987)
-+++ calendar/gui/dialogs/comp-editor.c (working copy)
-@@ -164,6 +164,7 @@
- " "
- " "
- " "
-+" "
- " "
- "";
-
-Index: calendar/gui/dialogs/event-editor.c
-===================================================================
---- calendar/gui/dialogs/event-editor.c (revision 36987)
-+++ calendar/gui/dialogs/event-editor.c (working copy)
-@@ -79,20 +79,21 @@
- " "
- " "
- " "
- " "
-+" "
-+" "
- " "
--" "
- " "
- " "
- "";
-@@ -149,9 +150,15 @@
- EventEditor *editor)
- {
- gboolean active;
-+ GtkAction *action_show_busy;
-+ CompEditor *comp_editor = COMP_EDITOR (editor);
-
- active = gtk_toggle_action_get_active (action);
- event_page_set_all_day_event (editor->priv->event_page, active);
-+
-+ action_show_busy = comp_editor_get_action (comp_editor, "show-time-busy");
-+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action_show_busy), !active);
-+ event_page_set_show_time_busy (editor->priv->event_page, !active);
- }
-
- static void
-@@ -223,7 +230,7 @@
- FALSE },
-
- { "show-time-busy",
-- NULL,
-+ GTK_STOCK_DIALOG_ERROR,
- N_("Show Time as _Busy"),
- NULL,
- N_("Toggles whether to show time as busy"),
diff --git a/bnc-458968-warning-on-delegating.patch b/bnc-458968-warning-on-delegating.patch
deleted file mode 100644
index 3ff45e1..0000000
--- a/bnc-458968-warning-on-delegating.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: calendar/gui/dialogs/comp-editor.c
-===================================================================
---- calendar/gui/dialogs/comp-editor.c (revision 36992)
-+++ calendar/gui/dialogs/comp-editor.c (working copy)
-@@ -2433,6 +2433,7 @@
- editor->priv->summary = g_strdup (summary);
-
- show_warning =
-+ !(editor->priv->flags & COMP_EDITOR_DELEGATE) &&
- !editor->priv->warned &&
- editor->priv->existing_org &&
- !editor->priv->user_org;
-@@ -2482,6 +2483,7 @@
-
- show_warning =
- changed && !editor->priv->warned &&
-+ !(editor->priv->flags & COMP_EDITOR_DELEGATE) &&
- editor->priv->existing_org && !editor->priv->user_org;
-
- if (show_warning) {
diff --git a/bnc-462349-shared-memo-editor.patch b/bnc-462349-shared-memo-editor.patch
deleted file mode 100644
index 710588f..0000000
--- a/bnc-462349-shared-memo-editor.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-Index: calendar/gui/dialogs/memo-editor.c
-===================================================================
---- calendar/gui/dialogs/memo-editor.c (revision 36948)
-+++ calendar/gui/dialogs/memo-editor.c (revision 36949)
-@@ -97,6 +97,21 @@
- }
-
- static void
-+memo_editor_constructed (GObject *object)
-+{
-+ MemoEditorPrivate *priv;
-+ CompEditor *editor;
-+
-+ priv = MEMO_EDITOR_GET_PRIVATE (object);
-+ editor = COMP_EDITOR (object);
-+
-+ priv->memo_page = memo_page_new (editor);
-+ comp_editor_append_page (
-+ editor, COMP_EDITOR_PAGE (priv->memo_page),
-+ _("Memo"), TRUE);
-+}
-+
-+static void
- memo_editor_class_init (MemoEditorClass *class)
- {
- GObjectClass *object_class;
-@@ -106,6 +121,7 @@
-
- object_class = G_OBJECT_CLASS (class);
- object_class->dispose = memo_editor_dispose;
-+ object_class->constructed = memo_editor_constructed;
-
- /* TODO Add a help section for memos. */
- editor_class = COMP_EDITOR_CLASS (class);
-@@ -132,13 +148,6 @@
- g_critical ("%s: %s", G_STRFUNC, error->message);
- g_error_free (error);
- }
--
-- me->priv->memo_page = memo_page_new (editor);
-- g_object_ref_sink (me->priv->memo_page);
-- comp_editor_append_page (
-- COMP_EDITOR (me),
-- COMP_EDITOR_PAGE (me->priv->memo_page),
-- _("Memo"), TRUE);
- }
-
- /**
diff --git a/bnc-462372-open-attachment-event.patch b/bnc-462372-open-attachment-event.patch
deleted file mode 100644
index 934bcd6..0000000
--- a/bnc-462372-open-attachment-event.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: calendar/gui/e-cal-popup.c
-===================================================================
---- calendar/gui/e-cal-popup.c (revision 36995)
-+++ calendar/gui/e-cal-popup.c (working copy)
-@@ -139,7 +139,7 @@
- usepath = g_strjoin (NULL, "file://", path, NULL);
-
- wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part));
-- stream = camel_stream_vfs_new_with_uri (path, CAMEL_STREAM_VFS_CREATE);
-+ stream = camel_stream_vfs_new_with_uri (usepath, CAMEL_STREAM_VFS_CREATE);
-
- if (usepath != path)
- g_free (usepath);
diff --git a/bnc-463599-header-print-issues.patch b/bnc-463599-header-print-issues.patch
deleted file mode 100644
index e76418a..0000000
--- a/bnc-463599-header-print-issues.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Index: calendar/gui/print.c
-===================================================================
---- calendar/gui/print.c (revision 36992)
-+++ calendar/gui/print.c (working copy)
-@@ -129,9 +129,9 @@
-
- /* The width of the small calendar months, the space from the right edge of
- the header rectangle, and the space between the months. */
--#define SMALL_MONTH_WIDTH 80
--#define SMALL_MONTH_PAD 4
--#define SMALL_MONTH_SPACING 12
-+#define SMALL_MONTH_WIDTH 100
-+#define SMALL_MONTH_PAD 5
-+#define SMALL_MONTH_SPACING 20
-
- /* The minimum number of rows we leave space for for the long events in the
- day view. */
-@@ -502,7 +502,7 @@
- *x1 += 2;
- *x2 -= 2;
- *y2 += 2;
-- print_text (context, font, text, alignment, *x1, *x2, *y1, *y1 + size * 1.4);
-+ print_text (context, font, text, alignment, *x1, *x2, *y1 + 1.0, *y1 + size * 1.4);
- *y1 += size * 1.4;
- }
-
-@@ -841,10 +841,10 @@
- sprintf (buf, "%d", hour);
- print_text (context, font_hour, buf, PANGO_ALIGN_RIGHT,
- left, hour_minute_x,
-- y - yinc + yinc / 2, y - yinc + yinc / 2 + hour_font_size);
-+ y - yinc, y - yinc + hour_font_size);
- print_text (context, font_minute, minute, PANGO_ALIGN_LEFT,
- hour_minute_x, left + width - 3,
-- y - yinc + yinc / 2, y - yinc + yinc / 2 + minute_font_size);
-+ y - yinc, y - yinc + minute_font_size);
-
- /* Draw the horizontal line between hours, across the entire
- width of the day view. */
-@@ -2082,7 +2082,7 @@
-
- /* Print the filled border around the header. */
- print_border (context, 0.0, width,
-- 0.0, HEADER_HEIGHT + 2.0, 1.0, 0.9);
-+ 0.0, HEADER_HEIGHT + 3.5, 1.0, 0.9);
-
- /* Print the 2 mini calendar-months. */
- l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH * 2 - SMALL_MONTH_SPACING;
-@@ -2167,14 +2167,14 @@
- l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH * 2
- - SMALL_MONTH_SPACING;
- print_month_small (context, gcal, when,
-- l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 30,
-+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 10,
- DATE_MONTH | DATE_YEAR, when,
- time_add_week_with_zone (when, 1, zone), FALSE);
-
- l += SMALL_MONTH_SPACING + SMALL_MONTH_WIDTH;
- print_month_small (context, gcal,
- time_add_month_with_zone (when, 1, zone),
-- l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 30,
-+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 10,
- DATE_MONTH | DATE_YEAR, when,
- time_add_week_with_zone (when, 1, zone), FALSE);
-
-@@ -2200,6 +2200,7 @@
- icaltimezone *zone = calendar_config_get_icaltimezone ();
- char buf[100];
- gdouble width, height;
-+ double l;
-
- setup = gtk_print_context_get_page_setup (context);
-
-@@ -2210,17 +2211,19 @@
- print_month_summary (context, gcal, date, 0.0, width, HEADER_HEIGHT, height);
-
- /* Print the border around the header. */
-- print_border (context, 0.0, width, 0.0, HEADER_HEIGHT, 1.0, 0.9);
-+ print_border (context, 0.0, width, 0.0, HEADER_HEIGHT + 10, 1.0, 0.9);
-
-+ l = width - SMALL_MONTH_PAD - SMALL_MONTH_WIDTH;
-+
- /* Print the 2 mini calendar-months. */
- print_month_small (context, gcal,
- time_add_month_with_zone (date, 1, zone),
-- width - width / 7 + 2, 4,
-- width - 8, HEADER_HEIGHT,
-+ l, 4, l + SMALL_MONTH_WIDTH, HEADER_HEIGHT + 4,
- DATE_MONTH | DATE_YEAR, 0, 0, FALSE);
-+
- print_month_small (context, gcal,
- time_add_month_with_zone (date, -1, zone),
-- 8, 4, width / 7 - 2, HEADER_HEIGHT,
-+ 8, 4, width / 7 + 20, HEADER_HEIGHT + 4,
- DATE_MONTH | DATE_YEAR, 0, 0, FALSE);
-
- /* Print the month, e.g. 'May 2001'. */
diff --git a/compiler-warnings.diff b/compiler-warnings.diff
new file mode 100644
index 0000000..a2dd3b3
--- /dev/null
+++ b/compiler-warnings.diff
@@ -0,0 +1,12 @@
+Index: plugins/mono/mono-plugin.c
+===================================================================
+--- plugins/mono/mono-plugin.c (revision 37224)
++++ plugins/mono/mono-plugin.c (working copy)
+@@ -29,6 +29,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+
+ #define d(x) (x)
diff --git a/evo-core-mapi-changes.diff b/evo-core-mapi-changes.diff
deleted file mode 100644
index 77efa22..0000000
--- a/evo-core-mapi-changes.diff
+++ /dev/null
@@ -1,111 +0,0 @@
-diff -Nupr 1-evo/calendar/ChangeLog 2-evo/calendar/ChangeLog
---- 1-evo/calendar/ChangeLog 2008-10-22 10:27:20.000000000 +0530
-+++ 2-evo/calendar/ChangeLog 2008-10-22 09:44:22.000000000 +0530
-@@ -534,6 +534,11 @@ License Changes
- (gnome_calendar_on_date_navigator_selection_changed): Use a
- single model for all the views.
-
-+2008-08-13 Suman Manjunath
-+
-+ * gui/dialogs/comp-editor.c (real_send_comp): Don't replace
-+ attachment list if backend can CREATE_MESSAGES
-+
- 2008-08-12 Matthew Barnes
-
- * gui/migration.c:
-diff -Nupr 1-evo/calendar/gui/dialogs/comp-editor.c 2-evo/calendar/gui/dialogs/comp-editor.c
---- 1-evo/calendar/gui/dialogs/comp-editor.c 2008-10-22 10:27:20.000000000 +0530
-+++ 2-evo/calendar/gui/dialogs/comp-editor.c 2008-10-22 09:44:22.000000000 +0530
-@@ -3046,7 +3046,8 @@ real_send_comp (CompEditor *editor, ECal
- set_attendees_for_delegation (send_comp, address, method);
- }
-
-- if (!e_cal_component_has_attachments (priv->comp)) {
-+ if (!e_cal_component_has_attachments (priv->comp)
-+ || e_cal_get_static_capability (priv->client, CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
- if (itip_send_comp (method, send_comp, priv->client,
- NULL, NULL, users)) {
- g_object_unref (send_comp);
-diff -Nupr 1-evo/calendar/gui/itip-utils.c 2-evo/calendar/gui/itip-utils.c
---- 1-evo/calendar/gui/itip-utils.c 2008-10-07 09:00:09.000000000 +0530
-+++ 2-evo/calendar/gui/itip-utils.c 2008-10-20 16:04:33.000000000 +0530
-@@ -1147,7 +1147,7 @@ itip_send_comp (ECalComponentItipMethod
- gchar *subject = NULL;
- gboolean retval = FALSE;
-
-- /* check whether backend could handle sending requests/updates */
-+ /* check whether backend could handle auto-saving requests/updates */
- if (method != E_CAL_COMPONENT_METHOD_PUBLISH && e_cal_get_save_schedules (client))
- return TRUE;
-
-@@ -1157,6 +1157,15 @@ itip_send_comp (ECalComponentItipMethod
- goto cleanup;
- }
-
-+ /* check whether backend could handle sending requests/updates */
-+ if (method != E_CAL_COMPONENT_METHOD_PUBLISH && e_cal_get_static_capability (client, CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
-+ if (users) {
-+ g_list_foreach (users, (GFunc) g_free, NULL);
-+ g_list_free (users);
-+ }
-+ return TRUE;
-+ }
-+
- /* Tidy up the comp */
- comp = comp_compliant (method, send_comp, client, zones);
-
-diff -Nupr 1-evo/plugins/itip-formatter/ChangeLog 2-evo/plugins/itip-formatter/ChangeLog
---- 1-evo/plugins/itip-formatter/ChangeLog 2008-10-20 09:19:46.000000000 +0530
-+++ 2-evo/plugins/itip-formatter/ChangeLog 2008-10-20 16:04:33.000000000 +0530
-@@ -66,6 +66,12 @@ License Changes
-
- * itip-view.h:
-
-+2008-08-14 Suman Manjunath
-+
-+ * itip-formatter.c (update_x), (update_attendee_status): Copy
-+ required X-* properties . This might be needed for special cases
-+ in certain backends.
-+
- 2008-08-11 Matthew Barnes
-
- ** Fixes part of bug #546892
-diff -Nupr 1-evo/plugins/itip-formatter/itip-formatter.c 2-evo/plugins/itip-formatter/itip-formatter.c
---- 1-evo/plugins/itip-formatter/itip-formatter.c 2008-10-20 09:13:02.000000000 +0530
-+++ 2-evo/plugins/itip-formatter/itip-formatter.c 2008-10-20 16:04:33.000000000 +0530
-@@ -1183,6 +1183,26 @@ remove_delegate (struct _itip_puri *piti
-
- }
-
-+static void
-+update_x (ECalComponent *pitip_comp, ECalComponent *comp)
-+{
-+ icalcomponent *itip_icalcomp = e_cal_component_get_icalcomponent (pitip_comp);
-+ icalcomponent *icalcomp = e_cal_component_get_icalcomponent (comp);
-+
-+ icalproperty *prop = icalcomponent_get_first_property (itip_icalcomp, ICAL_X_PROPERTY);
-+ while (prop) {
-+ const char *name = icalproperty_get_x_name (prop);
-+ if (!g_ascii_strcasecmp (name, "X-EVOLUTION-IS-REPLY")) {
-+ icalproperty *new_prop = icalproperty_new_x (icalproperty_get_x (prop));
-+ icalproperty_set_x_name (new_prop, "X-EVOLUTION-IS-REPLY");
-+ icalcomponent_add_property (icalcomp, new_prop);
-+ }
-+ prop = icalcomponent_get_next_property (itip_icalcomp, ICAL_X_PROPERTY);
-+ }
-+
-+ e_cal_component_set_icalcomponent (comp, icalcomp);
-+}
-+
- static void
- update_attendee_status (struct _itip_puri *pitip)
- {
-@@ -1283,6 +1303,8 @@ update_attendee_status (struct _itip_pur
- }
- }
-
-+ update_x (pitip->comp, comp);
-+
- if (itip_view_get_update (ITIP_VIEW (pitip->view))) {
- e_cal_component_commit_sequence (comp);
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, pitip->current_ecal, NULL, NULL, NULL);
diff --git a/evolution-2.24.1.1.tar.bz2 b/evolution-2.24.1.1.tar.bz2
deleted file mode 100644
index ece072d..0000000
--- a/evolution-2.24.1.1.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bd27ffd7a86e619cfa1e23b88cdd234040c2324bf54c2361070a200619d37434
-size 32617635
diff --git a/evolution-2.25.90.tar.bz2 b/evolution-2.25.90.tar.bz2
new file mode 100644
index 0000000..eea4680
--- /dev/null
+++ b/evolution-2.25.90.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0823c676b04f9094dce87b89907573fb818ff419316ee0e630da69ac0f9f2e8b
+size 30219567
diff --git a/evolution-po.tar.gz b/evolution-po.tar.gz
index b82e1bb..c9535b5 100644
--- a/evolution-po.tar.gz
+++ b/evolution-po.tar.gz
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b21d448e1a6f19783b0b368fcb55a7d4c59e3a81fe2641fa155154543d10d59a
-size 1227255
+oid sha256:c6284072f563e62533642dffe590e32b299a0d5fcd90bcd48a0afe78e3e39b40
+size 1356658
diff --git a/evolution.changes b/evolution.changes
index 68867f2..e0765ff 100644
--- a/evolution.changes
+++ b/evolution.changes
@@ -1,9 +1,111 @@
+-------------------------------------------------------------------
+Thu Feb 5 19:21:24 CET 2009 - vuntz@novell.com
+
+- Respinned sharepoint-account-setup.patch and
+ sp-meetingworkspace-ui.patch so that they actually apply. And
+ disable them -- something is definitely broken there. Maybe I
+ didn't respinned them correctly :/
+- Also disable sp-tasks-setup.diff,
+ bnc-449888-handle-no-workspace.patch and
+ sharepoint-account-setup.patch: the whole sharepoint stuff breaks
+ the build.
+
+-------------------------------------------------------------------
+Thu Feb 5 15:12:24 CET 2009 - sbrabec@suse.cz
+
+- Added support for gnome-patch-translation (bnc#464770).
+
+-------------------------------------------------------------------
+Wed Feb 4 15:09:15 IST 2009 - msuman@suse.de
+
+- Update to version 2.25.90:
+ + Bugs fixed: bgo#208426, bgo#245156, bgo#246313, bgo#303738,
+ bgo#310844, bgo#339879, bgo#360813, bgo#489437, bgo#554454,
+ bgo#555310, bgo#563364, bgo#563867, bgo#565376, bgo#565681,
+ bgo#566011, bgo#566572, bgo#566599, bgo#566653, bgo#567031,
+ bgo#567045, bgo#567129, bgo#567148, bgo#567270, bgo#567276,
+ bgo#567280, bgo#567281, bgo#567282, bgo#567285, bgo#567409,
+ bgo#567687, bgo#567744, bgo#318003, bgo#342446, bgo#362754,
+ bgo#442869, bgo#539467, bgo#546637, bgo#559604, bgo#561628,
+ bgo#562449, bgo#567654, bgo#567824, bgo#347287, bnc#443544,
+ bnc#458968, bnc#462372, bnc#450554, bnc#470474, bnc#450535,
+ bnc#463602
+ + Some fixes to use newer non-deprecated Gtk+ APIs, headers.
+ + Updated translations.
+- Disable the Novell ICEDesktop plugin.
+- Added:
+ + compiler-warnings.diff: Fixes a few compiler warnings
+- Dropped these patches already fixed upstream:
+ + bgo-559604-tooltip-for-gw.patch
+ + bnc-435455-attendees-meeting-resize.patch
+ + bnc-439987-classify-sensitivity.patch
+ + bnc-440624-six-appts-timeslot.patch
+ + bnc-443544-evo-free-busy.patch
+ + bnc-456481-evolution-eats-memory.patch
+ + bnc-458153-busy-button.patch
+ + bnc-458968-warning-on-delegating.patch
+ + bnc-462372-open-attachment-event.patch
+ + bnc-463599-header-print-issues.patch
+ + pst-import.patch
+
+------------------------------------------------------------------
+Wed Feb 4 15:09:15 IST 2009 - msuman@suse.de
+
+- Update to version 2.25.90:
+ + Bugs fixed: bgo#208426, bgo#245156, bgo#246313, bgo#303738,
+ bgo#310844, bgo#339879, bgo#360813, bgo#489437, bgo#554454,
+ bgo#555310, bgo#563364, bgo#563867, bgo#565376, bgo#565681,
+ bgo#566011, bgo#566572, bgo#566599, bgo#566653, bgo#567031,
+ bgo#567045, bgo#567129, bgo#567148, bgo#567270, bgo#567276,
+ bgo#567280, bgo#567281, bgo#567282, bgo#567285, bgo#567409,
+ bgo#567687, bgo#567744, bgo#318003, bgo#342446, bgo#362754,
+ bgo#442869, bgo#539467, bgo#546637, bgo#559604, bgo#561628,
+ bgo#562449, bgo#567654, bgo#567824, bgo#347287, bnc#443544,
+ bnc#458968, bnc#462372, bnc#450554, bnc#470474, bnc#450535,
+ bnc#463602
+ + Some fixes to use newer non-deprecated Gtk+ APIs, headers.
+ + Updated translations.
+- Disable the Novell ICEDesktop plugin.
+- Added:
+ + compiler-warnings.diff: Fixes a few compiler warnings
+- Dropped these patches already fixed upstream:
+ + bgo-559604-tooltip-for-gw.patch
+ + bnc-435455-attendees-meeting-resize.patch
+ + bnc-439987-classify-sensitivity.patch
+ + bnc-440624-six-appts-timeslot.patch
+ + bnc-443544-evo-free-busy.patch
+ + bnc-456481-evolution-eats-memory.patch
+ + bnc-458153-busy-button.patch
+ + bnc-458968-warning-on-delegating.patch
+ + bnc-462372-open-attachment-event.patch
+ + bnc-463599-header-print-issues.patch
+ + pst-import.patch
+
+-------------------------------------------------------------------
+Mon Jan 12 15:25:27 EST 2009 - mauro@suse.de
+
+- Translations update.
+
------------------------------------------------------------------
Mon Jan 12 13:49:48 CET 2009 - pchenthill@suse.de
- + bnc #449899 - sp-process-meetings.diff - show accept/decline
options for sharepoint meetings.
+------------------------------------------------------------------
+Sun Jan 11 16:40:44 IST 2009 - msuman@suse.de
+
+- Pruning changes from the factory submission:
+ + Dropped these patches already fixed upstream:
+ + bgo-559604-calendar-tooltip-updated.patch
+ + bgo-564248-evo-copy-paste-images.patch
+ + bnc-435694-retract-feature-broken.patch
+ + bnc-446285-traverse-all-entries.patch
+ + bnc-446287-missing-vcf-reader.patch
+ + bnc-449952-hotkey-evo-preferences.patch
+ + bnc-439998-delete-delegated-events.patch
+ + bnc-462349-shared-memo-editor.patch
+
-------------------------------------------------------------------
Fri Jan 9 00:18:22 CET 2009 - mauro@suse.de
@@ -67,6 +169,60 @@ Wed Jan 7 11:27:13 CET 2009 - abharath@suse.de
+ bnc#463587 - [PATCH] evolution --force-shutdown Tries To Kill All
Users.
+-------------------------------------------------------------------
+Tue Jan 6 13:34:55 IST 2009 - msuman@suse.de
+
+- Update to version 2.25.4:
+ + Bugs fixed: bnc#435694, bnc#439998, bnc#446285, bgo#546437,
+ bgo#546860, bgo#558337, bgo#559153, bgo#559604, bgo#562091,
+ bgo#562155, bgo#564248, bgo#565628, bgo#565857, bgo#566206
+ + Updated translations
+
+-------------------------------------------------------------------
+Tue Dec 30 09:36:10 IST 2008 - msuman@suse.de
+
+- Split out the mono stuff into a separate evolution-mono subpackage
+
+-------------------------------------------------------------------
+Wed Dec 24 15:24:56 IST 2008 - msuman@suse.de
+
+- Update to version 2.25.3.1:
+ + Bugs fixed: bgo#332729, bgo#359745, bgo#386036, bgo#490503,
+ bgo#503662, bgo#524377, bgo#541121, bgo#552583, bgo#552850,
+ bgo#554450, bgo#554464, bgo#555276, bgo#556224, bgo#557246,
+ bgo#557581, bgo#557726, bgo#557818, bgo#558322, bgo#558354,
+ bgo#559371, bgo#559518, bgo#559604, bgo#559701, bgo#559810,
+ bgo#560138, bgo#560329, bgo#560882, bgo#561467, bgo#332629,
+ bgo#332629, bgo#333224, bgo#337082, bgo#348299, bgo#350725,
+ bgo#352287, bgo#549964, bgo#551599, bgo#552357, bgo#552583,
+ bgo#552583, bgo#555371, bgo#555663, bgo#556303, bgo#558498,
+ bgo#560420, bgo#562228, bgo#562990, bgo#563077, bgo#563250,
+ bgo#563369, bgo#563633, bgo#563669, bgo#563870, bgo#564351,
+ bnc#434320, bnc#437226, bnc#440007, bnc#440646, bnc#443190,
+ bnc#446286
+ + Updated translations
+- Re-based old patches.
+- Dropped these patches fixed upstream:
+ + bgo-332729-invalid-write-econfig.patch
+ + bgo-556224-search-events-offline.patch
+ + bgo-558354-alarm-notify-improved.patch
+ + bgo-562228-evo-mailbox-field.patch
+ + bnc-434320-mail-notify-fix.patch
+ + bnc-435452-lose-attendees-busy-search.patch
+ + bnc-439733-bogofilter-junk-training.patch
+ + bnc-440646-set-color-proxy.patch
+ + bnc-440649-display-meeting-bold.patch
+ + bnc-441763-diff-meeting-icon.patch
+ + bnc-441770-non-intrusive-calendar.patch
+ + bnc-442135-exchange-settings-offline.patch
+ + bnc-443190-warning-before-editing-appt.patch
+ + bnc-443851-calendar-tooltip-info.patch
+ + bnc-446286-message-tracking-status.patch
+ + bnc-446356-a11y-crash.diff
+ + bnc-446390-corrupted-vfolders.patch
+ + evo-core-mapi-changes.diff
+ + remove-nm-dep.patch
+
-------------------------------------------------------------------
Thu Dec 4 12:13:42 CET 2008 - abharath@suse.de
diff --git a/evolution.spec b/evolution.spec
index 178451a..197a37f 100644
--- a/evolution.spec
+++ b/evolution.spec
@@ -1,5 +1,5 @@
#
-# spec file for package evolution (Version 2.24.1.1)
+# spec file for package evolution (Version 2.25.90)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -20,7 +20,6 @@
Name: evolution
BuildRequires: bison
-BuildRequires: dice-devel
%if %suse_version > 1100
BuildRequires: evoldap2-devel
%else
@@ -31,18 +30,18 @@ BuildRequires: fdupes
BuildRequires: gnome-common
BuildRequires: gnome-doc-utils-devel
BuildRequires: gnome-icon-theme-devel
+BuildRequires: gnome-patch-translation
BuildRequires: gnome-pilot-devel
BuildRequires: gtk-doc
BuildRequires: gtkhtml2-devel
BuildRequires: intltool
+BuildRequires: libgweather-devel >= 2.25.4
BuildRequires: libidl
BuildRequires: libnotify-devel
BuildRequires: libpisock-devel
BuildRequires: libpisync-devel
BuildRequires: libpst-devel
-BuildRequires: mono-devel
BuildRequires: mozilla-nss-devel
-BuildRequires: ndesk-dbus-glib-devel
BuildRequires: notification-daemon
BuildRequires: nss-shared-helper-devel
BuildRequires: perl-XML-Parser
@@ -56,130 +55,53 @@ BuildRequires: update-desktop-files
License: LGPL v2.0 only; LGPL v3 only
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.1
-Release: 10
+%define evolution_base_version 2.26
+Version: 2.25.90
+Release: 1
Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
-Source0: %{name}-%{version}.tar.bz2
+Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution/2.25/%{name}-%{version}.tar.bz2
Source1: summerdance-about2.png
Source2: ximian-evolution-desktop-files.tar.bz2
Source3: ximian-evolution-pixmaps.tar.bz2
Source4: %{name}-po.tar.gz
Patch4: evolution-desktop.patch
-Patch6: remove-nm-dep.patch
# PATCH-NEEDS-REBASE calendar-sendbutton.patch -- It also needs a proper description and a bug number
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 abharath@suse.de -- 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 bgo-556224-search-events-offline.patch bgo556224 -- Fix has been submitted upstream.
-Patch24: bgo-556224-search-events-offline.patch
# PATCH-FIX-OPENSUSE bnc-433448-backup-restore-fails.patch bnc433448 abharath@suse.de -- Not required upstream.
Patch25: bnc-433448-backup-restore-fails.patch
-# PATCH-FIX-UPSTREAM bnc-434320-mail-notify-fix.patch bnc434320 sragavan@novell.com -- Fix has been submitted upstream.
-Patch26: bnc-434320-mail-notify-fix.patch
-# PATCH-FIX-UPSTREAM bnc-440624-six-appts-timeslot.patch bnc440624 bgo246313 -- Fix has been submitted upstream.
-Patch27: bnc-440624-six-appts-timeslot.patch
-# PATCH-FIX-UPSTREAM bnc-440646-set-color-proxy.patch bnc440646 msuman@suse.de -- Fix is upstream since 2.24.2
-Patch28: bnc-440646-set-color-proxy.patch
-# PATCH-FIX-UPSTREAM bnc-440649-display-meeting-bold.patch bnc440649 bgo490503 -- Fix is upstream since 2.25.3
-Patch29: bnc-440649-display-meeting-bold.patch
-# PATCH-FIX-UPSTREAM bnc-443190-warning-before-editing-appt.patch bnc443190 msuman@suse.de -- Fix is upstream since 2.24.2
-Patch30: bnc-443190-warning-before-editing-appt.patch
-# PATCH-FIX-UPSTREAM bnc-443851-calendar-tooltip-info.patch bnc443851 bgo559604 -- Fix has been submitted upstream.
-Patch31: bnc-443851-calendar-tooltip-info.patch
-# PATCH-FIX-UPSTREAM bnc-446356-a11y-crash.diff bnc446356 bgo560329 -- Fix is upstream since 2.24.2
-Patch32: bnc-446356-a11y-crash.diff
-# PATCH-FIX-UPSTREAM bnc-446390-corrupted-vfolders.patch bnc446390 bgo559604 sragavan@novell.com -- Fix has been submitted upstream.
-Patch33: bnc-446390-corrupted-vfolders.patch
-# PATCH-FIX-UPSTREAM bnc-446286-message-tracking-status.patch bnc446286 abharath@suse.de -- Fix has been submitted upstream.
-Patch34: bnc-446286-message-tracking-status.patch
# PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream.
Patch35: bnc-210959-evo-accept-ics.patch
# PATCH-FIX-UPSTREAM sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to be upstreamed.
Patch36: sp-tasks-setup.diff
-# PATCH-FIX-UPSTREAM bgo-332729-invalid-write-econfig.patch bgo332729 -- Fix has been submitted upstream.
-Patch37: bgo-332729-invalid-write-econfig.patch
-# PATCH-FIX-UPSTREAM bgo-562228-evo-mailbox-field.patch bgo562228 -- Fix has been submitted upstream.
-Patch38: bgo-562228-evo-mailbox-field.patch
-# PATCH-FIX-UPSTREAM bnc-435452-lose-attendees-busy-search.patch bnc435452 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
-Patch39: bnc-435452-lose-attendees-busy-search.patch
-# PATCH-FIX-UPSTREAM bnc-439733-bogofilter-junk-training.patch bnc439733 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
-Patch40: bnc-439733-bogofilter-junk-training.patch
# PATCH-FIX-UPSTREAM sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to be upstreamed.
Patch41: sp-meetingworkspace-ui.patch
# PATCH-FIX-UPSTREAM bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to be upstreamed.
Patch42: bnc-449888-handle-no-workspace.patch
-# PATCH-FIX-UPSTREAM bgo-559153-evo-migration.patch bgo559153 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
+# PATCH-NEEDS-REBASE bgo-559153-evo-migration.patch bgo559153 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
Patch43: bgo-559153-evo-migration.patch
-# PATCH-FIX-UPSTREAM bgo-559604-calendar-tooltip-updated.patch bgo559604 -- Patch is part of GNOME 2.25.5 release.
-Patch44: bgo-559604-calendar-tooltip-updated.patch
-# PATCH-FIX-UPSTREAM bgo-564248-evo-copy-paste-images.patch bgo564248 -- Patch is part of GNOME 2.25.5 release.
-Patch45: bgo-564248-evo-copy-paste-images.patch
-# PATCH-FIX-UPSTREAM bnc-435694-retract-feature-broken.patch bnc435694 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch46: bnc-435694-retract-feature-broken.patch
-# PATCH-FIX-UPSTREAM bnc-446285-traverse-all-entries.patch bnc446285 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch47: bnc-446285-traverse-all-entries.patch
-# PATCH-FIX-UPSTREAM bnc-446287-missing-vcf-reader.patch sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
-Patch48: bnc-446287-missing-vcf-reader.patch
-# PATCH-FIX-UPSTREAM bnc-449952-hotkey-evo-preferences.patch bnc449952 sragavan@novell.com -- Patch needs to be upstreamed.
-Patch49: bnc-449952-hotkey-evo-preferences.patch
-# PATCH-FIX-UPSTREAM bnc-443544-evo-free-busy.patch bnc443544 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch50: bnc-443544-evo-free-busy.patch
-# PATCH-FIX-UPSTREAM bnc-435455-attendees-meeting-resize.patch bnc435455 shashish@suse.de -- Patch needs to be upstreamed.
-Patch51: bnc-435455-attendees-meeting-resize.patch
-# PATCH-FIX-UPSTREAM bnc-439998-delete-delegated-events.patch bnc439998 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch52: bnc-439998-delete-delegated-events.patch
# PATCH-FIX-SLED bnc-440634-forwarded-hide-accept-decline.patch bnc440634 abharath@suse.de -- Make GW understand folders better.
Patch53: bnc-440634-forwarded-hide-accept-decline.patch
# PATCH-FIX-SLED bnc-445996-address-conflict.patch bnc445996 shashish@suse.de -- Needs to be moved out of glade files.
Patch54: bnc-445996-address-conflict.patch
-# PATCH-FIX-UPSTREAM bnc-458153-busy-button.patch bnc458153 shashish@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch55: bnc-458153-busy-button.patch
-# PATCH-FIX-UPSTREAM bnc-462349-shared-memo-editor.patch bnc462349 -- Patch is part of GNOME 2.25.5 release.
-Patch56: bnc-462349-shared-memo-editor.patch
-# PATCH-FIX-UPSTREAM bnc-463599-header-print-issues.patch bnc463599 abharath@suse.de -- Patch needs to be upstreamed.
-Patch57: bnc-463599-header-print-issues.patch
-# PATCH-FIX-UPSTREAM bnc-439987-classify-sensitivity.patch bnc439987 pchenthill@suse.de -- Patch needs to be upstreamed.
-Patch58: bnc-439987-classify-sensitivity.patch
-# PATCH-FIX-UPSTREAM bnc-456481-evolution-eats-memory.patch bnc456481 sragavan@novell.com -- Patch needs to be upstreamed.
-Patch59: bnc-456481-evolution-eats-memory.patch
-# PATCH-FIX-UPSTREAM bnc-462372-open-attachment-event.patch bnc462372 shashish@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch60: bnc-462372-open-attachment-event.patch
-# PATCH-FIX-UPSTREAM bnc-458968-warning-on-delegating.patch bnc458968 msuman@suse.de -- Patch is part of GNOME 2.25.5 release.
-Patch61: bnc-458968-warning-on-delegating.patch
-# PATCH-FIX-UPSTREAM bgo-559604-tooltip-for-gw.patch bgo559604 -- Patch needs to be upstreamed.
-Patch62: bgo-559604-tooltip-for-gw.patch
-# PATCH-FIX-UPSTREAM evo-core-mapi-changes.diff msuman@suse.de -- Fix is upstream since 2.25.3
-Patch100: evo-core-mapi-changes.diff
+# PATCH-FIX-UPSTREAM compiler-warnings.diff msuman@suse.de -- Fix for a few compiler warnings, available upstream in 2.25.91
+Patch63: compiler-warnings.diff
# PATCH-FIX-SLED sp-process-meetings.diff pchenthill@suse.de -- Fix for bug 449899 (bnc)
Patch101: sp-process-meetings.diff
Url: http://gnome.org/projects/evolution/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Requires: yelp
Recommends: bogofilter
-Requires: gtkhtml2 >= 3.10.0
-Requires: evolution-data-server >= 2.24.1.1
-Requires: gnome-icon-theme >= 2.10.0
Requires: %{name}-lang = %{version}
%gconf_schemas_prereq
@@ -287,6 +209,7 @@ Requires: gtkhtml2-devel
Requires: libbonoboui-devel
Requires: libgnome-devel
Requires: libgnomeui-devel
+Requires: libgweather-devel >= 2.25.4
Requires: libnotify-devel
Requires: libopenssl-devel
Requires: libxml2-devel
@@ -313,6 +236,114 @@ embed the existing ones in other applications.
+Authors:
+--------
+ Addressbook
+ Arturo Esponosa (Original Gnomecard author)
+ Nat Friedman
+ Chris Lahey
+ Chris Toshok
+ Jon Trowbridge
+
+ Artwork
+ Tuomas Kuosmanen
+ Jakub Steiner
+
+ Calendar
+ Seth Alves
+ Eric Busboom (libical author)
+ Arturo Esponosa (Gnomecal contributor)
+ Damon Chaplin
+ Federico Mena-Quintero
+ Rodrigo Moya
+ Jesse Pavel
+ JP Rosevear
+ Russell Steinthal (Gnomecal maintainer)
+
+ Documentation
+ Kevin Breit
+ Aaron Weber
+
+ Mailer
+ Radek Doulik
+ Larry Ewing
+ Bertrand Guiheneuf
+ Jason Leach
+ Matt Loper
+ Ettore Perazzoli
+ Jeffrey Stedfast
+ Jon Trowbridge
+ Peter Williams
+ Dan Winship
+ Michael Zucchi
+
+ Notes
+ Anders Carlsson
+
+ Pilot
+ JP Rosevear
+
+ Shell
+ Miguel de Icaza
+ Jason Leach
+ Ettore Perazzoli
+
+ Translations
+ Akira TAGOH
+ Andraz Tori
+ Andreas Hyden
+ Arjan Scherpenisse
+ Clara Tattoni
+ Fatih Demir
+ Gediminas Paulauskas
+ GNOME PL Team
+ Gustavo Maciel Dias Vieira
+ Héctor García Alvarez
+ Jesús Bravo Álvarez
+ Keld Simonsen
+ Kjartan Maraas
+ Matthias Warkus
+ Spiros Papadimitriou
+ Sung-Hyun Nam
+ Szabolcs BAN
+ Tiago Antão
+ Valek Filippov
+ Vincent Renardias
+ Yuri Syrota
+
+ UI
+ Anna Dirks
+
+ Widgets
+ Damon Chaplin
+ Miguel de Icaza
+ Chris Lahey
+ Federico Mena-Quintero
+ Chris Toshok
+
+%package mono-plugins
+License: LGPL v2.0 only; LGPL v3 only
+Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
+Group: Productivity/Networking/Email/Clients
+Requires: evolution = %{?epoch:}%{version}-%{release}
+# Dice support is disabled
+#BuildRequires: dice-devel
+BuildRequires: evolution-sharp
+BuildRequires: gconf-sharp2
+BuildRequires: glib-sharp2
+BuildRequires: gnome-sharp2
+BuildRequires: gtk-sharp2
+BuildRequires: mono-devel
+BuildRequires: ndesk-dbus-glib-devel
+
+%description mono-plugins
+Evolution consists of modular components (at the moment: mailer,
+calendar, and address book) that should make daily life easier. Because
+of the modular design, it is possible to plug new components into
+Evolution or embed the existing ones in other applications.
+
+
+
Authors:
--------
Addressbook
@@ -401,62 +432,32 @@ Authors:
%lang_package
%prep
%setup -q -a4
+gnome-patch-translation-prepare
%patch4
-%patch6
# %patch7
%patch8
%patch9
-%patch13
%patch15 -p1
%patch16 -p1
-%patch17
%patch18
%patch19
-%patch20
-%patch21
-%patch22
-%patch23 -p1
-%patch24
+# Disable: breaks the build
+#%patch23 -p1
%patch25
-%patch26
-%patch27
-%patch28
-%patch29
-%patch30
-%patch31
-%patch32
-%patch33
-%patch34
%patch35
-%patch36 -p1
-%patch37
-%patch38
-%patch39
-%patch40
-%patch41 -p1
-%patch42 -p1
-%patch43
-%patch44
-%patch45
-%patch46
-%patch47
-%patch48
-%patch49
-%patch50
-%patch51
-%patch52
+# Disable: breaks the build
+#%patch36 -p1
+# Disable: breaks the build
+#%patch41 -p1
+# Disable: breaks the build
+#%patch42 -p1
+###%patch43
%patch53
%patch54
-%patch55
-%patch56
-%patch57
-%patch58
-%patch59
-%patch60
-%patch61
-%patch62
-%patch100 -p1
-%patch101 -p1
+%patch63
+# Disable: breaks the build
+#%patch101 -p1
+gnome-patch-translation-update
%build
autoreconf -f -i
@@ -473,13 +474,16 @@ export FFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fstack-protector"
%endif
--with-pisock \
--enable-pilot-conduits=yes \
- --with-krb5=/usr \
- --with-static-ldap=no \
+ --with-krb4=%{_prefix} \
+ --with-krb5=%{_prefix} \
--enable-nss=yes \
+ --enable-smime=yes \
+ --enable-exchange=yes \
--enable-ipv6=yes \
--enable-default-binary=yes \
--enable-mono=yes \
- --enable-icedesktop=yes
+ --enable-icedesktop=no \
+ --disable-static
# Processing the files in help uses _lots_ of memory, so running that part in parallel is bad.
pushd help
%{__make}
@@ -487,9 +491,11 @@ popd
%{__make} %{?jobs:-j%jobs}
%install
-%{__make} DESTDIR=$RPM_BUILD_ROOT install
+%{makeinstall}
+# Remove the libtool archive files
+%{__rm} $RPM_BUILD_ROOT/%{_libdir}/evolution/*/*.la
+%{__rm} $RPM_BUILD_ROOT/%{_libdir}/evolution/*/*/*.la
%{__cp} %{SOURCE1} $RPM_BUILD_ROOT/%{_datadir}/evolution/%evolution_base_version/images/about-box.png
-%suse_update_desktop_file -G "Mail and Calendar" -D "evolution-%evolution_base_version" evolution Core-Office
for xml in $RPM_BUILD_ROOT/%{_datadir}/gnome/help/evolution-*/*/evolution-*.xml; do
meinproc --check --cache `echo $xml | sed 's/xml$/cache.bz2/'` $xml || :
done
@@ -499,6 +505,7 @@ done
%suse_update_desktop_file -G "Address Book" -D "evolution-%evolution_base_version/evolution-%evolution_base_version.xml?usage-contact" evolution-addressbook
%suse_update_desktop_file -G "Schedule Manager" -D "evolution-%evolution_base_version/evolution-%evolution_base_version.xml?usage-calendar" evolution-calendar
%suse_update_desktop_file -G "Task List" -D "evolution-%evolution_base_version/evolution-%evolution_base_version.xml?usage-calendar-todo" evolution-tasklist
+%suse_update_desktop_file -G "Mail and Calendar" -D "evolution-%evolution_base_version" evolution Core-Office
# Install the Ximian pixmaps.
%{__mkdir_p} $RPM_BUILD_ROOT/%{_datadir}/pixmaps
%{__tar} --bzip2 -xf %{SOURCE3} -C $RPM_BUILD_ROOT/%{_datadir}/pixmaps/
@@ -506,14 +513,11 @@ done
%find_lang evolution evolution-%evolution_base_version.lang
%find_gconf_schemas
%{__cat} %{name}.schemas_list >%{name}.lst
-#%{__rm} $RPM_BUILD_ROOT/%{_libdir}/*.*a
-%{__rm} $RPM_BUILD_ROOT/%{_libdir}/evolution/*/*.*a
-%{__rm} $RPM_BUILD_ROOT/%{_libdir}/evolution/*/*/*.*a
%{__rm} -r $RPM_BUILD_ROOT%{_datadir}/mime-info
%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\ncase \$1 in\n\t\"--force-shutdown\")\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@ &\n\t\tpkill -u \$LOGNAME evolution.bin\n\t\t;;\n\t*)\n\t\tLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir}/mono:%{_libdir}/dice exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n\t\t;;\n\nesac\n\nexit \$?" > $RPM_BUILD_ROOT/%{_bindir}/evolution
+echo -e "#!/bin/sh\n\nLD_LIBRARY_PATH=%{_libdir}/evoldap/lib exec -a \"%{_bindir}/evolution\" %{_bindir}/evolution.bin \$@\n" > $RPM_BUILD_ROOT/%{_bindir}/evolution
%{__chmod} +x $RPM_BUILD_ROOT/%{_bindir}/evolution
%endif
@@ -551,7 +555,49 @@ fi
%dir %{_libdir}/evolution/*
%{_libdir}/evolution/*/*.so.*
%{_libdir}/evolution/*/components
-%{_libdir}/evolution/*/plugins
+%dir %{_libdir}/evolution/*/plugins
+%{_libdir}/evolution/*/plugins/attachment-reminder.glade
+%{_libdir}/evolution/*/plugins/templates.glade
+%{_libdir}/evolution/*/plugins/*-account-disable.*
+%{_libdir}/evolution/*/plugins/*-addressbook-file.*
+%{_libdir}/evolution/*/plugins/*-backup-restore.*
+%{_libdir}/evolution/*/plugins/*-bogo-junk-plugin.*
+%{_libdir}/evolution/*/plugins/*-calendar-file.*
+%{_libdir}/evolution/*/plugins/*-calendar-http.*
+%{_libdir}/evolution/*/plugins/*-calendar-weather.*
+%{_libdir}/evolution/*/plugins/*-compose-send-options.*
+%{_libdir}/evolution/*/plugins/*-copy-tool.*
+%{_libdir}/evolution/*/plugins/*-default-mailer.*
+%{_libdir}/evolution/*/plugins/*-default-source.*
+%{_libdir}/evolution/*/plugins/*-email-custom-header.*
+%{_libdir}/evolution/*/plugins/*-evolution-attachment-reminder.*
+%{_libdir}/evolution/*/plugins/*-evolution-bbdb.*
+%{_libdir}/evolution/*/plugins/*-evolution-caldav.*
+%{_libdir}/evolution/*/plugins/*-evolution-google.*
+%{_libdir}/evolution/*/plugins/*-evolution-mail-attachments-import-ics.*
+%{_libdir}/evolution/*/plugins/*-evolution-startup-wizard.*
+%{_libdir}/evolution/*/plugins/*-evolution-webdav.*
+%{_libdir}/evolution/*/plugins/*-exchange-*-subscription.*
+%{_libdir}/evolution/*/plugins/*-exchange-operations.*
+%{_libdir}/evolution/*/plugins/*-face.*
+%{_libdir}/evolution/*/plugins/*-folder-*.*
+%{_libdir}/evolution/*/plugins/*-groupwise-features.*
+%{_libdir}/evolution/*/plugins/*-gw-account-setup.*
+%{_libdir}/evolution/*/plugins/*-imap-features.*
+%{_libdir}/evolution/*/plugins/*-itip-formatter.*
+%{_libdir}/evolution/*/plugins/*-mailing-list-actions.*
+%{_libdir}/evolution/*/plugins/*-mail-notification.*
+%{_libdir}/evolution/*/plugins/*-mail-to-task.*
+%{_libdir}/evolution/*/plugins/*-mark-all-read.*
+%{_libdir}/evolution/*/plugins/*-plugin-manager.*
+%{_libdir}/evolution/*/plugins/*-prefer-plain.*
+%{_libdir}/evolution/*/plugins/*-pst-import.*
+%{_libdir}/evolution/*/plugins/*-publish-calendar.*
+%{_libdir}/evolution/*/plugins/*-sa-junk-plugin.*
+%{_libdir}/evolution/*/plugins/*-save-calendar.*
+%{_libdir}/evolution/*/plugins/*-select-one-source.*
+%{_libdir}/evolution/*/plugins/*-subject-thread.*
+%{_libdir}/evolution/*/plugins/*-templates.*
%{_libdir}/evolution/*/csv2vcard
%{_libdir}/evolution/*/evolution-*
%{_libdir}/evolution/*/killev
@@ -569,10 +615,100 @@ fi
%{_datadir}/gnome-pilot/conduits/*.conduit
%{_libdir}/evolution/*/conduits
+%files mono-plugins
+%defattr(-,root,root)
+%{_libdir}/evolution/*/plugins/*-evolution-mono.*
+# Dice support is disabled
+#%{_libdir}/evolution/*/plugins/*-sharepoint-*
+#%{_libdir}/evolution/*/plugins/*.dll
+
%changelog
+* Thu Feb 05 2009 vuntz@novell.com
+- Respinned sharepoint-account-setup.patch and
+ sp-meetingworkspace-ui.patch so that they actually apply. And
+ disable them -- something is definitely broken there. Maybe I
+ didn't respinned them correctly :/
+- Also disable sp-tasks-setup.diff,
+ bnc-449888-handle-no-workspace.patch and
+ sharepoint-account-setup.patch: the whole sharepoint stuff breaks
+ the build.
+* Thu Feb 05 2009 sbrabec@suse.cz
+- Added support for gnome-patch-translation (bnc#464770).
+* Wed Feb 04 2009 msuman@suse.de
+- Update to version 2.25.90:
+ + Bugs fixed: bgo#208426, bgo#245156, bgo#246313, bgo#303738,
+ bgo#310844, bgo#339879, bgo#360813, bgo#489437, bgo#554454,
+ bgo#555310, bgo#563364, bgo#563867, bgo#565376, bgo#565681,
+ bgo#566011, bgo#566572, bgo#566599, bgo#566653, bgo#567031,
+ bgo#567045, bgo#567129, bgo#567148, bgo#567270, bgo#567276,
+ bgo#567280, bgo#567281, bgo#567282, bgo#567285, bgo#567409,
+ bgo#567687, bgo#567744, bgo#318003, bgo#342446, bgo#362754,
+ bgo#442869, bgo#539467, bgo#546637, bgo#559604, bgo#561628,
+ bgo#562449, bgo#567654, bgo#567824, bgo#347287, bnc#443544,
+ bnc#458968, bnc#462372, bnc#450554, bnc#470474, bnc#450535,
+ bnc#463602
+ + Some fixes to use newer non-deprecated Gtk+ APIs, headers.
+ + Updated translations.
+- Disable the Novell ICEDesktop plugin.
+- Added:
+ + compiler-warnings.diff: Fixes a few compiler warnings
+- Dropped these patches already fixed upstream:
+ + bgo-559604-tooltip-for-gw.patch
+ + bnc-435455-attendees-meeting-resize.patch
+ + bnc-439987-classify-sensitivity.patch
+ + bnc-440624-six-appts-timeslot.patch
+ + bnc-443544-evo-free-busy.patch
+ + bnc-456481-evolution-eats-memory.patch
+ + bnc-458153-busy-button.patch
+ + bnc-458968-warning-on-delegating.patch
+ + bnc-462372-open-attachment-event.patch
+ + bnc-463599-header-print-issues.patch
+ + pst-import.patch
+- Update to version 2.25.90:
+ + Bugs fixed: bgo#208426, bgo#245156, bgo#246313, bgo#303738,
+ bgo#310844, bgo#339879, bgo#360813, bgo#489437, bgo#554454,
+ bgo#555310, bgo#563364, bgo#563867, bgo#565376, bgo#565681,
+ bgo#566011, bgo#566572, bgo#566599, bgo#566653, bgo#567031,
+ bgo#567045, bgo#567129, bgo#567148, bgo#567270, bgo#567276,
+ bgo#567280, bgo#567281, bgo#567282, bgo#567285, bgo#567409,
+ bgo#567687, bgo#567744, bgo#318003, bgo#342446, bgo#362754,
+ bgo#442869, bgo#539467, bgo#546637, bgo#559604, bgo#561628,
+ bgo#562449, bgo#567654, bgo#567824, bgo#347287, bnc#443544,
+ bnc#458968, bnc#462372, bnc#450554, bnc#470474, bnc#450535,
+ bnc#463602
+ + Some fixes to use newer non-deprecated Gtk+ APIs, headers.
+ + Updated translations.
+- Disable the Novell ICEDesktop plugin.
+- Added:
+ + compiler-warnings.diff: Fixes a few compiler warnings
+- Dropped these patches already fixed upstream:
+ + bgo-559604-tooltip-for-gw.patch
+ + bnc-435455-attendees-meeting-resize.patch
+ + bnc-439987-classify-sensitivity.patch
+ + bnc-440624-six-appts-timeslot.patch
+ + bnc-443544-evo-free-busy.patch
+ + bnc-456481-evolution-eats-memory.patch
+ + bnc-458153-busy-button.patch
+ + bnc-458968-warning-on-delegating.patch
+ + bnc-462372-open-attachment-event.patch
+ + bnc-463599-header-print-issues.patch
+ + pst-import.patch
+* Mon Jan 12 2009 mauro@suse.de
+- Translations update.
* Mon Jan 12 2009 pchenthill@suse.de
- + bnc #449899 - sp-process-meetings.diff - show accept/decline
options for sharepoint meetings.
+* Sun Jan 11 2009 msuman@suse.de
+- Pruning changes from the factory submission:
+ + Dropped these patches already fixed upstream:
+ + bgo-559604-calendar-tooltip-updated.patch
+ + bgo-564248-evo-copy-paste-images.patch
+ + bnc-435694-retract-feature-broken.patch
+ + bnc-446285-traverse-all-entries.patch
+ + bnc-446287-missing-vcf-reader.patch
+ + bnc-449952-hotkey-evo-preferences.patch
+ + bnc-439998-delete-delegated-events.patch
+ + bnc-462349-shared-memo-editor.patch
* Fri Jan 09 2009 mauro@suse.de
- Translations update.
* Wed Jan 07 2009 abharath@suse.de
@@ -628,6 +764,51 @@ fi
- Changes to the spec
+ bnc#463587 - [PATCH] evolution --force-shutdown Tries To Kill All
Users.
+* Tue Jan 06 2009 msuman@suse.de
+- Update to version 2.25.4:
+ + Bugs fixed: bnc#435694, bnc#439998, bnc#446285, bgo#546437,
+ bgo#546860, bgo#558337, bgo#559153, bgo#559604, bgo#562091,
+ bgo#562155, bgo#564248, bgo#565628, bgo#565857, bgo#566206
+ + Updated translations
+* Tue Dec 30 2008 msuman@suse.de
+- Split out the mono stuff into a separate evolution-mono subpackage
+* Wed Dec 24 2008 msuman@suse.de
+- Update to version 2.25.3.1:
+ + Bugs fixed: bgo#332729, bgo#359745, bgo#386036, bgo#490503,
+ bgo#503662, bgo#524377, bgo#541121, bgo#552583, bgo#552850,
+ bgo#554450, bgo#554464, bgo#555276, bgo#556224, bgo#557246,
+ bgo#557581, bgo#557726, bgo#557818, bgo#558322, bgo#558354,
+ bgo#559371, bgo#559518, bgo#559604, bgo#559701, bgo#559810,
+ bgo#560138, bgo#560329, bgo#560882, bgo#561467, bgo#332629,
+ bgo#332629, bgo#333224, bgo#337082, bgo#348299, bgo#350725,
+ bgo#352287, bgo#549964, bgo#551599, bgo#552357, bgo#552583,
+ bgo#552583, bgo#555371, bgo#555663, bgo#556303, bgo#558498,
+ bgo#560420, bgo#562228, bgo#562990, bgo#563077, bgo#563250,
+ bgo#563369, bgo#563633, bgo#563669, bgo#563870, bgo#564351,
+ bnc#434320, bnc#437226, bnc#440007, bnc#440646, bnc#443190,
+ bnc#446286
+ + Updated translations
+- Re-based old patches.
+- Dropped these patches fixed upstream:
+ + bgo-332729-invalid-write-econfig.patch
+ + bgo-556224-search-events-offline.patch
+ + bgo-558354-alarm-notify-improved.patch
+ + bgo-562228-evo-mailbox-field.patch
+ + bnc-434320-mail-notify-fix.patch
+ + bnc-435452-lose-attendees-busy-search.patch
+ + bnc-439733-bogofilter-junk-training.patch
+ + bnc-440646-set-color-proxy.patch
+ + bnc-440649-display-meeting-bold.patch
+ + bnc-441763-diff-meeting-icon.patch
+ + bnc-441770-non-intrusive-calendar.patch
+ + bnc-442135-exchange-settings-offline.patch
+ + bnc-443190-warning-before-editing-appt.patch
+ + bnc-443851-calendar-tooltip-info.patch
+ + bnc-446286-message-tracking-status.patch
+ + bnc-446356-a11y-crash.diff
+ + bnc-446390-corrupted-vfolders.patch
+ + evo-core-mapi-changes.diff
+ + remove-nm-dep.patch
* Thu Dec 04 2008 abharath@suse.de
- Patches added
+ bgo#332729 - bgo-332729-invalid-write-econfig.patch - invalid
diff --git a/pst-import.patch b/pst-import.patch
deleted file mode 100644
index b56cf36..0000000
--- a/pst-import.patch
+++ /dev/null
@@ -1,1934 +0,0 @@
-Index: plugins/pst-import/pst-importer.c
-===================================================================
---- plugins/pst-import/pst-importer.c (revision 0)
-+++ plugins/pst-import/pst-importer.c (revision 0)
-@@ -0,0 +1,1813 @@
-+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-+/* pst-importer.c
-+ *
-+ * Copyright (C) 2006 Chris Halls
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of version 2 of the GNU General Public
-+ * License as published by the Free Software Foundation.
-+ *
-+ * 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., 59 Temple Place - Suite 330,
-+ * Boston, MA 02111-1307, USA.
-+ *
-+ * Author: Chris Halls
-+ Bharath Acharya
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include
-+#endif
-+
-+#define G_LOG_DOMAIN "eplugin-readpst"
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#include
-+
-+#include
-+#include
-+
-+#include
-+#include
-+
-+#include
-+
-+#include
-+
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+
-+typedef struct _PstImporter PstImporter;
-+
-+int pst_init (pst_file *pst, char *filename);
-+gchar *get_pst_rootname (pst_file *pst, gchar *filename);
-+static void pst_error_msg (const char *fmt, ...);
-+static void pst_import_folders (PstImporter *m, pst_desc_ll *topitem);
-+static void pst_process_item (PstImporter *m, pst_desc_ll *d_ptr);
-+static void pst_process_folder (PstImporter *m, pst_item *item);
-+static void pst_process_email (PstImporter *m, pst_item *item);
-+static void pst_process_contact (PstImporter *m, pst_item *item);
-+static void pst_process_appointment (PstImporter *m, pst_item *item);
-+static void pst_process_task (PstImporter *m, pst_item *item);
-+static void pst_process_journal (PstImporter *m, pst_item *item);
-+
-+static void pst_import_file (PstImporter *m);
-+gchar *foldername_to_utf8 (const gchar *pstname);
-+gchar *string_to_utf8(const gchar *string);
-+void contact_set_date (EContact *contact, EContactField id, FILETIME *date);
-+struct icaltimetype get_ical_date (FILETIME *date, gboolean is_date);
-+char *rfc2445_datetime_format (FILETIME *ft);
-+
-+gboolean org_credativ_evolution_readpst_supported (EPlugin *epl, EImportTarget *target);
-+GtkWidget *org_credativ_evolution_readpst_getwidget (EImport *ei, EImportTarget *target, EImportImporter *im);
-+void org_credativ_evolution_readpst_import (EImport *ei, EImportTarget *target, EImportImporter *im);
-+void org_credativ_evolution_readpst_cancel (EImport *ei, EImportTarget *target, EImportImporter *im);
-+int e_plugin_lib_enable (EPluginLib *ep, int enable);
-+
-+
-+/* em-folder-selection-button.h is private, even though other internal evo plugins use it!
-+ so declare the functions here
-+ TODO: sort out whether this should really be private
-+*/
-+typedef struct _EMFolderSelectionButton EMFolderSelectionButton;
-+GtkWidget *em_folder_selection_button_new (const char *title, const char *caption);
-+void em_folder_selection_button_set_selection (EMFolderSelectionButton *button, const char *uri);
-+const char *em_folder_selection_button_get_selection (EMFolderSelectionButton *button);
-+
-+static unsigned char pst_signature [] = { '!', 'B', 'D', 'N' };
-+
-+struct _PstImporter {
-+ MailMsg base;
-+
-+ EImport *import;
-+ EImportTarget *target;
-+
-+ GMutex *status_lock;
-+ char *status_what;
-+ int status_pc;
-+ int status_timeout_id;
-+ CamelOperation *status;
-+ CamelException ex;
-+
-+ pst_file pst;
-+
-+ CamelOperation *cancel;
-+ CamelFolder *folder;
-+ gchar *parent_uri;
-+ gchar *folder_name;
-+ gchar *folder_uri;
-+ int folder_count;
-+ int current_item;
-+
-+ EBook *addressbook;
-+ ECal *calendar;
-+ ECal *tasks;
-+ ECal *journal;
-+};
-+
-+gboolean
-+org_credativ_evolution_readpst_supported (EPlugin *epl, EImportTarget *target)
-+{
-+ char signature[sizeof (pst_signature)];
-+ gboolean ret = FALSE;
-+ int fd, n;
-+ EImportTargetURI *s;
-+ char *filename;
-+
-+ if (target->type != E_IMPORT_TARGET_URI) {
-+ return FALSE;
-+ }
-+
-+ s = (EImportTargetURI *)target;
-+
-+ if (s->uri_src == NULL) {
-+ return TRUE;
-+ }
-+
-+ if (strncmp (s->uri_src, "file:///", strlen ("file:///")) != 0) {
-+ return FALSE;
-+ }
-+
-+ filename = g_filename_from_uri (s->uri_src, NULL, NULL);
-+ fd = g_open (filename, O_RDONLY, 0);
-+ g_free (filename);
-+
-+ if (fd != -1) {
-+ n = read (fd, signature, sizeof (pst_signature));
-+ ret = n == sizeof (pst_signature) && memcmp (signature, pst_signature, sizeof (pst_signature)) == 0;
-+ close (fd);
-+ }
-+
-+ return ret;
-+}
-+
-+static void
-+checkbox_mail_toggle_cb (GtkToggleButton *tb, EImportTarget *target)
-+{
-+ g_datalist_set_data (&target->data, "pst-do-mail", GINT_TO_POINTER (gtk_toggle_button_get_active (tb)));
-+}
-+
-+static void
-+checkbox_addr_toggle_cb (GtkToggleButton *tb, EImportTarget *target)
-+{
-+ g_datalist_set_data (&target->data, "pst-do-addr", GINT_TO_POINTER (gtk_toggle_button_get_active (tb)));
-+}
-+
-+static void
-+checkbox_appt_toggle_cb (GtkToggleButton *tb, EImportTarget *target)
-+{
-+ g_datalist_set_data (&target->data, "pst-do-appt", GINT_TO_POINTER (gtk_toggle_button_get_active (tb)));
-+}
-+
-+static void
-+checkbox_task_toggle_cb (GtkToggleButton *tb, EImportTarget *target)
-+{
-+ g_datalist_set_data (&target->data, "pst-do-task", GINT_TO_POINTER (gtk_toggle_button_get_active (tb)));
-+}
-+
-+static void
-+checkbox_journal_toggle_cb (GtkToggleButton *tb, EImportTarget *target)
-+{
-+ g_datalist_set_data (&target->data, "pst-do-journal", GINT_TO_POINTER (gtk_toggle_button_get_active (tb)));
-+}
-+
-+static void
-+folder_selected (EMFolderSelectionButton *button, EImportTargetURI *target)
-+{
-+ g_free (target->uri_dest);
-+ target->uri_dest = g_strdup (em_folder_selection_button_get_selection (button));
-+}
-+
-+
-+/**
-+ * Suggest a folder to import data into
-+ * @param target
-+ * @return
-+ */
-+static gchar*
-+get_suggested_foldername (EImportTargetURI *target)
-+{
-+ const gchar *inbox;
-+ gchar *delim, *filename;
-+ gchar *rootname = NULL;
-+ GString *foldername;
-+ pst_file pst;
-+
-+ /* Suggest a folder that is in the same mail storage as the users' inbox,
-+ with a name derived from the .PST file */
-+ inbox = mail_component_get_folder_uri (NULL, MAIL_COMPONENT_FOLDER_INBOX);
-+ g_message ("Inbox:%s", inbox);
-+
-+ delim = g_strrstr (inbox, "#");
-+ if (delim != NULL) {
-+ foldername = g_string_new_len (inbox, delim-inbox);
-+ } else {
-+ foldername = g_string_new (inbox);
-+ }
-+
-+ g_string_append_c (foldername, '#');
-+
-+ filename = g_filename_from_uri (target->uri_src, NULL, NULL);
-+
-+ if (pst_init (&pst, filename) == 0) {
-+ rootname = get_pst_rootname (&pst, filename);
-+ }
-+
-+ g_free (filename);
-+
-+ if (rootname != NULL) {
-+ gchar *utf8name;
-+ utf8name = foldername_to_utf8 (rootname);
-+ g_string_append (foldername, utf8name);
-+ g_free (utf8name);
-+ g_free (rootname);
-+ } else {
-+ g_string_append (foldername, "outlook_data");
-+ }
-+
-+ if (mail_tool_uri_to_folder (foldername->str, 0, NULL) != NULL) {
-+ /* Folder exists - add a number */
-+ int i, len;
-+ len = foldername->len;
-+ CamelFolder *folder;
-+
-+ for (i=1; i<10000; i++) {
-+ g_string_truncate (foldername, len);
-+ g_string_append_printf (foldername, "_%d", i);
-+ if ((folder=mail_tool_uri_to_folder (foldername->str, 0, NULL)) == NULL) {
-+ /* Folder does not exist */
-+ break;
-+ }
-+ }
-+
-+ if (folder != NULL) {
-+ pst_error_msg ("Error searching for an unused folder name. uri=%s", foldername);
-+ }
-+ }
-+
-+ return g_string_free (foldername, FALSE);
-+
-+}
-+
-+GtkWidget *
-+org_credativ_evolution_readpst_getwidget (EImport *ei, EImportTarget *target, EImportImporter *im)
-+{
-+ GtkWidget *hbox, *framebox, *w;
-+ gchar *foldername;
-+
-+ g_datalist_set_data (&target->data, "pst-do-mail", GINT_TO_POINTER (TRUE));
-+ g_datalist_set_data (&target->data, "pst-do-addr", GINT_TO_POINTER (TRUE));
-+ g_datalist_set_data (&target->data, "pst-do-appt", GINT_TO_POINTER (TRUE));
-+ g_datalist_set_data (&target->data, "pst-do-task", GINT_TO_POINTER (TRUE));
-+ g_datalist_set_data (&target->data, "pst-do-journal", GINT_TO_POINTER (TRUE));
-+
-+ framebox = gtk_vbox_new (FALSE, 2);
-+
-+ /* Mail */
-+ hbox = gtk_hbox_new (FALSE, 0);
-+ w = gtk_check_button_new_with_mnemonic (_("_Mail"));
-+ gtk_toggle_button_set_active ((GtkToggleButton *) w, TRUE);
-+ g_signal_connect (w, "toggled", G_CALLBACK (checkbox_mail_toggle_cb), target);
-+ gtk_box_pack_start ((GtkBox *) hbox, w, FALSE, FALSE, 0);
-+
-+ w = em_folder_selection_button_new (_("Select folder"), _("Select folder to import into"));
-+ foldername = get_suggested_foldername ((EImportTargetURI *) target);
-+ ((EImportTargetURI *) target)->uri_dest = g_strdup (foldername);
-+ em_folder_selection_button_set_selection ((EMFolderSelectionButton *) w, foldername);
-+ g_signal_connect (w, "selected", G_CALLBACK (folder_selected), target);
-+ gtk_box_pack_end ((GtkBox *) hbox, w, FALSE, FALSE, 0);
-+
-+ w = gtk_label_new (_("Destination folder:"));
-+ gtk_box_pack_end ((GtkBox *) hbox, w, FALSE, TRUE, 6);
-+
-+ gtk_box_pack_start ((GtkBox *) framebox, hbox, FALSE, FALSE, 0);
-+
-+ /* Address book */
-+ w = gtk_check_button_new_with_mnemonic (_("_Address Book"));
-+ gtk_toggle_button_set_active ((GtkToggleButton *) w, FALSE);
-+ /*gtk_widget_set_sensitive ((GtkWidget *)w, FALSE);*/ /* Disable until implemented */
-+ g_signal_connect (w, "toggled", G_CALLBACK (checkbox_addr_toggle_cb), target);
-+ gtk_box_pack_start ((GtkBox *) framebox, w, FALSE, FALSE, 0);
-+
-+ /* Appointments */
-+ w = gtk_check_button_new_with_mnemonic (_("A_ppointments"));
-+ gtk_toggle_button_set_active ((GtkToggleButton *) w, FALSE);
-+ g_signal_connect (w, "toggled", G_CALLBACK (checkbox_appt_toggle_cb), target);
-+ gtk_box_pack_start ((GtkBox *)framebox, w, FALSE, FALSE, 0);
-+
-+ /* Tasks */
-+ w = gtk_check_button_new_with_mnemonic (_("_Tasks"));
-+ gtk_toggle_button_set_active ((GtkToggleButton *)w, FALSE);
-+ g_signal_connect (w, "toggled", G_CALLBACK (checkbox_task_toggle_cb), target);
-+ gtk_box_pack_start ((GtkBox *)framebox, w, FALSE, FALSE, 0);
-+
-+ /* Journal */
-+ w = gtk_check_button_new_with_mnemonic (_("_Journal entries"));
-+ gtk_toggle_button_set_active ((GtkToggleButton *)w, FALSE);
-+ g_signal_connect (w, "toggled", G_CALLBACK (checkbox_journal_toggle_cb), target);
-+ gtk_box_pack_start ((GtkBox *)framebox, w, FALSE, FALSE, 0);
-+
-+ gtk_widget_show_all (framebox);
-+
-+ g_free (foldername);
-+
-+ return framebox;
-+}
-+
-+static char *
-+pst_import_describe (PstImporter *m, int complete)
-+{
-+ return g_strdup (_("Importing Outlook data"));
-+}
-+
-+static ECal*
-+open_ecal (ECalSourceType type, char *name)
-+{
-+ /* Hack - grab the first calendar we can find
-+ TODO - add a selection mechanism in get_widget */
-+ ESource *primary;
-+ ESourceList *source_list;
-+ ECal *cal;
-+
-+ if ((e_cal_get_sources (&source_list, type, NULL)) == 0) {
-+ g_warning ("Could not get any sources of type %s.", name);
-+ return NULL;
-+ }
-+
-+ primary = e_source_list_peek_source_any (source_list);
-+
-+ if ((cal = e_cal_new (primary, type)) == NULL) {
-+ g_warning ("Could not create %s.", name);
-+ g_object_unref (source_list);
-+ return NULL;
-+ }
-+
-+ e_cal_open (cal, TRUE, NULL);
-+ g_object_unref (primary);
-+ g_object_unref (source_list);
-+
-+ return cal;
-+}
-+
-+static void
-+pst_import_import (PstImporter *m)
-+{
-+ CamelOperation *oldcancel = NULL;
-+
-+ oldcancel = camel_operation_register (m->status);
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-addr"))) {
-+ /* Hack - grab the first address book we can find
-+ TODO - add a selection mechanism in get_widget */
-+ ESource *primary;
-+ ESourceList *source_list;
-+
-+ if (e_book_get_addressbooks (&source_list, NULL)) {
-+ primary = e_source_list_peek_source_any (source_list);
-+
-+ if ((m->addressbook = e_book_new (primary,NULL))) {
-+ e_book_open (m->addressbook, TRUE, NULL);
-+ g_object_unref (primary);
-+ g_object_unref (source_list);
-+ } else {
-+ g_warning ("Could not create EBook.");
-+ }
-+ } else {
-+ g_warning ("Could not get address books.");
-+ }
-+ }
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-appt"))) {
-+ m->calendar = open_ecal (E_CAL_SOURCE_TYPE_EVENT, "calendar");
-+ }
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-task"))) {
-+ m->tasks = open_ecal (E_CAL_SOURCE_TYPE_TODO, "task list");
-+ }
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-journal"))) {
-+ m->journal = open_ecal (E_CAL_SOURCE_TYPE_JOURNAL, "journal");
-+ }
-+
-+ pst_import_file (m);
-+
-+/* FIXME: Crashes often in here.
-+ if (m->addressbook) {
-+ g_object_unref (m->addressbook);
-+ }
-+
-+ if (m->calendar) {
-+ g_object_unref (m->calendar);
-+ }
-+
-+ if (m->tasks) {
-+ g_object_unref (m->tasks);
-+ }
-+
-+ if (m->journal) {
-+ g_object_unref (m->journal);
-+ }
-+*/
-+ camel_operation_register (oldcancel);
-+}
-+
-+static void
-+pst_import_file (PstImporter *m)
-+{
-+ int ret;
-+ gchar *filename;
-+ pst_item *item = NULL;
-+ pst_desc_ll *d_ptr;
-+
-+ filename = g_filename_from_uri (((EImportTargetURI *)m->target)->uri_src, NULL, NULL);
-+ m->parent_uri = g_strdup (((EImportTargetURI *)m->target)->uri_dest); /* Destination folder, was set in our widget */
-+
-+ camel_operation_start (NULL, _("Importing `%s'"), filename);
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-mail"))) {
-+ mail_tool_uri_to_folder (m->parent_uri, CAMEL_STORE_FOLDER_CREATE, &m->base.ex);
-+ }
-+
-+ ret = pst_init (&m->pst, filename);
-+
-+ if (ret < 0) {
-+ g_free (filename);
-+ camel_operation_end (NULL);
-+ return;
-+ }
-+
-+ g_free (filename);
-+
-+ camel_operation_progress_count (NULL, 1);
-+
-+ if ((item = pst_parse_item (&m->pst, m->pst.d_head)) == NULL) {
-+ pst_error_msg ("Could not get root record");
-+ return;
-+ }
-+
-+ camel_operation_progress_count (NULL, 2);
-+
-+ if ((d_ptr = pst_getTopOfFolders (&m->pst, item)) == NULL) {
-+ pst_error_msg ("Top of folders record not found. Cannot continue");
-+ return;
-+ }
-+
-+ camel_operation_progress_count (NULL, 3);
-+ pst_import_folders (m, d_ptr);
-+
-+ camel_operation_progress_count (NULL, 4);
-+
-+ camel_operation_end (NULL);
-+
-+ pst_freeItem (item);
-+
-+}
-+
-+static void
-+pst_import_folders (PstImporter *m, pst_desc_ll *topitem)
-+{
-+ pst_desc_ll *d_ptr;
-+ gchar *seperator;
-+
-+ d_ptr = topitem->child;
-+
-+ /* Walk through folder tree */
-+ while (d_ptr != NULL && (camel_operation_cancel_check (NULL) == FALSE)) {
-+
-+ pst_process_item (m, d_ptr);
-+
-+ if (d_ptr->child != NULL) {
-+ g_free (m->parent_uri);
-+ m->parent_uri = g_strdup (m->folder_uri);
-+ d_ptr = d_ptr->child;
-+ } else if (d_ptr->next != NULL) {
-+ d_ptr = d_ptr->next;
-+ } else {
-+ while (d_ptr != topitem && d_ptr->next == NULL) {
-+ if(m->folder_uri) {
-+ g_free(m->folder_uri);
-+ }
-+
-+ m->folder_uri = g_strdup (m->parent_uri);
-+ seperator = g_strrstr (m->parent_uri, "/");
-+
-+ if (seperator != NULL) {
-+ *seperator = '\0'; /* Truncate uri */
-+ }
-+
-+ /*printf (" parent uri:%s\n", m->parent_uri);*/
-+ /*printf (" folder uri:%s\n", m->folder_uri);*/
-+ d_ptr = d_ptr->parent;
-+
-+ }
-+ if (d_ptr == topitem) {
-+ return;
-+ }
-+
-+ d_ptr = d_ptr->next;
-+ }
-+ }
-+}
-+
-+static void
-+pst_process_item (PstImporter *m, pst_desc_ll *d_ptr)
-+{
-+ pst_item *item = NULL;
-+
-+ if (d_ptr->desc == NULL) {
-+ return;
-+ }
-+
-+ item = pst_parse_item (&m->pst, d_ptr);
-+
-+ if (item == NULL) {
-+ return;
-+ }
-+
-+
-+ if (item->message_store != NULL) {
-+ pst_error_msg ("A second message_store has been found - ignored");
-+ pst_freeItem (item);
-+ return;
-+ }
-+
-+ /*printf ("Item type: %i (%s)\n", item->type, (item->ascii_type ? item->ascii_type : "unknown"));*/
-+
-+ if (item->folder != NULL) {
-+ pst_process_folder (m, item);
-+ camel_operation_start (NULL, _("Importing `%s'"), item->file_as);
-+ } else {
-+ if (m->folder_count && (m->current_item < m->folder_count)) {
-+ camel_operation_progress (NULL, (m->current_item * 100) / m->folder_count);
-+ } else {
-+ camel_operation_progress (NULL, 100);
-+ }
-+
-+ if (item->email != NULL &&
-+ (item->type == PST_TYPE_NOTE || item->type == PST_TYPE_REPORT)) {
-+
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-mail")))
-+ pst_process_email (m, item);
-+
-+ } else if (item->contact && item->type == PST_TYPE_CONTACT) {
-+
-+ if (m->addressbook && GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-addr"))) {
-+ pst_process_contact (m, item);
-+ }
-+
-+ } else if (item->type == PST_TYPE_APPOINTMENT) {
-+
-+ if (m->calendar && GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-appt"))) {
-+ pst_process_appointment (m, item);
-+ }
-+
-+ } else if (item->type == PST_TYPE_TASK) {
-+
-+ if (m->tasks && GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-task"))) {
-+ pst_process_task (m, item);
-+ }
-+
-+ } else if (item->type == PST_TYPE_JOURNAL) {
-+
-+ if (m->journal && GPOINTER_TO_INT (g_datalist_get_data (&m->target->data, "pst-do-journal"))) {
-+ pst_process_journal (m, item);
-+ }
-+
-+ }
-+
-+ m->current_item++;
-+ }
-+
-+ pst_freeItem (item);
-+
-+ if (d_ptr->next == NULL) {
-+ camel_operation_end (NULL);
-+ }
-+}
-+
-+/**
-+ * Convert string to utf8. Currently we just use the locale, but maybe there is encoding
-+ * information hidden somewhere in the PST file?
-+ *
-+ * @param string String from PST file
-+ * @return utf8 representation (caller should free), or NULL for error.
-+ */
-+gchar *
-+string_to_utf8(const gchar *string)
-+{
-+ gchar *utf8;
-+
-+ utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
-+
-+ return utf8;
-+}
-+
-+/**
-+ * Convert foldername to utf8 and escape characters if needed
-+ * @param foldername from PST file
-+ * @return converted folder name, or NULL for error. Caller should free
-+ */
-+gchar *
-+foldername_to_utf8 (const gchar *pstname)
-+{
-+ gchar *utf8name, *folder_name;
-+
-+ utf8name = string_to_utf8(pstname);
-+
-+ if (utf8name == NULL) {
-+ folder_name = camel_url_encode (pstname, NULL);
-+ g_warning ("foldername_to_utf8: Cannot convert to utf8! foldername=%s", folder_name);
-+ } else {
-+ /* Encode using the current locale */
-+ folder_name = camel_url_encode (utf8name, NULL);
-+ g_free (utf8name);
-+ }
-+
-+ g_strdelimit (folder_name, "/", '_');
-+ g_strescape (folder_name, NULL);
-+
-+ return folder_name;
-+}
-+
-+static void
-+pst_process_folder (PstImporter *m, pst_item *item)
-+{
-+ gchar *uri;
-+ g_free (m->folder_name);
-+ g_free (m->folder_uri);
-+
-+ if (item->file_as != NULL) {
-+ m->folder_name = foldername_to_utf8 (item->file_as);
-+ } else {
-+ g_critical ("Folder: No name! item->file_as=%s", item->file_as);
-+ m->folder_name = g_strdup ("unknown_name");
-+ }
-+
-+ uri = g_strjoin ("/", m->parent_uri, m->folder_name, NULL);
-+ m->folder_uri = uri;
-+
-+ /*printf (" uri:%s\n", m->folder_uri);*/
-+ g_debug ("Folder name=%s email_count=%d unseen=%d assoc=%d", item->file_as,
-+ item->folder->email_count, item->folder->unseen_email_count, item->folder->assoc_count);
-+
-+ if (m->folder) {
-+ camel_object_unref (m->folder);
-+ m->folder = NULL;
-+ }
-+
-+ m->folder_count = item->folder->email_count;
-+ m->current_item = 0;
-+}
-+
-+/**
-+ * Create current folder in mail hierarchy. Parent folders will also be created.
-+ * @param m PstImporter set to current folder
-+ */
-+static void
-+pst_create_folder (PstImporter *m)
-+{
-+ const gchar *parent;
-+ gchar *dest, *dest_end, *pos;
-+ int dest_len;
-+
-+ parent = ((EImportTargetURI *)m->target)->uri_dest;
-+ g_debug("Create folder: %s", m->folder_uri);
-+ dest = g_strdup (m->folder_uri);
-+
-+ g_assert (g_str_has_prefix (dest, parent));
-+
-+ dest_len = strlen (dest);
-+ dest_end = dest + dest_len;
-+
-+ pos = dest + strlen(parent);
-+
-+ while (pos != NULL && pos < dest_end) {
-+ pos = g_strstr_len (pos+1, dest_end-pos, "/");
-+ if (pos != NULL) {
-+ CamelFolder *folder;
-+
-+ *pos = '\0';
-+
-+ g_debug ("Creating intermediate folder=%s", dest);
-+ folder = mail_tool_uri_to_folder (dest, CAMEL_STORE_FOLDER_CREATE, &m->base.ex);
-+ camel_object_unref(folder);
-+ *pos = '/';
-+ }
-+ }
-+
-+ g_free (dest);
-+
-+ if (m->folder) {
-+ camel_object_unref (m->folder);
-+ }
-+
-+ m->folder = mail_tool_uri_to_folder (m->folder_uri, CAMEL_STORE_FOLDER_CREATE, &m->base.ex);
-+
-+}
-+
-+/**
-+ * Create a camel mime part from given PST attachment
-+ * @param attach attachment to convert
-+ * @return CamelMimePart containing data and mime type
-+ */
-+static CamelMimePart *
-+attachment_to_part (PstImporter *m, pst_item_attach *attach)
-+{
-+ CamelMimePart *part;
-+ char *mimetype;
-+
-+ part = camel_mime_part_new ();
-+
-+ if (attach->filename2 || attach->filename1) {
-+ camel_mime_part_set_filename (part, (attach->filename2 ? attach->filename2 : attach->filename1));
-+ camel_mime_part_set_disposition (part, "attachment");
-+ camel_mime_part_set_encoding (part, CAMEL_TRANSFER_ENCODING_BASE64);
-+ } else {
-+ camel_mime_part_set_disposition (part, "inline");
-+ }
-+
-+ if (attach->mimetype != NULL) {
-+ mimetype = attach->mimetype;
-+ } else {
-+ mimetype = "application/octet-stream";
-+ }
-+
-+ if (attach->data != NULL) {
-+ camel_mime_part_set_content (part, attach->data, strlen (attach->data), mimetype);
-+ } else {
-+ char *buf = NULL;
-+ size_t size;
-+ size = pst_attach_to_mem (&m->pst, attach, &buf);
-+
-+ camel_mime_part_set_content (part, (char*) buf, size, mimetype);
-+ free(buf);
-+ }
-+
-+ return part;
-+}
-+
-+static void
-+pst_process_email (PstImporter *m, pst_item *item)
-+{
-+ CamelMimeMessage *msg;
-+ CamelInternetAddress *addr;
-+ CamelMultipart *mp;
-+ CamelMimePart *part;
-+ CamelMessageInfo *info;
-+
-+ if (m->folder == NULL) {
-+ pst_create_folder (m);
-+ }
-+
-+ camel_folder_freeze (m->folder);
-+
-+ msg = camel_mime_message_new ();
-+
-+ if (item->email->subject != NULL) {
-+ gchar *subj;
-+ g_message ("Email subject=%s", item->email->subject->subj);
-+
-+ subj = string_to_utf8 (item->email->subject->subj);
-+ if (subj == NULL) {
-+ g_warning ("Could not convert email subject to utf8: %s", item->email->subject->subj);
-+ camel_mime_message_set_subject (msg, "(lost subject)");
-+ } else {
-+ camel_mime_message_set_subject (msg, subj);
-+ g_free(subj);
-+ }
-+ }
-+
-+ addr = camel_internet_address_new ();
-+
-+ if (item->email->outlook_sender_name != NULL && item->email->outlook_sender != NULL) {
-+ camel_internet_address_add (addr, item->email->outlook_sender_name, item->email->outlook_sender);
-+ } else if (item->email->outlook_sender_name != NULL) {
-+ camel_address_decode (CAMEL_ADDRESS (addr), item->email->outlook_sender_name);
-+ } else if (item->email->outlook_sender != NULL) {
-+ camel_address_decode (CAMEL_ADDRESS (addr), item->email->outlook_sender);
-+ } else {
-+ /* Evo prints a warning if no from is set, so supply an empty address */
-+ camel_internet_address_add (addr, "", "");
-+ }
-+
-+ camel_mime_message_set_from (msg, addr);
-+ camel_object_unref (addr);
-+
-+ if (item->email->sent_date != NULL) {
-+ camel_mime_message_set_date (msg, fileTimeToUnixTime (item->email->sent_date, 0), 0);
-+ }
-+
-+ if (item->email->messageid != NULL) {
-+ camel_mime_message_set_message_id (msg, item->email->messageid);
-+ }
-+
-+ if (item->email->header != NULL) {
-+ /* Use mime parser to read headers */
-+ CamelStream *stream;
-+ /*g_debug (" Email headers length=%zd", strlen (item->email->header));*/
-+ /*g_message (" Email headers... %s...", item->email->header);*/
-+
-+ stream = camel_stream_mem_new_with_buffer (item->email->header, strlen (item->email->header));
-+ if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *)msg, stream) == -1)
-+ g_warning ("Error reading headers, skipped");
-+
-+ } else {
-+
-+ if (item->email->sentto_address != NULL) {
-+ addr = camel_internet_address_new ();
-+
-+ g_print("\n\n The to header is:%s", item->email->sentto_address);
-+
-+ if (camel_address_decode (CAMEL_ADDRESS (addr), item->email->sentto_address) > 0);
-+ camel_mime_message_set_recipients (msg, "To", addr);
-+
-+ camel_object_unref (addr);
-+ }
-+
-+ if (item->email->cc_address != NULL) {
-+ addr = camel_internet_address_new ();
-+
-+ if (camel_address_decode (CAMEL_ADDRESS (addr), item->email->cc_address) > 0);
-+ camel_mime_message_set_recipients (msg, "CC", addr);
-+
-+ camel_object_unref (addr);
-+ }
-+ }
-+
-+ mp = camel_multipart_new ();
-+
-+ if (item->attach != NULL) {
-+
-+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (mp), "multipart/mixed");
-+
-+ } else if (item->email->htmlbody && item->email->body) {
-+
-+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (mp), "multipart/alternate");
-+
-+ } else if (item->email->htmlbody) {
-+
-+ camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (mp), "text/html");
-+
-+ }
-+
-+ camel_multipart_set_boundary (mp, NULL);
-+
-+ if (item->email->body != NULL) {
-+ /* Read internet headers */
-+
-+ /*g_debug (" Email body length=%zd", strlen (item->email->body));
-+ g_message (" Email body %100s...", item->email->body);*/
-+
-+ part = camel_mime_part_new ();
-+ camel_mime_part_set_content (part, item->email->body, strlen (item->email->body), "text/plain");
-+ camel_multipart_add_part (mp, part);
-+ camel_object_unref (part);
-+ }
-+
-+ if (item->email->htmlbody != NULL) {
-+ /*g_debug (" HTML body length=%zd", strlen (item->email->htmlbody));*/
-+ part = camel_mime_part_new ();
-+ camel_mime_part_set_content (part, item->email->htmlbody, strlen (item->email->htmlbody), "text/html");
-+ camel_multipart_add_part (mp, part);
-+ camel_object_unref (part);
-+ }
-+
-+ item->current_attach = item->attach;
-+
-+ while (item->current_attach != NULL) {
-+ pst_item_attach *attach;
-+
-+ attach = item->current_attach;
-+ part = attachment_to_part(m, attach);
-+
-+ camel_multipart_add_part (mp, part);
-+ camel_object_unref (part);
-+
-+ item->current_attach = item->current_attach->next;
-+ }
-+
-+ /*camel_mime_message_dump (msg, TRUE);*/
-+
-+ if (item->email->htmlbody || item->attach) {
-+ camel_medium_set_content_object (CAMEL_MEDIUM (msg), CAMEL_DATA_WRAPPER (mp));
-+ } else if (item->email->body) {
-+ camel_mime_part_set_content (CAMEL_MIME_PART (msg), item->email->body, strlen (item->email->body), "text/plain");
-+ } else {
-+ g_warning ("Email without body. Subject:%s",
-+ (item->email->subject->subj ? item->email->subject->subj : "(empty)"));
-+ camel_mime_part_set_content (CAMEL_MIME_PART (msg), "\n", 1, "text/plain");
-+ }
-+
-+ info = camel_message_info_new (NULL);
-+
-+ /* Read message flags (see comments in libpst.c */
-+ if(item->email->flag && 0x01)
-+ camel_message_info_set_flags (info, CAMEL_MESSAGE_SEEN, ~0);
-+
-+ if(item->email->importance == 2)
-+ camel_message_info_set_flags (info, CAMEL_MESSAGE_FLAGGED, ~0);
-+
-+ if(item->email->flag && 0x08)
-+ camel_message_info_set_flags (info, CAMEL_MESSAGE_DRAFT, ~0);
-+
-+ camel_folder_append_message (m->folder, msg, info, NULL, &m->ex);
-+ camel_message_info_free (info);
-+ camel_object_unref (msg);
-+
-+ camel_folder_sync (m->folder, FALSE, NULL);
-+ camel_folder_thaw (m->folder);
-+
-+ if (camel_exception_is_set (&m->ex)) {
-+ g_critical ("Exception!");
-+ camel_exception_clear (&m->ex);
-+ return;
-+ }
-+
-+}
-+
-+static void
-+contact_set_string (EContact *contact, EContactField id, char *string)
-+{
-+ if (string != NULL) {
-+ e_contact_set (contact, id, string);
-+ }
-+}
-+
-+static void
-+unknown_field (EContact *contact, GString *notes, char *name, char *string)
-+{
-+ /* Field could not be mapped directly so add to notes field */
-+ if (string != NULL) {
-+ g_string_append_printf (notes, "%s: %s\n", name, string);
-+ }
-+}
-+
-+static void
-+contact_set_address (EContact *contact, EContactField id, char *address, char *city, char *country, char *po_box, char *postal_code, char *state, char *street)
-+{
-+ EContactAddress *eaddress;
-+
-+ if (address || city || country || po_box || postal_code || state || street) {
-+ eaddress = g_new0 (EContactAddress, 1);
-+ if (po_box) {
-+ eaddress->po = g_strdup (po_box);
-+ }
-+ //eaddress->ext =
-+
-+ if (street) {
-+ eaddress->street = g_strdup (street);
-+ }
-+
-+ if (city) {
-+ eaddress->locality = g_strdup (city);
-+ }
-+
-+ if (state) {
-+ eaddress->region = g_strdup (state);
-+ }
-+
-+ if (postal_code) {
-+ eaddress->code = g_strdup (postal_code);
-+ }
-+
-+ if (country) {
-+ eaddress->country = g_strdup (country);
-+ }
-+
-+ e_contact_set (contact, id, eaddress);
-+ }
-+}
-+
-+void
-+contact_set_date (EContact *contact, EContactField id, FILETIME *date)
-+{
-+ if (date && (date->dwLowDateTime || date->dwHighDateTime) ) {
-+ time_t t1;
-+ struct tm tm;
-+ EContactDate *bday;
-+ bday = e_contact_date_new ();
-+
-+ t1 = fileTimeToUnixTime (date, 0);
-+ gmtime_r (&t1, &tm);
-+
-+ bday->year = tm.tm_year + 1900;
-+ bday->month = tm.tm_mon + 1;
-+ bday->day = tm.tm_mday;
-+
-+ e_contact_set (contact, id, bday);
-+ }
-+}
-+
-+static void
-+pst_process_contact (PstImporter *m, pst_item *item)
-+{
-+ pst_item_contact *c;
-+ EContact *ec;
-+ c = item->contact;
-+ GString *notes;
-+
-+ notes = g_string_sized_new (2048);
-+ g_message ("Contact name=%s", c->fullname);
-+
-+ ec = e_contact_new ();
-+ /* pst's fullname field only contains first, middle, surname */
-+ if (c->display_name_prefix || c->suffix) {
-+ GString *name = g_string_sized_new (128);
-+
-+ if (c->display_name_prefix) {
-+ g_string_assign (name, c->display_name_prefix);
-+ }
-+
-+ if (c->first_name) {
-+ g_string_append_printf (name, "%s%s", (name->len ? " " : ""), c->first_name);
-+ }
-+
-+ if (c->middle_name) {
-+ g_string_append_printf (name, "%s%s", (name->len ? " " : ""), c->middle_name);
-+ }
-+
-+ if (c->surname) {
-+ g_string_append_printf (name, "%s%s", (name->len ? " " : ""), c->surname);
-+ }
-+
-+ if (c->suffix) {
-+ g_string_append_printf (name, "%s%s", (name->len ? " " : ""), c->suffix);
-+ }
-+
-+ contact_set_string (ec, E_CONTACT_FULL_NAME, name->str);
-+ g_string_free (name, TRUE);
-+
-+ } else {
-+ contact_set_string (ec, E_CONTACT_FULL_NAME, c->fullname);
-+ }
-+
-+ /* unknown_field (ec, notes, "initials", c->initials); */
-+
-+ contact_set_string (ec, E_CONTACT_NICKNAME, c->nickname);
-+
-+ contact_set_string (ec, E_CONTACT_ORG, c->company_name);
-+ contact_set_string (ec, E_CONTACT_ORG_UNIT, c->department);
-+ contact_set_string (ec, E_CONTACT_TITLE, c->job_title);
-+
-+ contact_set_address (ec,E_CONTACT_ADDRESS_WORK,
-+ c->business_address, c->business_city, c->business_country,
-+ c->business_po_box, c->business_postal_code, c->business_state, c->business_street);
-+
-+ contact_set_address (ec,E_CONTACT_ADDRESS_HOME,
-+ c->home_address, c->home_city, c->home_country,
-+ c->home_po_box, c->home_postal_code, c->home_state, c->home_street);
-+
-+ contact_set_address (ec,E_CONTACT_ADDRESS_OTHER,
-+ c->other_address, c->other_city, c->other_country,
-+ c->other_po_box, c->other_postal_code, c->other_state, c->other_street);
-+
-+ contact_set_string (ec, E_CONTACT_PHONE_ASSISTANT, c->assistant_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_BUSINESS_FAX, c->business_fax);
-+ contact_set_string (ec, E_CONTACT_PHONE_BUSINESS, c->business_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_BUSINESS_2, c->business_phone2);
-+ contact_set_string (ec, E_CONTACT_PHONE_CALLBACK, c->callback_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_CAR, c->car_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_COMPANY, c->company_main_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_HOME_FAX, c->home_fax);
-+ contact_set_string (ec, E_CONTACT_PHONE_HOME, c->home_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_HOME_2, c->home_phone2);
-+ contact_set_string (ec, E_CONTACT_PHONE_ISDN, c->isdn_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_MOBILE, c->mobile_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_OTHER_FAX, c->primary_fax); /* ? */
-+ contact_set_string (ec, E_CONTACT_PHONE_PAGER, c->pager_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_PRIMARY, c->primary_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_RADIO, c->radio_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_TTYTDD, c->ttytdd_phone);
-+ contact_set_string (ec, E_CONTACT_PHONE_TELEX, c->telex);
-+ unknown_field (ec, notes, "account_name", c->account_name);
-+ contact_set_date (ec, E_CONTACT_ANNIVERSARY, c->wedding_anniversary);
-+ contact_set_string (ec, E_CONTACT_ASSISTANT, c->assistant_name);
-+ unknown_field (ec, notes, "billing_information", c->billing_information);
-+ contact_set_date (ec, E_CONTACT_BIRTH_DATE, c->birthday);
-+ /* contact_set_string (ec, E_CONTACT_CATEGORIES, c->??); */
-+
-+ contact_set_string (ec, E_CONTACT_EMAIL_1 , c->address1);
-+ contact_set_string (ec, E_CONTACT_EMAIL_2 , c->address2);
-+ contact_set_string (ec, E_CONTACT_EMAIL_3 , c->address3);
-+
-+ /*unknown_field (ec, notes, "address1_desc" , c->address1_desc);
-+ unknown_field (ec, notes, "address1_transport" , c->address1_transport);
-+ unknown_field (ec, notes, "address2_desc" , c->address2_desc);
-+ unknown_field (ec, notes, "address2_transport" , c->address2_transport);
-+ unknown_field (ec, notes, "address3_desc" , c->address3_desc);
-+ unknown_field (ec, notes, "address3_transport" , c->address3_transport);*/
-+
-+ /*unknown_field (ec, notes, "def_postal_address", c->def_postal_address);*/
-+
-+ /* unknown_field (ec, ??, c->gender); */
-+ unknown_field (ec, notes, "access_method", c->access_method);
-+ unknown_field (ec, notes, "gov_id", c->gov_id);
-+ unknown_field (ec, notes, "customer_id", c->customer_id);
-+ unknown_field (ec, notes, "hobbies", c->hobbies);
-+ unknown_field (ec, notes, "followup", c->followup);
-+
-+ contact_set_string (ec, E_CONTACT_FREEBUSY_URL , c->free_busy_address);
-+
-+ unknown_field (ec, notes, "keyword", c->keyword);
-+ unknown_field (ec, notes, "language", c->language);
-+ unknown_field (ec, notes, "location", c->location);
-+ contact_set_string (ec, E_CONTACT_OFFICE, c->office_loc);
-+ unknown_field (ec, notes, "computer_name", c->computer_name);
-+ unknown_field (ec, notes, "ftp_site", c->ftp_site);
-+
-+ contact_set_string (ec, E_CONTACT_MANAGER , c->manager_name);
-+ unknown_field (ec, notes, "mileage", c->mileage);
-+ unknown_field (ec, notes, "org_id", c->org_id);
-+ contact_set_string (ec, E_CONTACT_ROLE, c->profession);
-+
-+ contact_set_string (ec, E_CONTACT_SPOUSE , c->spouse_name);
-+
-+ if (c->personal_homepage) {
-+ contact_set_string (ec, E_CONTACT_HOMEPAGE_URL , c->personal_homepage);
-+ if (c->business_homepage) {
-+ unknown_field (ec, notes, "business_homepage", c->business_homepage);
-+ }
-+ } else if (c->business_homepage) {
-+ contact_set_string (ec, E_CONTACT_HOMEPAGE_URL , c->business_homepage);
-+ }
-+
-+ if (item->comment) {
-+ g_string_append_printf (notes, "%s\n", item->comment);
-+ }
-+
-+ if (item->email && item->email->body) {
-+ g_string_append_printf (notes, "%s\n", item->email->body);
-+ }
-+
-+ contact_set_string (ec, E_CONTACT_NOTE, notes->str);
-+ g_string_free (notes, TRUE);
-+
-+ e_book_add_contact (m->addressbook, ec, NULL);
-+ g_object_unref (ec);
-+
-+}
-+
-+/**
-+ * Convert pst time to icaltimetype
-+ * @param date time value from libpst
-+ * @param is_date treat as date only (all day event)?
-+ * @return converted date
-+ */
-+struct icaltimetype
-+get_ical_date (FILETIME *date, gboolean is_date)
-+{
-+ if (date && (date->dwLowDateTime || date->dwHighDateTime) ) {
-+ time_t t;
-+
-+ t = fileTimeToUnixTime (date, 0);
-+ return icaltime_from_timet_with_zone (t, is_date, NULL);
-+ } else {
-+ return icaltime_null_date ();
-+ }
-+}
-+
-+char *rfc2445_datetime_format (FILETIME *ft) {
-+ static char* buffer = NULL;
-+ struct tm *stm = NULL;
-+
-+ if (buffer == NULL) {
-+ buffer = malloc (30); // should be enough
-+ }
-+
-+ stm = fileTimeToStructTM (ft);
-+ strftime (buffer, 30, "%Y%m%dT%H%M%SZ", stm);
-+ return buffer;
-+}
-+
-+static void
-+set_cal_attachments (ECal *cal, ECalComponent *ec, PstImporter *m, pst_item_attach *attach)
-+{
-+ GSList *list = NULL;
-+ const char *uid;
-+ char *store_dir;
-+
-+ if (attach == NULL) {
-+ return;
-+ }
-+
-+ e_cal_component_get_uid (ec, &uid);
-+ store_dir = g_filename_from_uri (e_cal_get_local_attachment_store (cal), NULL, NULL);
-+
-+ while (attach != NULL) {
-+ const char* orig_filename;
-+ char *filename, *tmp, *path, *dirname, *uri;
-+ CamelMimePart *part;
-+ CamelDataWrapper *content;
-+ CamelStream *stream;
-+ struct stat st;
-+
-+ part = attachment_to_part(m, attach);
-+
-+ orig_filename = camel_mime_part_get_filename(part);
-+
-+ if (orig_filename == NULL) {
-+ g_warning("Ignoring unnamed attachment");
-+ attach = attach->next;
-+ continue; /* Ignore unnamed attachments */
-+ }
-+
-+ tmp = camel_file_util_safe_filename (orig_filename);
-+ filename = g_strdup_printf ("%s-%s", uid, tmp);
-+ path = g_build_filename (store_dir, filename, NULL);
-+
-+ g_free (tmp);
-+ g_free (filename);
-+
-+ dirname = g_path_get_dirname(path);
-+ if (g_mkdir_with_parents(dirname, 0777) == -1) {
-+ g_warning("Could not create directory %s: %s", dirname, g_strerror(errno));
-+ g_free(dirname);
-+ attach = attach->next;
-+ continue;
-+ }
-+ g_free(dirname);
-+
-+ if (g_access(path, F_OK) == 0) {
-+ if (g_access(path, W_OK) != 0) {
-+ g_warning("Could not write file %s - file exists", path);
-+ attach = attach->next;
-+ continue;
-+ }
-+ }
-+
-+ if (g_stat(path, &st) != -1 && !S_ISREG(st.st_mode)) {
-+ g_warning("Could not write file %s - not a file", path);
-+ attach = attach->next;
-+ continue;
-+ }
-+
-+ if (!(stream = camel_stream_fs_new_with_name (path, O_WRONLY | O_CREAT | O_TRUNC, 0666))) {
-+ g_warning ("Could not create stream for file %s - %s", path, g_strerror (errno));
-+ attach = attach->next;
-+ continue;
-+ }
-+
-+ content = camel_medium_get_content_object (CAMEL_MEDIUM (part));
-+
-+ if (camel_data_wrapper_decode_to_stream (content, stream) == -1
-+ || camel_stream_flush (stream) == -1)
-+ {
-+ g_warning ("Could not write attachment to %s: %s", path, g_strerror (errno));
-+ camel_object_unref (stream);
-+ attach = attach->next;
-+ continue;
-+ }
-+
-+ camel_object_unref (stream);
-+
-+ uri = g_filename_to_uri (path, NULL, NULL);
-+ list = g_slist_append (list, g_strdup (uri));
-+ g_free (uri);
-+
-+ camel_object_unref (part);
-+ g_free (path);
-+
-+ attach = attach->next;
-+
-+ }
-+
-+ g_free (store_dir);
-+
-+ e_cal_component_set_attachment_list (ec, list);
-+}
-+
-+static void
-+fill_calcomponent (PstImporter *m, pst_item *item, ECalComponent *ec, const char *type)
-+{
-+ pst_item_appointment *a;
-+ pst_item_email *e;
-+
-+ a = item->appointment;
-+ e = item->email;
-+ ECalComponentText text;
-+ struct icaltimetype tt_start, tt_end;
-+ ECalComponentDateTime dt_start, dt_end;
-+
-+ if (item->create_date) {
-+ struct icaltimetype tt;
-+ tt = get_ical_date (item->create_date, FALSE);
-+ e_cal_component_set_created (ec, &tt);
-+ }
-+ if (item->modify_date) {
-+ struct icaltimetype tt;
-+ tt = get_ical_date (item->modify_date, FALSE);
-+ e_cal_component_set_last_modified (ec, &tt);
-+ }
-+
-+ if (e) {
-+ if (e->subject || e->proc_subject) {
-+ if (e->subject) {
-+ text.value = e->subject->subj;
-+ } else if (e->proc_subject) {
-+ text.value = e->proc_subject;
-+ }
-+
-+ text.altrep = NULL; /* email->proc_subject? */
-+ e_cal_component_set_summary (ec, &text);
-+ g_message ("%s: %s", type, text.value);
-+ }
-+ if (e->body) {
-+ GSList l;
-+ text.value = e->body;
-+ text.altrep = NULL;
-+ l.data = &text;
-+ l.next = NULL;
-+ e_cal_component_set_description_list (ec, &l);
-+ }
-+ } else {
-+ g_warning ("%s without subject / body!", type);
-+ }
-+
-+ if (a->location) {
-+ e_cal_component_set_location (ec, a->location);
-+ }
-+
-+ if (a->start) {
-+ tt_start = get_ical_date (a->start, a->all_day);
-+ dt_start.value = &tt_start;
-+ dt_start.tzid = NULL;
-+ e_cal_component_set_dtstart (ec, &dt_start);
-+ g_message ("start:%s", rfc2445_datetime_format (a->start));
-+ }
-+
-+ if (a->end) {
-+ tt_end = get_ical_date (a->end, a->all_day);
-+ dt_end.value = &tt_end;
-+ dt_end.tzid = NULL;
-+ e_cal_component_set_dtend (ec, &dt_end);
-+ g_message ("end:%s", rfc2445_datetime_format (a->end));
-+ }
-+
-+ switch (a->showas) {
-+ case PST_FREEBUSY_TENTATIVE:
-+ e_cal_component_set_status (ec, ICAL_STATUS_TENTATIVE);
-+ break;
-+ case PST_FREEBUSY_FREE:
-+ // mark as transparent and as confirmed
-+ e_cal_component_set_transparency (ec, E_CAL_COMPONENT_TRANSP_TRANSPARENT);
-+ case PST_FREEBUSY_BUSY:
-+ case PST_FREEBUSY_OUT_OF_OFFICE:
-+ e_cal_component_set_status (ec, ICAL_STATUS_CONFIRMED);
-+ break;
-+ }
-+ switch (a->label) {
-+ case PST_APP_LABEL_NONE:
-+ break;
-+ case PST_APP_LABEL_IMPORTANT:
-+ e_cal_component_set_categories (ec, "Important"); break;
-+ case PST_APP_LABEL_BUSINESS:
-+ e_cal_component_set_categories (ec, "Business"); break;
-+ case PST_APP_LABEL_PERSONAL:
-+ e_cal_component_set_categories (ec, "Personal"); break;
-+ case PST_APP_LABEL_VACATION:
-+ e_cal_component_set_categories (ec, "Vacation"); break;
-+ case PST_APP_LABEL_MUST_ATTEND:
-+ e_cal_component_set_categories (ec, "Must-attend"); break;
-+ case PST_APP_LABEL_TRAVEL_REQ:
-+ e_cal_component_set_categories (ec, "Travel-required"); break;
-+ case PST_APP_LABEL_NEEDS_PREP:
-+ e_cal_component_set_categories (ec, "Needs-preparation"); break;
-+ case PST_APP_LABEL_BIRTHDAY:
-+ e_cal_component_set_categories (ec, "Birthday"); break;
-+ case PST_APP_LABEL_ANNIVERSARY:
-+ e_cal_component_set_categories (ec, "Anniversary"); break;
-+ case PST_APP_LABEL_PHONE_CALL:
-+ e_cal_component_set_categories (ec, "Phone-call"); break;
-+ }
-+
-+ if (a->alarm || a->alarm_minutes) {
-+ ECalComponentAlarm *alarm;
-+ ECalComponentAlarmTrigger trigger;
-+
-+ alarm = e_cal_component_alarm_new ();
-+
-+ if (a->alarm_minutes) {
-+ trigger.type = E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START;
-+ trigger.u.rel_duration = icaldurationtype_from_int (- (a->alarm_minutes)*60);
-+ e_cal_component_alarm_set_trigger (alarm, trigger);
-+ }
-+
-+ if (a->alarm) {
-+ if (a->alarm_filename) {
-+ e_cal_component_alarm_set_action (alarm, E_CAL_COMPONENT_ALARM_AUDIO);
-+ } else {
-+ e_cal_component_alarm_set_action (alarm, E_CAL_COMPONENT_ALARM_DISPLAY);
-+ }
-+ }
-+
-+ e_cal_component_add_alarm (ec, alarm);
-+ e_cal_component_alarm_free(alarm);
-+
-+ }
-+
-+ if (a->recurrence != PST_APP_RECUR_NONE) {
-+ struct icalrecurrencetype r;
-+ GSList recur_list;
-+
-+ icalrecurrencetype_clear (&r);
-+ r.interval = 1; /* Interval not implemented in libpst */
-+ if (a->recurrence_end) {
-+ r.until = get_ical_date (a->recurrence_end, FALSE);
-+ }
-+
-+ switch (a->recurrence_type) {
-+ case PST_APP_RECUR_DAILY:
-+ r.freq = ICAL_DAILY_RECURRENCE; break;
-+ case PST_APP_RECUR_WEEKLY:
-+ r.freq = ICAL_WEEKLY_RECURRENCE; break;
-+ case PST_APP_RECUR_MONTHLY:
-+ r.freq = ICAL_MONTHLY_RECURRENCE; break;
-+ case PST_APP_RECUR_YEARLY:
-+ r.freq = ICAL_YEARLY_RECURRENCE; break;
-+ default:
-+ r.freq = ICAL_NO_RECURRENCE;
-+ }
-+
-+ recur_list.data = &r;
-+ recur_list.next = NULL;
-+ e_cal_component_set_rrule_list (ec, &recur_list);
-+ }
-+
-+}
-+
-+static void
-+pst_process_appointment (PstImporter *m, pst_item *item)
-+{
-+ ECalComponent *ec;
-+
-+ ec = e_cal_component_new ();
-+ e_cal_component_set_new_vtype (ec, E_CAL_COMPONENT_EVENT);
-+
-+ fill_calcomponent (m, item, ec, "appointment");
-+ set_cal_attachments (m->calendar, ec, m, item->attach);
-+
-+ if (!e_cal_create_object (m->calendar, e_cal_component_get_icalcomponent (ec), NULL, NULL)) {
-+ g_warning("Creation of appointment failed");
-+ g_free(ec);
-+ }
-+
-+ g_object_unref (ec);
-+
-+}
-+
-+static void
-+pst_process_task (PstImporter *m, pst_item *item)
-+{
-+ ECalComponent *ec;
-+
-+ ec = e_cal_component_new ();
-+ e_cal_component_set_new_vtype (ec, E_CAL_COMPONENT_TODO);
-+
-+ fill_calcomponent (m, item, ec, "task");
-+ set_cal_attachments (m->tasks, ec, m, item->attach);
-+
-+ /* Note - libpst is missing many fields. E.g. task status, start/completion date, % complete */
-+
-+ if (!e_cal_create_object (m->tasks, e_cal_component_get_icalcomponent (ec), NULL, NULL)) {
-+ g_warning("Creation of task failed");
-+ g_free(ec);
-+ }
-+
-+ g_object_unref (ec);
-+
-+}
-+
-+static void
-+pst_process_journal (PstImporter *m, pst_item *item)
-+{
-+ struct pst_item_journal *j;
-+ ECalComponent *ec;
-+
-+ j = item->journal;
-+ ec = e_cal_component_new ();
-+ e_cal_component_set_new_vtype (ec, E_CAL_COMPONENT_JOURNAL);
-+
-+ fill_calcomponent (m, item, ec, "journal");
-+ set_cal_attachments (m->journal, ec, m, item->attach);
-+
-+ /* Note - an Evo memo entry does not have date started/finished or type fields :( */
-+ /*if (j) {
-+ ECalComponentText text;
-+ struct icaltimetype tt_start, tt_end;
-+ ECalComponentDateTime dt_start, dt_end;
-+
-+ if (j->start) {
-+ tt_start = get_ical_date (j->start, FALSE);
-+ dt_start.value = &tt_start;
-+ dt_start.tzid = NULL;
-+ e_cal_component_set_dtstart (ec, &dt_start);
-+ g_message ("journal start:%s", rfc2445_datetime_format (j->start));
-+ }
-+
-+ if (j->end) {
-+ tt_end = get_ical_date (j->end, FALSE);
-+ dt_end.value = &tt_end;
-+ dt_end.tzid = NULL;
-+ e_cal_component_set_dtend (ec, &dt_end);
-+ g_message ("end:%s", rfc2445_datetime_format (j->end));
-+ }
-+ g_message ("type: %s", j->type);
-+ }*/
-+
-+ if (!e_cal_create_object (m->journal, e_cal_component_get_icalcomponent (ec), NULL, NULL)) {
-+ g_warning("Creation of journal entry failed");
-+ g_free(ec);
-+ }
-+
-+ g_object_unref (ec);
-+
-+}
-+
-+/* Print an error message - maybe later bring up an error dialog? */
-+static void
-+pst_error_msg (const char *fmt, ...)
-+{
-+ va_list ap;
-+
-+ va_start (ap, fmt);
-+ g_critical (fmt, ap);
-+ va_end (ap);
-+}
-+
-+static void
-+pst_import_imported (PstImporter *m)
-+{
-+ e_import_complete (m->target->import, (EImportTarget *)m->target);
-+}
-+
-+static void
-+pst_import_free (PstImporter *m)
-+{
-+// pst_close (&m->pst);
-+ camel_operation_unref (m->status);
-+
-+ g_free (m->status_what);
-+ g_mutex_free (m->status_lock);
-+
-+ g_source_remove (m->status_timeout_id);
-+ m->status_timeout_id = 0;
-+
-+ g_free (m->folder_name);
-+ g_free (m->folder_uri);
-+ g_free (m->parent_uri);
-+
-+ g_object_unref (m->import);
-+}
-+
-+static MailMsgInfo pst_import_info = {
-+ sizeof (PstImporter),
-+ (MailMsgDescFunc) pst_import_describe,
-+ (MailMsgExecFunc) pst_import_import,
-+ (MailMsgDoneFunc) pst_import_imported,
-+ (MailMsgFreeFunc) pst_import_free,
-+};
-+
-+static gboolean
-+pst_status_timeout (void *data)
-+{
-+ PstImporter *importer = data;
-+ int pc;
-+ char *what;
-+
-+ if (importer->status_what) {
-+ g_mutex_lock (importer->status_lock);
-+ what = importer->status_what;
-+ importer->status_what = NULL;
-+ pc = importer->status_pc;
-+ g_mutex_unlock (importer->status_lock);
-+
-+ e_import_status (importer->target->import, (EImportTarget *)importer->target, what, pc);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+pst_status (CamelOperation *op, const char *what, int pc, void *data)
-+{
-+ PstImporter *importer = data;
-+
-+ if (pc == CAMEL_OPERATION_START) {
-+ pc = 0;
-+ } else if (pc == CAMEL_OPERATION_END) {
-+ pc = 100;
-+ }
-+
-+ g_mutex_lock (importer->status_lock);
-+ g_free (importer->status_what);
-+ importer->status_what = g_strdup (what);
-+ importer->status_pc = pc;
-+ g_mutex_unlock (importer->status_lock);
-+}
-+
-+static int
-+pst_import (EImport *ei, EImportTarget *target)
-+{
-+ PstImporter *m;
-+ int id;
-+
-+ m = mail_msg_new (&pst_import_info);
-+ g_datalist_set_data (&target->data, "pst-msg", m);
-+ m->import = ei;
-+ g_object_ref (m->import);
-+ m->target = target;
-+ g_message ("pst_import pstimporter=%p EImport=%p target=%p", m, ei, target);
-+
-+ m->parent_uri = NULL;
-+ m->folder_name = NULL;
-+ m->folder_uri = NULL;
-+
-+ m->addressbook = NULL;
-+ m->calendar = NULL;
-+ m->tasks = NULL;
-+ m->journal = NULL;
-+
-+ m->status_timeout_id = g_timeout_add (100, pst_status_timeout, m);
-+ /*m->status_timeout_id = NULL;*/
-+ m->status_lock = g_mutex_new ();
-+ m->status = camel_operation_new (pst_status, m);
-+
-+ id = m->base.seq;
-+
-+ mail_msg_unordered_push (m);
-+
-+ return id;
-+}
-+
-+/* Start the main import operation */
-+void
-+org_credativ_evolution_readpst_import (EImport *ei, EImportTarget *target, EImportImporter *im)
-+{
-+ if (GPOINTER_TO_INT (g_datalist_get_data (&target->data, "pst-do-mail"))
-+ || GPOINTER_TO_INT (g_datalist_get_data (&target->data, "pst-do-addr"))
-+ || GPOINTER_TO_INT (g_datalist_get_data (&target->data, "pst-do-appt"))
-+ || GPOINTER_TO_INT (g_datalist_get_data (&target->data, "pst-do-task"))
-+ || GPOINTER_TO_INT (g_datalist_get_data (&target->data, "pst-do-journal"))) {
-+ pst_import (ei, target);
-+ } else {
-+ e_import_complete (target->import, target);
-+ }
-+}
-+
-+void
-+org_credativ_evolution_readpst_cancel (EImport *ei, EImportTarget *target, EImportImporter *im)
-+{
-+ PstImporter *m = g_datalist_get_data (&target->data, "pst-msg");
-+
-+ if (m) {
-+ camel_operation_cancel (m->status);
-+ }
-+}
-+
-+int
-+e_plugin_lib_enable (EPluginLib *ep, int enable)
-+{
-+ if (enable) {
-+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-+ g_message ("pst Plugin enabled");
-+ } else {
-+ g_message ("pst Plugin disabled");
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * Open PST file and determine root folder name
-+ * @param pst: pst_file structure to be used by libpst
-+ * @param filename : path to file
-+ * @return 0 for sucess, -1 for failure
-+ */
-+int
-+pst_init (pst_file *pst, gchar *filename)
-+{
-+
-+#if 0
-+ char *d_log = "readpst.log";
-+ /* initialize log file */
-+ DEBUG_INIT (d_log);
-+ DEBUG_REGISTER_CLOSE ();
-+#endif
-+
-+ DEBUG_ENT ("main");
-+ if (pst_open (pst, filename) < 0) {
-+ pst_error_msg ("Error opening PST file %s", filename);
-+ return -1;
-+ }
-+
-+// if (1) {
-+ printf("\n\n %i is the pst index type\n\n", pst->ind_type);
-+/* if (pst->ind_type != 14) {
-+ printf("\nentered or not??\n not unknown index structure. Could this be a new Outlook 2003 PST file?\n");
-+ unicode_init();
-+ set_read64();
-+// DEBUG_RET();
-+// return -1;
-+ }
-+ else {
-+ printf("\n\n check maadi\n\n");
-+// unicode_close();
-+ reset_read();
-+ }
-+*/
-+ if (pst_load_index (pst) < 0) {
-+ pst_error_msg ("Error loading indexes");
-+ return -1;
-+ }
-+
-+ if (pst_load_extended_attributes (pst) < 0) {
-+ pst_error_msg ("Error loading file items");
-+ return -1;
-+ }
-+
-+// unicode_init();
-+ return 0;
-+}
-+
-+/**
-+ * Open determine root folder name of PST file
-+ * @param pst: pst_file structure to be used by libpst
-+ * @param filename : if non NULL, fallback to this name if folder name is not available
-+ * @return pointer to name of root folder (should be freed by caller), or NULL if error
-+ */
-+gchar *
-+get_pst_rootname (pst_file *pst, gchar *filename)
-+{
-+ pst_item *item = NULL;
-+ gchar *rootname = NULL;
-+
-+ printf("\n reached here\n");
-+ if ((item = pst_parse_item (pst, pst->d_head)) == NULL) {
-+ pst_error_msg ("Could not get root record");
-+ printf("\n crashed in if i guess\n");
-+ return NULL;
-+ }
-+ printf("\n crashed here i guess\n");
-+ if (item->message_store == NULL) {
-+ pst_error_msg ("Could not get root message store");
-+ pst_freeItem (item);
-+ return NULL;
-+ }
-+
-+ /* default the file_as to the same as the main filename if it doesn't exist */
-+ if (item->file_as == NULL) {
-+ if (filename == NULL) {
-+ pst_freeItem (item);
-+ return NULL;
-+ }
-+ rootname = g_path_get_basename (filename);
-+ } else {
-+ rootname = g_strdup (item->file_as);
-+ }
-+
-+ g_message ("Root folder name: '%s'", rootname);
-+
-+ pst_freeItem (item);
-+
-+ return rootname;
-+}
-Index: plugins/pst-import/ChangeLog
-===================================================================
---- plugins/pst-import/ChangeLog (revision 0)
-+++ plugins/pst-import/ChangeLog (revision 0)
-@@ -0,0 +1,9 @@
-+2008-09-18 Bharath Acharya
-+
-+ Basic functionality implemented by
-+ Chris Halls
-+
-+ ** Added PST-Import plugin
-+ * Makefile.am:
-+ * org-gnome-pst.eplug.xml:
-+ * pst-importer.c:
-Index: plugins/pst-import/org-gnome-pst.eplug.xml
-===================================================================
---- plugins/pst-import/org-gnome-pst.eplug.xml (revision 0)
-+++ plugins/pst-import/org-gnome-pst.eplug.xml (revision 0)
-@@ -0,0 +1,23 @@
-+
-+
-+
-+ <_description>Import Outlook messages from PST file
-+
-+
-+
-+
-+
-+
-+
-+
-+
-Index: plugins/pst-import/Makefile.am
-===================================================================
---- plugins/pst-import/Makefile.am (revision 0)
-+++ plugins/pst-import/Makefile.am (revision 0)
-@@ -0,0 +1,24 @@
-+INCLUDES = \
-+ -I$(EVOLUTION_SOURCE) \
-+ -I$(top_srcdir) \
-+ -DGETTEXT_PACKAGE="\"$(GETTEXT_PACKAGE)\"" \
-+ -DLOCALEDIR="\"$(LOCALEDIR)\"" \
-+ $(EVOLUTION_CFLAGS) \
-+ $(EVOLUTION_MAIL_CFLAGS)
-+
-+@EVO_PLUGIN_RULE@
-+
-+plugin_DATA = org-gnome-pst.eplug
-+plugin_LTLIBRARIES = liborg-gnome-pst.la
-+
-+liborg_gnome_pst_la_SOURCES = pst-importer.c
-+liborg_gnome_pst_la_LDFLAGS = -module -avoid-version
-+liborg_gnome_pst_la_LIBADD = \
-+ $(LIBPST_LIBS)
-+
-+EXTRA_DIST = org-gnome-pst.eplug.xml
-+
-+BUILT_SOURCES = org-gnome-pst.eplug
-+
-+CLEANFILES = $(BUILT_SOURCES)
-+
-Index: configure.in
-===================================================================
---- configure.in (revision 36340)
-+++ configure.in (working copy)
-@@ -1738,7 +1738,7 @@
- plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN "
- 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"
-+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"
-
- plugins_standard="$plugins_standard_always"
- all_plugins_standard="$plugins_standard"
-@@ -1853,6 +1853,23 @@
- fi
- fi
-
-+if echo ${plugins_enabled} | grep "pst-import" > /dev/null
-+then
-+ if ${PKG_CONFIG} --exists libpst
-+ then
-+ dnl *********************
-+ dnl libpst
-+ dnl *********************
-+ PKG_CHECK_MODULES(LIBPST, libpst)
-+ AC_SUBST(LIBPST_CFLAGS)
-+ AC_SUBST(LIBPST_LIBS)
-+ else
-+ plugins_enabled=`echo $plugins_enabled | sed -e "s/pst-import//g"`
-+ echo "warning: libpst was not found, pst-import plugin will not be built."
-+ echo "you are probably missing libpst-devel package."
-+ fi
-+fi
-+
- dnl ***********
- dnl GConf stuff
- dnl ***********
-@@ -2049,6 +2066,7 @@
- plugins/imap-features/Makefile
- plugins/tnef-attachments/Makefile
- plugins/templates/Makefile
-+plugins/pst-import/Makefile
- plugins/face/Makefile
- plugins/external-editor/Makefile
- plugins/webdav-account-setup/Makefile
diff --git a/remove-nm-dep.patch b/remove-nm-dep.patch
deleted file mode 100644
index 098a488..0000000
--- a/remove-nm-dep.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-=== modified file 'configure.in'
---- configure.in 2007-12-18 20:23:31 +0000
-+++ configure.in 2007-12-18 20:28:43 +0000
-@@ -1456,23 +1456,17 @@
- dnl --- evolution (shell) flags
-
- NM_SUPPORT_PACKAGES=""
-+NM_SUPPORT_GLIB="no"
-
--PKG_CHECK_MODULES(NM, dbus-glib-1 libnm_glib, NM_SUPPORT_GLIB="yes", NM_SUPPORT_GLIB="no")
--if test "x$NM_SUPPORT_GLIB" = "xyes"; then
-- AC_DEFINE(NM_SUPPORT_GLIB, 1, [network manager available])
-- NM_SUPPORT_PACKAGES="dbus-1 dbus-glib-1 libnm_glib"
--else
- PKG_CHECK_MODULES(NM, dbus-glib-1, NM_SUPPORT="yes", NM_SUPPORT="no")
-- AC_CHECK_HEADER(NetworkManager/NetworkManager.h, [ nm_header="yes" ] )
-- if test "x$NM_SUPPORT" = "xyes" -a "x$nm_header" = "xyes"; then
-+ if test "x$NM_SUPPORT" = "xyes"; then
- AC_DEFINE(NM_SUPPORT, 1, [network manager available])
- NM_SUPPORT_PACKAGES="dbus-1 dbus-glib-1"
- else
-- NM_SUPPORT=no
-- fi
-+ NM_SUPPORT="no"
- fi
-
--AM_CONDITIONAL(NM_SUPPORT_GLIB, test x$NM_SUPPORT_GLIB = xyes)
-+AM_CONDITIONAL(NM_SUPPORT_GLIB, test x$NM_SUPPORT_GLIB = xyes)
- AM_CONDITIONAL(NM_SUPPORT, test x$NM_SUPPORT = xyes)
-
-
-
-=== modified file 'shell/e-shell-nm.c'
---- shell/e-shell-nm.c 2007-12-18 20:23:31 +0000
-+++ shell/e-shell-nm.c 2007-12-18 20:28:43 +0000
-@@ -33,7 +33,11 @@
- #include
- #include
- #include
--#include
-+
-+#define NM_DBUS_SERVICE "org.freedesktop.NetworkManager"
-+#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"
-+#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
-+
-
- typedef enum _ShellLineStatus {
- E_SHELL_LINE_DOWN,
-
diff --git a/sharepoint-account-setup.patch b/sharepoint-account-setup.patch
index ff77c32..a822f35 100644
--- a/sharepoint-account-setup.patch
+++ b/sharepoint-account-setup.patch
@@ -1,8 +1,8 @@
-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)
+Index: evolution-2.25.90/plugins/mono/mono-plugin.c
+===================================================================
+--- evolution-2.25.90.orig/plugins/mono/mono-plugin.c
++++ evolution-2.25.90/plugins/mono/mono-plugin.c
+@@ -80,9 +80,14 @@ epm_invoke(EPlugin *ep, const char *name
MonoObject *x = NULL, *res;
void **params;
@@ -18,7 +18,7 @@ index 5c5182e..542e6f0 100644
mono_thread_attach(domain);
if (p->assembly == NULL) {
-@@ -230,8 +235,6 @@ load_plugin_type_register_function (void *a, void *b)
+@@ -231,8 +236,6 @@ load_plugin_type_register_function (void
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"));
@@ -27,11 +27,10 @@ index 5c5182e..542e6f0 100644
}
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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/Makefile.am
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/Makefile.am
++++ evolution-2.25.90/plugins/sharepoint-account-setup/Makefile.am
@@ -0,0 +1,37 @@
+CSC = gmcs
+
@@ -70,11 +69,10 @@ index 0000000..b01f3df
+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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/SharepointAccount.cs
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/SharepointAccount.cs
++++ evolution-2.25.90/plugins/sharepoint-account-setup/SharepointAccount.cs
@@ -0,0 +1,165 @@
+// SharepointAccount.cs created with MonoDevelop
+// User: chen at 12:30 PMÂ 10/21/2008
@@ -241,11 +239,10 @@ index 0000000..5009e98
+ }
+ }
+}
-diff --git a/plugins/sharepoint-account-setup/SharepointAccountSetup.cs b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
-new file mode 100644
-index 0000000..70d6b15
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
++++ evolution-2.25.90/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
@@ -0,0 +1,22 @@
+using System;
+using Sharepoint;
@@ -269,11 +266,10 @@ index 0000000..70d6b15
+ 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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/SharepointSource.cs
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/SharepointSource.cs
++++ evolution-2.25.90/plugins/sharepoint-account-setup/SharepointSource.cs
@@ -0,0 +1,97 @@
+// SharepointSource.cs created with MonoDevelop
+// User: chen at 1:38 AMÂ 10/21/2008
@@ -372,11 +368,10 @@ index 0000000..c61fcf0
+ }
+ }
+}
-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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
++++ evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
@@ -0,0 +1,36 @@
+
+
@@ -414,11 +409,10 @@ index 0000000..80cdeb8
+
+
+
-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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
++++ evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
@@ -0,0 +1,16 @@
+
+
@@ -436,11 +430,10 @@ index 0000000..d2545f8
+
+
+
-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
+Index: evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
++++ evolution-2.25.90/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
@@ -0,0 +1,16 @@
+
+
@@ -458,10 +451,10 @@ index 0000000..f92e097
+
+
+
-diff --git a/ui/evolution.xml b/ui/evolution.xml
-index 9b4231e..4008c95 100644
---- a/ui/evolution.xml
-+++ b/ui/evolution.xml
+Index: evolution-2.25.90/ui/evolution.xml
+===================================================================
+--- evolution-2.25.90.orig/ui/evolution.xml
++++ evolution-2.25.90/ui/evolution.xml
@@ -66,6 +66,8 @@
@@ -471,46 +464,45 @@ index 9b4231e..4008c95 100644
---- 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
+Index: evolution-2.25.90/configure.in
+===================================================================
+--- evolution-2.25.90.orig/configure.in
++++ evolution-2.25.90/configure.in
+@@ -923,6 +923,24 @@ if test "x${enable_mono}" = "xyes"; then
+ PKG_CHECK_MODULES(MONO, "mono")
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
++ 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],
+ AC_SUBST(MONO_CFLAGS)
+ AC_SUBST(MONO_LIBS)
+@@ -1775,7 +1793,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_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
+ plugins_standard_always="bbdb subject-thread save-calendar select-one-source copy-tool mail-to-task 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"
+@@ -1827,6 +1845,11 @@ if test "x${enable_mono}" = "xyes"; then
msg_plugins="$msg_plugins (and mono)"
fi
@@ -522,7 +514,7 @@ index 9b4231e..4008c95 100644
if test "x${enable_python}" = "xyes"; then
plugins_enabled="$plugins_enabled python"
-@@ -2072,6 +2097,7 @@ plugins/pst-import/Makefile
+@@ -2115,6 +2138,7 @@ plugins/pst-import/Makefile
plugins/face/Makefile
plugins/external-editor/Makefile
plugins/webdav-account-setup/Makefile
diff --git a/sp-meetingworkspace-ui.patch b/sp-meetingworkspace-ui.patch
index b696839..3be75e4 100644
--- a/sp-meetingworkspace-ui.patch
+++ b/sp-meetingworkspace-ui.patch
@@ -1,7 +1,7 @@
-diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
-index 16bdb97..5818165 100644
---- a/calendar/gui/dialogs/comp-editor.c
-+++ b/calendar/gui/dialogs/comp-editor.c
+Index: evolution-2.25.90/calendar/gui/dialogs/comp-editor.c
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/dialogs/comp-editor.c
++++ evolution-2.25.90/calendar/gui/dialogs/comp-editor.c
@@ -63,6 +63,7 @@
#include "../e-cal-popup.h"
#include "../calendar-config-keys.h"
@@ -19,7 +19,7 @@ index 16bdb97..5818165 100644
gchar *summary;
guint32 attachment_bar_visible : 1;
-@@ -2179,29 +2180,28 @@ setup_widgets (CompEditor *editor)
+@@ -2228,29 +2229,28 @@ setup_widgets (CompEditor *editor)
CompEditorPrivate *priv;
GtkWidget *expander_hbox;
GtkWidget *widget;
@@ -55,7 +55,7 @@ index 16bdb97..5818165 100644
gtk_widget_show (widget);
priv->notebook = GTK_NOTEBOOK (widget);
-@@ -2254,7 +2254,7 @@ setup_widgets (CompEditor *editor)
+@@ -2303,7 +2303,7 @@ setup_widgets (CompEditor *editor)
atk_object_set_description (gtk_widget_get_accessible (priv->attachment_expander), _("Press space key to toggle attachment bar"));
gtk_container_add (GTK_CONTAINER (priv->attachment_expander), priv->attachment_scrolled_window);
@@ -64,7 +64,7 @@ index 16bdb97..5818165 100644
gtk_widget_show (priv->attachment_expander);
e_expander_set_expanded (E_EXPANDER (priv->attachment_expander), FALSE);
g_signal_connect_after (priv->attachment_expander, "activate",
-@@ -2495,6 +2495,22 @@ comp_editor_get_ui_manager (CompEditor *editor)
+@@ -2546,6 +2546,22 @@ comp_editor_get_ui_manager (CompEditor *
return editor->priv->manager;
}
@@ -87,7 +87,7 @@ index 16bdb97..5818165 100644
GtkAction *
comp_editor_get_action (CompEditor *editor,
const gchar *action_name)
-@@ -2670,9 +2686,15 @@ comp_editor_append_page (CompEditor *editor,
+@@ -2721,9 +2737,15 @@ comp_editor_append_page (CompEditor *edi
priv->pages = g_list_append (priv->pages, page);
@@ -104,10 +104,10 @@ index 16bdb97..5818165 100644
/* Listen for things happening on the page */
g_signal_connect_swapped (
page, "dates_changed",
-diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
-index 5f7f14c..e7a681a 100644
---- a/calendar/gui/dialogs/event-editor.c
-+++ b/calendar/gui/dialogs/event-editor.c
+Index: evolution-2.25.90/calendar/gui/dialogs/event-editor.c
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/dialogs/event-editor.c
++++ evolution-2.25.90/calendar/gui/dialogs/event-editor.c
@@ -38,6 +38,7 @@
#include
#include
@@ -125,7 +125,7 @@ index 5f7f14c..e7a681a 100644
" "
" "
" "
-@@ -102,6 +103,17 @@ static gboolean event_editor_send_comp (CompEditor *editor, ECalComponentItipMet
+@@ -103,6 +104,17 @@ static gboolean event_editor_send_comp (
G_DEFINE_TYPE (EventEditor, event_editor, TYPE_COMP_EDITOR)
@@ -143,15 +143,7 @@ index 5f7f14c..e7a681a 100644
static void
create_schedule_page (CompEditor *editor)
{
-@@ -290,6 +302,7 @@ event_editor_constructor (GType type,
- gtk_action_group_set_visible (action_group, is_meeting);
-
- priv->event_page = event_page_new (priv->model, editor);
-+
- g_object_ref_sink (priv->event_page);
- comp_editor_append_page (
- editor, COMP_EDITOR_PAGE (priv->event_page),
-@@ -330,6 +343,11 @@ event_editor_constructor (GType type,
+@@ -334,6 +346,11 @@ event_editor_constructor (GType type,
event_page_set_meeting (priv->event_page, TRUE);
priv->meeting_shown=TRUE;
}
@@ -163,7 +155,7 @@ index 5f7f14c..e7a681a 100644
return object;
}
-@@ -492,7 +510,6 @@ event_editor_init (EventEditor *ee)
+@@ -496,7 +513,6 @@ event_editor_init (EventEditor *ee)
}
/* Hide send options. */
@@ -171,10 +163,10 @@ index 5f7f14c..e7a681a 100644
gtk_action_set_visible (action, FALSE);
g_signal_connect (
-diff --git a/calendar/gui/dialogs/event-editor.h b/calendar/gui/dialogs/event-editor.h
-index c050b92..7e804d1 100644
---- a/calendar/gui/dialogs/event-editor.h
-+++ b/calendar/gui/dialogs/event-editor.h
+Index: evolution-2.25.90/calendar/gui/dialogs/event-editor.h
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/dialogs/event-editor.h
++++ evolution-2.25.90/calendar/gui/dialogs/event-editor.h
@@ -68,6 +68,7 @@ GType event_editor_get_type (void);
CompEditor * event_editor_new (ECal *client,
CompEditorFlags flags);
@@ -183,11 +175,11 @@ index c050b92..7e804d1 100644
G_END_DECLS
-diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
-index 4a36f8c..ae33090 100644
---- a/calendar/gui/dialogs/event-page.c
-+++ b/calendar/gui/dialogs/event-page.c
-@@ -700,6 +700,26 @@ create_image_event_box (const char *image_text, const char *tip_text)
+Index: evolution-2.25.90/calendar/gui/dialogs/event-page.c
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/dialogs/event-page.c
++++ evolution-2.25.90/calendar/gui/dialogs/event-page.c
+@@ -701,6 +701,26 @@ create_image_event_box (const char *imag
return box;
}
@@ -214,24 +206,24 @@ index 4a36f8c..ae33090 100644
static void
sensitize_widgets (EventPage *epage)
{
-diff --git a/calendar/gui/dialogs/event-page.h b/calendar/gui/dialogs/event-page.h
-index 7c868f1..6c47ae5 100644
---- a/calendar/gui/dialogs/event-page.h
-+++ b/calendar/gui/dialogs/event-page.h
-@@ -109,6 +109,8 @@ ENameSelector * event_page_get_name_selector (EventPage *epage);
- void event_page_add_attendee (EventPage *epage,
+Index: evolution-2.25.90/calendar/gui/dialogs/event-page.h
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/dialogs/event-page.h
++++ evolution-2.25.90/calendar/gui/dialogs/event-page.h
+@@ -110,6 +110,8 @@ void event_page_add_attendee (EventPag
EMeetingAttendee *attendee);
+ void event_page_remove_all_attendees (EventPage *epage);
+GtkWidget * get_event_page_widget (EventPage *epage);
+
G_END_DECLS
#endif
-diff --git a/calendar/gui/e-cal-event.c b/calendar/gui/e-cal-event.c
-index 6e295ab..a30ce49 100644
---- a/calendar/gui/e-cal-event.c
-+++ b/calendar/gui/e-cal-event.c
-@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *com
+Index: evolution-2.25.90/calendar/gui/e-cal-event.c
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/e-cal-event.c
++++ evolution-2.25.90/calendar/gui/e-cal-event.c
+@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEv
return t;
}
@@ -248,7 +240,7 @@ index 6e295ab..a30ce49 100644
/* ********************************************************************** */
static void *eceh_parent_class;
-@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_component_masks[] = {
+@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_c
{ NULL },
};
@@ -267,11 +259,11 @@ index 6e295ab..a30ce49 100644
static void
eceh_finalize (GObject *o)
{
-diff --git a/calendar/gui/e-cal-event.h b/calendar/gui/e-cal-event.h
-index 4fbaa39..f131cb9 100644
---- a/calendar/gui/e-cal-event.h
-+++ b/calendar/gui/e-cal-event.h
-@@ -38,6 +38,7 @@ typedef struct _ECalEventClass ECalEventClass;
+Index: evolution-2.25.90/calendar/gui/e-cal-event.h
+===================================================================
+--- evolution-2.25.90.orig/calendar/gui/e-cal-event.h
++++ evolution-2.25.90/calendar/gui/e-cal-event.h
+@@ -38,6 +38,7 @@ typedef struct _ECalEventClass ECalEvent
enum _e_cal_event_target_t {
E_CAL_EVENT_TARGET_COMPONENT,
@@ -314,40 +306,10 @@ index 4fbaa39..f131cb9 100644
/* ********************************************************************** */
-diff --git a/configure.in b/configure.in
-index 13a5b2d..d147adf 100644
---- a/configure.in 2008-12-04 07:44:04.865124000 +0100
-+++ b/configure.in 2008-12-04 07:49:16.324346000 +0100
-new file mode 100644
-index 0000000..f101059
-@@ -918,3 +918,7 @@ if test "x${enable_mono}" = "xyes"; then
- AC_SUBST(ICE_DESKTOP_LIBS)
- MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup"
-+ SHAREPOINT_FEATURES=sharepoint-features
-+ PKG_CHECK_MODULES(DBUS, dbus-glib-1)
-+ AC_SUBST(DBUS_CFLAGS)
-+ AC_SUBST(DBUS_LIBS)
- fi
-@@ -1752,7 +1756,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 $MONO_BASED_PLUGINS"
-+plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $SHAREPOINT_FEATURES $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"
-@@ -2098,6 +2102,7 @@ plugins/face/Makefile
- plugins/external-editor/Makefile
- plugins/webdav-account-setup/Makefile
- plugins/sharepoint-account-setup/Makefile
-+plugins/sharepoint-features/Makefile
- smime/Makefile
- smime/lib/Makefile
- smime/gui/Makefile
-diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-features/Makefile.am
+Index: evolution-2.25.90/plugins/sharepoint-features/Makefile.am
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-features/Makefile.am
++++ evolution-2.25.90/plugins/sharepoint-features/Makefile.am
@@ -0,0 +1,40 @@
+INCLUDES = \
+ -I$(top_srcdir) \
@@ -389,11 +351,10 @@ diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-featur
+BUILT_SOURCES = org-gnome-sharepoint-features.eplug
+
+CLEANFILES = $(BUILT_SOURCES)
-diff --git a/plugins/sharepoint-features/meetingworkspaces.glade b/plugins/sharepoint-features/meetingworkspaces.glade
-new file mode 100644
-index 0000000..d2c1106
+Index: evolution-2.25.90/plugins/sharepoint-features/meetingworkspaces.glade
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-features/meetingworkspaces.glade
++++ evolution-2.25.90/plugins/sharepoint-features/meetingworkspaces.glade
@@ -0,0 +1,324 @@
+
+
@@ -719,11 +680,10 @@ index 0000000..d2c1106
+
+
+
-diff --git a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
-new file mode 100644
-index 0000000..d59db73
+Index: evolution-2.25.90/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
++++ evolution-2.25.90/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml
@@ -0,0 +1,20 @@
+
+
+
+
-diff --git a/plugins/sharepoint-features/meeting-workspace.c b/plugins/sharepoint-features/meeting-workspace.c
-new file mode 100644
-index 0000000..791a87b
+Index: evolution-2.25.90/plugins/sharepoint-features/meeting-workspace.c
+===================================================================
--- /dev/null
-+++ b/plugins/sharepoint-features/meeting-workspace.c
++++ evolution-2.25.90/plugins/sharepoint-features/meeting-workspace.c
@@ -0,0 +1,230 @@
+#ifdef HAVE_CONFIG_H
+#include
@@ -981,3 +940,35 @@ index 0000000..791a87b
+ g_error_free (error);
+ }
+}
+Index: evolution-2.25.90/configure.in
+===================================================================
+--- evolution-2.25.90.orig/configure.in
++++ evolution-2.25.90/configure.in
+@@ -917,6 +917,10 @@ MONO_CFLAGS=
+ MONO_LIBS=
+ AC_ARG_ENABLE([mono],
+ AC_HELP_STRING([--enable-mono],
++ SHAREPOINT_FEATURES=sharepoint-features
++ PKG_CHECK_MODULES(DBUS, dbus-glib-1)
++ AC_SUBST(DBUS_CFLAGS)
++ AC_SUBST(DBUS_LIBS)
+ [Add Mono embedded hooks.]),
+ [enable_mono=$enableval],[enable_mono=no])
+ if test "x${enable_mono}" = "xyes"; then
+@@ -1793,7 +1797,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 $MONO_BASED_PLUGINS"
++plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $SHAREPOINT_FEATURES $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 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"
+@@ -2139,6 +2143,7 @@ plugins/face/Makefile
+ plugins/external-editor/Makefile
+ plugins/webdav-account-setup/Makefile
+ plugins/sharepoint-account-setup/Makefile
++plugins/sharepoint-features/Makefile
+ smime/Makefile
+ smime/lib/Makefile
+ smime/gui/Makefile