Hello community,

here is the log from the commit of package evolution-data-server for 
openSUSE:Factory checked in at 2016-02-22 08:56:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/evolution-data-server (Old)
 and      /work/SRC/openSUSE:Factory/.evolution-data-server.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "evolution-data-server"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/evolution-data-server/evolution-data-server.changes  
    2016-01-23 01:03:29.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.evolution-data-server.new/evolution-data-server.changes
 2016-02-22 08:56:17.000000000 +0100
@@ -1,0 +2,16 @@
+Mon Feb 15 19:30:24 UTC 2016 - zai...@opensuse.org
+
+- Update to version 3.18.5:
+  + Use icaltzutil_set_exact_vtimezones_support(), if available.
+  + [IMAPx]:
+    - Connection could be used multiple times at once in certain
+      cases.
+    - Stop IDLE gracefully.
+    - Change how IDLE is handled.
+    - Remove runtime check from
+      imapx_conn_manager_dec_mailbox_hash().
+    - Crash in imapx_free_capability().
+    - Prefer graceful IDLE stop than forced reconnect.
+  + Bugs fixed: bgo#748996, bgo#759153, bgo#761527, bgo#760951.
+
+-------------------------------------------------------------------

Old:
----
  evolution-data-server-3.18.4.tar.xz

New:
----
  evolution-data-server-3.18.5.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ evolution-data-server.spec ++++++
--- /var/tmp/diff_new_pack.wHsEtJ/_old  2016-02-22 08:56:18.000000000 +0100
+++ /var/tmp/diff_new_pack.wHsEtJ/_new  2016-02-22 08:56:18.000000000 +0100
@@ -33,7 +33,7 @@
 
 Name:           evolution-data-server
 %define _evo_version 3.18
-Version:        3.18.4
+Version:        3.18.5
 Release:        0
 Summary:        Evolution Data Server
 License:        LGPL-2.1+

++++++ evolution-data-server-3.18.4.tar.xz -> 
evolution-data-server-3.18.5.tar.xz ++++++
++++ 1650 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/NEWS new/evolution-data-server-3.18.5/NEWS
--- old/evolution-data-server-3.18.4/NEWS       2016-01-18 12:55:05.000000000 
+0100
+++ new/evolution-data-server-3.18.5/NEWS       2016-02-15 14:07:26.000000000 
+0100
@@ -1,3 +1,21 @@
+Evolution-Data-Server 3.18.5 2016-02-15
+---------------------------------------
+
+Bug Fixes:
+       Bug 748996 - GNetworkAddress is not thread safe (Milan Crha)
+       Bug 759153 - Prefer gpg2 over gpg (again, to match default for 
seahorse) (Milan Crha)
+       Bug 761527 - Local calendar interval tree not always updated (Milan 
Crha)
+       Bug 760951 - Cannot copy contact from Google to WebDAV addressbook 
(Milan Crha)
+
+Miscellaneous:
+       Use icaltzutil_set_exact_vtimezones_support(), if available (Milan Crha)
+       [IMAPx] Connection could be used multiple times at once in certain 
cases (Milan Crha)
+       [IMAPx] Stop IDLE gracefully (Milan Crha)
+       [IMAPx] Change how IDLE is handled (Milan Crha)
+       [IMAPx] Remove runtime check from imapx_conn_manager_dec_mailbox_hash() 
(Milan Crha)
+       [IMAPx] Crash in imapx_free_capability() (Milan Crha)
+       [IMAPx] Prefer graceful IDLE stop than forced reconnect (Milan Crha)
+
 Evolution-Data-Server 3.18.4 2016-01-18
 ---------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/addressbook/backends/webdav/e-book-backend-webdav.c
 
new/evolution-data-server-3.18.5/addressbook/backends/webdav/e-book-backend-webdav.c
--- 
old/evolution-data-server-3.18.4/addressbook/backends/webdav/e-book-backend-webdav.c
        2015-09-21 11:19:51.000000000 +0200
+++ 
new/evolution-data-server-3.18.5/addressbook/backends/webdav/e-book-backend-webdav.c
        2016-02-11 18:42:20.000000000 +0100
@@ -1458,6 +1458,27 @@
 }
 
 static gboolean
+webdav_can_use_uid (const gchar *uid)
+{
+       const gchar *ptr;
+
+       if (!uid || !*uid)
+               return FALSE;
+
+       for (ptr = uid; *ptr; ptr++) {
+               if ((*ptr >= 'a' && *ptr <= 'z') ||
+                   (*ptr >= 'A' && *ptr <= 'Z') ||
+                   (*ptr >= '0' && *ptr <= '9') ||
+                   strchr (".-@", *ptr) != NULL)
+                       continue;
+
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+static gboolean
 book_backend_webdav_create_contacts_sync (EBookBackend *backend,
                                           const gchar * const *vcards,
                                           GQueue *out_contacts,
@@ -1495,7 +1516,7 @@
        contact = e_contact_new_from_vcard (vcards[0]);
 
        orig_uid = e_contact_get_const (contact, E_CONTACT_UID);
-       if (orig_uid && *orig_uid && !e_book_backend_cache_check_contact 
(webdav->priv->cache, orig_uid)) {
+       if (orig_uid && *orig_uid && webdav_can_use_uid (orig_uid) && 
!e_book_backend_cache_check_contact (webdav->priv->cache, orig_uid)) {
                uid = g_strdup (orig_uid);
        } else {
                uid = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/calendar/backends/file/e-cal-backend-file.c 
new/evolution-data-server-3.18.5/calendar/backends/file/e-cal-backend-file.c
--- 
old/evolution-data-server-3.18.4/calendar/backends/file/e-cal-backend-file.c    
    2015-09-21 15:51:55.000000000 +0200
+++ 
new/evolution-data-server-3.18.5/calendar/backends/file/e-cal-backend-file.c    
    2016-02-10 19:55:37.000000000 +0100
@@ -298,6 +298,8 @@
 
        priv = cbfile->priv;
 
+       g_rec_mutex_lock (&priv->idle_save_rmutex);
+
        e_intervaltree_destroy (priv->interval_tree);
        priv->interval_tree = NULL;
 
@@ -307,6 +309,8 @@
 
        g_list_free (priv->comp);
        priv->comp = NULL;
+
+       g_rec_mutex_unlock (&priv->idle_save_rmutex);
 }
 
 /* Dispose handler for the file backend */
@@ -629,15 +633,15 @@
 
 /* Adds component to the interval tree
  */
-static gboolean
+static void
 add_component_to_intervaltree (ECalBackendFile *cbfile,
                                ECalComponent *comp)
 {
        time_t time_start = -1, time_end = -1;
        ECalBackendFilePrivate *priv;
 
-       g_return_val_if_fail (cbfile != NULL, FALSE);
-       g_return_val_if_fail (comp != NULL, FALSE);
+       g_return_if_fail (cbfile != NULL);
+       g_return_if_fail (comp != NULL);
 
        priv = cbfile->priv;
 
@@ -650,10 +654,11 @@
                gchar *str = e_cal_component_get_as_string (comp);
                g_print ("Bogus component %s\n", str);
                g_free (str);
-       } else
+       } else {
+               g_rec_mutex_lock (&priv->idle_save_rmutex);
                e_intervaltree_insert (priv->interval_tree, time_start, 
time_end, comp);
-
-       return FALSE;
+               g_rec_mutex_unlock (&priv->idle_save_rmutex);
+       }
 }
 
 static gboolean
@@ -672,7 +677,11 @@
 
        rid = e_cal_component_get_recurid_as_string (comp);
        e_cal_component_get_uid (comp, &uid);
+
+       g_rec_mutex_lock (&priv->idle_save_rmutex);
        res = e_intervaltree_remove (priv->interval_tree, uid, rid);
+       g_rec_mutex_unlock (&priv->idle_save_rmutex);
+
        g_free (rid);
 
        return res;
@@ -776,7 +785,7 @@
 
        if (!remove_component_from_intervaltree (cbfile, comp)) {
                g_message (G_STRLOC " Could not remove component from interval 
tree!");
-               }
+       }
        icalcomponent_remove_component (priv->icalcomp, icalcomp);
 
        /* remove it from our mapping */
@@ -1127,6 +1136,8 @@
                return;
        }
 
+       g_rec_mutex_lock (&priv->idle_save_rmutex);
+
        cal_backend_file_take_icalcomp (cbfile, icalcomp);
        priv->path = uri_to_path (E_CAL_BACKEND (cbfile));
 
@@ -1134,6 +1145,8 @@
        priv->interval_tree = e_intervaltree_new ();
        scan_vcalendar (cbfile);
 
+       g_rec_mutex_unlock (&priv->idle_save_rmutex);
+
        prepare_refresh_data (cbfile);
 }
 
