[balsa/gtk3] Use an idle callback to check message



commit db3184d046a75b1447ea4d628838fe9ded3217af
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Sat Feb 23 08:37:34 2013 -0500

    Use an idle callback to check message
    
        * libbalsa/mailbox.c (lbm_msgno_filt_check),
        (libbalsa_mailbox_msgno_filt_check): use an idle callback to
        check whether to filter a message in or out.

 ChangeLog          |    6 +++++
 libbalsa/mailbox.c |   56 +++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 48 insertions(+), 14 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 8bdaa56..a033d28 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-23  Peter Bloomfield
+
+       * libbalsa/mailbox.c (lbm_msgno_filt_check),
+       (libbalsa_mailbox_msgno_filt_check): use an idle callback to
+       check whether to filter a message in or out.
+
 2013-02-21  Peter Bloomfield
 
        * libbalsa/mailbox.c (libbalsa_mailbox_finalize),
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index af1193e..724198a 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -1572,22 +1572,24 @@ libbalsa_mailbox_msgno_filt_out(LibBalsaMailbox * mailbox, GNode * node)
  *   messages;
  * - if it isn't in the view and it matches the condition, filter it in.
  */
-void
-libbalsa_mailbox_msgno_filt_check(LibBalsaMailbox * mailbox, guint seqno,
-                                  LibBalsaMailboxSearchIter * search_iter,
-                                  gboolean hold_selected)
-{
-    gboolean match;
-    GNode *node;
 
-    g_return_if_fail(LIBBALSA_IS_MAILBOX(mailbox));
+typedef struct {
+    LibBalsaMailbox           *mailbox;
+    guint                      seqno;
+    LibBalsaMailboxSearchIter *search_iter;
+    gboolean                   hold_selected;
+} LibBalsaMailboxMsgnoFiltCheckInfo;
 
-    gdk_threads_enter();
+static gboolean
+lbm_msgno_filt_check(LibBalsaMailboxMsgnoFiltCheckInfo * info)
 
-    if (!mailbox->msg_tree) {
-        gdk_threads_leave();
-        return;
-    }
+{
+    LibBalsaMailbox           *mailbox       = info->mailbox;
+    guint                      seqno         = info->seqno;
+    LibBalsaMailboxSearchIter *search_iter   = info->search_iter;
+    gboolean                   hold_selected = info->hold_selected;
+    gboolean match;
+    GNode *node;
 
     match = search_iter ?
         libbalsa_mailbox_message_match(mailbox, seqno, search_iter) : TRUE;
@@ -1617,7 +1619,33 @@ libbalsa_mailbox_msgno_filt_check(LibBalsaMailbox * mailbox, guint seqno,
             libbalsa_mailbox_msgno_filt_in(mailbox, seqno);
     }
 
-    gdk_threads_leave();
+    g_object_unref(mailbox);
+    libbalsa_mailbox_search_iter_unref(search_iter);
+    g_free(info);
+
+    return FALSE;
+}
+
+void
+libbalsa_mailbox_msgno_filt_check(LibBalsaMailbox * mailbox, guint seqno,
+                                  LibBalsaMailboxSearchIter * search_iter,
+                                  gboolean hold_selected)
+{
+    LibBalsaMailboxMsgnoFiltCheckInfo *info;
+
+    g_return_if_fail(LIBBALSA_IS_MAILBOX(mailbox));
+
+    if (!mailbox->msg_tree) {
+        return;
+    }
+
+    info = g_new(LibBalsaMailboxMsgnoFiltCheckInfo, 1);
+    info->mailbox = g_object_ref(mailbox);
+    info->seqno = seqno;
+    info->search_iter = libbalsa_mailbox_search_iter_ref(search_iter);
+    info->hold_selected = hold_selected;
+
+    g_idle_add((GSourceFunc) lbm_msgno_filt_check, info);
 }
 
 /* Search iters */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]