idle handler to emit the writable signal on the main thread
authorJP Rosevear <jpr@ximian.com>
Fri, 16 Jan 2004 18:58:08 +0000 (18:58 +0000)
committerJP Rosevear <jpr@src.gnome.org>
Fri, 16 Jan 2004 18:58:08 +0000 (18:58 +0000)
2004-01-16  JP Rosevear <jpr@ximian.com>

* libebook/e-book.c (e_book_idle_writable): idle handler to emit
the writable signal on the main thread
(e_book_handle_response): use above

addressbook/ChangeLog
addressbook/libebook/e-book.c

index 4bd5623..d477993 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-16  JP Rosevear <jpr@ximian.com>
+
+       * libebook/e-book.c (e_book_idle_writable): idle handler to emit
+       the writable signal on the main thread
+       (e_book_handle_response): use above
+       
 2003-01-11  Christian Hammond <chipx86@gnupdate.org>
  
        * addressbook/libebook/e-contact.[ch]: Changed the IM account field
index 31a48c8..8376f49 100644 (file)
@@ -1510,6 +1510,25 @@ e_book_response_remove (EBook       *book,
        g_mutex_unlock (op->mutex);
 }
 
+typedef struct
+{
+       EBook *book;
+       gboolean writable;
+}  EBookWritableData;
+
+static gboolean
+e_book_idle_writable (gpointer data)
+{
+       EBookWritableData *write_data = data;
+       
+       g_signal_emit (G_OBJECT (write_data->book), e_book_signals [WRITABLE_STATUS], 0, write_data->writable);
+
+       g_object_unref (write_data->book);
+       g_free (write_data);
+       
+       return FALSE;
+}
+
 \f
 
 static void
@@ -1550,9 +1569,20 @@ e_book_handle_response (EBookListener *listener, EBookListenerResponse *resp, EB
        case GetSupportedAuthMethodsResponse:
                e_book_response_get_supported_auth_methods (book, resp->status, resp->list);
                break;
-       case WritableStatusEvent:
+       case WritableStatusEvent: 
+       {
+               EBookWritableData *write_data;
+
                book->priv->writable = resp->writable;
-               g_signal_emit (book, e_book_signals [WRITABLE_STATUS], 0, resp->writable);
+       
+               write_data = g_new0 (EBookWritableData, 1);
+
+               write_data->book = g_object_ref (book);
+               write_data->writable = book->priv->writable;
+               
+               g_idle_add (e_book_idle_writable, write_data);
+       }
+       
                break;
        default:
                g_error ("EBook: Unknown response code %d!\n",