@@ -1254,6 +1267,8 @@
 
        /* Keep old data for comparison - free later */
 
+       g_rec_mutex_lock (&priv->idle_save_rmutex);
+
        icalcomp_old = priv->icalcomp;
        priv->icalcomp = NULL;
 
@@ -1272,6 +1287,8 @@
 
        priv->path = uri_to_path (E_CAL_BACKEND (cbfile));
 
+       g_rec_mutex_unlock (&priv->idle_save_rmutex);
+
        /* Compare old and new versions of calendar */
 
        notify_changes (cbfile, comp_uid_hash_old, priv->comp_uid_hash);
@@ -1304,6 +1321,8 @@
 
        g_free (dirname);
 
+       g_rec_mutex_lock (&priv->idle_save_rmutex);
+
        /* Create the new calendar information */
        icalcomp = e_cal_util_new_top_level ();
        cal_backend_file_take_icalcomp (cbfile, icalcomp);
@@ -1314,6 +1333,8 @@
 
        priv->path = uri_to_path (E_CAL_BACKEND (cbfile));
 
+       g_rec_mutex_unlock (&priv->idle_save_rmutex);
+
        save (cbfile, TRUE);
 
        prepare_refresh_data (cbfile);
@@ -2463,6 +2484,12 @@
 
                                e_cal_recur_ensure_end_dates (comp, TRUE, 
resolve_tzid, priv->icalcomp);
 
+                               if (!remove_component_from_intervaltree 
(cbfile, comp)) {
+                                       g_message (G_STRLOC " Could not remove 
component from interval tree!");
+                               }
+
+                               add_component_to_intervaltree (cbfile, comp);
+
                                icalcomponent_add_component (
                                        priv->icalcomp,
                                        e_cal_component_get_icalcomponent 
(obj_data->full_object));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/calendar/libedata-cal/e-data-cal-factory.c 
new/evolution-data-server-3.18.5/calendar/libedata-cal/e-data-cal-factory.c
--- old/evolution-data-server-3.18.4/calendar/libedata-cal/e-data-cal-factory.c 
2015-09-21 11:19:59.000000000 +0200
+++ new/evolution-data-server-3.18.5/calendar/libedata-cal/e-data-cal-factory.c 
2016-01-20 21:53:30.000000000 +0100
@@ -277,6 +277,10 @@
        ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN);
 #endif
 
+#ifdef HAVE_ICALTZUTIL_SET_EXACT_VTIMEZONES_SUPPORT
+       icaltzutil_set_exact_vtimezones_support (0);
+#endif
+
        /* XXX Pre-load all built-in timezones in libical.
         *
         *     Built-in time zones in libical 0.43 are loaded on demand,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/calendar/libedata-cal/e-subprocess-cal-factory.c
 
new/evolution-data-server-3.18.5/calendar/libedata-cal/e-subprocess-cal-factory.c
--- 
old/evolution-data-server-3.18.4/calendar/libedata-cal/e-subprocess-cal-factory.c
   2015-11-25 09:04:04.000000000 +0100
+++ 
new/evolution-data-server-3.18.5/calendar/libedata-cal/e-subprocess-cal-factory.c
   2016-01-20 21:53:30.000000000 +0100
@@ -144,6 +144,10 @@
        ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN);
 #endif
 
+#ifdef HAVE_ICALTZUTIL_SET_EXACT_VTIMEZONES_SUPPORT
+       icaltzutil_set_exact_vtimezones_support (0);
+#endif
+
        /* XXX Pre-load all built-in timezones in libical.
         *
         *     Built-in time zones in libical 0.43 are loaded on demand,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/camel-gpg-context.c 
new/evolution-data-server-3.18.5/camel/camel-gpg-context.c
--- old/evolution-data-server-3.18.4/camel/camel-gpg-context.c  2015-09-21 
11:19:59.000000000 +0200
+++ new/evolution-data-server-3.18.5/camel/camel-gpg-context.c  2016-01-27 
11:29:46.000000000 +0100
@@ -461,8 +461,8 @@
 {
        static gint index = -1;
        const gchar *names[] = {
+               "gpg2", /* Prefer gpg2, which the seahorse might use too */
                "gpg",
-               "gpg2", /* Prefer gpg for now, because gpg2 doesn't save 
passwords (neither for the session) */
                NULL
        };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/camel-network-service.c 
new/evolution-data-server-3.18.5/camel/camel-network-service.c
--- old/evolution-data-server-3.18.4/camel/camel-network-service.c      
2015-08-19 13:39:50.000000000 +0200
+++ new/evolution-data-server-3.18.5/camel/camel-network-service.c      
2016-01-26 17:14:19.000000000 +0100
@@ -730,10 +730,21 @@
 
        g_mutex_lock (&priv->property_lock);
 
-       if (priv->connectable != NULL)
+       if (priv->connectable != NULL) {
                connectable = g_object_ref (priv->connectable);
+               g_mutex_unlock (&priv->property_lock);
+       } else {
+               CamelNetworkServiceInterface *iface;
+
+               g_mutex_unlock (&priv->property_lock);
+
+               iface = CAMEL_NETWORK_SERVICE_GET_INTERFACE (service);
+               g_return_val_if_fail (iface->new_connectable != NULL, NULL);
 
-       g_mutex_unlock (&priv->property_lock);
+               /* This may return NULL if we don't have valid network
+                * settings from which to create a GSocketConnectable. */
+               connectable = iface->new_connectable (service);
+       }
 
        return connectable;
 }
@@ -753,24 +764,21 @@
 camel_network_service_set_connectable (CamelNetworkService *service,
                                        GSocketConnectable *connectable)
 {
-       CamelNetworkServiceInterface *iface;
        CamelNetworkServicePrivate *priv;
 
        g_return_if_fail (CAMEL_IS_NETWORK_SERVICE (service));
 
-       iface = CAMEL_NETWORK_SERVICE_GET_INTERFACE (service);
-       g_return_if_fail (iface->new_connectable != NULL);
-
        priv = CAMEL_NETWORK_SERVICE_GET_PRIVATE (service);
        g_return_if_fail (priv != NULL);
 
+       /* The GNetworkAddress is not thread safe, thus rather than precache it,
+          create a new instance whenever it's asked for it. Keep precached only
+          the connectable which had been explicitly set, because there cannot 
be
+          done exact copy of it.
+       */
        if (connectable != NULL) {
                g_return_if_fail (G_IS_SOCKET_CONNECTABLE (connectable));
                g_object_ref (connectable);
-       } else {
-               /* This may return NULL if we don't have valid network
-                * settings from which to create a GSocketConnectable. */
-               connectable = iface->new_connectable (service);
        }
 
        g_mutex_lock (&priv->property_lock);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-command.c 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-command.c
--- 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-command.c    
    2015-09-21 11:19:59.000000000 +0200
+++ 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-command.c    
    2016-02-01 15:10:44.000000000 +0100
@@ -420,7 +420,7 @@
        if (type & CAMEL_IMAPX_COMMAND_LITERAL_PLUS) {
                g_string_append_c (buffer, '{');
                g_string_append_printf (buffer, "%u", ob_size);
-               if (CAMEL_IMAPX_HAVE_CAPABILITY 
(camel_imapx_server_get_capability_info (ic->is), LITERALPLUS)) {
+               if (camel_imapx_server_have_capability (ic->is, 
IMAPX_CAPABILITY_LITERALPLUS)) {
                        g_string_append_c (buffer, '+');
                } else {
                        type &= ~CAMEL_IMAPX_COMMAND_LITERAL_PLUS;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-conn-manager.c
 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-conn-manager.c
--- 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-conn-manager.c
   2016-01-13 12:27:48.000000000 +0100
+++ 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-conn-manager.c
   2016-01-29 09:49:07.000000000 +0100
@@ -216,6 +216,25 @@
 }
 
 static gboolean
+connection_info_try_reserve (ConnectionInfo *cinfo)
+{
+       gboolean reserved = FALSE;
+
+       g_return_val_if_fail (cinfo != NULL, FALSE);
+
+       g_mutex_lock (&cinfo->lock);
+
+       if (!cinfo->busy) {
+               cinfo->busy = TRUE;
+               reserved = TRUE;
+       }
+
+       g_mutex_unlock (&cinfo->lock);
+
+       return reserved;
+}
+
+static gboolean
 connection_info_get_busy (ConnectionInfo *cinfo)
 {
        gboolean busy;
@@ -394,8 +413,6 @@
        count = GPOINTER_TO_INT (g_hash_table_lookup (mailboxes_hash, mailbox));
        if (!count) {
                g_mutex_unlock (&conn_man->priv->busy_mailboxes_lock);
-               g_warn_if_fail (count > 0);
-
                return;
        }
 
@@ -845,9 +862,8 @@
                        for (link = conn_man->priv->connections; link; link = 
g_list_next (link)) {
                                ConnectionInfo *candidate = link->data;
 
-                               if (candidate && !connection_info_get_busy 
(candidate)) {
+                               if (candidate && connection_info_try_reserve 
(candidate)) {
                                        cinfo = connection_info_ref (candidate);
-                                       connection_info_set_busy (cinfo, TRUE);
                                        break;
                                }
                        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-server.c 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-server.c
--- old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-server.c 
2016-01-13 12:27:48.000000000 +0100
+++ new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-server.c 
2016-02-03 12:22:51.000000000 +0100
@@ -226,6 +226,14 @@
        {CAMEL_IMAPX_UNTAGGED_VANISHED, imapx_untagged_vanished, NULL, TRUE},
 };
 
+typedef enum {
+       IMAPX_IDLE_STATE_OFF,       /* no IDLE running at all */
+       IMAPX_IDLE_STATE_SCHEDULED, /* IDLE scheduled, but still waiting */
+       IMAPX_IDLE_STATE_PREPARING, /* IDLE command going to be processed */
+       IMAPX_IDLE_STATE_RUNNING,   /* IDLE command had been processed, server 
responded */
+       IMAPX_IDLE_STATE_STOPPING   /* DONE had been issued, waiting for 
completion */
+} IMAPXIdleState;
+
 struct _CamelIMAPXServerPrivate {
        GWeakRef store;
        GCancellable *cancellable; /* the main connection cancellable, it's 
cancelled on disconnect */
@@ -273,19 +281,17 @@
        gchar inbox_separator;
 
        /* IDLE support */
-       GRecMutex idle_lock;
-       GThread *idle_thread;
-       GMainLoop *idle_main_loop;
-       GMainContext *idle_main_context;
+       GMutex idle_lock;
+       GCond idle_cond;
+       IMAPXIdleState idle_state;
        GSource *idle_pending;
        CamelIMAPXMailbox *idle_mailbox;
        GCancellable *idle_cancellable;
-       gboolean idle_running;
        guint idle_stamp;
 
        gboolean is_cyrus;
 
-       /* Info about the current connection */
+       /* Info about the current connection; guarded by priv->stream_lock */
        struct _capability_info *cinfo;
 
        GRecMutex command_lock;
@@ -776,21 +782,36 @@
                            GCancellable *cancellable,
                            GError **error)
 {
+       struct _capability_info *cinfo;
+
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
 
-       if (is->priv->cinfo != NULL)
+       g_mutex_lock (&is->priv->stream_lock);
+
+       if (is->priv->cinfo != NULL) {
                imapx_free_capability (is->priv->cinfo);
+               is->priv->cinfo = NULL;
+       }
 
-       is->priv->cinfo = imapx_parse_capability (
-               CAMEL_IMAPX_INPUT_STREAM (input_stream), cancellable, error);
+       g_mutex_unlock (&is->priv->stream_lock);
 
-       if (is->priv->cinfo == NULL)
+       cinfo = imapx_parse_capability (CAMEL_IMAPX_INPUT_STREAM 
(input_stream), cancellable, error);
+
+       if (!cinfo)
                return FALSE;
 
+       g_mutex_lock (&is->priv->stream_lock);
+
+       if (is->priv->cinfo != NULL)
+               imapx_free_capability (is->priv->cinfo);
+       is->priv->cinfo = cinfo;
+
        c (is->priv->tagprefix, "got capability flags %08x\n", 
is->priv->cinfo->capa);
 
        imapx_server_stash_command_arguments (is);
 
+       g_mutex_unlock (&is->priv->stream_lock);
+
        return TRUE;
 }
 
@@ -1783,7 +1804,11 @@
                break;
        case IMAPX_CAPABILITY:
                if (is->priv->context->sinfo->u.cinfo) {
-                       struct _capability_info *cinfo = is->priv->cinfo;
+                       struct _capability_info *cinfo;
+
+                       g_mutex_lock (&is->priv->stream_lock);
+
+                       cinfo = is->priv->cinfo;
                        is->priv->cinfo = is->priv->context->sinfo->u.cinfo;
                        is->priv->context->sinfo->u.cinfo = NULL;
                        if (cinfo)
@@ -1800,7 +1825,10 @@
                                        is->priv->cinfo->capa &= ~list_extended;
                                }
                        }
+
                        imapx_server_stash_command_arguments (is);
+
+                       g_mutex_unlock (&is->priv->stream_lock);
                }
                break;
        case IMAPX_COPYUID:
@@ -2015,6 +2043,11 @@
 
                c (is->priv->tagprefix, "Got continuation response for IDLE 
\n");
 
+               g_mutex_lock (&is->priv->idle_lock);
+               is->priv->idle_state = IMAPX_IDLE_STATE_RUNNING;
+               g_cond_broadcast (&is->priv->idle_cond);
+               g_mutex_unlock (&is->priv->idle_lock);
+
                return TRUE;
        }
 
@@ -2698,7 +2731,11 @@
                        goto exit;
        }
 
+       g_mutex_lock (&is->priv->stream_lock);
+
        if (!is->priv->cinfo) {
+               g_mutex_unlock (&is->priv->stream_lock);
+
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_CAPABILITY, 
"CAPABILITY");
 
                success = camel_imapx_server_process_command_sync (is, ic, 
_("Failed to get capabilities"), cancellable, error);
@@ -2707,17 +2744,24 @@
 
                if (!success)
                        goto exit;
+       } else {
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        if (method == CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT) {
 
+               g_mutex_lock (&is->priv->stream_lock);
+
                if (CAMEL_IMAPX_LACK_CAPABILITY (is->priv->cinfo, STARTTLS)) {
+                       g_mutex_unlock (&is->priv->stream_lock);
                        g_set_error (
                                &local_error, CAMEL_ERROR,
                                CAMEL_ERROR_GENERIC,
                                _("Failed to connect to IMAP server %s in 
secure mode: %s"),
                                host, _("STARTTLS not supported"));
                        goto exit;
+               } else {
+                       g_mutex_unlock (&is->priv->stream_lock);
                }
 
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_STARTTLS, 
"STARTTLS");
@@ -2725,6 +2769,8 @@
                success = camel_imapx_server_process_command_sync (is, ic, 
_("Failed to issue STARTTLS"), cancellable, error);
 
                if (success) {
+                       g_mutex_lock (&is->priv->stream_lock);
+
                        /* See if we got new capabilities
                         * in the STARTTLS response. */
                        imapx_free_capability (is->priv->cinfo);
@@ -2735,6 +2781,8 @@
                                c (is->priv->tagprefix, "got capability flags 
%08x\n", is->priv->cinfo ? is->priv->cinfo->capa : 0xFFFFFFFF);
                                imapx_server_stash_command_arguments (is);
                        }
+
+                       g_mutex_unlock (&is->priv->stream_lock);
                }
 
                camel_imapx_command_unref (ic);
@@ -2773,13 +2821,17 @@
                }
 
                /* Get new capabilities if they weren't already given */
+               g_mutex_lock (&is->priv->stream_lock);
                if (is->priv->cinfo == NULL) {
+                       g_mutex_unlock (&is->priv->stream_lock);
                        ic = camel_imapx_command_new (is, 
CAMEL_IMAPX_JOB_CAPABILITY, "CAPABILITY");
                        success = camel_imapx_server_process_command_sync (is, 
ic, _("Failed to get capabilities"), cancellable, error);
                        camel_imapx_command_unref (ic);
 
                        if (!success)
                                goto exit;
+               } else {
+                       g_mutex_unlock (&is->priv->stream_lock);
                }
        }
 
@@ -2848,7 +2900,11 @@
        g_object_unref (settings);
 
        if (mechanism != NULL) {
+               g_mutex_lock (&is->priv->stream_lock);
+
                if (is->priv->cinfo && !g_hash_table_lookup 
(is->priv->cinfo->auth_types, mechanism)) {
+                       g_mutex_unlock (&is->priv->stream_lock);
+
                        g_set_error (
                                error, CAMEL_SERVICE_ERROR,
                                CAMEL_SERVICE_ERROR_CANT_AUTHENTICATE,
@@ -2856,6 +2912,8 @@
                                "authentication"), host, mechanism);
                        result = CAMEL_AUTHENTICATION_ERROR;
                        goto exit;
+               } else {
+                       g_mutex_unlock (&is->priv->stream_lock);
                }
 
                sasl = camel_sasl_new ("imap", mechanism, service);
@@ -2942,6 +3000,8 @@
 
        /* Forget old capabilities after login. */
        if (result == CAMEL_AUTHENTICATION_ACCEPTED) {
+               g_mutex_lock (&is->priv->stream_lock);
+
                if (is->priv->cinfo) {
                        imapx_free_capability (is->priv->cinfo);
                        is->priv->cinfo = NULL;
@@ -2953,6 +3013,8 @@
                        c (is->priv->tagprefix, "got capability flags %08x\n", 
is->priv->cinfo ? is->priv->cinfo->capa : 0xFFFFFFFF);
                        imapx_server_stash_command_arguments (is);
                }
+
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        camel_imapx_command_unref (ic);
@@ -3009,9 +3071,12 @@
                goto exception;
 
        /* After login we re-capa unless the server already told us. */
+       g_mutex_lock (&is->priv->stream_lock);
        if (is->priv->cinfo == NULL) {
                GError *local_error = NULL;
 
+               g_mutex_unlock (&is->priv->stream_lock);
+
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_CAPABILITY, 
"CAPABILITY");
                camel_imapx_server_process_command_sync (is, ic, _("Failed to 
get capabilities"), cancellable, &local_error);
                camel_imapx_command_unref (ic);
@@ -3020,15 +3085,20 @@
                        g_propagate_error (error, local_error);
                        goto exception;
                }
+       } else {
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        is->priv->state = IMAPX_AUTHENTICATED;
 
 preauthed:
        /* Fetch namespaces (if supported). */
+       g_mutex_lock (&is->priv->stream_lock);
        if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, NAMESPACE)) {
                GError *local_error = NULL;
 
+               g_mutex_unlock (&is->priv->stream_lock);
+
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_NAMESPACE, 
"NAMESPACE");
                camel_imapx_server_process_command_sync (is, ic, _("Failed to 
issue NAMESPACE"), cancellable, &local_error);
                camel_imapx_command_unref (ic);
@@ -3037,12 +3107,16 @@
                        g_propagate_error (error, local_error);
                        goto exception;
                }
+
+               g_mutex_lock (&is->priv->stream_lock);
        }
 
        /* Enable quick mailbox resynchronization (if supported). */
        if (use_qresync && CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, 
QRESYNC)) {
                GError *local_error = NULL;
 
+               g_mutex_unlock (&is->priv->stream_lock);
+
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_ENABLE, 
"ENABLE CONDSTORE QRESYNC");
                camel_imapx_server_process_command_sync (is, ic, _("Failed to 
enable QResync"), cancellable, &local_error);
                camel_imapx_command_unref (ic);
@@ -3052,6 +3126,8 @@
                        goto exception;
                }
 
+               g_mutex_lock (&is->priv->stream_lock);
+
                is->priv->use_qresync = TRUE;
        } else {
                is->priv->use_qresync = FALSE;
@@ -3061,6 +3137,8 @@
        if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, NOTIFY)) {
                GError *local_error = NULL;
 
+               g_mutex_unlock (&is->priv->stream_lock);
+
                /* XXX The list of FETCH attributes is negotiable. */
                ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_NOTIFY, 
"NOTIFY SET "
                        "(selected "
@@ -3079,8 +3157,12 @@
                        g_propagate_error (error, local_error);
                        goto exception;
                }
+
+               g_mutex_lock (&is->priv->stream_lock);
        }
 
+       g_mutex_unlock (&is->priv->stream_lock);
+
        is->priv->state = IMAPX_INITIALISED;
 
        success = TRUE;
@@ -3090,11 +3172,6 @@
 exception:
        imapx_disconnect (is);
 
-       if (is->priv->cinfo) {
-               imapx_free_capability (is->priv->cinfo);
-               is->priv->cinfo = NULL;
-       }
-
 exit:
        g_free (mechanism);
 
@@ -3169,27 +3246,16 @@
 imapx_server_dispose (GObject *object)
 {
        CamelIMAPXServer *server = CAMEL_IMAPX_SERVER (object);
-       gboolean idle_main_loop_is_running;
 
        g_cancellable_cancel (server->priv->cancellable);
 
-       /* Server should be shut down already. Warn if
-        * the idle thread is still running. */
-       idle_main_loop_is_running = g_main_loop_is_running 
(server->priv->idle_main_loop);
-       g_warn_if_fail (!idle_main_loop_is_running);
-
-       if (server->priv->idle_thread != NULL) {
-               g_thread_unref (server->priv->idle_thread);
-               server->priv->idle_thread = NULL;
-       }
-
        imapx_disconnect (server);
 
        g_weak_ref_set (&server->priv->store, NULL);
 
        g_clear_object (&server->priv->subprocess);
 
-       g_rec_mutex_lock (&server->priv->idle_lock);
+       g_mutex_lock (&server->priv->idle_lock);
        g_clear_object (&server->priv->idle_cancellable);
        g_clear_object (&server->priv->idle_mailbox);
        if (server->priv->idle_pending) {
@@ -3197,7 +3263,7 @@
                g_source_unref (server->priv->idle_pending);
                server->priv->idle_pending = NULL;
        }
-       g_rec_mutex_unlock (&server->priv->idle_lock);
+       g_mutex_unlock (&server->priv->idle_lock);
 
        g_clear_object (&server->priv->subprocess);
 
@@ -3233,9 +3299,8 @@
        g_hash_table_destroy (is->priv->known_alerts);
        g_mutex_clear (&is->priv->known_alerts_lock);
 
-       g_rec_mutex_clear (&is->priv->idle_lock);
-       g_main_loop_unref (is->priv->idle_main_loop);
-       g_main_context_unref (is->priv->idle_main_context);
+       g_mutex_clear (&is->priv->idle_lock);
+       g_cond_clear (&is->priv->idle_cond);
 
        g_rec_mutex_clear (&is->priv->command_lock);
 
@@ -3298,8 +3363,6 @@
 static void
 camel_imapx_server_init (CamelIMAPXServer *is)
 {
-       GMainContext *main_context;
-
        is->priv = CAMEL_IMAPX_SERVER_GET_PRIVATE (is);
 
        is->priv->untagged_handlers = create_initial_untagged_handler_table ();
@@ -3328,15 +3391,11 @@
                (GDestroyNotify) g_free,
                (GDestroyNotify) NULL);
 
-       /* Initialize IDLE thread structs. */
-
-       main_context = g_main_context_new ();
-
-       g_rec_mutex_init (&is->priv->idle_lock);
-       is->priv->idle_main_loop = g_main_loop_new (main_context, FALSE);
-       is->priv->idle_main_context = g_main_context_ref (main_context);
-
-       g_main_context_unref (main_context);
+       /* Initialize IDLE members. */
+       g_mutex_init (&is->priv->idle_lock);
+       g_cond_init (&is->priv->idle_cond);
+       is->priv->idle_state = IMAPX_IDLE_STATE_OFF;
+       is->priv->idle_stamp = 0;
 
        g_rec_mutex_init (&is->priv->command_lock);
 }
@@ -3614,8 +3673,8 @@
        COMMAND_LOCK (is);
 
        if (is->priv->current_command != NULL) {
-               g_warning ("%s: Starting command %p (%s) while still processing 
%p (%s)", G_STRFUNC,
-                       ic, camel_imapx_job_get_kind_name (ic->job_kind),
+               g_warning ("%s: [%c] %p: Starting command %p (%s) while still 
processing %p (%s)", G_STRFUNC,
+                       is->priv->tagprefix, is, ic, 
camel_imapx_job_get_kind_name (ic->job_kind),
                        is->priv->current_command, 
camel_imapx_job_get_kind_name (is->priv->current_command->job_kind));
        }
 
@@ -3769,6 +3828,11 @@
        g_clear_object (&is->priv->connection);
        g_clear_object (&is->priv->subprocess);
 
+       if (is->priv->cinfo) {
+               imapx_free_capability (is->priv->cinfo);
+               is->priv->cinfo = NULL;
+       }
+
        g_mutex_unlock (&is->priv->stream_lock);
 
        g_mutex_lock (&is->priv->select_lock);
@@ -3776,13 +3840,13 @@
        g_weak_ref_set (&is->priv->select_pending, NULL);
        g_mutex_unlock (&is->priv->select_lock);
 
-       if (is->priv->cinfo) {
-               imapx_free_capability (is->priv->cinfo);
-               is->priv->cinfo = NULL;
-       }
-
        is->priv->is_cyrus = FALSE;
        is->priv->state = IMAPX_DISCONNECTED;
+
+       g_mutex_lock (&is->priv->idle_lock);
+       is->priv->idle_state = IMAPX_IDLE_STATE_OFF;
+       g_cond_broadcast (&is->priv->idle_cond);
+       g_mutex_unlock (&is->priv->idle_lock);
 }
 
 /* Client commands */
@@ -3809,10 +3873,16 @@
        if (!imapx_reconnect (is, cancellable, error))
                return FALSE;
 
+       g_mutex_lock (&is->priv->stream_lock);
+
        if (CAMEL_IMAPX_LACK_CAPABILITY (is->priv->cinfo, NAMESPACE)) {
+               g_mutex_unlock (&is->priv->stream_lock);
+
                /* This also creates a needed faux NAMESPACE */
                if (!camel_imapx_server_list_sync (is, "INBOX", 0, cancellable, 
error))
                        return FALSE;
+       } else {
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        return TRUE;
@@ -3828,11 +3898,11 @@
 
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
        idle_cancellable = is->priv->idle_cancellable;
        if (idle_cancellable)
                g_object_ref (idle_cancellable);
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        if (idle_cancellable)
                g_cancellable_cancel (idle_cancellable);
@@ -4114,10 +4184,14 @@
 
        /* If we're moving messages, prefer "UID MOVE" if supported. */
        if (delete_originals) {
+               g_mutex_lock (&is->priv->stream_lock);
+
                if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, MOVE)) {
                        delete_originals = FALSE;
                        use_move_command = TRUE;
                }
+
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        source_infos = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, 
camel_message_info_unref);
@@ -5747,11 +5821,17 @@
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
        g_return_val_if_fail (CAMEL_IS_IMAPX_MAILBOX (mailbox), FALSE);
 
+       g_mutex_lock (&is->priv->stream_lock);
+
        if (CAMEL_IMAPX_LACK_CAPABILITY (is->priv->cinfo, QUOTA)) {
+               g_mutex_unlock (&is->priv->stream_lock);
+
                g_set_error_literal (
                        error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
                        _("IMAP server does not support quotas"));
                return FALSE;
+       } else {
+               g_mutex_unlock (&is->priv->stream_lock);
        }
 
        success = camel_imapx_server_ensure_selected_sync (is, mailbox, 
cancellable, error);
@@ -5871,12 +5951,13 @@
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), NULL);
        g_return_val_if_fail (G_IS_CANCELLABLE (idle_cancellable), NULL);
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
 
        if (g_cancellable_is_cancelled (idle_cancellable) ||
-           is->priv->idle_stamp != itd->idle_stamp) {
-               is->priv->idle_running = FALSE;
-               g_rec_mutex_unlock (&is->priv->idle_lock);
+           is->priv->idle_stamp != itd->idle_stamp ||
+           is->priv->idle_state != IMAPX_IDLE_STATE_SCHEDULED) {
+               g_cond_broadcast (&is->priv->idle_cond);
+               g_mutex_unlock (&is->priv->idle_lock);
 
                g_clear_object (&itd->is);
                g_clear_object (&itd->idle_cancellable);
@@ -5885,13 +5966,14 @@
                return NULL;
        }
 
+       is->priv->idle_state = IMAPX_IDLE_STATE_PREPARING;
+       g_cond_broadcast (&is->priv->idle_cond);
+
        mailbox = is->priv->idle_mailbox;
        if (mailbox)
                g_object_ref (mailbox);
 
-       is->priv->idle_running = TRUE;
-
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        if (!mailbox)
                mailbox = camel_imapx_server_ref_selected (is);
@@ -5917,8 +5999,18 @@
                previous_timeout = imapx_server_set_connection_timeout 
(is->priv->connection, INACTIVITY_TIMEOUT_SECONDS + 60);
        g_mutex_unlock (&is->priv->stream_lock);
 
-       /* Blocks, until the DONE is issued or on inactivity timeout, error, 
... */
-       success = camel_imapx_server_process_command_sync (is, ic, _("Error 
running IDLE"), idle_cancellable, &local_error);
+       g_mutex_lock (&is->priv->idle_lock);
+       if (is->priv->idle_stamp == itd->idle_stamp &&
+           is->priv->idle_state == IMAPX_IDLE_STATE_PREPARING) {
+               g_mutex_unlock (&is->priv->idle_lock);
+
+               /* Blocks, until the DONE is issued or on inactivity timeout, 
error, ... */
+               success = camel_imapx_server_process_command_sync (is, ic, 
_("Error running IDLE"), idle_cancellable, &local_error);
+
+               rather_disconnect = rather_disconnect || !success || 
g_cancellable_is_cancelled (idle_cancellable);
+       } else {
+               g_mutex_unlock (&is->priv->idle_lock);
+       }
 
        if (previous_timeout >= 0) {
                g_mutex_lock (&is->priv->stream_lock);
@@ -5930,16 +6022,18 @@
        camel_imapx_command_unref (ic);
 
  exit:
-       g_rec_mutex_lock (&is->priv->idle_lock);
-       is->priv->idle_running = FALSE;
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
+       g_clear_object (&is->priv->idle_cancellable);
+       is->priv->idle_state = IMAPX_IDLE_STATE_OFF;
+       g_cond_broadcast (&is->priv->idle_cond);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        if (success)
-               c (camel_imapx_server_get_tagprefix (is), "IDLE finished 
successfully");
+               c (camel_imapx_server_get_tagprefix (is), "IDLE finished 
successfully\n");
        else if (local_error)
-               c (camel_imapx_server_get_tagprefix (is), "IDLE finished with 
error: %s%s", local_error->message, rather_disconnect ? "; rather disconnect" : 
"");
+               c (camel_imapx_server_get_tagprefix (is), "IDLE finished with 
error: %s%s\n", local_error->message, rather_disconnect ? "; rather disconnect" 
: "");
        else
-               c (camel_imapx_server_get_tagprefix (is), "IDLE finished 
without error%s", rather_disconnect ? "; rather disconnect" : "");
+               c (camel_imapx_server_get_tagprefix (is), "IDLE finished 
without error%s\n", rather_disconnect ? "; rather disconnect" : "");
 
        if (rather_disconnect) {
                imapx_disconnect (is);
@@ -5967,10 +6061,11 @@
        if (!is)
                return FALSE;
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
 
        if (g_main_current_source () == is->priv->idle_pending) {
-               if (!g_source_is_destroyed (g_main_current_source ())) {
+               if (!g_source_is_destroyed (g_main_current_source ()) &&
+                   is->priv->idle_state == IMAPX_IDLE_STATE_SCHEDULED) {
                        IdleThreadData *itd;
                        GThread *thread;
                        GError *local_error = NULL;
@@ -5980,11 +6075,9 @@
                        itd->idle_cancellable = g_object_ref 
(is->priv->idle_cancellable);
                        itd->idle_stamp = is->priv->idle_stamp;
 
-                       is->priv->idle_running = TRUE;
-
                        thread = g_thread_try_new (NULL, 
imapx_server_idle_thread, itd, &local_error);
                        if (thread) {
-                               is->priv->idle_thread = thread;
+                               g_thread_unref (thread);
                        } else {
                                g_warning ("%s: Failed to create IDLE thread: 
%s", G_STRFUNC, local_error ? local_error->message : "Unknown error");
 
@@ -6000,7 +6093,7 @@
                is->priv->idle_pending = NULL;
        }
 
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        return FALSE;
 }
@@ -6010,9 +6103,14 @@
 {
        gboolean use_idle = FALSE;
 
+       g_mutex_lock (&is->priv->stream_lock);
+
        /* No need for IDLE if the server supports NOTIFY. */
-       if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, NOTIFY))
+       if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, NOTIFY)) {
+               g_mutex_unlock (&is->priv->stream_lock);
+
                return FALSE;
+       }
 
        if (CAMEL_IMAPX_HAVE_CAPABILITY (is->priv->cinfo, IDLE)) {
                CamelIMAPXSettings *settings;
@@ -6022,6 +6120,8 @@
                g_object_unref (settings);
        }
 
+       g_mutex_unlock (&is->priv->stream_lock);
+
        return use_idle;
 }
 
@@ -6032,9 +6132,9 @@
 
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
-       in_idle = is->priv->idle_running || is->priv->idle_pending || 
is->priv->idle_thread;
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
+       in_idle = is->priv->idle_state != IMAPX_IDLE_STATE_OFF;
+       g_mutex_unlock (&is->priv->idle_lock);
 
        return in_idle;
 }
@@ -6046,16 +6146,16 @@
 
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), NULL);
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
 
-       if (is->priv->idle_running || is->priv->idle_pending || 
is->priv->idle_thread) {
+       if (is->priv->idle_state != IMAPX_IDLE_STATE_OFF) {
                if (is->priv->idle_mailbox)
                        mailbox = g_object_ref (is->priv->idle_mailbox);
                else
                        mailbox = camel_imapx_server_ref_selected (is);
        }
 
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        return mailbox;
 }
@@ -6076,7 +6176,15 @@
        if (!camel_imapx_server_can_use_idle (is))
                return TRUE;
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       g_mutex_lock (&is->priv->idle_lock);
+
+       if (is->priv->idle_state != IMAPX_IDLE_STATE_OFF) {
+               g_warn_if_fail (is->priv->idle_state == IMAPX_IDLE_STATE_OFF);
+
+               g_mutex_unlock (&is->priv->idle_lock);
+
+               return FALSE;
+       }
 
        g_warn_if_fail (is->priv->idle_cancellable == NULL);
 
@@ -6092,114 +6200,136 @@
        if (mailbox)
                is->priv->idle_mailbox = g_object_ref (mailbox);
 
+       is->priv->idle_state = IMAPX_IDLE_STATE_SCHEDULED;
        is->priv->idle_pending = g_timeout_source_new_seconds 
(IMAPX_IDLE_WAIT_SECONDS);
        g_source_set_callback (
                is->priv->idle_pending, imapx_server_run_idle_thread_cb,
                imapx_weak_ref_new (is), (GDestroyNotify) imapx_weak_ref_free);
        g_source_attach (is->priv->idle_pending, NULL);
 
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       g_mutex_unlock (&is->priv->idle_lock);
 
        return TRUE;
 }
 
+static void
+imapx_server_wait_idle_stop_cancelled_cb (GCancellable *cancellable,
+                                         gpointer user_data)
+{
+       CamelIMAPXServer *is = user_data;
+
+       g_return_if_fail (CAMEL_IS_IMAPX_SERVER (is));
+
+       g_mutex_lock (&is->priv->idle_lock);
+       g_cond_broadcast (&is->priv->idle_cond);
+       g_mutex_unlock (&is->priv->idle_lock);
+}
+
 gboolean
 camel_imapx_server_stop_idle_sync (CamelIMAPXServer *is,
                                   GCancellable *cancellable,
                                   GError **error)
 {
-       GThread *idle_thread;
        GCancellable *idle_cancellable;
-       CamelIMAPXCommand *idle_command = NULL;
+       gulong handler_id = 0;
        gboolean success = TRUE;
 
        g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
 
-       COMMAND_LOCK (is);
-
-       if (is->priv->current_command && is->priv->current_command->job_kind == 
CAMEL_IMAPX_JOB_IDLE) {
-               idle_command = camel_imapx_command_ref 
(is->priv->current_command);
-       }
-
-       COMMAND_UNLOCK (is);
+       g_mutex_lock (&is->priv->idle_lock);
 
-       g_rec_mutex_lock (&is->priv->idle_lock);
+       if (is->priv->idle_state == IMAPX_IDLE_STATE_OFF) {
+               g_mutex_unlock (&is->priv->idle_lock);
+               return TRUE;
+       } else if (is->priv->idle_state == IMAPX_IDLE_STATE_SCHEDULED) {
+               if (is->priv->idle_pending) {
+                       g_source_destroy (is->priv->idle_pending);
+                       g_source_unref (is->priv->idle_pending);
+                       is->priv->idle_pending = NULL;
+               }
 
-       if (is->priv->idle_pending) {
-               g_source_destroy (is->priv->idle_pending);
-               g_source_unref (is->priv->idle_pending);
-               is->priv->idle_pending = NULL;
+               is->priv->idle_state = IMAPX_IDLE_STATE_OFF;
+               g_cond_broadcast (&is->priv->idle_cond);
        }
 
        idle_cancellable = is->priv->idle_cancellable ? g_object_ref 
(is->priv->idle_cancellable) : NULL;
-       idle_thread = is->priv->idle_thread;
 
        g_clear_object (&is->priv->idle_cancellable);
        g_clear_object (&is->priv->idle_mailbox);
-       is->priv->idle_thread = NULL;
        is->priv->idle_stamp++;
 
-       g_rec_mutex_unlock (&is->priv->idle_lock);
+       if (cancellable)
+               handler_id = g_cancellable_connect (cancellable, G_CALLBACK 
(imapx_server_wait_idle_stop_cancelled_cb), is, NULL);
 
-       if (idle_cancellable) {
-               g_cancellable_cancel (idle_cancellable);
-               g_object_unref (idle_cancellable);
+       while (is->priv->idle_state == IMAPX_IDLE_STATE_PREPARING &&
+              !g_cancellable_is_cancelled (cancellable)) {
+               g_cond_wait (&is->priv->idle_cond, &is->priv->idle_lock);
        }
 
-       if (idle_thread)
-               g_thread_join (idle_thread);
+       if (is->priv->idle_state == IMAPX_IDLE_STATE_RUNNING &&
+           !g_cancellable_is_cancelled (cancellable)) {
+               is->priv->idle_state = IMAPX_IDLE_STATE_STOPPING;
+               g_cond_broadcast (&is->priv->idle_cond);
+               g_mutex_unlock (&is->priv->idle_lock);
 
-       if (idle_command) {
-               CamelIMAPXCommand *ic;
-               gint previous_timeout = -1;
-               GError *local_error = NULL;
+               g_mutex_lock (&is->priv->stream_lock);
+               if (is->priv->output_stream) {
+                       gint previous_timeout = -1;
 
-               g_return_val_if_fail (is->priv->current_command == NULL, FALSE);
+                       /* Set the connection timeout to some short time, no 
need to wait for it for too long */
+                       if (is->priv->connection)
+                               previous_timeout = 
imapx_server_set_connection_timeout (is->priv->connection, 5);
 
-               ic = camel_imapx_command_new (is, CAMEL_IMAPX_JOB_DONE, "DONE");
-               ic->tag = idle_command->tag;
+                       success = g_output_stream_flush 
(is->priv->output_stream, cancellable, error);
+                       success = success && g_output_stream_write_all 
(is->priv->output_stream, "DONE\r\n", 6, NULL, cancellable, error);
+                       success = success && g_output_stream_flush 
(is->priv->output_stream, cancellable, error);
 
-               g_mutex_lock (&is->priv->stream_lock);
-               /* Set the connection timeout to some short time, no need to 
wait for it for too long */
-               if (is->priv->connection)
-                       previous_timeout = imapx_server_set_connection_timeout 
(is->priv->connection, 15);
+                       if (previous_timeout >= 0 && is->priv->connection)
+                               imapx_server_set_connection_timeout 
(is->priv->connection, previous_timeout);
+               } else {
+                       success = FALSE;
+
+                       /* This message won't get into UI. */
+                       g_set_error_literal (error, CAMEL_IMAPX_SERVER_ERROR, 
CAMEL_IMAPX_SERVER_ERROR_TRY_RECONNECT,
+                               "Reconnect after couldn't issue DONE command");
+               }
                g_mutex_unlock (&is->priv->stream_lock);
+               g_mutex_lock (&is->priv->idle_lock);
+       }
 
-               success = camel_imapx_server_process_command_sync (is, ic, 
_("Failed to issue DONE"), cancellable, &local_error);
+       while (success && is->priv->idle_state != IMAPX_IDLE_STATE_OFF &&
+              !g_cancellable_is_cancelled (cancellable)) {
+               g_cond_wait (&is->priv->idle_cond, &is->priv->idle_lock);
+       }
 
-               if (previous_timeout >= 0) {
-                       g_mutex_lock (&is->priv->stream_lock);
-                       if (is->priv->connection)
-                               imapx_server_set_connection_timeout 
(is->priv->connection, previous_timeout);
-                       g_mutex_unlock (&is->priv->stream_lock);
-               }
+       if (cancellable && handler_id)
+               g_cancellable_disconnect (cancellable, handler_id);
 
-               camel_imapx_command_unref (ic);
-               camel_imapx_command_unref (idle_command);
+       if (success && g_cancellable_is_cancelled (cancellable)) {
+               g_clear_error (error);
 
-               if (success)
-                       c (camel_imapx_server_get_tagprefix (is), "DONE 
finished successfully\n");
-               else
-                       c (camel_imapx_server_get_tagprefix (is), "DONE 
finished with error: %s\n", local_error ? local_error->message : "Unknown 
error");
+               success = FALSE;
 
-               if (!success) {
-                       GError *tmp = local_error;
+               /* This message won't get into UI. */
+               g_set_error_literal (error, CAMEL_IMAPX_SERVER_ERROR, 
CAMEL_IMAPX_SERVER_ERROR_TRY_RECONNECT,
+                       "Reconnect after cancelled IDLE stop command");
+       }
 
-                       local_error = NULL;
+       g_mutex_unlock (&is->priv->idle_lock);
 
-                       g_set_error (
-                               &local_error, CAMEL_IMAPX_SERVER_ERROR, 
CAMEL_IMAPX_SERVER_ERROR_TRY_RECONNECT,
-                               "Failed to finish IDLE with DONE: %s", tmp ? 
tmp->message : "Unknown error");
+       if (!success) {
+               if (idle_cancellable)
+                       g_cancellable_cancel (idle_cancellable);
 
-                       g_clear_error (&tmp);
-               }
+               g_mutex_lock (&is->priv->idle_lock);
+               is->priv->idle_state = IMAPX_IDLE_STATE_OFF;
+               g_mutex_unlock (&is->priv->idle_lock);
 
-               if (local_error) {
-                       g_propagate_error (error, local_error);
-                       success = FALSE;
-               }
+               imapx_disconnect (is);
        }
 
+       g_clear_object (&idle_cancellable);
+
        return success;
 }
 
@@ -6248,6 +6378,7 @@
        return previous;
 }
 
+/* This function is not thread-safe. */
 const struct _capability_info *
 camel_imapx_server_get_capability_info (CamelIMAPXServer *is)
 {
@@ -6256,6 +6387,36 @@
        return is->priv->cinfo;
 }
 
+gboolean
+camel_imapx_server_have_capability (CamelIMAPXServer *is,
+                                   guint32 capability)
+{
+       gboolean have;
+
+       g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
+
+       g_mutex_lock (&is->priv->stream_lock);
+       have = is->priv->cinfo != NULL && (is->priv->cinfo->capa & capability) 
!= 0;
+       g_mutex_unlock (&is->priv->stream_lock);
+
+       return have;
+}
+
+gboolean
+camel_imapx_server_lack_capability (CamelIMAPXServer *is,
+                                   guint32 capability)
+{
+       gboolean lack;
+
+       g_return_val_if_fail (CAMEL_IS_IMAPX_SERVER (is), FALSE);
+
+       g_mutex_lock (&is->priv->stream_lock);
+       lack = is->priv->cinfo != NULL && (is->priv->cinfo->capa & capability) 
== 0;
+       g_mutex_unlock (&is->priv->stream_lock);
+
+       return lack;
+}
+
 gchar
 camel_imapx_server_get_tagprefix (CamelIMAPXServer *is)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-server.h 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-server.h
--- old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-server.h 
2016-01-13 12:27:47.000000000 +0100
+++ new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-server.h 
2016-02-01 15:10:44.000000000 +0100
@@ -135,6 +135,12 @@
 const struct _capability_info *
                camel_imapx_server_get_capability_info
                                                (CamelIMAPXServer *is);
+gboolean       camel_imapx_server_have_capability
+                                               (CamelIMAPXServer *is,
+                                                guint32 capability);
+gboolean       camel_imapx_server_lack_capability
+                                               (CamelIMAPXServer *is,
+                                                guint32 capability);
 gchar          camel_imapx_server_get_tagprefix
                                                (CamelIMAPXServer *is);
 void           camel_imapx_server_set_tagprefix
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-store.c 
new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-store.c
--- old/evolution-data-server-3.18.4/camel/providers/imapx/camel-imapx-store.c  
2015-09-21 11:19:59.000000000 +0200
+++ new/evolution-data-server-3.18.5/camel/providers/imapx/camel-imapx-store.c  
2016-02-01 15:12:44.000000000 +0100
@@ -3223,7 +3223,7 @@
 
        /* Fabricate a CamelIMAPXNamespaceResponse if the server lacks the
         * NAMESPACE capability and this is the first LIST / LSUB response. */
-       if (CAMEL_IMAPX_LACK_CAPABILITY (camel_imapx_server_get_capability_info 
(imapx_server), NAMESPACE)) {
+       if (camel_imapx_server_lack_capability (imapx_server, 
IMAPX_CAPABILITY_NAMESPACE)) {
                g_mutex_lock (&imapx_store->priv->namespaces_lock);
                if (imapx_store->priv->namespaces == NULL) {
                        imapx_store->priv->namespaces = 
camel_imapx_namespace_response_faux_new (response);
@@ -3287,7 +3287,7 @@
 
        /* Fabricate a CamelIMAPXNamespaceResponse if the server lacks the
         * NAMESPACE capability and this is the first LIST / LSUB response. */
-       if (CAMEL_IMAPX_LACK_CAPABILITY (camel_imapx_server_get_capability_info 
(imapx_server), NAMESPACE)) {
+       if (camel_imapx_server_lack_capability (imapx_server, 
IMAPX_CAPABILITY_NAMESPACE)) {
                g_mutex_lock (&imapx_store->priv->namespaces_lock);
                if (imapx_store->priv->namespaces == NULL) {
                        imapx_store->priv->namespaces = 
camel_imapx_namespace_response_faux_new (response);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/config.h.in 
new/evolution-data-server-3.18.5/config.h.in
--- old/evolution-data-server-3.18.4/config.h.in        2016-01-18 
12:55:33.000000000 +0100
+++ new/evolution-data-server-3.18.5/config.h.in        2016-02-15 
14:08:17.000000000 +0100
@@ -112,6 +112,9 @@
 /* Define if you have Heimdal */
 #undef HAVE_HEIMDAL_KRB5
 
+/* libical provides icaltzutil_set_exact_vtimezones_support function */
+#undef HAVE_ICALTZUTIL_SET_EXACT_VTIMEZONES_SUPPORT
+
 /* libical provides ical_set_unknown_token_handling_setting function */
 #undef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/configure.ac 
new/evolution-data-server-3.18.5/configure.ac
--- old/evolution-data-server-3.18.4/configure.ac       2015-12-14 
11:39:01.000000000 +0100
+++ new/evolution-data-server-3.18.5/configure.ac       2016-01-20 
21:53:30.000000000 +0100
@@ -2,7 +2,7 @@
 dnl Evolution-Data-Server version
 m4_define([eds_major_version], [3])
 m4_define([eds_minor_version], [18])
-m4_define([eds_micro_version], [4])
+m4_define([eds_micro_version], [5])
 
 m4_define([eds_version],
        [eds_major_version.eds_minor_version.eds_micro_version])
@@ -1511,19 +1511,33 @@
        AC_SUBST(EVOLUTION_CALENDAR_CFLAGS)
        AC_SUBST(EVOLUTION_CALENDAR_LIBS)
 
-       dnl ****************************
-       dnl Check for ical_set_unknown_token_handling_setting function
-       dnl ****************************
-       AC_MSG_CHECKING([ical_set_unknown_token_handling_setting function])
-       save_cflags=$CFLAGS; CFLAGS=$EVOLUTION_CALENDAR_CFLAGS
-       save_libs=$LIBS; LIBS="$EVOLUTION_CALENDAR_LIBS"
-       AC_LINK_IFELSE([AC_LANG_PROGRAM(
-               [[#include <libical/ical.h>]],
-               [[ical_set_unknown_token_handling_setting 
(ICAL_DISCARD_TOKEN)]])],
-               [AC_DEFINE(HAVE_ICAL_UNKNOWN_TOKEN_HANDLING, 1, [libical 
provides ical_set_unknown_token_handling_setting function]) 
ac_cv_have_iuth=yes],[ac_cv_have_iuth=no])
-       CFLAGS=$save_cflags
-       LIBS=$save_libs
-       AC_MSG_RESULT([$ac_cv_have_iuth])
+dnl ****************************
+dnl Check for ical_set_unknown_token_handling_setting function
+dnl ****************************
+AC_MSG_CHECKING([ical_set_unknown_token_handling_setting function])
+save_cflags=$CFLAGS; CFLAGS=$EVOLUTION_CALENDAR_CFLAGS
+save_libs=$LIBS; LIBS="$EVOLUTION_CALENDAR_LIBS"
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
+       [[#include <libical/ical.h>]],
+       [[ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN)]])],
+       [AC_DEFINE(HAVE_ICAL_UNKNOWN_TOKEN_HANDLING, 1, [libical provides 
ical_set_unknown_token_handling_setting function]) 
ac_cv_have_iuth=yes],[ac_cv_have_iuth=no])
+CFLAGS=$save_cflags
+LIBS=$save_libs
+AC_MSG_RESULT([$ac_cv_have_iuth])
+
+dnl ****************************
+dnl Check for icaltzutil_set_exact_vtimezones_support function
+dnl ****************************
+AC_MSG_CHECKING([icaltzutil_set_exact_vtimezones_support function])
+save_cflags=$CFLAGS; CFLAGS="$EVOLUTION_DATA_SERVER_CFLAGS"
+save_libs=$LIBS; LIBS="$EVOLUTION_DATA_SERVER_LIBS"
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
+       [[#include <libical/ical.h>]],
+       [[icaltzutil_set_exact_vtimezones_support (0)]])],
+       [AC_DEFINE(HAVE_ICALTZUTIL_SET_EXACT_VTIMEZONES_SUPPORT, 1, [libical 
provides icaltzutil_set_exact_vtimezones_support function]) 
ac_cv_have_isevs=yes],[ac_cv_have_isevs=no])
+CFLAGS=$save_cflags
+LIBS=$save_libs
+AC_MSG_RESULT([$ac_cv_have_isevs])
 
 dnl ******************************
 dnl Google flags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/docs/reference/eds/html/eds-Version-Checking.html
 
new/evolution-data-server-3.18.5/docs/reference/eds/html/eds-Version-Checking.html
--- 
old/evolution-data-server-3.18.4/docs/reference/eds/html/eds-Version-Checking.html
  2016-01-18 13:02:34.000000000 +0100
+++ 
new/evolution-data-server-3.18.5/docs/reference/eds/html/eds-Version-Checking.html
  2016-02-15 14:15:09.000000000 +0100
@@ -203,7 +203,7 @@
 <hr>
 <div class="refsect2">
 <a name="EDS-MICRO-VERSION:CAPS"></a><h3>EDS_MICRO_VERSION</h3>
-<pre class="programlisting">#define EDS_MICRO_VERSION 4
+<pre class="programlisting">#define EDS_MICRO_VERSION 5
 </pre>
 <p>The micro version number of the Evolution-Data-Server library.  Like
 <a class="link" href="eds-Version-Checking.html#eds-micro-version" 
title="eds_micro_version"><code 
class="function">eds_micro_version()</code></a>, but from the headers used at 
application compile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/docs/reference/eds/html/index.html 
new/evolution-data-server-3.18.5/docs/reference/eds/html/index.html
--- old/evolution-data-server-3.18.4/docs/reference/eds/html/index.html 
2016-01-18 13:02:34.000000000 +0100
+++ new/evolution-data-server-3.18.5/docs/reference/eds/html/index.html 
2016-02-15 14:15:09.000000000 +0100
@@ -15,7 +15,7 @@
 <div class="titlepage">
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">Evolution-Data-Server 
Reference Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Reference Manual for evolution-data-server 3.18.4
+<div><p class="releaseinfo">Reference Manual for evolution-data-server 3.18.5
 </p></div>
 <div><div class="abstract">
 <p class="title"><b>Abstract</b></p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/docs/reference/eds/version.xml 
new/evolution-data-server-3.18.5/docs/reference/eds/version.xml
--- old/evolution-data-server-3.18.4/docs/reference/eds/version.xml     
2016-01-18 12:55:47.000000000 +0100
+++ new/evolution-data-server-3.18.5/docs/reference/eds/version.xml     
2016-02-15 14:08:30.000000000 +0100
@@ -1 +1 @@
-evolution-data-server 3.18.4
+evolution-data-server 3.18.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/libedataserver/eds-version.h 
new/evolution-data-server-3.18.5/libedataserver/eds-version.h
--- old/evolution-data-server-3.18.4/libedataserver/eds-version.h       
2016-01-18 12:55:46.000000000 +0100
+++ new/evolution-data-server-3.18.5/libedataserver/eds-version.h       
2016-02-15 14:08:30.000000000 +0100
@@ -49,7 +49,7 @@
  * time, rather than from the library linked against at application run
  * time.
  **/
-#define EDS_MICRO_VERSION 4
+#define EDS_MICRO_VERSION 5
 
 /**
  * EDS_CHECK_VERSION:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
 
new/evolution-data-server-3.18.5/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
--- 
old/evolution-data-server-3.18.4/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
   2016-01-18 13:02:33.000000000 +0100
+++ 
new/evolution-data-server-3.18.5/modules/ubuntu-online-accounts/evolution-data-server-uoa.desktop
   2016-02-15 14:15:08.000000000 +0100
@@ -90,4 +90,4 @@
 X-GNOME-Bugzilla-Bugzilla=GNOME
 X-GNOME-Bugzilla-Product=evolution-data-server
 X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=3.18.4
+X-GNOME-Bugzilla-Version=3.18.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/evolution-data-server-3.18.4/services/evolution-calendar-factory/evolution-calendar-factory.c
 
new/evolution-data-server-3.18.5/services/evolution-calendar-factory/evolution-calendar-factory.c
--- 
old/evolution-data-server-3.18.4/services/evolution-calendar-factory/evolution-calendar-factory.c
   2015-08-19 13:39:50.000000000 +0200
+++ 
new/evolution-data-server-3.18.5/services/evolution-calendar-factory/evolution-calendar-factory.c
   2016-01-20 21:53:30.000000000 +0100
@@ -24,9 +24,7 @@
 #include <gtk/gtk.h>
 #endif
 
-#ifdef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING
 #include <libical/ical.h>
-#endif
 
 #include <libedataserver/libedataserver.h>
 #include <libedata-cal/libedata-cal.h>
@@ -83,6 +81,10 @@
        ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN);
 #endif
 
+#ifdef HAVE_ICALTZUTIL_SET_EXACT_VTIMEZONES_SUPPORT
+       icaltzutil_set_exact_vtimezones_support (0);
+#endif
+
        e_gdbus_templates_init_main_thread ();
 
        server = e_data_cal_factory_new (NULL, &error);


Reply via email to