Port Camel to GObject.
authorMatthew Barnes <mbarnes@redhat.com>
Thu, 22 Apr 2010 13:28:45 +0000 (09:28 -0400)
committerMatthew Barnes <mbarnes@redhat.com>
Sat, 24 Apr 2010 15:04:28 +0000 (11:04 -0400)
399 files changed:
addressbook/libebook/e-destination.c
camel/Makefile.am
camel/camel-address.c
camel/camel-address.h
camel/camel-block-file.c
camel/camel-block-file.h
camel/camel-certdb.c
camel/camel-certdb.h
camel/camel-cipher-context.c
camel/camel-cipher-context.h
camel/camel-data-cache.c
camel/camel-data-cache.h
camel/camel-data-wrapper.c
camel/camel-data-wrapper.h
camel/camel-disco-diary.c
camel/camel-disco-diary.h
camel/camel-disco-folder.c
camel/camel-disco-folder.h
camel/camel-disco-store.c
camel/camel-disco-store.h
camel/camel-filter-driver.c
camel/camel-filter-driver.h
camel/camel-filter-search.c
camel/camel-folder-search.c
camel/camel-folder-search.h
camel/camel-folder-summary.c
camel/camel-folder-summary.h
camel/camel-folder-thread.c
camel/camel-folder.c
camel/camel-folder.h
camel/camel-gpg-context.c
camel/camel-gpg-context.h
camel/camel-html-parser.c
camel/camel-html-parser.h
camel/camel-http-stream.c
camel/camel-http-stream.h
camel/camel-index-control.c
camel/camel-index.c
camel/camel-index.h
camel/camel-internet-address.c
camel/camel-internet-address.h
camel/camel-medium.c
camel/camel-medium.h
camel/camel-mime-filter-basic.c
camel/camel-mime-filter-basic.h
camel/camel-mime-filter-bestenc.c
camel/camel-mime-filter-bestenc.h
camel/camel-mime-filter-canon.c
camel/camel-mime-filter-canon.h
camel/camel-mime-filter-charset.c
camel/camel-mime-filter-charset.h
camel/camel-mime-filter-crlf.c
camel/camel-mime-filter-crlf.h
camel/camel-mime-filter-enriched.c
camel/camel-mime-filter-enriched.h
camel/camel-mime-filter-from.c
camel/camel-mime-filter-from.h
camel/camel-mime-filter-gzip.c
camel/camel-mime-filter-gzip.h
camel/camel-mime-filter-html.c
camel/camel-mime-filter-html.h
camel/camel-mime-filter-index.c
camel/camel-mime-filter-index.h
camel/camel-mime-filter-linewrap.c
camel/camel-mime-filter-linewrap.h
camel/camel-mime-filter-pgp.c
camel/camel-mime-filter-pgp.h
camel/camel-mime-filter-progress.c
camel/camel-mime-filter-progress.h
camel/camel-mime-filter-save.c
camel/camel-mime-filter-save.h
camel/camel-mime-filter-tohtml.c
camel/camel-mime-filter-tohtml.h
camel/camel-mime-filter-windows.c
camel/camel-mime-filter-windows.h
camel/camel-mime-filter-yenc.c
camel/camel-mime-filter-yenc.h
camel/camel-mime-filter.c
camel/camel-mime-filter.h
camel/camel-mime-message.c
camel/camel-mime-message.h
camel/camel-mime-parser.c
camel/camel-mime-parser.h
camel/camel-mime-part-utils.c
camel/camel-mime-part.c
camel/camel-mime-part.h
camel/camel-movemail.c
camel/camel-multipart-encrypted.c
camel/camel-multipart-encrypted.h
camel/camel-multipart-signed.c
camel/camel-multipart-signed.h
camel/camel-multipart.c
camel/camel-multipart.h
camel/camel-nntp-address.c
camel/camel-nntp-address.h
camel/camel-object-bag.c [new file with mode: 0644]
camel/camel-object-bag.h [new file with mode: 0644]
camel/camel-object.c
camel/camel-object.h
camel/camel-offline-folder.c
camel/camel-offline-folder.h
camel/camel-offline-journal.c
camel/camel-offline-journal.h
camel/camel-offline-store.c
camel/camel-offline-store.h
camel/camel-partition-table.c
camel/camel-partition-table.h
camel/camel-provider.h
camel/camel-sasl-anonymous.c
camel/camel-sasl-anonymous.h
camel/camel-sasl-cram-md5.c
camel/camel-sasl-cram-md5.h
camel/camel-sasl-digest-md5.c
camel/camel-sasl-digest-md5.h
camel/camel-sasl-gssapi.c
camel/camel-sasl-gssapi.h
camel/camel-sasl-login.c
camel/camel-sasl-login.h
camel/camel-sasl-ntlm.c
camel/camel-sasl-ntlm.h
camel/camel-sasl-plain.c
camel/camel-sasl-plain.h
camel/camel-sasl-popb4smtp.c
camel/camel-sasl-popb4smtp.h
camel/camel-sasl.c
camel/camel-sasl.h
camel/camel-search-private.c
camel/camel-seekable-stream.c
camel/camel-seekable-stream.h
camel/camel-seekable-substream.c
camel/camel-seekable-substream.h
camel/camel-service.c
camel/camel-service.h
camel/camel-session.c
camel/camel-session.h
camel/camel-smime-context.c
camel/camel-smime-context.h
camel/camel-store-summary.c
camel/camel-store-summary.h
camel/camel-store.c
camel/camel-store.h
camel/camel-stream-buffer.c
camel/camel-stream-buffer.h
camel/camel-stream-filter.c
camel/camel-stream-filter.h
camel/camel-stream-fs.c
camel/camel-stream-fs.h
camel/camel-stream-mem.c
camel/camel-stream-mem.h
camel/camel-stream-null.c
camel/camel-stream-null.h
camel/camel-stream-process.c
camel/camel-stream-process.h
camel/camel-stream-vfs.c
camel/camel-stream-vfs.h
camel/camel-stream.c
camel/camel-stream.h
camel/camel-tcp-stream-raw.c
camel/camel-tcp-stream-raw.h
camel/camel-tcp-stream-ssl.c
camel/camel-tcp-stream-ssl.h
camel/camel-tcp-stream.c
camel/camel-tcp-stream.h
camel/camel-text-index.c
camel/camel-text-index.h
camel/camel-transport.c
camel/camel-transport.h
camel/camel-vee-folder.c
camel/camel-vee-folder.h
camel/camel-vee-store.c
camel/camel-vee-store.h
camel/camel-vee-summary.c
camel/camel-vee-summary.h
camel/camel-vtrash-folder.c
camel/camel-vtrash-folder.h
camel/camel.c
camel/camel.h
camel/providers/groupwise/camel-groupwise-folder.c
camel/providers/groupwise/camel-groupwise-folder.h
camel/providers/groupwise/camel-groupwise-journal.c
camel/providers/groupwise/camel-groupwise-journal.h
camel/providers/groupwise/camel-groupwise-store-summary.c
camel/providers/groupwise/camel-groupwise-store-summary.h
camel/providers/groupwise/camel-groupwise-store.c
camel/providers/groupwise/camel-groupwise-store.h
camel/providers/groupwise/camel-groupwise-summary.c
camel/providers/groupwise/camel-groupwise-summary.h
camel/providers/groupwise/camel-groupwise-transport.c
camel/providers/groupwise/camel-groupwise-transport.h
camel/providers/groupwise/camel-groupwise-utils.c
camel/providers/imap/camel-imap-command.c
camel/providers/imap/camel-imap-folder.c
camel/providers/imap/camel-imap-folder.h
camel/providers/imap/camel-imap-journal.c
camel/providers/imap/camel-imap-journal.h
camel/providers/imap/camel-imap-message-cache.c
camel/providers/imap/camel-imap-message-cache.h
camel/providers/imap/camel-imap-search.c
camel/providers/imap/camel-imap-search.h
camel/providers/imap/camel-imap-store-summary.c
camel/providers/imap/camel-imap-store-summary.h
camel/providers/imap/camel-imap-store.c
camel/providers/imap/camel-imap-store.h
camel/providers/imap/camel-imap-summary.c
camel/providers/imap/camel-imap-summary.h
camel/providers/imap/camel-imap-wrapper.c
camel/providers/imap/camel-imap-wrapper.h
camel/providers/imapx/camel-imapx-folder.c
camel/providers/imapx/camel-imapx-folder.h
camel/providers/imapx/camel-imapx-server.c
camel/providers/imapx/camel-imapx-server.h
camel/providers/imapx/camel-imapx-store-summary.c
camel/providers/imapx/camel-imapx-store-summary.h
camel/providers/imapx/camel-imapx-store.c
camel/providers/imapx/camel-imapx-store.h
camel/providers/imapx/camel-imapx-stream.c
camel/providers/imapx/camel-imapx-stream.h
camel/providers/imapx/camel-imapx-summary.c
camel/providers/imapx/camel-imapx-summary.h
camel/providers/imapx/camel-imapx-utils.c
camel/providers/imapx/camel-imapx-view-summary.h
camel/providers/imapx/test-imapx.c
camel/providers/local/camel-local-folder.c
camel/providers/local/camel-local-folder.h
camel/providers/local/camel-local-provider.c
camel/providers/local/camel-local-store.c
camel/providers/local/camel-local-store.h
camel/providers/local/camel-local-summary.c
camel/providers/local/camel-local-summary.h
camel/providers/local/camel-maildir-folder.c
camel/providers/local/camel-maildir-folder.h
camel/providers/local/camel-maildir-store.c
camel/providers/local/camel-maildir-store.h
camel/providers/local/camel-maildir-summary.c
camel/providers/local/camel-maildir-summary.h
camel/providers/local/camel-mbox-folder.c
camel/providers/local/camel-mbox-folder.h
camel/providers/local/camel-mbox-store.c
camel/providers/local/camel-mbox-store.h
camel/providers/local/camel-mbox-summary.c
camel/providers/local/camel-mbox-summary.h
camel/providers/local/camel-mh-folder.c
camel/providers/local/camel-mh-folder.h
camel/providers/local/camel-mh-store.c
camel/providers/local/camel-mh-store.h
camel/providers/local/camel-mh-summary.c
camel/providers/local/camel-mh-summary.h
camel/providers/local/camel-spool-folder.c
camel/providers/local/camel-spool-folder.h
camel/providers/local/camel-spool-store.c
camel/providers/local/camel-spool-store.h
camel/providers/local/camel-spool-summary.c
camel/providers/local/camel-spool-summary.h
camel/providers/nntp/camel-nntp-folder.c
camel/providers/nntp/camel-nntp-folder.h
camel/providers/nntp/camel-nntp-store-summary.c
camel/providers/nntp/camel-nntp-store-summary.h
camel/providers/nntp/camel-nntp-store.c
camel/providers/nntp/camel-nntp-store.h
camel/providers/nntp/camel-nntp-stream.c
camel/providers/nntp/camel-nntp-stream.h
camel/providers/nntp/camel-nntp-summary.c
camel/providers/nntp/camel-nntp-summary.h
camel/providers/pop3/camel-pop3-engine.c
camel/providers/pop3/camel-pop3-engine.h
camel/providers/pop3/camel-pop3-folder.c
camel/providers/pop3/camel-pop3-folder.h
camel/providers/pop3/camel-pop3-store.c
camel/providers/pop3/camel-pop3-store.h
camel/providers/pop3/camel-pop3-stream.c
camel/providers/pop3/camel-pop3-stream.h
camel/providers/sendmail/camel-sendmail-transport.c
camel/providers/sendmail/camel-sendmail-transport.h
camel/providers/smtp/camel-smtp-transport.c
camel/providers/smtp/camel-smtp-transport.h
camel/tests/folder/test1.c
camel/tests/folder/test10.c
camel/tests/folder/test11.c
camel/tests/folder/test2.c
camel/tests/folder/test3.c
camel/tests/folder/test4.c
camel/tests/folder/test5.c
camel/tests/folder/test6.c
camel/tests/folder/test7.c
camel/tests/folder/test8.c
camel/tests/folder/test9.c
camel/tests/lib/camel-test-provider.c
camel/tests/lib/camel-test-provider.h
camel/tests/lib/camel-test.h
camel/tests/lib/folders.c
camel/tests/lib/folders.h
camel/tests/lib/messages.c
camel/tests/lib/session.c
camel/tests/lib/session.h
camel/tests/lib/streams.c
camel/tests/message/test3.c
camel/tests/message/test4.c
camel/tests/mime-filter/test-charset.c
camel/tests/mime-filter/test-crlf.c
camel/tests/mime-filter/test-tohtml.c
camel/tests/mime-filter/test1.c
camel/tests/misc/split.c
camel/tests/misc/test1.c
camel/tests/misc/test2.c
camel/tests/misc/url-scan.c
camel/tests/misc/url.c
camel/tests/misc/utf7.c
camel/tests/smime/pgp-mime.c
camel/tests/smime/pgp.c
camel/tests/smime/pkcs7.c
camel/tests/stream/test1.c
camel/tests/stream/test2.c
camel/tests/stream/test3.c
docs/reference/camel/Makefile.am
docs/reference/camel/camel-sections.txt
docs/reference/camel/camel.types
docs/reference/camel/tmpl/camel-address.sgml
docs/reference/camel/tmpl/camel-block-file.sgml
docs/reference/camel/tmpl/camel-certdb.sgml
docs/reference/camel/tmpl/camel-cipher-context.sgml
docs/reference/camel/tmpl/camel-data-cache.sgml
docs/reference/camel/tmpl/camel-data-wrapper.sgml
docs/reference/camel/tmpl/camel-disco-diary.sgml
docs/reference/camel/tmpl/camel-disco-folder.sgml
docs/reference/camel/tmpl/camel-disco-store.sgml
docs/reference/camel/tmpl/camel-filter-driver.sgml
docs/reference/camel/tmpl/camel-folder-search.sgml
docs/reference/camel/tmpl/camel-folder-summary.sgml
docs/reference/camel/tmpl/camel-folder.sgml
docs/reference/camel/tmpl/camel-gpg-context.sgml
docs/reference/camel/tmpl/camel-html-parser.sgml
docs/reference/camel/tmpl/camel-http-stream.sgml
docs/reference/camel/tmpl/camel-imap-store.sgml
docs/reference/camel/tmpl/camel-index.sgml
docs/reference/camel/tmpl/camel-internet-address.sgml
docs/reference/camel/tmpl/camel-medium.sgml
docs/reference/camel/tmpl/camel-mime-filter-basic.sgml
docs/reference/camel/tmpl/camel-mime-filter-bestenc.sgml
docs/reference/camel/tmpl/camel-mime-filter-canon.sgml
docs/reference/camel/tmpl/camel-mime-filter-charset.sgml
docs/reference/camel/tmpl/camel-mime-filter-crlf.sgml
docs/reference/camel/tmpl/camel-mime-filter-enriched.sgml
docs/reference/camel/tmpl/camel-mime-filter-from.sgml
docs/reference/camel/tmpl/camel-mime-filter-gzip.sgml
docs/reference/camel/tmpl/camel-mime-filter-html.sgml
docs/reference/camel/tmpl/camel-mime-filter-index.sgml
docs/reference/camel/tmpl/camel-mime-filter-linewrap.sgml
docs/reference/camel/tmpl/camel-mime-filter-pgp.sgml
docs/reference/camel/tmpl/camel-mime-filter-progress.sgml
docs/reference/camel/tmpl/camel-mime-filter-save.sgml
docs/reference/camel/tmpl/camel-mime-filter-tohtml.sgml
docs/reference/camel/tmpl/camel-mime-filter-windows.sgml
docs/reference/camel/tmpl/camel-mime-filter-yenc.sgml
docs/reference/camel/tmpl/camel-mime-filter.sgml
docs/reference/camel/tmpl/camel-mime-message.sgml
docs/reference/camel/tmpl/camel-mime-parser.sgml
docs/reference/camel/tmpl/camel-mime-part.sgml
docs/reference/camel/tmpl/camel-multipart-encrypted.sgml
docs/reference/camel/tmpl/camel-multipart-signed.sgml
docs/reference/camel/tmpl/camel-multipart.sgml
docs/reference/camel/tmpl/camel-nntp-address.sgml
docs/reference/camel/tmpl/camel-object.sgml
docs/reference/camel/tmpl/camel-offline-folder.sgml
docs/reference/camel/tmpl/camel-offline-journal.sgml
docs/reference/camel/tmpl/camel-offline-store.sgml
docs/reference/camel/tmpl/camel-partition-table.sgml
docs/reference/camel/tmpl/camel-sasl-anonymous.sgml
docs/reference/camel/tmpl/camel-sasl-cram-md5.sgml
docs/reference/camel/tmpl/camel-sasl-digest-md5.sgml
docs/reference/camel/tmpl/camel-sasl-gssapi.sgml
docs/reference/camel/tmpl/camel-sasl-login.sgml
docs/reference/camel/tmpl/camel-sasl-ntlm.sgml
docs/reference/camel/tmpl/camel-sasl-plain.sgml
docs/reference/camel/tmpl/camel-sasl-popb4smtp.sgml
docs/reference/camel/tmpl/camel-sasl.sgml
docs/reference/camel/tmpl/camel-seekable-stream.sgml
docs/reference/camel/tmpl/camel-seekable-substream.sgml
docs/reference/camel/tmpl/camel-service.sgml
docs/reference/camel/tmpl/camel-session.sgml
docs/reference/camel/tmpl/camel-smime-context.sgml
docs/reference/camel/tmpl/camel-store-summary.sgml
docs/reference/camel/tmpl/camel-store.sgml
docs/reference/camel/tmpl/camel-stream-buffer.sgml
docs/reference/camel/tmpl/camel-stream-filter.sgml
docs/reference/camel/tmpl/camel-stream-fs.sgml
docs/reference/camel/tmpl/camel-stream-mem.sgml
docs/reference/camel/tmpl/camel-stream-null.sgml
docs/reference/camel/tmpl/camel-stream-process.sgml
docs/reference/camel/tmpl/camel-stream-vfs.sgml
docs/reference/camel/tmpl/camel-stream.sgml
docs/reference/camel/tmpl/camel-tcp-stream-raw.sgml
docs/reference/camel/tmpl/camel-tcp-stream.sgml
docs/reference/camel/tmpl/camel-text-index.sgml
docs/reference/camel/tmpl/camel-transport.sgml
docs/reference/camel/tmpl/camel-unused.sgml
docs/reference/camel/tmpl/camel-vee-folder.sgml
docs/reference/camel/tmpl/camel-vee-store.sgml
docs/reference/camel/tmpl/camel-vee-summary.sgml
docs/reference/camel/tmpl/camel-vtrash-folder.sgml

index a3fdc25..d4b7421 100644 (file)
@@ -751,7 +751,7 @@ e_destination_get_name (const EDestination *dest)
                                priv->name = g_strdup (camel_name);
                        }
 
-                       camel_object_unref (CAMEL_OBJECT (addr));
+                       g_object_unref (addr);
                }
        }
 
@@ -826,7 +826,7 @@ e_destination_get_email (const EDestination *dest)
                                priv->email = g_strdup (camel_email);
                        }
 
-                       camel_object_unref (CAMEL_OBJECT (addr));
+                       g_object_unref (addr);
                }
 
                /* Force e-mail to be non-null... */
@@ -903,7 +903,7 @@ e_destination_get_address (const EDestination *dest)
                        priv->addr = camel_address_encode (CAMEL_ADDRESS (addr));
                }
 
-               camel_object_unref (CAMEL_OBJECT (addr));
+               g_object_unref (addr);
        }
 
        return priv->addr;
@@ -965,7 +965,7 @@ e_destination_get_textrep (const EDestination *dest, gboolean include_email)
                camel_internet_address_add (addr, name, email);
                g_free (dest->priv->textrep);
                dest->priv->textrep = camel_address_format (CAMEL_ADDRESS (addr));
-               camel_object_unref (CAMEL_OBJECT (addr));
+               g_object_unref (addr);
        }
 
        if (dest->priv->textrep != NULL)
index a885174..b19f81c 100644 (file)
@@ -209,6 +209,7 @@ libcamel_1_2_la_SOURCES =                   \
        camel-net-utils.c                       \
        camel-nntp-address.c                    \
        camel-object.c                          \
+       camel-object-bag.c                      \
        camel-operation.c                       \
        camel-partition-table.c                 \
        camel-seekable-stream.c                 \
@@ -281,6 +282,7 @@ libcamelinclude_HEADERS =                   \
        camel-net-utils.h                       \
        camel-nntp-address.h                    \
        camel-object.h                          \
+       camel-object-bag.h                      \
        camel-operation.h                       \
        camel-partition-table.h                 \
        camel-search-private.h                  \
index 4edc0d7..03008ee 100644 (file)
 
 #include "camel-address.h"
 
-static CamelObjectClass *camel_address_parent;
+G_DEFINE_TYPE (CamelAddress, camel_address, CAMEL_TYPE_OBJECT)
 
 static void
-camel_address_finalize (CamelObject *object)
+address_finalize (GObject *object)
 {
        CamelAddress *address = CAMEL_ADDRESS (object);
 
        camel_address_remove (address, -1);
        g_ptr_array_free (address->addresses, TRUE);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_address_parent_class)->finalize (object);
 }
 
 static void
-camel_address_class_init (CamelAddressClass *klass)
+camel_address_class_init (CamelAddressClass *class)
 {
-       camel_address_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = address_finalize;
 }
 
 static void
@@ -43,24 +49,6 @@ camel_address_init (CamelAddress *address)
        address->addresses = g_ptr_array_new();
 }
 
-CamelType
-camel_address_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelAddress",
-                                           sizeof (CamelAddress),
-                                           sizeof (CamelAddressClass),
-                                           (CamelObjectClassInitFunc) camel_address_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_address_init,
-                                           (CamelObjectFinalizeFunc) camel_address_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_address_new:
  *
@@ -71,8 +59,7 @@ camel_address_get_type (void)
 CamelAddress *
 camel_address_new (void)
 {
-       CamelAddress *new = CAMEL_ADDRESS(camel_object_new(camel_address_get_type()));
-       return new;
+       return g_object_new (CAMEL_TYPE_ADDRESS, NULL);
 }
 
 /**
@@ -88,7 +75,7 @@ camel_address_new_clone (CamelAddress *addr)
 {
        CamelAddress *new;
 
-       new = CAMEL_ADDRESS (camel_object_new (CAMEL_OBJECT_GET_TYPE (addr)));
+       new = g_object_new (CAMEL_TYPE_ADDRESS, NULL);
        camel_address_cat (new, addr);
 
        return new;
@@ -124,7 +111,7 @@ camel_address_decode (CamelAddress *addr, const gchar *raw)
 
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), -1);
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr));
+       class = CAMEL_ADDRESS_GET_CLASS (addr);
        g_return_val_if_fail (class->decode != NULL, -1);
 
        return class->decode (addr, raw);
@@ -145,7 +132,7 @@ camel_address_encode (CamelAddress *addr)
 
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), NULL);
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr));
+       class = CAMEL_ADDRESS_GET_CLASS (addr);
        g_return_val_if_fail (class->encode != NULL, NULL);
 
        return class->encode (addr);
@@ -168,7 +155,7 @@ camel_address_unformat(CamelAddress *addr, const gchar *raw)
 
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), -1);
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr));
+       class = CAMEL_ADDRESS_GET_CLASS (addr);
        g_return_val_if_fail (class->unformat != NULL, -1);
 
        return class->unformat (addr, raw);
@@ -189,7 +176,7 @@ camel_address_format (CamelAddress *addr)
 
        g_return_val_if_fail (CAMEL_IS_ADDRESS (addr), NULL);
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr));
+       class = CAMEL_ADDRESS_GET_CLASS (addr);
        g_return_val_if_fail (class->format != NULL, NULL);
 
        return class->format (addr);
@@ -213,7 +200,7 @@ camel_address_cat (CamelAddress *dest, CamelAddress *source)
        g_return_val_if_fail (CAMEL_IS_ADDRESS (dest), -1);
        g_return_val_if_fail (CAMEL_IS_ADDRESS (source), -1);
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (dest));
+       class = CAMEL_ADDRESS_GET_CLASS (dest);
        g_return_val_if_fail (class->cat != NULL, -1);
 
        return class->cat (dest, source);
@@ -252,7 +239,7 @@ camel_address_remove (CamelAddress *addr, gint index)
 
        g_return_if_fail (CAMEL_IS_ADDRESS (addr));
 
-       class = CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr));
+       class = CAMEL_ADDRESS_GET_CLASS (addr);
        g_return_if_fail (class->remove != NULL);
 
        if (index == -1) {
index f628926..cf9ed02 100644 (file)
 
 #include <camel/camel-object.h>
 
-#define CAMEL_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_address_get_type (), CamelAddress)
-#define CAMEL_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_address_get_type (), CamelAddressClass)
-#define CAMEL_IS_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_address_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_ADDRESS \
+       (camel_address_get_type ())
+#define CAMEL_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_ADDRESS, CamelAddress))
+#define CAMEL_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_ADDRESS, CamelAddressClass))
+#define CAMEL_IS_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_ADDRESS))
+#define CAMEL_IS_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_ADDRESS))
+#define CAMEL_ADDRESS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_ADDRESS, CamelAddressClass))
 
 G_BEGIN_DECLS
 
@@ -61,7 +76,7 @@ struct _CamelAddressClass {
                                                 gint index);
 };
 
-CamelType      camel_address_get_type          (void);
+GType          camel_address_get_type          (void);
 CamelAddress * camel_address_new               (void);
 CamelAddress * camel_address_new_clone         (CamelAddress *addr);
 gint           camel_address_length            (CamelAddress *addr);
index 0613e3f..4bbf928 100644 (file)
@@ -31,7 +31,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-block-file.h"
@@ -72,12 +71,11 @@ static CamelDList block_file_active_list = CAMEL_DLIST_INITIALISER(block_file_ac
 static gint block_file_count = 0;
 static gint block_file_threshhold = 10;
 
-#define CAMEL_BLOCK_FILE_GET_CLASS(obj) \
-       ((CamelBlockFileClass *) CAMEL_OBJECT_GET_CLASS (obj))
-
 static gint sync_nolock(CamelBlockFile *bs);
 static gint sync_block_nolock(CamelBlockFile *bs, CamelBlock *bl);
 
+G_DEFINE_TYPE (CamelBlockFile, camel_block_file, CAMEL_TYPE_OBJECT)
+
 static gint
 block_file_validate_root(CamelBlockFile *bs)
 {
@@ -143,8 +141,9 @@ block_file_init_root(CamelBlockFile *bs)
 }
 
 static void
-camel_block_file_finalize(CamelBlockFile *bs)
+block_file_finalize(GObject *object)
 {
+       CamelBlockFile *bs = CAMEL_BLOCK_FILE (object);
        CamelBlock *bl, *bn;
        struct _CamelBlockFilePrivate *p;
 
@@ -183,11 +182,19 @@ camel_block_file_finalize(CamelBlockFile *bs)
        g_static_mutex_free (&p->root_lock);
 
        g_free(p);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_block_file_parent_class)->finalize (object);
 }
 
 static void
 camel_block_file_class_init(CamelBlockFileClass *class)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = block_file_finalize;
+
        class->validate_root = block_file_validate_root;
        class->init_root = block_file_init_root;
 }
@@ -237,24 +244,6 @@ camel_block_file_init(CamelBlockFile *bs)
        UNLOCK(block_file_lock);
 }
 
-CamelType
-camel_block_file_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelBlockFile",
-                                          sizeof (CamelBlockFile),
-                                          sizeof (CamelBlockFileClass),
-                                          (CamelObjectClassInitFunc) camel_block_file_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_block_file_init,
-                                          (CamelObjectFinalizeFunc) camel_block_file_finalize);
-       }
-
-       return type;
-}
-
 /* 'use' a block file for io */
 static gint
 block_file_use(CamelBlockFile *bs)
@@ -370,14 +359,14 @@ camel_block_file_new (const gchar *path,
        CamelBlockFileClass *class;
        CamelBlockFile *bs;
 
-       bs = (CamelBlockFile *)camel_object_new(camel_block_file_get_type());
+       bs = g_object_new (CAMEL_TYPE_BLOCK_FILE, NULL);
        memcpy(bs->version, version, 8);
        bs->path = g_strdup(path);
        bs->flags = flags;
 
-       bs->root_block = camel_block_file_get_block(bs, 0);
+       bs->root_block = camel_block_file_get_block (bs, 0);
        if (bs->root_block == NULL) {
-               camel_object_unref (bs);
+               g_object_unref (bs);
                return NULL;
        }
        camel_block_file_detach_block(bs, bs->root_block);
@@ -395,13 +384,13 @@ camel_block_file_new (const gchar *path,
                class->init_root(bs);
                camel_block_file_touch_block(bs, bs->root_block);
                if (block_file_use(bs) == -1) {
-                       camel_object_unref (bs);
+                       g_object_unref (bs);
                        return NULL;
                }
                if (sync_block_nolock(bs, bs->root_block) == -1
                    || ftruncate(bs->fd, bs->root->last) == -1) {
                        block_file_unuse(bs);
-                       camel_object_unref (bs);
+                       g_object_unref (bs);
                        return NULL;
                }
                block_file_unuse(bs);
@@ -474,7 +463,8 @@ camel_block_file_delete(CamelBlockFile *bs)
  *
  * Returns: The block, or NULL if an error occured.
  **/
-CamelBlock *camel_block_file_new_block(CamelBlockFile *bs)
+CamelBlock *
+camel_block_file_new_block (CamelBlockFile *bs)
 {
        CamelBlock *bl;
 
@@ -826,9 +816,12 @@ static CamelDList key_file_active_list = CAMEL_DLIST_INITIALISER(key_file_active
 static gint key_file_count = 0;
 static const gint key_file_threshhold = 10;
 
+G_DEFINE_TYPE (CamelKeyFile, camel_key_file, CAMEL_TYPE_OBJECT)
+
 static void
-camel_key_file_finalize(CamelKeyFile *bs)
+key_file_finalize(GObject *object)
 {
+       CamelKeyFile *bs = CAMEL_KEY_FILE (object);
        struct _CamelKeyFilePrivate *p = bs->priv;
 
        LOCK(key_file_lock);
@@ -846,11 +839,18 @@ camel_key_file_finalize(CamelKeyFile *bs)
        g_static_mutex_free (&p->lock);
 
        g_free(p);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_key_file_parent_class)->finalize (object);
 }
 
 static void
 camel_key_file_class_init(CamelKeyFileClass *class)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = key_file_finalize;
 }
 
 static void
@@ -868,24 +868,6 @@ camel_key_file_init(CamelKeyFile *bs)
        UNLOCK(key_file_lock);
 }
 
-CamelType
-camel_key_file_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelKeyFile",
-                                          sizeof (CamelKeyFile),
-                                          sizeof (CamelKeyFileClass),
-                                          (CamelObjectClassInitFunc) camel_key_file_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_key_file_init,
-                                          (CamelObjectFinalizeFunc) camel_key_file_finalize);
-       }
-
-       return type;
-}
-
 /* 'use' a key file for io */
 static gint
 key_file_use(CamelKeyFile *bs)
@@ -996,14 +978,14 @@ camel_key_file_new(const gchar *path, gint flags, const gchar version[8])
 
        d(printf("New key file '%s'\n", path));
 
-       kf = (CamelKeyFile *)camel_object_new(camel_key_file_get_type());
+       kf = g_object_new (CAMEL_TYPE_KEY_FILE, NULL);
        kf->path = g_strdup(path);
        kf->fp = NULL;
        kf->flags = flags;
        kf->last = 8;
 
        if (key_file_use(kf) == -1) {
-               camel_object_unref (kf);
+               g_object_unref (kf);
                kf = NULL;
        } else {
                fseek(kf->fp, 0, SEEK_END);
@@ -1021,7 +1003,7 @@ camel_key_file_new(const gchar *path, gint flags, const gchar version[8])
                kf->flags &= ~(O_CREAT|O_EXCL|O_TRUNC);
 
                if (err) {
-                       camel_object_unref (kf);
+                       g_object_unref (kf);
                        kf = NULL;
                }
        }
index 0fa3e1e..4a9e2da 100644 (file)
 #include <stdio.h>
 #include <sys/types.h>
 
+/* Standard GObject macros */
+#define CAMEL_TYPE_BLOCK_FILE \
+       (camel_block_file_get_type ())
+#define CAMEL_BLOCK_FILE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_BLOCK_FILE, CamelBlockFile))
+#define CAMEL_BLOCK_FILE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_BLOCK_FILE, CamelBlockFileClass))
+#define CAMEL_IS_BLOCK_FILE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_BLOCK_FILE))
+#define CAMEL_IS_BLOCK_FILE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_BLOCK_FILE))
+#define CAMEL_BLOCK_FILE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_BLOCK_FILE, CamelBlockFileClass))
+
+#define CAMEL_TYPE_KEY_FILE \
+       (camel_key_file_get_type ())
+#define CAMEL_KEY_FILE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_KEY_FILE, CamelKeyFile))
+#define CAMEL_KEY_FILE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_KEY_FILE, CamelKeyFileClass))
+#define CAMEL_IS_KEY_FILE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_KEY_FILE))
+#define CAMEL_IS_KEY_FILE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_KEY_FILE))
+#define CAMEL_KEY_FILE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_KEY_FILE, CamelKeyFileClass))
+
 G_BEGIN_DECLS
 
 typedef guint32 camel_block_t; /* block offset, absolute, bottom BLOCK_SIZE_BITS always 0 */
@@ -101,7 +138,7 @@ struct _CamelBlockFileClass {
        gint (*init_root)(CamelBlockFile *);
 };
 
-CamelType      camel_block_file_get_type       (void);
+GType          camel_block_file_get_type       (void);
 CamelBlockFile *camel_block_file_new           (const gchar *path,
                                                 gint flags,
                                                 const gchar version[8],
@@ -146,7 +183,7 @@ struct _CamelKeyFileClass {
        CamelObjectClass parent;
 };
 
-CamelType      camel_key_file_get_type(void);
+GType      camel_key_file_get_type(void);
 
 CamelKeyFile * camel_key_file_new(const gchar *path, gint flags, const gchar version[8]);
 gint          camel_key_file_rename(CamelKeyFile *kf, const gchar *path);
index 6658190..68119ea 100644 (file)
 
 #define CAMEL_CERTDB_VERSION  0x100
 
+#define CAMEL_CERTDB_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_CERTDB, CamelCertDBPrivate))
+
 struct _CamelCertDBPrivate {
        GMutex *db_lock;        /* for the db hashtable/array */
        GMutex *io_lock;        /* load/save lock, for access to saved_count, etc */
@@ -59,15 +63,15 @@ static void certdb_cert_free (CamelCertDB *certdb, CamelCert *cert);
 static const gchar *cert_get_string (CamelCertDB *certdb, CamelCert *cert, gint string);
 static void cert_set_string (CamelCertDB *certdb, CamelCert *cert, gint string, const gchar *value);
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelCertDB, camel_certdb, CAMEL_TYPE_OBJECT)
 
 static void
-certdb_finalize (CamelObject *object)
+certdb_finalize (GObject *object)
 {
        CamelCertDB *certdb = CAMEL_CERTDB (object);
        CamelCertDBPrivate *priv;
 
-       priv = certdb->priv;
+       priv = CAMEL_CERTDB_GET_PRIVATE (object);
 
        if (certdb->flags & CAMEL_CERTDB_DIRTY)
                camel_certdb_save (certdb);
@@ -86,13 +90,19 @@ certdb_finalize (CamelObject *object)
        g_mutex_free (priv->alloc_lock);
        g_mutex_free (priv->ref_lock);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_certdb_parent_class)->finalize (object);
 }
 
 static void
 camel_certdb_class_init (CamelCertDBClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelCertDBPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = certdb_finalize;
 
        class->header_load = certdb_header_load;
        class->header_save = certdb_header_save;
@@ -108,7 +118,7 @@ camel_certdb_class_init (CamelCertDBClass *class)
 static void
 camel_certdb_init (CamelCertDB *certdb)
 {
-       certdb->priv = g_malloc (sizeof (CamelCertDBPrivate));
+       certdb->priv = CAMEL_CERTDB_GET_PRIVATE (certdb);
 
        certdb->filename = NULL;
        certdb->version = CAMEL_CERTDB_VERSION;
@@ -127,29 +137,10 @@ camel_certdb_init (CamelCertDB *certdb)
        certdb->priv->ref_lock = g_mutex_new ();
 }
 
-CamelType
-camel_certdb_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (),
-                                           "CamelCertDB",
-                                           sizeof (CamelCertDB),
-                                           sizeof (CamelCertDBClass),
-                                           (CamelObjectClassInitFunc) camel_certdb_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_certdb_init,
-                                           (CamelObjectFinalizeFunc) certdb_finalize);
-       }
-
-       return type;
-}
-
 CamelCertDB *
 camel_certdb_new (void)
 {
-       return (CamelCertDB *) camel_object_new (camel_certdb_get_type ());
+       return g_object_new (CAMEL_TYPE_CERTDB, NULL);
 }
 
 static CamelCertDB *default_certdb = NULL;
@@ -161,10 +152,10 @@ camel_certdb_set_default (CamelCertDB *certdb)
        g_static_mutex_lock (&default_certdb_lock);
 
        if (default_certdb)
-               camel_object_unref (default_certdb);
+               g_object_unref (default_certdb);
 
        if (certdb)
-               camel_object_ref (certdb);
+               g_object_ref (certdb);
 
        default_certdb = certdb;
 
@@ -179,7 +170,7 @@ camel_certdb_get_default (void)
        g_static_mutex_lock (&default_certdb_lock);
 
        if (default_certdb)
-               camel_object_ref (default_certdb);
+               g_object_ref (default_certdb);
 
        certdb = default_certdb;
 
@@ -693,7 +684,7 @@ camel_cert_set_trust (CamelCertDB *certdb, CamelCert *cert, CamelCertTrust trust
  *
  * Locks #certdb's #lock. Unlock it with camel_certdb_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
 camel_certdb_lock (CamelCertDB *certdb, CamelCertDBLock lock)
@@ -727,7 +718,7 @@ camel_certdb_lock (CamelCertDB *certdb, CamelCertDBLock lock)
  *
  * Unlocks #certdb's #lock, previously locked with camel_certdb_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
 camel_certdb_unlock (CamelCertDB *certdb, CamelCertDBLock lock)
index 90e711f..2f578d0 100644 (file)
 #include <stdio.h>
 #include <camel/camel-object.h>
 
-#define CAMEL_CERTDB_TYPE         (camel_certdb_get_type ())
-#define CAMEL_CERTDB(obj)         (CAMEL_CHECK_CAST (obj, camel_certdb_get_type (), CamelCertDB))
-#define CAMEL_CERTDB_CLASS(klass) (CAMEL_CHECK_CLASS_CAST (klass, camel_certdb_get_type (), CamelCertDBClass))
-#define CAMEL_IS_CERTDB(obj)      (CAMEL_CHECK_TYPE (obj, camel_certdb_get_type ()))
+/* Standard GObject macros */
+#define CAMEL_TYPE_CERTDB \
+       (camel_certdb_get_type ())
+#define CAMEL_CERTDB(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_CERTDB, CamelCertDB))
+#define CAMEL_CERTDB_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_CERTDB, CamelCertDBClass))
+#define CAMEL_IS_CERTDB(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_CERTDB))
+#define CAMEL_IS_CERTDB_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_CERTDB))
 #define CAMEL_CERTDB_GET_CLASS(obj) \
-       ((CamelCertDBClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_CERTDB, CamelCertDBClass))
 
 G_BEGIN_DECLS
 
@@ -114,7 +126,7 @@ struct _CamelCertDBClass {
        void (*cert_set_string) (CamelCertDB *certdb, CamelCert *cert, gint string, const gchar *value);
 };
 
-CamelType camel_certdb_get_type (void);
+GType camel_certdb_get_type (void);
 
 CamelCertDB *camel_certdb_new (void);
 
index c0cfba3..50c0db3 100644 (file)
 
 #define d(x)
 
+#define CAMEL_CIPHER_CONTEXT_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_CIPHER_CONTEXT, CamelCipherContextPrivate))
+
 struct _CamelCipherContextPrivate {
        CamelSession *session;
        GMutex *lock;
 };
 
-static CamelObjectClass *parent_class = NULL;
+enum {
+       PROP_0,
+       PROP_SESSION
+};
+
+G_DEFINE_TYPE (CamelCipherContext, camel_cipher_context, CAMEL_TYPE_OBJECT)
 
 static gint
 cipher_sign (CamelCipherContext *ctx,
@@ -631,25 +640,84 @@ cipher_context_set_session (CamelCipherContext *context,
        g_return_if_fail (CAMEL_IS_SESSION (session));
        g_return_if_fail (context->priv->session == NULL);
 
-       context->priv->session = camel_object_ref (session);
+       context->priv->session = g_object_ref (session);
+}
+
+static void
+cipher_context_set_property (GObject *object,
+                             guint property_id,
+                             const GValue *value,
+                             GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_SESSION:
+                       cipher_context_set_session (
+                               CAMEL_CIPHER_CONTEXT (object),
+                               g_value_get_object (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
 static void
-cipher_context_finalize (CamelObject *object)
+cipher_context_get_property (GObject *object,
+                             guint property_id,
+                             GValue *value,
+                             GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_SESSION:
+                       g_value_set_object (
+                               value, camel_cipher_context_get_session (
+                               CAMEL_CIPHER_CONTEXT (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+cipher_context_dispose (GObject *object)
 {
-       CamelCipherContext *context = (CamelCipherContext *) object;
+       CamelCipherContextPrivate *priv;
 
-       camel_object_unref (context->priv->session);
+       priv = CAMEL_CIPHER_CONTEXT_GET_PRIVATE (object);
 
-       g_mutex_free (context->priv->lock);
+       if (priv->session != NULL) {
+               g_object_unref (priv->session);
+               priv->session = NULL;
+       }
 
-       g_free (context->priv);
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_cipher_context_parent_class)->dispose (object);
+}
+
+static void
+cipher_context_finalize (GObject *object)
+{
+       CamelCipherContextPrivate *priv;
+
+       priv = CAMEL_CIPHER_CONTEXT_GET_PRIVATE (object);
+
+       g_mutex_free (priv->lock);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_cipher_context_parent_class)->finalize (object);
 }
 
 static void
 camel_cipher_context_class_init (CamelCipherContextClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelCipherContextPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = cipher_context_set_property;
+       object_class->get_property = cipher_context_get_property;
+       object_class->dispose = cipher_context_dispose;
+       object_class->finalize = cipher_context_finalize;
 
        class->hash_to_id = cipher_hash_to_id;
        class->id_to_hash = cipher_id_to_hash;
@@ -659,37 +727,29 @@ camel_cipher_context_class_init (CamelCipherContextClass *class)
        class->decrypt = cipher_decrypt;
        class->import_keys = cipher_import_keys;
        class->export_keys = cipher_export_keys;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_SESSION,
+               g_param_spec_object (
+                       "session",
+                       "Session",
+                       NULL,
+                       CAMEL_TYPE_SESSION,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT_ONLY));
 }
 
 static void
 camel_cipher_context_init (CamelCipherContext *context)
 {
-       context->priv = g_new0 (struct _CamelCipherContextPrivate, 1);
+       context->priv = CAMEL_CIPHER_CONTEXT_GET_PRIVATE (context);
        context->priv->lock = g_mutex_new ();
 }
 
-CamelType
-camel_cipher_context_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (),
-                                           "CamelCipherContext",
-                                           sizeof (CamelCipherContext),
-                                           sizeof (CamelCipherContextClass),
-                                           (CamelObjectClassInitFunc) camel_cipher_context_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_cipher_context_init,
-                                           (CamelObjectFinalizeFunc) cipher_context_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_cipher_context_new:
- * @session: CamelSession
+ * @session: a #CamelSession
  *
  * This creates a new CamelCipherContext object which is used to sign,
  * verify, encrypt and decrypt streams.
@@ -699,17 +759,19 @@ camel_cipher_context_get_type (void)
 CamelCipherContext *
 camel_cipher_context_new (CamelSession *session)
 {
-       CamelCipherContext *context;
-
        g_return_val_if_fail (session != NULL, NULL);
 
-       context = CAMEL_CIPHER_CONTEXT (camel_object_new (CAMEL_CIPHER_CONTEXT_TYPE));
-
-       cipher_context_set_session (context, session);
-
-       return context;
+       return g_object_new (
+               CAMEL_TYPE_CIPHER_CONTEXT,
+               "session", session, NULL);
 }
 
+/**
+ * camel_cipher_context_get_session:
+ * @context: a #CamelCipherContext
+ *
+ * Since: 3.0
+ **/
 CamelSession *
 camel_cipher_context_get_session (CamelCipherContext *context)
 {
@@ -718,22 +780,6 @@ camel_cipher_context_get_session (CamelCipherContext *context)
        return context->priv->session;
 }
 
-/**
- * camel_cipher_context_construct:
- * @context: CamelCipherContext
- * @session: CamelSession
- *
- * Constucts the CamelCipherContext
- **/
-void
-camel_cipher_context_construct (CamelCipherContext *context, CamelSession *session)
-{
-       g_return_if_fail (CAMEL_IS_CIPHER_CONTEXT (context));
-       g_return_if_fail (CAMEL_IS_SESSION (session));
-
-       cipher_context_set_session (context, session);
-}
-
 /* See rfc3156, section 2 and others */
 /* We do this simply: Anything not base64 must be qp
    This is so that we can safely translate any occurance of "From "
@@ -792,13 +838,13 @@ camel_cipher_canonical_to_stream (CamelMimePart *part,
        filter = camel_stream_filter_new (ostream);
        canon = camel_mime_filter_canon_new (flags);
        camel_stream_filter_add (CAMEL_STREAM_FILTER (filter), canon);
-       camel_object_unref (canon);
+       g_object_unref (canon);
 
        if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *)part, filter) != -1
            && camel_stream_flush (filter) != -1)
                res = 0;
 
-       camel_object_unref (filter);
+       g_object_unref (filter);
        camel_stream_reset (ostream);
 
        return res;
index d32b145..6841d44 100644 (file)
 #include <camel/camel-list-utils.h>
 #include <camel/camel-mime-part.h>
 #include <camel/camel-session.h>
-#include <camel/camel-exception.h>
-#include <camel/camel-stream.h>
 
-#define CAMEL_CIPHER_CONTEXT_TYPE     (camel_cipher_context_get_type ())
-#define CAMEL_CIPHER_CONTEXT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_CIPHER_CONTEXT_TYPE, CamelCipherContext))
-#define CAMEL_CIPHER_CONTEXT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_CIPHER_CONTEXT_TYPE, CamelCipherContextClass))
-#define CAMEL_IS_CIPHER_CONTEXT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_CIPHER_CONTEXT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_CIPHER_CONTEXT \
+       (camel_cipher_context_get_type ())
+#define CAMEL_CIPHER_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_CIPHER_CONTEXT, CamelCipherContext))
+#define CAMEL_CIPHER_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_CIPHER_CONTEXT, CamelCipherContextClass))
+#define CAMEL_IS_CIPHER_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_CIPHER_CONTEXT))
+#define CAMEL_IS_CIPHER_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_CIPHER_CONTEXT))
 #define CAMEL_CIPHER_CONTEXT_GET_CLASS(obj) \
-       ((CamelCipherContextClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_CIPHER_CONTEXT, CamelCipherContextClass))
 
 G_BEGIN_DECLS
 
@@ -155,10 +165,9 @@ struct _CamelCipherContextClass {
                                                 CamelException *ex);
 };
 
-CamelType      camel_cipher_context_get_type   (void);
+GType          camel_cipher_context_get_type   (void);
 CamelCipherContext *
                camel_cipher_context_new        (CamelSession *session);
-void           camel_cipher_context_construct  (CamelCipherContext *context, CamelSession *session);
 CamelSession * camel_cipher_context_get_session(CamelCipherContext *context);
 
 /* cipher context util routines */
index 60cd7d6..dbc3a56 100644 (file)
@@ -37,6 +37,7 @@
 #include <glib/gi18n-lib.h>
 
 #include "camel-data-cache.h"
+#include "camel-object-bag.h"
 #include "camel-stream-fs.h"
 #include "camel-stream-mem.h"
 #include "camel-file-utils.h"
    once an hour should be enough */
 #define CAMEL_DATA_CACHE_CYCLE_TIME (60*60)
 
+#define CAMEL_DATA_CACHE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_DATA_CACHE, CamelDataCachePrivate))
+
 struct _CamelDataCachePrivate {
        CamelObjectBag *busy_bag;
 
@@ -62,23 +67,83 @@ struct _CamelDataCachePrivate {
        time_t expire_last[1<<CAMEL_DATA_CACHE_BITS];
 };
 
-static CamelObject *camel_data_cache_parent;
+enum {
+       PROP_0,
+       PROP_PATH
+};
+
+G_DEFINE_TYPE (CamelDataCache, camel_data_cache, CAMEL_TYPE_OBJECT)
 
 static void
-data_cache_finalize (CamelDataCache *cdc)
+data_cache_set_property (GObject *object,
+                         guint property_id,
+                         const GValue *value,
+                         GParamSpec *pspec)
 {
-       CamelDataCachePrivate *priv = cdc->priv;
+       switch (property_id) {
+               case PROP_PATH:
+                       camel_data_cache_set_path (
+                               CAMEL_DATA_CACHE (object),
+                               g_value_get_string (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+data_cache_get_property (GObject *object,
+                         guint property_id,
+                         GValue *value,
+                         GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_PATH:
+                       g_value_set_string (
+                               value, camel_data_cache_get_path (
+                               CAMEL_DATA_CACHE (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+data_cache_finalize (GObject *object)
+{
+       CamelDataCachePrivate *priv;
+
+       priv = CAMEL_DATA_CACHE_GET_PRIVATE (object);
 
        camel_object_bag_destroy (priv->busy_bag);
        g_free (priv->path);
-       g_free (priv);
 
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_data_cache_parent_class)->finalize (object);
 }
 
 static void
 camel_data_cache_class_init (CamelDataCacheClass *class)
 {
-       camel_data_cache_parent = (CamelObject *)camel_object_get_type ();
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelDataCachePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = data_cache_set_property;
+       object_class->get_property = data_cache_get_property;
+       object_class->finalize = data_cache_finalize;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_PATH,
+               g_param_spec_string (
+                       "path",
+                       "Path",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT));
 }
 
 static void
@@ -91,31 +156,12 @@ camel_data_cache_init (CamelDataCache *data_cache)
                (CamelCopyFunc) g_strdup,
                (GFreeFunc) g_free);
 
-       data_cache->priv = g_malloc0(sizeof(*data_cache->priv));
+       data_cache->priv = CAMEL_DATA_CACHE_GET_PRIVATE (data_cache);
        data_cache->priv->busy_bag = busy_bag;
        data_cache->priv->expire_age = -1;
        data_cache->priv->expire_access = -1;
 }
 
-CamelType
-camel_data_cache_get_type(void)
-{
-       static CamelType camel_data_cache_type = CAMEL_INVALID_TYPE;
-
-       if (camel_data_cache_type == CAMEL_INVALID_TYPE) {
-               camel_data_cache_type = camel_type_register(
-                       CAMEL_TYPE_OBJECT, "CamelDataCache",
-                       sizeof (CamelDataCache),
-                       sizeof (CamelDataCacheClass),
-                       (CamelObjectClassInitFunc) camel_data_cache_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_data_cache_init,
-                       (CamelObjectFinalizeFunc) data_cache_finalize);
-       }
-
-       return camel_data_cache_type;
-}
-
 /**
  * camel_data_cache_new:
  * @path: Base path of cache, subdirectories will be created here.
@@ -127,9 +173,10 @@ camel_data_cache_get_type(void)
  * be written to.
  **/
 CamelDataCache *
-camel_data_cache_new(const gchar *path, CamelException *ex)
+camel_data_cache_new (const gchar *path,
+                      CamelException *ex)
 {
-       CamelDataCache *cdc;
+       g_return_val_if_fail (path != NULL, NULL);
 
        if (g_mkdir_with_parents (path, 0700) == -1) {
                camel_exception_setv (
@@ -138,11 +185,7 @@ camel_data_cache_new(const gchar *path, CamelException *ex)
                return NULL;
        }
 
-       cdc = (CamelDataCache *)camel_object_new(CAMEL_DATA_CACHE_TYPE);
-
-       cdc->priv->path = g_strdup (path);
-
-       return cdc;
+       return g_object_new (CAMEL_TYPE_DATA_CACHE, "path", path, NULL);
 }
 
 const gchar *
@@ -233,7 +276,7 @@ data_cache_expire(CamelDataCache *cdc, const gchar *path, const gchar *keep, tim
                        stream = camel_object_bag_get(cdc->priv->busy_bag, s->str);
                        if (stream) {
                                camel_object_bag_remove(cdc->priv->busy_bag, stream);
-                               camel_object_unref (stream);
+                               g_object_unref (stream);
                        }
                }
        }
@@ -300,7 +343,10 @@ data_cache_path(CamelDataCache *cdc, gint create, const gchar *path, const gchar
  * The caller must unref this when finished.
  **/
 CamelStream *
-camel_data_cache_add(CamelDataCache *cdc, const gchar *path, const gchar *key, CamelException *ex)
+camel_data_cache_add (CamelDataCache *cdc,
+                      const gchar *path,
+                      const gchar *key,
+                      CamelException *ex)
 {
        gchar *real;
        CamelStream *stream;
@@ -314,11 +360,12 @@ camel_data_cache_add(CamelDataCache *cdc, const gchar *path, const gchar *key, C
                if (stream) {
                        g_unlink(real);
                        camel_object_bag_remove(cdc->priv->busy_bag, stream);
-                       camel_object_unref (stream);
+                       g_object_unref (stream);
                }
        } while (stream != NULL);
 
-       stream = camel_stream_fs_new_with_name(real, O_RDWR|O_CREAT|O_TRUNC, 0600);
+       stream = camel_stream_fs_new_with_name (
+               real, O_RDWR|O_CREAT|O_TRUNC, 0600);
        if (stream)
                camel_object_bag_add(cdc->priv->busy_bag, real, stream);
        else
@@ -355,7 +402,8 @@ camel_data_cache_get (CamelDataCache *cdc,
        real = data_cache_path(cdc, FALSE, path, key);
        stream = camel_object_bag_reserve(cdc->priv->busy_bag, real);
        if (!stream) {
-               stream = camel_stream_fs_new_with_name (real, O_RDWR, 0600);
+               stream = camel_stream_fs_new_with_name (
+                       real, O_RDWR, 0600);
                if (stream)
                        camel_object_bag_add(cdc->priv->busy_bag, real, stream);
                else
@@ -417,7 +465,7 @@ camel_data_cache_remove (CamelDataCache *cdc,
        stream = camel_object_bag_get(cdc->priv->busy_bag, real);
        if (stream) {
                camel_object_bag_remove(cdc->priv->busy_bag, stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
 
        /* maybe we were a mem stream */
index 2504935..1772fd8 100644 (file)
 #include <camel/camel-stream.h>
 #include <camel/camel-exception.h>
 
-#define CAMEL_DATA_CACHE_TYPE     (camel_data_cache_get_type ())
-#define CAMEL_DATA_CACHE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DATA_CACHE_TYPE, CamelFolder))
-#define CAMEL_DATA_CACHE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DATA_CACHE_TYPE, CamelFolderClass))
-#define CAMEL_IS_DATA_CACHE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DATA_CACHE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_DATA_CACHE \
+       (camel_data_cache_get_type ())
+#define CAMEL_DATA_CACHE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_DATA_CACHE, CamelDataCache))
+#define CAMEL_DATA_CACHE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_DATA_CACHE, CamelDataCacheClass))
+#define CAMEL_IS_DATA_CACHE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_DATA_CACHE))
+#define CAMEL_IS_DATA_CACHE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_DATA_CACHE))
+#define CAMEL_DATA_CACHE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_DATA_CACHE, CamelDataCacheClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +64,7 @@ struct _CamelDataCacheClass {
        CamelObjectClass parent_class;
 };
 
-CamelType      camel_data_cache_get_type       (void);
+GType          camel_data_cache_get_type       (void);
 CamelDataCache *camel_data_cache_new           (const gchar *path,
                                                 CamelException *ex);
 const gchar *  camel_data_cache_get_path       (CamelDataCache *cdc);
index f3f530b..c5d3284 100644 (file)
 
 #define d(x)
 
+#define CAMEL_DATA_WRAPPER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapperPrivate))
+
 struct _CamelDataWrapperPrivate {
        GStaticMutex stream_lock;
 };
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelDataWrapper, camel_data_wrapper, CAMEL_TYPE_OBJECT)
 
 static void
-camel_data_wrapper_finalize (CamelObject *object)
+data_wrapper_dispose (GObject *object)
 {
-       CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
+       CamelDataWrapper *data_wrapper = CAMEL_DATA_WRAPPER (object);
 
-       g_static_mutex_free (&camel_data_wrapper->priv->stream_lock);
+       if (data_wrapper->mime_type != NULL) {
+               camel_content_type_unref (data_wrapper->mime_type);
+               data_wrapper->mime_type = NULL;
+       }
+
+       if (data_wrapper->stream != NULL) {
+               g_object_unref (data_wrapper->stream);
+               data_wrapper->stream = NULL;
+       }
 
-       g_free (camel_data_wrapper->priv);
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_data_wrapper_parent_class)->dispose (object);
+}
+
+static void
+data_wrapper_finalize (GObject *object)
+{
+       CamelDataWrapper *data_wrapper = CAMEL_DATA_WRAPPER (object);
 
-       if (camel_data_wrapper->mime_type)
-               camel_content_type_unref (camel_data_wrapper->mime_type);
+       g_static_mutex_free (&data_wrapper->priv->stream_lock);
 
-       if (camel_data_wrapper->stream)
-               camel_object_unref (camel_data_wrapper->stream);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_data_wrapper_parent_class)->finalize (object);
 }
 
 static gssize
@@ -93,17 +111,17 @@ data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
        case CAMEL_TRANSFER_ENCODING_BASE64:
                filter = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
                camel_stream_filter_add (CAMEL_STREAM_FILTER (fstream), filter);
-               camel_object_unref (filter);
+               g_object_unref (filter);
                break;
        case CAMEL_TRANSFER_ENCODING_QUOTEDPRINTABLE:
                filter = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_QP_DEC);
                camel_stream_filter_add (CAMEL_STREAM_FILTER (fstream), filter);
-               camel_object_unref (filter);
+               g_object_unref (filter);
                break;
        case CAMEL_TRANSFER_ENCODING_UUENCODE:
                filter = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_UU_DEC);
                camel_stream_filter_add (CAMEL_STREAM_FILTER (fstream), filter);
-               camel_object_unref (filter);
+               g_object_unref (filter);
                break;
        default:
                break;
@@ -113,12 +131,13 @@ data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
                filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE,
                                                     CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
                camel_stream_filter_add (CAMEL_STREAM_FILTER (fstream), filter);
-               camel_object_unref (filter);
+               g_object_unref (filter);
        }
 
        ret = camel_data_wrapper_write_to_stream (data_wrapper, fstream);
+
        camel_stream_flush (fstream);
-       camel_object_unref (fstream);
+       g_object_unref (fstream);
 
        return ret;
 }
@@ -160,9 +179,9 @@ data_wrapper_construct_from_stream (CamelDataWrapper *data_wrapper,
                                     CamelStream *stream)
 {
        if (data_wrapper->stream)
-               camel_object_unref (data_wrapper->stream);
+               g_object_unref (data_wrapper->stream);
 
-       data_wrapper->stream = camel_object_ref (stream);
+       data_wrapper->stream = g_object_ref (stream);
 
        return 0;
 }
@@ -176,7 +195,13 @@ data_wrapper_is_offline (CamelDataWrapper *data_wrapper)
 static void
 camel_data_wrapper_class_init (CamelDataWrapperClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelDataWrapperPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = data_wrapper_dispose;
+       object_class->finalize = data_wrapper_finalize;
 
        class->write_to_stream = data_wrapper_write_to_stream;
        class->decode_to_stream = data_wrapper_decode_to_stream;
@@ -191,7 +216,7 @@ camel_data_wrapper_class_init (CamelDataWrapperClass *class)
 static void
 camel_data_wrapper_init (CamelDataWrapper *data_wrapper)
 {
-       data_wrapper->priv = g_malloc (sizeof (struct _CamelDataWrapperPrivate));
+       data_wrapper->priv = CAMEL_DATA_WRAPPER_GET_PRIVATE (data_wrapper);
 
        g_static_mutex_init (&data_wrapper->priv->stream_lock);
 
@@ -201,25 +226,6 @@ camel_data_wrapper_init (CamelDataWrapper *data_wrapper)
        data_wrapper->offline = FALSE;
 }
 
-CamelType
-camel_data_wrapper_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_TYPE_OBJECT,
-                                           "CamelDataWrapper",
-                                           sizeof (CamelDataWrapper),
-                                           sizeof (CamelDataWrapperClass),
-                                           (CamelObjectClassInitFunc) camel_data_wrapper_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_data_wrapper_init,
-                                           (CamelObjectFinalizeFunc) camel_data_wrapper_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_data_wrapper_new:
  *
@@ -230,7 +236,7 @@ camel_data_wrapper_get_type (void)
 CamelDataWrapper *
 camel_data_wrapper_new (void)
 {
-       return (CamelDataWrapper *) camel_object_new (CAMEL_DATA_WRAPPER_TYPE);
+       return g_object_new (CAMEL_TYPE_DATA_WRAPPER, NULL);
 }
 
 /**
@@ -425,14 +431,13 @@ camel_data_wrapper_is_offline (CamelDataWrapper *data_wrapper)
  *
  * Locks #data_wrapper's #lock. Unlock it with camel_data_wrapper_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_data_wrapper_lock (CamelDataWrapper *data_wrapper, CamelDataWrapperLock lock)
+camel_data_wrapper_lock (CamelDataWrapper *data_wrapper,
+                         CamelDataWrapperLock lock)
 {
-       g_return_if_fail (data_wrapper != NULL);
        g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-       g_return_if_fail (data_wrapper->priv != NULL);
 
        switch (lock) {
        case CDW_STREAM_LOCK:
@@ -450,14 +455,13 @@ camel_data_wrapper_lock (CamelDataWrapper *data_wrapper, CamelDataWrapperLock lo
  *
  * Unlocks #data_wrapper's #lock, previously locked with camel_data_wrapper_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_data_wrapper_unlock (CamelDataWrapper *data_wrapper, CamelDataWrapperLock lock)
+camel_data_wrapper_unlock (CamelDataWrapper *data_wrapper,
+                           CamelDataWrapperLock lock)
 {
-       g_return_if_fail (data_wrapper != NULL);
        g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-       g_return_if_fail (data_wrapper->priv != NULL);
 
        switch (lock) {
        case CDW_STREAM_LOCK:
index b1444e0..2310797 100644 (file)
 #include <camel/camel-mime-utils.h>
 #include <camel/camel-stream.h>
 
-#define CAMEL_DATA_WRAPPER_TYPE     (camel_data_wrapper_get_type ())
-#define CAMEL_DATA_WRAPPER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapper))
-#define CAMEL_DATA_WRAPPER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapperClass))
-#define CAMEL_IS_DATA_WRAPPER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DATA_WRAPPER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_DATA_WRAPPER \
+       (camel_data_wrapper_get_type ())
+#define CAMEL_DATA_WRAPPER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapper))
+#define CAMEL_DATA_WRAPPER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapperClass))
+#define CAMEL_IS_DATA_WRAPPER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_DATA_WRAPPER))
+#define CAMEL_IS_DATA_WRAPPER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_DATA_WRAPPER))
 #define CAMEL_DATA_WRAPPER_GET_CLASS(obj) \
-       ((CamelDataWrapperClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapperClass))
 
 G_BEGIN_DECLS
 
@@ -82,7 +94,7 @@ struct _CamelDataWrapperClass {
        gboolean        (*is_offline)           (CamelDataWrapper *data_wrapper);
 };
 
-CamelType      camel_data_wrapper_get_type     (void);
+GType          camel_data_wrapper_get_type     (void);
 CamelDataWrapper *
                camel_data_wrapper_new          (void);
 gssize         camel_data_wrapper_write_to_stream
@@ -104,9 +116,10 @@ gint               camel_data_wrapper_construct_from_stream
                                                (CamelDataWrapper *data_wrapper,
                                                 CamelStream *stream);
 gboolean       camel_data_wrapper_is_offline   (CamelDataWrapper *data_wrapper);
-
-void           camel_data_wrapper_lock         (CamelDataWrapper *data_wrapper, CamelDataWrapperLock lock);
-void           camel_data_wrapper_unlock       (CamelDataWrapper *data_wrapper, CamelDataWrapperLock lock);
+void           camel_data_wrapper_lock         (CamelDataWrapper *data_wrapper,
+                                                CamelDataWrapperLock lock);
+void           camel_data_wrapper_unlock       (CamelDataWrapper *data_wrapper,
+                                                CamelDataWrapperLock lock);
 
 G_END_DECLS
 
index 725b45d..2b9e03f 100644 (file)
 
 #define d(x)
 
+G_DEFINE_TYPE (CamelDiscoDiary, camel_disco_diary, CAMEL_TYPE_OBJECT)
+
 static void
 unref_folder (gpointer key, gpointer value, gpointer data)
 {
-       camel_object_unref (value);
+       g_object_unref (value);
 }
 
 static void
@@ -57,8 +59,10 @@ free_uid (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-disco_diary_finalize (CamelDiscoDiary *diary)
+disco_diary_finalize (GObject *object)
 {
+       CamelDiscoDiary *diary = CAMEL_DISCO_DIARY (object);
+
        if (diary->file)
                fclose (diary->file);
 
@@ -71,11 +75,18 @@ disco_diary_finalize (CamelDiscoDiary *diary)
                g_hash_table_foreach (diary->uidmap, free_uid, NULL);
                g_hash_table_destroy (diary->uidmap);
        }
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_disco_diary_parent_class)->finalize (object);
 }
 
 static void
 camel_disco_diary_class_init (CamelDiscoDiaryClass *class)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = disco_diary_finalize;
 }
 
 static void
@@ -85,25 +96,6 @@ camel_disco_diary_init (CamelDiscoDiary *diary)
        diary->uidmap = g_hash_table_new (g_str_hash, g_str_equal);
 }
 
-CamelType
-camel_disco_diary_get_type (void)
-{
-       static CamelType camel_disco_diary_type = CAMEL_INVALID_TYPE;
-
-       if (camel_disco_diary_type == CAMEL_INVALID_TYPE) {
-               camel_disco_diary_type = camel_type_register (
-                       CAMEL_TYPE_OBJECT, "CamelDiscoDiary",
-                       sizeof (CamelDiscoDiary),
-                       sizeof (CamelDiscoDiaryClass),
-                       (CamelObjectClassInitFunc) camel_disco_diary_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_disco_diary_init,
-                       (CamelObjectFinalizeFunc) disco_diary_finalize);
-       }
-
-       return camel_disco_diary_type;
-}
-
 static gint
 diary_encode_uids (CamelDiscoDiary *diary, GPtrArray *uids)
 {
@@ -279,7 +271,7 @@ close_folder (gpointer name, gpointer folder, gpointer data)
 {
        g_free (name);
        camel_folder_sync (folder, FALSE, NULL);
-       camel_object_unref (folder);
+       g_object_unref (folder);
 }
 
 void
@@ -424,7 +416,7 @@ camel_disco_diary_new (CamelDiscoStore *store,
        g_return_val_if_fail (CAMEL_IS_DISCO_STORE (store), NULL);
        g_return_val_if_fail (filename != NULL, NULL);
 
-       diary = CAMEL_DISCO_DIARY (camel_object_new (CAMEL_DISCO_DIARY_TYPE));
+       diary = g_object_new (CAMEL_TYPE_DISCO_DIARY, NULL);
        diary->store = store;
 
        d(printf("diary log file '%s'\n", filename));
@@ -443,7 +435,7 @@ camel_disco_diary_new (CamelDiscoStore *store,
 
        diary->file = g_fopen (filename, "a+b");
        if (!diary->file) {
-               camel_object_unref (diary);
+               g_object_unref (diary);
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        "Could not open journal file: %s",
index bc9f97b..91dc285 100644 (file)
 
 #include <camel/camel-disco-store.h>
 
-#define CAMEL_DISCO_DIARY_TYPE     (camel_disco_diary_get_type ())
-#define CAMEL_DISCO_DIARY(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DISCO_DIARY_TYPE, CamelDiscoDiary))
-#define CAMEL_DISCO_DIARY_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DISCO_DIARY_TYPE, CamelDiscoDiaryClass))
-#define CAMEL_IS_DISCO_DIARY(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DISCO_DIARY_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_DISCO_DIARY \
+       (camel_disco_diary_get_type ())
+#define CAMEL_DISCO_DIARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_DISCO_DIARY, CamelDiscoDiary))
+#define CAMEL_DISCO_DIARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_DISCO_DIARY, CamelDiscoDiaryClass))
+#define CAMEL_IS_DISCO_DIARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_DISCO_DIARY))
+#define CAMEL_IS_DISCO_DIARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_DISCO_DIARY))
+#define CAMEL_DISCO_DIARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_DISCO_DIARY, CamelDiscoDiaryClass))
 
 G_BEGIN_DECLS
 
@@ -73,7 +87,7 @@ struct _CamelDiscoDiaryClass {
        CamelObjectClass parent_class;
 };
 
-CamelType      camel_disco_diary_get_type      (void);
+GType          camel_disco_diary_get_type      (void);
 CamelDiscoDiary *
                camel_disco_diary_new           (CamelDiscoStore *store,
                                                 const gchar *filename,
index c358c1d..364cc23 100644 (file)
@@ -32,7 +32,6 @@
 #include "camel-exception.h"
 #include "camel-session.h"
 
-static CamelFolderClass *parent_class = NULL;
 static GSList *disco_folder_properties;
 
 static CamelProperty disco_property_list[] = {
@@ -49,6 +48,8 @@ struct _cdf_sync_msg {
        CamelFolderChangeInfo *changes;
 };
 
+G_DEFINE_TYPE (CamelDiscoFolder, camel_disco_folder, CAMEL_TYPE_FOLDER)
+
 static void
 cdf_sync_offline(CamelSession *session, CamelSessionThreadMsg *mm)
 {
@@ -82,7 +83,7 @@ cdf_sync_free(CamelSession *session, CamelSessionThreadMsg *mm)
 
        if (m->changes)
                camel_folder_change_info_free(m->changes);
-       camel_object_unref (m->folder);
+       g_object_unref (m->folder);
 }
 
 static CamelSessionThreadOps cdf_sync_ops = {
@@ -102,7 +103,7 @@ cdf_folder_changed(CamelFolder *folder, CamelFolderChangeInfo *changes, gpointer
                m = camel_session_thread_msg_new(session, &cdf_sync_ops, sizeof(*m));
                m->changes = camel_folder_change_info_new();
                camel_folder_change_info_cat(m->changes, changes);
-               m->folder = camel_object_ref (folder);
+               m->folder = g_object_ref (folder);
                camel_session_thread_queue(session, &m->msg, 0);
        }
 }
@@ -127,7 +128,7 @@ disco_getv (CamelObject *object,
 
                        props.argc = 1;
                        props.argv[0] = *arg;
-                       ((CamelObjectClass *)parent_class)->getv(object, ex, &props);
+                       CAMEL_OBJECT_CLASS (camel_disco_folder_parent_class)->getv(object, ex, &props);
                        *arg->ca_ptr = g_slist_concat(*arg->ca_ptr, g_slist_copy(disco_folder_properties));
                        break; }
                        /* disco args */
@@ -143,7 +144,7 @@ disco_getv (CamelObject *object,
        }
 
        if (count)
-               return ((CamelObjectClass *)parent_class)->getv(object, ex, args);
+               return CAMEL_OBJECT_CLASS (camel_disco_folder_parent_class)->getv(object, ex, args);
 
        return 0;
 }
@@ -179,7 +180,7 @@ disco_setv (CamelObject *object,
        if (save)
                camel_object_state_write(object);
 
-       return ((CamelObjectClass *)parent_class)->setv(object, ex, args);
+       return CAMEL_OBJECT_CLASS (camel_disco_folder_parent_class)->setv(object, ex, args);
 }
 
 static gboolean
@@ -400,8 +401,6 @@ camel_disco_folder_class_init (CamelDiscoFolderClass *class)
        CamelFolderClass *folder_class;
        gint ii;
 
-       parent_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
-
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = disco_getv;
        camel_object_class->setv = disco_setv;
@@ -432,23 +431,6 @@ camel_disco_folder_init (CamelDiscoFolder *disco_folder)
                (CamelObjectEventHookFunc) cdf_folder_changed, NULL);
 }
 
-CamelType
-camel_disco_folder_get_type (void)
-{
-       static CamelType camel_disco_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_disco_folder_type == CAMEL_INVALID_TYPE) {
-               camel_disco_folder_type = camel_type_register (
-                       CAMEL_FOLDER_TYPE, "CamelDiscoFolder",
-                       sizeof (CamelDiscoFolder),
-                       sizeof (CamelDiscoFolderClass),
-                       (CamelObjectClassInitFunc)camel_disco_folder_class_init, NULL,
-                       (CamelObjectInitFunc)camel_disco_folder_init, NULL);
-       }
-
-       return camel_disco_folder_type;
-}
-
 /**
  * camel_disco_folder_expunge_uids:
  * @folder: a (disconnectable) folder
index 7d34285..e2b34d7 100644 (file)
 
 #include <camel/camel-folder.h>
 
-#define CAMEL_DISCO_FOLDER_TYPE     (camel_disco_folder_get_type ())
-#define CAMEL_DISCO_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DISCO_FOLDER_TYPE, CamelDiscoFolder))
-#define CAMEL_DISCO_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DISCO_FOLDER_TYPE, CamelDiscoFolderClass))
-#define CAMEL_IS_DISCO_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DISCO_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_DISCO_FOLDER \
+       (camel_disco_folder_get_type ())
+#define CAMEL_DISCO_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_DISCO_FOLDER, CamelDiscoFolder))
+#define CAMEL_DISCO_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_DISCO_FOLDER, CamelDiscoFolderClass))
+#define CAMEL_IS_DISCO_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_DISCO_FOLDER))
+#define CAMEL_IS_DISCO_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_DISCO_FOLDER))
 #define CAMEL_DISCO_FOLDER_GET_CLASS(obj) \
-       ((CamelDiscoFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_DISCO_FOLDER, CamelDiscoFolderClass))
 
 G_BEGIN_DECLS
 
@@ -124,7 +136,7 @@ struct _CamelDiscoFolderClass {
                                                 const gchar *new_uid);
 };
 
-CamelType      camel_disco_folder_get_type     (void);
+GType          camel_disco_folder_get_type     (void);
 gboolean       camel_disco_folder_expunge_uids (CamelFolder *folder,
                                                 GPtrArray *uids,
                                                 CamelException *ex);
index 1c44e54..4a29c2c 100644 (file)
@@ -36,7 +36,7 @@
 
 #define d(x)
 
-static gpointer camel_disco_store_parent_class;
+G_DEFINE_TYPE (CamelDiscoStore, camel_disco_store, CAMEL_TYPE_STORE)
 
 static gboolean
 disco_store_construct (CamelService *service,
@@ -93,9 +93,9 @@ disco_store_connect (CamelService *service,
                /* Need to resync.  Note we do the ref thing since during the replay
                   disconnect could be called, which will remove store->diary and unref it */
                store->status = CAMEL_DISCO_STORE_RESYNCING;
-               diary = camel_object_ref (store->diary);
+               diary = g_object_ref (store->diary);
                camel_disco_diary_replay(diary, ex);
-               camel_object_unref (diary);
+               g_object_unref (diary);
                store->status = CAMEL_DISCO_STORE_ONLINE;
                if (camel_exception_is_set (ex))
                        return FALSE;
@@ -238,12 +238,12 @@ disco_store_set_status (CamelDiscoStore *disco_store,
                                folders = camel_object_bag_list(((CamelStore *)disco_store)->folders);
                                for (i=0;i<folders->len;i++) {
                                        folder = folders->pdata[i];
-                                       if (CAMEL_CHECK_TYPE(folder, CAMEL_DISCO_FOLDER_TYPE)
+                                       if (G_TYPE_CHECK_INSTANCE_TYPE(folder, CAMEL_TYPE_DISCO_FOLDER)
                                            && (sync || ((CamelDiscoFolder *)folder)->offline_sync)) {
                                                camel_disco_folder_prepare_for_offline((CamelDiscoFolder *)folder, "", &x);
                                                camel_exception_clear(&x);
                                        }
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
                                }
                                g_ptr_array_free(folders, TRUE);
                        }
@@ -266,8 +266,6 @@ camel_disco_store_class_init (CamelDiscoStoreClass *class)
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_disco_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = disco_store_construct;
        service_class->connect = disco_store_connect;
@@ -281,24 +279,9 @@ camel_disco_store_class_init (CamelDiscoStoreClass *class)
        class->set_status = disco_store_set_status;
 }
 
-CamelType
-camel_disco_store_get_type (void)
+static void
+camel_disco_store_init (CamelDiscoStore *disco_store)
 {
-       static CamelType camel_disco_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_disco_store_type == CAMEL_INVALID_TYPE) {
-               camel_disco_store_type = camel_type_register (
-                       CAMEL_STORE_TYPE,
-                       "CamelDiscoStore",
-                       sizeof (CamelDiscoStore),
-                       sizeof (CamelDiscoStoreClass),
-                       (CamelObjectClassInitFunc) camel_disco_store_class_init,
-                       NULL,
-                       NULL,
-                       NULL);
-       }
-
-       return camel_disco_store_type;
 }
 
 /**
@@ -418,12 +401,12 @@ camel_disco_store_prepare_for_offline (CamelDiscoStore *disco_store,
                                folders = camel_object_bag_list(((CamelStore *)disco_store)->folders);
                                for (i=0;i<folders->len;i++) {
                                        folder = folders->pdata[i];
-                                       if (CAMEL_CHECK_TYPE(folder, CAMEL_DISCO_FOLDER_TYPE)
+                                       if (G_TYPE_CHECK_INSTANCE_TYPE(folder, CAMEL_TYPE_DISCO_FOLDER)
                                            && (sync || ((CamelDiscoFolder *)folder)->offline_sync)) {
                                                camel_disco_folder_prepare_for_offline((CamelDiscoFolder *)folder, "(match-all)", &x);
                                                camel_exception_clear(&x);
                                        }
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
                                }
                                g_ptr_array_free(folders, TRUE);
                        }
@@ -433,4 +416,3 @@ camel_disco_store_prepare_for_offline (CamelDiscoStore *disco_store,
                camel_exception_clear(&x);
        }
 }
-
index 8c5adff..66ebc2a 100644 (file)
 
 #include <camel/camel-store.h>
 
-#define CAMEL_DISCO_STORE_TYPE     (camel_disco_store_get_type ())
-#define CAMEL_DISCO_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DISCO_STORE_TYPE, CamelDiscoStore))
-#define CAMEL_DISCO_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DISCO_STORE_TYPE, CamelDiscoStoreClass))
-#define CAMEL_IS_DISCO_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DISCO_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_DISCO_STORE \
+       (camel_disco_store_get_type ())
+#define CAMEL_DISCO_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_DISCO_STORE, CamelDiscoStore))
+#define CAMEL_DISCO_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_DISCO_STORE, CamelDiscoStoreClass))
+#define CAMEL_IS_DISCO_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_DISCO_STORE))
+#define CAMEL_IS_DISCO_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_DISCO_STORE))
 #define CAMEL_DISCO_STORE_GET_CLASS(obj) \
-       ((CamelDiscoStoreClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_DISCO_STORE, CamelDiscoStoreClass))
 
 G_BEGIN_DECLS
 
@@ -108,7 +120,7 @@ struct _CamelDiscoStoreClass {
                                                        CamelException *ex);
 };
 
-CamelType camel_disco_store_get_type (void);
+GType camel_disco_store_get_type (void);
 
 /* Public methods */
 CamelDiscoStoreStatus camel_disco_store_status           (CamelDiscoStore *store);
index f31c230..680ea0a 100644 (file)
 /* an invalid pointer */
 #define FOLDER_INVALID ((gpointer)~0)
 
+#define CAMEL_FILTER_DRIVER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriverPrivate))
+
 /* type of status for a log report */
 enum filter_log_t {
        FILTER_LOG_NONE,
@@ -123,8 +127,6 @@ struct _CamelFilterDriverPrivate {
        ESExp *eval;
 };
 
-#define CAMEL_FILTER_DRIVER_GET_PRIVATE(o) (((CamelFilterDriver *)(o))->priv)
-
 static void camel_filter_driver_log (CamelFilterDriver *driver, enum filter_log_t status, const gchar *desc, ...);
 
 static CamelFolder *open_folder (CamelFilterDriver *d, const gchar *folder_url);
@@ -172,7 +174,7 @@ static struct {
        { "only-once",         (ESExpFunc *) do_only_once, 0 }
 };
 
-static CamelObjectClass *camel_filter_driver_parent;
+G_DEFINE_TYPE (CamelFilterDriver, camel_filter_driver, CAMEL_TYPE_OBJECT)
 
 static void
 free_hash_strings (gpointer key, gpointer value, gpointer data)
@@ -182,91 +184,104 @@ free_hash_strings (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-camel_filter_driver_finalize (CamelObject *obj)
+filter_driver_dispose (GObject *object)
 {
-       CamelFilterDriver *driver = (CamelFilterDriver *) obj;
-       struct _CamelFilterDriverPrivate *p = CAMEL_FILTER_DRIVER_GET_PRIVATE (driver);
+       CamelFilterDriverPrivate *priv;
+
+       priv = CAMEL_FILTER_DRIVER_GET_PRIVATE (object);
+
+       if (priv->defaultfolder != NULL) {
+               camel_folder_thaw (priv->defaultfolder);
+               g_object_unref (priv->defaultfolder);
+               priv->defaultfolder = NULL;
+       }
+
+       if (priv->session != NULL) {
+               g_object_unref (priv->session);
+               priv->session = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_filter_driver_parent_class)->dispose (object);
+}
+
+static void
+filter_driver_finalize (GObject *object)
+{
+       CamelFilterDriverPrivate *priv;
        struct _filter_rule *node;
 
+       priv = CAMEL_FILTER_DRIVER_GET_PRIVATE (object);
+
        /* close all folders that were opened for appending */
-       close_folders (driver);
-       g_hash_table_destroy (p->folders);
+       close_folders (CAMEL_FILTER_DRIVER (object));
+       g_hash_table_destroy (priv->folders);
 
-       g_hash_table_foreach (p->globals, free_hash_strings, driver);
-       g_hash_table_destroy (p->globals);
+       g_hash_table_foreach (priv->globals, free_hash_strings, object);
+       g_hash_table_destroy (priv->globals);
 
-       g_hash_table_foreach (p->only_once, free_hash_strings, driver);
-       g_hash_table_destroy (p->only_once);
+       g_hash_table_foreach (priv->only_once, free_hash_strings, object);
+       g_hash_table_destroy (priv->only_once);
 
-       e_sexp_unref(p->eval);
+       e_sexp_unref (priv->eval);
 
-       if (p->defaultfolder) {
-               camel_folder_thaw (p->defaultfolder);
-               camel_object_unref (p->defaultfolder);
-       }
-
-       while ((node = (struct _filter_rule *)camel_dlist_remhead(&p->rules))) {
-               g_free(node->match);
-               g_free(node->action);
-               g_free(node->name);
-               g_free(node);
+       while ((node = (struct _filter_rule *) camel_dlist_remhead (&priv->rules))) {
+               g_free (node->match);
+               g_free (node->action);
+               g_free (node->name);
+               g_free (node);
        }
 
-       camel_object_unref (p->session);
-
-       g_free (p);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_filter_driver_parent_class)->finalize (object);
 }
 
 static void
-camel_filter_driver_class_init (CamelFilterDriverClass *klass)
+camel_filter_driver_class_init (CamelFilterDriverClass *class)
 {
-       camel_filter_driver_parent = camel_type_get_global_classfuncs(camel_object_get_type());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelFilterDriverPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = filter_driver_dispose;
+       object_class->finalize = filter_driver_finalize;
 }
 
 static void
-camel_filter_driver_init (CamelFilterDriver *obj)
+camel_filter_driver_init (CamelFilterDriver *filter_driver)
 {
-       struct _CamelFilterDriverPrivate *p;
-       gint i;
+       gint ii;
 
-       p = CAMEL_FILTER_DRIVER_GET_PRIVATE (obj) = g_malloc0 (sizeof (*p));
+       filter_driver->priv = CAMEL_FILTER_DRIVER_GET_PRIVATE (filter_driver);
 
-       camel_dlist_init(&p->rules);
+       camel_dlist_init (&filter_driver->priv->rules);
+
+       filter_driver->priv->eval = e_sexp_new ();
 
-       p->eval = e_sexp_new ();
        /* Load in builtin symbols */
-       for (i = 0; i < G_N_ELEMENTS (symbols); i++) {
-               if (symbols[i].type == 1) {
-                       e_sexp_add_ifunction (p->eval, 0, symbols[i].name, (ESExpIFunc *)symbols[i].func, obj);
+       for (ii = 0; ii < G_N_ELEMENTS (symbols); ii++) {
+               if (symbols[ii].type == 1) {
+                       e_sexp_add_ifunction (
+                               filter_driver->priv->eval, 0,
+                               symbols[ii].name, (ESExpIFunc *)
+                               symbols[ii].func, filter_driver);
                } else {
-                       e_sexp_add_function (p->eval, 0, symbols[i].name, symbols[i].func, obj);
+                       e_sexp_add_function (
+                               filter_driver->priv->eval, 0,
+                               symbols[ii].name, symbols[ii].func,
+                               filter_driver);
                }
        }
 
-       p->globals = g_hash_table_new (g_str_hash, g_str_equal);
-
-       p->folders = g_hash_table_new (g_str_hash, g_str_equal);
+       filter_driver->priv->globals =
+               g_hash_table_new (g_str_hash, g_str_equal);
 
-       p->only_once = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-CamelType
-camel_filter_driver_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_TYPE_OBJECT,
-                                           "CamelFilterDriver",
-                                           sizeof (CamelFilterDriver),
-                                           sizeof (CamelFilterDriverClass),
-                                           (CamelObjectClassInitFunc) camel_filter_driver_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_filter_driver_init,
-                                           (CamelObjectFinalizeFunc) camel_filter_driver_finalize);
-       }
+       filter_driver->priv->folders =
+               g_hash_table_new (g_str_hash, g_str_equal);
 
-       return type;
+       filter_driver->priv->only_once =
+               g_hash_table_new (g_str_hash, g_str_equal);
 }
 
 /**
@@ -279,8 +294,8 @@ camel_filter_driver_new (CamelSession *session)
 {
        CamelFilterDriver *d;
 
-       d = (CamelFilterDriver *)camel_object_new(camel_filter_driver_get_type());
-       d->priv->session = camel_object_ref (session);
+       d = g_object_new (CAMEL_TYPE_FILTER_DRIVER, NULL);
+       d->priv->session = g_object_ref (session);
 
        return d;
 }
@@ -345,14 +360,14 @@ camel_filter_driver_set_default_folder (CamelFilterDriver *d, CamelFolder *def)
 
        if (p->defaultfolder) {
                camel_folder_thaw (p->defaultfolder);
-               camel_object_unref (p->defaultfolder);
+               g_object_unref (p->defaultfolder);
        }
 
        p->defaultfolder = def;
 
        if (p->defaultfolder) {
                camel_folder_freeze (p->defaultfolder);
-               camel_object_ref (p->defaultfolder);
+               g_object_ref (p->defaultfolder);
        }
 }
 
@@ -795,34 +810,34 @@ pipe_to_system (struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFi
 
        stream = camel_stream_fs_new_with_fd (pipe_to_child);
        if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (p->message), stream) == -1) {
-               camel_object_unref (stream);
+               g_object_unref (stream);
                close (pipe_from_child);
                goto wait;
        }
 
        if (camel_stream_flush (stream) == -1) {
-               camel_object_unref (stream);
+               g_object_unref (stream);
                close (pipe_from_child);
                goto wait;
        }
 
-       camel_object_unref (stream);
+       g_object_unref (stream);
 
        stream = camel_stream_fs_new_with_fd (pipe_from_child);
        mem = camel_stream_mem_new ();
        if (camel_stream_write_to_stream (stream, mem) == -1) {
-               camel_object_unref (stream);
-               camel_object_unref (mem);
+               g_object_unref (stream);
+               g_object_unref (mem);
                goto wait;
        }
 
-       camel_object_unref (stream);
+       g_object_unref (stream);
        camel_stream_reset (mem);
 
        parser = camel_mime_parser_new ();
        camel_mime_parser_init_with_stream (parser, mem);
        camel_mime_parser_scan_from (parser, FALSE);
-       camel_object_unref (mem);
+       g_object_unref (mem);
 
        message = camel_mime_message_new ();
        if (camel_mime_part_construct_from_parser ((CamelMimePart *) message, parser) == -1) {
@@ -831,15 +846,15 @@ pipe_to_system (struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFi
                        _("Invalid message stream received from %s: %s"),
                        argv[0]->value.string,
                        g_strerror (camel_mime_parser_errno (parser)));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
        } else {
-               camel_object_unref (p->message);
+               g_object_unref (p->message);
                p->message = message;
                p->modified = TRUE;
        }
 
-       camel_object_unref (parser);
+       g_object_unref (parser);
 
  wait:
        context = g_main_context_new ();
@@ -1014,7 +1029,7 @@ close_folder (gpointer key, gpointer value, gpointer data)
        if (folder != FOLDER_INVALID) {
                camel_folder_sync (folder, FALSE, camel_exception_is_set(p->ex)?NULL : p->ex);
                camel_folder_thaw (folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        }
 
        report_status(driver, CAMEL_FILTER_STATUS_PROGRESS, g_hash_table_size(p->folders)* 100 / p->closed, _("Syncing folders"));
@@ -1252,7 +1267,7 @@ camel_filter_driver_filter_mbox (CamelFilterDriver *driver,
                if (camel_mime_part_construct_from_parser (mime_part, mp) == -1) {
                        camel_exception_set (ex, (errno==EINTR)?CAMEL_EXCEPTION_USER_CANCEL:CAMEL_EXCEPTION_SYSTEM, _("Cannot open message"));
                        report_status (driver, CAMEL_FILTER_STATUS_END, 100, _("Failed on message %d"), i);
-                       camel_object_unref (message);
+                       g_object_unref (message);
                        goto fail;
                }
 
@@ -1268,7 +1283,7 @@ camel_filter_driver_filter_mbox (CamelFilterDriver *driver,
                status = camel_filter_driver_filter_message (
                        driver, message, info, NULL, NULL, source_url,
                        original_source_url ? original_source_url : source_url, ex);
-               camel_object_unref (message);
+               g_object_unref (message);
                if (camel_exception_is_set (ex) || status == -1) {
                        report_status (
                                driver, CAMEL_FILTER_STATUS_END, 100,
@@ -1298,7 +1313,7 @@ fail:
        if (fd != -1)
                close (fd);
        if (mp)
-               camel_object_unref (mp);
+               g_object_unref (mp);
 
        return ret;
 }
@@ -1412,7 +1427,7 @@ get_message_cb (gpointer data, CamelException *ex)
        CamelMimeMessage *message;
 
        if (p->message) {
-               message = camel_object_ref (p->message);
+               message = g_object_ref (p->message);
        } else {
                const gchar *uid;
 
@@ -1478,7 +1493,7 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver,
                struct _camel_header_raw *h;
 
                if (message) {
-                       camel_object_ref (message);
+                       g_object_ref (message);
                } else {
                        message = camel_folder_get_message (source, uid, ex);
                        if (!message)
@@ -1495,7 +1510,7 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver,
                uid = camel_message_info_uid (info);
 
                if (message)
-                       camel_object_ref (message);
+                       g_object_ref (message);
        }
 
        p->ex = ex;
@@ -1605,7 +1620,7 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver,
        }
 
        if (p->message)
-               camel_object_unref (p->message);
+               g_object_unref (p->message);
 
        if (freeinfo)
                camel_message_info_free (info);
@@ -1617,7 +1632,7 @@ camel_filter_driver_filter_message (CamelFilterDriver *driver,
                camel_filter_driver_log (driver, FILTER_LOG_END, NULL);
 
        if (p->message)
-               camel_object_unref (p->message);
+               g_object_unref (p->message);
 
        if (freeinfo)
                camel_message_info_free (info);
index e991f68..53e0aca 100644 (file)
 #include <camel/camel-folder.h>
 #include <camel/camel-uid-cache.h>
 
-#define CAMEL_FILTER_DRIVER_TYPE         (camel_filter_driver_get_type ())
-#define CAMEL_FILTER_DRIVER(obj)         CAMEL_CHECK_CAST (obj, CAMEL_FILTER_DRIVER_TYPE, CamelFilterDriver)
-#define CAMEL_FILTER_DRIVER_CLASS(klass) CAMEL__CHECK_CLASS_CAST (klass, CAMEL_FILTER_DRIVER_TYPE, CamelFilterDriverClass)
-#define CAMEL_IS_FILTER_DRIVER(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_FILTER_DRIVER_TYPE)
+/* Standard GObject macros */
+#define CAMEL_TYPE_FILTER_DRIVER \
+       (camel_filter_driver_get_type ())
+#define CAMEL_FILTER_DRIVER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriver))
+#define CAMEL_FILTER_DRIVER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriverClass)
+#define CAMEL_IS_FILTER_DRIVER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_FILTER_DRIVER))
+#define CAMEL_IS_FILTER_DRIVER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_FILTER_DRIVER))
+#define CAMEL_FILTER_DRIVER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_FILTER_DRIVER, CamelFilterDriverClass))
 
 G_BEGIN_DECLS
 
@@ -71,7 +85,7 @@ typedef void (CamelFilterShellFunc)      (CamelFilterDriver *driver, gint argc,
 typedef void (CamelFilterPlaySoundFunc)  (CamelFilterDriver *driver, const gchar *filename, gpointer data);
 typedef void (CamelFilterSystemBeepFunc) (CamelFilterDriver *driver, gpointer data);
 
-CamelType          camel_filter_driver_get_type (void);
+GType          camel_filter_driver_get_type (void);
 CamelFilterDriver  *camel_filter_driver_new     (struct _CamelSession *);
 
 /* modifiers */
index e92c159..85d7c22 100644 (file)
@@ -594,7 +594,7 @@ run_command (struct _ESExp *f, gint argc, struct _ESExpResult **argv, FilterMess
        camel_data_wrapper_write_to_stream (
                CAMEL_DATA_WRAPPER (message), stream);
        camel_stream_flush (stream);
-       camel_object_unref (stream);
+       g_object_unref (stream);
 
        context = g_main_context_new ();
        child_watch_data.loop = g_main_loop_new (context, FALSE);
@@ -762,13 +762,13 @@ camel_filter_search_match (CamelSession *session,
        e_sexp_unref (sexp);
 
        if (fms.message)
-               camel_object_unref (fms.message);
+               g_object_unref (fms.message);
 
        return retval;
 
  error:
        if (fms.message)
-               camel_object_unref (fms.message);
+               g_object_unref (fms.message);
 
        e_sexp_unref (sexp);
 
index 94c18a6..7483c70 100644 (file)
 #define r(x)
 #define dd(x) if (camel_debug("search")) x
 
+#define CAMEL_FOLDER_SEARCH_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_FOLDER_SEARCH, CamelFolderSearchPrivate))
+
 struct _CamelFolderSearchPrivate {
        CamelException *ex;
 
@@ -65,8 +69,6 @@ struct _CamelFolderSearchPrivate {
        GHashTable *threads_hash;
 };
 
-#define _PRIVATE(o) (((CamelFolderSearch *)(o))->priv)
-
 static ESExpResult *search_not(struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFolderSearch *search);
 
 static ESExpResult *search_header_contains(struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFolderSearch *search);
@@ -95,28 +97,45 @@ static ESExpResult *search_dummy(struct _ESExp *f, gint argc, struct _ESExpResul
 
 static gint read_uid_callback (gpointer  ref, gint ncol, gchar ** cols, gchar **name);
 
-static CamelObjectClass *camel_folder_search_parent;
+G_DEFINE_TYPE (CamelFolderSearch, camel_folder_search, CAMEL_TYPE_OBJECT)
 
 static void
-folder_search_finalize (CamelObject *obj)
+folder_search_dispose (GObject *object)
 {
-       CamelFolderSearch *search = (CamelFolderSearch *)obj;
-       struct _CamelFolderSearchPrivate *p = _PRIVATE(obj);
+       CamelFolderSearch *search = CAMEL_FOLDER_SEARCH (object);
 
-       if (search->sexp)
-               e_sexp_unref(search->sexp);
+       if (search->sexp != NULL) {
+               e_sexp_unref (search->sexp);
+               search->sexp = NULL;
+       }
 
-       g_free(search->last_search);
-       g_free(p);
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_folder_search_parent_class)->dispose (object);
+}
+
+static void
+folder_search_finalize (GObject *object)
+{
+       CamelFolderSearch *search = CAMEL_FOLDER_SEARCH (object);
+
+       g_free (search->last_search);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_folder_search_parent_class)->finalize (object);
 }
 
 static void
 camel_folder_search_class_init (CamelFolderSearchClass *class)
 {
-       camel_folder_search_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
 
-       class->not = search_not;
+       g_type_class_add_private (class, sizeof (CamelFolderSearchPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = folder_search_dispose;
+       object_class->finalize = folder_search_finalize;
 
+       class->not = search_not;
        class->match_all = search_match_all;
        class->match_threads = search_match_threads;
        class->body_contains = search_body_contains;
@@ -141,31 +160,10 @@ camel_folder_search_class_init (CamelFolderSearchClass *class)
 }
 
 static void
-camel_folder_search_init (CamelFolderSearch *obj)
+camel_folder_search_init (CamelFolderSearch *search)
 {
-       struct _CamelFolderSearchPrivate *p;
-
-       p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-
-       obj->sexp = e_sexp_new();
-}
-
-CamelType
-camel_folder_search_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelFolderSearch",
-                                           sizeof (CamelFolderSearch),
-                                           sizeof (CamelFolderSearchClass),
-                                           (CamelObjectClassInitFunc) camel_folder_search_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_folder_search_init,
-                                           (CamelObjectFinalizeFunc) folder_search_finalize);
-       }
-
-       return type;
+       search->priv = CAMEL_FOLDER_SEARCH_GET_PRIVATE (search);
+       search->sexp = e_sexp_new();
 }
 
 static struct {
@@ -220,7 +218,7 @@ camel_folder_search_construct (CamelFolderSearch *search)
                /* c is sure messy sometimes */
                func = *((gpointer *)(((gchar *)class)+builtins[i].offset));
                if (func == NULL && builtins[i].flags&1) {
-                       g_warning("Search class doesn't implement '%s' method: %s", builtins[i].name, camel_type_to_name(CAMEL_OBJECT_GET_CLASS(search)));
+                       g_warning("Search class doesn't implement '%s' method: %s", builtins[i].name, G_OBJECT_TYPE_NAME (search));
                        func = (gpointer)search_dummy;
                }
                if (func != NULL) {
@@ -250,7 +248,7 @@ camel_folder_search_new (void)
 {
        CamelFolderSearch *new;
 
-       new = CAMEL_FOLDER_SEARCH (camel_object_new (camel_folder_search_get_type ()));
+       new = g_object_new (CAMEL_TYPE_FOLDER_SEARCH, NULL);
        camel_folder_search_construct(new);
 
        return new;
@@ -301,10 +299,10 @@ void
 camel_folder_search_set_body_index(CamelFolderSearch *search, CamelIndex *index)
 {
        if (search->body_index)
-               camel_object_unref (search->body_index);
+               g_object_unref (search->body_index);
        search->body_index = index;
        if (index)
-               camel_object_ref (index);
+               g_object_ref (index);
 }
 
 /**
@@ -334,7 +332,7 @@ camel_folder_search_execute_expression (CamelFolderSearch *search,
        GPtrArray *matches;
        gint i;
        GHashTable *results;
-       struct _CamelFolderSearchPrivate *p = _PRIVATE(search);
+       CamelFolderSearchPrivate *p = search->priv;
 
        p->ex = ex;
 
@@ -437,7 +435,7 @@ camel_folder_search_count (CamelFolderSearch *search,
        GHashTable *results;
        guint32 count = 0;
 
-       struct _CamelFolderSearchPrivate *p = _PRIVATE(search);
+       CamelFolderSearchPrivate *p = search->priv;
 
        g_assert(search->folder);
 
@@ -589,7 +587,7 @@ camel_folder_search_search (CamelFolderSearch *search,
        gchar *sql_query, *tmp, *tmp1;
        GHashTable *results;
 
-       struct _CamelFolderSearchPrivate *p = _PRIVATE(search);
+       CamelFolderSearchPrivate *p = search->priv;
 
        g_assert(search->folder);
 
@@ -1136,7 +1134,7 @@ check_header (struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFold
                }
 
                if (message)
-                       camel_object_unref (message);
+                       g_object_unref (message);
        }
        /* TODO: else, find all matches */
 
@@ -1226,7 +1224,7 @@ search_header_regex (struct _ESExp *f, gint argc, struct _ESExpResult **argv, Ca
                } else
                        r->value.boolean = FALSE;
 
-               camel_object_unref (msg);
+               g_object_unref (msg);
        } else {
                r = e_sexp_result_new (f, ESEXP_RES_ARRAY_PTR);
                r->value.ptrarray = g_ptr_array_new();
@@ -1281,7 +1279,7 @@ search_header_full_regex (struct _ESExp *f, gint argc, struct _ESExpResult **arg
                } else
                        r->value.boolean = FALSE;
 
-               camel_object_unref (msg);
+               g_object_unref (msg);
        } else {
                r = e_sexp_result_new (f, ESEXP_RES_ARRAY_PTR);
                r->value.ptrarray = g_ptr_array_new();
@@ -1330,11 +1328,11 @@ match_message_index (CamelIndex *idx,
                                if (nc) {
                                        while (!truth && (name = camel_index_cursor_next(nc)))
                                                truth = strcmp(name, uid) == 0;
-                                       camel_object_unref (nc);
+                                       g_object_unref (nc);
                                }
                        }
                }
-               camel_object_unref (wc);
+               g_object_unref (wc);
        }
 
        return truth;
@@ -1379,12 +1377,12 @@ match_words_index (CamelFolderSearch *search,
                                                                mask = (GPOINTER_TO_INT(g_hash_table_lookup(ht, name))) | (1<<i);
                                                                g_hash_table_insert(ht, (gchar *) camel_pstring_peek(name), GINT_TO_POINTER(mask));
                                                }
-                                               camel_object_unref (nc);
+                                               g_object_unref (nc);
                                        }
                                }
                        }
                }
-               camel_object_unref (wc);
+               g_object_unref (wc);
 
                lambdafoo.uids = result;
                lambdafoo.count = (1<<words->len) - 1;
@@ -1439,7 +1437,7 @@ match_words_1message (CamelDataWrapper *object, struct _camel_search_words *word
                        }
                }
 
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
 
        return truth;
@@ -1460,7 +1458,7 @@ match_words_message (CamelFolder *folder,
        if (msg) {
                mask = 0;
                truth = match_words_1message((CamelDataWrapper *)msg, words, &mask);
-               camel_object_unref (msg);
+               g_object_unref (msg);
        } else
                camel_exception_clear (&x);
 
@@ -1594,7 +1592,7 @@ search_body_regex (struct _ESExp *f, gint argc, struct _ESExpResult **argv, Came
                } else
                        r->value.boolean = FALSE;
 
-               camel_object_unref (msg);
+               g_object_unref (msg);
        } else {
                regex_t pattern;
 
@@ -1616,7 +1614,7 @@ search_body_regex (struct _ESExp *f, gint argc, struct _ESExpResult **argv, Came
                                                g_ptr_array_add (r->value.ptrarray, uid);
                                        }
 
-                                       camel_object_unref (message);
+                                       g_object_unref (message);
                                } else {
                                        camel_exception_clear (&x);
                                }
index 2fb7078..27a5ea0 100644 (file)
 #include <camel/camel-folder.h>
 #include <camel/camel-index.h>
 
-#define CAMEL_FOLDER_SEARCH_TYPE         (camel_folder_search_get_type ())
-#define CAMEL_FOLDER_SEARCH(obj)         CAMEL_CHECK_CAST (obj, camel_folder_search_get_type (), CamelFolderSearch)
-#define CAMEL_FOLDER_SEARCH_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_folder_search_get_type (), CamelFolderSearchClass)
-#define CAMEL_IS_FOLDER_SEARCH(obj)      CAMEL_CHECK_TYPE (obj, camel_folder_search_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_FOLDER_SEARCH \
+       (camel_folder_search_get_type ())
+#define CAMEL_FOLDER_SEARCH(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_FOLDER_SEARCH, CamelFolderSearch))
+#define CAMEL_FOLDER_SEARCH_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_FOLDER_SEARCH, CamelFolderSearchClass))
+#define CAMEL_IS_FOLDER_SEARCH(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_FOLDER_SEARCH))
+#define CAMEL_IS_FOLDER_SEARCH_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_FOLDER_SEARCH))
 #define CAMEL_FOLDER_SEARCH_GET_CLASS(obj) \
-       ((CamelFolderSearchClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_FOLDER_SEARCH, CamelFolderSearchClass))
 
 G_BEGIN_DECLS
 
@@ -136,7 +148,7 @@ struct _CamelFolderSearchClass {
 
 };
 
-CamelType              camel_folder_search_get_type    (void);
+GType          camel_folder_search_get_type    (void);
 CamelFolderSearch      *camel_folder_search_new        (void);
 void camel_folder_search_construct (CamelFolderSearch *search);
 
index aeb38bd..e37583d 100644 (file)
 #include "camel-store.h"
 #include "camel-vee-folder.h"
 #include "camel-mime-part-utils.h"
-#include "camel-win32.h"
+
+#define CAMEL_FOLDER_SUMMARY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryPrivate))
 
 /* Make 5 minutes as default cache drop */
 #define SUMMARY_CACHE_DROP 300 
@@ -107,8 +110,6 @@ extern gint strdup_count, malloc_count, free_count;
 
 #define CAMEL_FOLDER_SUMMARY_VERSION (14)
 
-#define CAMEL_FOLDER_SUMMARY_GET_PRIVATE(o) (((CamelFolderSummary *)(o))->priv)
-
 #define META_SUMMARY_SUFFIX_LEN 5 /* strlen("-meta") */
 
 #define EXTRACT_FIRST_STRING(val) len=strtoul (part, &part, 10); if (*part) part++; val=g_strndup (part, len); part+=len;
@@ -154,126 +155,824 @@ static gchar *next_uid_string(CamelFolderSummary *s);
 static CamelMessageContentInfo * summary_build_content_info(CamelFolderSummary *s, CamelMessageInfo *msginfo, CamelMimeParser *mp);
 static CamelMessageContentInfo * summary_build_content_info_message(CamelFolderSummary *s, CamelMessageInfo *msginfo, CamelMimePart *object);
 
-static void camel_folder_summary_class_init (CamelFolderSummaryClass *class);
-static void camel_folder_summary_init       (CamelFolderSummary *obj);
-static void camel_folder_summary_finalize   (CamelObject *obj);
-
-static CamelObjectClass *camel_folder_summary_parent;
 static CamelMessageInfo * message_info_from_uid (CamelFolderSummary *s, const gchar *uid);
 
+G_DEFINE_TYPE (CamelFolderSummary, camel_folder_summary, CAMEL_TYPE_OBJECT)
+
+static void
+free_o_name(gpointer key, gpointer value, gpointer data)
+{
+       g_object_unref (value);
+       g_free(key);
+}
+
 static void
-camel_folder_summary_init (CamelFolderSummary *s)
+folder_summary_dispose (GObject *object)
 {
-       struct _CamelFolderSummaryPrivate *p;
+       CamelFolderSummaryPrivate *priv;
+
+       priv = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (object);
 
-       p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE(s) = g_malloc0(sizeof(*p));
+       if (priv->filter_index != NULL) {
+               g_object_unref (priv->filter_index);
+               priv->filter_index = NULL;
+       }
 
-       p->filter_charset = g_hash_table_new (camel_strcase_hash, camel_strcase_equal);
+       if (priv->filter_64 != NULL) {
+               g_object_unref (priv->filter_64);
+               priv->filter_64 = NULL;
+       }
 
-       p->flag_cache = g_hash_table_new (g_str_hash, g_str_equal);
+       if (priv->filter_qp != NULL) {
+               g_object_unref (priv->filter_qp);
+               priv->filter_qp = NULL;
+       }
 
-       s->message_info_chunks = NULL;
-       s->content_info_chunks = NULL;
-       p->need_preview = FALSE;
-       p->preview_updates = g_hash_table_new (g_str_hash, g_str_equal);
+       if (priv->filter_uu != NULL) {
+               g_object_unref (priv->filter_uu);
+               priv->filter_uu = NULL;
+       }
 
-       s->version = CAMEL_FOLDER_SUMMARY_VERSION;
-       s->flags = 0;
-       s->time = 0;
-       s->nextuid = 1;
+       if (priv->filter_save != NULL) {
+               g_object_unref (priv->filter_save);
+               priv->filter_save = NULL;
+       }
 
-       s->uids = g_ptr_array_new ();
-       s->loaded_infos = g_hash_table_new (g_str_hash, g_str_equal);
+       if (priv->filter_html != NULL) {
+               g_object_unref (priv->filter_html);
+               priv->filter_html = NULL;
+       }
+
+       if (priv->filter_stream != NULL) {
+               g_object_unref (priv->filter_stream);
+               priv->filter_stream = NULL;
+       }
+
+       if (priv->index != NULL) {
+               g_object_unref (priv->index);
+               priv->index = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_folder_summary_parent_class)->dispose (object);
+}
+
+static void
+folder_summary_finalize (GObject *object)
+{
+       CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (object);
+
+       g_hash_table_destroy (summary->priv->flag_cache);
+       if (summary->timeout_handle)
+               g_source_remove (summary->timeout_handle);
+       /*camel_folder_summary_clear(s);*/
+       g_ptr_array_foreach (summary->uids, (GFunc) camel_pstring_free, NULL);
+       g_ptr_array_free (summary->uids, TRUE);
+       g_hash_table_destroy (summary->loaded_infos);
+
+       g_hash_table_foreach(summary->priv->filter_charset, free_o_name, NULL);
+       g_hash_table_destroy(summary->priv->filter_charset);
+
+       g_free(summary->summary_path);
+
+       /* Freeing memory occupied by meta-summary-header */
+       g_free(summary->meta_summary->path);
+       g_free(summary->meta_summary);
+
+       g_mutex_free(summary->priv->summary_lock);
+       g_mutex_free(summary->priv->io_lock);
+       g_mutex_free(summary->priv->filter_lock);
+       g_mutex_free(summary->priv->alloc_lock);
+       g_mutex_free(summary->priv->ref_lock);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_folder_summary_parent_class)->finalize (object);
+}
+
+static gint
+summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *record)
+{
+       io(printf("Loading header from db \n"));
+
+       s->version = record->version;
+
+       /* We may not worry, as we are setting a new standard here */
+#if 0
+       /* Legacy version check, before version 12 we have no upgrade knowledge */
+       if ((s->version > 0xff) && (s->version & 0xff) < 12) {
+               io(printf ("Summary header version mismatch"));
+               errno = EINVAL;
+               return -1;
+       }
+
+       if (!(s->version < 0x100 && s->version >= 13))
+               io(printf("Loading legacy summary\n"));
+       else
+               io(printf("loading new-format summary\n"));
+#endif
+
+       s->flags = record->flags;
+       s->nextuid = record->nextuid;
+       s->time = record->time;
+       s->saved_count = record->saved_count;
+
+       s->unread_count = record->unread_count;
+       s->deleted_count = record->deleted_count;
+       s->junk_count = record->junk_count;
+       s->visible_count = record->visible_count;
+       s->junk_not_deleted_count = record->jnd_count;
+
+       return 0;
+}
+
+static CamelFIRecord *
+summary_header_to_db (CamelFolderSummary *s,
+                      CamelException *ex)
+{
+       CamelFIRecord * record = g_new0 (CamelFIRecord, 1);
+       CamelDB *db;
+       gchar *table_name;
+
+       /* Though we are going to read, we do this during write, so lets use it that way */
+       db = s->folder->parent_store->cdb_w;
+       table_name = s->folder->full_name;
+
+       io(printf("Savining header to db\n"));
+
+       record->folder_name = table_name;
+
+       /* we always write out the current version */
+       record->version = CAMEL_FOLDER_SUMMARY_VERSION;
+       record->flags  = s->flags;
+       record->nextuid = s->nextuid;
+       record->time = s->time;
+
+       /* FIXME: Ever heard of Constructors and initializing ? */
+       if (camel_db_count_total_message_info (db, table_name, &(record->saved_count), NULL))
+               record->saved_count = 0;
+       if (camel_db_count_junk_message_info (db, table_name, &(record->junk_count), NULL))
+               record->junk_count = 0;
+       if (camel_db_count_deleted_message_info (db, table_name, &(record->deleted_count), NULL))
+               record->deleted_count = 0;
+       if (camel_db_count_unread_message_info (db, table_name, &(record->unread_count), NULL))
+               record->unread_count = 0;
+       if (camel_db_count_visible_message_info (db, table_name, &(record->visible_count), NULL))
+               record->visible_count = 0;
+       if (camel_db_count_junk_not_deleted_message_info (db, table_name, &(record->jnd_count), NULL))
+               record->jnd_count = 0;
+
+       s->unread_count = record->unread_count;
+       s->deleted_count = record->deleted_count;
+       s->junk_count = record->junk_count;
+       s->visible_count = record->visible_count;
+       s->junk_not_deleted_count = record->jnd_count;
+
+       return record;
+}
+
+static CamelMessageInfo *
+message_info_from_db (CamelFolderSummary *s, CamelMIRecord *record)
+{
+       CamelMessageInfoBase *mi;
+       gint i;
+       gint count;
+       gchar *part, *label;
+
+       mi = (CamelMessageInfoBase *)camel_message_info_new(s);
+
+       io(printf("Loading message info from db\n"));
+
+       mi->flags = record->flags;
+       mi->size = record->size;
+       mi->date_sent = record->dsent;
+       mi->date_received = record->dreceived;
+
+       mi->uid = (gchar *) camel_pstring_strdup (record->uid);
+       mi->subject = (gchar *) camel_pstring_add (record->subject, FALSE);
+       mi->from = (gchar *) camel_pstring_add (record->from, FALSE);
+       mi->to = (gchar *) camel_pstring_add (record->to, FALSE);
+       mi->cc = (gchar *) camel_pstring_add (record->cc, FALSE);
+       mi->mlist = (gchar *) camel_pstring_add (record->mlist, FALSE);
+
+       /* Evolution itself doesn't yet use this, so we ignore it (saving some memory) */
+       mi->bodystructure = NULL;
+
+       /* Extract Message id & References */
+       mi->content = NULL;
+       part = record->part;
+       if (part) {
+               EXTRACT_FIRST_DIGIT (mi->message_id.id.part.hi)
+               EXTRACT_DIGIT (mi->message_id.id.part.lo)
+               EXTRACT_DIGIT (count)
+
+               if (count > 0) {
+                       mi->references = g_malloc(sizeof(*mi->references) + ((count-1) * sizeof(mi->references->references[0])));
+                       mi->references->size = count;
+                       for (i=0;i<count;i++) {
+                               EXTRACT_DIGIT (mi->references->references[i].id.part.hi)
+                               EXTRACT_DIGIT (mi->references->references[i].id.part.lo)
+                       }
+               } else
+                       mi->references = NULL;
+
+       }
+
+       /* Extract User flags/labels */
+       part = record->labels;
+       if (part) {
+               label = part;
+               for (i=0;part[i];i++) {
+
+                       if (part[i] == ' ') {
+                               part[i] = 0;
+                               camel_flag_set(&mi->user_flags, label, TRUE);
+                               label = &(part[i+1]);
+                       }
+               }
+               camel_flag_set(&mi->user_flags, label, TRUE);
+       }
+
+       /* Extract User tags */
+       part = record->usertags;
+       EXTRACT_FIRST_DIGIT (count)
+       for (i=0;i<count;i++) {
+               gint len;
+               gchar *name, *value;
+               EXTRACT_STRING (name)
+               EXTRACT_STRING (value)
+               camel_tag_set(&mi->user_tags, name, value);
+               g_free(name);
+               g_free(value);
+       }
+
+       return (CamelMessageInfo *) mi;
+}
+
+static CamelMIRecord *
+message_info_to_db (CamelFolderSummary *s, CamelMessageInfo *info)
+{
+       CamelMIRecord *record = g_new0(CamelMIRecord, 1);
+       CamelMessageInfoBase *mi = (CamelMessageInfoBase *) info;
+       GString *tmp;
+       CamelFlag *flag;
+       CamelTag *tag;
+       gint count, i;
+
+       /* Assume that we dont have to take care of DB Safeness. It will be done while doing the DB transaction */
+       record->uid = (gchar *) camel_pstring_strdup(camel_message_info_uid(mi));
+       record->flags = mi->flags;
+
+       record->read =  ((mi->flags & (CAMEL_MESSAGE_SEEN|CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_JUNK))) ? 1 : 0;
+       record->deleted = mi->flags & CAMEL_MESSAGE_DELETED ? 1 : 0;
+       record->replied = mi->flags & CAMEL_MESSAGE_ANSWERED ? 1 : 0;
+       record->important = mi->flags & CAMEL_MESSAGE_FLAGGED ? 1 : 0;
+       record->junk = mi->flags & CAMEL_MESSAGE_JUNK ? 1 : 0;
+       record->dirty = mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED ? 1 : 0;
+       record->attachment = mi->flags & CAMEL_MESSAGE_ATTACHMENTS ? 1 : 0;
+
+       record->size = mi->size;
+       record->dsent = mi->date_sent;
+       record->dreceived = mi->date_received;
+
+       record->subject = (gchar *) camel_pstring_strdup(camel_message_info_subject (mi));
+       record->from = (gchar *) camel_pstring_strdup(camel_message_info_from (mi));
+       record->to = (gchar *) camel_pstring_strdup(camel_message_info_to (mi));
+       record->cc = (gchar *) camel_pstring_strdup(camel_message_info_cc (mi));
+       record->mlist = (gchar *) camel_pstring_strdup(camel_message_info_mlist (mi));
+
+       record->followup_flag = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "follow-up"));
+       record->followup_completed_on = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "completed-on"));
+       record->followup_due_by = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "due-by"));
+
+       record->bodystructure = mi->bodystructure ? g_strdup (mi->bodystructure) : NULL;
+
+       tmp = g_string_new (NULL);
+       if (mi->references) {
+               g_string_append_printf (tmp, "%lu %lu %lu", (gulong)mi->message_id.id.part.hi, (gulong)mi->message_id.id.part.lo, (gulong)mi->references->size);
+               for (i=0;i<mi->references->size;i++)
+                       g_string_append_printf (tmp, " %lu %lu", (gulong)mi->references->references[i].id.part.hi, (gulong)mi->references->references[i].id.part.lo);
+       } else {
+               g_string_append_printf (tmp, "%lu %lu %lu", (gulong)mi->message_id.id.part.hi, (gulong)mi->message_id.id.part.lo, (gulong) 0);
+       }
+       record->part = tmp->str;
+       g_string_free (tmp, FALSE);
 
-       p->summary_lock = g_mutex_new();
-       p->io_lock = g_mutex_new();
-       p->filter_lock = g_mutex_new();
-       p->alloc_lock = g_mutex_new();
-       p->ref_lock = g_mutex_new();
+       tmp = g_string_new (NULL);
+       flag = mi->user_flags;
+       while (flag) {
+               g_string_append_printf (tmp, "%s ", flag->name);
+               flag = flag->next;
+       }
+
+       /* Strip off the last space */
+       if (tmp->len)
+               tmp->len--;
+
+       record->labels = tmp->str;
+       g_string_free (tmp, FALSE);
 
-       s->meta_summary = g_malloc0(sizeof(CamelFolderMetaSummary));
+       tmp = g_string_new (NULL);
+       count = camel_tag_list_size(&mi->user_tags);
+       g_string_append_printf (tmp, "%lu", (gulong)count);
+       tag = mi->user_tags;
+       while (tag) {
+               /* FIXME: Should we handle empty tags? Can it be empty? If it potential crasher ahead*/
+               g_string_append_printf (tmp, " %lu-%s %lu-%s", (gulong)strlen(tag->name), tag->name, (gulong)strlen(tag->value), tag->value);
+               tag = tag->next;
+       }
+       record->usertags = tmp->str;
+       g_string_free (tmp, FALSE);
+
+       return record;
+}
+
+static CamelMessageContentInfo *
+content_info_from_db(CamelFolderSummary *s, CamelMIRecord *record)
+{
+       CamelMessageContentInfo *ci;
+       gchar *type, *subtype;
+       guint32 count, i;
+       CamelContentType *ct;
+       gchar *part = record->cinfo;
+       gint len;
+
+       io(printf("Loading content info from db\n"));
+
+       if (!part)
+               return NULL;
+
+       ci = camel_folder_summary_content_info_new(s);
+       if (*part == ' ') part++; /* Move off the space in the record*/
+
+       EXTRACT_FIRST_STRING (type)
+       EXTRACT_STRING (subtype)
+       ct = camel_content_type_new(type, subtype);
+       g_free(type);           /* can this be removed? */
+       g_free(subtype);
+       EXTRACT_DIGIT (count)
+
+       for (i = 0; i < count; i++) {
+               gchar *name, *value;
+               EXTRACT_STRING (name)
+               EXTRACT_STRING (value)
+
+               camel_content_type_set_param(ct, name, value);
+               /* TODO: do this so we dont have to double alloc/free */
+               g_free(name);
+               g_free(value);
+       }
+       ci->type = ct;
+
+       /* FIXME[disk-summary] move all these to camel pstring */
+       EXTRACT_STRING (ci->id);
+       EXTRACT_STRING (ci->description)
+       EXTRACT_STRING (ci->encoding)
+       EXTRACT_DIGIT (ci->size)
+
+       record->cinfo = part; /* Keep moving the cursor in the record */
+
+       ci->childs = NULL;
+
+       return ci;
+}
+
+static gint
+content_info_to_db(CamelFolderSummary *s, CamelMessageContentInfo *ci, CamelMIRecord *record)
+{
+       CamelContentType *ct;
+       struct _camel_header_param *hp;
+       GString *str = g_string_new (NULL);
+       gchar *oldr;
+
+       io(printf("Saving content info to db\n"));
+
+       ct = ci->type;
+       if (ct) {
+               if (ct->type)
+                       g_string_append_printf (str, " %d-%s", (gint) strlen (ct->type), ct->type);
+               else
+                       g_string_append_printf (str, " 0-");
+               if (ct->subtype)
+                       g_string_append_printf (str, " %d-%s", (gint) strlen (ct->subtype), ct->subtype);
+               else
+                       g_string_append_printf (str, " 0-");
+               g_string_append_printf (str, " %d", my_list_size((struct _node **)&ct->params));
+               hp = ct->params;
+               while (hp) {
+                       if (hp->name)
+                               g_string_append_printf (str, " %d-%s", (gint)strlen(hp->name), hp->name);
+                       else
+                               g_string_append_printf (str, " 0-");
+                       if (hp->value)
+                               g_string_append_printf (str, " %d-%s", (gint)strlen (hp->value), hp->value);
+                       else
+                               g_string_append_printf (str, " 0-");
+                       hp = hp->next;
+               }
+       } else {
+               g_string_append_printf (str, " %d-", 0);
+               g_string_append_printf (str, " %d-", 0);
+               g_string_append_printf (str, " %d", 0);
+       }
+
+       if (ci->id)
+               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->id), ci->id);
+       else
+               g_string_append_printf (str, " 0-");
+       if (ci->description)
+               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->description), ci->description);
+       else
+               g_string_append_printf (str, " 0-");
+       if (ci->encoding)
+               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->encoding), ci->encoding);
+       else
+               g_string_append_printf (str, " 0-");
+       g_string_append_printf (str, " %u", ci->size);
+
+       if (record->cinfo) {
+               oldr = record->cinfo;
+               record->cinfo = g_strconcat(oldr, str->str, NULL);
+               g_free (oldr); g_string_free (str, TRUE);
+       } else {
+               record->cinfo = str->str;
+               g_string_free (str, FALSE);
+       }
+
+       return 0;
+}
+
+static gint
+summary_header_save(CamelFolderSummary *s, FILE *out)
+{
+       gint unread = 0, deleted = 0, junk = 0, count, i;
+
+       fseek(out, 0, SEEK_SET);
+
+       io(printf("Savining header\n"));
+
+       /* we always write out the current version */
+       camel_file_util_encode_fixed_int32(out, CAMEL_FOLDER_SUMMARY_VERSION);
+       camel_file_util_encode_fixed_int32(out, s->flags);
+       camel_file_util_encode_fixed_int32(out, s->nextuid);
+       camel_file_util_encode_time_t(out, s->time);
+
+       count = camel_folder_summary_count(s);
+       for (i=0; i<count; i++) {
+               CamelMessageInfo *info = camel_folder_summary_index(s, i);
+               guint32 flags;
+
+               if (info == NULL)
+                       continue;
+
+               flags = camel_message_info_flags(info);
+               if ((flags & CAMEL_MESSAGE_SEEN) == 0)
+                       unread++;
+               if ((flags & CAMEL_MESSAGE_DELETED) != 0)
+                       deleted++;
+               if ((flags & CAMEL_MESSAGE_JUNK) != 0)
+                       junk++;
+
+               camel_message_info_free(info);
+       }
+
+       camel_file_util_encode_fixed_int32(out, count);
+       camel_file_util_encode_fixed_int32(out, unread);
+       camel_file_util_encode_fixed_int32(out, deleted);
+
+       return camel_file_util_encode_fixed_int32(out, junk);
+}
+
+static CamelMessageInfo *
+message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
+{
+       CamelMessageInfoBase *to, *from = (CamelMessageInfoBase *)mi;
+       CamelFlag *flag;
+       CamelTag *tag;
+
+       to = (CamelMessageInfoBase *)camel_message_info_new(s);
+
+       to->flags = from->flags;
+       to->size = from->size;
+       to->date_sent = from->date_sent;
+       to->date_received = from->date_received;
+       to->refcount = 1;
+
+       /* NB: We don't clone the uid */
+
+       to->subject = camel_pstring_strdup(from->subject);
+       to->from = camel_pstring_strdup(from->from);
+       to->to = camel_pstring_strdup(from->to);
+       to->cc = camel_pstring_strdup(from->cc);
+       to->mlist = camel_pstring_strdup(from->mlist);
+       memcpy(&to->message_id, &from->message_id, sizeof(to->message_id));
+       to->preview = g_strdup (from->preview);
+       if (from->references) {
+               gint len = sizeof(*from->references) + ((from->references->size-1) * sizeof(from->references->references[0]));
+
+               to->references = g_malloc(len);
+               memcpy(to->references, from->references, len);
+       }
+
+       flag = from->user_flags;
+       while (flag) {
+               camel_flag_set(&to->user_flags, flag->name, TRUE);
+               flag = flag->next;
+       }
+
+       tag = from->user_tags;
+       while (tag) {
+               camel_tag_set(&to->user_tags, tag->name, tag->value);
+               tag = tag->next;
+       }
+
+       if (from->content) {
+               /* FIXME: copy content-infos */
+       }
+
+       return (CamelMessageInfo *)to;
+}
+
+static gconstpointer
+info_ptr(const CamelMessageInfo *mi, gint id)
+{
+       switch (id) {
+               case CAMEL_MESSAGE_INFO_SUBJECT:
+                       return ((const CamelMessageInfoBase *)mi)->subject;
+               case CAMEL_MESSAGE_INFO_FROM:
+                       return ((const CamelMessageInfoBase *)mi)->from;
+               case CAMEL_MESSAGE_INFO_TO:
+                       return ((const CamelMessageInfoBase *)mi)->to;
+               case CAMEL_MESSAGE_INFO_CC:
+                       return ((const CamelMessageInfoBase *)mi)->cc;
+               case CAMEL_MESSAGE_INFO_MLIST:
+                       return ((const CamelMessageInfoBase *)mi)->mlist;
+               case CAMEL_MESSAGE_INFO_MESSAGE_ID:
+                       return &((const CamelMessageInfoBase *)mi)->message_id;
+               case CAMEL_MESSAGE_INFO_REFERENCES:
+                       return ((const CamelMessageInfoBase *)mi)->references;
+               case CAMEL_MESSAGE_INFO_USER_FLAGS:
+                       return ((const CamelMessageInfoBase *)mi)->user_flags;
+               case CAMEL_MESSAGE_INFO_USER_TAGS:
+                       return ((const CamelMessageInfoBase *)mi)->user_tags;
+               case CAMEL_MESSAGE_INFO_HEADERS:
+                       return ((const CamelMessageInfoBase *)mi)->headers;
+               case CAMEL_MESSAGE_INFO_CONTENT:
+                       return ((const CamelMessageInfoBase *)mi)->content;
+               case CAMEL_MESSAGE_INFO_PREVIEW:
+                       return ((const CamelMessageInfoBase *)mi)->preview;
+               default:
+                       g_return_val_if_reached (NULL);
+       }
+}
+
+static guint32
+info_uint32(const CamelMessageInfo *mi, gint id)
+{
+       switch (id) {
+               case CAMEL_MESSAGE_INFO_FLAGS:
+                       return ((const CamelMessageInfoBase *)mi)->flags;
+               case CAMEL_MESSAGE_INFO_SIZE:
+                       return ((const CamelMessageInfoBase *)mi)->size;
+               default:
+                       g_return_val_if_reached (0);
+       }
+}
+
+static time_t
+info_time(const CamelMessageInfo *mi, gint id)
+{
+       switch (id) {
+               case CAMEL_MESSAGE_INFO_DATE_SENT:
+                       return ((const CamelMessageInfoBase *)mi)->date_sent;
+               case CAMEL_MESSAGE_INFO_DATE_RECEIVED:
+                       return ((const CamelMessageInfoBase *)mi)->date_received;
+               default:
+                       g_return_val_if_reached (0);
+       }
+}
+
+static gboolean
+info_user_flag(const CamelMessageInfo *mi, const gchar *id)
+{
+       return camel_flag_get(&((CamelMessageInfoBase *)mi)->user_flags, id);
+}
+
+static const gchar *
+info_user_tag(const CamelMessageInfo *mi, const gchar *id)
+{
+       return camel_tag_get(&((CamelMessageInfoBase *)mi)->user_tags, id);
+}
+
+static gboolean
+info_set_user_flag(CamelMessageInfo *info, const gchar *name, gboolean value)
+{
+       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
+       gint res;
+
+       res = camel_flag_set(&mi->user_flags, name, value);
+
+       /* TODO: check this item is still in the summary first */
+       if (mi->summary && res && mi->summary->folder && mi->uid) {
+               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
+
+               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
+               mi->dirty = TRUE;
+               camel_folder_summary_touch(mi->summary);
+               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
+               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
+               camel_folder_change_info_free(changes);
+       }
+
+       return res;
+}
+
+static gboolean
+info_set_user_tag(CamelMessageInfo *info, const gchar *name, const gchar *value)
+{
+       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
+       gint res;
+
+       res = camel_tag_set(&mi->user_tags, name, value);
+
+       if (mi->summary && res && mi->summary->folder && mi->uid) {
+               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
+
+               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
+               mi->dirty = TRUE;
+               camel_folder_summary_touch(mi->summary);
+               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
+               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
+               camel_folder_change_info_free(changes);
+       }
+
+       return res;
+}
+
+static gboolean
+info_set_flags(CamelMessageInfo *info, guint32 flags, guint32 set)
+{
+       guint32 old;
+       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
+       gint read=0, deleted=0, junk=0;
+       /* TODO: locking? */
+
+       if (flags & CAMEL_MESSAGE_SEEN && ((set & CAMEL_MESSAGE_SEEN) != (mi->flags & CAMEL_MESSAGE_SEEN)))
+       { read = set & CAMEL_MESSAGE_SEEN ? 1 : -1; d(printf("Setting read as %d\n", set & CAMEL_MESSAGE_SEEN ? 1 : 0));}
+
+       if (flags & CAMEL_MESSAGE_DELETED && ((set & CAMEL_MESSAGE_DELETED) != (mi->flags & CAMEL_MESSAGE_DELETED)))
+       { deleted = set & CAMEL_MESSAGE_DELETED ? 1 : -1; d(printf("Setting deleted as %d\n", set & CAMEL_MESSAGE_DELETED ? 1 : 0));}
+
+       if (flags & CAMEL_MESSAGE_JUNK && ((set & CAMEL_MESSAGE_JUNK) != (mi->flags & CAMEL_MESSAGE_JUNK)))
+       { junk = set & CAMEL_MESSAGE_JUNK ? 1 : -1; d(printf("Setting junk as %d\n", set & CAMEL_MESSAGE_JUNK ? 1 : 0));}
+
+       old = mi->flags;
+       mi->flags = (old & ~flags) | (set & flags);
+       if (old != mi->flags) {
+               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
+               mi->dirty = TRUE;
+               if (mi->summary)
+                       camel_folder_summary_touch(mi->summary);
+       }
+
+       if (((old & ~CAMEL_MESSAGE_SYSTEM_MASK) == (mi->flags & ~CAMEL_MESSAGE_SYSTEM_MASK)) && !((set & CAMEL_MESSAGE_JUNK_LEARN) && !(set & CAMEL_MESSAGE_JUNK)))
+               return FALSE;
+
+       if (mi->summary) {
+               if (read && junk == 0 && !(mi->flags & CAMEL_MESSAGE_JUNK))
+                       mi->summary->unread_count -= read;
+               else if (junk > 0)
+                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : 1;
+               else if (junk < 0)
+                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : -1;
+
+               if (deleted)
+                       mi->summary->deleted_count += deleted;
+               if (junk)
+                       mi->summary->junk_count += junk;
+               if (junk && !deleted)
+                       mi->summary->junk_not_deleted_count += junk;
+               else if ((mi->flags & CAMEL_MESSAGE_JUNK) && deleted)
+                       mi->summary->junk_not_deleted_count -= deleted;
+
+               if (((junk && !(mi->flags & CAMEL_MESSAGE_DELETED)))||  (deleted && !(mi->flags & CAMEL_MESSAGE_JUNK)) )
+                       mi->summary->visible_count -= junk ? junk : deleted;
+       }
+       if (mi->uid)
+               g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE(mi->summary)->flag_cache, (gchar *)mi->uid, GUINT_TO_POINTER(mi->flags));
+       if (mi->summary && mi->summary->folder && mi->uid) {
+               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
+
+               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
+               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
+               camel_folder_change_info_free(changes);
+       }
+
+       d(printf("%d %d %d %d %d\n", mi->summary->unread_count, mi->summary->deleted_count, mi->summary->junk_count, mi->summary->junk_not_deleted_count, mi->summary->visible_count));
+       return TRUE;
+}
+
+static void
+camel_folder_summary_class_init (CamelFolderSummaryClass *class)
+{
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelFolderSummaryPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = folder_summary_dispose;
+       object_class->finalize = folder_summary_finalize;
+
+       class->message_info_size = sizeof (CamelMessageInfoBase);
+       class->content_info_size = sizeof (CamelMessageContentInfo);
+
+       class->summary_header_load = summary_header_load;
+       class->summary_header_save = summary_header_save;
+
+       class->summary_header_from_db = summary_header_from_db;
+       class->summary_header_to_db = summary_header_to_db;
+       class->message_info_from_db = message_info_from_db;
+       class->message_info_to_db = message_info_to_db;
+       class->content_info_from_db = content_info_from_db;
+       class->content_info_to_db = content_info_to_db;
+
+       class->message_info_new_from_header  = message_info_new_from_header;
+       class->message_info_new_from_parser = message_info_new_from_parser;
+       class->message_info_new_from_message = message_info_new_from_message;
+       class->message_info_load = message_info_load;
+       class->message_info_save = message_info_save;
+       class->meta_message_info_save = meta_message_info_save;
+       class->message_info_free = message_info_free;
+       class->message_info_clone = message_info_clone;
+       class->message_info_from_uid = message_info_from_uid;
+
+       class->content_info_new_from_header  = content_info_new_from_header;
+       class->content_info_new_from_parser = content_info_new_from_parser;
+       class->content_info_new_from_message = content_info_new_from_message;
+       class->content_info_load = content_info_load;
+       class->content_info_save = content_info_save;
+       class->content_info_free = content_info_free;
+
+       class->next_uid_string = next_uid_string;
+
+       class->info_ptr = info_ptr;
+       class->info_uint32 = info_uint32;
+       class->info_time = info_time;
+       class->info_user_flag = info_user_flag;
+       class->info_user_tag = info_user_tag;
+
+#if 0
+       class->info_set_string = info_set_string;
+       class->info_set_uint32 = info_set_uint32;
+       class->info_set_time = info_set_time;
+       class->info_set_ptr = info_set_ptr;
+#endif
+       class->info_set_user_flag = info_set_user_flag;
+       class->info_set_user_tag = info_set_user_tag;
 
-       /* Default is 20, any implementor having UIDs that has length
-          exceeding 20, has to override this value
-       */
-       s->meta_summary->uid_len = 20;
-       s->cache_load_time = 0;
-       s->timeout_handle = 0;
-}
+       class->info_set_flags = info_set_flags;
 
-static void free_o_name(gpointer key, gpointer value, gpointer data)
-{
-       camel_object_unref (value);
-       g_free(key);
 }
 
 static void
-camel_folder_summary_finalize (CamelObject *obj)
+camel_folder_summary_init (CamelFolderSummary *summary)
 {
-       struct _CamelFolderSummaryPrivate *p;
-       CamelFolderSummary *s = (CamelFolderSummary *)obj;
-
-       p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE(obj);
-       g_hash_table_destroy (p->flag_cache);
-       if (s->timeout_handle)
-               g_source_remove (s->timeout_handle);
-       /*camel_folder_summary_clear(s);*/
-       g_ptr_array_foreach (s->uids, (GFunc) camel_pstring_free, NULL);
-       g_ptr_array_free (s->uids, TRUE);
-       g_hash_table_destroy (s->loaded_infos);
+       summary->priv = CAMEL_FOLDER_SUMMARY_GET_PRIVATE (summary);
 
-       g_hash_table_foreach(p->filter_charset, free_o_name, NULL);
-       g_hash_table_destroy(p->filter_charset);
+       summary->priv->filter_charset = g_hash_table_new (
+               camel_strcase_hash, camel_strcase_equal);
 
-       g_free(s->summary_path);
-
-       if (p->filter_index)
-               camel_object_unref (p->filter_index);
-       if (p->filter_64)
-               camel_object_unref (p->filter_64);
-       if (p->filter_qp)
-               camel_object_unref (p->filter_qp);
-       if (p->filter_uu)
-               camel_object_unref (p->filter_uu);
-       if (p->filter_save)
-               camel_object_unref (p->filter_save);
-       if (p->filter_html)
-               camel_object_unref (p->filter_html);
-
-       if (p->filter_stream)
-               camel_object_unref (p->filter_stream);
-       if (p->index)
-               camel_object_unref (p->index);
+       summary->priv->flag_cache = g_hash_table_new (g_str_hash, g_str_equal);
 
-       /* Freeing memory occupied by meta-summary-header */
-       g_free(s->meta_summary->path);
-       g_free(s->meta_summary);
+       summary->message_info_chunks = NULL;
+       summary->content_info_chunks = NULL;
+       summary->priv->need_preview = FALSE;
+       summary->priv->preview_updates = g_hash_table_new (g_str_hash, g_str_equal);
+#if defined (DOESTRV) || defined (DOEPOOLV)
+       summary->message_info_strings = CAMEL_MESSAGE_INFO_LAST;
+#endif
 
-       g_mutex_free(p->summary_lock);
-       g_mutex_free(p->io_lock);
-       g_mutex_free(p->filter_lock);
-       g_mutex_free(p->alloc_lock);
-       g_mutex_free(p->ref_lock);
+       summary->version = CAMEL_FOLDER_SUMMARY_VERSION;
+       summary->flags = 0;
+       summary->time = 0;
+       summary->nextuid = 1;
 
-       g_free(p);
-}
+       summary->uids = g_ptr_array_new ();
+       summary->loaded_infos = g_hash_table_new (g_str_hash, g_str_equal);
 
-CamelType
-camel_folder_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
+       summary->priv->summary_lock = g_mutex_new();
+       summary->priv->io_lock = g_mutex_new();
+       summary->priv->filter_lock = g_mutex_new();
+       summary->priv->alloc_lock = g_mutex_new();
+       summary->priv->ref_lock = g_mutex_new();
 
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelFolderSummary",
-                                           sizeof (CamelFolderSummary),
-                                           sizeof (CamelFolderSummaryClass),
-                                           (CamelObjectClassInitFunc) camel_folder_summary_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_folder_summary_init,
-                                           (CamelObjectFinalizeFunc) camel_folder_summary_finalize);
-       }
+       summary->meta_summary = g_malloc0(sizeof(CamelFolderMetaSummary));
 
-       return type;
+       /* Default is 20, any implementor having UIDs that has length
+          exceeding 20, has to override this value
+       */
+       summary->meta_summary->uid_len = 20;
+       summary->cache_load_time = 0;
+       summary->timeout_handle = 0;
 }
 
 /**
@@ -287,8 +986,9 @@ camel_folder_summary_get_type (void)
 CamelFolderSummary *
 camel_folder_summary_new (struct _CamelFolder *folder)
 {
-       CamelFolderSummary *new = CAMEL_FOLDER_SUMMARY ( camel_object_new (camel_folder_summary_get_type ()));
+       CamelFolderSummary *new;
 
+       new = g_object_new (CAMEL_TYPE_FOLDER_SUMMARY, NULL);
        new->folder = folder;
 
        return new;
@@ -331,11 +1031,11 @@ camel_folder_summary_set_index(CamelFolderSummary *s, CamelIndex *index)
        struct _CamelFolderSummaryPrivate *p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE(s);
 
        if (p->index)
-               camel_object_unref (p->index);
+               g_object_unref (p->index);
 
        p->index = index;
        if (index)
-               camel_object_ref (index);
+               g_object_ref (index);
 }
 
 /**
@@ -589,7 +1289,9 @@ message_info_from_uid (CamelFolderSummary *s, const gchar *uid)
                data.double_ref = TRUE;
                data.add = FALSE;
 
-               ret = camel_db_read_message_info_record_with_uid (cdb, folder_name, uid, &data, camel_read_mir_callback, &ex);
+               ret = camel_db_read_message_info_record_with_uid (
+                       cdb, folder_name, uid, &data,
+                       camel_read_mir_callback, &ex);
                if (ret != 0) {
                        camel_exception_clear (&ex);
                        return NULL;
@@ -632,11 +1334,18 @@ message_info_from_uid (CamelFolderSummary *s, const gchar *uid)
  * Returns: the summary item, or %NULL if the uid @uid is not available
  **/
 CamelMessageInfo *
-camel_folder_summary_uid (CamelFolderSummary *s, const gchar *uid)
+camel_folder_summary_uid (CamelFolderSummary *summary,
+                          const gchar *uid)
 {
-       if (!s)
-               return NULL;
-       return ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_from_uid(s, uid);
+       CamelFolderSummaryClass *class;
+
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+       g_return_val_if_fail (uid != NULL, NULL);
+
+       class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class->message_info_from_uid != NULL, NULL);
+
+       return class->message_info_from_uid (summary, uid);
 }
 
 /**
@@ -694,9 +1403,16 @@ camel_folder_summary_set_uid(CamelFolderSummary *s, guint32 uid)
  * This string must be freed by the caller.
  **/
 gchar *
-camel_folder_summary_next_uid_string(CamelFolderSummary *s)
+camel_folder_summary_next_uid_string (CamelFolderSummary *summary)
 {
-       return ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->next_uid_string(s);
+       CamelFolderSummaryClass *class;
+
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+
+       class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class->next_uid_string != NULL, NULL);
+
+       return class->next_uid_string (summary);
 }
 
 static CamelMessageContentInfo *
@@ -707,7 +1423,7 @@ perform_content_info_load_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
        CamelMessageContentInfo *ci, *pci;
        gchar *part;
 
-       ci = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_from_db (s, mir);
+       ci = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_from_db (s, mir);
        if (ci == NULL)
                return NULL;
        part = mir->cinfo;
@@ -739,7 +1455,7 @@ perform_content_info_load(CamelFolderSummary *s, FILE *in)
        guint32 count;
        CamelMessageContentInfo *ci, *part;
 
-       ci = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_load(s, in);
+       ci = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_load (s, in);
        if (ci == NULL)
                return NULL;
 
@@ -865,7 +1581,7 @@ remove_cache (CamelSession *session, CamelSessionThreadMsg *msg)
 static void remove_cache_end (CamelSession *session, CamelSessionThreadMsg *msg)
 {
                struct _folder_summary_free_msg *m = (struct _folder_summary_free_msg *)msg;
-               camel_object_unref (m->summary);
+               g_object_unref (m->summary);
 }
 
 static CamelSessionThreadOps remove_timeout_ops = {
@@ -892,7 +1608,7 @@ cfs_try_release_memory (CamelFolderSummary *s)
                return TRUE;
 
        m = camel_session_thread_msg_new(session, &remove_timeout_ops, sizeof(*m));
-       m->summary = camel_object_ref (s);
+       m->summary = g_object_ref (s);
        camel_session_thread_queue(session, &m->msg, 0);
 
        return TRUE;
@@ -1015,7 +1731,8 @@ static CamelSessionThreadOps preview_update_ops = {
  * Since: 2.24
  **/
 gint
-camel_folder_summary_reload_from_db (CamelFolderSummary *s, CamelException *ex)
+camel_folder_summary_reload_from_db (CamelFolderSummary *s,
+                                     CamelException *ex)
 {
        CamelDB *cdb;
        gchar *folder_name;
@@ -1077,7 +1794,9 @@ camel_folder_summary_add_preview (CamelFolderSummary *s, CamelMessageInfo *info)
  * Since: 2.28
  **/
 void
-camel_folder_summary_ensure_infos_loaded (CamelFolderSummary *s, gint at_least, CamelException *ex)
+camel_folder_summary_ensure_infos_loaded (CamelFolderSummary *s,
+                                          gint at_least,
+                                          CamelException *ex)
 {
        guint loaded, known;
 
@@ -1123,7 +1842,8 @@ camel_folder_summary_get_flag_cache (CamelFolderSummary *summary)
  * Since: 2.24
  **/
 gint
-camel_folder_summary_load_from_db (CamelFolderSummary *s, CamelException *ex)
+camel_folder_summary_load_from_db (CamelFolderSummary *s,
+                                   CamelException *ex)
 {
        CamelDB *cdb;
        gchar *folder_name;
@@ -1145,7 +1865,9 @@ camel_folder_summary_load_from_db (CamelFolderSummary *s, CamelException *ex)
 
        camel_exception_init (&ex2);
 
-       ret = camel_db_get_folder_uids_flags (cdb, folder_name, s->sort_by, s->collate, s->uids, p->flag_cache, &ex2);
+       ret = camel_db_get_folder_uids_flags (
+               cdb, folder_name, s->sort_by, s->collate,
+               s->uids, p->flag_cache, &ex2);
 
        if (camel_exception_is_set (&ex2) && camel_exception_get_description (&ex2) &&
            strstr (camel_exception_get_description (&ex2), "no such table") != NULL) {
@@ -1252,7 +1974,7 @@ camel_read_mir_callback (gpointer  ref, gint ncol, gchar ** cols, gchar ** name)
        }
        camel_folder_summary_unlock (s, CFS_SUMMARY_LOCK);
 
-       info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_from_db (s, mir);
+       info = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_from_db (s, mir);
 
        if (info) {
 
@@ -1321,12 +2043,13 @@ camel_folder_summary_load(CamelFolderSummary *s)
                return -1;
 
        camel_folder_summary_lock (s, CFS_IO_LOCK);
-       if ( ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_load(s, in) == -1)
+
+       if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_load (s, in) == -1)
                goto error;
 
        /* now read in each message ... */
        for (i=0;i<s->saved_count;i++) {
-               mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_load(s, in);
+               mi = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_load (s, in);
 
                if (mi == NULL)
                        goto error;
@@ -1398,14 +2121,14 @@ camel_folder_summary_migrate_infos(CamelFolderSummary *s)
        if (in == NULL)
                return -1;
 
-       if ( ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_load(s, in) == -1)
+       if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_load (s, in) == -1)
                goto error;
 
        /* now read in each message ... */
        for (i=0;i<s->saved_count;i++) {
                CamelTag *tag;
 
-               mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_load(s, in);
+               mi = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_load (s, in);
 
                if (mi == NULL)
                        goto error;
@@ -1435,7 +2158,7 @@ camel_folder_summary_migrate_infos(CamelFolderSummary *s)
        if (fclose (in) != 0)
                return -1;
 
-       record = (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_to_db (s, &ex));
+       record = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_to_db (s, NULL);
        if (!record) {
                return -1;
        }
@@ -1476,7 +2199,7 @@ perform_content_info_save_to_db (CamelFolderSummary *s, CamelMessageContentInfo
        CamelMessageContentInfo *part;
        gchar *oldr;
 
-       if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->content_info_to_db (s, ci, record) == -1)
+       if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_to_db (s, ci, record) == -1)
                return -1;
 
        oldr = record->cinfo;
@@ -1500,7 +2223,7 @@ perform_content_info_save(CamelFolderSummary *s, FILE *out, CamelMessageContentI
 {
        CamelMessageContentInfo *part;
 
-       if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->content_info_save (s, out, ci) == -1)
+       if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_save (s, out, ci) == -1)
                return -1;
 
        if (camel_file_util_encode_uint32 (out, my_list_size ((struct _node **)&ci->childs)) == -1)
@@ -1537,7 +2260,7 @@ save_to_db_cb (gpointer key, gpointer value, gpointer data)
        if (!args->migration && !mi->dirty)
                return;
 
-       mir = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_to_db (s, (CamelMessageInfo *)mi);
+       mir = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_to_db (s, (CamelMessageInfo *) mi);
 
        if (mir && s->build_content) {
                if (perform_content_info_save_to_db (s, ((CamelMessageInfoBase *)mi)->content, mir) == -1) {
@@ -1578,7 +2301,9 @@ save_to_db_cb (gpointer key, gpointer value, gpointer data)
 }
 
 static gint
-save_message_infos_to_db (CamelFolderSummary *s, gboolean fresh_mirs, CamelException *ex)
+save_message_infos_to_db (CamelFolderSummary *s,
+                          gboolean fresh_mirs,
+                          CamelException *ex)
 {
        CamelDB *cdb = s->folder->parent_store->cdb_w;
        gchar *folder_name;
@@ -1614,7 +2339,8 @@ msg_save_preview (const gchar *uid, gpointer value, CamelFolder *folder)
  * Since: 2.24
  **/
 gint
-camel_folder_summary_save_to_db (CamelFolderSummary *s, CamelException *ex)
+camel_folder_summary_save_to_db (CamelFolderSummary *s,
+                                 CamelException *ex)
 {
        CamelDB *cdb = s->folder->parent_store->cdb_w;
        CamelFIRecord *record;
@@ -1670,7 +2396,7 @@ camel_folder_summary_save_to_db (CamelFolderSummary *s, CamelException *ex)
 
        camel_db_end_transaction (cdb, ex);
 
-       record = (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_to_db (s, ex));
+       record = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_to_db (s, ex);
        if (!record) {
                s->flags |= CAMEL_SUMMARY_DIRTY;
                return -1;
@@ -1698,7 +2424,8 @@ camel_folder_summary_save_to_db (CamelFolderSummary *s, CamelException *ex)
  * Since: 2.24
  **/
 gint
-camel_folder_summary_header_save_to_db (CamelFolderSummary *s, CamelException *ex)
+camel_folder_summary_header_save_to_db (CamelFolderSummary *s,
+                                        CamelException *ex)
 {
        CamelDB *cdb = s->folder->parent_store->cdb_w;
        CamelFIRecord *record;
@@ -1706,7 +2433,7 @@ camel_folder_summary_header_save_to_db (CamelFolderSummary *s, CamelException *e
 
        d(printf ("\ncamel_folder_summary_header_save_to_db called \n"));
 
-       record = (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_to_db (s, ex));
+       record = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_to_db (s, ex);
        if (!record) {
                return -1;
        }
@@ -1796,7 +2523,7 @@ camel_folder_summary_save(CamelFolderSummary *s)
 
        camel_folder_summary_lock (s, CFS_IO_LOCK);
 
-       if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_save(s, out) == -1)
+       if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_save (s, out) == -1)
                goto exception;
 
        if (summary_meta_header_save(s, out_meta) == -1)
@@ -1808,10 +2535,10 @@ camel_folder_summary_save(CamelFolderSummary *s)
        count = s->messages->len;
        for (i = 0; i < count; i++) {
                mi = s->messages->pdata[i];
-               if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->meta_message_info_save (s, out_meta, out, mi) == -1)
+               if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->meta_message_info_save (s, out_meta, out, mi) == -1)
                        goto exception;
 
-               if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->message_info_save (s, out, mi) == -1)
+               if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_save (s, out, mi) == -1)
                        goto exception;
 
                if (s->build_content) {
@@ -1874,7 +2601,10 @@ exception:
  * Since: 2.24
  **/
 gint
-camel_folder_summary_header_load_from_db (CamelFolderSummary *s, CamelStore *store, const gchar *folder_name, CamelException *ex)
+camel_folder_summary_header_load_from_db (CamelFolderSummary *s,
+                                          CamelStore *store,
+                                          const gchar *folder_name,
+                                          CamelException *ex)
 {
        CamelDB *cdb;
        CamelFIRecord *record;
@@ -1889,7 +2619,7 @@ camel_folder_summary_header_load_from_db (CamelFolderSummary *s, CamelStore *sto
        camel_db_read_folder_info_record (cdb, folder_name, &record, ex);
 
        if (record) {
-               if ( ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_from_db (s, record) == -1)
+               if (CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_from_db (s, record) == -1)
                        ret = -1;
        } else {
                ret = -1;
@@ -1935,8 +2665,10 @@ camel_folder_summary_header_load(CamelFolderSummary *s)
        }
 
        camel_folder_summary_lock (s, CFS_IO_LOCK);
-       ret = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_load(s, in);
+
+       ret = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->summary_header_load (s, in);
        ret = summary_meta_header_load(s, in_meta);
+
        camel_folder_summary_unlock (s, CFS_IO_LOCK);
 
        fclose(in);
@@ -2171,9 +2903,17 @@ camel_folder_summary_add_from_message (CamelFolderSummary *s, CamelMimeMessage *
  * #camel_message_info_free
  **/
 CamelMessageInfo *
-camel_folder_summary_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
+camel_folder_summary_info_new_from_header (CamelFolderSummary *summary,
+                                           struct _camel_header_raw *h)
 {
-       return ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_header(s, h);
+       CamelFolderSummaryClass *class;
+
+       g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), NULL);
+
+       class = CAMEL_FOLDER_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class->message_info_new_from_header != NULL, NULL);
+
+       return class->message_info_new_from_header (summary, h);
 }
 
 /**
@@ -2211,7 +2951,7 @@ camel_folder_summary_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser
 
        start = camel_mime_parser_tell(mp);
        if (camel_mime_parser_step(mp, &buffer, &len) != CAMEL_MIME_PARSER_STATE_EOF) {
-               info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_parser(s, mp);
+               info = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_new_from_parser (s, mp);
 
                camel_mime_parser_unstep(mp);
 
@@ -2227,8 +2967,7 @@ camel_folder_summary_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser
                                p->filter_index = camel_mime_filter_index_new (p->index);
                        camel_index_delete_name(p->index, camel_message_info_uid(info));
                        name = camel_index_add_name(p->index, camel_message_info_uid(info));
-                       camel_mime_filter_index_set_name (
-                               CAMEL_MIME_FILTER_INDEX (p->filter_index), name);
+                       camel_mime_filter_index_set_name(CAMEL_MIME_FILTER_INDEX (p->filter_index), name);
                }
 
                /* always scan the content info, even if we dont save it */
@@ -2236,7 +2975,7 @@ camel_folder_summary_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser
 
                if (name && p->index) {
                        camel_index_write_name(p->index, name);
-                       camel_object_unref (name);
+                       g_object_unref (name);
                        camel_mime_filter_index_set_name (
                                CAMEL_MIME_FILTER_INDEX (p->filter_index), NULL);
                }
@@ -2266,7 +3005,7 @@ camel_folder_summary_info_new_from_message(CamelFolderSummary *s, CamelMimeMessa
        struct _CamelFolderSummaryPrivate *p = CAMEL_FOLDER_SUMMARY_GET_PRIVATE(s);
        CamelIndexName *name = NULL;
 
-       info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_message(s, msg, bodystructure);
+       info = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_new_from_message (s, msg, bodystructure);
 
        /* assign a unique uid, this is slightly 'wrong' as we do not really
         * know if we are going to store this in the summary, but we need it set for indexing */
@@ -2287,7 +3026,7 @@ camel_folder_summary_info_new_from_message(CamelFolderSummary *s, CamelMimeMessa
                        CamelStream *null = camel_stream_null_new();
 
                        p->filter_stream = camel_stream_filter_new (null);
-                       camel_object_unref (null);
+                       g_object_unref (null);
                }
        }
 
@@ -2295,7 +3034,7 @@ camel_folder_summary_info_new_from_message(CamelFolderSummary *s, CamelMimeMessa
 
        if (name) {
                camel_index_write_name(p->index, name);
-               camel_object_unref (name);
+               g_object_unref (name);
                camel_mime_filter_index_set_name (
                        CAMEL_MIME_FILTER_INDEX (p->filter_index), NULL);
        }
@@ -2318,7 +3057,7 @@ camel_folder_summary_content_info_free(CamelFolderSummary *s, CamelMessageConten
        CamelMessageContentInfo *pw, *pn;
 
        pw = ci->childs;
-       ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_free(s, ci);
+       CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_free (s, ci);
        while (pw) {
                pn = pw->next;
                camel_folder_summary_content_info_free(s, pw);
@@ -2854,42 +3593,6 @@ summary_meta_header_load(CamelFolderSummary *s, FILE *in)
 }
 #endif
 
-static gint
-summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *record)
-{
-       io(printf("Loading header from db \n"));
-
-       s->version = record->version;
-
-       /* We may not worry, as we are setting a new standard here */
-#if 0
-       /* Legacy version check, before version 12 we have no upgrade knowledge */
-       if ((s->version > 0xff) && (s->version & 0xff) < 12) {
-               io(printf ("Summary header version mismatch"));
-               errno = EINVAL;
-               return -1;
-       }
-
-       if (!(s->version < 0x100 && s->version >= 13))
-               io(printf("Loading legacy summary\n"));
-       else
-               io(printf("loading new-format summary\n"));
-#endif
-
-       s->flags = record->flags;
-       s->nextuid = record->nextuid;
-       s->time = record->time;
-       s->saved_count = record->saved_count;
-
-       s->unread_count = record->unread_count;
-       s->deleted_count = record->deleted_count;
-       s->junk_count = record->junk_count;
-       s->visible_count = record->visible_count;
-       s->junk_not_deleted_count = record->jnd_count;
-
-       return 0;
-}
-
 static gint
 summary_header_load(CamelFolderSummary *s, FILE *in)
 {
@@ -2935,91 +3638,6 @@ summary_header_load(CamelFolderSummary *s, FILE *in)
        return 0;
 }
 
-static CamelFIRecord *
-summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
-{
-       CamelFIRecord * record = g_new0 (CamelFIRecord, 1);
-       CamelDB *db;
-       gchar *table_name;
-
-       /* Though we are going to read, we do this during write, so lets use it that way */
-       db = s->folder->parent_store->cdb_w;
-       table_name = s->folder->full_name;
-
-       io(printf("Savining header to db\n"));
-
-       record->folder_name = table_name;
-
-       /* we always write out the current version */
-       record->version = CAMEL_FOLDER_SUMMARY_VERSION;
-       record->flags  = s->flags;
-       record->nextuid = s->nextuid;
-       record->time = s->time;
-
-       /* FIXME: Ever heard of Constructors and initializing ? */
-       if (camel_db_count_total_message_info (db, table_name, &(record->saved_count), NULL))
-               record->saved_count = 0;
-       if (camel_db_count_junk_message_info (db, table_name, &(record->junk_count), NULL))
-               record->junk_count = 0;
-       if (camel_db_count_deleted_message_info (db, table_name, &(record->deleted_count), NULL))
-               record->deleted_count = 0;
-       if (camel_db_count_unread_message_info (db, table_name, &(record->unread_count), NULL))
-               record->unread_count = 0;
-       if (camel_db_count_visible_message_info (db, table_name, &(record->visible_count), NULL))
-               record->visible_count = 0;
-       if (camel_db_count_junk_not_deleted_message_info (db, table_name, &(record->jnd_count), NULL))
-               record->jnd_count = 0;
-
-       s->unread_count = record->unread_count;
-       s->deleted_count = record->deleted_count;
-       s->junk_count = record->junk_count;
-       s->visible_count = record->visible_count;
-       s->junk_not_deleted_count = record->jnd_count;
-
-       return record;
-}
-
-static gint
-summary_header_save(CamelFolderSummary *s, FILE *out)
-{
-       gint unread = 0, deleted = 0, junk = 0, count, i;
-
-       fseek(out, 0, SEEK_SET);
-
-       io(printf("Savining header\n"));
-
-       /* we always write out the current version */
-       camel_file_util_encode_fixed_int32(out, CAMEL_FOLDER_SUMMARY_VERSION);
-       camel_file_util_encode_fixed_int32(out, s->flags);
-       camel_file_util_encode_fixed_int32(out, s->nextuid);
-       camel_file_util_encode_time_t(out, s->time);
-
-       count = camel_folder_summary_count(s);
-       for (i=0; i<count; i++) {
-               CamelMessageInfo *info = camel_folder_summary_index(s, i);
-               guint32 flags;
-
-               if (info == NULL)
-                       continue;
-
-               flags = camel_message_info_flags(info);
-               if ((flags & CAMEL_MESSAGE_SEEN) == 0)
-                       unread++;
-               if ((flags & CAMEL_MESSAGE_DELETED) != 0)
-                       deleted++;
-               if ((flags & CAMEL_MESSAGE_JUNK) != 0)
-                       junk++;
-
-               camel_message_info_free(info);
-       }
-
-       camel_file_util_encode_fixed_int32(out, count);
-       camel_file_util_encode_fixed_int32(out, unread);
-       camel_file_util_encode_fixed_int32(out, deleted);
-
-       return camel_file_util_encode_fixed_int32(out, junk);
-}
-
 #if 0
 static gint
 summary_meta_header_save(CamelFolderSummary *s, FILE *out_meta)
@@ -3053,7 +3671,7 @@ message_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
        case CAMEL_MIME_PARSER_STATE_HEADER:
        case CAMEL_MIME_PARSER_STATE_MESSAGE:
        case CAMEL_MIME_PARSER_STATE_MULTIPART:
-               mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_header(s, camel_mime_parser_headers_raw(mp));
+               mi = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->message_info_new_from_header (s, camel_mime_parser_headers_raw (mp));
                break;
        default:
                g_error("Invalid parser state");
@@ -3071,7 +3689,7 @@ content_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
        case CAMEL_MIME_PARSER_STATE_HEADER:
        case CAMEL_MIME_PARSER_STATE_MESSAGE:
        case CAMEL_MIME_PARSER_STATE_MULTIPART:
-               ci = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new_from_header(s, camel_mime_parser_headers_raw(mp));
+               ci = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_new_from_header (s, camel_mime_parser_headers_raw (mp));
                if (ci) {
                        ci->type = camel_mime_parser_content_type(mp);
                        camel_content_type_ref(ci->type);
@@ -3265,98 +3883,19 @@ message_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
                        GChecksum *checksum;
 
                        checksum = g_checksum_new (G_CHECKSUM_MD5);
-                       g_checksum_update (checksum, (guchar *) scan->id, -1);
-                       g_checksum_get_digest (checksum, digest, &length);
-                       g_checksum_free (checksum);
-
-                       memcpy(mi->references->references[count].id.hash, digest, sizeof(mi->message_id.id.hash));
-                       count++;
-                       scan = scan->next;
-               }
-               mi->references->size = count;
-               camel_header_references_list_clear(&refs);
-       }
-
-       return (CamelMessageInfo *)mi;
-}
-
-static CamelMessageInfo *
-message_info_from_db (CamelFolderSummary *s, CamelMIRecord *record)
-{
-       CamelMessageInfoBase *mi;
-       gint i;
-       gint count;
-       gchar *part, *label;
-
-       mi = (CamelMessageInfoBase *)camel_message_info_new(s);
-
-       io(printf("Loading message info from db\n"));
-
-       mi->flags = record->flags;
-       mi->size = record->size;
-       mi->date_sent = record->dsent;
-       mi->date_received = record->dreceived;
-
-       mi->uid = (gchar *) camel_pstring_strdup (record->uid);
-       mi->subject = (gchar *) camel_pstring_add (record->subject, FALSE);
-       mi->from = (gchar *) camel_pstring_add (record->from, FALSE);
-       mi->to = (gchar *) camel_pstring_add (record->to, FALSE);
-       mi->cc = (gchar *) camel_pstring_add (record->cc, FALSE);
-       mi->mlist = (gchar *) camel_pstring_add (record->mlist, FALSE);
-
-       /* Evolution itself doesn't yet use this, so we ignore it (saving some memory) */
-       mi->bodystructure = NULL;
-
-       /* Extract Message id & References */
-       mi->content = NULL;
-       part = record->part;
-       if (part) {
-               EXTRACT_FIRST_DIGIT (mi->message_id.id.part.hi)
-               EXTRACT_DIGIT (mi->message_id.id.part.lo)
-               EXTRACT_DIGIT (count)
-
-               if (count > 0) {
-                       mi->references = g_malloc(sizeof(*mi->references) + ((count-1) * sizeof(mi->references->references[0])));
-                       mi->references->size = count;
-                       for (i=0;i<count;i++) {
-                               EXTRACT_DIGIT (mi->references->references[i].id.part.hi)
-                               EXTRACT_DIGIT (mi->references->references[i].id.part.lo)
-                       }
-               } else
-                       mi->references = NULL;
-
-       }
-
-       /* Extract User flags/labels */
-       part = record->labels;
-       if (part) {
-               label = part;
-               for (i=0;part[i];i++) {
-
-                       if (part[i] == ' ') {
-                               part[i] = 0;
-                               if (*label)
-                                       camel_flag_set (&mi->user_flags, label, TRUE);
-                               label = &(part[i+1]);
-                       }
-               }
-               camel_flag_set(&mi->user_flags, label, TRUE);
-       }
-
-       /* Extract User tags */
-       part = record->usertags;
-       EXTRACT_FIRST_DIGIT (count)
-       for (i=0;i<count;i++) {
-               gint len;
-               gchar *name, *value;
-               EXTRACT_STRING (name)
-               EXTRACT_STRING (value)
-               camel_tag_set(&mi->user_tags, name, value);
-               g_free(name);
-               g_free(value);
+                       g_checksum_update (checksum, (guchar *) scan->id, -1);
+                       g_checksum_get_digest (checksum, digest, &length);
+                       g_checksum_free (checksum);
+
+                       memcpy(mi->references->references[count].id.hash, digest, sizeof(mi->message_id.id.hash));
+                       count++;
+                       scan = scan->next;
+               }
+               mi->references->size = count;
+               camel_header_references_list_clear(&refs);
        }
 
-       return (CamelMessageInfo *) mi;
+       return (CamelMessageInfo *)mi;
 }
 
 static CamelMessageInfo *
@@ -3458,84 +3997,6 @@ meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMe
        return ferror(out);
 }
 
-static CamelMIRecord *
-message_info_to_db (CamelFolderSummary *s, CamelMessageInfo *info)
-{
-       CamelMIRecord *record = g_new0(CamelMIRecord, 1);
-       CamelMessageInfoBase *mi = (CamelMessageInfoBase *) info;
-       GString *tmp;
-       CamelFlag *flag;
-       CamelTag *tag;
-       gint count, i;
-
-       /* Assume that we dont have to take care of DB Safeness. It will be done while doing the DB transaction */
-       record->uid = (gchar *) camel_pstring_strdup(camel_message_info_uid(mi));
-       record->flags = mi->flags;
-
-       record->read =  ((mi->flags & (CAMEL_MESSAGE_SEEN|CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_JUNK))) ? 1 : 0;
-       record->deleted = mi->flags & CAMEL_MESSAGE_DELETED ? 1 : 0;
-       record->replied = mi->flags & CAMEL_MESSAGE_ANSWERED ? 1 : 0;
-       record->important = mi->flags & CAMEL_MESSAGE_FLAGGED ? 1 : 0;
-       record->junk = mi->flags & CAMEL_MESSAGE_JUNK ? 1 : 0;
-       record->dirty = mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED ? 1 : 0;
-       record->attachment = mi->flags & CAMEL_MESSAGE_ATTACHMENTS ? 1 : 0;
-
-       record->size = mi->size;
-       record->dsent = mi->date_sent;
-       record->dreceived = mi->date_received;
-
-       record->subject = (gchar *) camel_pstring_strdup(camel_message_info_subject (mi));
-       record->from = (gchar *) camel_pstring_strdup(camel_message_info_from (mi));
-       record->to = (gchar *) camel_pstring_strdup(camel_message_info_to (mi));
-       record->cc = (gchar *) camel_pstring_strdup(camel_message_info_cc (mi));
-       record->mlist = (gchar *) camel_pstring_strdup(camel_message_info_mlist (mi));
-
-       record->followup_flag = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "follow-up"));
-       record->followup_completed_on = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "completed-on"));
-       record->followup_due_by = (gchar *) camel_pstring_strdup(camel_message_info_user_tag(info, "due-by"));
-
-       record->bodystructure = mi->bodystructure ? g_strdup (mi->bodystructure) : NULL;
-
-       tmp = g_string_new (NULL);
-       if (mi->references) {
-               g_string_append_printf (tmp, "%lu %lu %lu", (gulong)mi->message_id.id.part.hi, (gulong)mi->message_id.id.part.lo, (gulong)mi->references->size);
-               for (i=0;i<mi->references->size;i++)
-                       g_string_append_printf (tmp, " %lu %lu", (gulong)mi->references->references[i].id.part.hi, (gulong)mi->references->references[i].id.part.lo);
-       } else {
-               g_string_append_printf (tmp, "%lu %lu %lu", (gulong)mi->message_id.id.part.hi, (gulong)mi->message_id.id.part.lo, (gulong) 0);
-       }
-       record->part = tmp->str;
-       g_string_free (tmp, FALSE);
-
-       tmp = g_string_new (NULL);
-       flag = mi->user_flags;
-       while (flag) {
-               g_string_append_printf (tmp, "%s ", flag->name);
-               flag = flag->next;
-       }
-
-       /* Strip off the last space */
-       if (tmp->len)
-               tmp->len--;
-
-       record->labels = tmp->str;
-       g_string_free (tmp, FALSE);
-
-       tmp = g_string_new (NULL);
-       count = camel_tag_list_size(&mi->user_tags);
-       g_string_append_printf (tmp, "%lu", (gulong)count);
-       tag = mi->user_tags;
-       while (tag) {
-               /* FIXME: Should we handle empty tags? Can it be empty? If it potential crasher ahead*/
-               g_string_append_printf (tmp, " %lu-%s %lu-%s", (gulong)strlen(tag->name), tag->name, (gulong)strlen(tag->value), tag->value);
-               tag = tag->next;
-       }
-       record->usertags = tmp->str;
-       g_string_free (tmp, FALSE);
-
-       return record;
-}
-
 static gint
 message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
 {
@@ -3641,56 +4102,6 @@ content_info_new_from_header(CamelFolderSummary *s, struct _camel_header_raw *h)
 }
 
 static CamelMessageContentInfo *
-content_info_from_db(CamelFolderSummary *s, CamelMIRecord *record)
-{
-       CamelMessageContentInfo *ci;
-       gchar *type, *subtype;
-       guint32 count, i;
-       CamelContentType *ct;
-       gchar *part = record->cinfo;
-       gint len;
-
-       io(printf("Loading content info from db\n"));
-
-       if (!part)
-               return NULL;
-
-       ci = camel_folder_summary_content_info_new(s);
-       if (*part == ' ') part++; /* Move off the space in the record*/
-
-       EXTRACT_FIRST_STRING (type)
-       EXTRACT_STRING (subtype)
-       ct = camel_content_type_new(type, subtype);
-       g_free(type);           /* can this be removed? */
-       g_free(subtype);
-       EXTRACT_DIGIT (count)
-
-       for (i = 0; i < count; i++) {
-               gchar *name, *value;
-               EXTRACT_STRING (name)
-               EXTRACT_STRING (value)
-
-               camel_content_type_set_param(ct, name, value);
-               /* TODO: do this so we dont have to double alloc/free */
-               g_free(name);
-               g_free(value);
-       }
-       ci->type = ct;
-
-       /* FIXME[disk-summary] move all these to camel pstring */
-       EXTRACT_STRING (ci->id);
-       EXTRACT_STRING (ci->description)
-       EXTRACT_STRING (ci->encoding)
-       EXTRACT_DIGIT (ci->size)
-
-       record->cinfo = part; /* Keep moving the cursor in the record */
-
-       ci->childs = NULL;
-
-       return ci;
-}
-
-static CamelMessageContentInfo *
 content_info_load(CamelFolderSummary *s, FILE *in)
 {
        CamelMessageContentInfo *ci;
@@ -3742,71 +4153,6 @@ content_info_load(CamelFolderSummary *s, FILE *in)
 }
 
 static gint
-content_info_to_db(CamelFolderSummary *s, CamelMessageContentInfo *ci, CamelMIRecord *record)
-{
-       CamelContentType *ct;
-       struct _camel_header_param *hp;
-       GString *str = g_string_new (NULL);
-       gchar *oldr;
-
-       io(printf("Saving content info to db\n"));
-
-       ct = ci->type;
-       if (ct) {
-               if (ct->type)
-                       g_string_append_printf (str, " %d-%s", (gint) strlen (ct->type), ct->type);
-               else
-                       g_string_append_printf (str, " 0-");
-               if (ct->subtype)
-                       g_string_append_printf (str, " %d-%s", (gint) strlen (ct->subtype), ct->subtype);
-               else
-                       g_string_append_printf (str, " 0-");
-               g_string_append_printf (str, " %d", my_list_size((struct _node **)&ct->params));
-               hp = ct->params;
-               while (hp) {
-                       if (hp->name)
-                               g_string_append_printf (str, " %d-%s", (gint)strlen(hp->name), hp->name);
-                       else
-                               g_string_append_printf (str, " 0-");
-                       if (hp->value)
-                               g_string_append_printf (str, " %d-%s", (gint)strlen (hp->value), hp->value);
-                       else
-                               g_string_append_printf (str, " 0-");
-                       hp = hp->next;
-               }
-       } else {
-               g_string_append_printf (str, " %d-", 0);
-               g_string_append_printf (str, " %d-", 0);
-               g_string_append_printf (str, " %d", 0);
-       }
-
-       if (ci->id)
-               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->id), ci->id);
-       else
-               g_string_append_printf (str, " 0-");
-       if (ci->description)
-               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->description), ci->description);
-       else
-               g_string_append_printf (str, " 0-");
-       if (ci->encoding)
-               g_string_append_printf (str, " %d-%s", (gint)strlen (ci->encoding), ci->encoding);
-       else
-               g_string_append_printf (str, " 0-");
-       g_string_append_printf (str, " %u", ci->size);
-
-       if (record->cinfo) {
-               oldr = record->cinfo;
-               record->cinfo = g_strconcat(oldr, str->str, NULL);
-               g_free (oldr); g_string_free (str, TRUE);
-       } else {
-               record->cinfo = str->str;
-               g_string_free (str, FALSE);
-       }
-
-       return 0;
-}
-
-static gint
 content_info_save(CamelFolderSummary *s, FILE *out, CamelMessageContentInfo *ci)
 {
        CamelContentType *ct;
@@ -3884,7 +4230,7 @@ summary_build_content_info(CamelFolderSummary *s, CamelMessageInfo *msginfo, Cam
        state = camel_mime_parser_step(mp, &buffer, &len);
 
        if (s->build_content)
-               info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new_from_parser(s, mp);
+               info = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_new_from_parser (s, mp);
 
        switch (state) {
        case CAMEL_MIME_PARSER_STATE_HEADER:
@@ -3922,22 +4268,22 @@ summary_build_content_info(CamelFolderSummary *s, CamelMessageInfo *msginfo, Cam
                                        if (p->filter_64 == NULL)
                                                p->filter_64 = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
                                        else
-                                               camel_mime_filter_reset((CamelMimeFilter *)p->filter_64);
-                                       enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_64);
+                                               camel_mime_filter_reset(p->filter_64);
+                                       enc_id = camel_mime_parser_filter_add(mp, p->filter_64);
                                } else if (!g_ascii_strcasecmp(encoding, "quoted-printable")) {
                                        d(printf(" decoding quoted-printable\n"));
                                        if (p->filter_qp == NULL)
                                                p->filter_qp = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_QP_DEC);
                                        else
-                                               camel_mime_filter_reset((CamelMimeFilter *)p->filter_qp);
-                                       enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_qp);
+                                               camel_mime_filter_reset(p->filter_qp);
+                                       enc_id = camel_mime_parser_filter_add(mp, p->filter_qp);
                                } else if (!g_ascii_strcasecmp (encoding, "x-uuencode")) {
                                        d(printf(" decoding x-uuencode\n"));
                                        if (p->filter_uu == NULL)
                                                p->filter_uu = camel_mime_filter_basic_new (CAMEL_MIME_FILTER_BASIC_UU_DEC);
                                        else
-                                               camel_mime_filter_reset((CamelMimeFilter *)p->filter_uu);
-                                       enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_uu);
+                                               camel_mime_filter_reset(p->filter_uu);
+                                       enc_id = camel_mime_parser_filter_add(mp, p->filter_uu);
                                } else {
                                        d(printf(" ignoring encoding %s\n", encoding));
                                }
@@ -3958,7 +4304,7 @@ summary_build_content_info(CamelFolderSummary *s, CamelMessageInfo *msginfo, Cam
                                        camel_mime_filter_reset((CamelMimeFilter *)mfc);
                                }
                                if (mfc) {
-                                       chr_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mfc);
+                                       chr_id = camel_mime_parser_filter_add(mp, mfc);
                                } else {
                                        w(g_warning("Cannot convert '%s' to 'UTF-8', message index may be corrupt", charset));
                                }
@@ -3975,7 +4321,7 @@ summary_build_content_info(CamelFolderSummary *s, CamelMessageInfo *msginfo, Cam
                        }
 
                        /* and this filter actually does the indexing */
-                       idx_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_index);
+                       idx_id = camel_mime_parser_filter_add(mp, p->filter_index);
                }
                /* and scan/index everything */
                while (camel_mime_parser_step(mp, &buffer, &len) != CAMEL_MIME_PARSER_STATE_BODY_END)
@@ -4041,7 +4387,7 @@ summary_build_content_info_message(CamelFolderSummary *s, CamelMessageInfo *msgi
        const struct _camel_header_raw *header;
 
        if (s->build_content)
-               info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new_from_message(s, object);
+               info = CAMEL_FOLDER_SUMMARY_GET_CLASS (s)->content_info_new_from_message (s, object);
 
        containee = camel_medium_get_content (CAMEL_MEDIUM(object));
 
@@ -4120,7 +4466,7 @@ summary_build_content_info_message(CamelFolderSummary *s, CamelMessageInfo *msgi
                }
                idx_id = camel_stream_filter_add (
                        CAMEL_STREAM_FILTER (p->filter_stream),
-                       (CamelMimeFilter *)p->filter_index);
+                       p->filter_index);
 
                camel_data_wrapper_decode_to_stream(containee, p->filter_stream);
                camel_stream_flush(p->filter_stream);
@@ -4588,80 +4934,30 @@ camel_message_info_free(gpointer o)
                if (mi->refcount >= 1)
                        mi->refcount--;
                if (mi->refcount > 0) {
-                       camel_folder_summary_unlock (mi->summary, CFS_REF_LOCK);
-                       return;
-               }
-
-               camel_folder_summary_unlock (mi->summary, CFS_REF_LOCK);
-
-               /* FIXME: this is kinda busted, should really be handled by message info free */
-               if (mi->summary->build_content
-                   && ((CamelMessageInfoBase *)mi)->content) {
-                       camel_folder_summary_content_info_free(mi->summary, ((CamelMessageInfoBase *)mi)->content);
-               }
-
-               ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(mi->summary)))->message_info_free(mi->summary, mi);
-       } else {
-               GLOBAL_INFO_LOCK(info);
-               mi->refcount--;
-               if (mi->refcount > 0) {
-                       GLOBAL_INFO_UNLOCK(info);
-                       return;
-               }
-               GLOBAL_INFO_UNLOCK(info);
-
-               message_info_free(NULL, mi);
-       }
-}
-
-static CamelMessageInfo *
-message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
-{
-       CamelMessageInfoBase *to, *from = (CamelMessageInfoBase *)mi;
-       CamelFlag *flag;
-       CamelTag *tag;
-
-       to = (CamelMessageInfoBase *)camel_message_info_new(s);
-
-       to->flags = from->flags;
-       to->size = from->size;
-       to->date_sent = from->date_sent;
-       to->date_received = from->date_received;
-       to->refcount = 1;
-
-       /* NB: We don't clone the uid */
-
-       to->subject = camel_pstring_strdup(from->subject);
-       to->from = camel_pstring_strdup(from->from);
-       to->to = camel_pstring_strdup(from->to);
-       to->cc = camel_pstring_strdup(from->cc);
-       to->mlist = camel_pstring_strdup(from->mlist);
-       memcpy(&to->message_id, &from->message_id, sizeof(to->message_id));
-       to->preview = g_strdup (from->preview);
-       if (from->references) {
-               gint len = sizeof(*from->references) + ((from->references->size-1) * sizeof(from->references->references[0]));
+                       camel_folder_summary_unlock (mi->summary, CFS_REF_LOCK);
+                       return;
+               }
 
-               to->references = g_malloc(len);
-               memcpy(to->references, from->references, len);
-       }
+               camel_folder_summary_unlock (mi->summary, CFS_REF_LOCK);
 
-       flag = from->user_flags;
-       while (flag) {
-               camel_flag_set(&to->user_flags, flag->name, TRUE);
-               flag = flag->next;
-       }
+               /* FIXME: this is kinda busted, should really be handled by message info free */
+               if (mi->summary->build_content
+                   && ((CamelMessageInfoBase *)mi)->content) {
+                       camel_folder_summary_content_info_free(mi->summary, ((CamelMessageInfoBase *)mi)->content);
+               }
 
-       tag = from->user_tags;
-       while (tag) {
-               camel_tag_set(&to->user_tags, tag->name, tag->value);
-               tag = tag->next;
-       }
+               CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->message_info_free (mi->summary, mi);
+       } else {
+               GLOBAL_INFO_LOCK(info);
+               mi->refcount--;
+               if (mi->refcount > 0) {
+                       GLOBAL_INFO_UNLOCK(info);
+                       return;
+               }
+               GLOBAL_INFO_UNLOCK(info);
 
-       if (from->content) {
-               /* FIXME: copy content-infos */
+               message_info_free(NULL, mi);
        }
-
-       return (CamelMessageInfo *)to;
 }
 
 /**
@@ -4678,83 +4974,11 @@ camel_message_info_clone(gconstpointer o)
        const CamelMessageInfo *mi = o;
 
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->message_info_clone(mi->summary, mi);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->message_info_clone (mi->summary, mi);
        else
                return message_info_clone(NULL, mi);
 }
 
-static gconstpointer
-info_ptr(const CamelMessageInfo *mi, gint id)
-{
-       switch (id) {
-       case CAMEL_MESSAGE_INFO_SUBJECT:
-               return ((const CamelMessageInfoBase *)mi)->subject;
-       case CAMEL_MESSAGE_INFO_FROM:
-               return ((const CamelMessageInfoBase *)mi)->from;
-       case CAMEL_MESSAGE_INFO_TO:
-               return ((const CamelMessageInfoBase *)mi)->to;
-       case CAMEL_MESSAGE_INFO_CC:
-               return ((const CamelMessageInfoBase *)mi)->cc;
-       case CAMEL_MESSAGE_INFO_MLIST:
-               return ((const CamelMessageInfoBase *)mi)->mlist;
-       case CAMEL_MESSAGE_INFO_MESSAGE_ID:
-               return &((const CamelMessageInfoBase *)mi)->message_id;
-       case CAMEL_MESSAGE_INFO_REFERENCES:
-               return ((const CamelMessageInfoBase *)mi)->references;
-       case CAMEL_MESSAGE_INFO_USER_FLAGS:
-               return ((const CamelMessageInfoBase *)mi)->user_flags;
-       case CAMEL_MESSAGE_INFO_USER_TAGS:
-               return ((const CamelMessageInfoBase *)mi)->user_tags;
-       case CAMEL_MESSAGE_INFO_HEADERS:
-               return ((const CamelMessageInfoBase *)mi)->headers;
-       case CAMEL_MESSAGE_INFO_CONTENT:
-               return ((const CamelMessageInfoBase *)mi)->content;
-       case CAMEL_MESSAGE_INFO_PREVIEW:
-               return ((const CamelMessageInfoBase *)mi)->preview;
-
-       default:
-               abort();
-       }
-}
-
-static guint32
-info_uint32(const CamelMessageInfo *mi, gint id)
-{
-       switch (id) {
-       case CAMEL_MESSAGE_INFO_FLAGS:
-               return ((const CamelMessageInfoBase *)mi)->flags;
-       case CAMEL_MESSAGE_INFO_SIZE:
-               return ((const CamelMessageInfoBase *)mi)->size;
-       default:
-               abort();
-       }
-}
-
-static time_t
-info_time(const CamelMessageInfo *mi, gint id)
-{
-       switch (id) {
-       case CAMEL_MESSAGE_INFO_DATE_SENT:
-               return ((const CamelMessageInfoBase *)mi)->date_sent;
-       case CAMEL_MESSAGE_INFO_DATE_RECEIVED:
-               return ((const CamelMessageInfoBase *)mi)->date_received;
-       default:
-               abort();
-       }
-}
-
-static gboolean
-info_user_flag(const CamelMessageInfo *mi, const gchar *id)
-{
-       return camel_flag_get(&((CamelMessageInfoBase *)mi)->user_flags, id);
-}
-
-static const gchar *
-info_user_tag(const CamelMessageInfo *mi, const gchar *id)
-{
-       return camel_tag_get(&((CamelMessageInfoBase *)mi)->user_tags, id);
-}
-
 /**
  * camel_message_info_ptr:
  * @mi: a #CamelMessageInfo
@@ -4768,7 +4992,7 @@ gconstpointer
 camel_message_info_ptr(const CamelMessageInfo *mi, gint id)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_ptr(mi, id);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_ptr (mi, id);
        else
                return info_ptr(mi, id);
 }
@@ -4786,7 +5010,7 @@ guint32
 camel_message_info_uint32(const CamelMessageInfo *mi, gint id)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_uint32(mi, id);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_uint32 (mi, id);
        else
                return info_uint32(mi, id);
 }
@@ -4804,7 +5028,7 @@ time_t
 camel_message_info_time(const CamelMessageInfo *mi, gint id)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_time(mi, id);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_time (mi, id);
        else
                return info_time(mi, id);
 }
@@ -4822,7 +5046,7 @@ gboolean
 camel_message_info_user_flag(const CamelMessageInfo *mi, const gchar *id)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_user_flag(mi, id);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_user_flag (mi, id);
        else
                return info_user_flag(mi, id);
 }
@@ -4840,74 +5064,11 @@ const gchar *
 camel_message_info_user_tag(const CamelMessageInfo *mi, const gchar *id)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_user_tag(mi, id);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_user_tag (mi, id);
        else
                return info_user_tag(mi, id);
 }
 
-static gboolean
-info_set_flags(CamelMessageInfo *info, guint32 flags, guint32 set)
-{
-       guint32 old;
-       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
-       gint read=0, deleted=0, junk=0;
-       /* TODO: locking? */
-
-       if (flags & CAMEL_MESSAGE_SEEN && ((set & CAMEL_MESSAGE_SEEN) != (mi->flags & CAMEL_MESSAGE_SEEN)))
-       { read = set & CAMEL_MESSAGE_SEEN ? 1 : -1; d(printf("Setting read as %d\n", set & CAMEL_MESSAGE_SEEN ? 1 : 0));}
-
-       if (flags & CAMEL_MESSAGE_DELETED && ((set & CAMEL_MESSAGE_DELETED) != (mi->flags & CAMEL_MESSAGE_DELETED)))
-       { deleted = set & CAMEL_MESSAGE_DELETED ? 1 : -1; d(printf("Setting deleted as %d\n", set & CAMEL_MESSAGE_DELETED ? 1 : 0));}
-
-       if (flags & CAMEL_MESSAGE_JUNK && ((set & CAMEL_MESSAGE_JUNK) != (mi->flags & CAMEL_MESSAGE_JUNK)))
-       { junk = set & CAMEL_MESSAGE_JUNK ? 1 : -1; d(printf("Setting junk as %d\n", set & CAMEL_MESSAGE_JUNK ? 1 : 0));}
-
-       old = mi->flags;
-       mi->flags = (old & ~flags) | (set & flags);
-       if (old != mi->flags) {
-               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-               mi->dirty = TRUE;
-               if (mi->summary)
-                       camel_folder_summary_touch(mi->summary);
-       }
-
-       if (((old & ~CAMEL_MESSAGE_SYSTEM_MASK) == (mi->flags & ~CAMEL_MESSAGE_SYSTEM_MASK)) && !((set & CAMEL_MESSAGE_JUNK_LEARN) && !(set & CAMEL_MESSAGE_JUNK)))
-               return FALSE;
-
-       if (mi->summary) {
-               if (read && junk == 0 && !(mi->flags & CAMEL_MESSAGE_JUNK))
-                       mi->summary->unread_count -= read;
-               else if (junk > 0)
-                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : 1;
-               else if (junk < 0)
-                       mi->summary->unread_count -= (old & CAMEL_MESSAGE_SEEN) ? 0 : -1;
-
-               if (deleted)
-                       mi->summary->deleted_count += deleted;
-               if (junk)
-                       mi->summary->junk_count += junk;
-               if (junk && !deleted)
-                       mi->summary->junk_not_deleted_count += junk;
-               else if ((mi->flags & CAMEL_MESSAGE_JUNK) && deleted)
-                       mi->summary->junk_not_deleted_count -= deleted;
-
-               if (((junk && !(mi->flags & CAMEL_MESSAGE_DELETED)))||  (deleted && !(mi->flags & CAMEL_MESSAGE_JUNK)) )
-                       mi->summary->visible_count -= junk ? junk : deleted;
-       }
-       if (mi->uid)
-               g_hash_table_replace (CAMEL_FOLDER_SUMMARY_GET_PRIVATE(mi->summary)->flag_cache, (gchar *)mi->uid, GUINT_TO_POINTER(mi->flags));
-       if (mi->summary && mi->summary->folder && mi->uid) {
-               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
-
-               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
-               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
-               camel_folder_change_info_free(changes);
-       }
-
-       d(printf("%d %d %d %d %d\n", mi->summary->unread_count, mi->summary->deleted_count, mi->summary->junk_count, mi->summary->junk_not_deleted_count, mi->summary->visible_count));
-       return TRUE;
-}
-
 /**
  * camel_folder_summary_update_flag_cache:
  *
@@ -4933,34 +5094,11 @@ gboolean
 camel_message_info_set_flags(CamelMessageInfo *mi, guint32 flags, guint32 set)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_flags(mi, flags, set);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_flags (mi, flags, set);
        else
                return info_set_flags(mi, flags, set);
 }
 
-static gboolean
-info_set_user_flag(CamelMessageInfo *info, const gchar *name, gboolean value)
-{
-       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
-       gint res;
-
-       res = camel_flag_set(&mi->user_flags, name, value);
-
-       /* TODO: check this item is still in the summary first */
-       if (mi->summary && res && mi->summary->folder && mi->uid) {
-               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
-
-               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-               mi->dirty = TRUE;
-               camel_folder_summary_touch(mi->summary);
-               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
-               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
-               camel_folder_change_info_free(changes);
-       }
-
-       return res;
-}
-
 /**
  * camel_message_info_set_user_flag:
  * @mi: a #CamelMessageInfo
@@ -4975,33 +5113,11 @@ gboolean
 camel_message_info_set_user_flag(CamelMessageInfo *mi, const gchar *id, gboolean state)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_user_flag(mi, id, state);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_user_flag (mi, id, state);
        else
                return info_set_user_flag(mi, id, state);
 }
 
-static gboolean
-info_set_user_tag(CamelMessageInfo *info, const gchar *name, const gchar *value)
-{
-       CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
-       gint res;
-
-       res = camel_tag_set(&mi->user_tags, name, value);
-
-       if (mi->summary && res && mi->summary->folder && mi->uid) {
-               CamelFolderChangeInfo *changes = camel_folder_change_info_new();
-
-               mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-               mi->dirty = TRUE;
-               camel_folder_summary_touch(mi->summary);
-               camel_folder_change_info_change_uid(changes, camel_message_info_uid(info));
-               camel_object_trigger_event(mi->summary->folder, "folder_changed", changes);
-               camel_folder_change_info_free(changes);
-       }
-
-       return res;
-}
-
 /**
  * camel_message_info_set_user_tag:
  * @mi: a #CamelMessageInfo
@@ -5016,7 +5132,7 @@ gboolean
 camel_message_info_set_user_tag(CamelMessageInfo *mi, const gchar *id, const gchar *val)
 {
        if (mi->summary)
-               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_user_tag(mi, id, val);
+               return CAMEL_FOLDER_SUMMARY_GET_CLASS (mi->summary)->info_set_user_tag (mi, id, val);
        else
                return info_set_user_tag(mi, id, val);
 }
@@ -5068,61 +5184,6 @@ camel_message_info_dump (CamelMessageInfo *mi)
        camel_content_info_dump(((CamelMessageInfoBase *) mi)->content, 0);
 }
 
-static void
-camel_folder_summary_class_init (CamelFolderSummaryClass *class)
-{
-       camel_folder_summary_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-       class->message_info_size = sizeof (CamelMessageInfoBase);
-       class->content_info_size = sizeof (CamelMessageContentInfo);
-
-       class->summary_header_load = summary_header_load;
-       class->summary_header_save = summary_header_save;
-
-       class->summary_header_from_db = summary_header_from_db;
-       class->summary_header_to_db = summary_header_to_db;
-       class->message_info_from_db = message_info_from_db;
-       class->message_info_to_db = message_info_to_db;
-       class->content_info_from_db = content_info_from_db;
-       class->content_info_to_db = content_info_to_db;
-
-       class->message_info_new_from_header  = message_info_new_from_header;
-       class->message_info_new_from_parser = message_info_new_from_parser;
-       class->message_info_new_from_message = message_info_new_from_message;
-       class->message_info_load = message_info_load;
-       class->message_info_save = message_info_save;
-       class->meta_message_info_save = meta_message_info_save;
-       class->message_info_free = message_info_free;
-       class->message_info_clone = message_info_clone;
-       class->message_info_from_uid = message_info_from_uid;
-
-       class->content_info_new_from_header  = content_info_new_from_header;
-       class->content_info_new_from_parser = content_info_new_from_parser;
-       class->content_info_new_from_message = content_info_new_from_message;
-       class->content_info_load = content_info_load;
-       class->content_info_save = content_info_save;
-       class->content_info_free = content_info_free;
-
-       class->next_uid_string = next_uid_string;
-
-       class->info_ptr = info_ptr;
-       class->info_uint32 = info_uint32;
-       class->info_time = info_time;
-       class->info_user_flag = info_user_flag;
-       class->info_user_tag = info_user_tag;
-
-#if 0
-       class->info_set_string = info_set_string;
-       class->info_set_uint32 = info_set_uint32;
-       class->info_set_time = info_set_time;
-       class->info_set_ptr = info_set_ptr;
-#endif
-       class->info_set_user_flag = info_set_user_flag;
-       class->info_set_user_tag = info_set_user_tag;
-
-       class->info_set_flags = info_set_flags;
-
-}
 
 /**
  * camel_folder_summary_set_need_preview:
@@ -5212,33 +5273,32 @@ camel_folder_summary_guess_content_info (CamelMessageInfo *mi, CamelContentType
  *
  * Locks #summary's #lock. Unlock it with camel_folder_summary_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_folder_summary_lock (CamelFolderSummary *summary, CamelFolderSummaryLock lock)
+camel_folder_summary_lock (CamelFolderSummary *summary,
+                           CamelFolderSummaryLock lock)
 {
-       g_return_if_fail (summary != NULL);
        g_return_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary));
-       g_return_if_fail (summary->priv != NULL);
 
        switch (lock) {
-       case CFS_SUMMARY_LOCK:
-               g_mutex_lock (summary->priv->summary_lock);
-               break;
-       case CFS_IO_LOCK:
-               g_mutex_lock (summary->priv->io_lock);
-               break;
-       case CFS_FILTER_LOCK:
-               g_mutex_lock (summary->priv->filter_lock);
-               break;
-       case CFS_ALLOC_LOCK:
-               g_mutex_lock (summary->priv->alloc_lock);
-               break;
-       case CFS_REF_LOCK:
-               g_mutex_lock (summary->priv->ref_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CFS_SUMMARY_LOCK:
+                       g_mutex_lock (summary->priv->summary_lock);
+                       break;
+               case CFS_IO_LOCK:
+                       g_mutex_lock (summary->priv->io_lock);
+                       break;
+               case CFS_FILTER_LOCK:
+                       g_mutex_lock (summary->priv->filter_lock);
+                       break;
+               case CFS_ALLOC_LOCK:
+                       g_mutex_lock (summary->priv->alloc_lock);
+                       break;
+               case CFS_REF_LOCK:
+                       g_mutex_lock (summary->priv->ref_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -5249,32 +5309,31 @@ camel_folder_summary_lock (CamelFolderSummary *summary, CamelFolderSummaryLock l
  *
  * Unlocks #summary's #lock, previously locked with camel_folder_summary_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_folder_summary_unlock (CamelFolderSummary *summary, CamelFolderSummaryLock lock)
+camel_folder_summary_unlock (CamelFolderSummary *summary,
+                             CamelFolderSummaryLock lock)
 {
-       g_return_if_fail (summary != NULL);
        g_return_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary));
-       g_return_if_fail (summary->priv != NULL);
 
        switch (lock) {
-       case CFS_SUMMARY_LOCK:
-               g_mutex_unlock (summary->priv->summary_lock);
-               break;
-       case CFS_IO_LOCK:
-               g_mutex_unlock (summary->priv->io_lock);
-               break;
-       case CFS_FILTER_LOCK:
-               g_mutex_unlock (summary->priv->filter_lock);
-               break;
-       case CFS_ALLOC_LOCK:
-               g_mutex_unlock (summary->priv->alloc_lock);
-               break;
-       case CFS_REF_LOCK:
-               g_mutex_unlock (summary->priv->ref_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CFS_SUMMARY_LOCK:
+                       g_mutex_unlock (summary->priv->summary_lock);
+                       break;
+               case CFS_IO_LOCK:
+                       g_mutex_unlock (summary->priv->io_lock);
+                       break;
+               case CFS_FILTER_LOCK:
+                       g_mutex_unlock (summary->priv->filter_lock);
+                       break;
+               case CFS_ALLOC_LOCK:
+                       g_mutex_unlock (summary->priv->alloc_lock);
+                       break;
+               case CFS_REF_LOCK:
+                       g_mutex_unlock (summary->priv->ref_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 887b345..3441b3a 100644 (file)
 #include <camel/camel-mime-parser.h>
 #include <camel/camel-index.h>
 
-#define CAMEL_FOLDER_SUMMARY_TYPE         camel_folder_summary_get_type ()
-#define CAMEL_FOLDER_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_folder_summary_get_type (), CamelFolderSummary)
-#define CAMEL_FOLDER_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_folder_summary_get_type (), CamelFolderSummaryClass)
-#define CAMEL_IS_FOLDER_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_folder_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_FOLDER_SUMMARY \
+       (camel_folder_summary_get_type ())
+#define CAMEL_FOLDER_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummary))
+#define CAMEL_FOLDER_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryClass))
+#define CAMEL_IS_FOLDER_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_FOLDER_SUMMARY))
+#define CAMEL_IS_FOLDER_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_FOLDER_SUMMARY))
 #define CAMEL_FOLDER_SUMMARY_GET_CLASS(obj) \
-       ((CamelFolderSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -337,7 +349,7 @@ struct _CamelFolderMetaSummary {
        gchar *path;            /* Path to meta-summary-file */
 };
 
-CamelType                       camel_folder_summary_get_type  (void);
+GType                   camel_folder_summary_get_type  (void);
 CamelFolderSummary      *camel_folder_summary_new      (struct _CamelFolder *folder);
 
 /* Deprecated */
index 07c7e5f..2e7e2aa 100644 (file)
@@ -605,7 +605,7 @@ camel_folder_thread_messages_new (CamelFolder *folder, GPtrArray *uids, gboolean
        thread->subject = thread_subject;
        thread->tree = NULL;
        thread->node_chunks = e_memchunk_new(32, sizeof(CamelFolderThreadNode));
-       thread->folder = camel_object_ref (folder);
+       thread->folder = g_object_ref (folder);
 
        fsummary = camel_folder_summary_array (folder->summary);
        thread->summary = summary = g_ptr_array_new();
@@ -710,7 +710,7 @@ camel_folder_thread_messages_unref(CamelFolderThread *thread)
                for (i=0;i<thread->summary->len;i++)
                        camel_folder_free_message_info(thread->folder, thread->summary->pdata[i]);
                g_ptr_array_free(thread->summary, TRUE);
-               camel_object_unref (thread->folder);
+               g_object_unref (thread->folder);
        }
        e_memchunk_destroy(thread->node_chunks);
        g_free(thread);
index 11cffbd..776a6ed 100644 (file)
 #include "camel-vtrash-folder.h"
 #include "camel-string-utils.h"
 
+#define CAMEL_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_FOLDER, CamelFolderPrivate))
+
 #define d(x)
 #define w(x)
 
@@ -55,7 +59,7 @@ struct _CamelFolderPrivate {
        gboolean skip_folder_lock;
 };
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_ABSTRACT_TYPE (CamelFolder, camel_folder, CAMEL_TYPE_OBJECT)
 
 /* Forward Declarations */
 static gboolean folder_changed (CamelObject *object, gpointer event_data);
@@ -103,7 +107,7 @@ folder_transfer_message_to (CamelFolder *source,
        camel_message_info_set_flags (info, CAMEL_MESSAGE_DELETED, 0);
 
        camel_folder_append_message (dest, msg, info, transferred_uid, ex);
-       camel_object_unref (msg);
+       g_object_unref (msg);
 
        if (delete_original && !camel_exception_is_set (ex))
                camel_folder_set_message_flags (source, uid, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN, ~0);
@@ -112,29 +116,47 @@ folder_transfer_message_to (CamelFolder *source,
 }
 
 static void
-folder_finalize (CamelObject *object)
+folder_dispose (GObject *object)
 {
-       CamelFolder *camel_folder = CAMEL_FOLDER (object);
-       struct _CamelFolderPrivate *p = camel_folder->priv;
+       CamelFolder *folder;
 
-       g_free (camel_folder->name);
-       g_free (camel_folder->full_name);
-       g_free (camel_folder->description);
+       folder = CAMEL_FOLDER (object);
 
-       if (camel_folder->parent_store)
-               camel_object_unref (camel_folder->parent_store);
+       if (folder->parent_store != NULL) {
+               g_object_unref (folder->parent_store);
+               folder->parent_store = NULL;
+       }
 
-       if (camel_folder->summary) {
-               camel_folder->summary->folder = NULL;
-               camel_object_unref (camel_folder->summary);
+       if (folder->summary) {
+               folder->summary->folder = NULL;
+               g_object_unref (folder->summary);
+               folder->summary = NULL;
        }
 
-       camel_folder_change_info_free (p->changed_frozen);
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_folder_parent_class)->dispose (object);
+}
+
+static void
+folder_finalize (GObject *object)
+{
+       CamelFolder *folder;
+       CamelFolderPrivate *priv;
 
-       g_static_rec_mutex_free (&p->lock);
-       g_static_mutex_free (&p->change_lock);
+       folder = CAMEL_FOLDER (object);
+       priv = CAMEL_FOLDER_GET_PRIVATE (object);
 
-       g_free (p);
+       g_free (folder->name);
+       g_free (folder->full_name);
+       g_free (folder->description);
+
+       camel_folder_change_info_free (priv->changed_frozen);
+
+       g_static_rec_mutex_free (&priv->lock);
+       g_static_mutex_free (&priv->change_lock);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_folder_parent_class)->finalize (object);
 }
 
 static gint
@@ -281,7 +303,7 @@ folder_getv (CamelObject *object,
                arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
        }
 
-       return parent_class->getv (object, ex, args);
+       return CAMEL_OBJECT_CLASS (camel_folder_parent_class)->getv (object, ex, args);
 }
 
 static void
@@ -307,7 +329,7 @@ folder_free (CamelObject *object,
                g_slist_free (val);
                break;
        default:
-               parent_class->free (object, tag, val);
+               CAMEL_OBJECT_CLASS (camel_folder_parent_class)->free (object, tag, val);
        }
 }
 
@@ -706,9 +728,14 @@ folder_get_quota_info (CamelFolder *folder)
 static void
 camel_folder_class_init (CamelFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
 
-       parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
+       g_type_class_add_private (class, sizeof (CamelFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = folder_dispose;
+       object_class->finalize = folder_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = folder_getv;
@@ -756,7 +783,8 @@ camel_folder_class_init (CamelFolderClass *class)
 static void
 camel_folder_init (CamelFolder *folder)
 {
-       folder->priv = g_malloc0 (sizeof (*folder->priv));
+       folder->priv = CAMEL_FOLDER_GET_PRIVATE (folder);
+
        folder->priv->frozen = 0;
        folder->priv->changed_frozen = camel_folder_change_info_new ();
 
@@ -764,24 +792,6 @@ camel_folder_init (CamelFolder *folder)
        g_static_mutex_init (&folder->priv->change_lock);
 }
 
-CamelType
-camel_folder_get_type (void)
-{
-       static CamelType camel_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_folder_type == CAMEL_INVALID_TYPE)    {
-               camel_folder_type = camel_type_register (CAMEL_TYPE_OBJECT, "CamelFolder",
-                                                        sizeof (CamelFolder),
-                                                        sizeof (CamelFolderClass),
-                                                        (CamelObjectClassInitFunc) camel_folder_class_init,
-                                                        NULL,
-                                                        (CamelObjectInitFunc) camel_folder_init,
-                                                        (CamelObjectFinalizeFunc) folder_finalize );
-       }
-
-       return camel_folder_type;
-}
-
 /**
  * camel_folder_set_lock_async:
  * @folder: a #CamelFolder
@@ -843,7 +853,7 @@ camel_folder_construct (CamelFolder *folder,
 
        folder->parent_store = parent_store;
        if (parent_store)
-               camel_object_ref (parent_store);
+               g_object_ref (parent_store);
 
        folder->name = g_strdup (name);
        folder->full_name = g_strdup (full_name);
@@ -905,7 +915,9 @@ camel_folder_refresh_info (CamelFolder *folder,
        g_return_val_if_fail (class->refresh_info != NULL, FALSE);
 
        camel_folder_lock (folder, CF_REC_LOCK);
+
        success = class->refresh_info (folder, ex);
+
        camel_folder_unlock (folder, CF_REC_LOCK);
 
        return success;
@@ -1096,8 +1108,10 @@ camel_folder_append_message (CamelFolder *folder,
        g_return_val_if_fail (class->append_message != NULL, FALSE);
 
        camel_folder_lock (folder, CF_REC_LOCK);
+
        success = class->append_message (
                folder, message, info, appended_uid, ex);
+
        camel_folder_unlock (folder, CF_REC_LOCK);
 
        return success;
@@ -1481,7 +1495,7 @@ camel_folder_sync_message (CamelFolder *folder,
 
                message = class->get_message (folder, uid, ex);
                if (message != NULL) {
-                       camel_object_unref (message);
+                       g_object_unref (message);
                        success = TRUE;
                }
        }
@@ -2120,7 +2134,7 @@ filter_filter (CamelSession *session, CamelSessionThreadMsg *tmsg)
 
                        if (msg) {
                                camel_junk_plugin_report_junk (csp, msg);
-                               camel_object_unref (msg);
+                               g_object_unref (msg);
                        }
                }
                camel_operation_end (NULL);
@@ -2138,7 +2152,7 @@ filter_filter (CamelSession *session, CamelSessionThreadMsg *tmsg)
 
                        if (msg) {
                                camel_junk_plugin_report_notjunk (csp, msg);
-                               camel_object_unref (msg);
+                               g_object_unref (msg);
                        }
                }
                camel_operation_end (NULL);
@@ -2197,7 +2211,7 @@ filter_free (CamelSession *session, CamelSessionThreadMsg *msg)
        struct _folder_filter_msg *m = (struct _folder_filter_msg *)msg;
 
        if (m->driver)
-               camel_object_unref (m->driver);
+               g_object_unref (m->driver);
        if (m->recents)
                camel_folder_free_deep (m->folder, m->recents);
        if (m->junk)
@@ -2207,7 +2221,7 @@ filter_free (CamelSession *session, CamelSessionThreadMsg *msg)
 
        camel_folder_summary_save_to_db (m->folder->summary, &m->ex);
        camel_folder_thaw (m->folder);
-       camel_object_unref (m->folder);
+       g_object_unref (m->folder);
 }
 
 static CamelSessionThreadOps filter_ops = {
@@ -2302,7 +2316,7 @@ folder_changed (CamelObject *obj, gpointer event_data)
                msg->recents = recents;
                msg->junk = junk;
                msg->notjunk = notjunk;
-               msg->folder = camel_object_ref (folder);
+               msg->folder = g_object_ref (folder);
                camel_folder_freeze (folder);
                /* Copy changes back to changed_frozen list to retain
                 * them while we are filtering */
@@ -2822,24 +2836,24 @@ camel_folder_change_info_free (CamelFolderChangeInfo *info)
  *
  * Locks #folder's #lock. Unlock it with camel_folder_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_folder_lock (CamelFolder *folder, CamelFolderLock lock)
+camel_folder_lock (CamelFolder *folder,
+                   CamelFolderLock lock)
 {
-       g_return_if_fail (folder != NULL);
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
-       g_return_if_fail (folder->priv != NULL);
 
        switch (lock) {
-       case CF_CHANGE_LOCK:
-               g_static_mutex_lock (&folder->priv->change_lock);
-               break;
-       case CF_REC_LOCK:
-               if (folder->priv->skip_folder_lock == FALSE) g_static_rec_mutex_lock (&folder->priv->lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CF_CHANGE_LOCK:
+                       g_static_mutex_lock (&folder->priv->change_lock);
+                       break;
+               case CF_REC_LOCK:
+                       if (folder->priv->skip_folder_lock == FALSE)
+                               g_static_rec_mutex_lock (&folder->priv->lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -2850,23 +2864,23 @@ camel_folder_lock (CamelFolder *folder, CamelFolderLock lock)
  *
  * Unlocks #folder's #lock, previously locked with camel_folder_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_folder_unlock (CamelFolder *folder, CamelFolderLock lock)
+camel_folder_unlock (CamelFolder *folder,
+                     CamelFolderLock lock)
 {
-       g_return_if_fail (folder != NULL);
        g_return_if_fail (CAMEL_IS_FOLDER (folder));
-       g_return_if_fail (folder->priv != NULL);
 
        switch (lock) {
-       case CF_CHANGE_LOCK:
-               g_static_mutex_unlock (&folder->priv->change_lock);
-               break;
-       case CF_REC_LOCK:
-               if (folder->priv->skip_folder_lock == FALSE) g_static_rec_mutex_unlock (&folder->priv->lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CF_CHANGE_LOCK:
+                       g_static_mutex_unlock (&folder->priv->change_lock);
+                       break;
+               case CF_REC_LOCK:
+                       if (folder->priv->skip_folder_lock == FALSE)
+                               g_static_rec_mutex_unlock (&folder->priv->lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 24e40af..7e210ea 100644 (file)
 
 #include <camel/camel-folder-summary.h>
 
-#define CAMEL_FOLDER_TYPE     (camel_folder_get_type ())
-#define CAMEL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_FOLDER_TYPE, CamelFolder))
-#define CAMEL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_FOLDER_TYPE, CamelFolderClass))
-#define CAMEL_IS_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_FOLDER \
+       (camel_folder_get_type ())
+#define CAMEL_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_FOLDER, CamelFolder))
+#define CAMEL_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_FOLDER, CamelFolderClass))
+#define CAMEL_IS_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_FOLDER))
+#define CAMEL_IS_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_FOLDER))
 #define CAMEL_FOLDER_GET_CLASS(obj) \
-       ((CamelFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_FOLDER, CamelFolderClass))
 
 G_BEGIN_DECLS
 
@@ -86,7 +98,7 @@ enum {
        CAMEL_FOLDER_PROPERTIES = CAMEL_FOLDER_ARG_PROPERTIES | CAMEL_ARG_PTR
 };
 
-typedef enum _CamelFolderLock {
+typedef enum {
        CF_CHANGE_LOCK,
        CF_REC_LOCK
 } CamelFolderLock;
@@ -242,7 +254,7 @@ struct _CamelFolderClass {
                                                 CamelException *ex);
 };
 
-CamelType      camel_folder_get_type           (void);
+GType          camel_folder_get_type           (void);
 void           camel_folder_construct          (CamelFolder *folder,
                                                 struct _CamelStore *parent_store,
                                                 const gchar *full_name,
@@ -457,9 +469,10 @@ void               camel_folder_change_info_change_uid
 void           camel_folder_change_info_recent_uid
                                                (CamelFolderChangeInfo *info,
                                                 const gchar *uid);
-
-void           camel_folder_lock               (CamelFolder *folder, CamelFolderLock lock);
-void           camel_folder_unlock             (CamelFolder *folder, CamelFolderLock lock);
+void           camel_folder_lock               (CamelFolder *folder,
+                                                CamelFolderLock lock);
+void           camel_folder_unlock             (CamelFolder *folder,
+                                                CamelFolderLock lock);
 
 G_END_DECLS
 
index 07edc01..0f7cc41 100644 (file)
 static gint logid;
 #endif
 
-#define CAMEL_CIPHER_CONTEXT_GET_CLASS(obj) \
-       ((CamelCipherContextClass *) CAMEL_OBJECT_GET_CLASS (obj))
-
-static CamelCipherContextClass *parent_class = NULL;
+#define CAMEL_GPG_CONTEXT_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_GPG_CONTEXT, CamelGpgContextPrivate))
 
 struct _CamelGpgContextPrivate {
        gboolean always_trust;
 };
 
+enum {
+       PROP_0,
+       PROP_ALWAYS_TRUST
+};
+
+G_DEFINE_TYPE (CamelGpgContext, camel_gpg_context, CAMEL_TYPE_CIPHER_CONTEXT)
+
 static const gchar *
 gpg_hash_to_id (CamelCipherContext *context, CamelCipherHash hash)
 {
@@ -217,7 +223,7 @@ gpg_ctx_new (CamelCipherContext *context)
 
        gpg = g_new (struct _GpgCtx, 1);
        gpg->mode = GPG_CTX_MODE_SIGN;
-       gpg->session = camel_object_ref (session);
+       gpg->session = g_object_ref (session);
        gpg->userid_hint = g_hash_table_new (g_str_hash, g_str_equal);
        gpg->complete = FALSE;
        gpg->seen_eof1 = TRUE;
@@ -278,8 +284,8 @@ gpg_ctx_new (CamelCipherContext *context)
                        fstream = camel_stream_filter_new (stream);
                        camel_stream_filter_add (
                                CAMEL_STREAM_FILTER (fstream), filter);
-                       camel_object_unref (filter);
-                       camel_object_unref (stream);
+                       g_object_unref (filter);
+                       g_object_unref (stream);
 
                        stream = (CamelStream *) fstream;
                }
@@ -346,18 +352,18 @@ gpg_ctx_set_armor (struct _GpgCtx *gpg, gboolean armor)
 static void
 gpg_ctx_set_istream (struct _GpgCtx *gpg, CamelStream *istream)
 {
-       camel_object_ref (istream);
+       g_object_ref (istream);
        if (gpg->istream)
-               camel_object_unref (gpg->istream);
+               g_object_unref (gpg->istream);
        gpg->istream = istream;
 }
 
 static void
 gpg_ctx_set_ostream (struct _GpgCtx *gpg, CamelStream *ostream)
 {
-       camel_object_ref (ostream);
+       g_object_ref (ostream);
        if (gpg->ostream)
-               camel_object_unref (gpg->ostream);
+               g_object_unref (gpg->ostream);
        gpg->ostream = ostream;
        gpg->seen_eof1 = FALSE;
 }
@@ -393,7 +399,7 @@ gpg_ctx_free (struct _GpgCtx *gpg)
                return;
 
        if (gpg->session)
-               camel_object_unref (gpg->session);
+               g_object_unref (gpg->session);
 
        g_hash_table_foreach (gpg->userid_hint, userid_hint_free, NULL);
        g_hash_table_destroy (gpg->userid_hint);
@@ -430,12 +436,12 @@ gpg_ctx_free (struct _GpgCtx *gpg)
        }
 
        if (gpg->istream)
-               camel_object_unref (gpg->istream);
+               g_object_unref (gpg->istream);
 
        if (gpg->ostream)
-               camel_object_unref (gpg->ostream);
+               g_object_unref (gpg->ostream);
 
-       camel_object_unref (gpg->diagnostics);
+       g_object_unref (gpg->diagnostics);
 
        if (gpg->signers)
                g_string_free (gpg->signers, TRUE);
@@ -726,6 +732,7 @@ gpg_ctx_parse_status (struct _GpgCtx *gpg,
 
        if (strncmp ((const gchar *) status, "[GNUPG:] ", 9) != 0) {
                gchar *message;
+
                message = g_locale_to_utf8 (
                        (const gchar *) status, -1, NULL, NULL, NULL);
                camel_exception_setv (
@@ -1372,7 +1379,7 @@ gpg_sign (CamelCipherContext *context,
                        printf("Writing gpg signing data to '%s'\n", name);
                        camel_stream_write_to_stream(istream, out);
                        camel_stream_reset(istream);
-                       camel_object_unref (out);
+                       g_object_unref (out);
                }
                g_free(name);
                camel_debug_end();
@@ -1427,7 +1434,7 @@ gpg_sign (CamelCipherContext *context,
        camel_content_type_unref(ct);
 
        camel_medium_set_content ((CamelMedium *)sigpart, dw);
-       camel_object_unref (dw);
+       g_object_unref (dw);
 
        camel_mime_part_set_description(sigpart, "This is a digitally signed message part");
 
@@ -1442,11 +1449,11 @@ gpg_sign (CamelCipherContext *context,
        mps->signature = sigpart;
        mps->contentraw = istream;
        camel_stream_reset(istream);
-       camel_object_ref (istream);
+       g_object_ref (istream);
 
        camel_medium_set_content ((CamelMedium *)opart, (CamelDataWrapper *)mps);
 fail:
-       camel_object_unref (ostream);
+       g_object_unref (ostream);
 
        if (gpg)
                gpg_ctx_free (gpg);
@@ -1478,7 +1485,7 @@ swrite (CamelMimePart *sigpart)
                        ret = camel_stream_close (ostream);
        }
 
-       camel_object_unref (ostream);
+       g_object_unref (ostream);
 
        if (ret == -1) {
                g_unlink (template);
@@ -1513,7 +1520,7 @@ add_signers (CamelCipherValidity *validity, const GString *signers)
                camel_cipher_validity_add_certinfo (validity, CAMEL_CIPHER_VALIDITY_SIGN, name, email);
        }
 
-       camel_object_unref (address);
+       g_object_unref (address);
 }
 
 static CamelCipherValidity *
@@ -1567,7 +1574,7 @@ gpg_verify (CamelCipherContext *context,
                                ex, CAMEL_EXCEPTION_SYSTEM,
                                _("Cannot verify message signature: "
                                  "Incorrect message format"));
-                       camel_object_unref (istream);
+                       g_object_unref (istream);
                        return NULL;
                }
        } else if (camel_content_type_is(ct, "application", "x-inlinepgp-signed")) {
@@ -1599,7 +1606,7 @@ gpg_verify (CamelCipherContext *context,
                        printf("Writing gpg verify data to '%s'\n", name);
                        camel_stream_write_to_stream(istream, out);
                        camel_stream_reset(istream);
-                       camel_object_unref (out);
+                       g_object_unref (out);
                }
 
                g_free(name);
@@ -1610,7 +1617,7 @@ gpg_verify (CamelCipherContext *context,
                        if (out) {
                                printf("Writing gpg verify signature to '%s'\n", name);
                                camel_data_wrapper_write_to_stream((CamelDataWrapper *)sigpart, out);
-                               camel_object_unref (out);
+                               g_object_unref (out);
                        }
                        g_free(name);
                }
@@ -1637,11 +1644,11 @@ gpg_verify (CamelCipherContext *context,
        filter = camel_stream_filter_new (canon_stream);
        canon = camel_mime_filter_canon_new (CAMEL_MIME_FILTER_CANON_CRLF | CAMEL_MIME_FILTER_CANON_STRIP);
        camel_stream_filter_add (CAMEL_STREAM_FILTER (filter), canon);
-       camel_object_unref (canon);
+       g_object_unref (canon);
 
        camel_stream_write_to_stream (istream, filter);
 
-       camel_object_unref (filter);
+       g_object_unref (filter);
        camel_stream_reset (istream);
 
        camel_stream_reset (canon_stream);
@@ -1702,8 +1709,8 @@ gpg_verify (CamelCipherContext *context,
                g_unlink (sigfile);
                g_free (sigfile);
        }
-       camel_object_unref (istream);
-       camel_object_unref (canon_stream);
+       g_object_unref (istream);
+       g_object_unref (canon_stream);
 
        return validity;
 
@@ -1713,7 +1720,7 @@ gpg_verify (CamelCipherContext *context,
                gpg_ctx_free (gpg);
 
        if (istream)
-               camel_object_unref (istream);
+               g_object_unref (istream);
 
        if (sigfile) {
                g_unlink (sigfile);
@@ -1802,7 +1809,7 @@ gpg_encrypt (CamelCipherContext *context,
        camel_content_type_unref(ct);
 
        camel_medium_set_content ((CamelMedium *)encpart, dw);
-       camel_object_unref (dw);
+       g_object_unref (dw);
 
        camel_mime_part_set_description(encpart, _("This is a digitally encrypted message part"));
 
@@ -1814,9 +1821,9 @@ gpg_encrypt (CamelCipherContext *context,
        dw = camel_data_wrapper_new();
        camel_data_wrapper_set_mime_type(dw, class->encrypt_protocol);
        camel_data_wrapper_construct_from_stream (dw, vstream);
-       camel_object_unref (vstream);
+       g_object_unref (vstream);
        camel_medium_set_content ((CamelMedium *)verpart, dw);
-       camel_object_unref (dw);
+       g_object_unref (dw);
 
        mpe = camel_multipart_encrypted_new();
        ct = camel_content_type_new("multipart", "encrypted");
@@ -1825,19 +1832,19 @@ gpg_encrypt (CamelCipherContext *context,
        camel_content_type_unref(ct);
        camel_multipart_set_boundary((CamelMultipart *)mpe, NULL);
 
-       mpe->decrypted = camel_object_ref (ipart);
+       mpe->decrypted = g_object_ref (ipart);
 
        camel_multipart_add_part((CamelMultipart *)mpe, verpart);
-       camel_object_unref (verpart);
+       g_object_unref (verpart);
        camel_multipart_add_part((CamelMultipart *)mpe, encpart);
-       camel_object_unref (encpart);
+       g_object_unref (encpart);
 
        camel_medium_set_content ((CamelMedium *)opart, (CamelDataWrapper *)mpe);
 fail:
        gpg_ctx_free(gpg);
 fail1:
-       camel_object_unref (istream);
-       camel_object_unref (ostream);
+       g_object_unref (istream);
+       g_object_unref (ostream);
 
        return res;
 }
@@ -1897,7 +1904,7 @@ gpg_decrypt (CamelCipherContext *context,
 
        istream = camel_stream_mem_new();
        camel_data_wrapper_decode_to_stream (content, istream);
-       camel_stream_reset(istream);
+       camel_stream_reset (istream);
 
        ostream = camel_stream_mem_new();
        camel_stream_mem_set_secure((CamelStreamMem *)ostream);
@@ -1932,7 +1939,7 @@ gpg_decrypt (CamelCipherContext *context,
                goto fail;
        }
 
-       camel_stream_reset(ostream);
+       camel_stream_reset (ostream);
        if (camel_content_type_is(ct, "multipart", "encrypted")) {
                CamelDataWrapper *dw;
                CamelStream *null = camel_stream_null_new ();
@@ -1949,7 +1956,7 @@ gpg_decrypt (CamelCipherContext *context,
                        rv = camel_data_wrapper_construct_from_stream (dw, ostream);
                }
 
-               camel_object_unref (null);
+               g_object_unref (null);
        } else {
                /* Inline signed - raw data (may not be a mime part) */
                CamelDataWrapper *dw;
@@ -1957,7 +1964,7 @@ gpg_decrypt (CamelCipherContext *context,
                rv = camel_data_wrapper_construct_from_stream (dw, ostream);
                camel_data_wrapper_set_mime_type(dw, "application/octet-stream");
                camel_medium_set_content ((CamelMedium *)opart, dw);
-               camel_object_unref (dw);
+               g_object_unref (dw);
                /* Set mime/type of this new part to application/octet-stream to force type snooping */
                camel_mime_part_set_content_type(opart, "application/octet-stream");
        }
@@ -1990,8 +1997,8 @@ gpg_decrypt (CamelCipherContext *context,
        }
 
  fail:
-       camel_object_unref (ostream);
-       camel_object_unref (istream);
+       g_object_unref (ostream);
+       g_object_unref (istream);
        gpg_ctx_free (gpg);
 
        return valid;
@@ -2097,17 +2104,51 @@ fail:
 /* ********************************************************************** */
 
 static void
-gpg_context_finalize (CamelObject *object)
+gpg_context_set_property (GObject *object,
+                          guint property_id,
+                          const GValue *value,
+                          GParamSpec *pspec)
 {
-       g_free (CAMEL_GPG_CONTEXT (object)->priv);
+       switch (property_id) {
+               case PROP_ALWAYS_TRUST:
+                       camel_gpg_context_set_always_trust (
+                               CAMEL_GPG_CONTEXT (object),
+                               g_value_get_boolean (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+gpg_context_get_property (GObject *object,
+                          guint property_id,
+                          GValue *value,
+                          GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_ALWAYS_TRUST:
+                       g_value_set_boolean (
+                               value,
+                               camel_gpg_context_get_always_trust (
+                               CAMEL_GPG_CONTEXT (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
 static void
 camel_gpg_context_class_init (CamelGpgContextClass *class)
 {
+       GObjectClass *object_class;
        CamelCipherContextClass *cipher_context_class;
 
-       parent_class = CAMEL_CIPHER_CONTEXT_CLASS (camel_type_get_global_classfuncs (camel_cipher_context_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelGpgContextClass));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = gpg_context_set_property;
+       object_class->get_property = gpg_context_get_property;
 
        cipher_context_class = CAMEL_CIPHER_CONTEXT_CLASS (class);
        cipher_context_class->sign_protocol = "application/pgp-signature";
@@ -2121,31 +2162,23 @@ camel_gpg_context_class_init (CamelGpgContextClass *class)
        cipher_context_class->decrypt = gpg_decrypt;
        cipher_context_class->import_keys = gpg_import_keys;
        cipher_context_class->export_keys = gpg_export_keys;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_ALWAYS_TRUST,
+               g_param_spec_boolean (
+                       "always-trust",
+                       "Always Trust",
+                       NULL,
+                       FALSE,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT));
 }
 
 static void
 camel_gpg_context_init (CamelGpgContext *context)
 {
-       context->priv = g_new0 (CamelGpgContextPrivate, 1);
-}
-
-CamelType
-camel_gpg_context_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_cipher_context_get_type (),
-                                           "CamelGpgContext",
-                                           sizeof (CamelGpgContext),
-                                           sizeof (CamelGpgContextClass),
-                                           (CamelObjectClassInitFunc) camel_gpg_context_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_gpg_context_init,
-                                           (CamelObjectFinalizeFunc) gpg_context_finalize);
-       }
-
-       return type;
+       context->priv = CAMEL_GPG_CONTEXT_GET_PRIVATE (context);
 }
 
 /**
@@ -2159,17 +2192,11 @@ camel_gpg_context_get_type (void)
 CamelCipherContext *
 camel_gpg_context_new (CamelSession *session)
 {
-       CamelCipherContext *cipher;
-       CamelGpgContext *ctx;
-
        g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
 
-       ctx = (CamelGpgContext *) camel_object_new (camel_gpg_context_get_type ());
-
-       cipher = CAMEL_CIPHER_CONTEXT (ctx);
-       camel_cipher_context_construct (CAMEL_CIPHER_CONTEXT (ctx), session);
-
-       return cipher;
+       return g_object_new (
+               CAMEL_TYPE_GPG_CONTEXT,
+               "session", session, NULL);
 }
 
 gboolean
@@ -2195,5 +2222,6 @@ camel_gpg_context_set_always_trust (CamelGpgContext *context,
        g_return_if_fail (CAMEL_IS_GPG_CONTEXT (context));
 
        context->priv->always_trust = always_trust;
-}
 
+       g_object_notify (G_OBJECT (context), "always-trust");
+}
index 8e48786..dc6495b 100644 (file)
 #include <camel/camel-cipher-context.h>
 #include <camel/camel-session.h>
 
-#define CAMEL_GPG_CONTEXT_TYPE     (camel_gpg_context_get_type ())
-#define CAMEL_GPG_CONTEXT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_GPG_CONTEXT_TYPE, CamelGpgContext))
-#define CAMEL_GPG_CONTEXT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_GPG_CONTEXT_TYPE, CamelGpgContextClass))
-#define CAMEL_IS_GPG_CONTEXT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_GPG_CONTEXT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_GPG_CONTEXT \
+       (camel_gpg_context_get_type ())
+#define CAMEL_GPG_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GPG_CONTEXT, CamelGpgContext))
+#define CAMEL_GPG_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GPG_CONTEXT, CamelGpgContextClass))
+#define CAMEL_IS_GPG_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GPG_CONTEXT))
+#define CAMEL_IS_GPG_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GPG_CONTEXT))
+#define CAMEL_GPG_CONTEXT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GPG_CONTEXT, CamelGpgContextClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +64,7 @@ struct _CamelGpgContextClass {
        CamelCipherContextClass parent_class;
 };
 
-CamelType      camel_gpg_context_get_type      (void);
+GType          camel_gpg_context_get_type      (void);
 CamelCipherContext *
                camel_gpg_context_new           (CamelSession *session);
 gboolean       camel_gpg_context_get_always_trust
index b33212b..2504549 100644 (file)
@@ -34,8 +34,6 @@
 /* if defined, must also compile in dump_tag() below somewhere */
 #define d(x)
 
-static CamelObjectClass *camel_html_parser_parent;
-
 /* Parser definitions, see below object code for details */
 
 struct _CamelHTMLParserPrivate {
@@ -60,20 +58,28 @@ static CamelHTMLParserPrivate *tokenize_init(void);
 static void tokenize_free(CamelHTMLParserPrivate *p);
 static gint tokenize_step(CamelHTMLParserPrivate *p, gchar **datap, gint *lenp);
 
+G_DEFINE_TYPE (CamelHTMLParser, camel_html_parser, CAMEL_TYPE_OBJECT)
+
 /* ********************************************************************** */
 
 static void
-html_parser_finalize (CamelObject *o)
+html_parser_finalize (GObject *object)
 {
-       CamelHTMLParser *parser = (CamelHTMLParser *)o;
+       CamelHTMLParser *parser = CAMEL_HTML_PARSER (object);
 
        tokenize_free (parser->priv);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_html_parser_parent_class)->finalize (object);
 }
 
 static void
-camel_html_parser_class_init (CamelHTMLParserClass *klass)
+camel_html_parser_class_init (CamelHTMLParserClass *class)
 {
-       camel_html_parser_parent = CAMEL_OBJECT_CLASS (camel_type_get_global_classfuncs (camel_object_get_type ()));
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = html_parser_finalize;
 
        tokenize_setup();
 }
@@ -84,24 +90,6 @@ camel_html_parser_init (CamelHTMLParser *parser)
        parser->priv = tokenize_init();
 }
 
-CamelType
-camel_html_parser_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelHTMLParser",
-                                           sizeof (CamelHTMLParser),
-                                           sizeof (CamelHTMLParserClass),
-                                           (CamelObjectClassInitFunc) camel_html_parser_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_html_parser_init,
-                                           (CamelObjectFinalizeFunc) html_parser_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_html_parser_new:
  *
@@ -112,7 +100,7 @@ camel_html_parser_get_type (void)
 CamelHTMLParser *
 camel_html_parser_new (void)
 {
-       return CAMEL_HTML_PARSER ( camel_object_new (camel_html_parser_get_type ()));
+       return g_object_new (CAMEL_TYPE_HTML_PARSER, NULL);
 }
 
 void camel_html_parser_set_data(CamelHTMLParser *hp, const gchar *start, gint len, gint last)
index f5c0207..b440b32 100644 (file)
 
 #include <camel/camel-object.h>
 
-#define CAMEL_HTML_PARSER(obj)         CAMEL_CHECK_CAST (obj, camel_html_parser_get_type (), CamelHTMLParser)
-#define CAMEL_HTML_PARSER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_html_parser_get_type (), CamelHTMLParserClass)
-#define CAMEL_IS_HTML_PARSER(obj)      CAMEL_CHECK_TYPE (obj, camel_html_parser_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_HTML_PARSER \
+       (camel_html_parser_get_type ())
+#define CAMEL_HTML_PARSER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_HTML_PARSER, CamelHTMLParser))
+#define CAMEL_HTML_PARSER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_HTML_PARSER, CamelHTMLParserClass))
+#define CAMEL_IS_HTML_PARSER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_HTML_PARSER))
+#define CAMEL_IS_HTML_PARSER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_HTML_PARSER))
+#define CAMEL_HTML_PARSER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_HTML_PARSER, CamelHTMLParserClass))
 
 G_BEGIN_DECLS
 
@@ -71,7 +86,7 @@ struct _CamelHTMLParserClass {
        CamelObjectClass parent_class;
 };
 
-CamelType              camel_html_parser_get_type      (void);
+GType          camel_html_parser_get_type      (void);
 CamelHTMLParser      *camel_html_parser_new    (void);
 
 void camel_html_parser_set_data(CamelHTMLParser *hp, const gchar *start, gint len, gint last);
index 29d1a03..b6a56e5 100644 (file)
@@ -52,7 +52,7 @@
 
 #define d(x)
 
-static CamelStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelHttpStream, camel_http_stream, CAMEL_TYPE_STREAM)
 
 static CamelStream *
 http_connect (CamelHttpStream *http,
@@ -89,7 +89,7 @@ http_connect (CamelHttpStream *http,
 
        ai = camel_getaddrinfo(url->host, serv, &hints, NULL);
        if (ai == NULL) {
-               camel_object_unref (stream);
+               g_object_unref (stream);
                return NULL;
        }
 
@@ -97,7 +97,7 @@ http_connect (CamelHttpStream *http,
 
        if (camel_tcp_stream_connect (tcp_stream, ai) == -1) {
                errsave = errno;
-               camel_object_unref (stream);
+               g_object_unref (stream);
                camel_freeaddrinfo(ai);
                errno = errsave;
                return NULL;
@@ -115,17 +115,17 @@ static void
 http_disconnect (CamelHttpStream *http)
 {
        if (http->raw) {
-               camel_object_unref (http->raw);
+               g_object_unref (http->raw);
                http->raw = NULL;
        }
 
        if (http->read) {
-               camel_object_unref (http->read);
+               g_object_unref (http->read);
                http->read = NULL;
        }
 
        if (http->parser) {
-               camel_object_unref (http->parser);
+               g_object_unref (http->parser);
                http->parser = NULL;
        }
 }
@@ -215,7 +215,7 @@ http_get_headers (CamelHttpStream *http)
        gint err;
 
        if (http->parser)
-               camel_object_unref (http->parser);
+               g_object_unref (http->parser);
 
        http->parser = camel_mime_parser_new ();
        camel_mime_parser_init_with_stream (http->parser, http->read);
@@ -259,7 +259,7 @@ http_get_headers (CamelHttpStream *http)
        err = camel_mime_parser_errno (http->parser);
 
        if (err != 0) {
-               camel_object_unref (http->parser);
+               g_object_unref (http->parser);
                http->parser = NULL;
                goto exception;
        }
@@ -314,19 +314,45 @@ http_get_statuscode (CamelHttpStream *http)
 }
 
 static void
-http_stream_finalize (CamelHttpStream *http)
+http_stream_dispose (GObject *object)
 {
-       if (http->parser)
-               camel_object_unref (http->parser);
+       CamelHttpStream *http = CAMEL_HTTP_STREAM (object);
+
+       if (http->parser != NULL) {
+               g_object_unref (http->parser);
+               http->parser = NULL;
+       }
 
-       if (http->content_type)
+       if (http->content_type != NULL) {
                camel_content_type_unref (http->content_type);
+               http->content_type = NULL;
+       }
+
+       if (http->session != NULL) {
+               g_object_unref (http->session);
+               http->session = NULL;
+       }
 
-       if (http->headers)
-               camel_header_raw_clear (&http->headers);
+       if (http->raw != NULL) {
+               g_object_unref (http->raw);
+               http->raw = NULL;
+       }
 
-       if (http->session != NULL)
-               camel_object_unref (http->session);
+       if (http->read != NULL) {
+               g_object_unref (http->read);
+               http->read = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_http_stream_parent_class)->dispose (object);
+}
+
+static void
+http_stream_finalize (GObject *object)
+{
+       CamelHttpStream *http = CAMEL_HTTP_STREAM (object);
+
+       camel_header_raw_clear (&http->headers);
 
        if (http->url != NULL)
                camel_url_free (http->url);
@@ -337,11 +363,8 @@ http_stream_finalize (CamelHttpStream *http)
        g_free (http->authrealm);
        g_free (http->authpass);
 
-       if (http->raw != NULL)
-               camel_object_unref (http->raw);
-
-       if (http->read != NULL)
-               camel_object_unref (http->read);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_http_stream_parent_class)->finalize (object);
 }
 
 static gssize
@@ -489,9 +512,12 @@ http_stream_reset (CamelStream *stream)
 static void
 camel_http_stream_class_init (CamelHttpStreamClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = http_stream_dispose;
+       object_class->finalize = http_stream_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = http_stream_read;
@@ -504,35 +530,6 @@ camel_http_stream_class_init (CamelHttpStreamClass *class)
 static void
 camel_http_stream_init (CamelHttpStream *http)
 {
-       http->parser = NULL;
-       http->content_type = NULL;
-       http->headers = NULL;
-       http->session = NULL;
-       http->url = NULL;
-       http->proxy = NULL;
-       http->authrealm = NULL;
-       http->authpass = NULL;
-       http->statuscode = 0;
-       http->raw = NULL;
-}
-
-CamelType
-camel_http_stream_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_stream_get_type (),
-                                           "CamelHttpStream",
-                                           sizeof (CamelHttpStream),
-                                           sizeof (CamelHttpStreamClass),
-                                           (CamelObjectClassInitFunc) camel_http_stream_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_http_stream_init,
-                                           (CamelObjectFinalizeFunc) http_stream_finalize);
-       }
-
-       return type;
 }
 
 /**
@@ -552,10 +549,10 @@ camel_http_stream_new (CamelHttpMethod method, struct _CamelSession *session, Ca
        g_return_val_if_fail(CAMEL_IS_SESSION(session), NULL);
        g_return_val_if_fail(url != NULL, NULL);
 
-       stream = CAMEL_HTTP_STREAM (camel_object_new (camel_http_stream_get_type ()));
+       stream = g_object_new (CAMEL_TYPE_HTTP_STREAM, NULL);
 
        stream->method = method;
-       stream->session = camel_object_ref (session);
+       stream->session = g_object_ref (session);
 
        str = camel_url_to_string (url, 0);
        stream->url = camel_url_new (str, NULL);
index 12327a1..d925be2 100644 (file)
 #include <camel/camel-stream.h>
 #include <camel/camel-url.h>
 
-#define CAMEL_HTTP_STREAM_TYPE     (camel_http_stream_get_type ())
-#define CAMEL_HTTP_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_HTTP_STREAM_TYPE, CamelHttpStream))
-#define CAMEL_HTTP_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_HTTP_STREAM_TYPE, CamelHttpStreamClass))
-#define CAMEL_IS_HTTP_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_HTTP_STREAM_TYPE))
+#define CAMEL_TYPE_HTTP_STREAM \
+       (camel_http_stream_get_type ())
+#define CAMEL_HTTP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_HTTP_STREAM, CamelHttpStream))
+#define CAMEL_HTTP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_HTTP_STREAM, CamelHttpStreamClass))
+#define CAMEL_IS_HTTP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_HTTP_STREAM))
+#define CAMEL_IS_HTTP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_HTTP_STREAM))
+#define CAMEL_HTTP_STREAM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_HTTP_STREAM, CamelHttpStreamClass))
 
 G_BEGIN_DECLS
 
@@ -82,7 +95,7 @@ struct _CamelHttpStreamClass {
        CamelStreamClass parent_class;
 };
 
-CamelType      camel_http_stream_get_type      (void);
+GType          camel_http_stream_get_type      (void);
 CamelStream *  camel_http_stream_new           (CamelHttpMethod method,
                                                 struct _CamelSession *session,
                                                 CamelURL *url);
index 269d370..dd0e885 100644 (file)
@@ -44,10 +44,10 @@ do_compress(gint argc, gchar **argv)
                if (idx) {
                        printf(" Compressing ...\n");
                        if (camel_index_compress (idx) == -1) {
-                               camel_object_unref (idx);
+                               g_object_unref (idx);
                                return 1;
                        }
-                       camel_object_unref (idx);
+                       g_object_unref (idx);
                } else {
                        printf(" Failed: %s\n", g_strerror (errno));
                        return 1;
@@ -68,7 +68,7 @@ do_dump(gint argc, gchar **argv)
                if (idx) {
                        printf(" Dumping ...\n");
                        camel_text_index_dump((CamelTextIndex *)idx);
-                       camel_object_unref (idx);
+                       g_object_unref (idx);
                } else {
                        printf(" Failed: %s\n", g_strerror (errno));
                        return 1;
@@ -88,7 +88,7 @@ do_info(gint argc, gchar **argv)
                idx = (CamelIndex *)camel_text_index_new(argv[i], O_RDONLY);
                if (idx) {
                        camel_text_index_info((CamelTextIndex *)idx);
-                       camel_object_unref (idx);
+                       g_object_unref (idx);
                } else {
                        printf(" Failed: %s\n", g_strerror (errno));
                        return 0;
@@ -108,7 +108,7 @@ do_check(gint argc, gchar **argv)
                idx = (CamelIndex *)camel_text_index_new(argv[i], O_RDONLY);
                if (idx) {
                        camel_text_index_validate((CamelTextIndex *)idx);
-                       camel_object_unref (idx);
+                       g_object_unref (idx);
                } else {
                        printf(" Failed: %s\n", g_strerror (errno));
                        return 0;
@@ -177,7 +177,7 @@ do_perf(gint argc, gchar **argv)
 
        null = camel_stream_null_new();
        filter = camel_stream_filter_new (null);
-       camel_object_unref (null);
+       g_object_unref (null);
        filter_index = camel_mime_filter_index_new (idx);
        camel_stream_filter_add((CamelStreamFilter *)filter, filter_index);
 
@@ -190,11 +190,11 @@ do_perf(gint argc, gchar **argv)
                name = g_strdup_printf("%s/%s", path, d->d_name);
                stream = camel_stream_fs_new_with_name(name, O_RDONLY, 0);
                camel_stream_write_to_stream(stream, filter);
-               camel_object_unref (stream);
+               g_object_unref (stream);
                g_free(name);
 
                camel_index_write_name(idx, idn);
-               camel_object_unref (idn);
+               g_object_unref (idn);
                camel_mime_filter_index_set_name (
                        CAMEL_MIME_FILTER_INDEX (filter_index), NULL);
        }
@@ -202,10 +202,10 @@ do_perf(gint argc, gchar **argv)
        closedir(dir);
 
        camel_index_sync(idx);
-       camel_object_unref (idx);
+       g_object_unref (idx);
 
-       camel_object_unref (filter);
-       camel_object_unref (filter_index);
+       g_object_unref (filter);
+       g_object_unref (filter_index);
 
        return 0;
 }
index ee9d83d..f65d0a3 100644 (file)
 
 #define CAMEL_INDEX_VERSION (0x01)
 
+#define CAMEL_INDEX_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_INDEX, CamelIndexPrivate))
+
 struct _CamelIndexPrivate {
        gpointer dummy;
 };
 
-#define _PRIVATE(o) (((CamelIndex *)(o))->priv)
-
 /* ********************************************************************** */
 /* CamelIndex */
 /* ********************************************************************** */
 
-static CamelObjectClass *camel_index_parent;
+G_DEFINE_TYPE (CamelIndex, camel_index, CAMEL_TYPE_OBJECT)
 
 static void
-index_finalize (CamelIndex *index)
+index_finalize (GObject *object)
 {
+       CamelIndex *index = CAMEL_INDEX (object);
+
        g_free (index->path);
-       g_free (index->priv);
-}
 
-static void
-camel_index_class_init (CamelIndexClass *klass)
-{
-       camel_index_parent = CAMEL_OBJECT_CLASS(camel_type_get_global_classfuncs(camel_object_get_type()));
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_index_parent_class)->finalize (object);
 }
 
 static void
-camel_index_init (CamelIndex *idx)
+camel_index_class_init (CamelIndexClass *class)
 {
-       struct _CamelIndexPrivate *p;
+       GObjectClass *object_class;
 
-       p = _PRIVATE(idx) = g_malloc0(sizeof(*p));
+       g_type_class_add_private (class, sizeof (CamelIndexPrivate));
 
-       idx->version = CAMEL_INDEX_VERSION;
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = index_finalize;
 }
 
-CamelType
-camel_index_get_type(void)
+static void
+camel_index_init (CamelIndex *index)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelIndex",
-                                          sizeof (CamelIndex),
-                                          sizeof (CamelIndexClass),
-                                          (CamelObjectClassInitFunc) camel_index_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_index_init,
-                                          (CamelObjectFinalizeFunc) index_finalize);
-       }
-
-       return type;
+       index->priv = CAMEL_INDEX_GET_PRIVATE (index);
+       index->version = CAMEL_INDEX_VERSION;
 }
 
 CamelIndex *
-camel_index_new(const gchar *path, gint flags)
+camel_index_new (const gchar *path, gint flags)
 {
        CamelIndex *idx;
 
-       idx = (CamelIndex *)camel_object_new(camel_index_get_type());
+       idx = g_object_new (CAMEL_TYPE_INDEX, NULL);
        camel_index_construct (idx, path, flags);
 
        return idx;
@@ -338,42 +328,34 @@ camel_index_names (CamelIndex *idx)
 /* CamelIndexName */
 /* ********************************************************************** */
 
-static CamelObjectClass *camel_index_name_parent;
+G_DEFINE_TYPE (CamelIndexName, camel_index_name, CAMEL_TYPE_OBJECT)
 
 static void
-index_name_finalize(CamelIndexName *idn)
+index_name_dispose (GObject *object)
 {
-       if (idn->index)
-               camel_object_unref (idn->index);
-}
+       CamelIndexName *index_name = CAMEL_INDEX_NAME (object);
 
-static void
-camel_index_name_class_init(CamelIndexNameClass *klass)
-{
-       camel_index_name_parent = CAMEL_OBJECT_CLASS(camel_type_get_global_classfuncs(camel_object_get_type()));
+       if (index_name->index != NULL) {
+               g_object_unref (index_name->index);
+               index_name->index = NULL;
+       }
+
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_index_name_parent_class)->dispose (object);
 }
 
 static void
-camel_index_name_init(CamelIndexName *idn)
+camel_index_name_class_init (CamelIndexNameClass *class)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = index_name_dispose;
 }
 
-CamelType
-camel_index_name_get_type(void)
+static void
+camel_index_name_init (CamelIndexName *index_name)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelIndexName",
-                                          sizeof (CamelIndexName),
-                                          sizeof (CamelIndexNameClass),
-                                          (CamelObjectClassInitFunc) camel_index_name_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_index_name_init,
-                                          (CamelObjectFinalizeFunc) index_name_finalize);
-       }
-
-       return type;
 }
 
 CamelIndexName *
@@ -381,8 +363,8 @@ camel_index_name_new (CamelIndex *idx, const gchar *name)
 {
        CamelIndexName *idn;
 
-       idn = (CamelIndexName *)camel_object_new(camel_index_name_get_type());
-       idn->index = camel_object_ref (idx);
+       idn = g_object_new (CAMEL_TYPE_INDEX_NAME, NULL);
+       idn->index = g_object_ref (idx);
 
        return idn;
 }
@@ -427,42 +409,34 @@ camel_index_name_add_buffer (CamelIndexName *idn,
 /* CamelIndexCursor */
 /* ********************************************************************** */
 
-static CamelObjectClass *camel_index_cursor_parent;
+G_DEFINE_TYPE (CamelIndexCursor, camel_index_cursor, CAMEL_TYPE_OBJECT)
 
 static void
-index_cursor_finalize (CamelIndexCursor *idc)
+index_cursor_dispose (GObject *object)
 {
-       if (idc->index)
-               camel_object_unref (idc->index);
-}
+       CamelIndexCursor *index_cursor = CAMEL_INDEX_CURSOR (object);
 
-static void
-camel_index_cursor_class_init (CamelIndexCursorClass *klass)
-{
-       camel_index_cursor_parent = CAMEL_OBJECT_CLASS(camel_type_get_global_classfuncs(camel_object_get_type()));
+       if (index_cursor->index != NULL) {
+               g_object_unref (index_cursor->index);
+               index_cursor->index = NULL;
+       }
+
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_index_cursor_parent_class)->dispose (object);
 }
 
 static void
-camel_index_cursor_init (CamelIndexCursor *idc)
+camel_index_cursor_class_init (CamelIndexCursorClass *class)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = index_cursor_dispose;
 }
 
-CamelType
-camel_index_cursor_get_type(void)
+static void
+camel_index_cursor_init (CamelIndexCursor *index_cursor)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelIndexCursor",
-                                          sizeof (CamelIndexCursor),
-                                          sizeof (CamelIndexCursorClass),
-                                          (CamelObjectClassInitFunc) camel_index_cursor_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_index_cursor_init,
-                                          (CamelObjectFinalizeFunc) index_cursor_finalize);
-       }
-
-       return type;
 }
 
 CamelIndexCursor *
@@ -470,8 +444,8 @@ camel_index_cursor_new (CamelIndex *idx, const gchar *name)
 {
        CamelIndexCursor *idc;
 
-       idc = (CamelIndexCursor *)camel_object_new(camel_index_cursor_get_type());
-       idc->index = camel_object_ref (idx);
+       idc = g_object_new (CAMEL_TYPE_INDEX_CURSOR, NULL);
+       idc->index = g_object_ref (idx);
 
        return idc;
 }
index 81ea5b4..1821d8d 100644 (file)
 #include <camel/camel-exception.h>
 #include <camel/camel-object.h>
 
-#define CAMEL_INDEX(obj)         CAMEL_CHECK_CAST (obj, camel_index_get_type (), CamelIndex)
-#define CAMEL_INDEX_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_index_get_type (), CamelIndexClass)
-#define CAMEL_IS_INDEX(obj)      CAMEL_CHECK_TYPE (obj, camel_index_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_INDEX \
+       (camel_index_get_type ())
+#define CAMEL_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_INDEX, CamelIndex))
+#define CAMEL_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_INDEX, CamelIndexClass))
+#define CAMEL_IS_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_INDEX))
+#define CAMEL_IS_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_INDEX))
 #define CAMEL_INDEX_GET_CLASS(obj) \
-       ((CamelIndexClass *) CAMEL_OBJECT_GET_CLASS (obj))
-
-#define CAMEL_INDEX_NAME(obj)         CAMEL_CHECK_CAST (obj, camel_index_name_get_type (), CamelIndexName)
-#define CAMEL_INDEX_NAME_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_index_name_get_type (), CamelIndexNameClass)
-#define CAMEL_IS_INDEX_NAME(obj)      CAMEL_CHECK_TYPE (obj, camel_index_name_get_type ())
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_INDEX, CamelIndexClass))
+
+#define CAMEL_TYPE_INDEX_NAME \
+       (camel_index_name_get_type ())
+#define CAMEL_INDEX_NAME(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_INDEX_NAME, CamelIndexName))
+#define CAMEL_INDEX_NAME_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_INDEX_NAME, CamelIndexNameClass))
+#define CAMEL_IS_INDEX_NAME(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_INDEX_NAME))
+#define CAMEL_IS_INDEX_NAME_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_INDEX_NAME))
 #define CAMEL_INDEX_NAME_GET_CLASS(obj) \
-       ((CamelIndexNameClass *) CAMEL_OBJECT_GET_CLASS (obj))
-
-#define CAMEL_INDEX_CURSOR(obj)         CAMEL_CHECK_CAST (obj, camel_index_cursor_get_type (), CamelIndexCursor)
-#define CAMEL_INDEX_CURSOR_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_index_cursor_get_type (), CamelIndexCursorClass)
-#define CAMEL_IS_INDEX_CURSOR(obj)      CAMEL_CHECK_TYPE (obj, camel_index_cursor_get_type ())
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_INDEX_NAME, CamelIndexNameClass))
+
+#define CAMEL_TYPE_INDEX_CURSOR \
+       (camel_index_cursor_get_type ())
+#define CAMEL_INDEX_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_INDEX_CURSOR, CamelIndexCursor))
+#define CAMEL_INDEX_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_INDEX_CURSOR, CamelIndexCursorClass))
+#define CAMEL_IS_INDEX_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_INDEX_CURSOR))
+#define CAMEL_IS_INDEX_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_INDEX_CURSOR))
 #define CAMEL_INDEX_CURSOR_GET_CLASS(obj) \
-       ((CamelIndexCursorClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_INDEX_CURSOR, CamelIndexCursorClass))
 
 G_BEGIN_DECLS
 
@@ -78,7 +115,7 @@ struct _CamelIndexCursorClass {
        void         (*reset) (CamelIndexCursor *idc);
 };
 
-CamelType                 camel_index_cursor_get_type(void);
+GType           camel_index_cursor_get_type(void);
 
 CamelIndexCursor  *camel_index_cursor_new(CamelIndex *index, const gchar *name);
 
@@ -107,7 +144,7 @@ struct _CamelIndexNameClass {
        gsize (*add_buffer)(CamelIndexName *name, const gchar *buffer, gsize len);
 };
 
-CamelType                 camel_index_name_get_type    (void);
+GType           camel_index_name_get_type      (void);
 
 CamelIndexName    *camel_index_name_new(CamelIndex *index, const gchar *name);
 
@@ -160,7 +197,7 @@ struct _CamelIndexClass {
 /* flags, stored in 'state', set with set_state */
 #define CAMEL_INDEX_DELETED (1<<0)
 
-CamelType      camel_index_get_type            (void);
+GType          camel_index_get_type            (void);
 CamelIndex *   camel_index_new                 (const gchar *path,
                                                 gint flags);
 void           camel_index_construct           (CamelIndex *index,
index 3eb6302..5518231 100644 (file)
 
 #define d(x)
 
-static CamelAddressClass *camel_internet_address_parent;
-
 struct _address {
        gchar *name;
        gchar *address;
 };
 
+G_DEFINE_TYPE (CamelInternetAddress, camel_internet_address, CAMEL_TYPE_ADDRESS)
+
 static gint
 internet_address_decode (CamelAddress *a, const gchar *raw)
 {
@@ -225,8 +225,6 @@ camel_internet_address_class_init (CamelInternetAddressClass *class)
 {
        CamelAddressClass *address_class;
 
-       camel_internet_address_parent = CAMEL_ADDRESS_CLASS(camel_type_get_global_classfuncs(camel_address_get_type()));
-
        address_class = CAMEL_ADDRESS_CLASS (class);
        address_class->decode = internet_address_decode;
        address_class->encode = internet_address_encode;
@@ -241,24 +239,6 @@ camel_internet_address_init (CamelInternetAddress *internet_address)
 {
 }
 
-CamelType
-camel_internet_address_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_address_get_type(), "CamelInternetAddress",
-                                          sizeof (CamelInternetAddress),
-                                          sizeof (CamelInternetAddressClass),
-                                          (CamelObjectClassInitFunc) camel_internet_address_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_internet_address_init,
-                                          NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_internet_address_new:
  *
@@ -269,7 +249,7 @@ camel_internet_address_get_type(void)
 CamelInternetAddress *
 camel_internet_address_new (void)
 {
-       return CAMEL_INTERNET_ADDRESS(camel_object_new(camel_internet_address_get_type()));
+       return g_object_new (CAMEL_TYPE_INTERNET_ADDRESS, NULL);
 }
 
 /**
index bffcf3b..60d3e2c 100644 (file)
 
 #include <camel/camel-address.h>
 
-#define CAMEL_INTERNET_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_internet_address_get_type (), CamelInternetAddress)
-#define CAMEL_INTERNET_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_internet_address_get_type (), CamelInternetAddressClass)
-#define CAMEL_IS_INTERNET_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_internet_address_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_INTERNET_ADDRESS \
+       (camel_internet_address_get_type ())
+#define CAMEL_INTERNET_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_INTERNET_ADDRESS, CamelInternetAddress))
+#define CAMEL_INTERNET_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_INTERNET_ADDRESS, CamelInternetAddressClass))
+#define CAMEL_IS_INTERNET_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_INTERNET_ADDRESS))
+#define CAMEL_IS_INTERNET_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_INTERNET_ADDRESS))
+#define CAMEL_INTERNET_ADDRESS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_INTERNET_ADDRESS, CamelInternetAddressClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +62,7 @@ struct _CamelInternetAddressClass {
        CamelAddressClass parent_class;
 };
 
-CamelType      camel_internet_address_get_type (void);
+GType          camel_internet_address_get_type (void);
 CamelInternetAddress *
                camel_internet_address_new      (void);
 gint           camel_internet_address_add      (CamelInternetAddress *addr,
index 5ed5d2d..ef0f162 100644 (file)
 
 #define d(x)
 
-static CamelDataWrapperClass *camel_medium_parent_class = NULL;
+#define CAMEL_MEDIUM_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MEDIUM, CamelMediumPrivate))
+
+struct _CamelMediumPrivate {
+       /* The content of the medium, as opposed to our parent
+        * CamelDataWrapper, which wraps both the headers and
+        * the content. */
+       CamelDataWrapper *content;
+};
+
+enum {
+       PROP_0,
+       PROP_CONTENT
+};
+
+G_DEFINE_ABSTRACT_TYPE (CamelMedium, camel_medium, CAMEL_TYPE_DATA_WRAPPER)
+
+static void
+medium_set_property (GObject *object,
+                     guint property_id,
+                     const GValue *value,
+                     GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_CONTENT:
+                       camel_medium_set_content (
+                               CAMEL_MEDIUM (object),
+                               g_value_get_object (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+medium_get_property (GObject *object,
+                     guint property_id,
+                     GValue *value,
+                     GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_CONTENT:
+                       g_value_set_object (
+                               value, camel_medium_get_content (
+                               CAMEL_MEDIUM (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
 
 static void
-medium_finalize (CamelObject *object)
+medium_dispose (GObject *object)
 {
-       CamelMedium *medium = CAMEL_MEDIUM (object);
+       CamelMediumPrivate *priv;
 
-       if (medium->content != NULL)
-               camel_object_unref (medium->content);
+       priv = CAMEL_MEDIUM_GET_PRIVATE (object);
+
+       if (priv->content != NULL) {
+               g_object_unref (priv->content);
+               priv->content = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_medium_parent_class)->dispose (object);
 }
 
 static gboolean
@@ -60,55 +117,56 @@ medium_set_content (CamelMedium *medium,
                     CamelDataWrapper *content)
 {
        if (content != NULL)
-               camel_object_ref (content);
+               g_object_ref (content);
+
+       if (medium->priv->content != NULL)
+               g_object_unref (medium->priv->content);
 
-       if (medium->content != NULL)
-               camel_object_unref (medium->content);
+       medium->priv->content = content;
 
-       medium->content = content;
+       g_object_notify (G_OBJECT (medium), "content");
 }
 
 static CamelDataWrapper *
 medium_get_content (CamelMedium *medium)
 {
-       return medium->content;
+       return medium->priv->content;
 }
 
 static void
 camel_medium_class_init (CamelMediumClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
 
-       camel_medium_parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMediumPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = medium_set_property;
+       object_class->get_property = medium_get_property;
+       object_class->dispose = medium_dispose;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->is_offline = medium_is_offline;
 
        class->set_content = medium_set_content;
        class->get_content = medium_get_content;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_CONTENT,
+               g_param_spec_object (
+                       "content",
+                       "Content",
+                       NULL,
+                       CAMEL_TYPE_DATA_WRAPPER,
+                       G_PARAM_READWRITE));
 }
 
 static void
 camel_medium_init (CamelMedium *medium)
 {
-}
-
-CamelType
-camel_medium_get_type (void)
-{
-       static CamelType camel_medium_type = CAMEL_INVALID_TYPE;
-
-       if (camel_medium_type == CAMEL_INVALID_TYPE) {
-               camel_medium_type = camel_type_register (CAMEL_DATA_WRAPPER_TYPE, "medium",
-                                                        sizeof (CamelMedium),
-                                                        sizeof (CamelMediumClass),
-                                                        (CamelObjectClassInitFunc) camel_medium_class_init,
-                                                        NULL,
-                                                        (CamelObjectInitFunc) camel_medium_init,
-                                                        (CamelObjectFinalizeFunc) medium_finalize);
-       }
-
-       return camel_medium_type;
+       medium->priv = CAMEL_MEDIUM_GET_PRIVATE (medium);
 }
 
 /**
index 2968b43..02b0c8b 100644 (file)
 
 #include <camel/camel-data-wrapper.h>
 
-#define CAMEL_MEDIUM_TYPE     (camel_medium_get_type ())
-#define CAMEL_MEDIUM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MEDIUM_TYPE, CamelMedium))
-#define CAMEL_MEDIUM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MEDIUM_TYPE, CamelMediumClass))
-#define CAMEL_IS_MEDIUM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MEDIUM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MEDIUM \
+       (camel_medium_get_type ())
+#define CAMEL_MEDIUM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MEDIUM, CamelMedium))
+#define CAMEL_MEDIUM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MEDIUM, CamelMediumClass))
+#define CAMEL_IS_MEDIUM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MEDIUM))
+#define CAMEL_IS_MEDIUM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MEDIUM))
 #define CAMEL_MEDIUM_GET_CLASS(obj) \
-       ((CamelMediumClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MEDIUM, CamelMediumClass))
 
 G_BEGIN_DECLS
 
 typedef struct _CamelMedium CamelMedium;
 typedef struct _CamelMediumClass CamelMediumClass;
+typedef struct _CamelMediumPrivate CamelMediumPrivate;
 
 typedef struct {
        const gchar *name;
@@ -51,12 +64,7 @@ typedef struct {
 
 struct _CamelMedium {
        CamelDataWrapper parent;
-
-       /* The content of the medium, as opposed to our parent
-        * CamelDataWrapper, which wraps both the headers and the
-        * content.
-        */
-       CamelDataWrapper *content;
+       CamelMediumPrivate *priv;
 };
 
 struct _CamelMediumClass {
@@ -81,7 +89,7 @@ struct _CamelMediumClass {
                                                 CamelDataWrapper *content);
 };
 
-CamelType      camel_medium_get_type           (void);
+GType          camel_medium_get_type           (void);
 void           camel_medium_add_header         (CamelMedium *medium,
                                                 const gchar *name,
                                                 gconstpointer value);
index cc8bc23..9f3e086 100644 (file)
@@ -24,7 +24,9 @@
 #include "camel-mime-filter-basic.h"
 #include "camel-mime-utils.h"
 
-static CamelMimeFilterClass *camel_mime_filter_basic_parent;
+#define CAMEL_MIME_FILTER_BASIC_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BASIC, CamelMimeFilterBasicPrivate))
 
 struct _CamelMimeFilterBasicPrivate {
        CamelMimeFilterBasicType type;
@@ -33,11 +35,7 @@ struct _CamelMimeFilterBasicPrivate {
        gint save;
 };
 
-static void
-mime_filter_basic_finalize (CamelMimeFilterBasic *filter)
-{
-       g_free (filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterBasic, camel_mime_filter_basic, CAMEL_TYPE_MIME_FILTER)
 
 /* here we do all of the basic mime filtering */
 static void
@@ -52,7 +50,7 @@ mime_filter_basic_filter (CamelMimeFilter *mime_filter,
        CamelMimeFilterBasicPrivate *priv;
        gsize newlen;
 
-       priv = CAMEL_MIME_FILTER_BASIC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BASIC_GET_PRIVATE (mime_filter);
 
        switch (priv->type) {
        case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
@@ -157,7 +155,7 @@ mime_filter_basic_complete (CamelMimeFilter *mime_filter,
        CamelMimeFilterBasicPrivate *priv;
        gsize newlen = 0;
 
-       priv = CAMEL_MIME_FILTER_BASIC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BASIC_GET_PRIVATE (mime_filter);
 
        switch (priv->type) {
        case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
@@ -223,7 +221,7 @@ mime_filter_basic_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterBasicPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_BASIC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BASIC_GET_PRIVATE (mime_filter);
 
        switch (priv->type) {
        case CAMEL_MIME_FILTER_BASIC_QP_ENC:
@@ -240,7 +238,7 @@ camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_basic_parent = CAMEL_MIME_FILTER_CLASS(camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterBasicPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_basic_filter;
@@ -251,25 +249,7 @@ camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *class)
 static void
 camel_mime_filter_basic_init (CamelMimeFilterBasic *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterBasicPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_basic_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterBasic",
-                                           sizeof (CamelMimeFilterBasic),
-                                           sizeof (CamelMimeFilterBasicClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_basic_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_basic_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_basic_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_BASIC_GET_PRIVATE (filter);
 }
 
 /**
@@ -292,7 +272,7 @@ camel_mime_filter_basic_new (CamelMimeFilterBasicType type)
        case CAMEL_MIME_FILTER_BASIC_QP_DEC:
        case CAMEL_MIME_FILTER_BASIC_UU_ENC:
        case CAMEL_MIME_FILTER_BASIC_UU_DEC:
-               new = CAMEL_MIME_FILTER (camel_object_new (camel_mime_filter_basic_get_type ()));
+               new = g_object_new (CAMEL_TYPE_MIME_FILTER_BASIC, NULL);
                CAMEL_MIME_FILTER_BASIC (new)->priv->type = type;
                break;
        default:
index c93e506..53d1e76 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_BASIC(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_basic_get_type (), CamelMimeFilterBasic)
-#define CAMEL_MIME_FILTER_BASIC_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_basic_get_type (), CamelMimeFilterBasicClass)
-#define CAMEL_IS_MIME_FILTER_BASIC(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_basic_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_BASIC \
+       (camel_mime_filter_basic_get_type ())
+#define CAMEL_MIME_FILTER_BASIC(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BASIC, CamelMimeFilterBasic))
+#define CAMEL_MIME_FILTER_BASIC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_BASIC, CamelMimeFilterBasicClass))
+#define CAMEL_IS_MIME_FILTER_BASIC(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BASIC))
+#define CAMEL_IS_MIME_FILTER_BASIC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_BASIC))
+#define CAMEL_MIME_FILTER_BASIC_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BASIC, CamelMimeFilterBasicClass))
 
 G_BEGIN_DECLS
 
@@ -56,7 +71,7 @@ struct _CamelMimeFilterBasicClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_basic_get_type(void);
+GType          camel_mime_filter_basic_get_type(void);
 CamelMimeFilter *
                camel_mime_filter_basic_new     (CamelMimeFilterBasicType type);
 
index f792130..bbc505c 100644 (file)
@@ -27,7 +27,9 @@
 
 #include "camel-mime-filter-bestenc.h"
 
-static CamelMimeFilterClass *camel_mime_filter_bestenc_parent;
+#define CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BESTENC, CamelMimeFilterBestencPrivate))
 
 struct _CamelMimeFilterBestencPrivate {
 
@@ -52,11 +54,7 @@ struct _CamelMimeFilterBestencPrivate {
        CamelCharset charset;   /* used to determine the best charset to use */
 };
 
-static void
-mime_filter_bestenc_finalize (CamelMimeFilterBestenc *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterBestenc, camel_mime_filter_bestenc, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_bestenc_filter (CamelMimeFilter *mime_filter,
@@ -70,7 +68,7 @@ mime_filter_bestenc_filter (CamelMimeFilter *mime_filter,
        CamelMimeFilterBestencPrivate *priv;
        register guchar *p, *pend;
 
-       priv = CAMEL_MIME_FILTER_BESTENC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE (mime_filter);
 
        if (len == 0)
                goto donothing;
@@ -171,7 +169,7 @@ mime_filter_bestenc_complete (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterBestencPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_BESTENC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE (mime_filter);
 
        mime_filter_bestenc_filter (
                mime_filter, in, len, prespace, out, outlen, outprespace);
@@ -186,7 +184,7 @@ mime_filter_bestenc_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterBestencPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_BESTENC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE (mime_filter);
 
        priv->count0 = 0;
        priv->count8 = 0;
@@ -206,7 +204,7 @@ camel_mime_filter_bestenc_class_init (CamelMimeFilterBestencClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_bestenc_parent = (CamelMimeFilterClass *)(camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterBestencPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_bestenc_filter;
@@ -217,29 +215,11 @@ camel_mime_filter_bestenc_class_init (CamelMimeFilterBestencClass *class)
 static void
 camel_mime_filter_bestenc_init (CamelMimeFilterBestenc *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterBestencPrivate, 1);
+       filter->priv = CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE (filter);
 
        mime_filter_bestenc_reset (CAMEL_MIME_FILTER (filter));
 }
 
-CamelType
-camel_mime_filter_bestenc_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterBestenc",
-                                           sizeof (CamelMimeFilterBestenc),
-                                           sizeof (CamelMimeFilterBestencClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_bestenc_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_bestenc_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_bestenc_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_bestenc_new:
  * @flags: a bitmask of data required.
@@ -253,7 +233,7 @@ camel_mime_filter_bestenc_new (guint flags)
 {
        CamelMimeFilter *new;
 
-       new = (CamelMimeFilter *)camel_object_new(camel_mime_filter_bestenc_get_type());
+       new = g_object_new (CAMEL_TYPE_MIME_FILTER_BESTENC, NULL);
        CAMEL_MIME_FILTER_BESTENC (new)->priv->flags = flags;
 
        return new;
@@ -277,7 +257,7 @@ camel_mime_filter_bestenc_get_best_encoding (CamelMimeFilterBestenc *filter,
        CamelTransferEncoding bestenc;
        gint istext;
 
-       priv = CAMEL_MIME_FILTER_BESTENC (filter)->priv;
+       priv = CAMEL_MIME_FILTER_BESTENC_GET_PRIVATE (filter);
 
        istext = (required & CAMEL_BESTENC_TEXT) ? 1 : 0;
        required = required & ~CAMEL_BESTENC_TEXT;
index 65d53bc..2171f69 100644 (file)
 #include <camel/camel-mime-part.h>
 #include <camel/camel-charset-map.h>
 
-#define CAMEL_MIME_FILTER_BESTENC(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_bestenc_get_type (), CamelMimeFilterBestenc)
-#define CAMEL_MIME_FILTER_BESTENC_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_bestenc_get_type (), CamelMimeFilterBestencClass)
-#define CAMEL_IS_MIME_FILTER_BESTENC(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_bestenc_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_BESTENC \
+       (camel_mime_filter_bestenc_get_type ())
+#define CAMEL_MIME_FILTER_BESTENC(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BESTENC, CamelMimeFilterBestenc))
+#define CAMEL_MIME_FILTER_BESTENC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_BESTENC, CamelMimeFilterBestencClass))
+#define CAMEL_IS_MIME_FILTER_BESTENC(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BESTENC))
+#define CAMEL_IS_MIME_FILTER_BESTENC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_BESTENC))
+#define CAMEL_MIME_FILTER_BESTENC_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_BESTENC, CamelMimeFilterBestencClass))
 
 G_BEGIN_DECLS
 
@@ -68,7 +83,7 @@ struct _CamelMimeFilterBestencClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_bestenc_get_type (void);
+GType          camel_mime_filter_bestenc_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_bestenc_new   (guint flags);
 CamelTransferEncoding
index c85a826..b272a6c 100644 (file)
 
 #include "camel-mime-filter-canon.h"
 
+#define CAMEL_MIME_FILTER_CANON_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CANON, CamelMimeFilterCanonPrivate))
+
 struct _CamelMimeFilterCanonPrivate {
        guint32 flags;
 };
 
-static void
-mime_filter_canon_finalize (CamelMimeFilterCanon *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterCanon, camel_mime_filter_canon, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_canon_run (CamelMimeFilter *mime_filter,
@@ -58,7 +58,7 @@ mime_filter_canon_run (CamelMimeFilter *mime_filter,
        register gchar *o;
        gint lf = 0;
 
-       priv = CAMEL_MIME_FILTER_CANON (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CANON_GET_PRIVATE (mime_filter);
 
        /* first, work out how much space we need */
        inptr = (guchar *)in;
@@ -182,6 +182,8 @@ camel_mime_filter_canon_class_init (CamelMimeFilterCanonClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
+       g_type_class_add_private (class, sizeof (CamelMimeFilterCanonPrivate));
+
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_canon_filter;
        mime_filter_class->complete = mime_filter_canon_complete;
@@ -191,25 +193,7 @@ camel_mime_filter_canon_class_init (CamelMimeFilterCanonClass *class)
 static void
 camel_mime_filter_canon_init (CamelMimeFilterCanon *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterCanonPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_canon_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterCanon",
-                                           sizeof (CamelMimeFilterCanon),
-                                           sizeof (CamelMimeFilterCanonClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_canon_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_canon_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_canon_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_CANON_GET_PRIVATE (filter);
 }
 
 /**
@@ -225,7 +209,7 @@ camel_mime_filter_canon_new(guint32 flags)
 {
        CamelMimeFilter *filter;
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (CAMEL_MIME_FILTER_CANON_TYPE));
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_CANON, NULL);
        CAMEL_MIME_FILTER_CANON (filter)->priv->flags = flags;
 
        return filter;
index 19a2237..8587c7e 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_CANON_TYPE         (camel_mime_filter_canon_get_type ())
-#define CAMEL_MIME_FILTER_CANON(obj)         CAMEL_CHECK_CAST (obj, CAMEL_MIME_FILTER_CANON_TYPE, CamelMimeFilterCanon)
-#define CAMEL_MIME_FILTER_CANON_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, CAMEL_MIME_FILTER_CANON_TYPE, CamelMimeFilterCanonClass)
-#define CAMEL_IS_MIME_FILTER_CANON(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_MIME_FILTER_CANON_TYPE)
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_CANON \
+       (camel_mime_filter_canon_get_type ())
+#define CAMEL_MIME_FILTER_CANON(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CANON, CamelMimeFilterCanon))
+#define CAMEL_MIME_FILTER_CANON_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CANON, CamelMimeFilterCanonClass))
+#define CAMEL_IS_MIME_FILTER_CANON(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CANON))
+#define CAMEL_IS_MIME_FILTER_CANON_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CANON))
+#define CAMEL_MIME_FILTER_CANON_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CANON, CamelMimeFilterCanonClass))
 
 G_BEGIN_DECLS
 
@@ -55,8 +69,7 @@ struct _CamelMimeFilterCanonClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_canon_get_type(void);
-
+GType          camel_mime_filter_canon_get_type(void);
 CamelMimeFilter *
                camel_mime_filter_canon_new     (guint32 flags);
 
index 26ffe0f..a553c6c 100644 (file)
 #include "camel-iconv.h"
 #include "camel-mime-filter-charset.h"
 
+#define CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CHARSET, CamelMimeFilterCharsetPrivate))
+
 #define d(x)
 #define w(x)
 
@@ -39,14 +43,14 @@ struct _CamelMimeFilterCharsetPrivate {
        gchar *to;
 };
 
-static CamelMimeFilterClass *camel_mime_filter_charset_parent;
+G_DEFINE_TYPE (CamelMimeFilterCharset, camel_mime_filter_charset, CAMEL_TYPE_MIME_FILTER)
 
 static void
-mime_filter_charset_finalize (CamelMimeFilterCharset *filter)
+mime_filter_charset_finalize (GObject *object)
 {
        CamelMimeFilterCharsetPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_CHARSET (filter)->priv;
+       priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (object);
 
        g_free (priv->from);
        g_free (priv->to);
@@ -55,7 +59,9 @@ mime_filter_charset_finalize (CamelMimeFilterCharset *filter)
                camel_iconv_close (priv->ic);
                priv->ic = (iconv_t) -1;
        }
-       g_free (priv);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_filter_charset_parent_class)->finalize (object);
 }
 
 static void
@@ -72,7 +78,7 @@ mime_filter_charset_complete (CamelMimeFilter *mime_filter,
        const gchar *inbuf;
        gchar *outbuf;
 
-       priv = CAMEL_MIME_FILTER_CHARSET (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (mime_filter);
 
        if (priv->ic == (iconv_t) -1)
                goto noop;
@@ -155,7 +161,7 @@ mime_filter_charset_filter (CamelMimeFilter *mime_filter,
        const gchar *inbuf;
        gchar *outbuf;
 
-       priv = CAMEL_MIME_FILTER_CHARSET (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (mime_filter);
 
        if (priv->ic == (iconv_t) -1)
                goto noop;
@@ -218,7 +224,7 @@ mime_filter_charset_reset (CamelMimeFilter *mime_filter)
        gchar *buffer;
        gsize outlen = 16;
 
-       priv = CAMEL_MIME_FILTER_CHARSET (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (mime_filter);
 
        /* what happens with the output bytes if this resets the state? */
        if (priv->ic != (iconv_t) -1) {
@@ -230,9 +236,13 @@ mime_filter_charset_reset (CamelMimeFilter *mime_filter)
 static void
 camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *class)
 {
+       GObjectClass *object_class;
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_charset_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterCharsetPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_filter_charset_finalize;
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_charset_filter;
@@ -243,28 +253,10 @@ camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *class)
 static void
 camel_mime_filter_charset_init (CamelMimeFilterCharset *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterCharsetPrivate, 1);
+       filter->priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (filter);
        filter->priv->ic = (iconv_t) -1;
 }
 
-CamelType
-camel_mime_filter_charset_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterCharset",
-                                           sizeof (CamelMimeFilterCharset),
-                                           sizeof (CamelMimeFilterCharsetClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_charset_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_charset_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_charset_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_charset_new:
  * @from_charset: charset to convert from
@@ -282,8 +274,8 @@ camel_mime_filter_charset_new (const gchar *from_charset,
        CamelMimeFilter *new;
        CamelMimeFilterCharsetPrivate *priv;
 
-       new = CAMEL_MIME_FILTER (camel_object_new (camel_mime_filter_charset_get_type ()));
-       priv = CAMEL_MIME_FILTER_CHARSET (new)->priv;
+       new = g_object_new (CAMEL_TYPE_MIME_FILTER_CHARSET, NULL);
+       priv = CAMEL_MIME_FILTER_CHARSET_GET_PRIVATE (new);
 
        priv->ic = camel_iconv_open (to_charset, from_charset);
        if (priv->ic == (iconv_t) -1) {
@@ -291,7 +283,7 @@ camel_mime_filter_charset_new (const gchar *from_charset,
                             from_charset ? from_charset : "(null)",
                             to_charset ? to_charset : "(null)",
                             g_strerror (errno)));
-               camel_object_unref (new);
+               g_object_unref (new);
                new = NULL;
        } else {
                priv->from = g_strdup (from_charset);
index 31c35b8..44d5149 100644 (file)
 #include <camel/camel-mime-filter.h>
 #include <iconv.h>
 
-#define CAMEL_MIME_FILTER_CHARSET(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_charset_get_type (), CamelMimeFilterCharset)
-#define CAMEL_MIME_FILTER_CHARSET_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_charset_get_type (), CamelMimeFilterCharsetClass)
-#define CAMEL_IS_MIME_FILTER_CHARSET(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_charset_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_CHARSET \
+       (camel_mime_filter_charset_get_type ())
+#define CAMEL_MIME_FILTER_CHARSET(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CHARSET, CamelMimeFilterCharset))
+#define CAMEL_MIME_FILTER_CHARSET_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CHARSET, CamelMimeFilterCharsetClass))
+#define CAMEL_IS_MIME_FILTER_CHARSET(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CHARSET))
+#define CAMEL_IS_MIME_FILTER_CHARSET_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CHARSET))
+#define CAMEL_MIME_FILTER_CHARSET_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CHARSET, CamelMimeFilterCharsetClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +63,7 @@ struct _CamelMimeFilterCharsetClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_charset_get_type (void);
+GType          camel_mime_filter_charset_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_charset_new   (const gchar *from_charset,
                                                 const gchar *to_charset);
index be44ea5..a233dcb 100644 (file)
 
 #include "camel-mime-filter-crlf.h"
 
+#define CAMEL_MIME_FILTER_CRLF_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CRLF, CamelMimeFilterCRLFPrivate))
+
 struct _CamelMimeFilterCRLFPrivate {
        CamelMimeFilterCRLFDirection direction;
        CamelMimeFilterCRLFMode mode;
@@ -30,11 +34,7 @@ struct _CamelMimeFilterCRLFPrivate {
        gboolean saw_dot;
 };
 
-static void
-mime_filter_crlf_finalize (CamelMimeFilterCRLF *filter)
-{
-       g_free (filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterCRLF, camel_mime_filter_crlf, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_crlf_filter (CamelMimeFilter *mime_filter,
@@ -51,7 +51,7 @@ mime_filter_crlf_filter (CamelMimeFilter *mime_filter,
        gboolean do_dots;
        gchar *outptr;
 
-       priv = CAMEL_MIME_FILTER_CRLF (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CRLF_GET_PRIVATE (mime_filter);
 
        do_dots = priv->mode == CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS;
 
@@ -147,7 +147,7 @@ mime_filter_crlf_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterCRLFPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_CRLF (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_CRLF_GET_PRIVATE (mime_filter);
 
        priv->saw_cr = FALSE;
        priv->saw_lf = TRUE;
@@ -159,6 +159,8 @@ camel_mime_filter_crlf_class_init (CamelMimeFilterCRLFClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
+       g_type_class_add_private (class, sizeof (CamelMimeFilterCRLFPrivate));
+
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_crlf_filter;
        mime_filter_class->complete = mime_filter_crlf_complete;
@@ -168,31 +170,13 @@ camel_mime_filter_crlf_class_init (CamelMimeFilterCRLFClass *class)
 static void
 camel_mime_filter_crlf_init (CamelMimeFilterCRLF *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterCRLFPrivate, 1);
+       filter->priv = CAMEL_MIME_FILTER_CRLF_GET_PRIVATE (filter);
 
        filter->priv->saw_cr = FALSE;
        filter->priv->saw_lf = TRUE;
        filter->priv->saw_dot = FALSE;
 }
 
-CamelType
-camel_mime_filter_crlf_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterCRLF",
-                                           sizeof (CamelMimeFilterCRLF),
-                                           sizeof (CamelMimeFilterCRLFClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_crlf_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_crlf_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_crlf_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_crlf_new:
  * @direction: encode vs decode
@@ -209,8 +193,8 @@ camel_mime_filter_crlf_new (CamelMimeFilterCRLFDirection direction,
        CamelMimeFilter *filter;
        CamelMimeFilterCRLFPrivate *priv;
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (CAMEL_MIME_FILTER_CRLF_TYPE));
-       priv = CAMEL_MIME_FILTER_CRLF (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_CRLF, NULL);
+       priv = CAMEL_MIME_FILTER_CRLF_GET_PRIVATE (filter);
 
        priv->direction = direction;
        priv->mode = mode;
index 34a5f32..810aab7 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_CRLF_TYPE         (camel_mime_filter_crlf_get_type ())
-#define CAMEL_MIME_FILTER_CRLF(obj)         CAMEL_CHECK_CAST (obj, CAMEL_MIME_FILTER_CRLF_TYPE, CamelMimeFilterCRLF)
-#define CAMEL_MIME_FILTER_CRLF_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, CAMEL_MIME_FILTER_CRLF_TYPE, CamelMimeFilterCRLFClass)
-#define CAMEL_IS_MIME_FILTER_CRLF(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_MIME_FILTER_CRLF_TYPE)
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_CRLF \
+       (camel_mime_filter_crlf_get_type ())
+#define CAMEL_MIME_FILTER_CRLF(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CRLF, CamelMimeFilterCRLF))
+#define CAMEL_MIME_FILTER_CRLF_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CRLF, CamelMimeFilterCRLFClass))
+#define CAMEL_IS_MIME_FILTER_CRLF(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CRLF))
+#define CAMEL_IS_MIME_FILTER_CRLF_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_CRLF))
+#define CAMEL_MIME_FILTER_CRLF_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_CRLF, CamelMimeFilterCRLFClass))
 
 G_BEGIN_DECLS
 
@@ -59,7 +73,7 @@ struct _CamelMimeFilterCRLFClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_crlf_get_type (void);
+GType          camel_mime_filter_crlf_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_crlf_new      (CamelMimeFilterCRLFDirection direction,
                                                 CamelMimeFilterCRLFMode mode);
index 9f1bbc5..115a348 100644 (file)
 #include "camel-mime-filter-enriched.h"
 #include "camel-string-utils.h"
 
+#define CAMEL_MIME_FILTER_ENRICHED_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnrichedPrivate))
+
 struct _CamelMimeFilterEnrichedPrivate {
        guint32 flags;
        gint nofill;
@@ -95,13 +99,7 @@ static struct {
 
 static GHashTable *enriched_hash = NULL;
 
-static CamelMimeFilterClass *parent_class = NULL;
-
-static void
-mime_filter_enriched_finalize (CamelMimeFilterEnriched *filter)
-{
-       g_free (filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterEnriched, camel_mime_filter_enriched, CAMEL_TYPE_MIME_FILTER)
 
 #if 0
 static gboolean
@@ -230,7 +228,7 @@ enriched_to_html (CamelMimeFilter *mime_filter,
        register const gchar *inptr;
        register gchar *outptr;
 
-       priv = CAMEL_MIME_FILTER_ENRICHED (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_ENRICHED_GET_PRIVATE (mime_filter);
 
        camel_mime_filter_set_size (mime_filter, inlen * 2 + 6, FALSE);
 
@@ -521,7 +519,7 @@ mime_filter_enriched_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterEnrichedPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_ENRICHED (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_ENRICHED_GET_PRIVATE (mime_filter);
 
        priv->nofill = 0;
 }
@@ -532,7 +530,7 @@ camel_mime_filter_enriched_class_init (CamelMimeFilterEnrichedClass *class)
        CamelMimeFilterClass *mime_filter_class;
        gint i;
 
-       parent_class = CAMEL_MIME_FILTER_CLASS (camel_mime_filter_get_type ());
+       g_type_class_add_private (class, sizeof (CamelMimeFilterEnrichedPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_enriched_filter;
@@ -551,26 +549,7 @@ camel_mime_filter_enriched_class_init (CamelMimeFilterEnrichedClass *class)
 static void
 camel_mime_filter_enriched_init (CamelMimeFilterEnriched *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterEnrichedPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_enriched_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterEnriched",
-                                           sizeof (CamelMimeFilterEnriched),
-                                           sizeof (CamelMimeFilterEnrichedClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_enriched_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_enriched_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_enriched_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_ENRICHED_GET_PRIVATE (filter);
 }
 
 /**
@@ -588,8 +567,8 @@ camel_mime_filter_enriched_new (guint32 flags)
        CamelMimeFilter *new;
        CamelMimeFilterEnrichedPrivate *priv;
 
-       new = CAMEL_MIME_FILTER (camel_object_new (CAMEL_TYPE_MIME_FILTER_ENRICHED));
-       priv = CAMEL_MIME_FILTER_ENRICHED (new)->priv;
+       new = g_object_new (CAMEL_TYPE_MIME_FILTER_ENRICHED, NULL);
+       priv = CAMEL_MIME_FILTER_ENRICHED_GET_PRIVATE (new);
 
        priv->flags = flags;
 
@@ -621,7 +600,7 @@ camel_enriched_to_html(const gchar *in, guint32 flags)
 
        camel_mime_filter_complete(filter, (gchar *)in, strlen(in), 0, &outbuf, &outlen, &outpre);
        outbuf = g_strndup (outbuf, outlen);
-       camel_object_unref (filter);
+       g_object_unref (filter);
 
        return outbuf;
 }
index 0916150..eeb5906 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_TYPE_MIME_FILTER_ENRICHED         (camel_mime_filter_enriched_get_type ())
-#define CAMEL_MIME_FILTER_ENRICHED(obj)         (CAMEL_CHECK_CAST (obj, CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnriched))
-#define CAMEL_MIME_FILTER_ENRICHED_CLASS(klass) (CAMEL_CHECK_CLASS_CAST (klass, CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnrichedClass))
-#define CAMEL_IS_MIME_FILTER_ENRICHED(obj)      (CAMEL_CHECK_TYPE (obj, CAMEL_TYPE_MIME_FILTER_ENRICHED))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_ENRICHED \
+       (camel_mime_filter_enriched_get_type ())
+#define CAMEL_MIME_FILTER_ENRICHED(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnriched))
+#define CAMEL_MIME_FILTER_ENRICHED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnrichedClass))
+#define CAMEL_IS_MIME_FILTER_ENRICHED(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_ENRICHED))
+#define CAMEL_IS_MIME_FILTER_ENRICHED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_ENRICHED))
+#define CAMEL_MIME_FILTER_ENRICHED_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_ENRICHED, CamelMimeFilterEnrichedClass))
 
 #define CAMEL_MIME_FILTER_ENRICHED_IS_RICHTEXT  (1 << 0)
 
@@ -51,7 +65,7 @@ struct _CamelMimeFilterEnrichedClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_enriched_get_type (void);
+GType          camel_mime_filter_enriched_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_enriched_new  (guint32 flags);
 gchar *                camel_enriched_to_html          (const gchar *in,
index 8ba5b45..ff078a2 100644 (file)
 
 #include "camel-mime-filter-from.h"
 
-#define d(x)
+#define CAMEL_MIME_FILTER_FROM_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_FROM, CamelMimeFilterFromPrivate))
 
-static CamelMimeFilterClass *camel_mime_filter_from_parent;
+#define d(x)
 
 struct _CamelMimeFilterFromPrivate {
        gboolean midline;       /* are we between lines? */
@@ -40,11 +42,7 @@ struct fromnode {
        const gchar *pointer;
 };
 
-static void
-mime_filter_from_finalize (CamelMimeFilterFrom *filter)
-{
-       g_free (filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterFrom, camel_mime_filter_from, CAMEL_TYPE_MIME_FILTER)
 
 /* Yes, it is complicated ... */
 static void
@@ -63,7 +61,7 @@ mime_filter_from_filter (CamelMimeFilter *mime_filter,
        struct fromnode *head = NULL, *tail = (struct fromnode *)&head, *node;
        gchar *outptr;
 
-       priv = CAMEL_MIME_FILTER_FROM (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_FROM_GET_PRIVATE (mime_filter);
 
        inptr = in;
        inend = inptr+len;
@@ -156,7 +154,7 @@ camel_mime_filter_from_class_init (CamelMimeFilterFromClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_from_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterFromPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_from_filter;
@@ -166,25 +164,7 @@ camel_mime_filter_from_class_init (CamelMimeFilterFromClass *class)
 static void
 camel_mime_filter_from_init (CamelMimeFilterFrom *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterFromPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_from_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterFrom",
-                                           sizeof (CamelMimeFilterFrom),
-                                           sizeof (CamelMimeFilterFromClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_from_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_from_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_from_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_FROM_GET_PRIVATE (filter);
 }
 
 /**
@@ -194,10 +174,10 @@ camel_mime_filter_from_get_type (void)
  *
  * Returns: a new #CamelMimeFilterFrom object
  **/
-CamelMimeFilter*
+CamelMimeFilter *
 camel_mime_filter_from_new (void)
 {
-       return (CamelMimeFilter *) camel_object_new (camel_mime_filter_from_get_type ());
+       return g_object_new (CAMEL_TYPE_MIME_FILTER_FROM, NULL);
 }
 
 #if 0
index efccdcc..34bdee8 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_FROM(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_from_get_type (), CamelMimeFilterFrom)
-#define CAMEL_MIME_FILTER_FROM_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_from_get_type (), CamelMimeFilterFromClass)
-#define CAMEL_IS_MIME_FILTER_FROM(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_from_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_FROM \
+       (camel_mime_filter_from_get_type ())
+#define CAMEL_MIME_FILTER_FROM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_FROM, CamelMimeFilterFrom))
+#define CAMEL_MIME_FILTER_FROM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_FROM, CamelMimeFilterFromClass))
+#define CAMEL_IS_MIME_FILTER_FROM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_FROM))
+#define CAMEL_IS_MIME_FILTER_FROM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_FROM))
+#define CAMEL_MIME_FILTER_FROM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_FROM, CamelMimeFilterFromClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +62,7 @@ struct _CamelMimeFilterFromClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_from_get_type (void);
+GType          camel_mime_filter_from_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_from_new      (void);
 
index 291df28..358bf2c 100644 (file)
 
 #include "camel-mime-filter-gzip.h"
 
+#define CAMEL_MIME_FILTER_GZIP_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZipPrivate))
+
 /* rfc1952 */
 
 enum {
@@ -91,7 +95,7 @@ struct _CamelMimeFilterGZipPrivate {
        guint32 isize;
 };
 
-static CamelMimeFilterClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelMimeFilterGZip, camel_mime_filter_gzip, CAMEL_TYPE_MIME_FILTER)
 
 static void
 gzip_filter (CamelMimeFilter *mime_filter,
@@ -106,7 +110,7 @@ gzip_filter (CamelMimeFilter *mime_filter,
        CamelMimeFilterGZipPrivate *priv;
        gint retval;
 
-       priv = CAMEL_MIME_FILTER_GZIP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
 
        if (!priv->state.zip.wrote_hdr) {
                priv->hdr.v.id1 = 31;
@@ -198,7 +202,7 @@ gunzip_filter (CamelMimeFilter *mime_filter,
        guint16 need, val;
        gint retval;
 
-       priv = CAMEL_MIME_FILTER_GZIP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
 
        if (!priv->state.unzip.got_hdr) {
                if (len < 10) {
@@ -339,11 +343,11 @@ gunzip_filter (CamelMimeFilter *mime_filter,
 }
 
 static void
-mime_filter_gzip_finalize (CamelObject *object)
+mime_filter_gzip_finalize (GObject *object)
 {
        CamelMimeFilterGZipPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_GZIP (object)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (object);
 
        if (priv->mode == CAMEL_MIME_FILTER_GZIP_MODE_ZIP)
                deflateEnd (priv->stream);
@@ -351,7 +355,9 @@ mime_filter_gzip_finalize (CamelObject *object)
                inflateEnd (priv->stream);
 
        g_free (priv->stream);
-       g_free (priv);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_filter_gzip_parent_class)->finalize (object);
 }
 
 static void
@@ -365,7 +371,7 @@ mime_filter_gzip_filter (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterGZipPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_GZIP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
 
        if (priv->mode == CAMEL_MIME_FILTER_GZIP_MODE_ZIP)
                gzip_filter (
@@ -388,7 +394,7 @@ mime_filter_gzip_complete (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterGZipPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_GZIP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
 
        if (priv->mode == CAMEL_MIME_FILTER_GZIP_MODE_ZIP)
                gzip_filter (
@@ -406,7 +412,7 @@ mime_filter_gzip_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterGZipPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_GZIP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
 
        memset (&priv->state, 0, sizeof (priv->state));
 
@@ -422,9 +428,13 @@ mime_filter_gzip_reset (CamelMimeFilter *mime_filter)
 static void
 camel_mime_filter_gzip_class_init (CamelMimeFilterGZipClass *class)
 {
+       GObjectClass *object_class;
        CamelMimeFilterClass *mime_filter_class;
 
-       parent_class = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterGZipPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_filter_gzip_finalize;
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_gzip_filter;
@@ -435,30 +445,11 @@ camel_mime_filter_gzip_class_init (CamelMimeFilterGZipClass *class)
 static void
 camel_mime_filter_gzip_init (CamelMimeFilterGZip *mime_filter)
 {
-       mime_filter->priv = g_new0 (CamelMimeFilterGZipPrivate, 1);
+       mime_filter->priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (mime_filter);
        mime_filter->priv->stream = g_new0 (z_stream, 1);
        mime_filter->priv->crc32 = crc32 (0, Z_NULL, 0);
 }
 
-CamelType
-camel_mime_filter_gzip_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterGZip",
-                                           sizeof (CamelMimeFilterGZip),
-                                           sizeof (CamelMimeFilterGZipClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_gzip_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_gzip_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_gzip_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_gzip_new:
  * @mode: zip or unzip
@@ -475,8 +466,8 @@ camel_mime_filter_gzip_new (CamelMimeFilterGZipMode mode, gint level)
        CamelMimeFilterGZipPrivate *priv;
        gint retval;
 
-       new = (CamelMimeFilter *) camel_object_new (CAMEL_TYPE_MIME_FILTER_GZIP);
-       priv = CAMEL_MIME_FILTER_GZIP (new)->priv;
+       new = g_object_new (CAMEL_TYPE_MIME_FILTER_GZIP, NULL);
+       priv = CAMEL_MIME_FILTER_GZIP_GET_PRIVATE (new);
 
        priv->mode = mode;
        priv->level = level;
@@ -487,9 +478,9 @@ camel_mime_filter_gzip_new (CamelMimeFilterGZipMode mode, gint level)
                retval = inflateInit2 (priv->stream, -MAX_WBITS);
 
        if (retval != Z_OK) {
-               camel_object_unref (new);
+               g_object_unref (new);
                return NULL;
        }
 
-       return (CamelMimeFilter *) new;
+       return new;
 }
index 041a5bb..d7ded75 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_TYPE_MIME_FILTER_GZIP            (camel_mime_filter_gzip_get_type ())
-#define CAMEL_MIME_FILTER_GZIP(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZip))
-#define CAMEL_MIME_FILTER_GZIP_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZipClass))
-#define CAMEL_IS_MIME_FILTER_GZIP(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_MIME_FILTER_GZIP))
-#define CAMEL_IS_MIME_FILTER_GZIP_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_MIME_FILTER_GZIP))
-#define CAMEL_MIME_FILTER_GZIP_GET_CLASS(obj)  (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZipClass))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_GZIP \
+       (camel_mime_filter_gzip_get_type ())
+#define CAMEL_MIME_FILTER_GZIP(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZip))
+#define CAMEL_MIME_FILTER_GZIP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZipClass))
+#define CAMEL_IS_MIME_FILTER_GZIP(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_GZIP))
+#define CAMEL_IS_MIME_FILTER_GZIP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_GZIP))
+#define CAMEL_MIME_FILTER_GZIP_GET_CLASS(obj) \
+       (CAMEL_CHECK_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_GZIP, CamelMimeFilterGZipClass))
 
 G_BEGIN_DECLS
 
@@ -56,7 +68,7 @@ struct _CamelMimeFilterGZipClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_gzip_get_type (void);
+GType          camel_mime_filter_gzip_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_gzip_new      (CamelMimeFilterGZipMode mode,
                                                 gint level);
index 314b477..2aca726 100644 (file)
 
 #define d(x)
 
-static CamelMimeFilterClass *camel_mime_filter_html_parent;
+#define CAMEL_MIME_FILTER_HTML_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_HTML, CamelMimeFilterHTMLPrivate))
 
 struct _CamelMimeFilterHTMLPrivate {
        CamelHTMLParser *ctxt;
 };
 
+G_DEFINE_TYPE (CamelMimeFilterHTML, camel_mime_filter_html, CAMEL_TYPE_MIME_FILTER)
+
 /* ********************************************************************** */
 
 #if 0
@@ -78,7 +82,7 @@ mime_filter_html_run (CamelMimeFilter *mime_filter,
        camel_html_parser_t state;
        gchar *outp;
 
-       priv = CAMEL_MIME_FILTER_HTML (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_HTML_GET_PRIVATE (mime_filter);
 
        d(printf("converting html:\n%.*s\n", (gint)inlen, in));
 
@@ -116,10 +120,19 @@ mime_filter_html_run (CamelMimeFilter *mime_filter,
 }
 
 static void
-mime_filter_html_finalize (CamelMimeFilterHTML *filter)
+mime_filter_html_dispose (GObject *object)
 {
-       camel_object_unref (filter->priv->ctxt);
-       g_free (filter->priv);
+       CamelMimeFilterHTMLPrivate *priv;
+
+       priv = CAMEL_MIME_FILTER_HTML_GET_PRIVATE (object);
+
+       if (priv->ctxt != NULL) {
+               g_object_unref (priv->ctxt);
+               priv->ctxt = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_mime_filter_html_parent_class)->dispose (object);
 }
 
 static void
@@ -155,18 +168,22 @@ mime_filter_html_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterHTMLPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_HTML (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_HTML_GET_PRIVATE (mime_filter);
 
-       camel_object_unref (priv->ctxt);
+       g_object_unref (priv->ctxt);
        priv->ctxt = camel_html_parser_new ();
 }
 
 static void
 camel_mime_filter_html_class_init (CamelMimeFilterHTMLClass *class)
 {
+       GObjectClass *object_class;
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_html_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterHTMLPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = mime_filter_html_dispose;
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_html_filter;
@@ -177,28 +194,10 @@ camel_mime_filter_html_class_init (CamelMimeFilterHTMLClass *class)
 static void
 camel_mime_filter_html_init (CamelMimeFilterHTML *mime_filter)
 {
-       mime_filter->priv = g_new0 (CamelMimeFilterHTMLPrivate, 1);
+       mime_filter->priv = CAMEL_MIME_FILTER_HTML_GET_PRIVATE (mime_filter);
        mime_filter->priv->ctxt = camel_html_parser_new ();
 }
 
-CamelType
-camel_mime_filter_html_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterHTML",
-                                           sizeof (CamelMimeFilterHTML),
-                                           sizeof (CamelMimeFilterHTMLClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_html_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_html_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_html_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_html_new:
  *
@@ -209,5 +208,5 @@ camel_mime_filter_html_get_type (void)
 CamelMimeFilter *
 camel_mime_filter_html_new (void)
 {
-       return (CamelMimeFilter *) camel_object_new (camel_mime_filter_html_get_type ());
+       return g_object_new (CAMEL_TYPE_MIME_FILTER_HTML, NULL);
 }
index a6d2b0f..a3144ca 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_HTML(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_html_get_type (), CamelMimeFilterHTML)
-#define CAMEL_MIME_FILTER_HTML_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_html_get_type (), CamelMimeFilterHTMLClass)
-#define CAMEL_IS_MIME_FILTER_HTML(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_html_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_HTML \
+       (camel_mime_filter_html_get_type ())
+#define CAMEL_MIME_FILTER_HTML(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_HTML, CamelMimeFilterHTML))
+#define CAMEL_MIME_FILTER_HTML_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_HTML, CamelMimeFilterHTMLClass))
+#define CAMEL_IS_MIME_FILTER_HTML(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_HTML))
+#define CAMEL_IS_MIME_FILTER_HTML_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_HTML))
+#define CAMEL_MIME_FILTER_HTML_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_HTML, CamelMimeFilterHTMLClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +62,7 @@ struct _CamelMimeFilterHTMLClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_html_get_type (void);
+GType          camel_mime_filter_html_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_html_new      (void);
 
index 6c0e50e..47c15dd 100644 (file)
 #include "camel-mime-filter-index.h"
 #include "camel-text-index.h"
 
+#define CAMEL_MIME_FILTER_INDEX_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_INDEX, CamelMimeFilterIndexPrivate))
+
 struct _CamelMimeFilterIndexPrivate {
        CamelIndex *index;
        CamelIndexName *name;
 };
 
-static CamelMimeFilterClass *camel_mime_filter_index_parent;
+G_DEFINE_TYPE (CamelMimeFilterIndex, camel_mime_filter_index, CAMEL_TYPE_MIME_FILTER)
 
 static void
-mime_filter_index_finalize (CamelMimeFilterIndex *mime_filter)
+mime_filter_index_dispose (GObject *object)
 {
-       if (mime_filter->priv->name)
-               camel_object_unref (mime_filter->priv->name);
-       camel_object_unref (mime_filter->priv->index);
-       g_free (mime_filter->priv);
+       CamelMimeFilterIndexPrivate *priv;
+
+       priv = CAMEL_MIME_FILTER_INDEX_GET_PRIVATE (object);
+
+       if (priv->name != NULL) {
+               g_object_unref (priv->name);
+               priv->name = NULL;
+       }
+
+       if (priv->index != NULL) {
+               g_object_unref (priv->index);
+               priv->index = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_mime_filter_index_parent_class)->dispose (object);
 }
 
 static void
@@ -48,7 +64,7 @@ mime_filter_index_filter (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterIndexPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_INDEX (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_INDEX_GET_PRIVATE (mime_filter);
 
        if (priv->index == NULL || priv->name==NULL) {
                goto donothing;
@@ -73,7 +89,7 @@ mime_filter_index_complete (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterIndexPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_INDEX (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_INDEX_GET_PRIVATE (mime_filter);
 
        if (priv->index == NULL || priv->name==NULL) {
                goto donothing;
@@ -91,9 +107,13 @@ donothing:
 static void
 camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *class)
 {
+       GObjectClass *object_class;
        CamelMimeFilterClass *mime_filter_class;
 
-       camel_mime_filter_index_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterIndexPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = mime_filter_index_dispose;
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_index_filter;
@@ -101,27 +121,9 @@ camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *class)
 }
 
 static void
-camel_mime_filter_index_init (CamelMimeFilterIndex *mime_filter)
+camel_mime_filter_index_init (CamelMimeFilterIndex *filter)
 {
-       mime_filter->priv = g_new0 (CamelMimeFilterIndexPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_index_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterIndex",
-                                           sizeof (CamelMimeFilterIndex),
-                                           sizeof (CamelMimeFilterIndexClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_index_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_index_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_index_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_INDEX_GET_PRIVATE (filter);
 }
 
 /**
@@ -138,13 +140,13 @@ camel_mime_filter_index_new (CamelIndex *index)
        CamelMimeFilter *new;
        CamelMimeFilterIndexPrivate *priv;
 
-       new = CAMEL_MIME_FILTER (camel_object_new (camel_mime_filter_index_get_type ()));
+       new = g_object_new (CAMEL_TYPE_MIME_FILTER_INDEX, NULL);
 
        if (new) {
-               priv = CAMEL_MIME_FILTER_INDEX (new)->priv;
+               priv = CAMEL_MIME_FILTER_INDEX_GET_PRIVATE (new);
                priv->index = index;
                if (index)
-                       camel_object_ref (index);
+                       g_object_ref (index);
        }
        return new;
 }
@@ -166,11 +168,11 @@ camel_mime_filter_index_set_name (CamelMimeFilterIndex *filter,
 
        if (name != NULL) {
                g_return_if_fail (CAMEL_IS_INDEX_NAME (name));
-               camel_object_ref (name);
+               g_object_ref (name);
        }
 
        if (filter->priv->name != NULL)
-               camel_object_unref (filter->priv->name);
+               g_object_unref (filter->priv->name);
 
        filter->priv->name = name;
 }
@@ -190,7 +192,7 @@ camel_mime_filter_index_set_index (CamelMimeFilterIndex *filter,
 
        if (index != NULL) {
                g_return_if_fail (CAMEL_IS_INDEX (index));
-               camel_object_ref (index);
+               g_object_ref (index);
        }
 
        if (filter->priv->index) {
@@ -200,7 +202,7 @@ camel_mime_filter_index_set_index (CamelMimeFilterIndex *filter,
                camel_mime_filter_complete (
                        CAMEL_MIME_FILTER (filter),
                        "", 0, 0, &out, &outlen, &outspace);
-               camel_object_unref (index);
+               g_object_unref (filter->priv->index);
        }
 
        filter->priv->index = index;
index c24006e..6cf994c 100644 (file)
 #include <camel/camel-index.h>
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_INDEX(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_index_get_type (), CamelMimeFilterIndex)
-#define CAMEL_MIME_FILTER_INDEX_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_index_get_type (), CamelMimeFilterIndexClass)
-#define CAMEL_IS_MIME_FILTER_INDEX(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_index_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_INDEX \
+       (camel_mime_filter_index_get_type ())
+#define CAMEL_MIME_FILTER_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_INDEX, CamelMimeFilterIndex))
+#define CAMEL_MIME_FILTER_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_INDEX, CamelMimeFilterIndexClass))
+#define CAMEL_IS_MIME_FILTER_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_INDEX))
+#define CAMEL_IS_MIME_FILTER_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_INDEX))
+#define CAMEL_MIME_FILTER_INDEX_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_INDEX, CamelMimeFilterIndexClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +63,7 @@ struct _CamelMimeFilterIndexClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_index_get_type(void);
+GType          camel_mime_filter_index_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_index_new     (CamelIndex *index);
 
index 3ffd6bf..0449d89 100644 (file)
 
 #include "camel-mime-filter-linewrap.h"
 
+#define CAMEL_MIME_FILTER_LINEWRAP_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_LINEWRAP, CamelMimeFilterLinewrapPrivate))
+
 struct _CamelMimeFilterLinewrapPrivate {
        guint wrap_len;
        guint max_len;
@@ -35,11 +39,7 @@ struct _CamelMimeFilterLinewrapPrivate {
        guint32 flags;
 };
 
-static void
-mime_filter_linewrap_finalize (CamelMimeFilterLinewrap *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterLinewrap, camel_mime_filter_linewrap, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_linewrap_filter (CamelMimeFilter *mime_filter,
@@ -55,7 +55,7 @@ mime_filter_linewrap_filter (CamelMimeFilter *mime_filter,
        const gchar *inend, *p;
        gint nchars;
 
-       priv = CAMEL_MIME_FILTER_LINEWRAP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_LINEWRAP_GET_PRIVATE (mime_filter);
 
        nchars = priv->nchars;
 
@@ -158,7 +158,7 @@ mime_filter_linewrap_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterLinewrapPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_LINEWRAP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_LINEWRAP_GET_PRIVATE (mime_filter);
 
        priv->nchars = 0;
 }
@@ -168,6 +168,8 @@ camel_mime_filter_linewrap_class_init (CamelMimeFilterLinewrapClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
+       g_type_class_add_private (class, sizeof (CamelMimeFilterLinewrapPrivate));
+
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_linewrap_filter;
        mime_filter_class->complete = mime_filter_linewrap_complete;
@@ -175,27 +177,9 @@ camel_mime_filter_linewrap_class_init (CamelMimeFilterLinewrapClass *class)
 }
 
 static void
-camel_mime_filter_linewrap_init (CamelMimeFilterLinewrap *mime_filter)
+camel_mime_filter_linewrap_init (CamelMimeFilterLinewrap *filter)
 {
-       mime_filter->priv = g_new0 (CamelMimeFilterLinewrapPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_linewrap_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterLinewrap",
-                                           sizeof (CamelMimeFilterLinewrap),
-                                           sizeof (CamelMimeFilterLinewrapClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_linewrap_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_linewrap_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_linewrap_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_LINEWRAP_GET_PRIVATE (filter);
 }
 
 CamelMimeFilter *
@@ -207,8 +191,8 @@ camel_mime_filter_linewrap_new (guint preferred_len,
        CamelMimeFilter *filter;
        CamelMimeFilterLinewrapPrivate *priv;
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (CAMEL_MIME_FILTER_LINEWRAP_TYPE));
-       priv = CAMEL_MIME_FILTER_LINEWRAP (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_LINEWRAP, NULL);
+       priv = CAMEL_MIME_FILTER_LINEWRAP_GET_PRIVATE (filter);
 
        priv->indent = indent_char;
        priv->wrap_len = preferred_len;
index cf1a57d..a9831af 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_LINEWRAP_TYPE         (camel_mime_filter_linewrap_get_type ())
-#define CAMEL_MIME_FILTER_LINEWRAP(obj)         CAMEL_CHECK_CAST (obj, CAMEL_MIME_FILTER_LINEWRAP_TYPE, CamelMimeFilterLinewrap)
-#define CAMEL_MIME_FILTER_LINEWRAP_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, CAMEL_MIME_FILTER_LINEWRAP_TYPE, CamelMimeFilterLinewrapClass)
-#define CAMEL_IS_MIME_FILTER_LINEWRAP(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_MIME_FILTER_LINEWRAP_TYPE)
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_LINEWRAP \
+       (camel_mime_filter_linewrap_get_type ())
+#define CAMEL_MIME_FILTER_LINEWRAP(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_LINEWRAP, CamelMimeFilterLinewrap))
+#define CAMEL_MIME_FILTER_LINEWRAP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_LINEWRAP, CamelMimeFilterLinewrapClass))
+#define CAMEL_IS_MIME_FILTER_LINEWRAP(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_LINEWRAP))
+#define CAMEL_IS_MIME_FILTER_LINEWRAP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_LINEWRAP))
+#define CAMEL_MIME_FILTER_LINEWRAP_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_LINEWRAP, CamelMimeFilterLinewrapClass))
 
 G_BEGIN_DECLS
 
@@ -53,7 +67,7 @@ struct _CamelMimeFilterLinewrapClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_linewrap_get_type (void);
+GType          camel_mime_filter_linewrap_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_linewrap_new  (guint preferred_len,
                                                 guint max_len,
index 8becbc8..c9a539a 100644 (file)
 
 #include "camel-mime-filter-pgp.h"
 
+#define CAMEL_MIME_FILTER_PGP_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PGP, CamelMimeFilterPgpPrivate))
+
 #define BEGIN_PGP_SIGNED_MESSAGE "-----BEGIN PGP SIGNED MESSAGE-----"
 #define BEGIN_PGP_SIGNATURE      "-----BEGIN PGP SIGNATURE-----"
 #define END_PGP_SIGNATURE        "-----END PGP SIGNATURE-----"
@@ -51,6 +55,8 @@ enum {
        PGP_FOOTER
 };
 
+G_DEFINE_TYPE (CamelMimeFilterPgp, camel_mime_filter_pgp, CAMEL_TYPE_MIME_FILTER)
+
 static void
 mime_filter_pgp_run (CamelMimeFilter *mime_filter,
                      const gchar *in,
@@ -68,7 +74,7 @@ mime_filter_pgp_run (CamelMimeFilter *mime_filter,
        gboolean blank;
        gsize len;
 
-       priv = CAMEL_MIME_FILTER_PGP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_PGP_GET_PRIVATE (mime_filter);
 
        /* only need as much space as the input, we're stripping chars */
        camel_mime_filter_set_size (mime_filter, inlen, FALSE);
@@ -145,12 +151,6 @@ mime_filter_pgp_run (CamelMimeFilter *mime_filter,
 }
 
 static void
-mime_filter_pgp_finalize (CamelMimeFilterPgp *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
-
-static void
 mime_filter_pgp_filter (CamelMimeFilter *mime_filter,
                         const gchar *in,
                         gsize len,
@@ -183,7 +183,7 @@ mime_filter_pgp_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterPgpPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_PGP (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_PGP_GET_PRIVATE (mime_filter);
 
        priv->state = PGP_PREFACE;
 }
@@ -193,6 +193,8 @@ camel_mime_filter_pgp_class_init (CamelMimeFilterPgpClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
+       g_type_class_add_private (class, sizeof (CamelMimeFilterPgpPrivate));
+
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_pgp_filter;
        mime_filter_class->complete = mime_filter_pgp_complete;
@@ -200,32 +202,13 @@ camel_mime_filter_pgp_class_init (CamelMimeFilterPgpClass *class)
 }
 
 static void
-camel_mime_filter_pgp_init (CamelMimeFilterPgp *mime_filter)
-{
-       mime_filter->priv = g_new0 (CamelMimeFilterPgpPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_pgp_get_type (void)
+camel_mime_filter_pgp_init (CamelMimeFilterPgp *filter)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterPgp",
-                                           sizeof (CamelMimeFilterPgp),
-                                           sizeof (CamelMimeFilterPgpClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_pgp_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_pgp_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_pgp_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_PGP_GET_PRIVATE (filter);
 }
 
 CamelMimeFilter *
 camel_mime_filter_pgp_new (void)
 {
-       return (CamelMimeFilter *) camel_object_new (camel_mime_filter_pgp_get_type ());
+       return g_object_new (CAMEL_TYPE_MIME_FILTER_PGP, NULL);
 }
index a296513..3c11358 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_PGP_TYPE         (camel_mime_filter_pgp_get_type ())
-#define CAMEL_MIME_FILTER_PGP(obj)         CAMEL_CHECK_CAST (obj, CAMEL_MIME_FILTER_PGP_TYPE, CamelMimeFilterPgp)
-#define CAMEL_MIME_FILTER_PGP_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, CAMEL_MIME_FILTER_PGP_TYPE, CamelMimeFilterPgpClass)
-#define CAMEL_IS_MIME_FILTER_PGP(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_MIME_FILTER_PGP_TYPE)
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_PGP \
+       (camel_mime_filter_pgp_get_type ())
+#define CAMEL_MIME_FILTER_PGP(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PGP, CamelMimeFilterPgp))
+#define CAMEL_MIME_FILTER_PGP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_PGP, CamelMimeFilterPgpClass))
+#define CAMEL_IS_MIME_FILTER_PGP(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PGP))
+#define CAMEL_IS_MIME_FILTER_PGP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_PGP))
+#define CAMEL_MIME_FILTER_PGP_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PGP, CamelMimeFilterPgpClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +62,7 @@ struct _CamelMimeFilterPgpClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_pgp_get_type  (void);
+GType          camel_mime_filter_pgp_get_type  (void);
 CamelMimeFilter *
                camel_mime_filter_pgp_new       (void);
 
index 5b2da8e..ccf4ba7 100644 (file)
 
 #include "camel-mime-filter-progress.h"
 
+#define CAMEL_MIME_FILTER_PROGRESS_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PROGRESS, CamelMimeFilterProgressPrivate))
+
 #define d(x)
 #define w(x)
 
@@ -38,13 +42,7 @@ struct _CamelMimeFilterProgressPrivate {
        gsize count;
 };
 
-static CamelMimeFilterClass *parent_class = NULL;
-
-static void
-mime_filter_progress_finalize (CamelMimeFilterProgress *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterProgress, camel_mime_filter_progress, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_progress_filter (CamelMimeFilter *mime_filter,
@@ -58,8 +56,7 @@ mime_filter_progress_filter (CamelMimeFilter *mime_filter,
        CamelMimeFilterProgressPrivate *priv;
        gdouble percent;
 
-       priv = CAMEL_MIME_FILTER_PROGRESS (mime_filter)->priv;
-
+       priv = CAMEL_MIME_FILTER_PROGRESS_GET_PRIVATE (mime_filter);
        priv->count += len;
 
        if (priv->count < priv->total)
@@ -93,7 +90,7 @@ mime_filter_progress_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterProgressPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_PROGRESS (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_PROGRESS_GET_PRIVATE (mime_filter);
 
        priv->count = 0;
 }
@@ -103,7 +100,7 @@ camel_mime_filter_progress_class_init (CamelMimeFilterProgressClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
-       parent_class = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterProgressPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_progress_filter;
@@ -112,28 +109,9 @@ camel_mime_filter_progress_class_init (CamelMimeFilterProgressClass *class)
 }
 
 static void
-camel_mime_filter_progress_init (CamelMimeFilterProgress *mime_filter)
+camel_mime_filter_progress_init (CamelMimeFilterProgress *filter)
 {
-       mime_filter->priv = g_new0 (CamelMimeFilterProgressPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_progress_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterProgress",
-                                           sizeof (CamelMimeFilterProgress),
-                                           sizeof (CamelMimeFilterProgressClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_progress_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_progress_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_progress_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_PROGRESS_GET_PRIVATE (filter);
 }
 
 /**
@@ -155,8 +133,10 @@ camel_mime_filter_progress_new (CamelOperation *operation,
        CamelMimeFilter *filter;
        CamelMimeFilterProgressPrivate *priv;
 
-       filter = (CamelMimeFilter *) camel_object_new (camel_mime_filter_progress_get_type ());
-       priv = CAMEL_MIME_FILTER_PROGRESS (filter)->priv;
+       g_return_val_if_fail (operation != NULL, NULL);
+
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_PROGRESS, NULL);
+       priv = CAMEL_MIME_FILTER_PROGRESS_GET_PRIVATE (filter);
 
        priv->operation = operation;
        priv->total = total;
index 7c033e6..701aa94 100644 (file)
 #include <camel/camel-operation.h>
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_PROGRESS(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_progress_get_type (), CamelMimeFilterProgress)
-#define CAMEL_MIME_FILTER_PROGRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_progress_get_type (), CamelMimeFilterProgressClass)
-#define CAMEL_IS_MIME_FILTER_PROGRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_progress_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_PROGRESS \
+       (camel_mime_filter_progress_get_type ())
+#define CAMEL_MIME_FILTER_PROGRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PROGRESS, CamelMimeFilterProgress))
+#define CAMEL_MIME_FILTER_PROGRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_PROGRESS, CamelMimeFilterProgressClass))
+#define CAMEL_IS_MIME_FILTER_PROGRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PROGRESS))
+#define CAMEL_IS_MIME_FILTER_PROGRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_PROGRESS))
+#define CAMEL_MIME_FILTER_PROGRESS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_PROGRESS, CamelMimeFilterProgressClass))
 
 G_BEGIN_DECLS
 
@@ -54,7 +69,7 @@ struct _CamelMimeFilterProgressClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_progress_get_type (void);
+GType          camel_mime_filter_progress_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_progress_new  (CamelOperation *operation,
                                                 gsize total);
index f0a6eb1..2260cf3 100644 (file)
 #include "camel-mime-filter-save.h"
 #include "camel-stream-mem.h"
 
+#define CAMEL_MIME_FILTER_SAVE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_SAVE, CamelMimeFilterSavePrivate))
+
 struct _CamelMimeFilterSavePrivate {
        CamelStream *stream;
 };
 
-static void
-mime_filter_save_finalize (CamelMimeFilterSave *mime_filter)
-{
-       g_free (mime_filter->priv);
-}
+G_DEFINE_TYPE (CamelMimeFilterSave, camel_mime_filter_save, CAMEL_TYPE_MIME_FILTER)
 
 static void
 mime_filter_save_filter (CamelMimeFilter *mime_filter,
@@ -48,7 +48,7 @@ mime_filter_save_filter (CamelMimeFilter *mime_filter,
 {
        CamelMimeFilterSavePrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_SAVE (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (mime_filter);
 
        if (priv->stream != NULL)
                camel_stream_write (priv->stream, in, len);
@@ -84,6 +84,8 @@ camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
+       g_type_class_add_private (class, sizeof (CamelMimeFilterSavePrivate));
+
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_save_filter;
        mime_filter_class->complete = mime_filter_save_complete;
@@ -91,27 +93,9 @@ camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *class)
 }
 
 static void
-camel_mime_filter_save_init (CamelMimeFilterSave *mime_filter)
-{
-       mime_filter->priv = g_new0 (CamelMimeFilterSavePrivate, 1);
-}
-
-CamelType
-camel_mime_filter_save_get_type (void)
+camel_mime_filter_save_init (CamelMimeFilterSave *filter)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterSave",
-                                           sizeof (CamelMimeFilterSave),
-                                           sizeof (CamelMimeFilterSaveClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_save_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_save_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_save_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (filter);
 }
 
 /**
@@ -132,12 +116,13 @@ camel_mime_filter_save_new (CamelStream *stream)
        if (stream != NULL)
                g_return_val_if_fail (CAMEL_IS_STREAM (stream), NULL);
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (CAMEL_MIME_FILTER_SAVE_TYPE));
-       priv = CAMEL_MIME_FILTER_SAVE (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_SAVE, NULL);
+       priv = CAMEL_MIME_FILTER_SAVE_GET_PRIVATE (filter);
 
-       priv->stream = stream;
        if (stream != NULL)
-               camel_object_ref (stream);
+               priv->stream = g_object_ref (stream);
+       else
+               priv->stream = camel_stream_mem_new ();
 
        return filter;
 }
index 6b5527c..4da8213 100644 (file)
 #include <camel/camel-mime-filter.h>
 #include <camel/camel-seekable-stream.h>
 
-#define CAMEL_MIME_FILTER_SAVE_TYPE         (camel_mime_filter_save_get_type ())
-#define CAMEL_MIME_FILTER_SAVE(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_save_get_type (), CamelMimeFilterSave)
-#define CAMEL_MIME_FILTER_SAVE_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_save_get_type (), CamelMimeFilterSaveClass)
-#define CAMEL_IS_MIME_FILTER_SAVE(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_save_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_SAVE \
+       (camel_mime_filter_save_get_type ())
+#define CAMEL_MIME_FILTER_SAVE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_SAVE, CamelMimeFilterSave))
+#define CAMEL_MIME_FILTER_SAVE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_SAVE, CamelMimeFilterSaveClass))
+#define CAMEL_IS_MIME_FILTER_SAVE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_SAVE))
+#define CAMEL_IS_MIME_FILTER_SAVE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_SAVE))
+#define CAMEL_MIME_FILTER_SAVE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_SAVE, CamelMimeFilterSaveClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +64,7 @@ struct _CamelMimeFilterSaveClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_save_get_type (void);
+GType          camel_mime_filter_save_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_save_new      (CamelStream *stream);
 
index 7fd5502..bf96d04 100644 (file)
 #include "camel-url-scanner.h"
 #include "camel-utf8.h"
 
+#define CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_TOHTML, CamelMimeFilterToHTMLPrivate))
+
 struct _CamelMimeFilterToHTMLPrivate {
 
        CamelUrlScanner *scanner;
@@ -79,7 +83,7 @@ static struct {
        { CONVERT_ADDRSPEC, { "@",         "mailto:", camel_url_addrspec_start, camel_url_addrspec_end } },
 };
 
-static CamelMimeFilterClass *camel_mime_filter_tohtml_parent;
+G_DEFINE_TYPE (CamelMimeFilterToHTML, camel_mime_filter_tohtml, CAMEL_TYPE_MIME_FILTER)
 
 static gchar *
 check_size (CamelMimeFilter *mime_filter,
@@ -155,7 +159,7 @@ writeln (CamelMimeFilter *mime_filter,
        CamelMimeFilterToHTMLPrivate *priv;
        const guchar *inptr = in;
 
-       priv = CAMEL_MIME_FILTER_TOHTML (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (mime_filter);
 
        while (inptr < inend) {
                guint32 u;
@@ -235,7 +239,7 @@ html_convert (CamelMimeFilter *mime_filter,
        const gchar *inend;
        gint depth;
 
-       priv = CAMEL_MIME_FILTER_TOHTML (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (mime_filter);
 
        if (inlen == 0) {
                if (priv->pre_open) {
@@ -389,11 +393,16 @@ html_convert (CamelMimeFilter *mime_filter,
 }
 
 static void
-camel_mime_filter_tohtml_finalize (CamelMimeFilterToHTML *mime_filter)
+mime_filter_tohtml_finalize (GObject *object)
 {
-       camel_url_scanner_free (mime_filter->priv->scanner);
+       CamelMimeFilterToHTMLPrivate *priv;
+
+       priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (object);
 
-       g_free (mime_filter->priv);
+       camel_url_scanner_free (priv->scanner);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_filter_tohtml_parent_class)->finalize (object);
 }
 
 static void
@@ -429,7 +438,7 @@ mime_filter_tohtml_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterToHTMLPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_TOHTML (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (mime_filter);
 
        priv->column = 0;
        priv->pre_open = FALSE;
@@ -438,43 +447,28 @@ mime_filter_tohtml_reset (CamelMimeFilter *mime_filter)
 static void
 camel_mime_filter_tohtml_class_init (CamelMimeFilterToHTMLClass *class)
 {
-       CamelMimeFilterClass *mime_filter_class;
+       GObjectClass *object_class;
+       CamelMimeFilterClass *filter_class;
+
+       g_type_class_add_private (class, sizeof (CamelMimeFilterToHTMLPrivate));
 
-       camel_mime_filter_tohtml_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_filter_tohtml_finalize;
 
-       mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
-       mime_filter_class->filter = mime_filter_tohtml_filter;
-       mime_filter_class->complete = mime_filter_tohtml_complete;
-       mime_filter_class->reset = mime_filter_tohtml_reset;
+       filter_class = CAMEL_MIME_FILTER_CLASS (class);
+       filter_class->filter = mime_filter_tohtml_filter;
+       filter_class->complete = mime_filter_tohtml_complete;
+       filter_class->reset = mime_filter_tohtml_reset;
 }
 
 static void
 camel_mime_filter_tohtml_init (CamelMimeFilterToHTML *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterToHTMLPrivate, 1);
+       filter->priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (filter);
 
        filter->priv->scanner = camel_url_scanner_new ();
 }
 
-CamelType
-camel_mime_filter_tohtml_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterToHTML",
-                                           sizeof (CamelMimeFilterToHTML),
-                                           sizeof (CamelMimeFilterToHTMLClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_tohtml_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_tohtml_init,
-                                           (CamelObjectFinalizeFunc) camel_mime_filter_tohtml_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_tohtml_new:
  * @flags: bitwise flags defining the behaviour
@@ -492,8 +486,8 @@ camel_mime_filter_tohtml_new (guint32 flags, guint32 color)
        CamelMimeFilterToHTMLPrivate *priv;
        gint i;
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (camel_mime_filter_tohtml_get_type ()));
-       priv = CAMEL_MIME_FILTER_TOHTML (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_TOHTML, NULL);
+       priv = CAMEL_MIME_FILTER_TOHTML_GET_PRIVATE (filter);
 
        priv->flags = flags;
        priv->color = color;
@@ -534,7 +528,7 @@ camel_text_to_html (const gchar *in, guint32 flags, guint32 color)
 
        outbuf = g_strndup (outbuf, outlen);
 
-       camel_object_unref (filter);
+       g_object_unref (filter);
 
        return outbuf;
 }
index 78a78b7..836b3f9 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_TOHTML(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_tohtml_get_type (), CamelMimeFilterToHTML)
-#define CAMEL_MIME_FILTER_TOHTML_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_tohtml_get_type (), CamelMimeFilterToHTMLClass)
-#define CAMEL_IS_MIME_FILTER_TOHTML(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_tohtml_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_TOHTML \
+       (camel_mime_filter_tohtml_get_type ())
+#define CAMEL_MIME_FILTER_TOHTML(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_TOHTML, CamelMimeFilterToHTML))
+#define CAMEL_MIME_FILTER_TOHTML_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_TOHTML, CamelMimeFilterToHTMLClass))
+#define CAMEL_IS_MIME_FILTER_TOHTML(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_TOHTML))
+#define CAMEL_IS_MIME_FILTER_TOHTML_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_TOHTML))
+#define CAMEL_MIME_FILTER_TOHTML_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_TOHTML, CamelMimeFilterToHTMLClass))
 
 #define CAMEL_MIME_FILTER_TOHTML_PRE               (1 << 0)
 #define CAMEL_MIME_FILTER_TOHTML_CONVERT_NL        (1 << 1)
@@ -59,7 +74,7 @@ struct _CamelMimeFilterToHTMLClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_tohtml_get_type (void);
+GType          camel_mime_filter_tohtml_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_tohtml_new    (guint32 flags,
                                                 guint32 color);
index 5845b2e..0f62acf 100644 (file)
 #include "camel-charset-map.h"
 #include "camel-mime-filter-windows.h"
 
+#define CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_WINDOWS, CamelMimeFilterWindowsPrivate))
+
 #define d(x)
 #define w(x)
 
-static CamelMimeFilterClass *parent_class = NULL;
-
 struct _CamelMimeFilterWindowsPrivate {
        gboolean is_windows;
        gchar *claimed_charset;
 };
 
+G_DEFINE_TYPE (CamelMimeFilterWindows, camel_mime_filter_windows, CAMEL_TYPE_MIME_FILTER)
+
 static void
-mime_filter_windows_finalize (CamelMimeFilterWindows *mime_filter)
+mime_filter_windows_finalize (GObject *object)
 {
-       g_free (mime_filter->priv->claimed_charset);
-       g_free (mime_filter->priv);
+       CamelMimeFilterWindowsPrivate *priv;
+
+       priv = CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE (object);
+
+       g_free (priv->claimed_charset);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_filter_windows_parent_class)->finalize (object);
 }
 
 static void
@@ -61,7 +71,7 @@ mime_filter_windows_filter (CamelMimeFilter *mime_filter,
        register guchar *inptr;
        guchar *inend;
 
-       priv = CAMEL_MIME_FILTER_WINDOWS (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE (mime_filter);
 
        if (!priv->is_windows) {
                inptr = (guchar *) in;
@@ -103,7 +113,7 @@ mime_filter_windows_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterWindowsPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_WINDOWS (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE (mime_filter);
 
        priv->is_windows = FALSE;
 }
@@ -111,9 +121,13 @@ mime_filter_windows_reset (CamelMimeFilter *mime_filter)
 static void
 camel_mime_filter_windows_class_init (CamelMimeFilterWindowsClass *class)
 {
+       GObjectClass *object_class;
        CamelMimeFilterClass *mime_filter_class;
 
-       parent_class = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterWindowsPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_filter_windows_finalize;
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_windows_filter;
@@ -122,28 +136,9 @@ camel_mime_filter_windows_class_init (CamelMimeFilterWindowsClass *class)
 }
 
 static void
-camel_mime_filter_windows_init (CamelMimeFilterWindows *mime_filter)
-{
-       mime_filter->priv = g_new0 (CamelMimeFilterWindowsPrivate, 1);
-}
-
-CamelType
-camel_mime_filter_windows_get_type (void)
+camel_mime_filter_windows_init (CamelMimeFilterWindows *filter)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterWindows",
-                                           sizeof (CamelMimeFilterWindows),
-                                           sizeof (CamelMimeFilterWindowsClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_windows_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_windows_init,
-                                           (CamelObjectFinalizeFunc) mime_filter_windows_finalize);
-       }
-
-       return type;
+       filter->priv = CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE (filter);
 }
 
 /**
@@ -163,8 +158,8 @@ camel_mime_filter_windows_new (const gchar *claimed_charset)
 
        g_return_val_if_fail (claimed_charset != NULL, NULL);
 
-       filter = CAMEL_MIME_FILTER (camel_object_new (camel_mime_filter_windows_get_type ()));
-       priv = CAMEL_MIME_FILTER_WINDOWS (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_WINDOWS, NULL);
+       priv = CAMEL_MIME_FILTER_WINDOWS_GET_PRIVATE (filter);
 
        priv->claimed_charset = g_strdup (claimed_charset);
 
index 2228b92..62401cd 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_MIME_FILTER_WINDOWS(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_windows_get_type (), CamelMimeFilterWindows)
-#define CAMEL_MIME_FILTER_WINDOWS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_windows_get_type (), CamelMimeFilterWindowsClass)
-#define CAMEL_IS_MIME_FILTER_WINDOWS(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_windows_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_WINDOWS \
+       (camel_mime_filter_windows_get_type ())
+#define CAMEL_MIME_FILTER_WINDOWS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_WINDOWS, CamelMimeFilterWindows))
+#define CAMEL_MIME_FILTER_WINDOWS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_WINDOWS, CamelMimeFilterWindowsClass))
+#define CAMEL_IS_MIME_FILTER_WINDOWS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_WINDOWS))
+#define CAMEL_IS_MIME_FILTER_WINDOWS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_WINDOWS))
+#define CAMEL_MIME_FILTER_WINDOWS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_WINDOWS, CamelMimeFilterWindowsClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +63,7 @@ struct _CamelMimeFilterWindowsClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_windows_get_type (void);
+GType          camel_mime_filter_windows_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_windows_new
                                        (const gchar *claimed_charset);
index b50fd67..2d1fc93 100644 (file)
 
 #include "camel-mime-filter-yenc.h"
 
+#define CAMEL_MIME_FILTER_YENC_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYencPrivate))
+
 struct _CamelMimeFilterYencPrivate {
 
        CamelMimeFilterYencDirection direction;
@@ -39,7 +43,7 @@ struct _CamelMimeFilterYencPrivate {
        guint32 crc;
 };
 
-static CamelMimeFilterClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelMimeFilterYenc, camel_mime_filter_yenc, CAMEL_TYPE_MIME_FILTER)
 
 /* here we do all of the basic yEnc filtering */
 static void
@@ -54,7 +58,7 @@ mime_filter_yenc_filter (CamelMimeFilter *mime_filter,
        CamelMimeFilterYencPrivate *priv;
        gsize newlen = 0;
 
-       priv = CAMEL_MIME_FILTER_YENC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_YENC_GET_PRIVATE (mime_filter);
 
        switch (priv->direction) {
                case CAMEL_MIME_FILTER_YENC_DIRECTION_ENCODE:
@@ -163,7 +167,7 @@ mime_filter_yenc_complete (CamelMimeFilter *mime_filter,
        CamelMimeFilterYencPrivate *priv;
        gsize newlen = 0;
 
-       priv = CAMEL_MIME_FILTER_YENC (mime_filter)->priv;
+       priv = CAMEL_MIME_FILTER_YENC_GET_PRIVATE (mime_filter);
 
        switch (priv->direction) {
        case CAMEL_MIME_FILTER_YENC_DIRECTION_ENCODE:
@@ -201,11 +205,11 @@ mime_filter_yenc_complete (CamelMimeFilter *mime_filter,
 
 /* should this 'flush' outstanding state/data bytes? */
 static void
-mime_filter_yenc_reset (CamelMimeFilter *filter)
+mime_filter_yenc_reset (CamelMimeFilter *mime_filter)
 {
        CamelMimeFilterYencPrivate *priv;
 
-       priv = CAMEL_MIME_FILTER_YENC (filter)->priv;
+       priv = CAMEL_MIME_FILTER_YENC_GET_PRIVATE (mime_filter);
 
        switch (priv->direction) {
                case CAMEL_MIME_FILTER_YENC_DIRECTION_ENCODE:
@@ -225,7 +229,7 @@ camel_mime_filter_yenc_class_init (CamelMimeFilterYencClass *class)
 {
        CamelMimeFilterClass *mime_filter_class;
 
-       parent_class = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimeFilterYencPrivate));
 
        mime_filter_class = CAMEL_MIME_FILTER_CLASS (class);
        mime_filter_class->filter = mime_filter_yenc_filter;
@@ -236,31 +240,13 @@ camel_mime_filter_yenc_class_init (CamelMimeFilterYencClass *class)
 static void
 camel_mime_filter_yenc_init (CamelMimeFilterYenc *filter)
 {
-       filter->priv = g_new0 (CamelMimeFilterYencPrivate, 1);
+       filter->priv = CAMEL_MIME_FILTER_YENC_GET_PRIVATE (filter);
+
        filter->priv->part = 0;
        filter->priv->pcrc = CAMEL_MIME_YENCODE_CRC_INIT;
        filter->priv->crc = CAMEL_MIME_YENCODE_CRC_INIT;
 }
 
-CamelType
-camel_mime_filter_yenc_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_mime_filter_get_type (),
-                                           "CamelMimeFilterYenc",
-                                           sizeof (CamelMimeFilterYenc),
-                                           sizeof (CamelMimeFilterYencClass),
-                                           (CamelObjectClassInitFunc) camel_mime_filter_yenc_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_filter_yenc_init,
-                                           NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_mime_filter_yenc_new:
  * @direction: encode direction
@@ -275,8 +261,8 @@ camel_mime_filter_yenc_new (CamelMimeFilterYencDirection direction)
        CamelMimeFilter *filter;
        CamelMimeFilterYencPrivate *priv;
 
-       filter = (CamelMimeFilter *) camel_object_new (CAMEL_TYPE_MIME_FILTER_YENC);
-       priv = CAMEL_MIME_FILTER_YENC (filter)->priv;
+       filter = g_object_new (CAMEL_TYPE_MIME_FILTER_YENC, NULL);
+       priv = CAMEL_MIME_FILTER_YENC_GET_PRIVATE (filter);
 
        priv->direction = direction;
 
index 5d888ea..8e36ebc 100644 (file)
 
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_TYPE_MIME_FILTER_YENC            (camel_mime_filter_yenc_get_type ())
-#define CAMEL_MIME_FILTER_YENC(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYenc))
-#define CAMEL_MIME_FILTER_YENC_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYencClass))
-#define CAMEL_IS_MIME_FILTER_YENC(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_MIME_FILTER_YENC))
-#define CAMEL_IS_MIME_FILTER_YENC_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_MIME_FILTER_YENC))
-#define CAMEL_MIME_FILTER_YENC_GET_CLASS(obj)  (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYencClass))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER_YENC \
+       (camel_mime_filter_yenc_get_type ())
+#define CAMEL_MIME_FILTER_YENC(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYenc))
+#define CAMEL_MIME_FILTER_YENC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYencClass))
+#define CAMEL_IS_MIME_FILTER_YENC(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER_YENC))
+#define CAMEL_IS_MIME_FILTER_YENC_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER_YENC))
+#define CAMEL_MIME_FILTER_YENC_GET_CLASS(obj) \
+       (CAMEL_CHECK_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER_YENC, CamelMimeFilterYencClass))
 
 G_BEGIN_DECLS
 
@@ -75,7 +87,7 @@ struct _CamelMimeFilterYencClass {
        CamelMimeFilterClass parent_class;
 };
 
-CamelType      camel_mime_filter_yenc_get_type (void);
+GType          camel_mime_filter_yenc_get_type (void);
 CamelMimeFilter *
                camel_mime_filter_yenc_new      (CamelMimeFilterYencDirection direction);
 void           camel_mime_filter_yenc_set_state(CamelMimeFilterYenc *yenc,
index 71a705e..f762549 100644 (file)
 #include <mcheck.h>
 #endif
 
+#define CAMEL_MIME_FILTER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_FILTER, CamelMimeFilterPrivate))
+
 struct _CamelMimeFilterPrivate {
        gchar *inbuf;
        gsize inlen;
@@ -37,10 +41,10 @@ struct _CamelMimeFilterPrivate {
 #define PRE_HEAD (64)
 #define BACK_HEAD (64)
 
-static CamelObjectClass *camel_mime_filter_parent;
+G_DEFINE_ABSTRACT_TYPE (CamelMimeFilter, camel_mime_filter, CAMEL_TYPE_OBJECT)
 
 static void
-mime_filter_finalize (CamelObject *object)
+mime_filter_finalize (GObject *object)
 {
        CamelMimeFilter *mime_filter;
 
@@ -49,7 +53,9 @@ mime_filter_finalize (CamelObject *object)
        g_free (mime_filter->outreal);
        g_free (mime_filter->backbuf);
        g_free (mime_filter->priv->inbuf);
-       g_free (mime_filter->priv);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_filter_parent_class)->finalize (object);
 }
 
 static void
@@ -67,7 +73,12 @@ mime_filter_complete (CamelMimeFilter *mime_filter,
 static void
 camel_mime_filter_class_init (CamelMimeFilterClass *class)
 {
-       camel_mime_filter_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelMimeFilterPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_filter_finalize;
 
        class->complete = mime_filter_complete;
 }
@@ -75,7 +86,7 @@ camel_mime_filter_class_init (CamelMimeFilterClass *class)
 static void
 camel_mime_filter_init (CamelMimeFilter *mime_filter)
 {
-       mime_filter->priv = g_malloc0(sizeof(*mime_filter->priv));
+       mime_filter->priv = CAMEL_MIME_FILTER_GET_PRIVATE (mime_filter);
 
        mime_filter->outreal = NULL;
        mime_filter->outbuf = NULL;
@@ -86,24 +97,6 @@ camel_mime_filter_init (CamelMimeFilter *mime_filter)
        mime_filter->backlen = 0;
 }
 
-CamelType
-camel_mime_filter_get_type (void)
-{
-       static CamelType camel_mime_filter_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mime_filter_type == CAMEL_INVALID_TYPE) {
-               camel_mime_filter_type = camel_type_register (CAMEL_TYPE_OBJECT, "CamelMimeFilter",
-                                                             sizeof (CamelMimeFilter),
-                                                             sizeof (CamelMimeFilterClass),
-                                                             (CamelObjectClassInitFunc) camel_mime_filter_class_init,
-                                                             NULL,
-                                                             (CamelObjectInitFunc) camel_mime_filter_init,
-                                                             (CamelObjectFinalizeFunc) mime_filter_finalize);
-       }
-
-       return camel_mime_filter_type;
-}
-
 /**
  * camel_mime_filter_new:
  *
@@ -114,7 +107,7 @@ camel_mime_filter_get_type (void)
 CamelMimeFilter *
 camel_mime_filter_new (void)
 {
-       return CAMEL_MIME_FILTER ( camel_object_new (camel_mime_filter_get_type ()));
+       return g_object_new (CAMEL_TYPE_MIME_FILTER, NULL);
 }
 
 #ifdef MALLOC_CHECK
@@ -158,7 +151,7 @@ static void filter_run(CamelMimeFilter *f,
        */
        if (prespace < f->backlen) {
                gint newlen = len+prespace+f->backlen;
-               p = f->priv;
+               p = CAMEL_MIME_FILTER_GET_PRIVATE(f);
                if (p->inlen < newlen) {
                        /* NOTE: g_realloc copies data, we dont need that (slower) */
                        g_free(p->inbuf);
index f641bfb..63650ba 100644 (file)
 #include <sys/types.h>
 #include <camel/camel-object.h>
 
-#define CAMEL_MIME_FILTER_TYPE         (camel_mime_filter_get_type ())
-#define CAMEL_MIME_FILTER(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_get_type (), CamelMimeFilter)
-#define CAMEL_MIME_FILTER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_get_type (), CamelMimeFilterClass)
-#define CAMEL_IS_MIME_FILTER(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_FILTER \
+       (camel_mime_filter_get_type ())
+#define CAMEL_MIME_FILTER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj),  CAMEL_TYPE_MIME_FILTER, CamelMimeFilter))
+#define CAMEL_MIME_FILTER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_FILTER, CamelMimeFilterClass))
+#define CAMEL_IS_MIME_FILTER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_FILTER))
+#define CAMEL_IS_MIME_FILTER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_FILTER))
 #define CAMEL_MIME_FILTER_GET_CLASS(obj) \
-       ((CamelMimeFilterClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_FILTER, CamelMimeFilterClass))
 
 G_BEGIN_DECLS
 
@@ -79,7 +91,7 @@ struct _CamelMimeFilterClass {
        void            (*reset)                (CamelMimeFilter *filter);
 };
 
-CamelType      camel_mime_filter_get_type      (void);
+GType          camel_mime_filter_get_type      (void);
 CamelMimeFilter *
                camel_mime_filter_new           (void);
 void           camel_mime_filter_filter        (CamelMimeFilter *filter,
index e3a4bcb..8a41efe 100644 (file)
@@ -79,14 +79,14 @@ static const gchar *header_names[] = {
        "Bcc", "Resent-Bcc", "Date", "Message-ID", NULL
 };
 
-static gpointer camel_mime_message_parent_class = NULL;
-
 static const gchar *recipient_names[] = {
        "To", "Cc", "Bcc", "Resent-To", "Resent-Cc", "Resent-Bcc", NULL
 };
 
 static GHashTable *header_name_table;
 
+G_DEFINE_TYPE (CamelMimeMessage, camel_mime_message, CAMEL_TYPE_MIME_PART)
+
 /* FIXME: check format of fields. */
 static gboolean
 process_header (CamelMedium *medium,
@@ -105,10 +105,10 @@ process_header (CamelMedium *medium,
                addr = camel_internet_address_new();
                unfolded = camel_header_unfold (value);
                if (camel_address_decode ((CamelAddress *) addr, unfolded) <= 0) {
-                       camel_object_unref (addr);
+                       g_object_unref (addr);
                } else {
                        if (message->from)
-                               camel_object_unref (message->from);
+                               g_object_unref (message->from);
                        message->from = addr;
                }
                g_free (unfolded);
@@ -117,10 +117,10 @@ process_header (CamelMedium *medium,
                addr = camel_internet_address_new();
                unfolded = camel_header_unfold (value);
                if (camel_address_decode ((CamelAddress *) addr, unfolded) <= 0) {
-                       camel_object_unref (addr);
+                       g_object_unref (addr);
                } else {
                        if (message->reply_to)
-                               camel_object_unref (message->reply_to);
+                               g_object_unref (message->reply_to);
                        message->reply_to = addr;
                }
                g_free (unfolded);
@@ -177,26 +177,42 @@ process_header (CamelMedium *medium,
 static void
 unref_recipient (gpointer key, gpointer value, gpointer user_data)
 {
-       camel_object_unref (value);
+       g_object_unref (value);
 }
 
 static void
-mime_message_finalize (CamelObject *object)
+mime_message_dispose (GObject *object)
 {
        CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object);
 
-       g_free (message->subject);
+       if (message->reply_to != NULL) {
+               g_object_unref (message->reply_to);
+               message->reply_to = NULL;
+       }
 
-       g_free (message->message_id);
+       if (message->from != NULL) {
+               g_object_unref (message->from);
+               message->from = NULL;
+       }
 
-       if (message->reply_to)
-               camel_object_unref (message->reply_to);
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_mime_message_parent_class)->dispose (object);
+}
 
-       if (message->from)
-               camel_object_unref (message->from);
+static void
+mime_message_finalize (GObject *object)
+{
+       CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object);
+
+       g_free (message->subject);
+
+       g_free (message->message_id);
 
        g_hash_table_foreach (message->recipients, unref_recipient, NULL);
        g_hash_table_destroy (message->recipients);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_message_parent_class)->finalize (object);
 }
 
 static gssize
@@ -318,12 +334,15 @@ mime_message_construct_from_parser (CamelMimePart *dw,
 static void
 camel_mime_message_class_init (CamelMimeMessageClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
        CamelMimePartClass *mime_part_class;
        CamelMediumClass *medium_class;
        gint ii;
 
-       camel_mime_message_parent_class = CAMEL_MIME_PART_CLASS (camel_type_get_global_classfuncs (camel_mime_part_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = mime_message_dispose;
+       object_class->finalize = mime_message_finalize;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->write_to_stream = mime_message_write_to_stream;
@@ -370,24 +389,6 @@ camel_mime_message_init (CamelMimeMessage *mime_message)
        mime_message->message_id = NULL;
 }
 
-CamelType
-camel_mime_message_get_type (void)
-{
-       static CamelType camel_mime_message_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mime_message_type == CAMEL_INVALID_TYPE)      {
-               camel_mime_message_type = camel_type_register (camel_mime_part_get_type(), "CamelMimeMessage",
-                                                              sizeof (CamelMimeMessage),
-                                                              sizeof (CamelMimeMessageClass),
-                                                              (CamelObjectClassInitFunc) camel_mime_message_class_init,
-                                                              NULL,
-                                                              (CamelObjectInitFunc) camel_mime_message_init,
-                                                              (CamelObjectFinalizeFunc) mime_message_finalize);
-       }
-
-       return camel_mime_message_type;
-}
-
 /**
  * camel_mime_message_new:
  *
@@ -398,10 +399,7 @@ camel_mime_message_get_type (void)
 CamelMimeMessage *
 camel_mime_message_new (void)
 {
-       CamelMimeMessage *mime_message;
-       mime_message = CAMEL_MIME_MESSAGE (camel_object_new (CAMEL_MIME_MESSAGE_TYPE));
-
-       return mime_message;
+       return g_object_new (CAMEL_TYPE_MIME_MESSAGE, NULL);
 }
 
 /* **** Date: */
@@ -546,7 +544,7 @@ camel_mime_message_set_reply_to (CamelMimeMessage *msg, CamelInternetAddress *re
        g_assert(msg);
 
        if (msg->reply_to) {
-               camel_object_unref (msg->reply_to);
+               g_object_unref (msg->reply_to);
                msg->reply_to = NULL;
        }
 
@@ -646,7 +644,7 @@ camel_mime_message_set_from (CamelMimeMessage *msg, CamelInternetAddress *from)
        g_assert(msg);
 
        if (msg->from) {
-               camel_object_unref (msg->from);
+               g_object_unref (msg->from);
                msg->from = NULL;
        }
 
@@ -902,11 +900,10 @@ find_best_encoding (CamelMimePart *part, CamelBestencRequired required, CamelBes
                CAMEL_STREAM_FILTER (filter), bestenc);
        d(printf("writing to checking stream\n"));
        camel_data_wrapper_decode_to_stream (content, filter);
-       camel_stream_filter_remove (
-               CAMEL_STREAM_FILTER (filter), idb);
+       camel_stream_filter_remove (CAMEL_STREAM_FILTER (filter), idb);
        if (idc != -1) {
                camel_stream_filter_remove (CAMEL_STREAM_FILTER (filter), idc);
-               camel_object_unref (charenc);
+               g_object_unref (charenc);
                charenc = NULL;
        }
 
@@ -947,16 +944,16 @@ find_best_encoding (CamelMimePart *part, CamelBestencRequired required, CamelBes
                        /* and write it to the new stream */
                        camel_data_wrapper_write_to_stream (content, filter);
 
-                       camel_object_unref (charenc);
+                       g_object_unref (charenc);
                }
        }
 
        encoding = camel_mime_filter_bestenc_get_best_encoding (
                CAMEL_MIME_FILTER_BESTENC (bestenc), enctype);
 
-       camel_object_unref (filter);
-       camel_object_unref (bestenc);
-       camel_object_unref (null);
+       g_object_unref (filter);
+       g_object_unref (bestenc);
+       g_object_unref (null);
 
        d(printf("done, best encoding = %d\n", encoding));
 
@@ -1071,7 +1068,7 @@ check_content_id (CamelMimeMessage *message, CamelMimePart *part, gpointer data)
 
        found = content_id && !strcmp (content_id, check->content_id) ? TRUE : FALSE;
        if (found)
-               check->part = camel_object_ref (part);
+               check->part = g_object_ref (part);
 
        return !found;
 }
@@ -1235,7 +1232,7 @@ cmm_dump_rec(CamelMimeMessage *msg, CamelMimePart *part, gint body, gint depth)
        memset(s, ' ', depth);
        s[depth] = 0;
        /* yes this leaks, so what its only debug stuff */
-       printf("%sclass: %s\n", s, ((CamelObject *)part)->klass->name);
+       printf("%sclass: %s\n", s, G_OBJECT_TYPE_NAME (part));
        printf("%smime-type: %s\n", s, camel_content_type_format(((CamelDataWrapper *)part)->mime_type));
 
        containee = camel_medium_get_content ((CamelMedium *)part);
@@ -1243,7 +1240,7 @@ cmm_dump_rec(CamelMimeMessage *msg, CamelMimePart *part, gint body, gint depth)
        if (containee == NULL)
                return;
 
-       printf("%scontent class: %s\n", s, ((CamelObject *)containee)->klass->name);
+       printf("%scontent class: %s\n", s, G_OBJECT_TYPE_NAME (containee));
        printf("%scontent mime-type: %s\n", s, camel_content_type_format(((CamelDataWrapper *)containee)->mime_type));
 
        /* using the object types is more accurate than using the mime/types */
index 6025d92..7c5c76b 100644 (file)
 #include <camel/camel-internet-address.h>
 #include <camel/camel-mime-filter-bestenc.h>
 
-#define CAMEL_MIME_MESSAGE_TYPE     (camel_mime_message_get_type ())
-#define CAMEL_MIME_MESSAGE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessage))
-#define CAMEL_MIME_MESSAGE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessageClass))
-#define CAMEL_IS_MIME_MESSAGE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MIME_MESSAGE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_MESSAGE \
+       (camel_mime_message_get_type ())
+#define CAMEL_MIME_MESSAGE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_MESSAGE, CamelMimeMessage))
+#define CAMEL_MIME_MESSAGE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_MESSAGE, CamelMimeMessageClass))
+#define CAMEL_IS_MIME_MESSAGE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_MESSAGE))
+#define CAMEL_IS_MIME_MESSAGE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_MESSAGE))
+#define CAMEL_MIME_MESSAGE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_MESSAGE, CamelMimeMessageClass))
 
 #define CAMEL_RECIPIENT_TYPE_TO "To"
 #define CAMEL_RECIPIENT_TYPE_CC "Cc"
@@ -79,8 +93,7 @@ struct _CamelMimeMessageClass {
        CamelMimePartClass parent_class;
 };
 
-/* Standard Camel function */
-CamelType                   camel_mime_message_get_type           (void);
+GType                   camel_mime_message_get_type           (void);
 
 /* public methods */
 CamelMimeMessage           *camel_mime_message_new                (void);
index a4cfaf9..6d8bc7e 100644 (file)
@@ -181,50 +181,36 @@ static gchar *states[] = {
 };
 #endif
 
-static CamelObjectClass *camel_mime_parser_parent;
+G_DEFINE_TYPE (CamelMimeParser, camel_mime_parser, CAMEL_TYPE_OBJECT)
 
 static void
-mime_parser_finalize (CamelObject *object)
+mime_parser_finalize (GObject *object)
 {
-       struct _header_scan_state *s = _PRIVATE(object);
+       struct _header_scan_state *s = _PRIVATE (object);
+
 #ifdef PURIFY
        purify_watch_remove_all();
 #endif
 
        folder_scan_close(s);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_parser_parent_class)->finalize (object);
 }
 
 static void
 camel_mime_parser_class_init (CamelMimeParserClass *class)
 {
-       camel_mime_parser_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = mime_parser_finalize;
 }
 
 static void
 camel_mime_parser_init (CamelMimeParser *parser)
 {
-       struct _header_scan_state *s;
-
-       s = folder_scan_init();
-       _PRIVATE(parser) = s;
-}
-
-CamelType
-camel_mime_parser_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelMimeParser",
-                                           sizeof (CamelMimeParser),
-                                           sizeof (CamelMimeParserClass),
-                                           (CamelObjectClassInitFunc) camel_mime_parser_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_parser_init,
-                                           (CamelObjectFinalizeFunc) mime_parser_finalize);
-       }
-
-       return type;
+       parser->priv = folder_scan_init();
 }
 
 /**
@@ -237,7 +223,7 @@ camel_mime_parser_get_type (void)
 CamelMimeParser *
 camel_mime_parser_new (void)
 {
-       return CAMEL_MIME_PARSER (camel_object_new (camel_mime_parser_get_type ()));
+       return g_object_new (CAMEL_TYPE_MIME_PARSER, NULL);
 }
 
 /**
@@ -265,7 +251,7 @@ camel_mime_parser_filter_add(CamelMimeParser *m, CamelMimeFilter *mf)
        struct _header_scan_filter *f, *new;
 
        new = g_malloc(sizeof(*new));
-       new->filter = camel_object_ref (mf);
+       new->filter = mf;
        new->id = s->filterid++;
        if (s->filterid == -1)
                s->filterid++;
@@ -299,7 +285,7 @@ camel_mime_parser_filter_remove(CamelMimeParser *m, gint id)
        while (f && f->next) {
                old = f->next;
                if (old->id == id) {
-                       camel_object_unref (old->filter);
+                       g_object_unref (old->filter);
                        f->next = old->next;
                        g_free(old);
                        /* there should only be a single matching id, but
@@ -1429,7 +1415,7 @@ folder_scan_close(struct _header_scan_state *s)
        if (s->fd != -1)
                close(s->fd);
        if (s->stream) {
-               camel_object_unref (s->stream);
+               g_object_unref (s->stream);
        }
        g_free(s);
 }
@@ -1500,7 +1486,7 @@ folder_scan_reset(struct _header_scan_state *s)
                s->fd = -1;
        }
        if (s->stream) {
-               camel_object_unref (s->stream);
+               g_object_unref (s->stream);
                s->stream = NULL;
        }
        s->ioerrno = 0;
@@ -1521,7 +1507,7 @@ folder_scan_init_with_stream (struct _header_scan_state *s,
                               CamelStream *stream)
 {
        folder_scan_reset(s);
-       s->stream = camel_object_ref (stream);
+       s->stream = g_object_ref (stream);
 
        return 0;
 }
index a5ca6ff..232b407 100644 (file)
 #include <camel/camel-mime-filter.h>
 #include <camel/camel-stream.h>
 
-#define CAMEL_MIME_PARSER(obj)         CAMEL_CHECK_CAST (obj, camel_mime_parser_get_type (), CamelMimeParser)
-#define CAMEL_MIME_PARSER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_parser_get_type (), CamelMimeParserClass)
-#define CAMEL_IS_MIME_PARSER(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_parser_get_type ())
+/* Stardard GObject macros */
+#define CAMEL_TYPE_MIME_PARSER \
+       (camel_mime_parser_get_type ())
+#define CAMEL_MIME_PARSER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_PARSER, CamelMimeParser))
+#define CAMEL_MIME_PARSER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_PARSER, CamelMimeParserClass))
+#define CAMEL_IS_MIME_PARSER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_PARSER))
+#define CAMEL_IS_MIME_PARSER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_PARSER))
+#define CAMEL_MIME_PARSER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_PARSER, CamelMimeParserClass))
 
 G_BEGIN_DECLS
 
@@ -80,7 +95,7 @@ struct _CamelMimeParserClass {
        void (*content) (CamelMimeParser *parser);
 };
 
-CamelType camel_mime_parser_get_type (void);
+GType camel_mime_parser_get_type (void);
 CamelMimeParser *camel_mime_parser_new (void);
 
 /* quick-fix for parser not erroring, we can find out if it had an error afterwards */
index de3c10b..a516fab 100644 (file)
@@ -75,7 +75,7 @@ simple_data_wrapper_construct_from_parser (CamelDataWrapper *dw, CamelMimeParser
 
        mem = camel_stream_mem_new_with_byte_array (buffer);
        camel_data_wrapper_construct_from_stream (dw, mem);
-       camel_object_unref (mem);
+       g_object_unref (mem);
 }
 
 /**
@@ -136,7 +136,7 @@ camel_mime_part_construct_content_from_parser (CamelMimePart *dw, CamelMimeParse
                /* would you believe you have to set this BEFORE you set the content object???  oh my god !!!! */
                camel_data_wrapper_set_mime_type_field (content, camel_mime_part_get_content_type (dw));
                camel_medium_set_content ((CamelMedium *)dw, content);
-               camel_object_unref (content);
+               g_object_unref (content);
        }
 
        g_free (encoding);
@@ -213,9 +213,9 @@ camel_mime_message_build_preview (CamelMimePart *msg,
                        ((CamelMessageInfoBase *) info)->preview = camel_utf8_make_valid(str->str);
                        g_string_free(str, TRUE);
 
-                       camel_object_unref (bstream);
+                       g_object_unref (bstream);
                }
-               camel_object_unref (mstream);
+               g_object_unref (mstream);
                return TRUE;
        }
 
index daf548c..af0823b 100644 (file)
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
+#define CAMEL_MIME_PART_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MIME_PART, CamelMimePartPrivate))
+
 struct _CamelMimePartPrivate {
 
        /* TODO: these should be in a camelcontentinfo */
@@ -61,6 +65,16 @@ struct _CamelMimePartPrivate {
        CamelTransferEncoding encoding;
 };
 
+enum {
+       PROP_0,
+       PROP_CONTENT_ID,
+       PROP_CONTENT_LOCATION,
+       PROP_CONTENT_MD5,
+       PROP_DESCRIPTION,
+       PROP_DISPOSITION,
+       PROP_FILENAME
+};
+
 typedef enum {
        HEADER_UNKNOWN,
        HEADER_DESCRIPTION,
@@ -76,7 +90,7 @@ typedef enum {
 static GHashTable *header_name_table;
 static GHashTable *header_formatted_table;
 
-static gpointer camel_mime_part_parent_class;
+G_DEFINE_TYPE (CamelMimePart, camel_mime_part, CAMEL_TYPE_MEDIUM)
 
 static gssize
 write_raw (CamelStream *stream,
@@ -264,9 +278,93 @@ mime_part_process_header (CamelMedium *medium,
 }
 
 static void
-mime_part_finalize (CamelMimePart *mime_part)
+mime_part_set_property (GObject *object,
+                        guint property_id,
+                        const GValue *value,
+                        GParamSpec *pspec)
+{
+       switch (property_id) {
+               case PROP_CONTENT_ID:
+                       camel_mime_part_set_content_id (
+                               CAMEL_MIME_PART (object),
+                               g_value_get_string (value));
+                       return;
+
+               case PROP_CONTENT_MD5:
+                       camel_mime_part_set_content_md5 (
+                               CAMEL_MIME_PART (object),
+                               g_value_get_string (value));
+                       return;
+
+               case PROP_CONTENT_LOCATION:
+                       camel_mime_part_set_content_location (
+                               CAMEL_MIME_PART (object),
+                               g_value_get_string (value));
+                       return;
+
+               case PROP_DESCRIPTION:
+                       camel_mime_part_set_description (
+                               CAMEL_MIME_PART (object),
+                               g_value_get_string (value));
+                       return;
+
+               case PROP_DISPOSITION:
+                       camel_mime_part_set_disposition (
+                               CAMEL_MIME_PART (object),
+                               g_value_get_string (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mime_part_get_property (GObject *object,
+                        guint property_id,
+                        GValue *value,
+                        GParamSpec *pspec)
 {
-       CamelMimePartPrivate *priv = mime_part->priv;
+       switch (property_id) {
+               case PROP_CONTENT_ID:
+                       g_value_set_string (
+                               value, camel_mime_part_get_content_id (
+                               CAMEL_MIME_PART (object)));
+                       return;
+
+               case PROP_CONTENT_MD5:
+                       g_value_set_string (
+                               value, camel_mime_part_get_content_md5 (
+                               CAMEL_MIME_PART (object)));
+                       return;
+
+               case PROP_CONTENT_LOCATION:
+                       g_value_set_string (
+                               value, camel_mime_part_get_content_location (
+                               CAMEL_MIME_PART (object)));
+                       return;
+
+               case PROP_DESCRIPTION:
+                       g_value_set_string (
+                               value, camel_mime_part_get_description (
+                               CAMEL_MIME_PART (object)));
+                       return;
+
+               case PROP_DISPOSITION:
+                       g_value_set_string (
+                               value, camel_mime_part_get_disposition (
+                               CAMEL_MIME_PART (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+mime_part_finalize (GObject *object)
+{
+       CamelMimePartPrivate *priv;
+
+       priv = CAMEL_MIME_PART_GET_PRIVATE (object);
 
        g_free (priv->description);
        g_free (priv->content_id);
@@ -276,9 +374,10 @@ mime_part_finalize (CamelMimePart *mime_part)
        camel_string_list_free (priv->content_languages);
        camel_content_disposition_unref (priv->disposition);
 
-       camel_header_raw_clear(&mime_part->headers);
+       camel_header_raw_clear(&CAMEL_MIME_PART (object)->headers);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_mime_part_parent_class)->finalize (object);
 }
 
 static void
@@ -293,7 +392,7 @@ mime_part_add_header (CamelMedium *medium,
        /* we simply add the header in a raw fashion                      */
 
        /* If it was one of the headers we handled, it must be unique, set it instead of add */
-       if (mime_part_process_header(medium, name, value))
+       if (mime_part_process_header (medium, name, value))
                camel_header_raw_replace (&part->headers, name, value, -1);
        else
                camel_header_raw_append (&part->headers, name, value, -1);
@@ -479,7 +578,7 @@ mime_part_write_to_stream (CamelDataWrapper *dw,
                        if (charenc) {
                                camel_stream_filter_add (
                                        CAMEL_STREAM_FILTER (filter_stream), charenc);
-                               camel_object_unref (charenc);
+                               g_object_unref (charenc);
                        }
 
                        /* we only re-do crlf on encoded blocks */
@@ -489,13 +588,13 @@ mime_part_write_to_stream (CamelDataWrapper *dw,
 
                                camel_stream_filter_add (
                                        CAMEL_STREAM_FILTER (filter_stream), crlf);
-                               camel_object_unref (crlf);
+                               g_object_unref (crlf);
                        }
 
                        if (filter) {
                                camel_stream_filter_add (
                                        CAMEL_STREAM_FILTER (filter_stream), filter);
-                               camel_object_unref (filter);
+                               g_object_unref (filter);
                        }
 
                        stream = filter_stream;
@@ -511,7 +610,7 @@ mime_part_write_to_stream (CamelDataWrapper *dw,
                if (filter_stream) {
                        errnosav = errno;
                        camel_stream_flush (stream);
-                       camel_object_unref (filter_stream);
+                       g_object_unref (filter_stream);
                        errno = errnosav;
                }
 
@@ -550,7 +649,7 @@ mime_part_construct_from_stream (CamelDataWrapper *dw,
                ret = camel_mime_part_construct_from_parser (
                        CAMEL_MIME_PART (dw), mp);
        }
-       camel_object_unref (mp);
+       g_object_unref (mp);
        return ret;
 }
 
@@ -611,10 +710,16 @@ mime_part_construct_from_parser (CamelMimePart *mime_part,
 static void
 camel_mime_part_class_init (CamelMimePartClass *class)
 {
+       GObjectClass *object_class;
        CamelMediumClass *medium_class;
        CamelDataWrapperClass *data_wrapper_class;
 
-       camel_mime_part_parent_class = CAMEL_MEDIUM_CLASS (camel_type_get_global_classfuncs (camel_medium_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelMimePartPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = mime_part_set_property;
+       object_class->get_property = mime_part_get_property;
+       object_class->finalize = mime_part_finalize;
 
        medium_class = CAMEL_MEDIUM_CLASS (class);
        medium_class->add_header = mime_part_add_header;
@@ -631,6 +736,46 @@ camel_mime_part_class_init (CamelMimePartClass *class)
 
        class->construct_from_parser = mime_part_construct_from_parser;
 
+       g_object_class_install_property (
+               object_class,
+               PROP_CONTENT_ID,
+               g_param_spec_string (
+                       "content-id",
+                       "Content ID",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_CONTENT_MD5,
+               g_param_spec_string (
+                       "content-md5",
+                       "Content MD5",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_DESCRIPTION,
+               g_param_spec_string (
+                       "description",
+                       "Description",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_DISPOSITION,
+               g_param_spec_string (
+                       "disposition",
+                       "Disposition",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE));
+
        init_header_name_table ();
 }
 
@@ -639,7 +784,7 @@ camel_mime_part_init (CamelMimePart *mime_part)
 {
        CamelDataWrapper *data_wrapper;
 
-       mime_part->priv = g_new0 (CamelMimePartPrivate, 1);
+       mime_part->priv = CAMEL_MIME_PART_GET_PRIVATE (mime_part);
        mime_part->priv->encoding = CAMEL_TRANSFER_ENCODING_DEFAULT;
 
        data_wrapper = CAMEL_DATA_WRAPPER (mime_part);
@@ -650,25 +795,6 @@ camel_mime_part_init (CamelMimePart *mime_part)
        data_wrapper->mime_type = camel_content_type_new ("text", "plain");
 }
 
-CamelType
-camel_mime_part_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_MEDIUM_TYPE,
-                                           "CamelMimePart",
-                                           sizeof (CamelMimePart),
-                                           sizeof (CamelMimePartClass),
-                                           (CamelObjectClassInitFunc) camel_mime_part_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_mime_part_init,
-                                           (CamelObjectFinalizeFunc) mime_part_finalize);
-       }
-
-       return type;
-}
-
 /* **** Content-Description */
 
 /**
@@ -693,6 +819,8 @@ camel_mime_part_set_description (CamelMimePart *mime_part,
        text = camel_header_encode_string ((guchar *) description);
        camel_medium_set_header (medium, "Content-Description", text);
        g_free (text);
+
+       g_object_notify (G_OBJECT (mime_part), "description");
 }
 
 /**
@@ -743,6 +871,8 @@ camel_mime_part_set_disposition (CamelMimePart *mime_part,
        text = camel_content_disposition_format (mime_part->priv->disposition);
        camel_medium_set_header (medium, "Content-Disposition", text);
        g_free (text);
+
+       g_object_notify (G_OBJECT (mime_part), "disposition");
 }
 
 /**
@@ -872,6 +1002,8 @@ camel_mime_part_set_content_id (CamelMimePart *mime_part,
        g_free (cid);
 
        g_free (id);
+
+       g_object_notify (G_OBJECT (mime_part), "content-id");
 }
 
 /**
@@ -949,6 +1081,8 @@ camel_mime_part_set_content_location (CamelMimePart *mime_part,
 
        /* FIXME: this should perform content-location folding */
        camel_medium_set_header (medium, "Content-Location", location);
+
+       g_object_notify (G_OBJECT (mime_part), "content-location");
 }
 
 /**
@@ -1122,7 +1256,7 @@ camel_mime_part_construct_from_parser (CamelMimePart *mime_part,
 CamelMimePart *
 camel_mime_part_new (void)
 {
-       return (CamelMimePart *)camel_object_new (CAMEL_MIME_PART_TYPE);
+       return g_object_new (CAMEL_TYPE_MIME_PART, NULL);
 }
 
 /**
@@ -1152,9 +1286,9 @@ camel_mime_part_set_content (CamelMimePart *mime_part,
                camel_data_wrapper_set_mime_type (dw, type);
                stream = camel_stream_mem_new_with_buffer (data, length);
                camel_data_wrapper_construct_from_stream (dw, stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
                camel_medium_set_content (medium, dw);
-               camel_object_unref (dw);
+               g_object_unref (dw);
        } else
                camel_medium_set_content (medium, NULL);
 }
@@ -1184,7 +1318,7 @@ camel_mime_part_get_content_size (CamelMimePart *mime_part)
        camel_data_wrapper_decode_to_stream (dw, (CamelStream *) null);
        size = null->written;
 
-       camel_object_unref (null);
+       g_object_unref (null);
 
        return size;
 }
index a99ee51..c13297d 100644 (file)
 #include <camel/camel-mime-utils.h>
 #include <camel/camel-mime-parser.h>
 
-#define CAMEL_MIME_PART_TYPE     (camel_mime_part_get_type ())
-#define CAMEL_MIME_PART(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MIME_PART_TYPE, CamelMimePart))
-#define CAMEL_MIME_PART_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MIME_PART_TYPE, CamelMimePartClass))
-#define CAMEL_IS_MIME_PART(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MIME_PART_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MIME_PART \
+       (camel_mime_part_get_type ())
+#define CAMEL_MIME_PART(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MIME_PART, CamelMimePart))
+#define CAMEL_MIME_PART_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MIME_PART, CamelMimePartClass))
+#define CAMEL_IS_MIME_PART(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MIME_PART))
+#define CAMEL_IS_MIME_PART_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MIME_PART))
 #define CAMEL_MIME_PART_GET_CLASS(obj) \
-       ((CamelMimePartClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MIME_PART, CamelMimePartClass))
 
 G_BEGIN_DECLS
 
@@ -61,7 +73,7 @@ struct _CamelMimePartClass {
                                                 CamelMimeParser *parser);
 };
 
-CamelType camel_mime_part_get_type (void);
+GType camel_mime_part_get_type (void);
 
 /* public methods */
 CamelMimePart *  camel_mime_part_new                    (void);
index c25f4bb..11fde95 100644 (file)
@@ -533,8 +533,8 @@ camel_movemail_solaris (gint oldsfd,
                g_free(from);
        }
 
-       camel_object_unref (mp);
-       camel_object_unref (ffrom);
+       g_object_unref (mp);
+       g_object_unref (ffrom);
 
        return ret;
 
@@ -546,8 +546,8 @@ fail:
                _("Error copying mail temp file: %s"),
                g_strerror (errno));
 
-       camel_object_unref (mp);
-       camel_object_unref (ffrom);
+       g_object_unref (mp);
+       g_object_unref (ffrom);
 
        return -1;
 }
index 53bd20d..825f394 100644 (file)
 #include "camel-stream-fs.h"
 #include "camel-stream-mem.h"
 
-static gpointer camel_multipart_encrypted_parent_class;
+G_DEFINE_TYPE (CamelMultipartEncrypted, camel_multipart_encrypted, CAMEL_TYPE_MULTIPART)
 
 static void
-multipart_encrypted_finalize (CamelMultipartEncrypted *multipart)
+multipart_encrypted_dispose (GObject *object)
 {
+       CamelMultipartEncrypted *multipart;
+
+       multipart = CAMEL_MULTIPART_ENCRYPTED (object);
+
+       if (multipart->decrypted) {
+               g_object_unref (multipart->decrypted);
+               multipart->decrypted = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_multipart_encrypted_parent_class)->dispose (object);
+}
+
+static void
+multipart_encrypted_finalize (GObject *object)
+{
+       CamelMultipartEncrypted *multipart;
+
+       multipart = CAMEL_MULTIPART_ENCRYPTED (object);
+
        g_free (multipart->protocol);
 
-       if (multipart->decrypted)
-               camel_object_unref (multipart->decrypted);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_multipart_encrypted_parent_class)->finalize (object);
 }
 
 /* we snoop the mime type to get the protocol */
@@ -74,9 +94,12 @@ multipart_encrypted_set_mime_type_field (CamelDataWrapper *data_wrapper,
 static void
 camel_multipart_encrypted_class_init (CamelMultipartEncryptedClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
 
-       camel_multipart_encrypted_parent_class = (CamelMultipartClass *) camel_multipart_get_type ();
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = multipart_encrypted_dispose;
+       object_class->finalize = multipart_encrypted_finalize;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->set_mime_type_field =
@@ -92,25 +115,6 @@ camel_multipart_encrypted_init (CamelMultipartEncrypted *multipart)
        multipart->decrypted = NULL;
 }
 
-CamelType
-camel_multipart_encrypted_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_multipart_get_type (),
-                                           "CamelMultipartEncrypted",
-                                           sizeof (CamelMultipartEncrypted),
-                                           sizeof (CamelMultipartEncryptedClass),
-                                           (CamelObjectClassInitFunc) camel_multipart_encrypted_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_multipart_encrypted_init,
-                                           (CamelObjectFinalizeFunc) multipart_encrypted_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_multipart_encrypted_new:
  *
@@ -124,5 +128,5 @@ camel_multipart_encrypted_get_type (void)
 CamelMultipartEncrypted *
 camel_multipart_encrypted_new (void)
 {
-       return (CamelMultipartEncrypted *) camel_object_new (CAMEL_MULTIPART_ENCRYPTED_TYPE);
+       return g_object_new (CAMEL_TYPE_MULTIPART_ENCRYPTED, NULL);
 }
index 3672ad8..8c66588 100644 (file)
 
 #include <camel/camel-multipart.h>
 
-#define CAMEL_MULTIPART_ENCRYPTED_TYPE     (camel_multipart_encrypted_get_type ())
-#define CAMEL_MULTIPART_ENCRYPTED(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MULTIPART_ENCRYPTED_TYPE, CamelMultipartEncrypted))
-#define CAMEL_MULTIPART_ENCRYPTED_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_ENCRYPTED_TYPE, CamelMultipartEncryptedClass))
-#define CAMEL_IS_MULTIPART_ENCRYPTED(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MULTIPART_ENCRYPTED_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MULTIPART_ENCRYPTED \
+       (camel_multipart_encrypted_get_type ())
+#define CAMEL_MULTIPART_ENCRYPTED(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MULTIPART_ENCRYPTED, CamelMultipartEncrypted))
+#define CAMEL_MULTIPART_ENCRYPTED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MULTIPART_ENCRYPTED, CamelMultipartEncryptedClass))
+#define CAMEL_IS_MULTIPART_ENCRYPTED(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MULTIPART_ENCRYPTED))
+#define CAMEL_IS_MULTIPART_ENCRYPTED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MULTIPART_ENCRYPTED))
+#define CAMEL_MULTIPART_ENCRYPTED_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MULTIPART_ENCRYPTED, CamelMultipartEncryptedClass))
 
 G_BEGIN_DECLS
 
@@ -60,7 +74,7 @@ struct _CamelMultipartEncryptedClass {
 
 };
 
-CamelType camel_multipart_encrypted_get_type (void);
+GType camel_multipart_encrypted_get_type (void);
 
 CamelMultipartEncrypted *camel_multipart_encrypted_new (void);
 
index 53f30c9..2d71381 100644 (file)
@@ -51,7 +51,7 @@
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))
               #include <stdio.h>;*/
 
-static gpointer camel_multipart_signed_parent_class;
+G_DEFINE_TYPE (CamelMultipartSigned, camel_multipart_signed, CAMEL_TYPE_MULTIPART)
 
 static gint
 multipart_signed_skip_content (CamelMimeParser *cmp)
@@ -158,7 +158,7 @@ multipart_signed_parse_content (CamelMultipartSigned *mps)
                camel_multipart_set_postface(mp, camel_mime_parser_postface(cmp));
        }
 
-       camel_object_unref (cmp);
+       g_object_unref (cmp);
 
        if (mps->end2 == -1 || mps->start2 == -1) {
                return -1;
@@ -174,36 +174,62 @@ multipart_signed_set_stream (CamelMultipartSigned *mps,
        CamelDataWrapper *dw = (CamelDataWrapper *)mps;
 
        if (dw->stream)
-               camel_object_unref (dw->stream);
+               g_object_unref (dw->stream);
        dw->stream = stream;
 
        mps->start1 = -1;
        if (mps->content) {
-               camel_object_unref (mps->content);
+               g_object_unref (mps->content);
                mps->content = NULL;
        }
        if (mps->contentraw) {
-               camel_object_unref (mps->contentraw);
+               g_object_unref (mps->contentraw);
                mps->contentraw = NULL;
        }
        if (mps->signature) {
-               camel_object_unref (mps->signature);
+               g_object_unref (mps->signature);
                mps->signature = NULL;
        }
 }
 
 static void
-multipart_signed_finalize (CamelMultipartSigned *mps)
+multipart_signed_dispose (GObject *object)
 {
-       g_free (mps->protocol);
-       g_free (mps->micalg);
-\
-       if (mps->signature)
-               camel_object_unref (mps->signature);
-       if (mps->content)
-               camel_object_unref (mps->content);
-       if (mps->contentraw)
-               camel_object_unref (mps->contentraw);
+       CamelMultipartSigned *multipart;
+
+       multipart = CAMEL_MULTIPART_SIGNED (object);
+
+       if (multipart->signature != NULL) {
+               g_object_unref (multipart->signature);
+               multipart->signature = NULL;
+       }
+
+       if (multipart->content != NULL) {
+               g_object_unref (multipart->content);
+               multipart->content = NULL;
+       }
+
+       if (multipart->contentraw != NULL) {
+               g_object_unref (multipart->contentraw);
+               multipart->contentraw = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_multipart_signed_parent_class)->dispose (object);
+}
+
+static void
+multipart_signed_finalize (GObject *object)
+{
+       CamelMultipartSigned *multipart;
+
+       multipart = CAMEL_MULTIPART_SIGNED (object);
+
+       g_free (multipart->protocol);
+       g_free (multipart->micalg);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_multipart_signed_parent_class)->finalize (object);
 }
 
 static void
@@ -370,7 +396,7 @@ multipart_signed_get_part (CamelMultipart *multipart,
                if (mps->content)
                        return mps->content;
                if (mps->contentraw) {
-                       stream = camel_object_ref (mps->contentraw);
+                       stream = g_object_ref (mps->contentraw);
                } else if (mps->start1 == -1
                           && multipart_signed_parse_content(mps) == -1
                           && (stream = ((CamelDataWrapper *)mps)->stream) == NULL) {
@@ -379,7 +405,7 @@ multipart_signed_get_part (CamelMultipart *multipart,
                } else if (dw->stream == NULL) {
                        return NULL;
                } else if (mps->start1 == -1) {
-                       stream = camel_object_ref (dw->stream);
+                       stream = g_object_ref (dw->stream);
                } else {
                        stream = camel_seekable_substream_new((CamelSeekableStream *)dw->stream, mps->start1, mps->end1);
                }
@@ -387,7 +413,7 @@ multipart_signed_get_part (CamelMultipart *multipart,
                mps->content = camel_mime_part_new();
                camel_data_wrapper_construct_from_stream (
                        CAMEL_DATA_WRAPPER (mps->content), stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
                return mps->content;
        case CAMEL_MULTIPART_SIGNED_SIGNATURE:
                if (mps->signature)
@@ -404,7 +430,7 @@ multipart_signed_get_part (CamelMultipart *multipart,
                mps->signature = camel_mime_part_new();
                camel_data_wrapper_construct_from_stream (
                        CAMEL_DATA_WRAPPER (mps->signature), stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
                return mps->signature;
        default:
                g_warning("trying to get object out of bounds for multipart");
@@ -470,10 +496,13 @@ multipart_signed_construct_from_parser (CamelMultipart *multipart,
 static void
 camel_multipart_signed_class_init (CamelMultipartSignedClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
        CamelMultipartClass *multipart_class;
 
-       camel_multipart_signed_parent_class = (CamelMultipartClass *)camel_multipart_get_type();
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = multipart_signed_dispose;
+       object_class->finalize = multipart_signed_finalize;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->set_mime_type_field = multipart_signed_set_mime_type_field;
@@ -500,24 +529,6 @@ camel_multipart_signed_init (CamelMultipartSigned *multipart)
        multipart->start1 = -1;
 }
 
-CamelType
-camel_multipart_signed_get_type (void)
-{
-       static CamelType camel_multipart_signed_type = CAMEL_INVALID_TYPE;
-
-       if (camel_multipart_signed_type == CAMEL_INVALID_TYPE) {
-               camel_multipart_signed_type = camel_type_register (camel_multipart_get_type (), "CamelMultipartSigned",
-                                                                  sizeof (CamelMultipartSigned),
-                                                                  sizeof (CamelMultipartSignedClass),
-                                                                  (CamelObjectClassInitFunc) camel_multipart_signed_class_init,
-                                                                  NULL,
-                                                                  (CamelObjectInitFunc) camel_multipart_signed_init,
-                                                                  (CamelObjectFinalizeFunc) multipart_signed_finalize);
-       }
-
-       return camel_multipart_signed_type;
-}
-
 /**
  * camel_multipart_signed_new:
  *
@@ -549,7 +560,7 @@ camel_multipart_signed_get_type (void)
 CamelMultipartSigned *
 camel_multipart_signed_new (void)
 {
-       return (CamelMultipartSigned *)camel_object_new(CAMEL_MULTIPART_SIGNED_TYPE);
+       return g_object_new (CAMEL_TYPE_MULTIPART_SIGNED, NULL);
 }
 
 /**
@@ -571,7 +582,7 @@ camel_multipart_signed_get_content_stream (CamelMultipartSigned *mps,
        /* we need to be able to verify stuff we just signed as well as stuff we loaded from a stream/parser */
 
        if (mps->contentraw) {
-               constream = camel_object_ref (mps->contentraw);
+               constream = g_object_ref (mps->contentraw);
        } else {
                CamelStream *sub;
                CamelMimeFilter *canon_filter;
@@ -586,12 +597,12 @@ camel_multipart_signed_get_content_stream (CamelMultipartSigned *mps,
                /* first, prepare our parts */
                sub = camel_seekable_substream_new((CamelSeekableStream *)((CamelDataWrapper *)mps)->stream, mps->start1, mps->end1);
                constream = camel_stream_filter_new (sub);
-               camel_object_unref (sub);
+               g_object_unref (sub);
 
                /* Note: see rfc2015 or rfc3156, section 5 */
                canon_filter = camel_mime_filter_canon_new (CAMEL_MIME_FILTER_CANON_CRLF);
                camel_stream_filter_add((CamelStreamFilter *)constream, (CamelMimeFilter *)canon_filter);
-               camel_object_unref (canon_filter);
+               g_object_unref (canon_filter);
        }
 
        return constream;
index 0931f14..20b1054 100644 (file)
 
 #include <camel/camel-multipart.h>
 
-#define CAMEL_MULTIPART_SIGNED_TYPE     (camel_multipart_signed_get_type ())
-#define CAMEL_MULTIPART_SIGNED(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MULTIPART_SIGNED_TYPE, CamelMultipartSigned))
-#define CAMEL_MULTIPART_SIGNED_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_SIGNED_TYPE, CamelMultipartSignedClass))
-#define CAMEL_IS_MULTIPART_SIGNED(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MULTIPART_SIGNED_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MULTIPART_SIGNED \
+       (camel_multipart_signed_get_type ())
+#define CAMEL_MULTIPART_SIGNED(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MULTIPART_SIGNED, CamelMultipartSigned))
+#define CAMEL_MULTIPART_SIGNED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MULTIPART_SIGNED, CamelMultipartSignedClass))
+#define CAMEL_IS_MULTIPART_SIGNED(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MULTIPART_SIGNED))
+#define CAMEL_IS_MULTIPART_SIGNED_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MULTIPART_SIGNED))
+#define CAMEL_MULTIPART_SIGNED_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MULTIPART_SIGNED, CamelMultipartSignedClass))
 
 G_BEGIN_DECLS
 
@@ -85,7 +99,7 @@ typedef struct {
        CamelMultipartClass parent_class;
 } CamelMultipartSignedClass;
 
-CamelType camel_multipart_signed_get_type (void);
+GType camel_multipart_signed_get_type (void);
 
 /* public methods */
 CamelMultipartSigned *camel_multipart_signed_new           (void);
index 87a43ed..1c66bac 100644 (file)
 
 #define d(x)
 
-static gpointer camel_multipart_parent_class;
+G_DEFINE_TYPE (CamelMultipart, camel_multipart, CAMEL_TYPE_DATA_WRAPPER)
 
 static void
-multipart_finalize (CamelMultipart *multipart)
+multipart_dispose (GObject *object)
 {
-       g_list_foreach (multipart->parts, (GFunc) camel_object_unref, NULL);
+       CamelMultipart *multipart = CAMEL_MULTIPART (object);
+
+       g_list_foreach (multipart->parts, (GFunc) g_object_unref, NULL);
        g_list_free (multipart->parts);
        multipart->parts = NULL;
 
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_multipart_parent_class)->dispose (object);
+}
+
+static void
+multipart_finalize (GObject *object)
+{
+       CamelMultipart *multipart = CAMEL_MULTIPART (object);
+
        g_free (multipart->preface);
        g_free (multipart->postface);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_multipart_parent_class)->finalize (object);
 }
 
 /* this is MIME specific, doesn't belong here really */
@@ -142,7 +156,7 @@ multipart_add_part (CamelMultipart *multipart,
                     CamelMimePart *part)
 {
        multipart->parts = g_list_append (
-               multipart->parts, camel_object_ref (part));
+               multipart->parts, g_object_ref (part));
 }
 
 static void
@@ -151,7 +165,7 @@ multipart_add_part_at (CamelMultipart *multipart,
                        guint index)
 {
        multipart->parts = g_list_insert (
-               multipart->parts, camel_object_ref (part), index);
+               multipart->parts, g_object_ref (part), index);
 }
 
 static void
@@ -163,7 +177,7 @@ multipart_remove_part (CamelMultipart *multipart,
                return;
 
        multipart->parts = g_list_remove (multipart->parts, part);
-       camel_object_unref (part);
+       g_object_unref (part);
 }
 
 static CamelMimePart *
@@ -186,7 +200,7 @@ multipart_remove_part_at (CamelMultipart *multipart,
 
        multipart->parts = g_list_remove_link (multipart->parts, link);
        if (link->data)
-               camel_object_unref (link->data);
+               g_object_unref (link->data);
        g_list_free_1 (link);
 
        return removed_part;
@@ -289,7 +303,7 @@ multipart_construct_from_parser (CamelMultipart *multipart,
                bodypart = camel_mime_part_new();
                camel_mime_part_construct_from_parser (bodypart, mp);
                camel_multipart_add_part(multipart, bodypart);
-               camel_object_unref (bodypart);
+               g_object_unref (bodypart);
        }
 
        /* these are only return valid data in the MULTIPART_END state */
@@ -307,9 +321,12 @@ multipart_construct_from_parser (CamelMultipart *multipart,
 static void
 camel_multipart_class_init (CamelMultipartClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
 
-       camel_multipart_parent_class = (CamelDataWrapperClass *) camel_data_wrapper_get_type ();
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = multipart_dispose;
+       object_class->finalize = multipart_finalize;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->write_to_stream = multipart_write_to_stream;
@@ -337,24 +354,6 @@ camel_multipart_init (CamelMultipart *multipart)
        multipart->postface = NULL;
 }
 
-CamelType
-camel_multipart_get_type (void)
-{
-       static CamelType camel_multipart_type = CAMEL_INVALID_TYPE;
-
-       if (camel_multipart_type == CAMEL_INVALID_TYPE) {
-               camel_multipart_type = camel_type_register (camel_data_wrapper_get_type (), "CamelMultipart",
-                                                           sizeof (CamelMultipart),
-                                                           sizeof (CamelMultipartClass),
-                                                           (CamelObjectClassInitFunc) camel_multipart_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_multipart_init,
-                                                           (CamelObjectFinalizeFunc) multipart_finalize);
-       }
-
-       return camel_multipart_type;
-}
-
 /**
  * camel_multipart_new:
  *
@@ -367,7 +366,7 @@ camel_multipart_new (void)
 {
        CamelMultipart *multipart;
 
-       multipart = (CamelMultipart *)camel_object_new (CAMEL_MULTIPART_TYPE);
+       multipart = g_object_new (CAMEL_TYPE_MULTIPART, NULL);
        multipart->preface = NULL;
        multipart->postface = NULL;
 
@@ -451,7 +450,7 @@ camel_multipart_remove_part (CamelMultipart *multipart,
  *
  * Remove the indicated part from the multipart object.
  *
- * Returns: the removed part. Note that it is #camel_object_unref'ed
+ * Returns: the removed part. Note that it is #g_object_unref'ed
  * before being returned, which may cause it to be destroyed.
  **/
 CamelMimePart *
index 79b34ad..8e9d6cc 100644 (file)
 
 #include <camel/camel-data-wrapper.h>
 
-#define CAMEL_MULTIPART_TYPE     (camel_multipart_get_type ())
-#define CAMEL_MULTIPART(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MULTIPART_TYPE, CamelMultipart))
-#define CAMEL_MULTIPART_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_TYPE, CamelMultipartClass))
-#define CAMEL_IS_MULTIPART(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MULTIPART_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MULTIPART \
+       (camel_multipart_get_type ())
+#define CAMEL_MULTIPART(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MULTIPART, CamelMultipart))
+#define CAMEL_MULTIPART_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MULTIPART, CamelMultipartClass))
+#define CAMEL_IS_MULTIPART(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MULTIPART))
+#define CAMEL_IS_MULTIPART_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MULTIPART))
 #define CAMEL_MULTIPART_GET_CLASS(obj) \
-       ((CamelMultipartClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MULTIPART, CamelMultipartClass))
 
 G_BEGIN_DECLS
 
@@ -71,7 +83,7 @@ struct _CamelMultipartClass {
        /*int (*construct_from_stream)(CamelMultipart *, CamelStream *);*/
 };
 
-CamelType camel_multipart_get_type (void);
+GType camel_multipart_get_type (void);
 
 /* public methods */
 CamelMultipart *    camel_multipart_new            (void);
index ecf6ecd..6fb5d30 100644 (file)
 
 #define d(x)
 
-static CamelAddressClass *camel_nntp_address_parent;
-
 struct _address {
        gchar *name;
        gchar *address;
 };
 
+G_DEFINE_TYPE (CamelNNTPAddress, camel_nntp_address, CAMEL_TYPE_ADDRESS)
+
 /* since newsgropus are 7bit ascii, decode/unformat are the same */
 static gint
 nntp_address_decode (CamelAddress *address,
@@ -110,8 +110,6 @@ camel_nntp_address_class_init (CamelNNTPAddressClass *class)
 {
        CamelAddressClass *address_class;
 
-       camel_nntp_address_parent = CAMEL_ADDRESS_CLASS(camel_type_get_global_classfuncs(camel_address_get_type()));
-
        address_class = CAMEL_ADDRESS_CLASS (class);
        address_class->decode = nntp_address_decode;
        address_class->encode = nntp_address_encode;
@@ -126,24 +124,6 @@ camel_nntp_address_init (CamelNNTPAddress *nntp_address)
 {
 }
 
-CamelType
-camel_nntp_address_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_address_get_type(), "CamelNNTPAddress",
-                                          sizeof (CamelNNTPAddress),
-                                          sizeof (CamelNNTPAddressClass),
-                                          (CamelObjectClassInitFunc) camel_nntp_address_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_nntp_address_init,
-                                          NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_nntp_address_new:
  *
@@ -154,7 +134,7 @@ camel_nntp_address_get_type(void)
 CamelNNTPAddress *
 camel_nntp_address_new (void)
 {
-       return CAMEL_NNTP_ADDRESS(camel_object_new(camel_nntp_address_get_type()));
+       return g_object_new (CAMEL_TYPE_NNTP_ADDRESS, NULL);
 }
 
 /**
index 1e8571a..20df318 100644 (file)
 
 #include <camel/camel-address.h>
 
-#define CAMEL_NNTP_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_nntp_address_get_type (), CamelNNTPAddress)
-#define CAMEL_NNTP_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_nntp_address_get_type (), CamelNNTPAddressClass)
-#define CAMEL_IS_NNTP_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_nntp_address_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_ADDRESS \
+       (camel_nntp_address_get_type ())
+#define CAMEL_NNTP_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_ADDRESS, CamelNNTPAddress))
+#define CAMEL_NNTP_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_ADDRESS, CamelNNTPAddressClass))
+#define CAMEL_IS_NNTP_ADDRESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_ADDRESS))
+#define CAMEL_IS_NNTP_ADDRESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_ADDRESS))
+#define CAMEL_NNTP_ADDRESS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NTTP_ADDRESS, CamelNNTPAddressClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +62,7 @@ struct _CamelNNTPAddressClass {
        CamelAddressClass parent_class;
 };
 
-CamelType      camel_nntp_address_get_type     (void);
+GType          camel_nntp_address_get_type     (void);
 CamelNNTPAddress *
                camel_nntp_address_new          (void);
 gint           camel_nntp_address_add          (CamelNNTPAddress *a,
diff --git a/camel/camel-object-bag.c b/camel/camel-object-bag.c
new file mode 100644 (file)
index 0000000..79ca4a2
--- /dev/null
@@ -0,0 +1,525 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser 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 Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "camel-object-bag.h"
+
+#include <glib-object.h>
+
+typedef struct _KeyReservation KeyReservation;
+
+struct _KeyReservation {
+       gpointer key;
+       gint waiters;
+       GThread *owner;
+       GCond *cond;
+};
+
+struct _CamelObjectBag {
+       GHashTable *key_table;
+       GHashTable *object_table;
+       GEqualFunc key_equal_func;
+       CamelCopyFunc key_copy_func;
+       GFreeFunc key_free_func;
+       GSList *reserved;  /* list of KeyReservations */
+       GMutex *mutex;
+};
+
+static KeyReservation *
+key_reservation_new (CamelObjectBag *bag,
+                     gconstpointer key)
+{
+       KeyReservation *reservation;
+
+       reservation = g_slice_new0 (KeyReservation);
+       reservation->key = bag->key_copy_func (key);
+       reservation->owner = g_thread_self ();
+       reservation->cond = g_cond_new ();
+
+       bag->reserved = g_slist_prepend (bag->reserved, reservation);
+
+       return reservation;
+}
+
+static KeyReservation *
+key_reservation_lookup (CamelObjectBag *bag,
+                        gconstpointer key)
+{
+       GSList *iter;
+
+       /* XXX Might be easier to use a GHashTable for reservations. */
+       for (iter = bag->reserved; iter != NULL; iter = iter->next) {
+               KeyReservation *reservation = iter->data;
+               if (bag->key_equal_func (reservation->key, key))
+                       return reservation;
+       }
+
+       return NULL;
+}
+
+static void
+key_reservation_free (CamelObjectBag *bag,
+                      KeyReservation *reservation)
+{
+       /* Make sure the reservation is actually in the object bag. */
+       g_return_if_fail (key_reservation_lookup (bag, reservation->key) != NULL);
+
+       bag->reserved = g_slist_remove (bag->reserved, reservation);
+
+       bag->key_free_func (reservation->key);
+       g_cond_free (reservation->cond);
+       g_slice_free (KeyReservation, reservation);
+}
+
+static void
+object_bag_notify (CamelObjectBag *bag,
+                   GObject *where_the_object_was)
+{
+       gpointer key;
+
+       g_mutex_lock (bag->mutex);
+
+       key = g_hash_table_lookup (bag->key_table, where_the_object_was);
+       if (key != NULL) {
+               g_hash_table_remove (bag->key_table, where_the_object_was);
+               g_hash_table_remove (bag->object_table, key);
+       }
+
+       g_mutex_unlock (bag->mutex);
+}
+
+static void
+object_bag_weak_unref (gpointer key,
+                       GObject *object,
+                       CamelObjectBag *bag)
+{
+       g_object_weak_unref (object, (GWeakNotify) object_bag_notify, bag);
+}
+
+static void
+object_bag_unreserve (CamelObjectBag *bag,
+                      gconstpointer key)
+{
+       KeyReservation *reservation;
+
+       reservation = key_reservation_lookup (bag, key);
+       g_return_if_fail (reservation != NULL);
+       g_return_if_fail (reservation->owner == g_thread_self ());
+
+       if (reservation->waiters > 0) {
+               reservation->owner = NULL;
+               g_cond_signal (reservation->cond);
+       } else
+               key_reservation_free (bag, reservation);
+}
+
+/**
+ * camel_object_bag_new:
+ * @key_hash_func: a hashing function for keys
+ * @key_equal_func: a comparison function for keys
+ * @key_copy_func: a function to copy keys
+ * @key_free_func: a function to free keys
+ *
+ * Returns a new object bag.  Object bags are keyed hash tables of objects
+ * that can be updated atomically using transaction semantics.  Use
+ * camel_object_bag_destroy() to free the object bag.
+ *
+ * Returns: a newly-allocated #CamelObjectBag
+ **/
+CamelObjectBag *
+camel_object_bag_new (GHashFunc key_hash_func,
+                      GEqualFunc key_equal_func,
+                      CamelCopyFunc key_copy_func,
+                      GFreeFunc key_free_func)
+{
+       CamelObjectBag *bag;
+       GHashTable *key_table;
+       GHashTable *object_table;
+
+       g_return_val_if_fail (key_hash_func != NULL, NULL);
+       g_return_val_if_fail (key_equal_func != NULL, NULL);
+       g_return_val_if_fail (key_copy_func != NULL, NULL);
+       g_return_val_if_fail (key_free_func != NULL, NULL);
+
+       /* Each key is shared between both hash tables, so only one
+        * table needs to be responsible for destroying keys. */
+
+       key_table = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+       object_table = g_hash_table_new_full (
+               key_hash_func, key_equal_func,
+               (GDestroyNotify) key_free_func,
+               (GDestroyNotify) NULL);
+
+       bag = g_slice_new0 (CamelObjectBag);
+       bag->key_table = key_table;
+       bag->object_table = object_table;
+       bag->key_equal_func = key_equal_func;
+       bag->key_copy_func = key_copy_func;
+       bag->key_free_func = key_free_func;
+       bag->mutex = g_mutex_new ();
+
+       return bag;
+}
+
+/**
+ * camel_object_bag_get:
+ * @bag: a #CamelObjectBag
+ * @key: a key
+ *
+ * Lookup an object by @key.  If the key is currently reserved, the function
+ * will block until another thread commits or aborts the reservation.  The
+ * caller owns the reference to the returned object.  Use g_object_unref ()
+ * to unreference it.
+ *
+ * Returns: the object corresponding to @key, or %NULL if not found
+ **/
+gpointer
+camel_object_bag_get (CamelObjectBag *bag,
+                      gconstpointer key)
+{
+       KeyReservation *reservation;
+       gpointer object;
+
+       g_return_val_if_fail (bag != NULL, NULL);
+       g_return_val_if_fail (key != NULL, NULL);
+
+       g_mutex_lock (bag->mutex);
+
+       /* Look for the key in the bag. */
+       object = g_hash_table_lookup (bag->object_table, key);
+       if (object != NULL) {
+               g_object_ref (object);
+               g_mutex_unlock (bag->mutex);
+               return object;
+       }
+
+       /* Check if the key has been reserved. */
+       reservation = key_reservation_lookup (bag, key);
+       if (reservation == NULL) {
+               /* No such key, so return NULL. */
+               g_mutex_unlock (bag->mutex);
+               return NULL;
+       }
+
+       /* Wait for the key to be unreserved. */
+       reservation->waiters++;
+       while (reservation->owner != NULL)
+               g_cond_wait (reservation->cond, bag->mutex);
+       reservation->waiters--;
+
+       /* Check if an object was added by another thread. */
+       object = g_hash_table_lookup (bag->object_table, key);
+       if (object != NULL)
+               g_object_ref (object);
+
+       /* We're not reserving it. */
+       reservation->owner = g_thread_self ();
+       object_bag_unreserve (bag, key);
+
+       g_mutex_unlock (bag->mutex);
+
+       return object;
+}
+
+/**
+ * camel_object_bag_peek:
+ * @bag: a #CamelObjectBag
+ * @key: an unreserved key
+ *
+ * Returns the object for @key in @bag, ignoring any reservations.  If it
+ * isn't committed, then it isn't considered.  This should only be used
+ * where reliable transactional-based state is not required.
+ *
+ * Unlink other "peek" operations, the caller owns the returned object
+ * reference.  Use g_object_unref () to unreference it.
+ *
+ * Returns: the object for @key, or %NULL if @key is reserved or not found
+ **/
+gpointer
+camel_object_bag_peek (CamelObjectBag *bag,
+                       gconstpointer key)
+{
+       gpointer object;
+
+       g_return_val_if_fail (bag != NULL, NULL);
+       g_return_val_if_fail (key != NULL, NULL);
+
+       g_mutex_lock (bag->mutex);
+
+       object = g_hash_table_lookup (bag->object_table, key);
+       if (object != NULL)
+               g_object_ref (object);
+
+       g_mutex_unlock (bag->mutex);
+
+       return object;
+}
+
+/**
+ * camel_object_bag_reserve:
+ * @bag: a #CamelObjectBag
+ * @key: the key to reserve
+ *
+ * Reserves @key in @bag.  If @key is already reserved in another thread,
+ * then wait until the reservation has been committed.
+ *
+ * After reserving @key, you either get a reference to the object
+ * corresponding to @key (similar to camel_object_bag_get()) or you get
+ * %NULL, signifying that you MUST call either camel_object_bag_add() or
+ * camel_object_bag_abort().
+ *
+ * Returns: the object for @key, or %NULL if @key is not found
+ **/
+gpointer
+camel_object_bag_reserve (CamelObjectBag *bag,
+                          gconstpointer key)
+{
+       KeyReservation *reservation;
+       gpointer object;
+
+       g_return_val_if_fail (bag != NULL, NULL);
+       g_return_val_if_fail (key != NULL, NULL);
+
+       g_mutex_lock (bag->mutex);
+
+       /* If object for key already exists, return it immediately. */
+       object = g_hash_table_lookup (bag->object_table, key);
+       if (object != NULL) {
+               g_object_ref (object);
+               g_mutex_unlock (bag->mutex);
+               return object;
+       }
+
+       /* If no such key exists in the bag, create a reservation. */
+       reservation = key_reservation_lookup (bag, key);
+       if (reservation == NULL) {
+               reservation = key_reservation_new (bag, key);
+               g_mutex_unlock (bag->mutex);
+               return NULL;
+       }
+
+       /* Wait for the reservation to be committed or aborted. */
+       reservation->waiters++;
+       while (reservation->owner != NULL)
+               g_cond_wait (reservation->cond, bag->mutex);
+       reservation->owner = g_thread_self ();
+       reservation->waiters--;
+
+       /* Check if the object was added by another thread. */
+       object = g_hash_table_lookup (bag->object_table, key);
+       if (object != NULL) {
+               /* We have an object; no need to reserve the key. */
+               object_bag_unreserve (bag, key);
+               g_object_ref (object);
+       }
+
+       g_mutex_unlock (bag->mutex);
+
+       return object;
+}
+
+/**
+ * camel_object_bag_add:
+ * @bag: a #CamelObjectBag
+ * @key: a reserved key
+ * @object: a #GObject
+ *
+ * Adds @object to @bag.  The @key MUST have been previously reserved using
+ * camel_object_bag_reserve().
+ **/
+void
+camel_object_bag_add (CamelObjectBag *bag,
+                      gconstpointer key,
+                      gpointer object)
+{
+       g_return_if_fail (bag != NULL);
+       g_return_if_fail (key != NULL);
+       g_return_if_fail (G_IS_OBJECT (object));
+
+       g_mutex_lock (bag->mutex);
+
+       if (g_hash_table_lookup (bag->key_table, object) == NULL) {
+               gpointer copied_key;
+
+               copied_key = bag->key_copy_func (key);
+               g_hash_table_insert (bag->key_table, object, copied_key);
+               g_hash_table_insert (bag->object_table, copied_key, object);
+               object_bag_unreserve (bag, key);
+
+               g_object_weak_ref (
+                       G_OBJECT (object), (GWeakNotify)
+                       object_bag_notify, bag);
+       }
+
+       g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_abort:
+ * @bag: a #CamelObjectBag
+ * @key: a reserved key
+ *
+ * Aborts a key reservation.
+ **/
+void
+camel_object_bag_abort (CamelObjectBag *bag,
+                        gconstpointer key)
+{
+       g_return_if_fail (bag != NULL);
+       g_return_if_fail (key != NULL);
+
+       g_mutex_lock (bag->mutex);
+
+       object_bag_unreserve (bag, key);
+
+       g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_rekey:
+ * @bag: a #CamelObjectBag
+ * @object: a #GObject
+ * @new_key: a new key for @object
+ *
+ * Changes the key for @object to @new_key, atomically.
+ *
+ * It is considered a programming error if @object is not found in @bag.
+ * In such case the function will emit a terminal warning and return.
+ **/
+void
+camel_object_bag_rekey (CamelObjectBag *bag,
+                        gpointer object,
+                        gconstpointer new_key)
+{
+       gpointer key;
+
+       g_return_if_fail (bag != NULL);
+       g_return_if_fail (G_IS_OBJECT (object));
+       g_return_if_fail (new_key != NULL);
+
+       g_mutex_lock (bag->mutex);
+
+       key = g_hash_table_lookup (bag->key_table, object);
+       if (key != NULL) {
+               /* Remove the old key. */
+               g_hash_table_remove (bag->object_table, key);
+               g_hash_table_remove (bag->key_table, object);
+
+               /* Insert the new key. */
+               key = bag->key_copy_func (new_key);
+               g_hash_table_insert (bag->object_table, key, object);
+               g_hash_table_insert (bag->key_table, object, key);
+       } else
+               g_warn_if_reached ();
+
+       g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_list:
+ * @bag: a #CamelObjectBag
+ *
+ * Returns a #GPtrArray of all the objects in the bag.  The caller owns
+ * both the array and the object references, so to free the array use:
+ *
+ * <informalexample>
+ *   <programlisting>
+ *     g_ptr_array_foreach (array, g_object_unref, NULL);
+ *     g_ptr_array_free (array, TRUE);
+ *   </programlisting>
+ * </informalexample>
+ *
+ * Returns: an array of objects in @bag
+ **/
+GPtrArray *
+camel_object_bag_list (CamelObjectBag *bag)
+{
+       GPtrArray *array;
+       GList *values;
+
+       g_return_val_if_fail (bag != NULL, NULL);
+
+       /* XXX Too bad we're not returning a GList; this would be trivial. */
+
+       array = g_ptr_array_new ();
+
+       g_mutex_lock (bag->mutex);
+
+       values = g_hash_table_get_values (bag->object_table);
+       while (values != NULL) {
+               g_ptr_array_add (array, g_object_ref (values->data));
+               values = g_list_delete_link (values, values);
+       }
+
+       g_mutex_unlock (bag->mutex);
+
+       return array;
+}
+
+/**
+ * camel_object_bag_remove:
+ * @bag: a #CamelObjectBag
+ * @object: a #GObject
+ *
+ * Removes @object from @bag.
+ **/
+void
+camel_object_bag_remove (CamelObjectBag *bag,
+                         gpointer object)
+{
+       gpointer key;
+
+       g_return_if_fail (bag != NULL);
+       g_return_if_fail (G_IS_OBJECT (object));
+
+       g_mutex_lock (bag->mutex);
+
+       key = g_hash_table_lookup (bag->key_table, object);
+       if (key != NULL) {
+               object_bag_weak_unref (key, object, bag);
+               g_hash_table_remove (bag->key_table, object);
+               g_hash_table_remove (bag->object_table, key);
+       }
+
+       g_mutex_unlock (bag->mutex);
+}
+
+/**
+ * camel_object_bag_destroy:
+ * @bag: a #CamelObjectBag
+ *
+ * Frees @bag.  As a precaution, the function will emit a warning to standard
+ * error and return without freeing @bag if @bag still has reserved keys.
+ **/
+void
+camel_object_bag_destroy (CamelObjectBag *bag)
+{
+       g_return_if_fail (bag != NULL);
+       g_return_if_fail (bag->reserved == NULL);
+
+       /* Drop remaining weak references. */
+       g_hash_table_foreach (
+               bag->object_table, (GHFunc)
+               object_bag_weak_unref, bag);
+
+       g_hash_table_destroy (bag->key_table);
+       g_hash_table_destroy (bag->object_table);
+       g_mutex_free (bag->mutex);
+       g_slice_free (CamelObjectBag, bag);
+}
diff --git a/camel/camel-object-bag.h b/camel/camel-object-bag.h
new file mode 100644 (file)
index 0000000..97dd4fb
--- /dev/null
@@ -0,0 +1,61 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser 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 Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* Manages bags of weakly-referenced GObjects. */
+
+#if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
+#error "Only <camel/camel.h> can be included directly."
+#endif
+
+#ifndef CAMEL_OBJECT_BAG_H
+#define CAMEL_OBJECT_BAG_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _CamelObjectBag CamelObjectBag;
+typedef gpointer (*CamelCopyFunc) (gconstpointer object);
+
+CamelObjectBag *camel_object_bag_new           (GHashFunc key_hash_func,
+                                                GEqualFunc key_equal_func,
+                                                CamelCopyFunc key_copy_func,
+                                                GFreeFunc key_free_func);
+gpointer       camel_object_bag_get            (CamelObjectBag *bag,
+                                                gconstpointer key);
+gpointer       camel_object_bag_peek           (CamelObjectBag *bag,
+                                                gconstpointer key);
+gpointer       camel_object_bag_reserve        (CamelObjectBag *bag,
+                                                gconstpointer key);
+void           camel_object_bag_add            (CamelObjectBag *bag,
+                                                gconstpointer key,
+                                                gpointer object);
+void           camel_object_bag_abort          (CamelObjectBag *bag,
+                                                gconstpointer key);
+void           camel_object_bag_rekey          (CamelObjectBag *bag,
+                                                gpointer object,
+                                                gconstpointer new_key);
+GPtrArray *    camel_object_bag_list           (CamelObjectBag *bag);
+void           camel_object_bag_remove         (CamelObjectBag *bag,
+                                                gpointer object);
+void           camel_object_bag_destroy        (CamelObjectBag *bag);
+
+G_END_DECLS
+
+#endif /* CAMEL_OBJECT_BAG_H */
index 64d83d2..978d0a7 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
-#include <glib.h>
 #include <glib/gstdio.h>
 
 #include "camel-file-utils.h"
-#include "camel-list-utils.h"
 #include "camel-object.h"
 
 #define d(x)
 #define b(x)                   /* object bag */
 #define h(x)                   /* hooks */
 
-/* I just mashed the keyboard for these... */
-#define CAMEL_OBJECT_MAGIC              0x77A344ED
-#define CAMEL_OBJECT_CLASS_MAGIC        0xEE26A997
-#define CAMEL_INTERFACE_MAGIC   0xBCE137A7
-#define CAMEL_OBJECT_FINALISED_MAGIC       0x84AC365F
-#define CAMEL_OBJECT_CLASS_FINALISED_MAGIC 0x7621ABCD
-#define CAMEL_INTERFACE_FINALISED_MAGIC    0x7CB2FE71
+G_DEFINE_ABSTRACT_TYPE (CamelObject, camel_object, G_TYPE_OBJECT)
 
 /* ** Quickie type system ************************************************* */
 
@@ -84,60 +76,22 @@ typedef struct _CamelHookPair
        gpointer data;
 } CamelHookPair;
 
-struct _CamelObjectBagKey {
-       struct _CamelObjectBagKey *next;
-
-       gpointer key;           /* the key reserved */
-       gint waiters;           /* count of threads waiting for key */
-       GThread *owner;         /* the thread that has reserved the bag for a new entry */
-       gint have_owner;
-       GCond *cond;
-};
-
-struct _CamelObjectBag {
-       GHashTable *object_table; /* object by key */
-       GHashTable *key_table;  /* key by object */
-       GEqualFunc equal_key;
-       CamelCopyFunc copy_key;
-       GFreeFunc free_key;
-
-       struct _CamelObjectBagKey *reserved;
-};
-
-/* used to tag a bag hookpair */
-static const gchar bag_name[] = "object:bag";
-
 /* meta-data stuff */
 static CamelHookPair *co_metadata_pair(CamelObject *obj, gint create);
 
 static const gchar meta_name[] = "object:meta";
 #define CAMEL_OBJECT_STATE_FILE_MAGIC "CLMD"
 
-/* interface stuff */
-static const gchar interface_name[] = "object:interface";
-
 /* ********************************************************************** */
 
 static CamelHookList *camel_object_get_hooks(CamelObject *o);
 static void camel_object_free_hooks(CamelObject *o);
-static void camel_object_bag_remove_unlocked(CamelObjectBag *inbag, CamelObject *o, CamelHookList *hooks);
 
 #define camel_object_unget_hooks(o) \
        (g_static_rec_mutex_unlock(&CAMEL_OBJECT(o)->hooks->lock))
 
 /* ********************************************************************** */
 
-/* type-lock must be recursive, for atomically creating classes */
-static GStaticRecMutex type_lock = G_STATIC_REC_MUTEX_INIT;
-/* ref-lock must be global :-(  for object bags to work */
-static GMutex *ref_lock;
-
-static GHashTable *type_table;
-
-/* fundamental types are accessed via global */
-CamelType camel_object_type = CAMEL_INVALID_TYPE;
-CamelType camel_interface_type = CAMEL_INVALID_TYPE;
-
 #define CLASS_LOCK(k) (g_mutex_lock((((CamelObjectClass *)k)->lock)))
 #define CLASS_UNLOCK(k) (g_mutex_unlock((((CamelObjectClass *)k)->lock)))
 #define REF_LOCK() (g_mutex_lock(ref_lock))
@@ -181,54 +135,21 @@ hooks_free(CamelHookList *hooks)
        g_slice_free (CamelHookList, hooks);
 }
 
-/* not checked locked, who cares, only required for people that want to redefine root objects */
-void
-camel_type_init(void)
-{
-       static gint init = FALSE;
-
-       if (init)
-               return;
-
-       init = TRUE;
-       type_table = g_hash_table_new(NULL, NULL);
-       ref_lock = g_mutex_new();
-}
-
 /* ************************************************************************ */
 
 /* CamelObject base methods */
 
-/* Should this return the object to the caller? */
-static void
-cobject_init(CamelObject *o, CamelObjectClass *klass)
-{
-       o->klass = klass;
-       o->magic = CAMEL_OBJECT_MAGIC;
-       o->ref_count = 1;
-       o->flags = 0;
-}
-
-static void
-cobject_finalize(CamelObject *o)
-{
-       /*printf("%p: finalize %s\n", o, o->klass->name);*/
-
-       if (o->ref_count == 0)
-               return;
-
-       camel_object_free_hooks(o);
-
-       o->magic = CAMEL_OBJECT_FINALISED_MAGIC;
-       o->klass = NULL;
-}
-
 static gint
-cobject_getv(CamelObject *o, CamelException *ex, CamelArgGetV *args)
+cobject_getv (CamelObject *o,
+              CamelException *ex,
+              CamelArgGetV *args)
 {
+       CamelObjectClass *class;
        gint i;
        guint32 tag;
 
+       class = CAMEL_OBJECT_GET_CLASS (o);
+
        for (i=0;i<args->argc;i++) {
                CamelArgGet *arg = &args->argv[i];
 
@@ -236,7 +157,7 @@ cobject_getv(CamelObject *o, CamelException *ex, CamelArgGetV *args)
 
                switch (tag & CAMEL_ARG_TAG) {
                case CAMEL_OBJECT_ARG_DESCRIPTION:
-                       *arg->ca_str = (gchar *)o->klass->name;
+                       *arg->ca_str = (gchar *) G_OBJECT_CLASS_NAME (class);
                        break;
                case CAMEL_OBJECT_ARG_STATE_FILE: {
                        CamelHookPair *pair = co_metadata_pair(o, FALSE);
@@ -254,7 +175,9 @@ cobject_getv(CamelObject *o, CamelException *ex, CamelArgGetV *args)
 }
 
 static gint
-cobject_setv(CamelObject *o, CamelException *ex, CamelArgV *args)
+cobject_setv (CamelObject *o,
+              CamelException *ex,
+              CamelArgV *args)
 {
        gint i;
        guint32 tag;
@@ -474,453 +397,53 @@ abort:
 }
 
 static void
-cobject_class_init(CamelObjectClass *klass)
+object_dispose (GObject *object)
 {
-       klass->magic = CAMEL_OBJECT_CLASS_MAGIC;
-
-       klass->getv = cobject_getv;
-       klass->setv = cobject_setv;
-       klass->free = cobject_free;
-
-       klass->state_read = cobject_state_read;
-       klass->state_write = cobject_state_write;
-
-       camel_object_class_add_event(klass, "finalize", NULL);
-}
+       CamelObject *camel_object = CAMEL_OBJECT (object);
 
-static void
-cobject_class_finalize(CamelObjectClass * klass)
-{
-       klass->magic = CAMEL_OBJECT_CLASS_FINALISED_MAGIC;
-
-       g_free(klass);
-}
-
-/* this function must be called for any other in the object system */
-CamelType
-camel_object_get_type(void)
-{
-       if (camel_object_type == CAMEL_INVALID_TYPE) {
-               camel_type_init();
-
-               camel_object_type = camel_type_register(NULL, "CamelObject", /*, 0, 0*/
-                                                       sizeof(CamelObject), sizeof(CamelObjectClass),
-                                                       cobject_class_init, cobject_class_finalize,
-                                                       cobject_init, cobject_finalize);
+       if (camel_object->hooks != NULL) {
+               camel_object_trigger_event (object, "finalize", NULL);
+               camel_object_free_hooks (camel_object);
        }
 
-       return camel_object_type;
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_object_parent_class)->dispose (object);
 }
 
 static void
-camel_type_class_init(CamelObjectClass *klass, CamelObjectClass *type)
-{
-       if (type->parent)
-               camel_type_class_init(klass, type->parent);
-
-       if (type->klass_init)
-               type->klass_init(klass);
-}
-
-static CamelType
-co_type_register(CamelType parent, const gchar * name,
-                /*guint ver, guint rev,*/
-                gsize object_size, gsize klass_size,
-                CamelObjectClassInitFunc class_init,
-                CamelObjectClassFinalizeFunc class_finalize,
-                CamelObjectInitFunc object_init,
-                CamelObjectFinalizeFunc object_finalize)
+camel_object_class_init (CamelObjectClass *class)
 {
-       CamelObjectClass *klass;
-       /*int offset;
-         gsize size;*/
-
-       TYPE_LOCK();
-
-       camel_type_init(); /* has a static boolean itself */
-
-       /* Have to check creation, it might've happened in another thread before we got here */
-       klass = g_hash_table_lookup(type_table, name);
-       if (klass != NULL) {
-               if (klass->klass_size != klass_size || klass->object_size != object_size
-                   || klass->klass_init != class_init || klass->klass_finalize != class_finalize
-                   || klass->init != object_init || klass->finalize != object_finalize) {
-                       g_warning("camel_type_register: Trying to re-register class '%s'", name);
-                       klass = NULL;
-               }
-               TYPE_UNLOCK();
-               return klass;
-       }
-
-       /* this is for objects with no parent as part of their struct ('interfaces'?) */
-       /*offset = parent?parent->klass_size:0;
-       offset = (offset + 3) & (~3);
-
-       size = offset + klass_size;
+       GObjectClass *object_class;
 
-       klass = g_slice_alloc0(size);
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = object_dispose;
 
-       klass->klass_size = size;
-       klass->klass_data = offset;
+       class->hooks = NULL;
 
-       offset = parent?parent->object_size:0;
-       offset = (offset + 3) & (~3);
+       class->getv = cobject_getv;
+       class->setv = cobject_setv;
+       class->free = cobject_free;
 
-       klass->object_size = offset + object_size;
-       klass->object_data = offset;*/
-
-       if (parent
-           && klass_size < parent->klass_size) {
-               g_warning("camel_type_register: '%s' has smaller class size than parent '%s'", name, parent->name);
-               TYPE_UNLOCK();
-               return NULL;
-       }
+       class->state_read = cobject_state_read;
+       class->state_write = cobject_state_write;
 
-       klass = g_slice_alloc0 (klass_size);
-       klass->klass_size = klass_size;
-       klass->object_size = object_size;
-       klass->lock = g_mutex_new();
-       klass->hooks = NULL;
-
-       klass->parent = parent;
-       if (parent) {
-               klass->next = parent->child;
-               parent->child = klass;
-       }
-       klass->name = name;
-
-       /*klass->version = ver;
-         klass->revision = rev;*/
-
-       klass->klass_init = class_init;
-       klass->klass_finalize = class_finalize;
-
-       klass->init = object_init;
-       klass->finalize = object_finalize;
-
-       /* setup before class init, incase class init func uses the type or looks it up ? */
-       g_hash_table_insert(type_table, (gpointer)name, klass);
-
-       camel_type_class_init(klass, klass);
-
-       TYPE_UNLOCK();
-
-       return klass;
-}
-
-CamelType
-camel_type_register(CamelType parent, const gchar * name,
-                   /*guint ver, guint rev,*/
-                   gsize object_size, gsize klass_size,
-                   CamelObjectClassInitFunc class_init,
-                   CamelObjectClassFinalizeFunc class_finalize,
-                   CamelObjectInitFunc object_init,
-                   CamelObjectFinalizeFunc object_finalize)
-{
-       if (parent != NULL && parent->magic != CAMEL_OBJECT_CLASS_MAGIC) {
-               g_warning("camel_type_register: invalid junk parent class for '%s'", name);
-               return NULL;
-       }
-
-       return co_type_register(parent, name, object_size, klass_size, class_init, class_finalize, object_init, object_finalize);
+       camel_object_class_add_event (class, "finalize", NULL);
 }
 
 static void
-camel_object_init(CamelObject *o, CamelObjectClass *klass, CamelType type)
-{
-       if (type->parent)
-               camel_object_init(o, klass, type->parent);
-
-       if (type->init)
-               type->init(o, klass);
-}
-
-CamelObject *
-camel_object_new(CamelType type)
-{
-       CamelObject *o;
-
-       if (type == NULL)
-               return NULL;
-
-       if (type->magic != CAMEL_OBJECT_CLASS_MAGIC)
-               return NULL;
-
-       CLASS_LOCK(type);
-
-       o = g_slice_alloc0 (type->object_size);
-
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-       if (type->instances)
-               type->instances->prev = o;
-       o->next = type->instances;
-       o->prev = NULL;
-       type->instances = o;
-#endif
-
-       CLASS_UNLOCK(type);
-
-       camel_object_init(o, type, type);
-
-       d(printf("%p: new %s()\n", o, o->klass->name));
-
-       return o;
-}
-
-gpointer
-camel_object_ref (gpointer vo)
-{
-       register CamelObject *o = vo;
-
-       g_return_val_if_fail (CAMEL_IS_OBJECT (o), NULL);
-
-       REF_LOCK();
-
-       o->ref_count++;
-       d(printf("%p: ref %s(%d)\n", o, o->klass->name, o->ref_count));
-
-       REF_UNLOCK();
-
-       return vo;
-}
-
-void
-camel_object_unref (gpointer vo)
-{
-       register CamelObject *o = vo;
-       register CamelObjectClass *klass, *k;
-       CamelHookList *hooks = NULL;
-
-       g_return_if_fail(CAMEL_IS_OBJECT(o));
-
-       klass = o->klass;
-
-       if (o->hooks)
-               hooks = camel_object_get_hooks(o);
-
-       REF_LOCK();
-
-       o->ref_count--;
-
-       d(printf("%p: unref %s(%d)\n", o, o->klass->name, o->ref_count));
-
-       if (o->ref_count > 0
-           || (o->flags & CAMEL_OBJECT_DESTROY)) {
-               REF_UNLOCK();
-               if (hooks)
-                       camel_object_unget_hooks(o);
-               return;
-       }
-
-       o->flags |= CAMEL_OBJECT_DESTROY;
-
-       if (hooks)
-               camel_object_bag_remove_unlocked(NULL, o, hooks);
-
-       REF_UNLOCK();
-
-       if (hooks)
-               camel_object_unget_hooks(o);
-
-       camel_object_trigger_event(o, "finalize", NULL);
-
-       k = klass;
-       while (k) {
-               if (k->finalize)
-                       k->finalize(o);
-               k = k->parent;
-       }
-
-       o->magic = CAMEL_OBJECT_FINALISED_MAGIC;
-
-       CLASS_LOCK(klass);
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-       if (o->prev)
-               o->prev->next = o->next;
-       else
-               klass->instances = o->next;
-       if (o->next)
-               o->next->prev = o->prev;
-#endif
-       g_slice_free1 (klass->object_size, o);
-       CLASS_UNLOCK(klass);
-}
-
-const gchar *
-camel_type_to_name(CamelType type)
-{
-       if (type == NULL)
-               return "(NULL class)";
-
-       if (type->magic == CAMEL_OBJECT_CLASS_MAGIC)
-               return type->name;
-
-       if (type->magic == CAMEL_INTERFACE_MAGIC)
-               return type->name;
-
-       return "(Junk class)";
-}
-
-CamelType camel_name_to_type(const gchar *name)
-{
-       /* TODO: Load a class off disk (!) */
-
-       return g_hash_table_lookup(type_table, name);
-}
-
-static gchar *
-desc_data(CamelObject *o, guint32 ok)
+camel_object_init (CamelObject *object)
 {
-       gchar *what;
-
-       if (o == NULL)
-               what = g_strdup("NULL OBJECT");
-       else if (o->magic == ok)
-               what = NULL;
-       else if (o->magic == CAMEL_OBJECT_MAGIC)
-               what = g_strdup_printf("CLASS '%s'", ((CamelObjectClass *)o)->name);
-       else if (o->magic == CAMEL_OBJECT_CLASS_MAGIC)
-               what = g_strdup_printf("CLASS '%s'", ((CamelObjectClass *)o)->name);
-       else if (o->magic == CAMEL_INTERFACE_MAGIC)
-               what = g_strdup_printf("INTERFACE '%s'", ((CamelObjectClass *)o)->name);
-       else if (o->magic == CAMEL_OBJECT_FINALISED_MAGIC)
-               what = g_strdup_printf("finalized OBJECT");
-       else if (o->magic == CAMEL_OBJECT_CLASS_FINALISED_MAGIC)
-               what = g_strdup_printf("finalized CLASS");
-       else if (o->magic == CAMEL_INTERFACE_FINALISED_MAGIC)
-               what = g_strdup_printf("finalized INTERFACE");
-       else
-               what = g_strdup_printf("junk data");
-
-       return what;
-}
-
-#define check_magic(o, ctype, omagic) \
-       ( ((CamelObject *)(o))->magic == (omagic) \
-       && (ctype)->magic == CAMEL_OBJECT_CLASS_MAGIC) \
-       ? 1 : check_magic_fail(o, ctype, omagic)
-
-static gboolean
-check_magic_fail(gpointer o, CamelType ctype, guint32 omagic)
-{
-       gchar *what, *to;
-
-       what = desc_data(o, omagic);
-       to = desc_data((CamelObject *)ctype, CAMEL_OBJECT_CLASS_MAGIC);
-
-       if (what || to) {
-               if (what == NULL) {
-                       if (omagic == CAMEL_OBJECT_MAGIC)
-                               what = g_strdup_printf("OBJECT '%s'", ((CamelObject *)o)->klass->name);
-                       else
-                               what = g_strdup_printf("OBJECT '%s'", ((CamelObjectClass *)o)->name);
-               }
-               if (to == NULL)
-                       to = g_strdup_printf("OBJECT '%s'", ctype->name);
-               g_warning("Trying to check %s is %s", what, to);
-               g_free(what);
-               g_free(to);
-
-               return FALSE;
-       }
-
-       return TRUE;
-}
-
-gboolean
-camel_object_is(CamelObject *o, CamelType ctype)
-{
-       CamelObjectClass *k;
-
-       g_return_val_if_fail(o != NULL, FALSE);
-       g_return_val_if_fail(check_magic(o, ctype, CAMEL_OBJECT_MAGIC), FALSE);
-
-       k = o->klass;
-       while (k) {
-               if (k == ctype)
-                       return TRUE;
-               k = k->parent;
-       }
-
-       return FALSE;
-}
-
-gboolean
-camel_object_class_is(CamelObjectClass *k, CamelType ctype)
-{
-       g_return_val_if_fail(k != NULL, FALSE);
-       g_return_val_if_fail(check_magic(k, ctype, CAMEL_OBJECT_CLASS_MAGIC), FALSE);
-
-       while (k) {
-               if (k == ctype)
-                       return TRUE;
-               k = k->parent;
-       }
-
-       return FALSE;
-}
-
-CamelObject *
-camel_object_cast(CamelObject *o, CamelType ctype)
-{
-       CamelObjectClass *k;
-
-        g_return_val_if_fail(o != NULL, NULL);
-       g_return_val_if_fail(check_magic(o, ctype, CAMEL_OBJECT_MAGIC), NULL);
-
-       k = o->klass;
-       while (k) {
-               if (k == ctype)
-                       return o;
-               k = k->parent;
-       }
-
-       g_warning("Object %p (class '%s') doesn't have '%s' in its hierarchy", (gpointer) o, o->klass->name, ctype->name);
-
-       return NULL;
-}
-
-CamelObjectClass *
-camel_object_class_cast(CamelObjectClass *k, CamelType ctype)
-{
-       CamelObjectClass *r = k;
-
-       g_return_val_if_fail(check_magic(k, ctype, CAMEL_OBJECT_CLASS_MAGIC), NULL);
-
-       while (k) {
-               if (k == ctype)
-                       return r;
-               k = k->parent;
-       }
-
-       g_warning("Class '%s' doesn't have '%s' in its hierarchy", r->name, ctype->name);
-
-       return NULL;
-}
-
-static CamelHookPair *
-co_find_pair(CamelObjectClass *klass, const gchar *name)
-{
-       CamelHookPair *hook;
-
-       hook = klass->hooks;
-       while (hook) {
-               if (strcmp(hook->name, name) == 0)
-                       return hook;
-               hook = hook->next;
-       }
-
-       return NULL;
 }
 
 static CamelHookPair *
-co_find_pair_ptr(CamelObjectClass *klass, const gchar *name)
+co_find_pair (CamelObjectClass *class,
+              const gchar *name)
 {
        CamelHookPair *hook;
 
-       hook = klass->hooks;
+       hook = class->hooks;
        while (hook) {
-               if (hook->name == name)
+               if (strcmp (hook->name, name) == 0)
                        return hook;
                hook = hook->next;
        }
@@ -930,55 +453,51 @@ co_find_pair_ptr(CamelObjectClass *klass, const gchar *name)
 
 /* class functions */
 void
-camel_object_class_add_event(CamelObjectClass *klass, const gchar *name, CamelObjectEventPrepFunc prep)
+camel_object_class_add_event (CamelObjectClass *class,
+                              const gchar *name,
+                              CamelObjectEventPrepFunc prep)
 {
        CamelHookPair *pair;
 
        g_return_if_fail (name);
 
-       pair = co_find_pair(klass, name);
+       pair = co_find_pair (class, name);
        if (pair) {
-               g_warning("camel_object_class_add_event: '%s' is already declared for '%s'",
-                         name, klass->name);
+               g_warning ("%s: '%s' is already declared for '%s'",
+                       G_STRFUNC, name, G_OBJECT_CLASS_NAME (class));
                return;
        }
 
-       if (klass->magic == CAMEL_INTERFACE_MAGIC && prep != NULL) {
-               g_warning("camel_object_class_add_event: '%s', CamelInterface '%s' may not have an event prep function - ignored",
-                         name, klass->name);
-               prep = NULL;
-       }
-
-       pair = pair_alloc();
+       pair = pair_alloc ();
        pair->name = name;
        pair->func.prep = prep;
        pair->flags = 0;
 
-       pair->next = klass->hooks;
-       klass->hooks = pair;
+       pair->next = class->hooks;
+       class->hooks = pair;
 }
 
 /* free hook data */
 static void
 camel_object_free_hooks(CamelObject *o)
 {
-       CamelHookPair *pair, *next;
+        CamelHookPair *pair, *next;
 
-       if (o->hooks) {
-               g_assert(o->hooks->depth == 0);
-               g_assert((o->hooks->flags & CAMEL_HOOK_PAIR_REMOVED) == 0);
+        if (o->hooks) {
+                g_assert(o->hooks->depth == 0);
+                g_assert((o->hooks->flags & CAMEL_HOOK_PAIR_REMOVED) == 0);
 
-               pair = o->hooks->list;
-               while (pair) {
-                       next = pair->next;
+                pair = o->hooks->list;
+                while (pair) {
+                        next = pair->next;
 
-                       pair_free(pair);
-                       pair = next;
-               }
-               g_static_rec_mutex_free(&o->hooks->lock);
-               hooks_free(o->hooks);
-               o->hooks = NULL;
-       }
+                        pair_free(pair);
+                        pair = next;
+                }
+                g_static_rec_mutex_free(&o->hooks->lock);
+                hooks_free(o->hooks);
+                o->hooks = NULL;
+        }
 }
 
 /* return (allocate if required) the object's hook list, locking at the same time */
@@ -1010,9 +529,13 @@ camel_object_get_hooks(CamelObject *o)
 }
 
 guint
-camel_object_hook_event(gpointer vo, const gchar * name, CamelObjectEventHookFunc func, gpointer data)
+camel_object_hook_event (gpointer vo,
+                         const gchar *name,
+                         CamelObjectEventHookFunc func,
+                         gpointer data)
 {
        CamelObject *obj = vo;
+       CamelObjectClass *class;
        CamelHookPair *pair, *hook;
        CamelHookList *hooks;
        gint id;
@@ -1021,28 +544,18 @@ camel_object_hook_event(gpointer vo, const gchar * name, CamelObjectEventHookFun
        g_return_val_if_fail(name != NULL, 0);
        g_return_val_if_fail(func != NULL, 0);
 
-       hook = co_find_pair(obj->klass, name);
+       class = CAMEL_OBJECT_GET_CLASS (obj);
+
+       hook = co_find_pair(class, name);
 
        /* Check all interfaces on this object for events defined on them */
        if (hook == NULL) {
-               pair = co_find_pair_ptr(obj->klass, interface_name);
-               if (pair) {
-                       GPtrArray *interfaces = pair->data;
-                       gint i;
-
-                       for (i=0;i<interfaces->len;i++) {
-                               hook = co_find_pair(interfaces->pdata[i], name);
-                               if (hook)
-                                       goto setup;
-                       }
-               }
-
                g_warning("camel_object_hook_event: trying to hook event '%s' in class '%s' with no defined events.",
-                         name, obj->klass->name);
+                         name, G_OBJECT_CLASS_NAME (class));
 
                return 0;
        }
-setup:
+
        /* setup hook pair */
        pair = pair_alloc();
        pair->name = hook->name;        /* effectively static! */
@@ -1064,7 +577,8 @@ setup:
 }
 
 void
-camel_object_remove_event(gpointer vo, guint id)
+camel_object_remove_event (gpointer vo,
+                           guint id)
 {
        CamelObject *obj = vo;
        CamelHookList *hooks;
@@ -1075,7 +589,7 @@ camel_object_remove_event(gpointer vo, guint id)
 
        if (obj->hooks == NULL) {
                g_warning("camel_object_unhook_event: trying to unhook '%u' from an instance of '%s' with no hooks",
-                         id, obj->klass->name);
+                         id, G_OBJECT_TYPE_NAME (obj));
                return;
        }
 
@@ -1105,11 +619,14 @@ camel_object_remove_event(gpointer vo, guint id)
        camel_object_unget_hooks(obj);
 
        g_warning("camel_object_unhook_event: cannot find hook id %u in instance of '%s'",
-                 id, obj->klass->name);
+                 id, G_OBJECT_TYPE_NAME (obj));
 }
 
 void
-camel_object_unhook_event(gpointer vo, const gchar * name, CamelObjectEventHookFunc func, gpointer data)
+camel_object_unhook_event (gpointer vo,
+                           const gchar *name,
+                           CamelObjectEventHookFunc func,
+                           gpointer data)
 {
        CamelObject *obj = vo;
        CamelHookList *hooks;
@@ -1121,7 +638,7 @@ camel_object_unhook_event(gpointer vo, const gchar * name, CamelObjectEventHookF
 
        if (obj->hooks == NULL) {
                g_warning("camel_object_unhook_event: trying to unhook '%s' from an instance of '%s' with no hooks",
-                         name, obj->klass->name);
+                         name, G_OBJECT_TYPE_NAME (obj));
                return;
        }
 
@@ -1153,13 +670,16 @@ camel_object_unhook_event(gpointer vo, const gchar * name, CamelObjectEventHookF
        camel_object_unget_hooks(obj);
 
        g_warning("camel_object_unhook_event: cannot find hook/data pair %p/%p in an instance of '%s' attached to '%s'",
-                 (gpointer) func, data, obj->klass->name, name);
+                 (gpointer) func, data, G_OBJECT_TYPE_NAME (obj), name);
 }
 
 void
-camel_object_trigger_event(gpointer vo, const gchar * name, gpointer event_data)
+camel_object_trigger_event (gpointer vo,
+                            const gchar *name,
+                            gpointer event_data)
 {
        CamelObject *obj = vo;
+       CamelObjectClass *class;
        CamelHookList *hooks;
        CamelHookPair *pair, **pairs, *parent, *hook;
        gint i, size;
@@ -1168,27 +688,17 @@ camel_object_trigger_event(gpointer vo, const gchar * name, gpointer event_data)
        g_return_if_fail (CAMEL_IS_OBJECT (obj));
        g_return_if_fail (name);
 
-       hook = co_find_pair(obj->klass, name);
+       class = CAMEL_OBJECT_GET_CLASS (obj);
+
+       hook = co_find_pair(class, name);
        if (hook)
                goto trigger;
 
        if (obj->hooks == NULL)
                return;
 
-       /* interface events can't have prep functions */
-       pair = co_find_pair_ptr(obj->klass, interface_name);
-       if (pair) {
-               GPtrArray *interfaces = pair->data;
-
-               for (i=0;i<interfaces->len;i++) {
-                       hook = co_find_pair(interfaces->pdata[i], name);
-                       if (hook)
-                               goto trigger_interface;
-               }
-       }
-
        g_warning("camel_object_trigger_event: trying to trigger unknown event '%s' in class '%s'",
-                 name, obj->klass->name);
+                 name, G_OBJECT_TYPE_NAME (obj));
 
        return;
 
@@ -1201,9 +711,8 @@ trigger:
        if (obj->hooks == NULL)
                return;
 
-trigger_interface:
        /* lock the object for hook emission */
-       camel_object_ref (obj);
+       g_object_ref(obj);
        hooks = camel_object_get_hooks(obj);
 
        if (hooks->list) {
@@ -1246,64 +755,92 @@ trigger_interface:
        }
 
        camel_object_unget_hooks(obj);
-       camel_object_unref (obj);
+       g_object_unref(obj);
 }
 
 /* get/set arg methods */
-gint camel_object_set(gpointer vo, CamelException *ex, ...)
+gint
+camel_object_set (gpointer vo,
+                  CamelException *ex,
+                  ...)
 {
+       CamelObjectClass *class;
        CamelArgV args;
        CamelObject *o = vo;
-       CamelObjectClass *klass = o->klass;
        gint ret = 0;
 
        g_return_val_if_fail(CAMEL_IS_OBJECT(o), -1);
 
        camel_argv_start(&args, ex);
 
+       class = CAMEL_OBJECT_GET_CLASS (o);
+       g_return_val_if_fail (class->setv != NULL, -1);
+
        while (camel_argv_build(&args) && ret == 0)
-               ret = klass->setv(o, ex, &args);
+               ret = class->setv(o, ex, &args);
        if (ret == 0)
-               ret = klass->setv(o, ex, &args);
+               ret = class->setv(o, ex, &args);
 
        camel_argv_end(&args);
 
        return ret;
 }
 
-gint camel_object_setv(gpointer vo, CamelException *ex, CamelArgV *args)
+gint
+camel_object_setv (gpointer vo,
+                   CamelException *ex,
+                   CamelArgV *args)
 {
+       CamelObjectClass *class;
+
        g_return_val_if_fail(CAMEL_IS_OBJECT(vo), -1);
 
-       return ((CamelObject *)vo)->klass->setv(vo, ex, args);
+       class = CAMEL_OBJECT_GET_CLASS (vo);
+       g_return_val_if_fail (class->setv != NULL, -1);
+
+       return class->setv (vo, ex, args);
 }
 
-gint camel_object_get(gpointer vo, CamelException *ex, ...)
+gint
+camel_object_get (gpointer vo,
+                  CamelException *ex,
+                  ...)
 {
+       CamelObjectClass *class;
        CamelObject *o = vo;
        CamelArgGetV args;
-       CamelObjectClass *klass = o->klass;
        gint ret = 0;
 
        g_return_val_if_fail(CAMEL_IS_OBJECT(o), -1);
 
        camel_argv_start(&args, ex);
 
+       class = CAMEL_OBJECT_GET_CLASS (o);
+       g_return_val_if_fail (class->getv != NULL, -1);
+
        while (camel_arggetv_build(&args) && ret == 0)
-               ret = klass->getv(o, ex, &args);
+               ret = class->getv(o, ex, &args);
        if (ret == 0)
-               ret = klass->getv(o, ex, &args);
+               ret = class->getv(o, ex, &args);
 
        camel_argv_end(&args);
 
        return ret;
 }
 
-gint camel_object_getv(gpointer vo, CamelException *ex, CamelArgGetV *args)
+gint
+camel_object_getv (gpointer vo,
+                   CamelException *ex,
+                   CamelArgGetV *args)
 {
+       CamelObjectClass *class;
+
        g_return_val_if_fail(CAMEL_IS_OBJECT(vo), -1);
 
-       return ((CamelObject *)vo)->klass->getv(vo, ex, args);
+       class = CAMEL_OBJECT_GET_CLASS (vo);
+       g_return_val_if_fail (class->getv != NULL, -1);
+
+       return class->getv (vo, ex, args);
 }
 
 /* NB: If this doesn't return NULL, then you must unget_hooks when done */
@@ -1365,7 +902,7 @@ gint camel_object_state_read(gpointer vo)
        if (fp != NULL) {
                if (fread(magic, 4, 1, fp) == 1
                    && memcmp(magic, CAMEL_OBJECT_STATE_FILE_MAGIC, 4) == 0)
-                       res = obj->klass->state_read(obj, fp);
+                       res = CAMEL_OBJECT_GET_CLASS (obj)->state_read(obj, fp);
                else
                        res = -1;
                fclose(fp);
@@ -1402,7 +939,7 @@ gint camel_object_state_write(gpointer vo)
        fp = g_fopen(savename, "wb");
        if (fp != NULL) {
                if (fwrite(CAMEL_OBJECT_STATE_FILE_MAGIC, 4, 1, fp) == 1
-                   && obj->klass->state_write(obj, fp) == 0) {
+                   && CAMEL_OBJECT_GET_CLASS (obj)->state_write(obj, fp) == 0) {
                        if (fclose(fp) == 0) {
                                res = 0;
                                g_rename(savename, file);
@@ -1441,487 +978,5 @@ void camel_object_free(gpointer vo, guint32 tag, gpointer value)
           This would also let us copy and do other things with args
           we can't do, but i can't see a use for that yet ...  */
 
-       ((CamelObject *)vo)->klass->free(vo, tag, value);
-}
-
-static void
-object_class_dump_tree_rec(CamelType root, gint depth)
-{
-       gchar *p;
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-       struct _CamelObject *o;
-#endif
-
-       p = alloca(depth*2+1);
-       memset(p, ' ', depth*2);
-       p[depth*2] = 0;
-
-       while (root) {
-               CLASS_LOCK(root);
-               printf("%sClass: %s\n", p, root->name);
-               /*printf("%sVersion: %u.%u\n", p, root->version, root->revision);*/
-               if (root->hooks) {
-                       CamelHookPair *pair = root->hooks;
-
-                       while (pair) {
-                               printf("%s  event '%s' prep %p\n", p, pair->name, (gpointer) pair->func.prep);
-                               pair = pair->next;
-                       }
-               }
-
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-               o = root->instances;
-               while (o) {
-                       printf("%s instance %p [%d]\n", p, (gpointer) o, o->ref_count);
-                       /* todo: should lock hooks while it scans them */
-                       if (o->hooks) {
-                               CamelHookPair *pair = o->hooks->list;
-
-                               while (pair) {
-                                       printf("%s  hook '%s' func %p data %p\n", p, pair->name, (gpointer) pair->func.event, (gpointer) pair->data);
-                                       pair = pair->next;
-                               }
-                       }
-                       o = o->next;
-               }
-#endif
-               CLASS_UNLOCK(root);
-
-               if (root->child)
-                       object_class_dump_tree_rec(root->child, depth+1);
-
-               root = root->next;
-       }
-}
-
-void
-camel_object_class_dump_tree(CamelType root)
-{
-       object_class_dump_tree_rec(root, 0);
-}
-
-/**
- * camel_object_bag_new:
- * @hash:
- * @equal:
- * @keycopy:
- * @keyfree:
- *
- * Allocate a new object bag.  Object bag's are key'd hash tables of
- * camel-objects which can be updated atomically using transaction
- * semantics.
- *
- * Returns:
- **/
-CamelObjectBag *
-camel_object_bag_new(GHashFunc hash, GEqualFunc equal, CamelCopyFunc keycopy, GFreeFunc keyfree)
-{
-       CamelObjectBag *bag;
-
-       bag = g_malloc(sizeof(*bag));
-       bag->object_table = g_hash_table_new(hash, equal);
-       bag->equal_key = equal;
-       bag->copy_key = keycopy;
-       bag->free_key = keyfree;
-       bag->key_table = g_hash_table_new(NULL, NULL);
-       bag->reserved = NULL;
-
-       return bag;
-}
-
-static void
-save_object(gpointer key, CamelObject *o, GPtrArray *objects)
-{
-       g_ptr_array_add(objects, o);
-}
-
-void
-camel_object_bag_destroy(CamelObjectBag *bag)
-{
-       GPtrArray *objects = g_ptr_array_new();
-       gint i;
-
-       g_assert(bag->reserved == NULL);
-
-       g_hash_table_foreach(bag->object_table, (GHFunc)save_object, objects);
-       for (i=0;i<objects->len;i++)
-               camel_object_bag_remove(bag, objects->pdata[i]);
-
-       g_ptr_array_free(objects, TRUE);
-       g_hash_table_destroy(bag->object_table);
-       g_hash_table_destroy(bag->key_table);
-       g_free(bag);
-}
-
-/* must be called with ref_lock held */
-static void
-co_bag_unreserve(CamelObjectBag *bag, gconstpointer key)
-{
-       struct _CamelObjectBagKey *res, *resp;
-
-       resp = (struct _CamelObjectBagKey *)&bag->reserved;
-       res = resp->next;
-       while (res) {
-               if (bag->equal_key(res->key, key))
-                       break;
-               resp = res;
-               res = res->next;
-       }
-
-       g_assert(res != NULL);
-       g_assert(res->have_owner && res->owner == g_thread_self ());
-
-       if (res->waiters > 0) {
-               b(printf("unreserve bag '%s', waking waiters\n", (gchar *)key));
-               res->have_owner = FALSE;
-               g_cond_signal(res->cond);
-       } else {
-               b(printf("unreserve bag '%s', no waiters, freeing reservation\n", (gchar *)key));
-               resp->next = res->next;
-               bag->free_key(res->key);
-               g_cond_free(res->cond);
-               g_free(res);
-       }
-}
-
-/**
- * camel_object_bag_add:
- * @bag:
- * @key:
- * @vo:
- *
- * Add an object @vo to the object bag @bag.  The @key MUST have
- * previously been reserved using camel_object_bag_reserve().
- **/
-void
-camel_object_bag_add(CamelObjectBag *bag, gconstpointer key, gpointer vo)
-{
-       CamelObject *o = vo;
-       CamelHookList *hooks;
-       CamelHookPair *pair;
-       gpointer k;
-
-       hooks = camel_object_get_hooks(o);
-       REF_LOCK();
-
-       pair = hooks->list;
-       while (pair) {
-               if (pair->name == bag_name && pair->data == bag) {
-                       REF_UNLOCK();
-                       camel_object_unget_hooks(o);
-                       return;
-               }
-               pair = pair->next;
-       }
-
-       pair = pair_alloc();
-       pair->name = bag_name;
-       pair->data = bag;
-       pair->flags = 0;
-       pair->func.event = NULL;
-
-       pair->next = hooks->list;
-       hooks->list = pair;
-       hooks->list_length++;
-
-       k = bag->copy_key(key);
-       g_hash_table_insert(bag->object_table, k, vo);
-       g_hash_table_insert(bag->key_table, vo, k);
-
-       co_bag_unreserve(bag, key);
-
-       REF_UNLOCK();
-       camel_object_unget_hooks(o);
-}
-
-/**
- * camel_object_bag_get:
- * @bag:
- * @key:
- *
- * Lookup an object by @key.  If the key is currently reserved, then
- * wait until the key has been committed before continuing.
- *
- * Returns: NULL if the object corresponding to @key is not
- * in the bag.  Otherwise a ref'd object pointer which the caller owns
- * the ref to.
- **/
-gpointer
-camel_object_bag_get(CamelObjectBag *bag, gconstpointer key)
-{
-       CamelObject *o;
-
-       REF_LOCK();
-
-       o = g_hash_table_lookup(bag->object_table, key);
-       if (o) {
-               b(printf("object bag get '%s' = %p\n", (gchar *)key, o));
-
-               /* we use the same lock as the refcount */
-               o->ref_count++;
-       } else {
-               struct _CamelObjectBagKey *res = bag->reserved;
-
-               /* check if this name is reserved currently, if so wait till its finished */
-               while (res) {
-                       if (bag->equal_key(res->key, key))
-                               break;
-                       res = res->next;
-               }
-
-               if (res) {
-                       b(printf("object bag get '%s', reserved, waiting\n", (gchar *)key));
-
-                       res->waiters++;
-                       g_assert(!res->have_owner || res->owner != g_thread_self ());
-                       g_cond_wait(res->cond, ref_lock);
-                       res->waiters--;
-
-                       /* re-check if it slipped in */
-                       o = g_hash_table_lookup(bag->object_table, key);
-                       if (o)
-                               o->ref_count++;
-
-                       b(printf("object bag get '%s', finished waiting, got %p\n", (gchar *)key, o));
-
-                       /* we don't actually reserve it */
-                       res->owner = g_thread_self ();
-                       res->have_owner = TRUE;
-                       co_bag_unreserve(bag, key);
-               }
-       }
-
-       REF_UNLOCK();
-
-       return o;
-}
-
-/**
- * camel_object_bag_peek:
- * @bag:
- * @key:
- *
- * Lookup the object @key in @bag, ignoring any reservations.  If it
- * isn't committed, then it isn't considered.  This should only be
- * used where reliable transactional-based state is not required.
- *
- * Unlike other 'peek' operations, the object is still reffed if
- * found.
- *
- * Returns: A referenced object, or NULL if @key is not
- * present in the bag.
- **/
-gpointer
-camel_object_bag_peek(CamelObjectBag *bag, gconstpointer key)
-{
-       CamelObject *o;
-
-       REF_LOCK();
-
-       o = g_hash_table_lookup(bag->object_table, key);
-       if (o) {
-               /* we use the same lock as the refcount */
-               o->ref_count++;
-       }
-
-       REF_UNLOCK();
-
-       return o;
-}
-
-/**
- * camel_object_bag_reserve:
- * @bag:
- * @key:
- *
- * Reserve a key in the object bag.  If the key is already reserved in
- * another thread, then wait until the reservation has been committed.
- *
- * After reserving a key, you either get a reffed pointer to the
- * object corresponding to the key, similar to object_bag_get, or you
- * get NULL, signifying that you then MIST call either object_bag_add
- * or object_bag_abort.
- *
- * You may reserve multiple keys from the same thread, but they should
- * always be reserved in the same order, to avoid deadlocks.
- *
- * Returns:
- **/
-gpointer
-camel_object_bag_reserve(CamelObjectBag *bag, gconstpointer key)
-{
-       CamelObject *o;
-
-       REF_LOCK();
-
-       o = g_hash_table_lookup(bag->object_table, key);
-       if (o) {
-               o->ref_count++;
-       } else {
-               struct _CamelObjectBagKey *res = bag->reserved;
-
-               while (res) {
-                       if (bag->equal_key(res->key, key))
-                               break;
-                       res = res->next;
-               }
-
-               if (res) {
-                       b(printf("bag reserve %s, already reserved, waiting\n", (gchar *)key));
-                       g_assert(!res->have_owner || res->owner != g_thread_self ());
-                       res->waiters++;
-                       g_cond_wait(res->cond, ref_lock);
-                       res->waiters--;
-                       /* incase its slipped in while we were waiting */
-                       o = g_hash_table_lookup(bag->object_table, key);
-                       if (o) {
-                               b(printf("finished wait, someone else created '%s' = %p\n", (gchar *)key, o));
-                               o->ref_count++;
-                               /* in which case we dont need to reserve the bag either */
-                               res->owner = g_thread_self ();
-                               res->have_owner = TRUE;
-                               co_bag_unreserve(bag, key);
-                       } else {
-                               b(printf("finished wait, now owner of '%s'\n", (gchar *)key));
-                               res->owner = g_thread_self ();
-                               res->have_owner = TRUE;
-                       }
-               } else {
-                       b(printf("bag reserve %s, no key, reserving\n", (gchar *)key));
-                       res = g_malloc(sizeof(*res));
-                       res->waiters = 0;
-                       res->key = bag->copy_key(key);
-                       res->cond = g_cond_new();
-                       res->owner = g_thread_self ();
-                       res->have_owner = TRUE;
-                       res->next = bag->reserved;
-                       bag->reserved = res;
-               }
-       }
-
-       REF_UNLOCK();
-
-       return o;
-}
-
-/**
- * camel_object_bag_abort:
- * @bag:
- * @key:
- *
- * Abort a key reservation.
- **/
-void
-camel_object_bag_abort(CamelObjectBag *bag, gconstpointer key)
-{
-       REF_LOCK();
-
-       co_bag_unreserve(bag, key);
-
-       REF_UNLOCK();
-}
-
-/**
- * camel_object_bag_rekey:
- * @bag:
- * @o:
- * @newkey:
- *
- * Re-key an object, atomically.  The key for object @o is set to
- * @newkey, in an atomic manner.
- *
- * It is an api (fatal) error if @o is not currently in the bag.
- **/
-void
-camel_object_bag_rekey(CamelObjectBag *bag, gpointer o, gconstpointer newkey)
-{
-       gpointer oldkey;
-
-       REF_LOCK();
-
-       if (g_hash_table_lookup_extended(bag->key_table, o, NULL, &oldkey)) {
-               g_hash_table_remove(bag->object_table, oldkey);
-               g_hash_table_remove(bag->key_table, o);
-               bag->free_key(oldkey);
-               oldkey = bag->copy_key(newkey);
-               g_hash_table_insert(bag->object_table, oldkey, o);
-               g_hash_table_insert(bag->key_table, o, oldkey);
-       } else {
-               abort();
-       }
-
-       REF_UNLOCK();
-}
-
-static void
-save_bag(gpointer key, CamelObject *o, GPtrArray *list)
-{
-       /* we have the refcount lock already */
-       o->ref_count++;
-       g_ptr_array_add(list, o);
-}
-
-/* get a list of all objects in the bag, ref'd
-   ignores any reserved keys */
-GPtrArray *
-camel_object_bag_list(CamelObjectBag *bag)
-{
-       GPtrArray *list;
-
-       list = g_ptr_array_new();
-
-       REF_LOCK();
-       g_hash_table_foreach(bag->object_table, (GHFunc)save_bag, list);
-       REF_UNLOCK();
-
-       return list;
-}
-
-/* if bag is NULL, remove all bags from object */
-static void
-camel_object_bag_remove_unlocked(CamelObjectBag *inbag, CamelObject *o, CamelHookList *hooks)
-{
-       CamelHookPair *pair, *parent;
-       gpointer oldkey;
-       CamelObjectBag *bag;
-
-       parent = (CamelHookPair *)&hooks->list;
-       pair = parent->next;
-       while (pair) {
-               if (pair->name == bag_name
-                   && (inbag == NULL || inbag == pair->data)) {
-                       bag = pair->data;
-                       /* lookup object in table? */
-                       oldkey = g_hash_table_lookup(bag->key_table, o);
-                       if (oldkey) {
-                               g_hash_table_remove(bag->key_table, o);
-                               g_hash_table_remove(bag->object_table, oldkey);
-                               bag->free_key(oldkey);
-                       }
-                       parent->next = pair->next;
-                       pair_free(pair);
-                       hooks->list_length--;
-               } else {
-                       parent = pair;
-               }
-               pair = parent->next;
-       }
-}
-
-void
-camel_object_bag_remove(CamelObjectBag *inbag, gpointer vo)
-{
-       CamelObject *o = vo;
-       CamelHookList *hooks;
-
-       if (o->hooks == NULL)
-               return;
-
-       hooks = camel_object_get_hooks(o);
-       REF_LOCK();
-
-       camel_object_bag_remove_unlocked(inbag, o, hooks);
-
-       REF_UNLOCK();
-       camel_object_unget_hooks(o);
+       CAMEL_OBJECT_GET_CLASS (vo)->free (vo, tag, value);
 }
index e2e3f83..30eb955 100644 (file)
@@ -29,7 +29,7 @@
 #ifndef CAMEL_OBJECT_H
 #define CAMEL_OBJECT_H
 
-#include <glib.h>
+#include <glib-object.h>
 #include <stdio.h>             /* FILE */
 #include <stdlib.h>            /* gsize */
 #include <stdarg.h>
 #include <camel/camel-arg.h>
 #include <camel/camel-exception.h>
 
-/* turn on so that camel_object_class_dump_tree() dumps object instances as well */
-#define CAMEL_OBJECT_TRACK_INSTANCES
+/* Standard GObject macros */
+#define CAMEL_TYPE_OBJECT \
+       (camel_object_get_type ())
+#define CAMEL_OBJECT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_OBJECT, CamelObject))
+#define CAMEL_OBJECT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_OBJECT, CamelObjectClass))
+#define CAMEL_IS_OBJECT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_OBJECT))
+#define CAMEL_IS_OBJECT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_OBJECT))
+#define CAMEL_OBJECT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_OBJECT, CamelObjectClass))
 
 G_BEGIN_DECLS
 
-typedef struct _CamelObjectClass *CamelType;
-
-#ifdef G_DISABLE_CHECKS
-#define CAMEL_CHECK_CAST(obj, ctype, ptype)         ((ptype *) obj)
-#define CAMEL_CHECK_CLASS_CAST(klass, ctype, ptype) ((ptype *) klass)
-#else
-#define CAMEL_CHECK_CAST(obj, ctype, ptype)         ((ptype *) camel_object_cast ((CamelObject *)(obj), (CamelType)(ctype)))
-#define CAMEL_CHECK_CLASS_CAST(klass, ctype, ptype) ((ptype *) camel_object_class_cast ((CamelObjectClass *)(klass), (CamelType)(ctype) ))
-#endif
-#define CAMEL_CHECK_TYPE(obj, ctype)                (camel_object_is ((CamelObject *)(obj), (CamelType)(ctype) ))
-#define CAMEL_CHECK_CLASS_TYPE(klass, ctype)        (camel_object_class_is ((CamelObjectClass *)(klass), (CamelType)(ctype)))
-
-extern CamelType camel_object_type;
-
-#define CAMEL_TYPE_OBJECT        (camel_object_type)
-
-/* we can't check casts till we've got the type, use the global type variable because its cheaper */
-#define CAMEL_OBJECT(obj)        (CAMEL_CHECK_CAST((obj), camel_object_type, CamelObject))
-#define CAMEL_OBJECT_CLASS(k)    (CAMEL_CHECK_CLASS_CAST ((k), camel_object_type, CamelObjectClass))
-#define CAMEL_IS_OBJECT(o)       (CAMEL_CHECK_TYPE((o), camel_object_type))
-#define CAMEL_IS_OBJECT_CLASS(k) (CAMEL_CHECK_CLASS_TYPE((k), camel_object_type))
-
-#define CAMEL_OBJECT_GET_CLASS(o) ((CamelObjectClass *)(CAMEL_OBJECT(o))->klass)
-#define CAMEL_OBJECT_GET_TYPE(o)  ((CamelType)(CAMEL_OBJECT(o))->klass)
-
-typedef struct _CamelObjectClass CamelObjectClass;
 typedef struct _CamelObject CamelObject;
+typedef struct _CamelObjectClass CamelObjectClass;
 typedef guint CamelObjectHookID;
 
-typedef void (*CamelObjectClassInitFunc) (CamelObjectClass *);
-typedef void (*CamelObjectClassFinalizeFunc) (CamelObjectClass *);
-typedef void (*CamelObjectInitFunc) (CamelObject *, CamelObjectClass *);
-typedef void (*CamelObjectFinalizeFunc) (CamelObject *);
-
 typedef gboolean (*CamelObjectEventPrepFunc) (CamelObject *, gpointer);
 typedef void (*CamelObjectEventHookFunc) (CamelObject *, gpointer, gpointer);
 
-#define CAMEL_INVALID_TYPE (NULL)
-
 /* camel object args. */
 enum {
        /* Get a description of the object. */
@@ -97,108 +81,33 @@ enum {
        CAMEL_OBJECT_PERSISTENT_PROPERTIES = CAMEL_OBJECT_ARG_PERSISTENT_PROPERTIES
 };
 
-typedef enum _CamelObjectFlags {
-       CAMEL_OBJECT_DESTROY = (1<<0)
-} CamelObjectFlags;
-
-/* TODO: create a simpleobject which has no events on it, or an interface for events */
 struct _CamelObject {
-       struct _CamelObjectClass *klass;
-
-       guint32 magic;          /* only really needed for debugging ... */
+       GObject parent;
 
        /* current hooks on this object */
        struct _CamelHookList *hooks;
-
-       guint32 ref_count:24;
-       guint32 flags:8;
-
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-       struct _CamelObject *next, *prev;
-#endif
 };
 
-struct _CamelObjectClass
-{
-       struct _CamelObjectClass *parent;
-
-       guint32 magic;          /* in same spot for validation */
-
-       struct _CamelObjectClass *next, *child; /* maintain heirarchy, just for kicks */
-
-       const gchar *name;
-
-       gpointer lock;          /* lock when used in threading, else just pads struct */
-
-       /*unsigned short version, revision;*/
-
-       /* if the object's bigger than 64K, it could use redesigning */
-       unsigned short object_size/*, object_data*/;
-       unsigned short klass_size/*, klass_data*/;
+struct _CamelObjectClass {
+       GObjectClass parent_class;
 
        /* available hooks for this class */
        struct _CamelHookPair *hooks;
 
-       /* memchunks for this type */
-       struct _EMemChunk *instance_chunks;
-#ifdef CAMEL_OBJECT_TRACK_INSTANCES
-       struct _CamelObject *instances;
-#endif
-
-       /* init class */
-       void (*klass_init)(struct _CamelObjectClass *);
-       void (*klass_finalize)(struct _CamelObjectClass *);
-
-       /* init/finalize object */
-       void (*init)(struct _CamelObject *, struct _CamelObjectClass *);
-       void (*finalize)(struct _CamelObject *);
-
-       /* root-class fields follow, type system above */
-
        /* get/set interface */
-       gint (*setv)(struct _CamelObject *, CamelException *ex, CamelArgV *args);
-       gint (*getv)(struct _CamelObject *, CamelException *ex, CamelArgGetV *args);
+       gint (*setv)(CamelObject *, CamelException *ex, CamelArgV *args);
+       gint (*getv)(CamelObject *, CamelException *ex, CamelArgGetV *args);
        /* we only free 1 at a time, and only pointer types, obviously */
-       void (*free)(struct _CamelObject *, guint32 tag, gpointer ptr);
+       void (*free)(CamelObject *, guint32 tag, gpointer ptr);
 
        /* persistence stuff */
-       gint (*state_read)(struct _CamelObject *, FILE *fp);
-       gint (*state_write)(struct _CamelObject *, FILE *fp);
+       gint (*state_read)(CamelObject *, FILE *fp);
+       gint (*state_write)(CamelObject *, FILE *fp);
 };
 
-/* The type system .... it's pretty simple..... */
-void camel_type_init (void);
-CamelType camel_type_register(CamelType parent, const gchar * name, /*guint ver, guint rev,*/
-                             gsize instance_size,
-                             gsize classfuncs_size,
-                             CamelObjectClassInitFunc class_init,
-                             CamelObjectClassFinalizeFunc  class_finalize,
-                             CamelObjectInitFunc instance_init,
-                             CamelObjectFinalizeFunc instance_finalize);
-
-/* deprecated interface */
-#define camel_type_get_global_classfuncs(x) ((CamelObjectClass *)(x))
-
-/* object class methods (types == classes now) */
-const gchar *camel_type_to_name (CamelType type);
-CamelType camel_name_to_type (const gchar *name);
 void camel_object_class_add_event (CamelObjectClass *klass, const gchar *name, CamelObjectEventPrepFunc prep);
 
-void camel_object_class_dump_tree (CamelType root);
-
-/* casting */
-CamelObject *camel_object_cast(CamelObject *obj, CamelType ctype);
-gboolean camel_object_is(CamelObject *obj, CamelType ctype);
-
-CamelObjectClass *camel_object_class_cast (CamelObjectClass *klass, CamelType ctype);
-gboolean camel_object_class_is (CamelObjectClass *klass, CamelType ctype);
-
-CamelType camel_object_get_type (void);
-
-CamelObject *camel_object_new (CamelType type);
-
-gpointer camel_object_ref (gpointer);
-void camel_object_unref (gpointer);
+GType camel_object_get_type (void);
 
 /* hooks */
 CamelObjectHookID camel_object_hook_event(gpointer obj, const gchar *name, CamelObjectEventHookFunc hook, gpointer data);
@@ -219,21 +128,6 @@ gint camel_object_state_write(gpointer vo);
 /* free a retrieved object.  May be a noop for static data. */
 void camel_object_free(gpointer vo, guint32 tag, gpointer value);
 
-/* for managing bags of weakly-ref'd 'child' objects */
-typedef struct _CamelObjectBag CamelObjectBag;
-typedef gpointer (*CamelCopyFunc)(gconstpointer vo);
-
-CamelObjectBag *camel_object_bag_new(GHashFunc hash, GEqualFunc equal, CamelCopyFunc keycopy, GFreeFunc keyfree);
-gpointer camel_object_bag_get(CamelObjectBag *bag, gconstpointer key);
-gpointer camel_object_bag_peek(CamelObjectBag *bag, gconstpointer key);
-gpointer camel_object_bag_reserve(CamelObjectBag *bag, gconstpointer key);
-void camel_object_bag_add(CamelObjectBag *bag, gconstpointer key, gpointer vo);
-void camel_object_bag_abort(CamelObjectBag *bag, gconstpointer key);
-void camel_object_bag_rekey(CamelObjectBag *bag, gpointer o, gconstpointer newkey);
-GPtrArray *camel_object_bag_list(CamelObjectBag *bag);
-void camel_object_bag_remove(CamelObjectBag *bag, gpointer o);
-void camel_object_bag_destroy(CamelObjectBag *bag);
-
 G_END_DECLS
 
 #endif /* CAMEL_OBJECT_H */
index 5415aef..53c812c 100644 (file)
@@ -31,8 +31,6 @@
 #include "camel-service.h"
 #include "camel-session.h"
 
-static gpointer camel_offline_folder_parent_class;
-
 static GSList *offline_folder_props = NULL;
 
 static CamelProperty offline_prop_list[] = {
@@ -46,6 +44,8 @@ struct _offline_downsync_msg {
        CamelFolderChangeInfo *changes;
 };
 
+G_DEFINE_TYPE (CamelOfflineFolder, camel_offline_folder, CAMEL_TYPE_FOLDER)
+
 static void
 offline_downsync_sync (CamelSession *session, CamelSessionThreadMsg *mm)
 {
@@ -61,7 +61,7 @@ offline_downsync_sync (CamelSession *session, CamelSessionThreadMsg *mm)
 
                        camel_operation_progress (NULL, pc);
                        if ((message = camel_folder_get_message (m->folder, m->changes->uid_added->pdata[i], &mm->ex)))
-                               camel_object_unref (message);
+                               g_object_unref (message);
                }
        } else {
                camel_offline_folder_downsync ((CamelOfflineFolder *) m->folder, "(match-all)", &mm->ex);
@@ -78,7 +78,7 @@ offline_downsync_free (CamelSession *session, CamelSessionThreadMsg *mm)
        if (m->changes)
                camel_folder_change_info_free (m->changes);
 
-       camel_object_unref (m->folder);
+       g_object_unref (m->folder);
 }
 
 static CamelSessionThreadOps offline_downsync_ops = {
@@ -99,7 +99,7 @@ offline_folder_changed (CamelFolder *folder, CamelFolderChangeInfo *changes, gpo
                m = camel_session_thread_msg_new (session, &offline_downsync_ops, sizeof (*m));
                m->changes = camel_folder_change_info_new ();
                camel_folder_change_info_cat (m->changes, changes);
-               m->folder = camel_object_ref (folder);
+               m->folder = g_object_ref (folder);
 
                camel_session_thread_queue (session, &m->msg, 0);
        }
@@ -229,8 +229,6 @@ camel_offline_folder_class_init (CamelOfflineFolderClass *class)
        CamelObjectClass *camel_object_class;
        gint ii;
 
-       camel_offline_folder_parent_class = (CamelFolderClass *) camel_type_get_global_classfuncs (CAMEL_FOLDER_TYPE);
-
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = offline_folder_getv;
        camel_object_class->setv = offline_folder_setv;
@@ -253,25 +251,6 @@ camel_offline_folder_init (CamelOfflineFolder *folder)
                (CamelObjectEventHookFunc) offline_folder_changed, NULL);
 }
 
-CamelType
-camel_offline_folder_get_type (void)
-{
-       static CamelType type = NULL;
-
-       if (!type) {
-               type = camel_type_register (CAMEL_FOLDER_TYPE,
-                                           "CamelOfflineFolder",
-                                           sizeof (CamelOfflineFolder),
-                                           sizeof (CamelOfflineFolderClass),
-                                           (CamelObjectClassInitFunc) camel_offline_folder_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_offline_folder_init,
-                                           (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_offline_folder_downsync:
  * @offline: a #CamelOfflineFolder object
index 1b5b621..51de524 100644 (file)
 
 #include <camel/camel-folder.h>
 
-#define CAMEL_OFFLINE_FOLDER_TYPE     (camel_offline_folder_get_type ())
-#define CAMEL_OFFLINE_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_OFFLINE_FOLDER_TYPE, CamelOfflineFolder))
-#define CAMEL_OFFLINE_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_OFFLINE_FOLDER_TYPE, CamelOfflineFolderClass))
-#define CAMEL_IS_OFFLINE_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_OFFLINE_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_OFFLINE_FOLDER \
+       (camel_offline_folder_get_type ())
+#define CAMEL_OFFLINE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_OFFLINE_FOLDER, CamelOfflineFolder))
+#define CAMEL_OFFLINE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_OFFLINE_FOLDER, CamelOfflineFolderClass))
+#define CAMEL_IS_OFFLINE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_OFFLINE_FOLDER))
+#define CAMEL_IS_OFFLINE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_OFFLINE_FOLDER))
 #define CAMEL_OFFLINE_FOLDER_GET_CLASS(obj) \
-       ((CamelOfflineFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_OFFLINE_FOLDER, CamelOfflineFolderClass))
 
 G_BEGIN_DECLS
 
@@ -62,7 +74,7 @@ struct _CamelOfflineFolderClass {
        gboolean (* downsync) (CamelOfflineFolder *folder, const gchar *expression, CamelException *ex);
 };
 
-CamelType camel_offline_folder_get_type (void);
+GType camel_offline_folder_get_type (void);
 
 gboolean camel_offline_folder_downsync (CamelOfflineFolder *offline, const gchar *expression, CamelException *ex);
 
index c7c74d2..810f1a4 100644 (file)
 
 #define d(x)
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelOfflineJournal, camel_offline_journal, CAMEL_TYPE_OBJECT)
 
 static void
-offline_journal_finalize (CamelOfflineJournal *journal)
+offline_journal_finalize (GObject *object)
 {
+       CamelOfflineJournal *journal = CAMEL_OFFLINE_JOURNAL (object);
        CamelDListNode *entry;
 
        g_free (journal->filename);
 
        while ((entry = camel_dlist_remhead (&journal->queue)))
                CAMEL_OFFLINE_JOURNAL_GET_CLASS (journal)->entry_free (journal, entry);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_offline_journal_parent_class)->finalize (object);
 }
 
 static void
-camel_offline_journal_class_init (CamelOfflineJournalClass *klass)
+camel_offline_journal_class_init (CamelOfflineJournalClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs (CAMEL_TYPE_OBJECT);
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = offline_journal_finalize;
 }
 
 static void
@@ -72,25 +79,6 @@ camel_offline_journal_init (CamelOfflineJournal *journal)
        camel_dlist_init (&journal->queue);
 }
 
-CamelType
-camel_offline_journal_get_type (void)
-{
-       static CamelType type = NULL;
-
-       if (!type) {
-               type = camel_type_register (camel_object_get_type (),
-                                           "CamelOfflineJournal",
-                                           sizeof (CamelOfflineJournal),
-                                           sizeof (CamelOfflineJournalClass),
-                                           (CamelObjectClassInitFunc) camel_offline_journal_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_offline_journal_init,
-                                           (CamelObjectFinalizeFunc) offline_journal_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_offline_journal_construct:
  * @journal: a #CamelOfflineJournal object
index eb23c18..ec21026 100644 (file)
 #include <camel/camel-list-utils.h>
 #include <camel/camel-object.h>
 
-#define CAMEL_TYPE_OFFLINE_JOURNAL            (camel_offline_journal_get_type ())
-#define CAMEL_OFFLINE_JOURNAL(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_OFFLINE_JOURNAL, CamelOfflineJournal))
-#define CAMEL_OFFLINE_JOURNAL_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_OFFLINE_JOURNAL, CamelOfflineJournalClass))
-#define CAMEL_IS_OFFLINE_JOURNAL(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_OFFLINE_JOURNAL))
-#define CAMEL_IS_OFFLINE_JOURNAL_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_OFFLINE_JOURNAL))
-#define CAMEL_OFFLINE_JOURNAL_GET_CLASS(o) (CAMEL_OFFLINE_JOURNAL_CLASS (CAMEL_OBJECT_GET_CLASS (o)))
+/* Standard GObject macros */
+#define CAMEL_TYPE_OFFLINE_JOURNAL \
+       (camel_offline_journal_get_type ())
+#define CAMEL_OFFLINE_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_OFFLINE_JOURNAL, CamelOfflineJournal))
+#define CAMEL_OFFLINE_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_OFFLINE_JOURNAL, CamelOfflineJournalClass))
+#define CAMEL_IS_OFFLINE_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_OFFLINE_JOURNAL))
+#define CAMEL_IS_OFFLINE_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_OFFLINE_JOURNAL))
+#define CAMEL_OFFLINE_JOURNAL_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_OFFLINE_JOURNAL, CamelOfflineJournalClass))
 
 G_BEGIN_DECLS
 
@@ -67,7 +79,7 @@ struct _CamelOfflineJournalClass {
        gint (* entry_play) (CamelOfflineJournal *journal, CamelDListNode *entry, CamelException *ex);
 };
 
-CamelType camel_offline_journal_get_type (void);
+GType camel_offline_journal_get_type (void);
 
 void camel_offline_journal_construct (CamelOfflineJournal *journal, struct _CamelFolder *folder, const gchar *filename);
 void camel_offline_journal_set_filename (CamelOfflineJournal *journal, const gchar *filename);
index f18c336..d9cf25d 100644 (file)
@@ -31,7 +31,7 @@
 #include "camel-offline-store.h"
 #include "camel-session.h"
 
-static gpointer camel_offline_store_parent_class;
+G_DEFINE_TYPE (CamelOfflineStore, camel_offline_store, CAMEL_TYPE_STORE)
 
 static gboolean
 offline_store_construct (CamelService *service,
@@ -60,8 +60,6 @@ camel_offline_store_class_init (CamelOfflineStoreClass *class)
 {
        CamelServiceClass *service_class;
 
-       camel_offline_store_parent_class = (CamelStoreClass *) camel_type_get_global_classfuncs (CAMEL_STORE_TYPE);
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = offline_store_construct;
 }
@@ -72,25 +70,6 @@ camel_offline_store_init (CamelOfflineStore *store)
        store->state = CAMEL_OFFLINE_STORE_NETWORK_AVAIL;
 }
 
-CamelType
-camel_offline_store_get_type (void)
-{
-       static CamelType type = NULL;
-
-       if (!type) {
-               type = camel_type_register (CAMEL_STORE_TYPE,
-                                           "CamelOfflineStore",
-                                           sizeof (CamelOfflineStore),
-                                           sizeof (CamelOfflineStoreClass),
-                                           (CamelObjectClassInitFunc) camel_offline_store_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_offline_store_init,
-                                           (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_offline_store_get_network_state:
  * @store: a #CamelOfflineStore object
@@ -144,13 +123,13 @@ camel_offline_store_set_network_state (CamelOfflineStore *store,
                                for (i = 0; i < folders->len; i++) {
                                        folder = folders->pdata[i];
 
-                                       if (CAMEL_CHECK_TYPE (folder, CAMEL_OFFLINE_FOLDER_TYPE)
+                                       if (G_TYPE_CHECK_INSTANCE_TYPE (folder, CAMEL_TYPE_OFFLINE_FOLDER)
                                            && (sync || ((CamelOfflineFolder *) folder)->sync_offline)) {
                                                camel_offline_folder_downsync ((CamelOfflineFolder *) folder, NULL, &lex);
                                                camel_exception_clear (&lex);
                                        }
 
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
                                }
 
                                g_ptr_array_free (folders, TRUE);
@@ -203,12 +182,12 @@ camel_offline_store_prepare_for_offline (CamelOfflineStore *store,
                                for (i = 0; i < folders->len; i++) {
                                        folder = folders->pdata[i];
 
-                                       if (CAMEL_CHECK_TYPE (folder, CAMEL_OFFLINE_FOLDER_TYPE)
+                                       if (G_TYPE_CHECK_INSTANCE_TYPE (folder, CAMEL_TYPE_OFFLINE_FOLDER)
                                            && (sync || ((CamelOfflineFolder *) folder)->sync_offline)) {
                                                camel_offline_folder_downsync ((CamelOfflineFolder *) folder, NULL, &lex);
                                                camel_exception_clear (&lex);
                                        }
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
                                }
                                g_ptr_array_free (folders, TRUE);
                        }
index 33449d6..148b645 100644 (file)
 
 #include <camel/camel-store.h>
 
-#define CAMEL_TYPE_OFFLINE_STORE            (camel_offline_store_get_type ())
-#define CAMEL_OFFLINE_STORE(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStore))
-#define CAMEL_OFFLINE_STORE_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStoreClass))
-#define CAMEL_IS_OFFLINE_STORE(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_OFFLINE_STORE))
-#define CAMEL_IS_OFFLINE_STORE_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_OFFLINE_STORE))
-#define CAMEL_OFFLINE_STORE_GET_CLASS(obj)  (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStoreClass))
+/* Standard GObject macros */
+#define CAMEL_TYPE_OFFLINE_STORE \
+       (camel_offline_store_get_type ())
+#define CAMEL_OFFLINE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStore))
+#define CAMEL_OFFLINE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStoreClass))
+#define CAMEL_IS_OFFLINE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_OFFLINE_STORE))
+#define CAMEL_IS_OFFLINE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_OFFLINE_STORE))
+#define CAMEL_OFFLINE_STORE_GET_CLASS(obj) \
+       (CAMEL_CHECK_GET_CLASS \
+       ((obj), CAMEL_TYPE_OFFLINE_STORE, CamelOfflineStoreClass))
 
 G_BEGIN_DECLS
 
@@ -62,7 +74,7 @@ struct _CamelOfflineStoreClass {
        gboolean (* set_network_state) (CamelOfflineStore *store, gint state, CamelException *ex);
 };
 
-CamelType camel_offline_store_get_type (void);
+GType camel_offline_store_get_type (void);
 
 gboolean camel_offline_store_set_network_state (CamelOfflineStore *store, gint state, CamelException *ex);
 gint camel_offline_store_get_network_state (CamelOfflineStore *store, CamelException *ex);
index 938d3de..daa9e7e 100644 (file)
    tables consistent after program crash without sync */
 /*#define SYNC_UPDATES*/
 
-#define d(x) /*(printf("%s(%d):%s: ",  __FILE__, __LINE__, __PRETTY_FUNCTION__),(x))*/
+#define d(x) /*(printf ("%s (%d):%s: ",  __FILE__, __LINE__, __PRETTY_FUNCTION__),(x))*/
 /* key index debug */
-#define k(x) /*(printf("%s(%d):%s: ",  __FILE__, __LINE__, __PRETTY_FUNCTION__),(x))*/
-
-struct _CamelPartitionTablePrivate {
-       GStaticMutex lock;      /* for locking partition */
-};
+#define k(x) /*(printf ("%s (%d):%s: ",  __FILE__, __LINE__, __PRETTY_FUNCTION__),(x))*/
 
 #define CAMEL_PARTITION_TABLE_LOCK(kf, lock) (g_static_mutex_lock(&(kf)->priv->lock))
 #define CAMEL_PARTITION_TABLE_UNLOCK(kf, lock) (g_static_mutex_unlock(&(kf)->priv->lock))
 
-static void
-camel_partition_table_class_init(CamelPartitionTableClass *klass)
-{
-}
+#define CAMEL_PARTITION_TABLE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_PARTITION_TABLE, CamelPartitionTablePrivate))
 
-static void
-camel_partition_table_init(CamelPartitionTable *cpi)
-{
-       struct _CamelPartitionTablePrivate *p;
-
-       camel_dlist_init(&cpi->partition);
+struct _CamelPartitionTablePrivate {
+       GStaticMutex lock;      /* for locking partition */
+};
 
-       p = cpi->priv = g_malloc0(sizeof(*cpi->priv));
-       g_static_mutex_init (&p->lock);
-}
+G_DEFINE_TYPE (CamelPartitionTable, camel_partition_table, CAMEL_TYPE_OBJECT)
 
 static void
-camel_partition_table_finalize(CamelPartitionTable *cpi)
+partition_table_finalize (GObject *object)
 {
+       CamelPartitionTable *table = CAMEL_PARTITION_TABLE (object);
        CamelBlock *bl;
-       struct _CamelPartitionTablePrivate *p;
-
-       p = cpi->priv;
 
-       if (cpi->blocks) {
-               while ((bl = (CamelBlock *)camel_dlist_remhead(&cpi->partition))) {
-                       camel_block_file_sync_block(cpi->blocks, bl);
-                       camel_block_file_unref_block(cpi->blocks, bl);
+       if (table->blocks) {
+               while ((bl = (CamelBlock *)camel_dlist_remhead (&table->partition))) {
+                       camel_block_file_sync_block (table->blocks, bl);
+                       camel_block_file_unref_block (table->blocks, bl);
                }
-               camel_block_file_sync(cpi->blocks);
+               camel_block_file_sync (table->blocks);
 
-               camel_object_unref (cpi->blocks);
+               g_object_unref (table->blocks);
        }
 
-       g_static_mutex_free (&p->lock);
+       g_static_mutex_free (&table->priv->lock);
 
-       g_free(p);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_partition_table_parent_class)->finalize (object);
+}
 
+static void
+camel_partition_table_class_init (CamelPartitionTableClass *class)
+{
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelPartitionTablePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = partition_table_finalize;
 }
 
-CamelType
-camel_partition_table_get_type(void)
+static void
+camel_partition_table_init (CamelPartitionTable *cpi)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelPartitionTable",
-                                          sizeof (CamelPartitionTable),
-                                          sizeof (CamelPartitionTableClass),
-                                          (CamelObjectClassInitFunc) camel_partition_table_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_partition_table_init,
-                                          (CamelObjectFinalizeFunc) camel_partition_table_finalize);
-       }
+       cpi->priv = CAMEL_PARTITION_TABLE_GET_PRIVATE (cpi);
 
-       return type;
+       camel_dlist_init (&cpi->partition);
+       g_static_mutex_init (&cpi->priv->lock);
 }
 
 /* ********************************************************************** */
@@ -126,7 +116,7 @@ lookup word, if nameid is deleted, mark it in wordlist as unused and mark for wr
 /* ********************************************************************** */
 
 /* This simple hash seems to work quite well */
-static camel_hash_t hash_key(const gchar *key)
+static camel_hash_t hash_key (const gchar *key)
 {
        camel_hash_t hash = 0xABADF00D;
 
@@ -139,7 +129,7 @@ static camel_hash_t hash_key(const gchar *key)
 }
 
 /* Call with lock held */
-static CamelBlock *find_partition(CamelPartitionTable *cpi, camel_hash_t id, gint *indexp)
+static CamelBlock *find_partition (CamelPartitionTable *cpi, camel_hash_t id, gint *indexp)
 {
        gint index, jump;
        CamelBlock *bl;
@@ -179,39 +169,41 @@ static CamelBlock *find_partition(CamelPartitionTable *cpi, camel_hash_t id, gin
                bl = bl->next;
        }
 
-       g_warning("could not find a partition that could fit !partition table corrupt!");
+       g_warning ("could not find a partition that could fit!  partition table corrupt!");
 
        /* This should never be reached */
 
        return NULL;
 }
 
-CamelPartitionTable *camel_partition_table_new(struct _CamelBlockFile *bs, camel_block_t root)
+CamelPartitionTable *
+camel_partition_table_new (struct _CamelBlockFile *bs,
+                           camel_block_t root)
 {
        CamelPartitionTable *cpi;
        CamelPartitionMapBlock *ptb;
        CamelPartitionKeyBlock *kb;
        CamelBlock *block, *pblock;
 
-       cpi = (CamelPartitionTable *)camel_object_new(camel_partition_table_get_type());
+       cpi = g_object_new (CAMEL_TYPE_PARTITION_TABLE, NULL);
        cpi->rootid = root;
-       cpi->blocks = camel_object_ref (bs);
+       cpi->blocks = g_object_ref (bs);
 
        /* read the partition table into memory */
        do {
-               block = camel_block_file_get_block(bs, root);
+               block = camel_block_file_get_block (bs, root);
                if (block == NULL)
                        goto fail;
 
                ptb = (CamelPartitionMapBlock *)&block->data;
 
-               d(printf("Adding partition block, used = %d, hashid = %08x\n", ptb->used, ptb->partition[0].hashid));
+               d (printf ("Adding partition block, used = %d, hashid = %08x\n", ptb->used, ptb->partition[0].hashid));
 
                /* if we have no data, prime initial block */
-               if (ptb->used == 0 && camel_dlist_empty(&cpi->partition) && ptb->next == 0) {
-                       pblock = camel_block_file_new_block(bs);
+               if (ptb->used == 0 && camel_dlist_empty (&cpi->partition) && ptb->next == 0) {
+                       pblock = camel_block_file_new_block (bs);
                        if (pblock == NULL) {
-                               camel_block_file_unref_block(bs, block);
+                               camel_block_file_unref_block (bs, block);
                                goto fail;
                        }
                        kb = (CamelPartitionKeyBlock *)&pblock->data;
@@ -219,40 +211,40 @@ CamelPartitionTable *camel_partition_table_new(struct _CamelBlockFile *bs, camel
                        ptb->used = 1;
                        ptb->partition[0].hashid = 0xffffffff;
                        ptb->partition[0].blockid = pblock->id;
-                       camel_block_file_touch_block(bs, pblock);
-                       camel_block_file_unref_block(bs, pblock);
-                       camel_block_file_touch_block(bs, block);
+                       camel_block_file_touch_block (bs, pblock);
+                       camel_block_file_unref_block (bs, pblock);
+                       camel_block_file_touch_block (bs, block);
 #ifdef SYNC_UPDATES
-                       camel_block_file_sync_block(bs, block);
+                       camel_block_file_sync_block (bs, block);
 #endif
                }
 
                root = ptb->next;
-               camel_block_file_detach_block(bs, block);
-               camel_dlist_addtail(&cpi->partition, (CamelDListNode *)block);
+               camel_block_file_detach_block (bs, block);
+               camel_dlist_addtail (&cpi->partition, (CamelDListNode *)block);
        } while (root);
 
        return cpi;
 
 fail:
-       camel_object_unref (cpi);
+       g_object_unref (cpi);
        return NULL;
 }
 
 /* sync our blocks, the caller must still sync the blockfile itself */
 gint
-camel_partition_table_sync(CamelPartitionTable *cpi)
+camel_partition_table_sync (CamelPartitionTable *cpi)
 {
        CamelBlock *bl, *bn;
        gint ret = 0;
 
-       CAMEL_PARTITION_TABLE_LOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_LOCK (cpi, lock);
 
        if (cpi->blocks) {
                bl = (CamelBlock *)cpi->partition.head;
                bn = bl->next;
                while (bn) {
-                       ret = camel_block_file_sync_block(cpi->blocks, bl);
+                       ret = camel_block_file_sync_block (cpi->blocks, bl);
                        if (ret == -1)
                                goto fail;
                        bl = bn;
@@ -260,12 +252,14 @@ camel_partition_table_sync(CamelPartitionTable *cpi)
                }
        }
 fail:
-       CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
 
        return ret;
 }
 
-camel_key_t camel_partition_table_lookup(CamelPartitionTable *cpi, const gchar *key)
+camel_key_t
+camel_partition_table_lookup (CamelPartitionTable *cpi,
+                              const gchar *key)
 {
        CamelPartitionKeyBlock *pkb;
        CamelPartitionMapBlock *ptb;
@@ -274,19 +268,20 @@ camel_key_t camel_partition_table_lookup(CamelPartitionTable *cpi, const gchar *
        camel_key_t keyid = 0;
        gint index, i;
 
-       hashid = hash_key(key);
+       hashid = hash_key (key);
 
-       CAMEL_PARTITION_TABLE_LOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_LOCK (cpi, lock);
 
-       ptblock = find_partition(cpi, hashid, &index);
+       ptblock = find_partition (cpi, hashid, &index);
        if (ptblock == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return 0;
        }
        ptb = (CamelPartitionMapBlock *)&ptblock->data;
-       block = camel_block_file_get_block(cpi->blocks, ptb->partition[index].blockid);
+       block = camel_block_file_get_block (
+               cpi->blocks, ptb->partition[index].blockid);
        if (block == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return 0;
        }
 
@@ -302,9 +297,9 @@ camel_key_t camel_partition_table_lookup(CamelPartitionTable *cpi, const gchar *
                }
        }
 
-       CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
 
-       camel_block_file_unref_block(cpi->blocks, block);
+       camel_block_file_unref_block (cpi->blocks, block);
 
        return keyid;
 }
@@ -319,19 +314,20 @@ camel_partition_table_remove (CamelPartitionTable *cpi,
        camel_hash_t hashid;
        gint index, i;
 
-       hashid = hash_key(key);
+       hashid = hash_key (key);
 
-       CAMEL_PARTITION_TABLE_LOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_LOCK (cpi, lock);
 
-       ptblock = find_partition(cpi, hashid, &index);
+       ptblock = find_partition (cpi, hashid, &index);
        if (ptblock == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return TRUE;
        }
        ptb = (CamelPartitionMapBlock *)&ptblock->data;
-       block = camel_block_file_get_block(cpi->blocks, ptb->partition[index].blockid);
+       block = camel_block_file_get_block (
+               cpi->blocks, ptb->partition[index].blockid);
        if (block == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return FALSE;
        }
        pkb = (CamelPartitionKeyBlock *)&block->data;
@@ -348,20 +344,20 @@ camel_partition_table_remove (CamelPartitionTable *cpi,
                                pkb->keys[i].keyid = pkb->keys[i+1].keyid;
                                pkb->keys[i].hashid = pkb->keys[i+1].hashid;
                        }
-                       camel_block_file_touch_block(cpi->blocks, block);
+                       camel_block_file_touch_block (cpi->blocks, block);
                        break;
                }
        }
 
-       CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
 
-       camel_block_file_unref_block(cpi->blocks, block);
+       camel_block_file_unref_block (cpi->blocks, block);
 
        return TRUE;
 }
 
 static gint
-keys_cmp(gconstpointer ap, gconstpointer bp)
+keys_cmp (gconstpointer ap, gconstpointer bp)
 {
        const CamelPartitionKey *a = ap;
        const CamelPartitionKey *b = bp;
@@ -375,7 +371,9 @@ keys_cmp(gconstpointer ap, gconstpointer bp)
 }
 
 gint
-camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_t keyid)
+camel_partition_table_add (CamelPartitionTable *cpi,
+                           const gchar *key,
+                           camel_key_t keyid)
 {
        camel_hash_t hashid, partid;
        gint index, newindex = 0; /* initialisation of this and pkb/nkb is just to silence compiler */
@@ -388,16 +386,17 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
 
        hashid = hash_key(key);
 
-       CAMEL_PARTITION_TABLE_LOCK(cpi, lock);
-       ptblock = find_partition(cpi, hashid, &index);
+       CAMEL_PARTITION_TABLE_LOCK (cpi, lock);
+       ptblock = find_partition (cpi, hashid, &index);
        if (ptblock == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return -1;
        }
        ptb = (CamelPartitionMapBlock *)&ptblock->data;
-       block = camel_block_file_get_block(cpi->blocks, ptb->partition[index].blockid);
+       block = camel_block_file_get_block (
+               cpi->blocks, ptb->partition[index].blockid);
        if (block == NULL) {
-               CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+               CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
                return -1;
        }
        kb = (CamelPartitionKeyBlock *)&block->data;
@@ -417,16 +416,18 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                /* TODO: Should look at next/previous partition table block as well ... */
 
                if (index > 0) {
-                       pblock = camel_block_file_get_block(cpi->blocks, ptb->partition[index-1].blockid);
+                       pblock = camel_block_file_get_block (
+                               cpi->blocks, ptb->partition[index-1].blockid);
                        if (pblock == NULL)
                                goto fail;
                        pkb = (CamelPartitionKeyBlock *)&pblock->data;
                }
                if (index < (ptb->used-1)) {
-                       nblock = camel_block_file_get_block(cpi->blocks, ptb->partition[index+1].blockid);
+                       nblock = camel_block_file_get_block (
+                               cpi->blocks, ptb->partition[index+1].blockid);
                        if (nblock == NULL) {
                                if (pblock)
-                                       camel_block_file_unref_block(cpi->blocks, pblock);
+                                       camel_block_file_unref_block (cpi->blocks, pblock);
                                goto fail;
                        }
                        nkb = (CamelPartitionKeyBlock *)&nblock->data;
@@ -460,12 +461,12 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                                ptnblock = camel_block_file_new_block(cpi->blocks);
                                if (ptnblock == NULL) {
                                        if (nblock)
-                                               camel_block_file_unref_block(cpi->blocks, nblock);
+                                               camel_block_file_unref_block (cpi->blocks, nblock);
                                        if (pblock)
-                                               camel_block_file_unref_block(cpi->blocks, pblock);
+                                               camel_block_file_unref_block (cpi->blocks, pblock);
                                        goto fail;
                                }
-                               camel_block_file_detach_block(cpi->blocks, ptnblock);
+                               camel_block_file_detach_block (cpi->blocks, ptnblock);
 
                                /* split block and link on-disk, always sorted */
                                ptn = (CamelPartitionMapBlock *)&ptnblock->data;
@@ -474,7 +475,7 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                                len = ptb->used / 2;
                                ptn->used = ptb->used - len;
                                ptb->used = len;
-                               memcpy(ptn->partition, &ptb->partition[len], ptn->used * sizeof(ptb->partition[0]));
+                               memcpy (ptn->partition, &ptb->partition[len], ptn->used * sizeof (ptb->partition[0]));
 
                                /* link in-memory */
                                ptnblock->next = ptblock->next;
@@ -483,14 +484,14 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                                ptnblock->prev = ptblock;
 
                                /* write in right order to ensure structure */
-                               camel_block_file_touch_block(cpi->blocks, ptnblock);
+                               camel_block_file_touch_block (cpi->blocks, ptnblock);
 #ifdef SYNC_UPDATES
-                               camel_block_file_sync_block(cpi->blocks, ptnblock);
+                               camel_block_file_sync_block (cpi->blocks, ptnblock);
 #endif
                                if (index > len) {
-                                       camel_block_file_touch_block(cpi->blocks, ptblock);
+                                       camel_block_file_touch_block (cpi->blocks, ptblock);
 #ifdef SYNC_UPDATES
-                                       camel_block_file_sync_block(cpi->blocks, ptblock);
+                                       camel_block_file_sync_block (cpi->blocks, ptblock);
 #endif
                                        index -= len;
                                        ptb = ptn;
@@ -499,12 +500,12 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                        }
 
                        /* try get newblock before modifying existing */
-                       newblock = camel_block_file_new_block(cpi->blocks);
+                       newblock = camel_block_file_new_block (cpi->blocks);
                        if (newblock == NULL) {
                                if (nblock)
-                                       camel_block_file_unref_block(cpi->blocks, nblock);
+                                       camel_block_file_unref_block (cpi->blocks, nblock);
                                if (pblock)
-                                       camel_block_file_unref_block(cpi->blocks, pblock);
+                                       camel_block_file_unref_block (cpi->blocks, pblock);
                                goto fail;
                        }
 
@@ -522,167 +523,161 @@ camel_partition_table_add(CamelPartitionTable *cpi, const gchar *key, camel_key_
                        ptb->partition[newindex].blockid = newblock->id;
 
                        if (nblock)
-                               camel_block_file_unref_block(cpi->blocks, nblock);
+                               camel_block_file_unref_block (cpi->blocks, nblock);
                        if (pblock)
-                               camel_block_file_unref_block(cpi->blocks, pblock);
+                               camel_block_file_unref_block (cpi->blocks, pblock);
                } else {
                        newkb = (CamelPartitionKeyBlock *)&newblock->data;
 
                        if (newblock == pblock) {
                                if (nblock)
-                                       camel_block_file_unref_block(cpi->blocks, nblock);
+                                       camel_block_file_unref_block (cpi->blocks, nblock);
                        } else {
                                if (pblock)
-                                       camel_block_file_unref_block(cpi->blocks, pblock);
+                                       camel_block_file_unref_block (cpi->blocks, pblock);
                        }
                }
 
                /* sort keys to find midpoint */
                len = kb->used;
-               memcpy(keys, kb->keys, sizeof(kb->keys[0])*len);
-               memcpy(keys+len, newkb->keys, sizeof(newkb->keys[0])*newkb->used);
+               memcpy (keys, kb->keys, sizeof (kb->keys[0])*len);
+               memcpy (keys+len, newkb->keys, sizeof (newkb->keys[0])*newkb->used);
                len += newkb->used;
                keys[len].hashid = hashid;
                keys[len].keyid = keyid;
                len++;
-               qsort(keys, len, sizeof(keys[0]), keys_cmp);
+               qsort (keys, len, sizeof (keys[0]), keys_cmp);
 
                /* Split keys, fix partition table */
                half = len/2;
                partid = keys[half-1].hashid;
 
                if (index < newindex) {
-                       memcpy(kb->keys, keys, sizeof(keys[0])*half);
+                       memcpy (kb->keys, keys, sizeof (keys[0])*half);
                        kb->used = half;
-                       memcpy(newkb->keys, keys+half, sizeof(keys[0])*(len-half));
+                       memcpy (newkb->keys, keys+half, sizeof (keys[0])*(len-half));
                        newkb->used = len-half;
                        ptb->partition[index].hashid = partid;
                } else {
-                       memcpy(newkb->keys, keys, sizeof(keys[0])*half);
+                       memcpy (newkb->keys, keys, sizeof (keys[0])*half);
                        newkb->used = half;
-                       memcpy(kb->keys, keys+half, sizeof(keys[0])*(len-half));
+                       memcpy (kb->keys, keys+half, sizeof (keys[0])*(len-half));
                        kb->used = len-half;
                        ptb->partition[newindex].hashid = partid;
                }
 
-               camel_block_file_touch_block(cpi->blocks, ptblock);
+               camel_block_file_touch_block (cpi->blocks, ptblock);
 #ifdef SYNC_UPDATES
-               camel_block_file_sync_block(cpi->blocks, ptblock);
+               camel_block_file_sync_block (cpi->blocks, ptblock);
 #endif
-               camel_block_file_touch_block(cpi->blocks, newblock);
-               camel_block_file_unref_block(cpi->blocks, newblock);
+               camel_block_file_touch_block (cpi->blocks, newblock);
+               camel_block_file_unref_block (cpi->blocks, newblock);
        }
 
-       camel_block_file_touch_block(cpi->blocks, block);
-       camel_block_file_unref_block(cpi->blocks, block);
+       camel_block_file_touch_block (cpi->blocks, block);
+       camel_block_file_unref_block (cpi->blocks, block);
 
        ret = 0;
 fail:
-       CAMEL_PARTITION_TABLE_UNLOCK(cpi, lock);
+       CAMEL_PARTITION_TABLE_UNLOCK (cpi, lock);
 
        return ret;
 }
 
 /* ********************************************************************** */
 
+#define CAMEL_KEY_TABLE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_KEY_TABLE, CamelKeyTablePrivate))
+
+#define CAMEL_KEY_TABLE_LOCK(kf, lock) (g_static_mutex_lock(&(kf)->priv->lock))
+#define CAMEL_KEY_TABLE_UNLOCK(kf, lock) (g_static_mutex_unlock(&(kf)->priv->lock))
+
 struct _CamelKeyTablePrivate {
        GStaticMutex lock;      /* for locking key */
 };
 
-#define CAMEL_KEY_TABLE_LOCK(kf, lock) (g_static_mutex_lock(&(kf)->priv->lock))
-#define CAMEL_KEY_TABLE_UNLOCK(kf, lock) (g_static_mutex_unlock(&(kf)->priv->lock))
+G_DEFINE_TYPE (CamelKeyTable, camel_key_table, CAMEL_TYPE_OBJECT)
 
 static void
-camel_key_table_class_init(CamelKeyTableClass *klass)
+key_table_finalize (GObject *object)
 {
-}
+       CamelKeyTable *table = CAMEL_KEY_TABLE (object);
 
-static void
-camel_key_table_init(CamelKeyTable *ki)
-{
-       struct _CamelKeyTablePrivate *p;
+       if (table->blocks) {
+               if (table->root_block) {
+                       camel_block_file_sync_block (table->blocks, table->root_block);
+                       camel_block_file_unref_block (table->blocks, table->root_block);
+               }
+               camel_block_file_sync (table->blocks);
+               g_object_unref (table->blocks);
+       }
 
-       p = ki->priv = g_malloc0(sizeof(*ki->priv));
-       g_static_mutex_init (&p->lock);
+       g_static_mutex_free (&table->priv->lock);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_key_table_parent_class)->finalize (object);
 }
 
 static void
-camel_key_table_finalize(CamelKeyTable *ki)
+camel_key_table_class_init (CamelKeyTableClass *class)
 {
-       struct _CamelKeyTablePrivate *p;
-
-       p = ki->priv;
-
-       if (ki->blocks) {
-               if (ki->root_block) {
-                       camel_block_file_sync_block(ki->blocks, ki->root_block);
-                       camel_block_file_unref_block(ki->blocks, ki->root_block);
-               }
-               camel_block_file_sync(ki->blocks);
-               camel_object_unref (ki->blocks);
-       }
+       GObjectClass *object_class;
 
-       g_static_mutex_free (&p->lock);
-
-       g_free(p);
+       g_type_class_add_private (class, sizeof (CamelKeyTablePrivate));
 
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = key_table_finalize;
 }
 
-CamelType
-camel_key_table_get_type(void)
+static void
+camel_key_table_init (CamelKeyTable *table)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_object_get_type(), "CamelKeyTable",
-                                          sizeof (CamelKeyTable),
-                                          sizeof (CamelKeyTableClass),
-                                          (CamelObjectClassInitFunc) camel_key_table_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_key_table_init,
-                                          (CamelObjectFinalizeFunc) camel_key_table_finalize);
-       }
-
-       return type;
+       table->priv = CAMEL_KEY_TABLE_GET_PRIVATE (table);
+       g_static_mutex_init (&table->priv->lock);
 }
 
 CamelKeyTable *
-camel_key_table_new(CamelBlockFile *bs, camel_block_t root)
+camel_key_table_new (CamelBlockFile *bs,
+                     camel_block_t root)
 {
        CamelKeyTable *ki;
 
-       ki = (CamelKeyTable *)camel_object_new(camel_key_table_get_type());
+       ki = g_object_new (CAMEL_TYPE_KEY_TABLE, NULL);
 
-       ki->blocks = camel_object_ref (bs);
+       ki->blocks = g_object_ref (bs);
        ki->rootid = root;
 
-       ki->root_block = camel_block_file_get_block(bs, ki->rootid);
+       ki->root_block = camel_block_file_get_block (bs, ki->rootid);
        if (ki->root_block == NULL) {
-               camel_object_unref (ki);
+               g_object_unref (ki);
                ki = NULL;
        } else {
-               camel_block_file_detach_block(bs, ki->root_block);
+               camel_block_file_detach_block (bs, ki->root_block);
                ki->root = (CamelKeyRootBlock *)&ki->root_block->data;
 
-               k(printf("Opening key index\n"));
-               k(printf(" first %u\n last %u\n free %u\n", ki->root->first, ki->root->last, ki->root->free));
+               k (printf ("Opening key index\n"));
+               k (printf (" first %u\n last %u\n free %u\n", ki->root->first, ki->root->last, ki->root->free));
        }
 
        return ki;
 }
 
 gint
-camel_key_table_sync(CamelKeyTable *ki)
+camel_key_table_sync (CamelKeyTable *ki)
 {
 #ifdef SYNC_UPDATES
        return 0;
 #else
-       return camel_block_file_sync_block(ki->blocks, ki->root_block);
+       return camel_block_file_sync_block (ki->blocks, ki->root_block);
 #endif
 }
 
 camel_key_t
-camel_key_table_add(CamelKeyTable *ki, const gchar *key, camel_block_t data, guint flags)
+camel_key_table_add (CamelKeyTable *ki,
+                     const gchar *key,
+                     camel_block_t data,
+                     guint flags)
 {
        CamelBlock *last, *next;
        CamelKeyBlock *kblast, *kbnext;
@@ -691,21 +686,22 @@ camel_key_table_add(CamelKeyTable *ki, const gchar *key, camel_block_t data, gui
        camel_key_t keyid = 0;
 
        /* Maximum key size = 128 chars */
-       len = strlen(key);
+       len = strlen (key);
        if (len > CAMEL_KEY_TABLE_MAX_KEY)
                len = 128;
 
-       CAMEL_KEY_TABLE_LOCK(ki, lock);
+       CAMEL_KEY_TABLE_LOCK (ki, lock);
 
        if (ki->root->last == 0) {
-               last = camel_block_file_new_block(ki->blocks);
+               last = camel_block_file_new_block (ki->blocks);
                if (last == NULL)
                        goto fail;
                ki->root->last = ki->root->first = last->id;
-               camel_block_file_touch_block(ki->blocks, ki->root_block);
-               k(printf("adding first block, first = %u\n", ki->root->first));
+               camel_block_file_touch_block (ki->blocks, ki->root_block);
+               k (printf ("adding first block, first = %u\n", ki->root->first));
        } else {
-               last = camel_block_file_get_block(ki->blocks, ki->root->last);
+               last = camel_block_file_get_block (
+                       ki->blocks, ki->root->last);
                if (last == NULL)
                        goto fail;
        }
@@ -717,24 +713,24 @@ camel_key_table_add(CamelKeyTable *ki, const gchar *key, camel_block_t data, gui
 
        if (kblast->used > 0) {
                /*left = &kblast->u.keydata[kblast->u.keys[kblast->used-1].offset] - (gchar *)(&kblast->u.keys[kblast->used+1]);*/
-               left = kblast->u.keys[kblast->used-1].offset - sizeof(kblast->u.keys[0])*(kblast->used+1);
-               d(printf("key '%s' used = %d (%d), filled = %d, left = %d  len = %d?\n",
-                        key, kblast->used, kblast->used * sizeof(kblast->u.keys[0]),
-                        sizeof(kblast->u.keydata) - kblast->u.keys[kblast->used-1].offset,
+               left = kblast->u.keys[kblast->used-1].offset - sizeof (kblast->u.keys[0])*(kblast->used+1);
+               d (printf ("key '%s' used = %d (%d), filled = %d, left = %d  len = %d?\n",
+                        key, kblast->used, kblast->used * sizeof (kblast->u.keys[0]),
+                        sizeof (kblast->u.keydata) - kblast->u.keys[kblast->used-1].offset,
                         left, len));
                if (left < len) {
-                       next = camel_block_file_new_block(ki->blocks);
+                       next = camel_block_file_new_block (ki->blocks);
                        if (next == NULL) {
-                               camel_block_file_unref_block(ki->blocks, last);
+                               camel_block_file_unref_block (ki->blocks, last);
                                goto fail;
                        }
                        kbnext = (CamelKeyBlock *)&next->data;
                        kblast->next = next->id;
                        ki->root->last = next->id;
-                       d(printf("adding new block, first = %u, last = %u\n", ki->root->first, ki->root->last));
-                       camel_block_file_touch_block(ki->blocks, ki->root_block);
-                       camel_block_file_touch_block(ki->blocks, last);
-                       camel_block_file_unref_block(ki->blocks, last);
+                       d (printf ("adding new block, first = %u, last = %u\n", ki->root->first, ki->root->last));
+                       camel_block_file_touch_block (ki->blocks, ki->root_block);
+                       camel_block_file_touch_block (ki->blocks, last);
+                       camel_block_file_unref_block (ki->blocks, last);
                        kblast = kbnext;
                        last = next;
                }
@@ -743,34 +739,34 @@ camel_key_table_add(CamelKeyTable *ki, const gchar *key, camel_block_t data, gui
        if (kblast->used > 0)
                offset = kblast->u.keys[kblast->used-1].offset - len;
        else
-               offset = sizeof(kblast->u.keydata)-len;
+               offset = sizeof (kblast->u.keydata)-len;
 
        kblast->u.keys[kblast->used].flags = flags;
        kblast->u.keys[kblast->used].data = data;
        kblast->u.keys[kblast->used].offset = offset;
-       memcpy(kblast->u.keydata + offset, key, len);
+       memcpy (kblast->u.keydata + offset, key, len);
 
        keyid = (last->id & (~(CAMEL_BLOCK_SIZE-1))) | kblast->used;
 
        kblast->used++;
 
 #if 0
-       g_assert(kblast->used < 127);
+       g_assert (kblast->used < 127);
 #else
        if (kblast->used >=127) {
-               g_warning("Invalid value for used %d\n", kblast->used);
+               g_warning ("Invalid value for used %d\n", kblast->used);
                return 0;
        }
 #endif
 
-       camel_block_file_touch_block(ki->blocks, last);
-       camel_block_file_unref_block(ki->blocks, last);
+       camel_block_file_touch_block (ki->blocks, last);
+       camel_block_file_unref_block (ki->blocks, last);
 
 #ifdef SYNC_UPDATES
-       camel_block_file_sync_block(ki->blocks, ki->root_block);
+       camel_block_file_sync_block (ki->blocks, ki->root_block);
 #endif
 fail:
-       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
 
        return keyid;
 }
@@ -790,21 +786,21 @@ camel_key_table_set_data (CamelKeyTable *ki,
        blockid =  keyid & (~(CAMEL_BLOCK_SIZE-1));
        index = keyid & (CAMEL_BLOCK_SIZE-1);
 
-       bl = camel_block_file_get_block(ki->blocks, blockid);
+       bl = camel_block_file_get_block (ki->blocks, blockid);
        if (bl == NULL)
                return FALSE;
        kb = (CamelKeyBlock *)&bl->data;
 
-       CAMEL_KEY_TABLE_LOCK(ki, lock);
+       CAMEL_KEY_TABLE_LOCK (ki, lock);
 
        if (kb->u.keys[index].data != data) {
                kb->u.keys[index].data = data;
-               camel_block_file_touch_block(ki->blocks, bl);
+               camel_block_file_touch_block (ki->blocks, bl);
        }
 
-       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
 
-       camel_block_file_unref_block(ki->blocks, bl);
+       camel_block_file_unref_block (ki->blocks, bl);
 
        return TRUE;
 }
@@ -826,38 +822,36 @@ camel_key_table_set_flags (CamelKeyTable *ki,
        blockid =  keyid & (~(CAMEL_BLOCK_SIZE-1));
        index = keyid & (CAMEL_BLOCK_SIZE-1);
 
-       bl = camel_block_file_get_block(ki->blocks, blockid);
+       bl = camel_block_file_get_block (ki->blocks, blockid);
        if (bl == NULL)
                return FALSE;
        kb = (CamelKeyBlock *)&bl->data;
 
-#if 0
-       g_assert(kb->used < 127); /* this should be more accurate */
-       g_assert(index < kb->used);
-#else
        if (kb->used >=127 || index >= kb->used) {
                g_warning("Block %x: Invalid index or content: index %d used %d\n", blockid, index, kb->used);
                return FALSE;
        }
-#endif
 
-       CAMEL_KEY_TABLE_LOCK(ki, lock);
+       CAMEL_KEY_TABLE_LOCK (ki, lock);
 
        old = kb->u.keys[index].flags;
        if ((old & set) != (flags & set)) {
                kb->u.keys[index].flags = (old & (~set)) | (flags & set);
-               camel_block_file_touch_block(ki->blocks, bl);
+               camel_block_file_touch_block (ki->blocks, bl);
        }
 
-       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
 
-       camel_block_file_unref_block(ki->blocks, bl);
+       camel_block_file_unref_block (ki->blocks, bl);
 
        return TRUE;
 }
 
 camel_block_t
-camel_key_table_lookup(CamelKeyTable *ki, camel_key_t keyid, gchar **keyp, guint *flags)
+camel_key_table_lookup (CamelKeyTable *ki,
+                        camel_key_t keyid,
+                        gchar **keyp,
+                        guint *flags)
 {
        CamelBlock *bl;
        camel_block_t blockid;
@@ -865,12 +859,12 @@ camel_key_table_lookup(CamelKeyTable *ki, camel_key_t keyid, gchar **keyp, guint
        gchar *key;
        CamelKeyBlock *kb;
 
+       g_return_val_if_fail (keyid != 0, 0);
+
        if (keyp)
                *keyp = NULL;
        if (flags)
                *flags = 0;
-       if (keyid == 0)
-               return 0;
 
        blockid =  keyid & (~(CAMEL_BLOCK_SIZE-1));
        index = keyid & (CAMEL_BLOCK_SIZE-1);
@@ -881,17 +875,12 @@ camel_key_table_lookup(CamelKeyTable *ki, camel_key_t keyid, gchar **keyp, guint
 
        kb = (CamelKeyBlock *)&bl->data;
 
-#if 0
-       g_assert(kb->used < 127); /* this should be more accurate */
-       g_assert(index < kb->used);
-#else
        if (kb->used >=127 || index >= kb->used) {
                g_warning("Block %x: Invalid index or content: index %d used %d\n", blockid, index, kb->used);
                return 0;
        }
-#endif
 
-       CAMEL_KEY_TABLE_LOCK(ki, lock);
+       CAMEL_KEY_TABLE_LOCK (ki, lock);
 
        blockid = kb->u.keys[index].data;
        if (flags)
@@ -900,17 +889,17 @@ camel_key_table_lookup(CamelKeyTable *ki, camel_key_t keyid, gchar **keyp, guint
        if (keyp) {
                off = kb->u.keys[index].offset;
                if (index == 0)
-                       len = sizeof(kb->u.keydata) - off;
+                       len = sizeof (kb->u.keydata) - off;
                else
                        len = kb->u.keys[index-1].offset - off;
-               *keyp = key = g_malloc(len+1);
-               memcpy(key, kb->u.keydata + off, len);
+               *keyp = key = g_malloc (len+1);
+               memcpy (key, kb->u.keydata + off, len);
                key[len] = 0;
        }
 
-       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
 
-       camel_block_file_unref_block(ki->blocks, bl);
+       camel_block_file_unref_block (ki->blocks, bl);
 
        return blockid;
 }
@@ -931,12 +920,12 @@ camel_key_table_next(CamelKeyTable *ki, camel_key_t next, gchar **keyp, guint *f
        if (datap)
                *datap = 0;
 
-       CAMEL_KEY_TABLE_LOCK(ki, lock);
+       CAMEL_KEY_TABLE_LOCK (ki, lock);
 
        if (next == 0) {
                next = ki->root->first;
                if (next == 0) {
-                       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+                       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
                        return 0;
                }
        } else
@@ -946,9 +935,9 @@ camel_key_table_next(CamelKeyTable *ki, camel_key_t next, gchar **keyp, guint *f
                blockid =  next & (~(CAMEL_BLOCK_SIZE-1));
                index = next & (CAMEL_BLOCK_SIZE-1);
 
-               bl = camel_block_file_get_block(ki->blocks, blockid);
+               bl = camel_block_file_get_block (ki->blocks, blockid);
                if (bl == NULL) {
-                       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+                       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
                        return 0;
                }
 
@@ -958,22 +947,22 @@ camel_key_table_next(CamelKeyTable *ki, camel_key_t next, gchar **keyp, guint *f
                if (index >= kb->used) {
                        /* FIXME: check for loops */
                        next = kb->next;
-                       camel_block_file_unref_block(ki->blocks, bl);
+                       camel_block_file_unref_block (ki->blocks, bl);
                        bl = NULL;
                }
        } while (bl == NULL);
 
        /* invalid block data */
-       if ((kb->u.keys[index].offset >= sizeof(kb->u.keydata)
+       if ((kb->u.keys[index].offset >= sizeof (kb->u.keydata)
             /*|| kb->u.keys[index].offset < kb->u.keydata - (gchar *)&kb->u.keys[kb->used])*/
-            || kb->u.keys[index].offset < sizeof(kb->u.keys[0]) * kb->used
+            || kb->u.keys[index].offset < sizeof (kb->u.keys[0]) * kb->used
            || (index > 0 &&
-               (kb->u.keys[index-1].offset >= sizeof(kb->u.keydata)
+               (kb->u.keys[index-1].offset >= sizeof (kb->u.keydata)
                 /*|| kb->u.keys[index-1].offset < kb->u.keydata - (gchar *)&kb->u.keys[kb->used]))) {*/
-                || kb->u.keys[index-1].offset < sizeof(kb->u.keys[0]) * kb->used)))) {
-               g_warning("Block %u invalid scanning keys", bl->id);
-               camel_block_file_unref_block(ki->blocks, bl);
-               CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+                || kb->u.keys[index-1].offset < sizeof (kb->u.keys[0]) * kb->used)))) {
+               g_warning ("Block %u invalid scanning keys", bl->id);
+               camel_block_file_unref_block (ki->blocks, bl);
+               CAMEL_KEY_TABLE_UNLOCK (ki, lock);
                return 0;
        }
 
@@ -988,17 +977,17 @@ camel_key_table_next(CamelKeyTable *ki, camel_key_t next, gchar **keyp, guint *f
                gchar *key;
 
                if (index == 0)
-                       len = sizeof(kb->u.keydata) - off;
+                       len = sizeof (kb->u.keydata) - off;
                else
                        len = kb->u.keys[index-1].offset - off;
-               *keyp = key = g_malloc(len+1);
-               memcpy(key, kb->u.keydata + off, len);
+               *keyp = key = g_malloc (len+1);
+               memcpy (key, kb->u.keydata + off, len);
                key[len] = 0;
        }
 
-       CAMEL_KEY_TABLE_UNLOCK(ki, lock);
+       CAMEL_KEY_TABLE_UNLOCK (ki, lock);
 
-       camel_block_file_unref_block(ki->blocks, bl);
+       camel_block_file_unref_block (ki->blocks, bl);
 
        return next;
 }
index 5f33c04..58ec6fb 100644 (file)
 #include "camel-block-file.h"
 #include "camel-list-utils.h"
 
+/* Standard GObject macros */
+#define CAMEL_TYPE_PARTITION_TABLE \
+       (camel_partition_table_get_type ())
+#define CAMEL_PARTITION_TABLE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_PARTITION_TABLE, CamelPartitionTable))
+#define CAMEL_PARTITION_TABLE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_PARTITION_TABLE, CamelPartitionTableClass))
+#define CAMEL_IS_PARTITION_TABLE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_PARTITION_TABLE))
+#define CAMEL_IS_PARTITION_TABLE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_PARTITION_TABLE))
+#define CAMEL_PARTITION_TABLE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_PARTITION_TABLE, CamelPartitionTableClass))
+
+#define CAMEL_TYPE_KEY_TABLE \
+       (camel_key_table_get_type ())
+#define CAMEL_KEY_TABLE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_KEY_TABLE, CamelKeyTable))
+#define CAMEL_KEY_TABLE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_KEY_TABLE, CamelKeyTableClass))
+#define CAMEL_IS_KEY_TABLE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_KEY_TABLE))
+#define CAMEL_IS_KEY_TABLE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_KEY_TABLE))
+#define CAMEL_KEY_TABLE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_KEY_TABLE, CamelKeyTableClass))
+
 G_BEGIN_DECLS
 
 /* ********************************************************************** */
@@ -86,7 +123,7 @@ struct _CamelPartitionTableClass {
        CamelObjectClass parent;
 };
 
-CamelType      camel_partition_table_get_type  (void);
+GType          camel_partition_table_get_type  (void);
 CamelPartitionTable *
                camel_partition_table_new       (struct _CamelBlockFile *bs,
                                                 camel_block_t root);
@@ -149,7 +186,7 @@ struct _CamelKeyTableClass {
        CamelObjectClass parent;
 };
 
-CamelType      camel_key_table_get_type        (void);
+GType          camel_key_table_get_type        (void);
 CamelKeyTable *        camel_key_table_new             (CamelBlockFile *bs,
                                                 camel_block_t root);
 gint           camel_key_table_sync            (CamelKeyTable *ki);
index 0316fb9..2ffc172 100644 (file)
@@ -31,8 +31,9 @@
 #ifndef CAMEL_PROVIDER_H
 #define CAMEL_PROVIDER_H
 
-#include <camel/camel-object.h>
 #include <camel/camel-exception.h>
+#include <camel/camel-object.h>
+#include <camel/camel-object-bag.h>
 #include <camel/camel-url.h>
 
 #define CAMEL_PROVIDER(obj) ((CamelProvider *)(obj))
@@ -179,12 +180,12 @@ typedef struct {
        /* auto-detection function */
        CamelProviderAutoDetectFunc auto_detect;
 
-       /* CamelType(s) of its store and/or transport. If both are
+       /* GType(s) of its store and/or transport. If both are
         * set, then they are assumed to be linked together and the
         * transport type can only be used in an account that also
         * uses the store type (eg, Exchange or NNTP).
         */
-       CamelType object_types[CAMEL_NUM_PROVIDER_TYPES];
+       GType object_types[CAMEL_NUM_PROVIDER_TYPES];
 
        /* GList of CamelServiceAuthTypes the provider supports */
        GList *authtypes;
index 93fa9c4..80d4035 100644 (file)
@@ -40,14 +40,17 @@ CamelServiceAuthType camel_sasl_anonymous_authtype = {
        FALSE
 };
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslAnonymous, camel_sasl_anonymous, CAMEL_TYPE_SASL)
 
 static void
-sasl_anonymous_finalize (CamelObject *object)
+sasl_anonymous_finalize (GObject *object)
 {
        CamelSaslAnonymous *sasl = CAMEL_SASL_ANONYMOUS (object);
 
        g_free (sasl->trace_info);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_sasl_anonymous_parent_class)->finalize (object);
 }
 
 static GByteArray *
@@ -74,10 +77,10 @@ sasl_anonymous_challenge (CamelSasl *sasl,
                                ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
                                _("Invalid email address trace information:\n%s"),
                                sasl_anon->trace_info);
-                       camel_object_unref (cia);
+                       g_object_unref (cia);
                        return NULL;
                }
-               camel_object_unref (cia);
+               g_object_unref (cia);
                ret = g_byte_array_new ();
                g_byte_array_append (ret, (guint8 *) sasl_anon->trace_info, strlen (sasl_anon->trace_info));
                break;
@@ -110,31 +113,19 @@ sasl_anonymous_challenge (CamelSasl *sasl,
 static void
 camel_sasl_anonymous_class_init (CamelSaslAnonymousClass *class)
 {
+       GObjectClass *object_class;
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = sasl_anonymous_finalize;
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_anonymous_challenge;
 }
 
-CamelType
-camel_sasl_anonymous_get_type (void)
+static void
+camel_sasl_anonymous_init (CamelSaslAnonymous *sasl_anonymous)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslAnonymous",
-                                           sizeof (CamelSaslAnonymous),
-                                           sizeof (CamelSaslAnonymousClass),
-                                           (CamelObjectClassInitFunc) camel_sasl_anonymous_class_init,
-                                           NULL,
-                                           NULL,
-                                           (CamelObjectFinalizeFunc) sasl_anonymous_finalize);
-       }
-
-       return type;
 }
 
 /**
@@ -154,7 +145,7 @@ camel_sasl_anonymous_new (CamelSaslAnonTraceType type, const gchar *trace_info)
        if (!trace_info && type != CAMEL_SASL_ANON_TRACE_EMPTY)
                return NULL;
 
-       sasl_anon = CAMEL_SASL_ANONYMOUS (camel_object_new (camel_sasl_anonymous_get_type ()));
+       sasl_anon = g_object_new (CAMEL_TYPE_SASL_ANONYMOUS, NULL);
        sasl_anon->trace_info = g_strdup (trace_info);
        sasl_anon->type = type;
 
index ba09e84..57844ab 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_ANONYMOUS_TYPE     (camel_sasl_anonymous_get_type ())
-#define CAMEL_SASL_ANONYMOUS(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_ANONYMOUS_TYPE, CamelSaslAnonymous))
-#define CAMEL_SASL_ANONYMOUS_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_ANONYMOUS_TYPE, CamelSaslAnonymousClass))
-#define CAMEL_IS_SASL_ANONYMOUS(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_ANONYMOUS_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_ANONYMOUS \
+       (camel_sasl_anonymous_get_type ())
+#define CAMEL_SASL_ANONYMOUS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_ANONYMOUS, CamelSaslAnonymous))
+#define CAMEL_SASL_ANONYMOUS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_ANONYMOUS, CamelSaslAnonymousClass))
+#define CAMEL_IS_SASL_ANONYMOUS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_ANONYMOUS))
+#define CAMEL_IS_SASL_ANONYMOUS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_ANONYMOUS))
+#define CAMEL_SASL_ANONYMOUS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_ANONYMOUS, CamelSaslAnonymousClass))
 
 G_BEGIN_DECLS
 
@@ -56,7 +70,7 @@ struct _CamelSaslAnonymousClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_anonymous_get_type (void);
+GType camel_sasl_anonymous_get_type (void);
 
 /* public methods */
 CamelSasl *camel_sasl_anonymous_new (CamelSaslAnonTraceType type, const gchar *trace_info);
index 19c920e..e07d41d 100644 (file)
 #include "camel-sasl-cram-md5.h"
 #include "camel-service.h"
 
+#define CAMEL_SASL_CRAM_MD5_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_CRAM_MD5, CamelSaslCramMd5Private))
+
 struct _CamelSaslCramMd5Private {
        gint placeholder;  /* allow for future expansion */
 };
@@ -47,7 +51,7 @@ CamelServiceAuthType camel_sasl_cram_md5_authtype = {
        TRUE
 };
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslCramMd5, camel_sasl_cram_md5, CAMEL_TYPE_SASL)
 
 /* CRAM-MD5 algorithm:
  * MD5 ((passwd XOR opad), MD5 ((passwd XOR ipad), timestamp))
@@ -132,27 +136,14 @@ camel_sasl_cram_md5_class_init (CamelSaslCramMd5Class *class)
 {
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslCramMd5Private));
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_cram_md5_challenge;
 }
 
-CamelType
-camel_sasl_cram_md5_get_type (void)
+static void
+camel_sasl_cram_md5_init (CamelSaslCramMd5 *sasl)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslCramMd5",
-                                           sizeof (CamelSaslCramMd5),
-                                           sizeof (CamelSaslCramMd5Class),
-                                           (CamelObjectClassInitFunc) camel_sasl_cram_md5_class_init,
-                                           NULL,
-                                           NULL,
-                                           NULL);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_CRAM_MD5_GET_PRIVATE (sasl);
 }
index ee1cc90..70145b5 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_CRAM_MD5_TYPE     (camel_sasl_cram_md5_get_type ())
-#define CAMEL_SASL_CRAM_MD5(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_CRAM_MD5_TYPE, CamelSaslCramMd5))
-#define CAMEL_SASL_CRAM_MD5_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_CRAM_MD5_TYPE, CamelSaslCramMd5Class))
-#define CAMEL_IS_SASL_CRAM_MD5(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_CRAM_MD5_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_CRAM_MD5 \
+       (camel_sasl_cram_md5_get_type ())
+#define CAMEL_SASL_CRAM_MD5(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_CRAM_MD5, CamelSaslCramMd5))
+#define CAMEL_SASL_CRAM_MD5_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_CRAM_MD5, CamelSaslCramMd5Class))
+#define CAMEL_IS_SASL_CRAM_MD5(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_CRAM_MD5))
+#define CAMEL_IS_SASL_CRAM_MD5_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_CRAM_MD5))
+#define CAMEL_SASL_CRAM_MD5_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_CRAM_MD5, CamelSaslCramMd5Class))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelSaslCramMd5Class {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_cram_md5_get_type (void);
+GType camel_sasl_cram_md5_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_cram_md5_authtype;
 
index 6539e6d..c765ac7 100644 (file)
 
 #define PARANOID(x) x
 
+#define CAMEL_SASL_DIGEST_MD5_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_DIGEST_MD5, CamelSaslDigestMd5Private))
+
 /* Implements rfc2831 */
 
 CamelServiceAuthType camel_sasl_digest_md5_authtype = {
@@ -58,8 +62,6 @@ CamelServiceAuthType camel_sasl_digest_md5_authtype = {
        TRUE
 };
 
-static CamelSaslClass *parent_class = NULL;
-
 enum {
        STATE_AUTH,
        STATE_FINAL
@@ -167,6 +169,8 @@ struct _CamelSaslDigestMd5Private {
        gint state;
 };
 
+G_DEFINE_TYPE (CamelSaslDigestMd5, camel_sasl_digest_md5, CAMEL_TYPE_SASL)
+
 static void
 decode_lwsp (const gchar **in)
 {
@@ -733,7 +737,7 @@ digest_response (struct _DigestResponse *resp)
 }
 
 static void
-sasl_digest_md5_finalize (CamelObject *object)
+sasl_digest_md5_finalize (GObject *object)
 {
        CamelSaslDigestMd5 *sasl = CAMEL_SASL_DIGEST_MD5 (object);
        struct _DigestChallenge *c = sasl->priv->challenge;
@@ -776,7 +780,8 @@ sasl_digest_md5_finalize (CamelObject *object)
                g_free (r);
        }
 
-       g_free (sasl->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_sasl_digest_md5_parent_class)->finalize (object);
 }
 
 static GByteArray *
@@ -914,9 +919,13 @@ sasl_digest_md5_challenge (CamelSasl *sasl,
 static void
 camel_sasl_digest_md5_class_init (CamelSaslDigestMd5Class *class)
 {
+       GObjectClass *object_class;
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslDigestMd5Private));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = sasl_digest_md5_finalize;
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_digest_md5_challenge;
@@ -925,24 +934,5 @@ camel_sasl_digest_md5_class_init (CamelSaslDigestMd5Class *class)
 static void
 camel_sasl_digest_md5_init (CamelSaslDigestMd5 *sasl)
 {
-       sasl->priv = g_new0 (CamelSaslDigestMd5Private, 1);
-}
-
-CamelType
-camel_sasl_digest_md5_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslDigestMd5",
-                                           sizeof (CamelSaslDigestMd5),
-                                           sizeof (CamelSaslDigestMd5Class),
-                                           (CamelObjectClassInitFunc) camel_sasl_digest_md5_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_sasl_digest_md5_init,
-                                           (CamelObjectFinalizeFunc) sasl_digest_md5_finalize);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_DIGEST_MD5_GET_PRIVATE (sasl);
 }
index 5a12bab..62e904e 100644 (file)
 #include <sys/types.h>
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_DIGEST_MD5_TYPE     (camel_sasl_digest_md5_get_type ())
-#define CAMEL_SASL_DIGEST_MD5(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_DIGEST_MD5_TYPE, CamelSaslDigestMd5))
-#define CAMEL_SASL_DIGEST_MD5_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_DIGEST_MD5_TYPE, CamelSaslDigestMd5Class))
-#define CAMEL_IS_SASL_DIGEST_MD5(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_DIGEST_MD5_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_DIGEST_MD5 \
+       (camel_sasl_digest_md5_get_type ())
+#define CAMEL_SASL_DIGEST_MD5(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_DIGEST_MD5, CamelSaslDigestMd5))
+#define CAMEL_SASL_DIGEST_MD5_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_DIGEST_MD5, CamelSaslDigestMd5Class))
+#define CAMEL_IS_SASL_DIGEST_MD5(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_DIGEST_MD5))
+#define CAMEL_IS_SASL_DIGEST_MD5_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_DIGEST_MD5))
+#define CAMEL_SASL_DIGEST_MD5_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_DIGEST_MD5, CamelSaslDigestMd5Class))
 
 G_BEGIN_DECLS
 
@@ -50,7 +64,7 @@ struct _CamelSaslDigestMd5Class {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_digest_md5_get_type (void);
+GType camel_sasl_digest_md5_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_digest_md5_authtype;
 
index 8abbc0b..64ddce9 100644 (file)
@@ -74,6 +74,10 @@ extern gss_OID gss_nt_service_name;
 #define DBUS_INTERFACE         "org.gnome.KrbAuthDialog"
 #define DBUS_METHOD            "org.gnome.KrbAuthDialog.acquireTgt"
 
+#define CAMEL_SASL_GSSAPI_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_GSSAPI, CamelSaslGssapiPrivate))
+
 CamelServiceAuthType camel_sasl_gssapi_authtype = {
        N_("GSSAPI"),
 
@@ -103,7 +107,7 @@ struct _CamelSaslGssapiPrivate {
        gss_name_t target;
 };
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslGssapi, camel_sasl_gssapi, CAMEL_TYPE_SASL)
 
 static void
 gssapi_set_exception (OM_uint32 major,
@@ -162,7 +166,7 @@ gssapi_set_exception (OM_uint32 major,
 }
 
 static void
-sasl_gssapi_finalize (CamelObject *object)
+sasl_gssapi_finalize (GObject *object)
 {
        CamelSaslGssapi *sasl = CAMEL_SASL_GSSAPI (object);
        guint32 status;
@@ -174,7 +178,8 @@ sasl_gssapi_finalize (CamelObject *object)
        if (sasl->priv->target != GSS_C_NO_NAME)
                gss_release_name (&status, &sasl->priv->target);
 
-       g_free (sasl->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_sasl_gssapi_parent_class)->finalize (object);
 }
 
 /* DBUS Specific code */
@@ -241,7 +246,7 @@ sasl_gssapi_challenge (CamelSasl *sasl,
                        GByteArray *token,
                        CamelException *ex)
 {
-       CamelSaslGssapiPrivate *priv = CAMEL_SASL_GSSAPI (sasl)->priv;
+       CamelSaslGssapiPrivate *priv;
        CamelService *service;
        OM_uint32 major, minor, flags, time;
        gss_buffer_desc inbuf, outbuf;
@@ -254,6 +259,8 @@ sasl_gssapi_challenge (CamelSasl *sasl,
        struct addrinfo *ai, hints;
        const gchar *service_name;
 
+       priv = CAMEL_SASL_GSSAPI_GET_PRIVATE (sasl);
+
        service = camel_sasl_get_service (sasl);
        service_name = camel_sasl_get_service_name (sasl);
 
@@ -402,9 +409,13 @@ sasl_gssapi_challenge (CamelSasl *sasl,
 static void
 camel_sasl_gssapi_class_init (CamelSaslGssapiClass *class)
 {
+       GObjectClass *object_class;
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslGssapiPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = sasl_gssapi_finalize;
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_gssapi_challenge;
@@ -413,31 +424,11 @@ camel_sasl_gssapi_class_init (CamelSaslGssapiClass *class)
 static void
 camel_sasl_gssapi_init (CamelSaslGssapi *sasl)
 {
-       sasl->priv = g_new (struct _CamelSaslGssapiPrivate, 1);
+       sasl->priv = CAMEL_SASL_GSSAPI_GET_PRIVATE (sasl);
 
        sasl->priv->state = GSSAPI_STATE_INIT;
        sasl->priv->ctx = GSS_C_NO_CONTEXT;
        sasl->priv->target = GSS_C_NO_NAME;
 }
 
-CamelType
-camel_sasl_gssapi_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (
-                       camel_sasl_get_type (),
-                       "CamelSaslGssapi",
-                       sizeof (CamelSaslGssapi),
-                       sizeof (CamelSaslGssapiClass),
-                       (CamelObjectClassInitFunc) camel_sasl_gssapi_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_sasl_gssapi_init,
-                       (CamelObjectFinalizeFunc) sasl_gssapi_finalize);
-       }
-
-       return type;
-}
-
 #endif /* HAVE_KRB5 */
index 5437a67..a921211 100644 (file)
 #include <sys/types.h>
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_GSSAPI_TYPE     (camel_sasl_gssapi_get_type ())
-#define CAMEL_SASL_GSSAPI(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_GSSAPI_TYPE, CamelSaslGssapi))
-#define CAMEL_SASL_GSSAPI_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_GSSAPI_TYPE, CamelSaslGssapiClass))
-#define CAMEL_IS_SASL_GSSAPI(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_GSSAPI_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_GSSAPI \
+       (camel_sasl_gssapi_get_type ())
+#define CAMEL_SASL_GSSAPI(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_GSSAPI, CamelSaslGssapi))
+#define CAMEL_SASL_GSSAPI_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_GSSAPI, CamelSaslGssapiClass))
+#define CAMEL_IS_SASL_GSSAPI(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_GSSAPI))
+#define CAMEL_IS_SASL_GSSAPI_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_GSSAPI))
+#define CAMEL_SASL_GSSAPI_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_GSSAPI, CamelSaslGssapiClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +64,7 @@ struct _CamelSaslGssapiClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_gssapi_get_type (void);
+GType camel_sasl_gssapi_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_gssapi_authtype;
 
index 28f794c..4d5cabf 100644 (file)
 #include "camel-sasl-login.h"
 #include "camel-service.h"
 
+#define CAMEL_SASL_LOGIN_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_LOGIN, CamelSaslLoginPrivate))
+
 CamelServiceAuthType camel_sasl_login_authtype = {
        N_("Login"),
 
@@ -46,30 +50,24 @@ enum {
        LOGIN_PASSWD
 };
 
-static CamelSaslClass *parent_class = NULL;
-
 struct _CamelSaslLoginPrivate {
        gint state;
 };
 
-static void
-sasl_login_finalize (CamelObject *object)
-{
-       CamelSaslLogin *sasl = CAMEL_SASL_LOGIN (object);
-
-       g_free (sasl->priv);
-}
+G_DEFINE_TYPE (CamelSaslLogin, camel_sasl_login, CAMEL_TYPE_SASL)
 
 static GByteArray *
 sasl_login_challenge (CamelSasl *sasl,
                       GByteArray *token,
                       CamelException *ex)
 {
-       CamelSaslLoginPrivate *priv = CAMEL_SASL_LOGIN (sasl)->priv;
+       CamelSaslLoginPrivate *priv;
        GByteArray *buf = NULL;
        CamelService *service;
        CamelURL *url;
 
+       priv = CAMEL_SASL_LOGIN_GET_PRIVATE (sasl);
+
        service = camel_sasl_get_service (sasl);
        url = service->url;
        g_return_val_if_fail (url->passwd != NULL, NULL);
@@ -106,7 +104,7 @@ camel_sasl_login_class_init (CamelSaslLoginClass *class)
 {
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslLoginPrivate));
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_login_challenge;
@@ -115,24 +113,5 @@ camel_sasl_login_class_init (CamelSaslLoginClass *class)
 static void
 camel_sasl_login_init (CamelSaslLogin *sasl)
 {
-       sasl->priv = g_new0 (struct _CamelSaslLoginPrivate, 1);
-}
-
-CamelType
-camel_sasl_login_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslLogin",
-                                           sizeof (CamelSaslLogin),
-                                           sizeof (CamelSaslLoginClass),
-                                           (CamelObjectClassInitFunc) camel_sasl_login_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_sasl_login_init,
-                                           (CamelObjectFinalizeFunc) sasl_login_finalize);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_LOGIN_GET_PRIVATE (sasl);
 }
index 427e3ce..e17bbf8 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_LOGIN_TYPE     (camel_sasl_login_get_type ())
-#define CAMEL_SASL_LOGIN(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_LOGIN_TYPE, CamelSaslLogin))
-#define CAMEL_SASL_LOGIN_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_LOGIN_TYPE, CamelSaslLoginClass))
-#define CAMEL_IS_SASL_LOGIN(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_LOGIN_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_LOGIN \
+       (camel_sasl_login_get_type ())
+#define CAMEL_SASL_LOGIN(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_LOGIN, CamelSaslLogin))
+#define CAMEL_SASL_LOGIN_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_LOGIN, CamelSaslLoginClass))
+#define CAMEL_IS_SASL_LOGIN(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_LOGIN))
+#define CAMEL_IS_SASL_LOGIN_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_LOGIN))
+#define CAMEL_SASL_LOGIN_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_LOGIN, CamelSaslLoginClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelSaslLoginClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_login_get_type (void);
+GType camel_sasl_login_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_login_authtype;
 
index ed855dd..7d81430 100644 (file)
 
 #include "camel-sasl-ntlm.h"
 
+#define CAMEL_SASL_NTLM_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_NTLM, CamelSaslNTLMPrivate))
+
 struct _CamelSaslNTLMPrivate {
        gint placeholder;  /* allow for future expansion */
 };
@@ -43,7 +47,7 @@ CamelServiceAuthType camel_sasl_ntlm_authtype = {
        TRUE
 };
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslNTLM, camel_sasl_ntlm, CAMEL_TYPE_SASL)
 
 #define NTLM_REQUEST "NTLMSSP\x00\x01\x00\x00\x00\x06\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00"
 
@@ -722,25 +726,14 @@ camel_sasl_ntlm_class_init (CamelSaslNTLMClass *class)
 {
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslNTLMPrivate));
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_ntlm_challenge;
 }
 
-CamelType
-camel_sasl_ntlm_get_type (void)
+static void
+camel_sasl_ntlm_init (CamelSaslNTLM *sasl)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (
-                       camel_sasl_get_type (), "CamelSaslNTLM",
-                       sizeof (CamelSaslNTLM),
-                       sizeof (CamelSaslNTLMClass),
-                       (CamelObjectClassInitFunc) camel_sasl_ntlm_class_init,
-                       NULL, NULL, NULL);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_NTLM_GET_PRIVATE (sasl);
 }
index 32142e0..c012895 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_NTLM_TYPE     (camel_sasl_ntlm_get_type ())
-#define CAMEL_SASL_NTLM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_NTLM_TYPE, CamelSaslNTLM))
-#define CAMEL_SASL_NTLM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_NTLM_TYPE, CamelSaslNTLMClass))
-#define CAMEL_IS_SASL_NTLM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_NTLM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_NTLM \
+       (camel_sasl_ntlm_get_type ())
+#define CAMEL_SASL_NTLM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_NTLM, CamelSaslNTLM))
+#define CAMEL_SASL_NTLM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_NTLM, CamelSaslNTLMClass))
+#define CAMEL_IS_SASL_NTLM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_NTLM))
+#define CAMEL_IS_SASL_NTLM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_NTLM))
+#define CAMEL_SASL_NTLM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_NTLM, CamelSaslNTLMClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +61,7 @@ struct _CamelSaslNTLMClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_ntlm_get_type (void);
+GType camel_sasl_ntlm_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_ntlm_authtype;
 
index d1b28e1..6c83149 100644 (file)
 #include "camel-sasl-plain.h"
 #include "camel-service.h"
 
+#define CAMEL_SASL_PLAIN_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_PLAIN, CamelSaslPlainPrivate))
+
 struct _CamelSaslPlainPrivate {
        gint placeholder;  /* allow for future expansion */
 };
@@ -45,7 +49,7 @@ CamelServiceAuthType camel_sasl_plain_authtype = {
        TRUE
 };
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslPlain, camel_sasl_plain, CAMEL_TYPE_SASL)
 
 static GByteArray *
 sasl_plain_challenge (CamelSasl *sasl,
@@ -77,27 +81,14 @@ camel_sasl_plain_class_init (CamelSaslPlainClass *class)
 {
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslPlainPrivate));
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_plain_challenge;
 }
 
-CamelType
-camel_sasl_plain_get_type (void)
+static void
+camel_sasl_plain_init (CamelSaslPlain *sasl)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslPlain",
-                                           sizeof (CamelSaslPlain),
-                                           sizeof (CamelSaslPlainClass),
-                                           (CamelObjectClassInitFunc) camel_sasl_plain_class_init,
-                                           NULL,
-                                           NULL,
-                                           NULL);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_PLAIN_GET_PRIVATE (sasl);
 }
index 51451cd..761eaad 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_PLAIN_TYPE     (camel_sasl_plain_get_type ())
-#define CAMEL_SASL_PLAIN(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_PLAIN_TYPE, CamelSaslPlain))
-#define CAMEL_SASL_PLAIN_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_PLAIN_TYPE, CamelSaslPlainClass))
-#define CAMEL_IS_SASL_PLAIN(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_PLAIN_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_PLAIN \
+       (camel_sasl_plain_get_type ())
+#define CAMEL_SASL_PLAIN(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_PLAIN, CamelSaslPlain))
+#define CAMEL_SASL_PLAIN_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_PLAIN, CamelSaslPlainClass))
+#define CAMEL_IS_SASL_PLAIN(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_PLAIN))
+#define CAMEL_IS_SASL_PLAIN_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_PLAIN))
+#define CAMEL_SASL_PLAIN_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_PLAIN, CamelSaslPlainClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelSaslPlainClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_plain_get_type (void);
+GType camel_sasl_plain_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_plain_authtype;
 
index 442a430..7fc9bba 100644 (file)
 #include "camel-session.h"
 #include "camel-store.h"
 
+#define CAMEL_SASL_POPB4SMTP_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL_POPB4SMTP, CamelSaslPOPB4SMTPPrivate))
+
 struct _CamelSaslPOPB4SMTPPrivate {
        gint placeholder;  /* allow for future expansion */
 };
@@ -57,7 +61,7 @@ static GStaticMutex lock = G_STATIC_MUTEX_INIT;
 #define POPB4SMTP_LOCK(l) g_static_mutex_lock(&l)
 #define POPB4SMTP_UNLOCK(l) g_static_mutex_unlock(&l)
 
-static CamelSaslClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSaslPOPB4SMTP, camel_sasl_popb4smtp, CAMEL_TYPE_SASL)
 
 static GByteArray *
 sasl_popb4smtp_challenge (CamelSasl *sasl,
@@ -115,7 +119,7 @@ sasl_popb4smtp_challenge (CamelSasl *sasl,
        store = camel_session_get_store(session, popuri, ex);
        if (store) {
                camel_sasl_set_authenticated (sasl, TRUE);
-               camel_object_unref (store);
+               g_object_unref (store);
                *timep = now;
        } else {
                camel_sasl_set_authenticated (sasl, FALSE);
@@ -134,7 +138,7 @@ camel_sasl_popb4smtp_class_init (CamelSaslPOPB4SMTPClass *class)
 {
        CamelSaslClass *sasl_class;
 
-       parent_class = CAMEL_SASL_CLASS (camel_type_get_global_classfuncs (camel_sasl_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelSaslPOPB4SMTPPrivate));
 
        sasl_class = CAMEL_SASL_CLASS (class);
        sasl_class->challenge = sasl_popb4smtp_challenge;
@@ -142,21 +146,8 @@ camel_sasl_popb4smtp_class_init (CamelSaslPOPB4SMTPClass *class)
        poplast = g_hash_table_new (g_str_hash, g_str_equal);
 }
 
-CamelType
-camel_sasl_popb4smtp_get_type (void)
+static void
+camel_sasl_popb4smtp_init (CamelSaslPOPB4SMTP *sasl)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_sasl_get_type (),
-                                           "CamelSaslPOPB4SMTP",
-                                           sizeof (CamelSaslPOPB4SMTP),
-                                           sizeof (CamelSaslPOPB4SMTPClass),
-                                           (CamelObjectClassInitFunc) camel_sasl_popb4smtp_class_init,
-                                           NULL,
-                                           NULL,
-                                           NULL);
-       }
-
-       return type;
+       sasl->priv = CAMEL_SASL_POPB4SMTP_GET_PRIVATE (sasl);
 }
index 6f75c07..7882223 100644 (file)
 
 #include <camel/camel-sasl.h>
 
-#define CAMEL_SASL_POPB4SMTP_TYPE     (camel_sasl_popb4smtp_get_type ())
-#define CAMEL_SASL_POPB4SMTP(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_POPB4SMTP_TYPE, CamelSaslPOPB4SMTP))
-#define CAMEL_SASL_POPB4SMTP_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_POPB4SMTP_TYPE, CamelSaslPOPB4SMTPClass))
-#define CAMEL_IS_SASL_POPB4SMTP(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_POPB4SMTP_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL_POPB4SMTP \
+       (camel_sasl_popb4smtp_get_type ())
+#define CAMEL_SASL_POPB4SMTP(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL_POPB4SMTP, CamelSaslPOPB4SMTP))
+#define CAMEL_SASL_POPB4SMTP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL_POPB4SMTP, CamelSaslPOPB4SMTPClass))
+#define CAMEL_IS_SASL_POPB4SMTP(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL_POPB4SMTP))
+#define CAMEL_IS_SASL_POPB4SMTP_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL_POPB4SMTP))
+#define CAMEL_SASL_POPB4SMTP_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL_POPB4SMTP, CamelSaslPOPB4SMTPClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelSaslPOPB4SMTPClass {
        CamelSaslClass parent_class;
 };
 
-CamelType camel_sasl_popb4smtp_get_type (void);
+GType camel_sasl_popb4smtp_get_type (void);
 
 extern CamelServiceAuthType camel_sasl_popb4smtp_authtype;
 
index 467d701..76846ca 100644 (file)
 
 #define w(x)
 
+#define CAMEL_SASL_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SASL, CamelSaslPrivate))
+
 struct _CamelSaslPrivate {
        CamelService *service;
        gboolean authenticated;
@@ -46,7 +50,15 @@ struct _CamelSaslPrivate {
        gchar *mechanism;
 };
 
-static CamelObjectClass *parent_class = NULL;
+enum {
+       PROP_0,
+       PROP_AUTHENTICATED,
+       PROP_MECHANISM,
+       PROP_SERVICE,
+       PROP_SERVICE_NAME
+};
+
+G_DEFINE_ABSTRACT_TYPE (CamelSasl, camel_sasl, CAMEL_TYPE_OBJECT)
 
 static void
 sasl_set_mechanism (CamelSasl *sasl,
@@ -65,7 +77,7 @@ sasl_set_service (CamelSasl *sasl,
        g_return_if_fail (CAMEL_IS_SERVICE (service));
        g_return_if_fail (sasl->priv->service == NULL);
 
-       sasl->priv->service = camel_object_ref (service);
+       sasl->priv->service = g_object_ref (service);
 }
 
 static void
@@ -79,43 +91,166 @@ sasl_set_service_name (CamelSasl *sasl,
 }
 
 static void
-sasl_finalize (CamelSasl *sasl)
+sasl_set_property (GObject *object,
+                   guint property_id,
+                   const GValue *value,
+                   GParamSpec *pspec)
 {
-       g_free (sasl->priv->mechanism);
-       g_free (sasl->priv->service_name);
-       camel_object_unref (sasl->priv->service);
-       g_free (sasl->priv);
+       switch (property_id) {
+               case PROP_AUTHENTICATED:
+                       camel_sasl_set_authenticated (
+                               CAMEL_SASL (object),
+                               g_value_get_boolean (value));
+                       return;
+
+               case PROP_MECHANISM:
+                       sasl_set_mechanism (
+                               CAMEL_SASL (object),
+                               g_value_get_string (value));
+                       return;
+
+               case PROP_SERVICE:
+                       sasl_set_service (
+                               CAMEL_SASL (object),
+                               g_value_get_object (value));
+                       return;
+
+               case PROP_SERVICE_NAME:
+                       sasl_set_service_name (
+                               CAMEL_SASL (object),
+                               g_value_get_string (value));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
 static void
-camel_sasl_class_init (CamelSaslClass *camel_sasl_class)
+sasl_get_property (GObject *object,
+                   guint property_id,
+                   GValue *value,
+                   GParamSpec *pspec)
 {
-       parent_class = camel_type_get_global_classfuncs (CAMEL_TYPE_OBJECT);
+       switch (property_id) {
+               case PROP_AUTHENTICATED:
+                       g_value_set_boolean (
+                               value, camel_sasl_get_authenticated (
+                               CAMEL_SASL (object)));
+                       return;
+
+               case PROP_MECHANISM:
+                       g_value_set_string (
+                               value, camel_sasl_get_mechanism (
+                               CAMEL_SASL (object)));
+                       return;
+
+               case PROP_SERVICE:
+                       g_value_set_object (
+                               value, camel_sasl_get_service (
+                               CAMEL_SASL (object)));
+                       return;
+
+               case PROP_SERVICE_NAME:
+                       g_value_set_string (
+                               value, camel_sasl_get_service_name (
+                               CAMEL_SASL (object)));
+                       return;
+       }
+
+       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
 }
 
 static void
-camel_sasl_init (CamelSasl *sasl)
+sasl_dispose (GObject *object)
 {
-       sasl->priv = g_new0 (CamelSaslPrivate, 1);
+       CamelSaslPrivate *priv;
+
+       priv = CAMEL_SASL_GET_PRIVATE (object);
+
+       if (priv->service != NULL) {
+               g_object_unref (priv->service);
+               priv->service = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_sasl_parent_class)->dispose (object);
 }
 
-CamelType
-camel_sasl_get_type (void)
+static void
+sasl_finalize (GObject *object)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_TYPE_OBJECT,
-                                           "CamelSasl",
-                                           sizeof (CamelSasl),
-                                           sizeof (CamelSaslClass),
-                                           (CamelObjectClassInitFunc) camel_sasl_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_sasl_init,
-                                           (CamelObjectFinalizeFunc) sasl_finalize);
-       }
+       CamelSaslPrivate *priv;
 
-       return type;
+       priv = CAMEL_SASL_GET_PRIVATE (object);
+
+       g_free (priv->mechanism);
+       g_free (priv->service_name);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_sasl_parent_class)->finalize (object);
+}
+
+static void
+camel_sasl_class_init (CamelSaslClass *class)
+{
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelSaslPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->set_property = sasl_set_property;
+       object_class->get_property = sasl_get_property;
+       object_class->dispose = sasl_dispose;
+       object_class->finalize = sasl_finalize;
+
+       g_object_class_install_property (
+               object_class,
+               PROP_AUTHENTICATED,
+               g_param_spec_boolean (
+                       "authenticated",
+                       "Authenticated",
+                       NULL,
+                       FALSE,
+                       G_PARAM_READWRITE));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_MECHANISM,
+               g_param_spec_string (
+                       "mechanism",
+                       "Mechanism",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT_ONLY));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_SERVICE,
+               g_param_spec_object (
+                       "service",
+                       "Service",
+                       NULL,
+                       CAMEL_TYPE_SERVICE,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT_ONLY));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_SERVICE_NAME,
+               g_param_spec_string (
+                       "service-name",
+                       "Service Name",
+                       NULL,
+                       NULL,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+camel_sasl_init (CamelSasl *sasl)
+{
+       sasl->priv = CAMEL_SASL_GET_PRIVATE (sasl);
 }
 
 /**
@@ -209,7 +344,7 @@ camel_sasl_new (const gchar *service_name,
                 const gchar *mechanism,
                 CamelService *service)
 {
-       CamelSasl *sasl;
+       GType type;
 
        g_return_val_if_fail (service_name != NULL, NULL);
        g_return_val_if_fail (mechanism != NULL, NULL);
@@ -218,29 +353,27 @@ camel_sasl_new (const gchar *service_name,
        /* We don't do ANONYMOUS here, because it's a little bit weird. */
 
        if (!strcmp (mechanism, "CRAM-MD5"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_CRAM_MD5_TYPE);
+               type = CAMEL_TYPE_SASL_CRAM_MD5;
        else if (!strcmp (mechanism, "DIGEST-MD5"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_DIGEST_MD5_TYPE);
+               type = CAMEL_TYPE_SASL_DIGEST_MD5;
 #ifdef HAVE_KRB5
        else if (!strcmp (mechanism, "GSSAPI"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_GSSAPI_TYPE);
+               type = CAMEL_TYPE_SASL_GSSAPI;
 #endif
        else if (!strcmp (mechanism, "PLAIN"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_PLAIN_TYPE);
+               type = CAMEL_TYPE_SASL_PLAIN;
        else if (!strcmp (mechanism, "LOGIN"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_LOGIN_TYPE);
+               type = CAMEL_TYPE_SASL_LOGIN;
        else if (!strcmp (mechanism, "POPB4SMTP"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_POPB4SMTP_TYPE);
+               type = CAMEL_TYPE_SASL_POPB4SMTP;
        else if (!strcmp (mechanism, "NTLM"))
-               sasl = (CamelSasl *) camel_object_new (CAMEL_SASL_NTLM_TYPE);
+               type = CAMEL_TYPE_SASL_NTLM;
        else
                return NULL;
 
-       sasl_set_mechanism (sasl, mechanism);
-       sasl_set_service (sasl, service);
-       sasl_set_service_name (sasl, service_name);
-
-       return sasl;
+       return g_object_new (
+               type, "mechanism", mechanism, "service",
+               service, "service-name", service_name, NULL);
 }
 
 /**
@@ -267,6 +400,8 @@ camel_sasl_set_authenticated (CamelSasl *sasl,
        g_return_if_fail (CAMEL_IS_SASL (sasl));
 
        sasl->priv->authenticated = authenticated;
+
+       g_object_notify (G_OBJECT (sasl), "authenticated");
 }
 
 const gchar *
index 482c1c2..a978940 100644 (file)
 #include <camel/camel-exception.h>
 #include <camel/camel-service.h>
 
-#define CAMEL_SASL_TYPE     (camel_sasl_get_type ())
-#define CAMEL_SASL(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SASL_TYPE, CamelSasl))
-#define CAMEL_SASL_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SASL_TYPE, CamelSaslClass))
-#define CAMEL_IS_SASL(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SASL_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SASL \
+       (camel_sasl_get_type ())
+#define CAMEL_SASL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SASL, CamelSasl))
+#define CAMEL_SASL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SASL, CamelSaslClass))
+#define CAMEL_IS_SASL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SASL))
+#define CAMEL_IS_SASL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SASL))
 #define CAMEL_SASL_GET_CLASS(obj) \
-       ((CamelSaslClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SASL, CamelSaslClass))
 
 G_BEGIN_DECLS
 
@@ -57,7 +69,7 @@ struct _CamelSaslClass {
                                                 CamelException *ex);
 };
 
-CamelType      camel_sasl_get_type             (void);
+GType          camel_sasl_get_type             (void);
 GByteArray *   camel_sasl_challenge            (CamelSasl *sasl,
                                                 GByteArray *token,
                                                 CamelException *ex);
index 97875be..ec1ec3e 100644 (file)
@@ -440,7 +440,7 @@ camel_search_header_match (const gchar *value, const gchar *match, camel_search_
                for (i=0; !truth && camel_internet_address_get(cia, i, &name, &addr);i++)
                        truth = (name && header_match(name, match, how)) || (addr && header_match(addr, match, how));
 
-               camel_object_unref (cia);
+               g_object_unref (cia);
                break;
        }
 
@@ -483,7 +483,7 @@ camel_search_message_body_contains (CamelDataWrapper *object, regex_t *pattern)
                camel_data_wrapper_write_to_stream (containee, stream);
                camel_stream_write (stream, "", 1);
                truth = regexec (pattern, (gchar *) byte_array->data, 0, NULL, 0) == 0;
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
 
        return truth;
index 1e86002..a76d5b4 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "camel-seekable-stream.h"
 
-static CamelStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSeekableStream, camel_seekable_stream, CAMEL_TYPE_STREAM)
 
 static gint
 seekable_stream_reset (CamelStream *stream)
@@ -68,8 +68,6 @@ camel_seekable_stream_class_init (CamelSeekableStreamClass *class)
 {
        CamelStreamClass *stream_class;
 
-       parent_class = CAMEL_STREAM_CLASS( camel_type_get_global_classfuncs( CAMEL_STREAM_TYPE ) );
-
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->reset = seekable_stream_reset;
 
@@ -84,25 +82,6 @@ camel_seekable_stream_init (CamelSeekableStream *stream)
        stream->bound_end = CAMEL_STREAM_UNBOUND;
 }
 
-CamelType
-camel_seekable_stream_get_type (void)
-{
-       static CamelType camel_seekable_stream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_seekable_stream_type == CAMEL_INVALID_TYPE) {
-               camel_seekable_stream_type = camel_type_register( CAMEL_STREAM_TYPE,
-                                                                 "CamelSeekableStream",
-                                                                 sizeof( CamelSeekableStream ),
-                                                                 sizeof( CamelSeekableStreamClass ),
-                                                                 (CamelObjectClassInitFunc) camel_seekable_stream_class_init,
-                                                                 NULL,
-                                                                 (CamelObjectInitFunc) camel_seekable_stream_init,
-                                                                 NULL );
-       }
-
-       return camel_seekable_stream_type;
-}
-
 /**
  * camel_seekable_stream_seek:
  * @stream: a #CamelStream object
index b09915c..928f50f 100644 (file)
 #include <unistd.h>
 #include <camel/camel-stream.h>
 
-#define CAMEL_SEEKABLE_STREAM_TYPE     (camel_seekable_stream_get_type ())
-#define CAMEL_SEEKABLE_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStream))
-#define CAMEL_SEEKABLE_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStreamClass))
-#define CAMEL_IS_SEEKABLE_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SEEKABLE_STREAM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SEEKABLE_STREAM \
+       (camel_seekable_stream_get_type ())
+#define CAMEL_SEEKABLE_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SEEKABLE_STREAM, CamelSeekableStream))
+#define CAMEL_SEEKABLE_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SEEKABLE_STREAM, CamelSeekableStreamClass))
+#define CAMEL_IS_SEEKABLE_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SEEKABLE_STREAM))
+#define CAMEL_IS_SEEKABLE_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SEEKABLE_STREAM))
 #define CAMEL_SEEKABLE_STREAM_GET_CLASS(obj) \
-       ((CamelSeekableStreamClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SEEKABLE_STREAM, CamelSeekableStreamClass))
 
 G_BEGIN_DECLS
 
@@ -73,7 +85,7 @@ struct _CamelSeekableStreamClass {
                                                 off_t end);
 };
 
-CamelType      camel_seekable_stream_get_type  (void);
+GType          camel_seekable_stream_get_type  (void);
 off_t          camel_seekable_stream_seek      (CamelSeekableStream *stream,
                                                 off_t offset,
                                                 CamelStreamSeekPolicy policy);
index e7733f6..c2b40bf 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "camel-seekable-substream.h"
 
-static CamelSeekableStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSeekableSubstream, camel_seekable_substream, CAMEL_TYPE_SEEKABLE_STREAM)
 
 static gboolean
 seekable_substream_parent_reset (CamelSeekableSubstream *seekable_substream,
@@ -44,10 +44,19 @@ seekable_substream_parent_reset (CamelSeekableSubstream *seekable_substream,
 }
 
 static void
-camel_seekable_substream_finalize (CamelSeekableSubstream *seekable_substream)
+seekable_substream_dispose (GObject *object)
 {
-       if (seekable_substream->parent_stream != NULL)
-               camel_object_unref (seekable_substream->parent_stream);
+       CamelSeekableSubstream *seekable_substream;
+
+       seekable_substream = CAMEL_SEEKABLE_SUBSTREAM (object);
+
+       if (seekable_substream->parent_stream != NULL) {
+               g_object_unref (seekable_substream->parent_stream);
+               seekable_substream = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_seekable_substream_parent_class)->dispose (object);
 }
 
 static gssize
@@ -221,10 +230,12 @@ seekable_substream_seek (CamelSeekableStream *seekable_stream,
 static void
 camel_seekable_substream_class_init (CamelSeekableSubstreamClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
        CamelSeekableStreamClass *seekable_stream_class;
 
-       parent_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_type_get_global_classfuncs (camel_seekable_stream_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = seekable_substream_dispose;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = seekable_substream_read;
@@ -242,24 +253,6 @@ camel_seekable_substream_init (CamelSeekableSubstream *seekable_substream)
 {
 }
 
-CamelType
-camel_seekable_substream_get_type (void)
-{
-       static CamelType camel_seekable_substream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_seekable_substream_type == CAMEL_INVALID_TYPE) {
-               camel_seekable_substream_type = camel_type_register (camel_seekable_stream_get_type (), "CamelSeekableSubstream",
-                                                                    sizeof (CamelSeekableSubstream),
-                                                                    sizeof (CamelSeekableSubstreamClass),
-                                                                    (CamelObjectClassInitFunc) camel_seekable_substream_class_init,
-                                                                    NULL,
-                                                                    (CamelObjectInitFunc) camel_seekable_substream_init,
-                                                                    (CamelObjectFinalizeFunc) camel_seekable_substream_finalize);
-       }
-
-       return camel_seekable_substream_type;
-}
-
 /**
  * camel_seekable_substream_new:
  * @parent_stream: a #CamelSeekableStream object
@@ -285,10 +278,10 @@ camel_seekable_substream_new(CamelSeekableStream *parent_stream, off_t start, of
        g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (parent_stream), NULL);
 
        /* Create the seekable substream. */
-       seekable_substream = CAMEL_SEEKABLE_SUBSTREAM (camel_object_new (camel_seekable_substream_get_type ()));
+       seekable_substream = g_object_new (CAMEL_TYPE_SEEKABLE_SUBSTREAM, NULL);
 
        /* Initialize it. */
-       seekable_substream->parent_stream = camel_object_ref (parent_stream);
+       seekable_substream->parent_stream = g_object_ref (parent_stream);
 
        /* Set the bound of the substream. We can ignore any possible error
         * here, because if we fail to seek now, it will try again later. */
index b0864d2..877f939 100644 (file)
 
 #include <camel/camel-seekable-stream.h>
 
-#define CAMEL_SEEKABLE_SUBSTREAM_TYPE       (camel_seekable_substream_get_type ())
-#define CAMEL_SEEKABLE_SUBSTREAM(obj)       (CAMEL_CHECK_CAST((obj), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstream))
-#define CAMEL_SEEKABLE_SUBSTREAM_CLASS(k)   (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstreamClass))
-#define CAMEL_IS_SEEKABLE_SUBSTREAM(o)      (CAMEL_CHECK_TYPE((o), CAMEL_SEEKABLE_SUBSTREAM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SEEKABLE_SUBSTREAM \
+       (camel_seekable_substream_get_type ())
+#define CAMEL_SEEKABLE_SUBSTREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SEEKABLE_SUBSTREAM, CamelSeekableSubstream))
+#define CAMEL_SEEKABLE_SUBSTREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SEEKABLE_SUBSTREAM, CamelSeekableSubstreamClass))
+#define CAMEL_IS_SEEKABLE_SUBSTREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SEEKABLE_SUBSTREAM))
+#define CAMEL_IS_SEEKABLE_SUBSTREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SEEKABLE_SUBSTREAM))
+#define CAMEL_SEEKABLE_SUBSTREAM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SEEKABLE_SUBSTREAM, CamelSeekableSubstreamClass))
 
 G_BEGIN_DECLS
 
@@ -52,7 +66,7 @@ struct _CamelSeekableSubstreamClass {
        CamelSeekableStreamClass parent_class;
 };
 
-CamelType camel_seekable_substream_get_type (void);
+GType camel_seekable_substream_get_type (void);
 
 /* public methods */
 
index f2215ad..cc2986c 100644 (file)
 #define d(x)
 #define w(x)
 
+#define CAMEL_SERVICE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SERVICE, CamelServicePrivate))
+
 struct _CamelServicePrivate {
        GStaticRecMutex connect_lock;   /* for locking connection operations */
        GStaticMutex connect_op_lock;   /* for locking the connection_op */
 };
 
-static CamelObjectClass *camel_service_parent_class = NULL;
+G_DEFINE_ABSTRACT_TYPE (CamelService, camel_service, CAMEL_TYPE_OBJECT)
 
 static void
-camel_service_finalize (CamelObject *object)
+service_finalize (GObject *object)
 {
        CamelService *service = CAMEL_SERVICE (object);
 
@@ -70,12 +74,13 @@ camel_service_finalize (CamelObject *object)
                camel_url_free (service->url);
 
        if (service->session)
-               camel_object_unref (service->session);
+               g_object_unref (service->session);
 
        g_static_rec_mutex_free (&service->priv->connect_lock);
        g_static_mutex_free (&service->priv->connect_op_lock);
 
-       g_free (service->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_service_parent_class)->finalize (object);
 }
 
 static gint
@@ -221,7 +226,7 @@ service_construct (CamelService *service,
 
        service->provider = provider;
        service->url = camel_url_copy(url);
-       service->session = camel_object_ref (session);
+       service->session = g_object_ref (session);
 
        service->status = CAMEL_SERVICE_DISCONNECTED;
 
@@ -275,9 +280,9 @@ service_get_name (CamelService *service,
 {
        g_warning (
                "%s does not implement CamelServiceClass::get_name()",
-               camel_type_to_name (CAMEL_OBJECT_GET_TYPE (service)));
+               G_OBJECT_TYPE_NAME (service));
 
-       return g_strdup (camel_type_to_name (CAMEL_OBJECT_GET_TYPE (service)));
+       return g_strdup (G_OBJECT_TYPE_NAME (service));
 }
 
 static gchar *
@@ -326,9 +331,13 @@ service_get_path (CamelService *service)
 static void
 camel_service_class_init (CamelServiceClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
 
-       camel_service_parent_class = camel_type_get_global_classfuncs (CAMEL_TYPE_OBJECT);
+       g_type_class_add_private (class, sizeof (CamelServicePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = service_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->setv = service_setv;
@@ -346,32 +355,12 @@ camel_service_class_init (CamelServiceClass *class)
 static void
 camel_service_init (CamelService *service)
 {
-       service->priv = g_malloc0(sizeof(*service->priv));
+       service->priv = CAMEL_SERVICE_GET_PRIVATE (service);
 
        g_static_rec_mutex_init (&service->priv->connect_lock);
        g_static_mutex_init (&service->priv->connect_op_lock);
 }
 
-CamelType
-camel_service_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type =
-                       camel_type_register (CAMEL_TYPE_OBJECT,
-                                            "CamelService",
-                                            sizeof (CamelService),
-                                            sizeof (CamelServiceClass),
-                                            (CamelObjectClassInitFunc) camel_service_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_service_init,
-                                            camel_service_finalize );
-       }
-
-       return type;
-}
-
 /**
  * camel_service_construct:
  * @service: a #CamelService object
@@ -520,6 +509,7 @@ camel_service_disconnect (CamelService *service,
        camel_service_unlock (service, CS_REC_CONNECT_LOCK);
 
        service->status = CAMEL_SERVICE_DISCONNECTED;
+
        return res;
 }
 
@@ -690,24 +680,23 @@ camel_service_query_auth_types (CamelService *service,
  *
  * Locks #service's #lock. Unlock it with camel_service_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_service_lock (CamelService *service, CamelServiceLock lock)
+camel_service_lock (CamelService *service,
+                    CamelServiceLock lock)
 {
-       g_return_if_fail (service != NULL);
        g_return_if_fail (CAMEL_IS_SERVICE (service));
-       g_return_if_fail (service->priv != NULL);
 
        switch (lock) {
-       case CS_REC_CONNECT_LOCK:
-               g_static_rec_mutex_lock (&service->priv->connect_lock);
-               break;
-       case CS_CONNECT_OP_LOCK:
-               g_static_mutex_lock (&service->priv->connect_op_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_REC_CONNECT_LOCK:
+                       g_static_rec_mutex_lock (&service->priv->connect_lock);
+                       break;
+               case CS_CONNECT_OP_LOCK:
+                       g_static_mutex_lock (&service->priv->connect_op_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -718,23 +707,22 @@ camel_service_lock (CamelService *service, CamelServiceLock lock)
  *
  * Unlocks #service's #lock, previously locked with camel_service_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_service_unlock (CamelService *service, CamelServiceLock lock)
+camel_service_unlock (CamelService *service,
+                      CamelServiceLock lock)
 {
-       g_return_if_fail (service != NULL);
        g_return_if_fail (CAMEL_IS_SERVICE (service));
-       g_return_if_fail (service->priv != NULL);
 
        switch (lock) {
-       case CS_REC_CONNECT_LOCK:
-               g_static_rec_mutex_unlock (&service->priv->connect_lock);
-               break;
-       case CS_CONNECT_OP_LOCK:
-               g_static_mutex_unlock (&service->priv->connect_op_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_REC_CONNECT_LOCK:
+                       g_static_rec_mutex_unlock (&service->priv->connect_lock);
+                       break;
+               case CS_CONNECT_OP_LOCK:
+                       g_static_mutex_unlock (&service->priv->connect_op_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 3138812..aadd3a7 100644 (file)
 #include <camel/camel-provider.h>
 #include <camel/camel-operation.h>
 
-#define CAMEL_SERVICE_TYPE     (camel_service_get_type ())
-#define CAMEL_SERVICE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SERVICE_TYPE, CamelService))
-#define CAMEL_SERVICE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SERVICE_TYPE, CamelServiceClass))
-#define CAMEL_IS_SERVICE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SERVICE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SERVICE \
+       (camel_service_get_type ())
+#define CAMEL_SERVICE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SERVICE, CamelService))
+#define CAMEL_SERVICE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SERVICE, CamelServiceClass))
+#define CAMEL_IS_SERVICE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SERVICE))
+#define CAMEL_IS_SERVICE_CLASS(obj) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SERVICE))
 #define CAMEL_SERVICE_GET_CLASS(obj) \
-       ((CamelServiceClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SERVICE, CamelServiceClass))
 
 G_BEGIN_DECLS
 
@@ -117,7 +129,7 @@ typedef struct {
        gboolean need_password;   /* needs a password to authenticate */
 } CamelServiceAuthType;
 
-CamelType      camel_service_get_type          (void);
+GType          camel_service_get_type          (void);
 gboolean       camel_service_construct         (CamelService *service,
                                                 struct _CamelSession *session,
                                                 CamelProvider *provider,
@@ -138,9 +150,10 @@ struct _CamelSession *
 CamelProvider *        camel_service_get_provider      (CamelService *service);
 GList *                camel_service_query_auth_types  (CamelService *service,
                                                 CamelException *ex);
-
-void           camel_service_lock              (CamelService *service, CamelServiceLock lock);
-void           camel_service_unlock            (CamelService *service, CamelServiceLock lock);
+void           camel_service_lock              (CamelService *service,
+                                                CamelServiceLock lock);
+void           camel_service_unlock            (CamelService *service,
+                                                CamelServiceLock lock);
 
 G_END_DECLS
 
index c72f294..e7bc424 100644 (file)
 
 #define d(x)
 
+#define CAMEL_SESSION_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SESSION, CamelSessionPrivate))
+
 struct _CamelSessionPrivate {
        GMutex *lock;           /* for locking everything basically */
        GMutex *thread_lock;    /* locking threads */
@@ -59,9 +63,10 @@ struct _CamelSessionPrivate {
 
        GHashTable *thread_msg_op;
        GHashTable *junk_headers;
-
 };
 
+G_DEFINE_TYPE (CamelSession, camel_session, CAMEL_TYPE_OBJECT)
+
 static void
 cs_thread_status (CamelOperation *op,
                   const gchar *what,
@@ -78,7 +83,7 @@ cs_thread_status (CamelOperation *op,
 }
 
 static void
-session_finalize (CamelObject *object)
+session_finalize (GObject *object)
 {
        CamelSession *session = CAMEL_SESSION (object);
        GThreadPool *thread_pool = session->priv->thread_pool;
@@ -101,7 +106,8 @@ session_finalize (CamelObject *object)
                g_hash_table_destroy (session->priv->junk_headers);
        }
 
-       g_free(session->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_session_parent_class)->finalize (object);
 }
 
 static CamelService *
@@ -113,7 +119,6 @@ session_get_service (CamelSession *session,
        CamelURL *url;
        CamelProvider *provider;
        CamelService *service;
-       CamelException internal_ex;
 
        url = camel_url_new (url_string, ex);
        if (!url)
@@ -144,12 +149,9 @@ session_get_service (CamelSession *session,
        /* Now look up the service in the provider's cache */
        service = camel_object_bag_reserve(provider->service_cache[type], url);
        if (service == NULL) {
-               service = (CamelService *)camel_object_new (provider->object_types[type]);
-               camel_exception_init (&internal_ex);
-               camel_service_construct (service, session, provider, url, &internal_ex);
-               if (camel_exception_is_set (&internal_ex)) {
-                       camel_exception_xfer (ex, &internal_ex);
-                       camel_object_unref (service);
+               service = g_object_new (provider->object_types[type], NULL);
+               if (!camel_service_construct (service, session, provider, url, ex)) {
+                       g_object_unref (service);
                        service = NULL;
                        camel_object_bag_abort(provider->service_cache[type], url);
                } else {
@@ -201,7 +203,7 @@ session_thread_msg_new (CamelSession *session,
 
        m = g_malloc0(size);
        m->ops = ops;
-       m->session = camel_object_ref (session);
+       m->session = g_object_ref (session);
        m->op = camel_operation_new(cs_thread_status, m);
        camel_exception_init(&m->ex);
        camel_session_lock (session, CS_THREAD_LOCK);
@@ -232,7 +234,7 @@ session_thread_msg_free (CamelSession *session,
        if (msg->op)
                camel_operation_unref(msg->op);
        camel_exception_clear(&msg->ex);
-       camel_object_unref (msg->session);
+       g_object_unref (msg->session);
        g_free(msg);
 }
 
@@ -303,8 +305,14 @@ session_thread_status (CamelSession *session,
 static void
 camel_session_class_init (CamelSessionClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
 
+       g_type_class_add_private (class, sizeof (CamelSessionPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = session_finalize;
+
        class->get_service = session_get_service;
        class->get_storage_path = session_get_storage_path;
        class->thread_msg_new = session_thread_msg_new;
@@ -320,7 +328,7 @@ camel_session_class_init (CamelSessionClass *class)
 static void
 camel_session_init (CamelSession *session)
 {
-       session->priv = g_malloc0(sizeof(*session->priv));
+       session->priv = CAMEL_SESSION_GET_PRIVATE (session);
 
        session->online = TRUE;
        session->network_state = TRUE;
@@ -333,25 +341,6 @@ camel_session_init (CamelSession *session)
        session->priv->junk_headers = NULL;
 }
 
-CamelType
-camel_session_get_type (void)
-{
-       static CamelType camel_session_type = CAMEL_INVALID_TYPE;
-
-       if (camel_session_type == CAMEL_INVALID_TYPE) {
-               camel_session_type = camel_type_register (
-                       camel_object_get_type (), "CamelSession",
-                       sizeof (CamelSession),
-                       sizeof (CamelSessionClass),
-                       (CamelObjectClassInitFunc) camel_session_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_session_init,
-                       (CamelObjectFinalizeFunc) session_finalize);
-       }
-
-       return camel_session_type;
-}
-
 /**
  * camel_session_construct:
  * @session: a #CamelSession object to construct
@@ -401,7 +390,9 @@ camel_session_get_service (CamelSession *session,
        g_return_val_if_fail (class->get_service != NULL, NULL);
 
        camel_session_lock (session, CS_SESSION_LOCK);
+
        service = class->get_service (session, url_string, type, ex);
+
        camel_session_unlock (session, CS_SESSION_LOCK);
 
        return service;
@@ -434,7 +425,7 @@ camel_session_get_service_connected (CamelSession *session,
 
        if (svc->status != CAMEL_SERVICE_CONNECTED) {
                if (camel_service_connect (svc, ex) == FALSE) {
-                       camel_object_unref (svc);
+                       g_object_unref (svc);
                        return NULL;
                }
        }
@@ -944,24 +935,23 @@ camel_session_forward_to (CamelSession *session,
  *
  * Locks #session's #lock. Unlock it with camel_session_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_session_lock (CamelSession *session, CamelSessionLock lock)
+camel_session_lock (CamelSession *session,
+                    CamelSessionLock lock)
 {
-       g_return_if_fail (session != NULL);
        g_return_if_fail (CAMEL_IS_SESSION (session));
-       g_return_if_fail (session->priv != NULL);
 
        switch (lock) {
-       case CS_SESSION_LOCK:
-               g_mutex_lock (session->priv->lock);
-               break;
-       case CS_THREAD_LOCK:
-               g_mutex_lock (session->priv->thread_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_SESSION_LOCK:
+                       g_mutex_lock (session->priv->lock);
+                       break;
+               case CS_THREAD_LOCK:
+                       g_mutex_lock (session->priv->thread_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -972,23 +962,22 @@ camel_session_lock (CamelSession *session, CamelSessionLock lock)
  *
  * Unlocks #session's #lock, previously locked with camel_session_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_session_unlock (CamelSession *session, CamelSessionLock lock)
+camel_session_unlock (CamelSession *session,
+                      CamelSessionLock lock)
 {
-       g_return_if_fail (session != NULL);
        g_return_if_fail (CAMEL_IS_SESSION (session));
-       g_return_if_fail (session->priv != NULL);
 
        switch (lock) {
-       case CS_SESSION_LOCK:
-               g_mutex_unlock (session->priv->lock);
-               break;
-       case CS_THREAD_LOCK:
-               g_mutex_unlock (session->priv->thread_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_SESSION_LOCK:
+                       g_mutex_unlock (session->priv->lock);
+                       break;
+               case CS_THREAD_LOCK:
+                       g_mutex_unlock (session->priv->thread_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 07f9a8a..7c8c02a 100644 (file)
 #include <camel/camel-provider.h>
 #include <camel/camel-service.h>
 
-#define CAMEL_SESSION_TYPE     (camel_session_get_type ())
-#define CAMEL_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SESSION_TYPE, CamelSession))
-#define CAMEL_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SESSION_TYPE, CamelSessionClass))
-#define CAMEL_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SESSION_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SESSION \
+       (camel_session_get_type ())
+#define CAMEL_SESSION(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SESSION, CamelSession))
+#define CAMEL_SESSION_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SESSION, CamelSessionClass))
+#define CAMEL_IS_SESSION(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SESSION))
+#define CAMEL_IS_SESSION_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SESSION))
 #define CAMEL_SESSION_GET_CLASS(obj) \
-       ((CamelSessionClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SESSION, CamelSessionClass))
 
 G_BEGIN_DECLS
 
@@ -63,7 +75,7 @@ enum {
        CAMEL_SESSION_PASSPHRASE = 1 << 4
 };
 
-typedef enum _CamelSessionLock {
+typedef enum {
        CS_SESSION_LOCK,
        CS_THREAD_LOCK
 } CamelSessionLock;
@@ -139,7 +151,7 @@ struct _CamelSessionClass {
                                              CamelException *ex);
 };
 
-CamelType camel_session_get_type (void);
+GType camel_session_get_type (void);
 
 void            camel_session_construct             (CamelSession *session,
                                                     const gchar *storage_path);
@@ -243,9 +255,10 @@ void                  camel_session_forward_to         (CamelSession *session,
                                                     CamelMimeMessage *message,
                                                     const gchar *address,
                                                     CamelException *ex);
-
-void           camel_session_lock              (CamelSession *session, CamelSessionLock lock);
-void           camel_session_unlock            (CamelSession *session, CamelSessionLock lock);
+void           camel_session_lock              (CamelSession *session,
+                                                CamelSessionLock lock);
+void           camel_session_unlock            (CamelSession *session,
+                                                CamelSessionLock lock);
 
 G_END_DECLS
 
index 68a53e6..515b5fb 100644 (file)
 
 #define d(x)
 
+#define CAMEL_SMIME_CONTEXT_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_SMIME_CONTEXT, CamelSMIMEContextPrivate))
+
 struct _CamelSMIMEContextPrivate {
        CERTCertDBHandle *certdb;
 
@@ -72,7 +76,7 @@ struct _CamelSMIMEContextPrivate {
        guint send_encrypt_key_prefs:1;
 };
 
-static CamelCipherContextClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelSMIMEContext, camel_smime_context, CAMEL_TYPE_CIPHER_CONTEXT)
 
 static void
 smime_cert_data_free (gpointer cert_data)
@@ -559,7 +563,7 @@ sm_verify_cmsg (CamelCipherContext *context,
                        mem = camel_stream_mem_new_with_byte_array (buffer);
                        camel_stream_write_to_stream (extstream, mem);
                        NSS_CMSDigestContext_Update (digcx, buffer->data, buffer->len);
-                       camel_object_unref (mem);
+                       g_object_unref (mem);
 
                        if (NSS_CMSDigestContext_FinishMultiple (digcx, poolp, &digests) != SECSuccess) {
                                set_nss_error (ex, _("Cannot calculate digests"));
@@ -666,16 +670,6 @@ fail:
        return NULL;
 }
 
-static void
-smime_context_finalize (CamelObject *object)
-{
-       CamelSMIMEContext *context = (CamelSMIMEContext *)object;
-
-       /* FIXME: do we have to free the certdb? */
-
-       g_free (context->priv);
-}
-
 static const gchar *
 smime_context_hash_to_id (CamelCipherContext *context,
                           CamelCipherHash hash)
@@ -815,7 +809,7 @@ smime_context_sign (CamelCipherContext *context,
                mps->signature = sigpart;
                mps->contentraw = istream;
                camel_stream_reset (istream);
-               camel_object_ref (istream);
+               g_object_ref (istream);
 
                camel_medium_set_content ((CamelMedium *)opart, (CamelDataWrapper *)mps);
        } else {
@@ -833,10 +827,10 @@ smime_context_sign (CamelCipherContext *context,
                camel_mime_part_set_encoding (opart, CAMEL_TRANSFER_ENCODING_BASE64);
        }
 
-       camel_object_unref (dw);
+       g_object_unref (dw);
 fail:
-       camel_object_unref (ostream);
-       camel_object_unref (istream);
+       g_object_unref (ostream);
+       g_object_unref (istream);
 
        return res;
 }
@@ -920,9 +914,9 @@ smime_context_verify (CamelCipherContext *context,
 
        NSS_CMSMessage_Destroy (cmsg);
 fail:
-       camel_object_unref (mem);
+       g_object_unref (mem);
        if (constream)
-               camel_object_unref (constream);
+               g_object_unref (constream);
 
        return valid;
 }
@@ -1055,11 +1049,11 @@ smime_context_encrypt (CamelCipherContext *context,
        camel_data_wrapper_write_to_stream ((CamelDataWrapper *)ipart, mem);
        if (NSS_CMSEncoder_Update (enc, (gchar *) buffer->data, buffer->len) != SECSuccess) {
                NSS_CMSEncoder_Cancel (enc);
-               camel_object_unref (mem);
+               g_object_unref (mem);
                set_nss_error (ex, _("Failed to add data to encoder"));
                goto fail;
        }
-       camel_object_unref (mem);
+       g_object_unref (mem);
 
        if (NSS_CMSEncoder_Finish(enc) != SECSuccess) {
                set_nss_error (ex, _("Failed to encode data"));
@@ -1074,7 +1068,7 @@ smime_context_encrypt (CamelCipherContext *context,
 
        dw = camel_data_wrapper_new ();
        camel_data_wrapper_construct_from_stream (dw, ostream);
-       camel_object_unref (ostream);
+       g_object_unref (ostream);
        dw->encoding = CAMEL_TRANSFER_ENCODING_BINARY;
 
        ct = camel_content_type_new ("application", "x-pkcs7-mime");
@@ -1084,7 +1078,7 @@ smime_context_encrypt (CamelCipherContext *context,
        camel_content_type_unref (ct);
 
        camel_medium_set_content ((CamelMedium *)opart, dw);
-       camel_object_unref (dw);
+       g_object_unref (dw);
 
        camel_mime_part_set_disposition (opart, "attachment");
        camel_mime_part_set_filename (opart, "smime.p7m");
@@ -1095,7 +1089,7 @@ smime_context_encrypt (CamelCipherContext *context,
 
 fail:
        if (ostream)
-               camel_object_unref (ostream);
+               g_object_unref (ostream);
        if (cmsg)
                NSS_CMSMessage_Destroy (cmsg);
        if (bulkkey)
@@ -1106,7 +1100,7 @@ fail:
                        CERT_DestroyCertificate (recipient_certs[i]);
        }
 
-       PORT_FreeArena(poolp, PR_FALSE);
+       PORT_FreeArena (poolp, PR_FALSE);
 
        return -1;
 }
@@ -1134,7 +1128,7 @@ smime_context_decrypt (CamelCipherContext *context,
        buffer = g_byte_array_new ();
        istream = camel_stream_mem_new_with_byte_array (buffer);
        camel_data_wrapper_decode_to_stream (camel_medium_get_content ((CamelMedium *)ipart), istream);
-       camel_stream_reset ((CamelStream *)istream);
+       camel_stream_reset (istream);
 
        dec = NSS_CMSDecoder_Start (NULL,
                                   sm_write_stream, ostream, /* content callback     */
@@ -1147,7 +1141,7 @@ smime_context_decrypt (CamelCipherContext *context,
                cmsg = NSS_CMSDecoder_Finish (dec);
        }
 
-       camel_object_unref (istream);
+       g_object_unref (istream);
 
        if (cmsg == NULL) {
                set_nss_error (ex, _("Decoder failed"));
@@ -1177,7 +1171,7 @@ smime_context_decrypt (CamelCipherContext *context,
 
        NSS_CMSMessage_Destroy (cmsg);
 fail:
-       camel_object_unref (ostream);
+       g_object_unref (ostream);
 
        return valid;
 }
@@ -1187,7 +1181,7 @@ camel_smime_context_class_init (CamelSMIMEContextClass *class)
 {
        CamelCipherContextClass *cipher_context_class;
 
-       parent_class = CAMEL_CIPHER_CONTEXT_CLASS(camel_type_get_global_classfuncs(camel_cipher_context_get_type()));
+       g_type_class_add_private (class, sizeof (CamelSMIMEContextPrivate));
 
        cipher_context_class = CAMEL_CIPHER_CONTEXT_CLASS (class);
        cipher_context_class->sign_protocol = "application/x-pkcs7-signature";
@@ -1204,32 +1198,13 @@ camel_smime_context_class_init (CamelSMIMEContextClass *class)
 static void
 camel_smime_context_init (CamelSMIMEContext *smime_context)
 {
-       smime_context->priv = g_malloc0(sizeof(*smime_context->priv));
+       smime_context->priv = CAMEL_SMIME_CONTEXT_GET_PRIVATE (smime_context);
 
        smime_context->priv->certdb = CERT_GetDefaultCertDB ();
        smime_context->priv->sign_mode = CAMEL_SMIME_SIGN_CLEARSIGN;
        smime_context->priv->password_tries = 0;
 }
 
-CamelType
-camel_smime_context_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_cipher_context_get_type(),
-                                          "CamelSMIMEContext",
-                                          sizeof(CamelSMIMEContext),
-                                          sizeof(CamelSMIMEContextClass),
-                                          (CamelObjectClassInitFunc) camel_smime_context_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_smime_context_init,
-                                          (CamelObjectFinalizeFunc) smime_context_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_smime_context_new:
  * @session: session
@@ -1241,17 +1216,11 @@ camel_smime_context_get_type(void)
 CamelCipherContext *
 camel_smime_context_new (CamelSession *session)
 {
-       CamelCipherContext *cipher;
-       CamelSMIMEContext *ctx;
-
        g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
 
-       ctx =(CamelSMIMEContext *) camel_object_new(camel_smime_context_get_type());
-
-       cipher = CAMEL_CIPHER_CONTEXT (ctx);
-       camel_cipher_context_construct (cipher, session);
-
-       return cipher;
+       return g_object_new (
+               CAMEL_TYPE_SMIME_CONTEXT,
+               "session", session, NULL);
 }
 
 void
@@ -1308,8 +1277,8 @@ camel_smime_context_describe_part (CamelSMIMEContext *context, CamelMimePart *pa
                                           NULL, NULL,  /* password callback    */
                                           NULL, NULL); /* decrypt key callback */
 
-               NSS_CMSDecoder_Update(dec, (gchar *) buffer->data, buffer->len);
-               camel_object_unref (istream);
+               NSS_CMSDecoder_Update (dec, (gchar *) buffer->data, buffer->len);
+               g_object_unref (istream);
 
                cmsg = NSS_CMSDecoder_Finish (dec);
                if (cmsg) {
index 22065af..4aed11b 100644 (file)
 
 #include <camel/camel-cipher-context.h>
 
-#define CAMEL_SMIME_CONTEXT_TYPE    (camel_smime_context_get_type())
-#define CAMEL_SMIME_CONTEXT(obj)    (CAMEL_CHECK_CAST((obj), CAMEL_SMIME_CONTEXT_TYPE, CamelSMIMEContext))
-#define CAMEL_SMIME_CONTEXT_CLASS(k)(CAMEL_CHECK_CLASS_CAST((k), CAMEL_SMIME_CONTEXT_TYPE, CamelSMIMEContextClass))
-#define CAMEL_IS_SMIME_CONTEXT(o)   (CAMEL_CHECK_TYPE((o), CAMEL_SMIME_CONTEXT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SMIME_CONTEXT \
+       (camel_smime_context_get_type())
+#define CAMEL_SMIME_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SMIME_CONTEXT, CamelSMIMEContext))
+#define CAMEL_SMIME_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SMIME_CONTEXT, CamelSMIMEContextClass))
+#define CAMEL_IS_SMIME_CONTEXT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SMIME_CONTEXT))
+#define CAMEL_IS_SMIME_CONTEXT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SMIME_CONTEXT))
+#define CAMEL_SMIME_CONTEXT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SMIME_CONTEXT, CamelSMIMEContextClass))
 
 G_BEGIN_DECLS
 
@@ -62,7 +76,7 @@ struct _CamelSMIMEContextClass {
        CamelCipherContextClass parent_class;
 };
 
-CamelType camel_smime_context_get_type(void);
+GType camel_smime_context_get_type(void);
 
 CamelCipherContext *camel_smime_context_new(CamelSession *session);
 
index 295cc22..3e01cad 100644 (file)
 #define d(x)
 #define io(x)                  /* io debug */
 
-struct _CamelStoreSummaryPrivate {
-       GMutex *summary_lock;   /* for the summary hashtable/array */
-       GMutex *io_lock;        /* load/save lock, for access to saved_count, etc */
-       GMutex *ref_lock;       /* for reffing/unreffing messageinfo's ALWAYS obtain before CSS_SUMMARY_LOCK */
-};
-
 /* possible versions, for versioning changes */
 #define CAMEL_STORE_SUMMARY_VERSION_0 (1)
 #define CAMEL_STORE_SUMMARY_VERSION_2 (2)
@@ -57,13 +51,23 @@ struct _CamelStoreSummaryPrivate {
 /* current version */
 #define CAMEL_STORE_SUMMARY_VERSION (2)
 
-#define CAMEL_STORE_SUMMARY_GET_PRIVATE(o) (((CamelStoreSummary *)(o))->priv)
+#define CAMEL_STORE_SUMMARY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummaryPrivate))
 
-static CamelObjectClass *camel_store_summary_parent;
+struct _CamelStoreSummaryPrivate {
+       GMutex *summary_lock;   /* for the summary hashtable/array */
+       GMutex *io_lock;        /* load/save lock, for access to saved_count, etc */
+       GMutex *ref_lock;       /* for reffing/unreffing messageinfo's ALWAYS obtain before CSS_SUMMARY_LOCK */
+};
+
+G_DEFINE_TYPE (CamelStoreSummary, camel_store_summary, CAMEL_TYPE_OBJECT)
 
 static void
-store_summary_finalize (CamelStoreSummary *summary)
+store_summary_finalize (GObject *object)
 {
+       CamelStoreSummary *summary = CAMEL_STORE_SUMMARY (object);
+
        camel_store_summary_clear (summary);
        g_ptr_array_free (summary->folders, TRUE);
        g_hash_table_destroy (summary->folders_path);
@@ -77,7 +81,8 @@ store_summary_finalize (CamelStoreSummary *summary)
        g_mutex_free (summary->priv->io_lock);
        g_mutex_free (summary->priv->ref_lock);
 
-       g_free (summary->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_store_summary_parent_class)->finalize (object);
 }
 
 static gint
@@ -295,7 +300,12 @@ store_summary_store_info_set_string (CamelStoreSummary *summary,
 static void
 camel_store_summary_class_init (CamelStoreSummaryClass *class)
 {
-       camel_store_summary_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelStoreSummaryPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = store_summary_finalize;
 
        class->summary_header_load = store_summary_summary_header_load;
        class->summary_header_save = store_summary_summary_header_save;
@@ -310,7 +320,7 @@ camel_store_summary_class_init (CamelStoreSummaryClass *class)
 static void
 camel_store_summary_init (CamelStoreSummary *summary)
 {
-       summary->priv = g_new0 (CamelStoreSummaryPrivate, 1);
+       summary->priv = CAMEL_STORE_SUMMARY_GET_PRIVATE (summary);
 
        summary->store_info_size = sizeof (CamelStoreInfo);
 
@@ -329,24 +339,6 @@ camel_store_summary_init (CamelStoreSummary *summary)
        summary->priv->ref_lock = g_mutex_new ();
 }
 
-CamelType
-camel_store_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_object_get_type (), "CamelStoreSummary",
-                                           sizeof (CamelStoreSummary),
-                                           sizeof (CamelStoreSummaryClass),
-                                           (CamelObjectClassInitFunc) camel_store_summary_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_store_summary_init,
-                                           (CamelObjectFinalizeFunc) store_summary_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_store_summary_new:
  *
@@ -357,7 +349,7 @@ camel_store_summary_get_type (void)
 CamelStoreSummary *
 camel_store_summary_new (void)
 {
-       return CAMEL_STORE_SUMMARY (camel_object_new (camel_store_summary_get_type ()));
+       return g_object_new (CAMEL_TYPE_STORE_SUMMARY, NULL);
 }
 
 /**
@@ -1095,27 +1087,26 @@ camel_store_info_set_string (CamelStoreSummary *summary,
  *
  * Locks #summary's #lock. Unlock it with camel_store_summary_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_store_summary_lock (CamelStoreSummary *summary, CamelStoreSummaryLock lock)
+camel_store_summary_lock (CamelStoreSummary *summary,
+                          CamelStoreSummaryLock lock)
 {
-       g_return_if_fail (summary != NULL);
        g_return_if_fail (CAMEL_IS_STORE_SUMMARY (summary));
-       g_return_if_fail (summary->priv != NULL);
 
        switch (lock) {
-       case CSS_SUMMARY_LOCK:
-               g_mutex_lock (summary->priv->summary_lock);
-               break;
-       case CSS_IO_LOCK:
-               g_mutex_lock (summary->priv->io_lock);
-               break;
-       case CSS_REF_LOCK:
-               g_mutex_lock (summary->priv->ref_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CSS_SUMMARY_LOCK:
+                       g_mutex_lock (summary->priv->summary_lock);
+                       break;
+               case CSS_IO_LOCK:
+                       g_mutex_lock (summary->priv->io_lock);
+                       break;
+               case CSS_REF_LOCK:
+                       g_mutex_lock (summary->priv->ref_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -1126,26 +1117,25 @@ camel_store_summary_lock (CamelStoreSummary *summary, CamelStoreSummaryLock lock
  *
  * Unlocks #summary's #lock, previously locked with camel_store_summary_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_store_summary_unlock (CamelStoreSummary *summary, CamelStoreSummaryLock lock)
+camel_store_summary_unlock (CamelStoreSummary *summary,
+                            CamelStoreSummaryLock lock)
 {
-       g_return_if_fail (summary != NULL);
        g_return_if_fail (CAMEL_IS_STORE_SUMMARY (summary));
-       g_return_if_fail (summary->priv != NULL);
 
        switch (lock) {
-       case CSS_SUMMARY_LOCK:
-               g_mutex_unlock (summary->priv->summary_lock);
-               break;
-       case CSS_IO_LOCK:
-               g_mutex_unlock (summary->priv->io_lock);
-               break;
-       case CSS_REF_LOCK:
-               g_mutex_unlock (summary->priv->ref_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CSS_SUMMARY_LOCK:
+                       g_mutex_unlock (summary->priv->summary_lock);
+                       break;
+               case CSS_IO_LOCK:
+                       g_mutex_unlock (summary->priv->io_lock);
+                       break;
+               case CSS_REF_LOCK:
+                       g_mutex_unlock (summary->priv->ref_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 7e8a338..9070264 100644 (file)
 #include <camel/camel-object.h>
 #include <camel/camel-url.h>
 
-#define CAMEL_STORE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_store_summary_get_type (), CamelStoreSummary)
-#define CAMEL_STORE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_store_summary_get_type (), CamelStoreSummaryClass)
-#define CAMEL_IS_STORE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_store_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_STORE_SUMMARY \
+       (camel_store_summary_get_type ())
+#define CAMEL_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummary))
+#define CAMEL_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummaryClass))
+#define CAMEL_IS_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STORE_SUMMARY))
+#define CAMEL_IS_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STORE_SUMMARY))
 #define CAMEL_STORE_SUMMARY_GET_CLASS(obj) \
-       ((CamelStoreSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STORE_SUMMARY, CamelStoreSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -89,7 +102,7 @@ typedef enum _CamelStoreSummaryFlags {
        CAMEL_STORE_SUMMARY_FRAGMENT = 1<<1 /* path name is stored in fragment rather than path */
 } CamelStoreSummaryFlags;
 
-typedef enum _CamelStoreSummaryLock {
+typedef enum {
        CSS_SUMMARY_LOCK,
        CSS_IO_LOCK,
        CSS_REF_LOCK
@@ -136,7 +149,7 @@ struct _CamelStoreSummaryClass {
        void (*store_info_set_string)(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 };
 
-CamelType                       camel_store_summary_get_type   (void);
+GType                   camel_store_summary_get_type   (void);
 CamelStoreSummary      *camel_store_summary_new        (void);
 
 void camel_store_summary_set_filename(CamelStoreSummary *summary, const gchar *filename);
index 31eeee1..6b3dfb5 100644 (file)
 #define d(x)
 #define w(x)
 
+#define CAMEL_STORE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STORE, CamelStorePrivate))
+
 struct _CamelStorePrivate {
        GStaticRecMutex folder_lock;    /* for locking folder operations */
 };
 
-static gpointer camel_store_parent_class;
+G_DEFINE_ABSTRACT_TYPE (CamelStore, camel_store, CAMEL_TYPE_SERVICE)
 
 /**
  * ignore_no_such_table_exception:
@@ -74,7 +78,7 @@ store_get_special (CamelStore *store,
        for (i=0;i<folders->len;i++) {
                if (!CAMEL_IS_VTRASH_FOLDER(folders->pdata[i]))
                        camel_vee_folder_add_folder((CamelVeeFolder *)folder, (CamelFolder *)folders->pdata[i]);
-               camel_object_unref (folders->pdata[i]);
+               g_object_unref (folders->pdata[i]);
        }
        g_ptr_array_free(folders, TRUE);
 
@@ -82,8 +86,10 @@ store_get_special (CamelStore *store,
 }
 
 static void
-store_finalize (CamelStore *store)
+store_finalize (GObject *object)
 {
+       CamelStore *store = CAMEL_STORE (object);
+
        if (store->folders != NULL)
                camel_object_bag_destroy (store->folders);
 
@@ -99,7 +105,26 @@ store_finalize (CamelStore *store)
                store->cdb_w = NULL;
        }
 
-       g_free (store->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_store_parent_class)->finalize (object);
+}
+
+static void
+store_constructed (GObject *object)
+{
+       CamelStore *store;
+       CamelStoreClass *class;
+
+       store = CAMEL_STORE (object);
+       class = CAMEL_STORE_GET_CLASS (store);
+
+       if (class->hash_folder_name != NULL)
+               store->folders = camel_object_bag_new (
+                       class->hash_folder_name,
+                       class->compare_folder_name,
+                       (CamelCopyFunc) g_strdup, g_free);
+       else
+               store->folders = NULL;
 }
 
 static gboolean
@@ -115,7 +140,7 @@ store_construct (CamelService *service,
 
        /* Chain up to parent's construct() method. */
        service_class = CAMEL_SERVICE_CLASS (camel_store_parent_class);
-       if (!service_class->construct(service, session, provider, url, ex))
+       if (!service_class->construct (service, session, provider, url, ex))
                return FALSE;
 
        store_db_path = g_build_filename (service->url->path, CAMEL_DB_FILE, NULL);
@@ -228,7 +253,7 @@ store_sync (CamelStore *store,
                        ignore_no_such_table_exception (&x);
                } else if (CAMEL_IS_VEE_FOLDER(folder))
                        camel_vee_folder_sync_headers(folder, NULL); /* Literally don't care of vfolder exceptions */
-               camel_object_unref (folder);
+               g_object_unref (folder);
        }
        camel_exception_xfer(ex, &x);
 
@@ -255,10 +280,15 @@ store_can_refresh_folder (CamelStore *store,
 static void
 camel_store_class_init (CamelStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelServiceClass *service_class;
 
-       camel_store_parent_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelStorePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = store_finalize;
+       object_class->constructed = store_constructed;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = store_construct;
@@ -284,42 +314,15 @@ camel_store_class_init (CamelStoreClass *class)
 static void
 camel_store_init (CamelStore *store)
 {
-       CamelStoreClass *store_class = CAMEL_STORE_GET_CLASS (store);
-
-       if (store_class->hash_folder_name) {
-               store->folders = camel_object_bag_new (
-                       store_class->hash_folder_name,
-                       store_class->compare_folder_name,
-                       (CamelCopyFunc) g_strdup, g_free);
-       } else
-               store->folders = NULL;
+       store->priv = CAMEL_STORE_GET_PRIVATE (store);
 
        /* set vtrash and vjunk on by default */
        store->flags = CAMEL_STORE_VTRASH | CAMEL_STORE_VJUNK;
        store->mode = CAMEL_STORE_READ | CAMEL_STORE_WRITE;
 
-       store->priv = g_malloc0 (sizeof (*store->priv));
        g_static_rec_mutex_init (&store->priv->folder_lock);
 }
 
-CamelType
-camel_store_get_type (void)
-{
-       static CamelType camel_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_store_type == CAMEL_INVALID_TYPE) {
-               camel_store_type = camel_type_register (CAMEL_SERVICE_TYPE, "CamelStore",
-                                                       sizeof (CamelStore),
-                                                       sizeof (CamelStoreClass),
-                                                       (CamelObjectClassInitFunc) camel_store_class_init,
-                                                       NULL,
-                                                       (CamelObjectInitFunc) camel_store_init,
-                                                       (CamelObjectFinalizeFunc) store_finalize );
-       }
-
-       return camel_store_type;
-}
-
 /**
  * camel_store_get_folder:
  * @store: a #CamelStore object
@@ -358,7 +361,7 @@ camel_store_get_folder (CamelStore *store,
                                _("Cannot create folder '%s': folder exists"),
                                folder_name);
                         camel_object_bag_abort (store->folders, folder_name);
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                        return NULL;
                }
        }
@@ -391,13 +394,13 @@ camel_store_get_folder (CamelStore *store,
                                if ((store->flags & CAMEL_STORE_VTRASH)
                                    && (vfolder = camel_object_bag_get(store->folders, CAMEL_VTRASH_NAME))) {
                                        camel_vee_folder_add_folder(vfolder, folder);
-                                       camel_object_unref (vfolder);
+                                       g_object_unref (vfolder);
                                }
 
                                if ((store->flags & CAMEL_STORE_VJUNK)
                                    && (vfolder = camel_object_bag_get(store->folders, CAMEL_VJUNK_NAME))) {
                                        camel_vee_folder_add_folder(vfolder, folder);
-                                       camel_object_unref (vfolder);
+                                       g_object_unref (vfolder);
                                }
                        }
                }
@@ -474,19 +477,19 @@ cs_delete_cached_folder(CamelStore *store, const gchar *folder_name)
                if ((store->flags & CAMEL_STORE_VTRASH)
                    && (vfolder = camel_object_bag_get(store->folders, CAMEL_VTRASH_NAME))) {
                        camel_vee_folder_remove_folder(vfolder, folder);
-                       camel_object_unref (vfolder);
+                       g_object_unref (vfolder);
                }
 
                if ((store->flags & CAMEL_STORE_VJUNK)
                    && (vfolder = camel_object_bag_get(store->folders, CAMEL_VJUNK_NAME))) {
                        camel_vee_folder_remove_folder(vfolder, folder);
-                       camel_object_unref (vfolder);
+                       g_object_unref (vfolder);
                }
 
                camel_folder_delete(folder);
 
                camel_object_bag_remove(store->folders, folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        }
 }
 
@@ -529,7 +532,7 @@ camel_store_delete_folder (CamelStore *store,
 
        camel_store_lock (store, CS_FOLDER_LOCK);
 
-       success = class->delete_folder(store, folder_name, &local);
+       success = class->delete_folder (store, folder_name, &local);
 
        /* ignore 'no such table' errors */
        if (camel_exception_is_set (&local) && camel_exception_get_description (&local) &&
@@ -612,7 +615,7 @@ camel_store_rename_folder (CamelStore *store,
                        } else {
                                g_ptr_array_remove_index_fast(folders, i);
                                i--;
-                               camel_object_unref (folder);
+                               g_object_unref (folder);
                        }
                }
        }
@@ -637,7 +640,7 @@ camel_store_rename_folder (CamelStore *store,
                                g_free(new);
 
                                camel_folder_unlock (folder, CF_REC_LOCK);
-                               camel_object_unref (folder);
+                               g_object_unref (folder);
                        }
 
                        /* Emit renamed signal */
@@ -655,7 +658,7 @@ camel_store_rename_folder (CamelStore *store,
                        for (i=0;i<folders->len;i++) {
                                folder = folders->pdata[i];
                                camel_folder_unlock (folder, CF_REC_LOCK);
-                               camel_object_unref (folder);
+                               g_object_unref (folder);
                        }
                }
        }
@@ -689,7 +692,9 @@ camel_store_get_inbox (CamelStore *store,
        g_return_val_if_fail (class->get_inbox != NULL, NULL);
 
        camel_store_lock (store, CS_FOLDER_LOCK);
+
        folder = class->get_inbox (store, ex);
+
        camel_store_unlock (store, CS_FOLDER_LOCK);
 
        return folder;
@@ -1224,7 +1229,9 @@ camel_store_folder_subscribed (CamelStore *store,
        g_return_val_if_fail (class->folder_subscribed != NULL, FALSE);
 
        camel_store_lock (store, CS_FOLDER_LOCK);
+
        ret = class->folder_subscribed (store, folder_name);
+
        camel_store_unlock (store, CS_FOLDER_LOCK);
 
        return ret;
@@ -1256,7 +1263,9 @@ camel_store_subscribe_folder (CamelStore *store,
        g_return_val_if_fail (class->subscribe_folder != NULL, FALSE);
 
        camel_store_lock (store, CS_FOLDER_LOCK);
+
        success = class->subscribe_folder (store, folder_name, ex);
+
        camel_store_unlock (store, CS_FOLDER_LOCK);
 
        return success;
@@ -1422,21 +1431,20 @@ camel_store_can_refresh_folder (CamelStore *store,
  *
  * Locks #store's #lock. Unlock it with camel_store_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_store_lock (CamelStore *store, CamelStoreLock lock)
+camel_store_lock (CamelStore *store,
+                  CamelStoreLock lock)
 {
-       g_return_if_fail (store != NULL);
        g_return_if_fail (CAMEL_IS_STORE (store));
-       g_return_if_fail (store->priv != NULL);
 
        switch (lock) {
-       case CS_FOLDER_LOCK:
-               g_static_rec_mutex_lock (&store->priv->folder_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_FOLDER_LOCK:
+                       g_static_rec_mutex_lock (&store->priv->folder_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -1447,20 +1455,19 @@ camel_store_lock (CamelStore *store, CamelStoreLock lock)
  *
  * Unlocks #store's #lock, previously locked with camel_store_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_store_unlock (CamelStore *store, CamelStoreLock lock)
+camel_store_unlock (CamelStore *store,
+                    CamelStoreLock lock)
 {
-       g_return_if_fail (store != NULL);
        g_return_if_fail (CAMEL_IS_STORE (store));
-       g_return_if_fail (store->priv != NULL);
 
        switch (lock) {
-       case CS_FOLDER_LOCK:
-               g_static_rec_mutex_unlock (&store->priv->folder_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CS_FOLDER_LOCK:
+                       g_static_rec_mutex_unlock (&store->priv->folder_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 94758a2..14bc6e3 100644 (file)
 #include <camel/camel-folder.h>
 #include <camel/camel-service.h>
 
-#define CAMEL_STORE_TYPE     (camel_store_get_type ())
-#define CAMEL_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STORE_TYPE, CamelStore))
-#define CAMEL_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STORE_TYPE, CamelStoreClass))
-#define CAMEL_IS_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STORE \
+       (camel_store_get_type ())
+#define CAMEL_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STORE, CamelStore))
+#define CAMEL_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STORE, CamelStoreClass))
+#define CAMEL_IS_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STORE))
+#define CAMEL_IS_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STORE))
 #define CAMEL_STORE_GET_CLASS(obj) \
-       ((CamelStoreClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STORE, CamelStoreClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +62,7 @@ enum {
        CAMEL_STORE_ARG_FIRST = CAMEL_SERVICE_ARG_FIRST + 100
 };
 
-typedef enum _CamelStoreLock {
+typedef enum {
        CS_FOLDER_LOCK
 } CamelStoreLock;
 
@@ -235,7 +247,7 @@ struct _CamelStoreClass {
                                                 CamelException *ex);
 };
 
-CamelType      camel_store_get_type            (void);
+GType          camel_store_get_type            (void);
 CamelFolder *  camel_store_get_folder          (CamelStore *store,
                                                 const gchar *folder_name,
                                                 guint32 flags,
@@ -303,9 +315,10 @@ gint               camel_store_folder_uri_equal    (CamelStore *store,
 gboolean       camel_store_can_refresh_folder  (CamelStore *store,
                                                 CamelFolderInfo *info,
                                                 CamelException *ex);
-
-void           camel_store_lock                (CamelStore *store, CamelStoreLock lock);
-void           camel_store_unlock              (CamelStore *store, CamelStoreLock lock);
+void           camel_store_lock                (CamelStore *store,
+                                                CamelStoreLock lock);
+void           camel_store_unlock              (CamelStore *store,
+                                                CamelStoreLock lock);
 
 G_END_DECLS
 
index b68de66..0357bd4 100644 (file)
@@ -33,7 +33,9 @@
 
 #include "camel-stream-buffer.h"
 
-static CamelStreamClass *parent_class = NULL;
+#define CAMEL_STREAM_BUFFER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STREAM_BUFFER, CamelStreamBufferPrivate))
 
 struct _CamelStreamBufferPrivate {
 
@@ -49,6 +51,8 @@ struct _CamelStreamBufferPrivate {
        guint flags;
 };
 
+G_DEFINE_TYPE (CamelStreamBuffer, camel_stream_buffer, CAMEL_TYPE_STREAM)
+
 enum {
        BUF_USER = 1<<0 /* user-supplied buffer, do not free */
 };
@@ -82,7 +86,7 @@ set_vbuf (CamelStreamBuffer *stream,
 {
        CamelStreamBufferPrivate *priv;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        if (priv->buf && !(priv->flags & BUF_USER))
                g_free (priv->buf);
@@ -102,19 +106,35 @@ set_vbuf (CamelStreamBuffer *stream,
 }
 
 static void
-stream_buffer_finalize (CamelStreamBuffer *stream_buffer)
+stream_buffer_dispose (GObject *object)
 {
-       CamelStreamBufferPrivate *priv = stream_buffer->priv;
+       CamelStreamBufferPrivate *priv;
+
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (object);
+
+       if (priv->stream != NULL) {
+               g_object_unref (priv->stream);
+               priv->stream = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_stream_buffer_parent_class)->dispose (object);
+}
+
+static void
+stream_buffer_finalize (GObject *object)
+{
+       CamelStreamBufferPrivate *priv;
+
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (object);
 
        if (!(priv->flags & BUF_USER))
                g_free (priv->buf);
 
-       if (priv->stream)
-               camel_object_unref (priv->stream);
-
        g_free (priv->linebuf);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_stream_buffer_parent_class)->finalize (object);
 }
 
 static gssize
@@ -127,7 +147,7 @@ stream_buffer_read (CamelStream *stream,
        gssize bytes_left;
        gchar *bptr = buffer;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        g_return_val_if_fail (
                (priv->mode & CAMEL_STREAM_BUFFER_MODE) ==
@@ -184,7 +204,7 @@ stream_buffer_write (CamelStream *stream,
        gssize total = n;
        gssize left, todo;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        g_return_val_if_fail (
                (priv->mode & CAMEL_STREAM_BUFFER_MODE) ==
@@ -229,7 +249,7 @@ stream_buffer_flush (CamelStream *stream)
 {
        CamelStreamBufferPrivate *priv;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        if ((priv->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_WRITE) {
                gsize len = priv->ptr - priv->buf;
@@ -251,7 +271,7 @@ stream_buffer_close (CamelStream *stream)
 {
        CamelStreamBufferPrivate *priv;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        if (stream_buffer_flush (stream) == -1)
                return -1;
@@ -264,7 +284,7 @@ stream_buffer_eos (CamelStream *stream)
 {
        CamelStreamBufferPrivate *priv;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        return camel_stream_eos(priv->stream) && priv->ptr == priv->end;
 }
@@ -278,14 +298,14 @@ stream_buffer_init_vbuf (CamelStreamBuffer *stream,
 {
        CamelStreamBufferPrivate *priv;
 
-       priv = CAMEL_STREAM_BUFFER (stream)->priv;
+       priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        set_vbuf (stream, buf, mode, size);
 
-       if (priv->stream)
-               camel_object_unref (priv->stream);
+       if (priv->stream != NULL)
+               g_object_unref (priv->stream);
 
-       priv->stream = camel_object_ref (other_stream);
+       priv->stream = g_object_ref (other_stream);
 }
 
 static void
@@ -299,9 +319,14 @@ stream_buffer_init_method (CamelStreamBuffer *stream,
 static void
 camel_stream_buffer_class_init (CamelStreamBufferClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelStreamBufferPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = stream_buffer_dispose;
+       object_class->finalize = stream_buffer_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_buffer_read;
@@ -317,7 +342,7 @@ camel_stream_buffer_class_init (CamelStreamBufferClass *class)
 static void
 camel_stream_buffer_init (CamelStreamBuffer *stream)
 {
-       stream->priv = g_new0 (CamelStreamBufferPrivate, 1);
+       stream->priv = CAMEL_STREAM_BUFFER_GET_PRIVATE (stream);
 
        stream->priv->flags = 0;
        stream->priv->size = BUF_SIZE;
@@ -332,24 +357,6 @@ camel_stream_buffer_init (CamelStreamBuffer *stream)
        stream->priv->linebuf = g_malloc (stream->priv->linesize);
 }
 
-CamelType
-camel_stream_buffer_get_type (void)
-{
-       static CamelType camel_stream_buffer_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_buffer_type == CAMEL_INVALID_TYPE)     {
-               camel_stream_buffer_type = camel_type_register (camel_stream_get_type (), "CamelStreamBuffer",
-                                                               sizeof (CamelStreamBuffer),
-                                                               sizeof (CamelStreamBufferClass),
-                                                               (CamelObjectClassInitFunc) camel_stream_buffer_class_init,
-                                                               NULL,
-                                                               (CamelObjectInitFunc) camel_stream_buffer_init,
-                                                               (CamelObjectFinalizeFunc) stream_buffer_finalize);
-       }
-
-       return camel_stream_buffer_type;
-}
-
 /**
  * camel_stream_buffer_new:
  * @stream: a #CamelStream object to buffer
@@ -373,7 +380,7 @@ camel_stream_buffer_new (CamelStream *stream,
 
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), NULL);
 
-       sbf = CAMEL_STREAM_BUFFER (camel_object_new (camel_stream_buffer_get_type ()));
+       sbf = g_object_new (CAMEL_TYPE_STREAM_BUFFER, NULL);
 
        class = CAMEL_STREAM_BUFFER_GET_CLASS (sbf);
        g_return_val_if_fail (class->init != NULL, NULL);
@@ -430,7 +437,7 @@ camel_stream_buffer_new_with_vbuf (CamelStream *stream,
        g_return_val_if_fail (CAMEL_IS_STREAM (stream), NULL);
        g_return_val_if_fail (buf != NULL, NULL);
 
-       sbf = CAMEL_STREAM_BUFFER (camel_object_new (camel_stream_buffer_get_type ()));
+       sbf = g_object_new (CAMEL_TYPE_STREAM_BUFFER, NULL);
 
        class = CAMEL_STREAM_BUFFER_GET_CLASS (sbf);
        g_return_val_if_fail (class->init_vbuf != NULL, NULL);
index d2cd638..ad591a9 100644 (file)
 #include <stdio.h>
 #include <camel/camel-seekable-stream.h>
 
-#define CAMEL_STREAM_BUFFER_TYPE     (camel_stream_buffer_get_type ())
-#define CAMEL_STREAM_BUFFER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBuffer))
-#define CAMEL_STREAM_BUFFER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBufferClass))
-#define CAMEL_IS_STREAM_BUFFER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_BUFFER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_BUFFER \
+       (camel_stream_buffer_get_type ())
+#define CAMEL_STREAM_BUFFER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_BUFFER, CamelStreamBuffer))
+#define CAMEL_STREAM_BUFFER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_BUFFER, CamelStreamBufferClass))
+#define CAMEL_IS_STREAM_BUFFER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_BUFFER))
+#define CAMEL_IS_STREAM_BUFFER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_BUFFER))
 #define CAMEL_STREAM_BUFFER_GET_CLASS(obj) \
-       ((CamelStreamBufferClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_BUFFER, CamelStreamBufferClass))
 
 G_BEGIN_DECLS
 
@@ -72,7 +84,7 @@ struct _CamelStreamBufferClass {
                                         guint32 size);
 };
 
-CamelType      camel_stream_buffer_get_type    (void);
+GType          camel_stream_buffer_get_type    (void);
 CamelStream *  camel_stream_buffer_new         (CamelStream *stream,
                                                 CamelStreamBufferMode mode);
 CamelStream *  camel_stream_buffer_new_with_vbuf
index 2ea2d7c..c781240 100644 (file)
 /*extern void g_check(gpointer mp);*/
 #define g_check(x)
 
+#define CAMEL_STREAM_FILTER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STREAM_FILTER, CamelStreamFilterPrivate))
+
 struct _filter {
        struct _filter *next;
        gint id;
@@ -60,24 +64,27 @@ struct _CamelStreamFilterPrivate {
 #define READ_PAD (128)         /* bytes padded before buffer */
 #define READ_SIZE (4096)
 
-static CamelStreamClass *camel_stream_filter_parent;
+G_DEFINE_TYPE (CamelStreamFilter, camel_stream_filter, CAMEL_TYPE_STREAM)
 
 static void
-stream_filter_finalize (CamelStreamFilter *filter)
+stream_filter_finalize (GObject *object)
 {
+       CamelStreamFilter *stream = CAMEL_STREAM_FILTER (object);
        struct _filter *fn, *f;
 
-       f = filter->priv->filters;
+       f = stream->priv->filters;
        while (f) {
                fn = f->next;
-               camel_object_unref (f->filter);
+               g_object_unref (f->filter);
                g_free (f);
                f = fn;
        }
-       g_free (filter->priv->realbuffer);
-       camel_object_unref (filter->priv->source);
 
-       g_free (filter->priv);
+       g_free (stream->priv->realbuffer);
+       g_object_unref (stream->priv->source);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_stream_filter_parent_class)->finalize (object);
 }
 
 static gssize
@@ -89,7 +96,7 @@ stream_filter_read (CamelStream *stream,
        gssize size;
        struct _filter *f;
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        priv->last_was_read = TRUE;
 
@@ -165,7 +172,7 @@ stream_filter_write (CamelStream *stream,
        gsize presize, len, left = n;
        gchar *buffer, realbuffer[READ_SIZE+READ_PAD];
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        priv->last_was_read = FALSE;
 
@@ -215,7 +222,7 @@ stream_filter_flush (CamelStream *stream)
        gsize presize;
        gsize len;
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        if (priv->last_was_read)
                return 0;
@@ -250,7 +257,7 @@ stream_filter_close (CamelStream *stream)
 {
        CamelStreamFilterPrivate *priv;
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        if (!priv->last_was_read)
                stream_filter_flush (stream);
@@ -263,7 +270,7 @@ stream_filter_eos (CamelStream *stream)
 {
        CamelStreamFilterPrivate *priv;
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        if (priv->filteredlen > 0)
                return FALSE;
@@ -280,7 +287,7 @@ stream_filter_reset (CamelStream *stream)
        CamelStreamFilterPrivate *priv;
        struct _filter *f;
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        priv->filteredlen = 0;
        priv->flushed = FALSE;
@@ -298,9 +305,13 @@ stream_filter_reset (CamelStream *stream)
 static void
 camel_stream_filter_class_init (CamelStreamFilterClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       camel_stream_filter_parent = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelStreamFilterPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = stream_filter_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_filter_read;
@@ -314,31 +325,14 @@ camel_stream_filter_class_init (CamelStreamFilterClass *class)
 static void
 camel_stream_filter_init (CamelStreamFilter *stream)
 {
-       stream->priv = g_new0 (CamelStreamFilterPrivate, 1);
+       stream->priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
+
        stream->priv->realbuffer = g_malloc(READ_SIZE + READ_PAD);
        stream->priv->buffer = stream->priv->realbuffer + READ_PAD;
        stream->priv->last_was_read = TRUE;
        stream->priv->flushed = FALSE;
 }
 
-CamelType
-camel_stream_filter_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_STREAM_TYPE, "CamelStreamFilter",
-                                           sizeof (CamelStreamFilter),
-                                           sizeof (CamelStreamFilterClass),
-                                           (CamelObjectClassInitFunc) camel_stream_filter_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_stream_filter_init,
-                                           (CamelObjectFinalizeFunc) stream_filter_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_stream_filter_new:
  *
@@ -354,10 +348,10 @@ camel_stream_filter_new (CamelStream *source)
 
        g_return_val_if_fail (CAMEL_IS_STREAM (source), NULL);
 
-       stream = CAMEL_STREAM (camel_object_new (camel_stream_filter_get_type ()));
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       stream = g_object_new (CAMEL_TYPE_STREAM_FILTER, NULL);
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
-       priv->source = camel_object_ref (source);
+       priv->source = g_object_ref (source);
 
        return stream;
 }
@@ -393,11 +387,11 @@ camel_stream_filter_add (CamelStreamFilter *stream,
        g_return_val_if_fail (CAMEL_IS_STREAM_FILTER (stream), -1);
        g_return_val_if_fail (CAMEL_IS_MIME_FILTER (filter), -1);
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        fn = g_malloc(sizeof(*fn));
        fn->id = priv->filterid++;
-       fn->filter = camel_object_ref (filter);
+       fn->filter = g_object_ref (filter);
 
        /* sure, we could use a GList, but we wouldn't save much */
        f = (struct _filter *)&priv->filters;
@@ -424,14 +418,14 @@ camel_stream_filter_remove (CamelStreamFilter *stream,
 
        g_return_if_fail (CAMEL_IS_STREAM_FILTER (stream));
 
-       priv = CAMEL_STREAM_FILTER (stream)->priv;
+       priv = CAMEL_STREAM_FILTER_GET_PRIVATE (stream);
 
        f = (struct _filter *)&priv->filters;
        while (f && f->next) {
                fn = f->next;
                if (fn->id == id) {
                        f->next = fn->next;
-                       camel_object_unref (fn->filter);
+                       g_object_unref (fn->filter);
                        g_free(fn);
                }
                f = f->next;
index 18fef88..76ce880 100644 (file)
 #include <camel/camel-stream.h>
 #include <camel/camel-mime-filter.h>
 
-#define CAMEL_STREAM_FILTER(obj)         CAMEL_CHECK_CAST (obj, camel_stream_filter_get_type (), CamelStreamFilter)
-#define CAMEL_STREAM_FILTER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_stream_filter_get_type (), CamelStreamFilterClass)
-#define CAMEL_IS_STREAM_FILTER(obj)      CAMEL_CHECK_TYPE (obj, camel_stream_filter_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_FILTER \
+       (camel_stream_filter_get_type ())
+#define CAMEL_STREAM_FILTER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_FILTER, CamelStreamFilter))
+#define CAMEL_STREAM_FILTER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_FILTER, CamelStreamFilterClass))
+#define CAMEL_IS_STREAM_FILTER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_FILTER))
+#define CAMEL_IS_STREAM_FILTER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_FILTER))
+#define CAMEL_STREAM_FILTER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_FILTER, CamelStreamFilterClass))
 
 G_BEGIN_DECLS
 
@@ -48,8 +63,8 @@ struct _CamelStreamFilterClass {
        CamelStreamClass parent_class;
 };
 
-CamelType      camel_stream_filter_get_type    (void);
-CamelStream *  camel_stream_filter_new         (CamelStream *stream);
+GType          camel_stream_filter_get_type    (void);
+CamelStream *  camel_stream_filter_new         (CamelStream *source);
 CamelStream *  camel_stream_filter_get_source  (CamelStreamFilter *stream);
 gint           camel_stream_filter_add         (CamelStreamFilter *stream,
                                                 CamelMimeFilter *filter);
index 4502212..9920374 100644 (file)
 #include "camel-stream-fs.h"
 #include "camel-win32.h"
 
+#define CAMEL_STREAM_FS_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STREAM_FS, CamelStreamFsPrivate))
+
 struct _CamelStreamFsPrivate {
        gint fd;        /* file descriptor on the underlying file */
 };
 
-static CamelSeekableStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelStreamFs, camel_stream_fs, CAMEL_TYPE_SEEKABLE_STREAM)
 
 static void
-camel_stream_fs_finalize (CamelStreamFs *stream_fs)
+stream_fs_finalize (GObject *object)
 {
-       CamelStreamFsPrivate *priv = stream_fs->priv;
+       CamelStreamFsPrivate *priv;
+
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (object);
 
        if (priv->fd != -1)
                close (priv->fd);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_stream_fs_parent_class)->finalize (object);
 }
 
 static gssize
@@ -65,7 +72,7 @@ stream_fs_read (CamelStream *stream,
        CamelSeekableStream *seekable;
        gssize nread;
 
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
        seekable = CAMEL_SEEKABLE_STREAM (stream);
 
        if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
@@ -88,7 +95,7 @@ stream_fs_write (CamelStream *stream,
        CamelSeekableStream *seekable;
        gssize nwritten;
 
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
        seekable = CAMEL_SEEKABLE_STREAM (stream);
 
        if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
@@ -105,7 +112,7 @@ stream_fs_flush (CamelStream *stream)
 {
        CamelStreamFsPrivate *priv;
 
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
 
        return fsync (priv->fd);
 }
@@ -115,7 +122,7 @@ stream_fs_close (CamelStream *stream)
 {
        CamelStreamFsPrivate *priv;
 
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
 
        if (close (priv->fd) == -1)
                return -1;
@@ -133,7 +140,7 @@ stream_fs_seek (CamelSeekableStream *stream,
        CamelStreamFsPrivate *priv;
        off_t real = 0;
 
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
 
        switch (policy) {
        case CAMEL_STREAM_SET:
@@ -175,10 +182,14 @@ stream_fs_seek (CamelSeekableStream *stream,
 static void
 camel_stream_fs_class_init (CamelStreamFsClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
        CamelSeekableStreamClass *seekable_stream_class;
 
-       parent_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_type_get_global_classfuncs (camel_seekable_stream_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelStreamFsPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = stream_fs_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_fs_read;
@@ -193,30 +204,12 @@ camel_stream_fs_class_init (CamelStreamFsClass *class)
 static void
 camel_stream_fs_init (CamelStreamFs *stream)
 {
-       stream->priv = g_new0 (CamelStreamFsPrivate, 1);
+       stream->priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
        stream->priv->fd = -1;
 
        CAMEL_SEEKABLE_STREAM (stream)->bound_end = CAMEL_STREAM_UNBOUND;
 }
 
-CamelType
-camel_stream_fs_get_type (void)
-{
-       static CamelType camel_stream_fs_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_fs_type == CAMEL_INVALID_TYPE) {
-               camel_stream_fs_type = camel_type_register (camel_seekable_stream_get_type (), "CamelStreamFs",
-                                                           sizeof (CamelStreamFs),
-                                                           sizeof (CamelStreamFsClass),
-                                                           (CamelObjectClassInitFunc) camel_stream_fs_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_stream_fs_init,
-                                                           (CamelObjectFinalizeFunc) camel_stream_fs_finalize);
-       }
-
-       return camel_stream_fs_type;
-}
-
 /**
  * camel_stream_fs_new_with_fd:
  * @fd: a file descriptor
@@ -237,8 +230,8 @@ camel_stream_fs_new_with_fd (gint fd)
        if (fd == -1)
                return NULL;
 
-       stream = CAMEL_STREAM (camel_object_new (camel_stream_fs_get_type ()));
-       priv = CAMEL_STREAM_FS (stream)->priv;
+       stream = g_object_new (CAMEL_TYPE_STREAM_FS, NULL);
+       priv = CAMEL_STREAM_FS_GET_PRIVATE (stream);
 
        priv->fd = fd;
        offset = lseek (fd, 0, SEEK_CUR);
index 885da92..d8a7dda 100644 (file)
 
 #include <camel/camel-seekable-stream.h>
 
-#define CAMEL_STREAM_FS_TYPE     (camel_stream_fs_get_type ())
-#define CAMEL_STREAM_FS(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_FS_TYPE, CamelStreamFs))
-#define CAMEL_STREAM_FS_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_FS_TYPE, CamelStreamFsClass))
-#define CAMEL_IS_STREAM_FS(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_FS_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_FS \
+       (camel_stream_fs_get_type ())
+#define CAMEL_STREAM_FS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_FS, CamelStreamFs))
+#define CAMEL_STREAM_FS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_FS, CamelStreamFsClass))
+#define CAMEL_IS_STREAM_FS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_FS))
+#define CAMEL_IS_STREAM_FS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_FS))
+#define CAMEL_STREAM_FS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_FS, CamelStreamFsClass))
 
 G_BEGIN_DECLS
 
@@ -56,7 +70,7 @@ struct _CamelStreamFsClass {
        CamelSeekableStreamClass parent_class;
 };
 
-CamelType      camel_stream_fs_get_type        (void);
+GType          camel_stream_fs_get_type        (void);
 CamelStream *  camel_stream_fs_new_with_name   (const gchar *name,
                                                 gint flags,
                                                 mode_t mode);
index 3209f26..59a036f 100644 (file)
@@ -34,7 +34,9 @@
 
 #include "camel-stream-mem.h"
 
-static CamelSeekableStreamClass *parent_class = NULL;
+#define CAMEL_STREAM_MEM_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_STREAM_MEM, CamelStreamMemPrivate))
 
 struct _CamelStreamMemPrivate {
        guint owner  : 1;       /* do we own the buffer? */
@@ -44,6 +46,8 @@ struct _CamelStreamMemPrivate {
        GByteArray *buffer;
 };
 
+G_DEFINE_TYPE (CamelStreamMem, camel_stream_mem, CAMEL_TYPE_SEEKABLE_STREAM)
+
 /* could probably be a util method */
 static void
 clear_mem (gpointer p, gsize len)
@@ -63,9 +67,11 @@ clear_mem (gpointer p, gsize len)
 }
 
 static void
-camel_stream_mem_finalize (CamelStreamMem *stream)
+stream_mem_finalize (GObject *object)
 {
-       CamelStreamMemPrivate *priv = stream->priv;
+       CamelStreamMemPrivate *priv;
+
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (object);
 
        if (priv->buffer && priv->owner) {
                /* TODO: we need our own bytearray type since we don't know
@@ -75,7 +81,8 @@ camel_stream_mem_finalize (CamelStreamMem *stream)
                g_byte_array_free (priv->buffer, TRUE);
        }
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_stream_mem_parent_class)->finalize (object);
 }
 
 static gssize
@@ -87,7 +94,7 @@ stream_mem_read (CamelStream *stream,
        CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
        gssize nread;
 
-       priv = CAMEL_STREAM_MEM (stream)->priv;
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 
        if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
                n = MIN(seekable->bound_end - seekable->position, n);
@@ -111,7 +118,7 @@ stream_mem_write (CamelStream *stream,
        CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
        gssize nwrite = n;
 
-       priv = CAMEL_STREAM_MEM (stream)->priv;
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 
        if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
                nwrite = MIN(seekable->bound_end - seekable->position, n);
@@ -134,7 +141,7 @@ stream_mem_eos (CamelStream *stream)
        CamelStreamMemPrivate *priv;
        CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
 
-       priv = CAMEL_STREAM_MEM (stream)->priv;
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 
        return priv->buffer->len <= seekable_stream->position;
 }
@@ -147,7 +154,7 @@ stream_mem_seek (CamelSeekableStream *stream,
        CamelStreamMemPrivate *priv;
        off_t position;
 
-       priv = CAMEL_STREAM_MEM (stream)->priv;
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 
        switch  (policy) {
        case CAMEL_STREAM_SET:
@@ -186,10 +193,14 @@ stream_mem_seek (CamelSeekableStream *stream,
 static void
 camel_stream_mem_class_init (CamelStreamMemClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
        CamelSeekableStreamClass *seekable_stream_class;
 
-       parent_class = CAMEL_SEEKABLE_STREAM_CLASS( camel_type_get_global_classfuncs( CAMEL_SEEKABLE_STREAM_TYPE ) );
+       g_type_class_add_private (class, sizeof (CamelStreamMemPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = stream_mem_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_mem_read;
@@ -203,26 +214,7 @@ camel_stream_mem_class_init (CamelStreamMemClass *class)
 static void
 camel_stream_mem_init (CamelStreamMem *stream)
 {
-       stream->priv = g_new0 (CamelStreamMemPrivate, 1);
-}
-
-CamelType
-camel_stream_mem_get_type (void)
-{
-       static CamelType camel_stream_mem_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_mem_type == CAMEL_INVALID_TYPE) {
-               camel_stream_mem_type = camel_type_register( CAMEL_SEEKABLE_STREAM_TYPE,
-                                                            "CamelStreamMem",
-                                                            sizeof( CamelStreamMem ),
-                                                            sizeof( CamelStreamMemClass ),
-                                                            (CamelObjectClassInitFunc) camel_stream_mem_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_stream_mem_init,
-                                                            (CamelObjectFinalizeFunc) camel_stream_mem_finalize );
-       }
-
-       return camel_stream_mem_type;
+       stream->priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 }
 
 /**
@@ -284,8 +276,8 @@ camel_stream_mem_new_with_byte_array (GByteArray *buffer)
 
        g_return_val_if_fail (buffer != NULL, NULL);
 
-       stream = CAMEL_STREAM (camel_object_new (CAMEL_STREAM_MEM_TYPE));
-       priv = CAMEL_STREAM_MEM (stream)->priv;
+       stream = g_object_new (CAMEL_TYPE_STREAM_MEM, NULL);
+       priv = CAMEL_STREAM_MEM_GET_PRIVATE (stream);
 
        priv->buffer = buffer;
        priv->owner = TRUE;
index ffd2bd2..77a01c6 100644 (file)
 #include <sys/types.h>
 #include <camel/camel-seekable-stream.h>
 
-#define CAMEL_STREAM_MEM_TYPE     (camel_stream_mem_get_type ())
-#define CAMEL_STREAM_MEM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_MEM_TYPE, CamelStreamMem))
-#define CAMEL_STREAM_MEM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_MEM_TYPE, CamelStreamMemClass))
-#define CAMEL_IS_STREAM_MEM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_MEM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_MEM \
+       (camel_stream_mem_get_type ())
+#define CAMEL_STREAM_MEM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_MEM, CamelStreamMem))
+#define CAMEL_STREAM_MEM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_MEM, CamelStreamMemClass))
+#define CAMEL_IS_STREAM_MEM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_MEM))
+#define CAMEL_IS_STREAM_MEM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_MEM))
+#define CAMEL_STREAM_MEM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_MEM, CamelStreamMemClass))
 
 G_BEGIN_DECLS
 
@@ -52,7 +66,7 @@ struct _CamelStreamMemClass {
        CamelSeekableStreamClass parent_class;
 };
 
-CamelType      camel_stream_mem_get_type       (void);
+GType          camel_stream_mem_get_type       (void);
 CamelStream *  camel_stream_mem_new            (void);
 CamelStream *  camel_stream_mem_new_with_byte_array
                                                (GByteArray *buffer);
index 1731a34..8c3bcb3 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "camel-stream-null.h"
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelStreamNull, camel_stream_null, CAMEL_TYPE_STREAM)
 
 static gssize
 stream_null_write (CamelStream *stream,
@@ -59,8 +59,6 @@ camel_stream_null_class_init (CamelStreamNullClass *class)
 {
        CamelStreamClass *stream_class;
 
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
-
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->write = stream_null_write;
        stream_class->eos = stream_null_eos;
@@ -72,25 +70,6 @@ camel_stream_null_init (CamelStreamNull *stream_null)
 {
 }
 
-CamelType
-camel_stream_null_get_type (void)
-{
-       static CamelType camel_stream_null_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_null_type == CAMEL_INVALID_TYPE) {
-               camel_stream_null_type = camel_type_register( camel_stream_get_type(),
-                                                             "CamelStreamNull",
-                                                             sizeof( CamelStreamNull ),
-                                                             sizeof( CamelStreamNullClass ),
-                                                             (CamelObjectClassInitFunc) camel_stream_null_class_init,
-                                                             NULL,
-                                                             (CamelObjectInitFunc) camel_stream_null_init,
-                                                             NULL );
-       }
-
-       return camel_stream_null_type;
-}
-
 /**
  * camel_stream_null_new:
  *
@@ -102,5 +81,5 @@ camel_stream_null_get_type (void)
 CamelStream *
 camel_stream_null_new(void)
 {
-       return (CamelStream *)camel_object_new(camel_stream_null_get_type ());
+       return g_object_new (CAMEL_TYPE_STREAM_NULL, NULL);
 }
index 8f80ad0..94e96ab 100644 (file)
 
 #include <camel/camel-stream.h>
 
-#define CAMEL_STREAM_NULL(obj)         CAMEL_CHECK_CAST (obj, camel_stream_null_get_type (), CamelStreamNull)
-#define CAMEL_STREAM_NULL_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_stream_null_get_type (), CamelStreamNullClass)
-#define CAMEL_IS_STREAM_NULL(obj)      CAMEL_CHECK_TYPE (obj, camel_stream_null_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_NULL \
+       (camel_stream_null_get_type ())
+#define CAMEL_STREAM_NULL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_NULL, CamelStreamNull))
+#define CAMEL_STREAM_NULL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_NULL, CamelStreamNullClass))
+#define CAMEL_IS_STREAM_NULL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_NULL))
+#define CAMEL_IS_STREAM_NULL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_NULL))
+#define CAMEL_STREAM_NULL_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_NULL, CamelStreamNullClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +62,7 @@ struct _CamelStreamNullClass {
        CamelStreamClass parent_class;
 };
 
-CamelType camel_stream_null_get_type (void);
+GType camel_stream_null_get_type (void);
 
 CamelStream *camel_stream_null_new (void);
 
index 6fcae95..0a11498 100644 (file)
 
 extern gint camel_verbose_debug;
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelStreamProcess, camel_stream_process, CAMEL_TYPE_STREAM)
 
 static void
-stream_process_finalize (CamelObject *object)
+stream_process_finalize (GObject *object)
 {
        /* Ensure we clean up after ourselves -- kill
           the child process and reap it. */
        camel_stream_close (CAMEL_STREAM (object));
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_stream_process_parent_class)->finalize (object);
 }
 
 static gssize
@@ -132,9 +135,11 @@ stream_process_flush (CamelStream *stream)
 static void
 camel_stream_process_class_init (CamelStreamProcessClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = camel_type_get_global_classfuncs (CAMEL_TYPE_OBJECT);
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = stream_process_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_process_read;
@@ -150,25 +155,6 @@ camel_stream_process_init (CamelStreamProcess *stream)
        stream->childpid = 0;
 }
 
-CamelType
-camel_stream_process_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type =  camel_type_register (camel_stream_get_type (),
-                                            "CamelStreamProcess",
-                                            sizeof (CamelStreamProcess),
-                                            sizeof (CamelStreamProcessClass),
-                                            (CamelObjectClassInitFunc) camel_stream_process_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_stream_process_init,
-                                            (CamelObjectFinalizeFunc) stream_process_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_stream_process_new:
  *
@@ -179,7 +165,7 @@ camel_stream_process_get_type (void)
 CamelStream *
 camel_stream_process_new (void)
 {
-       return (CamelStream *) camel_object_new (camel_stream_process_get_type ());
+       return g_object_new (CAMEL_TYPE_STREAM_PROCESS, NULL);
 }
 
 G_GNUC_NORETURN static void
index c5e8776..047b112 100644 (file)
 
 #include <camel/camel-stream.h>
 
-#define CAMEL_STREAM_PROCESS(obj)         CAMEL_CHECK_CAST (obj, camel_stream_process_get_type (), CamelStreamProcess)
-#define CAMEL_STREAM_PROCESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_stream_process_get_type (), CamelStreamProcessClass)
-#define CAMEL_IS_STREAM_PROCESS(obj)      CAMEL_CHECK_TYPE (obj, camel_stream_process_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_PROCESS \
+       (camel_stream_process_get_type ())
+#define CAMEL_STREAM_PROCESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_PROCESS, CamelStreamProcess))
+#define CAMEL_STREAM_PROCESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_PROCESS, CamelStreamProcessClass))
+#define CAMEL_IS_STREAM_PROCESS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_PROCESS))
+#define CAMEL_IS_STREAM_PROCESS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_PROCESS))
+#define CAMEL_STREAM_PROCESS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_PROCSS, CamelStreamProcessClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +63,7 @@ struct _CamelStreamProcessClass {
        CamelStreamClass parent_class;
 };
 
-CamelType      camel_stream_process_get_type   (void);
+GType          camel_stream_process_get_type   (void);
 CamelStream *  camel_stream_process_new        (void);
 gint           camel_stream_process_connect    (CamelStreamProcess *stream,
                                                 const gchar *command,
index e1de33d..13d6194 100644 (file)
 #include "camel-operation.h"
 #include "camel-stream-vfs.h"
 
-static CamelStreamClass *parent_class = NULL;
-
+G_DEFINE_TYPE (CamelStreamVFS, camel_stream_vfs, CAMEL_TYPE_STREAM)
 
 static void
-stream_vfs_finalize (CamelStreamVFS *stream_vfs)
+stream_vfs_dispose (GObject *object)
 {
-       if (stream_vfs->stream)
-               g_object_unref (stream_vfs->stream);
+       CamelStreamVFS *stream = CAMEL_STREAM_VFS (object);
+
+       if (stream->stream != NULL) {
+               g_object_unref (stream->stream);
+               stream->stream = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_stream_vfs_parent_class)->dispose (object);
 }
 
 static gssize
@@ -138,9 +144,11 @@ stream_vfs_close (CamelStream *stream)
 static void
 camel_stream_vfs_class_init (CamelStreamVFSClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = stream_vfs_dispose;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_vfs_read;
@@ -155,24 +163,6 @@ camel_stream_vfs_init (CamelStreamVFS *stream)
        stream->stream = NULL;
 }
 
-CamelType
-camel_stream_vfs_get_type (void)
-{
-       static CamelType camel_stream_vfs_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_vfs_type == CAMEL_INVALID_TYPE) {
-               camel_stream_vfs_type = camel_type_register (camel_stream_get_type (), "CamelStreamVFS",
-                                                           sizeof (CamelStreamVFS),
-                                                           sizeof (CamelStreamVFSClass),
-                                                           (CamelObjectClassInitFunc) camel_stream_vfs_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_stream_vfs_init,
-                                                           (CamelObjectFinalizeFunc) stream_vfs_finalize);
-       }
-
-       return camel_stream_vfs_type;
-}
-
 /**
  * camel_stream_vfs_new_with_stream:
  * @stream: a GInputStream or GOutputStream instance
@@ -198,7 +188,7 @@ camel_stream_vfs_new_with_stream (GObject *stream)
        g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream) || G_IS_INPUT_STREAM (stream), NULL);
 
        errno = 0;
-       stream_vfs = CAMEL_STREAM_VFS (camel_object_new (camel_stream_vfs_get_type ()));
+       stream_vfs = g_object_new (CAMEL_TYPE_STREAM_VFS, NULL);
        stream_vfs->stream = stream;
 
        return CAMEL_STREAM (stream_vfs);
index 06b9e2a..8231725 100644 (file)
 #ifndef CAMEL_STREAM_VFS_H
 #define CAMEL_STREAM_VFS_H
 
-#include <glib-object.h>
 #include <camel/camel-stream.h>
 
-#define CAMEL_STREAM_VFS_TYPE     (camel_stream_vfs_get_type ())
-#define CAMEL_STREAM_VFS(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_VFS_TYPE, CamelStreamVFS))
-#define CAMEL_STREAM_VFS_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_VFS_TYPE, CamelStreamVFSClass))
-#define CAMEL_IS_STREAM_VFS(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_VFS_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM_VFS \
+       (camel_stream_vfs_get_type ())
+#define CAMEL_STREAM_VFS(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM_VFS, CamelStreamVFS))
+#define CAMEL_STREAM_VFS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM_VFS, CamelStreamVFSClass))
+#define CAMEL_IS_STREAM_VFS(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM_VFS))
+#define CAMEL_IS_STREAM_VFS_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM_VFS))
+#define CAMEL_STREAM_VFS_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM_VFS, CamelStreamVFSClass))
 
 G_BEGIN_DECLS
 
@@ -52,7 +65,7 @@ struct _CamelStreamVFSClass {
        CamelStreamClass parent_class;
 };
 
-CamelType camel_stream_vfs_get_type (void);
+GType camel_stream_vfs_get_type (void);
 
 /**
  * CamelStreamVFSOpenMethod:
index dcf09aa..27f1ee2 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "camel-stream.h"
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_ABSTRACT_TYPE (CamelStream, camel_stream, CAMEL_TYPE_OBJECT)
 
 static gssize
 stream_read (CamelStream *stream,
@@ -75,8 +75,6 @@ stream_reset (CamelStream *stream)
 static void
 camel_stream_class_init (CamelStreamClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
-
        class->read = stream_read;
        class->write = stream_write;
        class->close = stream_close;
@@ -90,25 +88,6 @@ camel_stream_init (CamelStream *stream)
 {
 }
 
-CamelType
-camel_stream_get_type (void)
-{
-       static CamelType camel_stream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_stream_type == CAMEL_INVALID_TYPE) {
-               camel_stream_type = camel_type_register( CAMEL_TYPE_OBJECT,
-                                                        "CamelStream",
-                                                        sizeof( CamelStream ),
-                                                        sizeof( CamelStreamClass ),
-                                                        (CamelObjectClassInitFunc) camel_stream_class_init,
-                                                        NULL,
-                                                        (CamelObjectInitFunc) camel_stream_init,
-                                                        NULL );
-       }
-
-       return camel_stream_type;
-}
-
 /**
  * camel_stream_read:
  * @stream: a #CamelStream object.
@@ -262,7 +241,8 @@ camel_stream_reset (CamelStream *stream)
  * Returns: the number of characters written or %-1 on error.
  **/
 gssize
-camel_stream_write_string (CamelStream *stream, const gchar *string)
+camel_stream_write_string (CamelStream *stream,
+                           const gchar *string)
 {
        return camel_stream_write (stream, string, strlen (string));
 }
@@ -277,7 +257,9 @@ camel_stream_write_string (CamelStream *stream, const gchar *string)
  * Returns: the number of characters written or %-1 on error.
  **/
 gssize
-camel_stream_printf (CamelStream *stream, const gchar *fmt, ... )
+camel_stream_printf (CamelStream *stream,
+                     const gchar *fmt,
+                     ...)
 {
        va_list args;
        gchar *string;
index d150dbe..2867e0c 100644 (file)
 #include <unistd.h>
 #include <camel/camel-object.h>
 
-#define CAMEL_STREAM_TYPE     (camel_stream_get_type ())
-#define CAMEL_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_TYPE, CamelStream))
-#define CAMEL_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_TYPE, CamelStreamClass))
-#define CAMEL_IS_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_STREAM \
+       (camel_stream_get_type ())
+#define CAMEL_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_STREAM, CamelStream))
+#define CAMEL_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_STREAM, CamelStreamClass))
+#define CAMEL_IS_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_STREAM))
+#define CAMEL_IS_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_STREAM))
 #define CAMEL_STREAM_GET_CLASS(obj) \
-       ((CamelStreamClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_STREAM, CamelStreamClass))
 
 G_BEGIN_DECLS
 
@@ -66,7 +78,7 @@ struct _CamelStreamClass {
        gint            (*reset)                (CamelStream *stream);
 };
 
-CamelType      camel_stream_get_type           (void);
+GType          camel_stream_get_type           (void);
 gssize         camel_stream_read               (CamelStream *stream,
                                                 gchar *buffer,
                                                 gsize n);
index a833d74..153d008 100644 (file)
 #undef ETIMEDOUT
 #endif
 #define ETIMEDOUT EAGAIN
-
 #endif
 
-static CamelTcpStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelTcpStreamRaw, camel_tcp_stream_raw, CAMEL_TYPE_TCP_STREAM)
 
 #ifdef SIMULATE_FLAKY_NETWORK
 static gssize
@@ -326,10 +325,15 @@ socket_connect(struct addrinfo *h)
 }
 
 static void
-tcp_stream_raw_finalize (CamelTcpStreamRaw *stream)
+tcp_stream_raw_finalize (GObject *object)
 {
+       CamelTcpStreamRaw *stream = CAMEL_TCP_STREAM_RAW (object);
+
        if (stream->sockfd != -1)
                SOCKET_CLOSE (stream->sockfd);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_tcp_stream_raw_parent_class)->finalize (object);
 }
 
 static gssize
@@ -501,10 +505,12 @@ tcp_stream_raw_get_remote_address (CamelTcpStream *stream,
 static void
 camel_tcp_stream_raw_class_init (CamelTcpStreamRawClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
        CamelTcpStreamClass *tcp_stream_class;
 
-       parent_class = CAMEL_TCP_STREAM_CLASS (camel_type_get_global_classfuncs (camel_tcp_stream_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = tcp_stream_raw_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = tcp_stream_raw_read;
@@ -526,25 +532,6 @@ camel_tcp_stream_raw_init (CamelTcpStreamRaw *stream)
        stream->sockfd = -1;
 }
 
-CamelType
-camel_tcp_stream_raw_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_tcp_stream_get_type (),
-                                           "CamelTcpStreamRaw",
-                                           sizeof (CamelTcpStreamRaw),
-                                           sizeof (CamelTcpStreamRawClass),
-                                           (CamelObjectClassInitFunc) camel_tcp_stream_raw_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_tcp_stream_raw_init,
-                                           (CamelObjectFinalizeFunc) tcp_stream_raw_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_tcp_stream_raw_new:
  *
@@ -555,5 +542,5 @@ camel_tcp_stream_raw_get_type (void)
 CamelStream *
 camel_tcp_stream_raw_new (void)
 {
-       return CAMEL_STREAM (camel_object_new (camel_tcp_stream_raw_get_type ()));
+       return g_object_new (CAMEL_TYPE_TCP_STREAM_RAW, NULL);
 }
index 63b17f1..72b3310 100644 (file)
 
 #include <camel/camel-tcp-stream.h>
 
-#define CAMEL_TCP_STREAM_RAW_TYPE     (camel_tcp_stream_raw_get_type ())
-#define CAMEL_TCP_STREAM_RAW(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TCP_STREAM_RAW_TYPE, CamelTcpStreamRaw))
-#define CAMEL_TCP_STREAM_RAW_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TCP_STREAM_RAW_TYPE, CamelTcpStreamRawClass))
-#define CAMEL_IS_TCP_STREAM_RAW(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TCP_STREAM_RAW_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_TCP_STREAM_RAW \
+       (camel_tcp_stream_raw_get_type ())
+#define CAMEL_TCP_STREAM_RAW(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TCP_STREAM_RAW, CamelTcpStreamRaw))
+#define CAMEL_TCP_STREAM_RAW_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TCP_STREAM_RAW, CamelTcpStreamRawClass))
+#define CAMEL_IS_TCP_STREAM_RAW(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TCP_STREAM_RAW))
+#define CAMEL_IS_TCP_STREAM_RAW_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TCP_STREAM_RAW))
+#define CAMEL_TCP_STREAM_RAW_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TCP_STREAM_RAW, CAmelTcpStreamRawClass))
 
 G_BEGIN_DECLS
 
@@ -52,7 +66,7 @@ struct _CamelTcpStreamRawClass {
        CamelTcpStreamClass parent_class;
 };
 
-CamelType camel_tcp_stream_raw_get_type (void);
+GType camel_tcp_stream_raw_get_type (void);
 
 /* public methods */
 CamelStream *camel_tcp_stream_raw_new (void);
index 117239f..f61f205 100644 (file)
@@ -67,7 +67,9 @@
 #define IO_TIMEOUT (PR_TicksPerSecond() * 4 * 60)
 #define CONNECT_TIMEOUT (PR_TicksPerSecond () * 4 * 60)
 
-static CamelTcpStreamClass *parent_class = NULL;
+#define CAMEL_TCP_STREAM_SSL_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TCP_STREAM_SSL, CamelTcpStreamSSLPrivate))
 
 struct _CamelTcpStreamSSLPrivate {
        PRFileDesc *sockfd;
@@ -78,6 +80,7 @@ struct _CamelTcpStreamSSLPrivate {
        guint32 flags;
 };
 
+G_DEFINE_TYPE (CamelTcpStreamSSL, camel_tcp_stream_ssl, CAMEL_TYPE_TCP_STREAM)
 
 static void
 set_errno (gint code)
@@ -142,24 +145,39 @@ set_errno (gint code)
 }
 
 static void
-tcp_stream_ssl_finalize (CamelTcpStreamSSL *stream)
+tcp_stream_ssl_dispose (GObject *object)
 {
-       CamelTcpStreamSSLPrivate *priv = stream->priv;
+       CamelTcpStreamSSLPrivate *priv;
+
+       priv = CAMEL_TCP_STREAM_SSL_GET_PRIVATE (object);
+
+       if (priv->session != NULL) {
+               g_object_unref (priv->session);
+               priv->session = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_tcp_stream_ssl_parent_class)->dispose (object);
+}
+
+static void
+tcp_stream_ssl_finalize (GObject *object)
+{
+       CamelTcpStreamSSLPrivate *priv;
+
+       priv = CAMEL_TCP_STREAM_SSL_GET_PRIVATE (object);
 
        if (priv->sockfd != NULL) {
                PR_Shutdown (priv->sockfd, PR_SHUTDOWN_BOTH);
                PR_Close (priv->sockfd);
        }
 
-       if (priv->session)
-               camel_object_unref (priv->session);
-
        g_free (priv->expected_host);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_tcp_stream_ssl_parent_class)->finalize (object);
 }
 
-
 static gssize
 tcp_stream_ssl_read (CamelStream *stream,
                      gchar *buffer,
@@ -643,7 +661,7 @@ camel_certdb_nss_cert_set(CamelCertDB *certdb, CamelCert *ccert, CERTCertificate
                        g_unlink (path);
                }
                camel_stream_close (stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
        } else {
                g_warning ("Could not save cert: %s: %s", path, g_strerror (errno));
        }
@@ -735,7 +753,7 @@ ssl_bad_cert (gpointer data, PRFileDesc *sockfd)
        }
 
        camel_certdb_cert_unref(certdb, ccert);
-       camel_object_unref (certdb);
+       g_object_unref (certdb);
 
        return accept ? SECSuccess : SECFailure;
 
@@ -1176,10 +1194,15 @@ camel_tcp_stream_ssl_sockfd (CamelTcpStreamSSL *stream)
 static void
 camel_tcp_stream_ssl_class_init (CamelTcpStreamSSLClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
        CamelTcpStreamClass *tcp_stream_class;
 
-       parent_class = CAMEL_TCP_STREAM_CLASS (camel_type_get_global_classfuncs (camel_tcp_stream_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelTcpStreamSSLPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = tcp_stream_ssl_dispose;
+       object_class->finalize = tcp_stream_ssl_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = tcp_stream_ssl_read;
@@ -1198,26 +1221,7 @@ camel_tcp_stream_ssl_class_init (CamelTcpStreamSSLClass *class)
 static void
 camel_tcp_stream_ssl_init (CamelTcpStreamSSL *stream)
 {
-       stream->priv = g_new0 (CamelTcpStreamSSLPrivate, 1);
-}
-
-CamelType
-camel_tcp_stream_ssl_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_tcp_stream_get_type (),
-                                           "CamelTcpStreamSSL",
-                                           sizeof (CamelTcpStreamSSL),
-                                           sizeof (CamelTcpStreamSSLClass),
-                                           (CamelObjectClassInitFunc) camel_tcp_stream_ssl_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_tcp_stream_ssl_init,
-                                           (CamelObjectFinalizeFunc) tcp_stream_ssl_finalize);
-       }
-
-       return type;
+       stream->priv = CAMEL_TCP_STREAM_SSL_GET_PRIVATE (stream);
 }
 
 /**
@@ -1242,9 +1246,9 @@ camel_tcp_stream_ssl_new (CamelSession *session, const gchar *expected_host, gui
 
        g_assert(CAMEL_IS_SESSION(session));
 
-       stream = CAMEL_TCP_STREAM_SSL (camel_object_new (camel_tcp_stream_ssl_get_type ()));
+       stream = g_object_new (CAMEL_TYPE_TCP_STREAM_SSL, NULL);
 
-       stream->priv->session = camel_object_ref (session);
+       stream->priv->session = g_object_ref (session);
        stream->priv->expected_host = g_strdup (expected_host);
        stream->priv->ssl_mode = TRUE;
        stream->priv->flags = flags;
@@ -1274,9 +1278,9 @@ camel_tcp_stream_ssl_new_raw (CamelSession *session, const gchar *expected_host,
 
        g_assert(CAMEL_IS_SESSION(session));
 
-       stream = CAMEL_TCP_STREAM_SSL (camel_object_new (camel_tcp_stream_ssl_get_type ()));
+       stream = g_object_new (CAMEL_TYPE_TCP_STREAM_SSL, NULL);
 
-       stream->priv->session = camel_object_ref (session);
+       stream->priv->session = g_object_ref (session);
        stream->priv->expected_host = g_strdup (expected_host);
        stream->priv->ssl_mode = FALSE;
        stream->priv->flags = flags;
index d5eac2e..928f578 100644 (file)
 #include <camel/camel-tcp-stream.h>
 #include <prio.h>
 
-#define CAMEL_TCP_STREAM_SSL_TYPE     (camel_tcp_stream_ssl_get_type ())
-#define CAMEL_TCP_STREAM_SSL(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TCP_STREAM_SSL_TYPE, CamelTcpStreamSSL))
-#define CAMEL_TCP_STREAM_SSL_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TCP_STREAM_SSL_TYPE, CamelTcpStreamSSLClass))
-#define CAMEL_IS_TCP_STREAM_SSL(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TCP_STREAM_SSL_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_TCP_STREAM_SSL \
+       (camel_tcp_stream_ssl_get_type ())
+#define CAMEL_TCP_STREAM_SSL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TCP_STREAM_SSL, CamelTcpStreamSSL))
+#define CAMEL_TCP_STREAM_SSL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TCP_STREAM_SSL, CamelTcpStreamSSLClass))
+#define CAMEL_IS_TCP_STREAM_SSL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TCP_STREAM_SSL))
+#define CAMEL_IS_TCP_STREAM_SSL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TCP_STREAM_SSL))
+#define CAMEL_TCP_STREAM_SSL_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TCP_STREAM_SSL, CamelTcpStreamSSLClass))
 
 #define CAMEL_TCP_STREAM_SSL_ENABLE_SSL2   (1 << 0)
 #define CAMEL_TCP_STREAM_SSL_ENABLE_SSL3   (1 << 1)
@@ -58,7 +72,7 @@ struct _CamelTcpStreamSSLClass {
        CamelTcpStreamClass parent_class;
 };
 
-CamelType camel_tcp_stream_ssl_get_type (void);
+GType camel_tcp_stream_ssl_get_type (void);
 
 /* public methods */
 CamelStream *camel_tcp_stream_ssl_new (struct _CamelSession *session, const gchar *expected_host, guint32 flags);
index 39aa6e3..171f427 100644 (file)
 
 #define w(x)
 
-static CamelStreamClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelTcpStream, camel_tcp_stream, CAMEL_TYPE_STREAM)
 
 static void
 camel_tcp_stream_class_init (CamelTcpStreamClass *class)
 {
-       parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (CAMEL_STREAM_TYPE));
 }
 
 static void
@@ -48,25 +47,6 @@ camel_tcp_stream_init (CamelTcpStream *tcp_stream)
 {
 }
 
-CamelType
-camel_tcp_stream_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_STREAM_TYPE,
-                                           "CamelTcpStream",
-                                           sizeof (CamelTcpStream),
-                                           sizeof (CamelTcpStreamClass),
-                                           (CamelObjectClassInitFunc) camel_tcp_stream_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_tcp_stream_init,
-                                           NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_tcp_stream_connect:
  * @stream: a #CamelTcpStream object
index a7db2e5..17cb492 100644 (file)
@@ -46,12 +46,24 @@ struct addrinfo;
 
 #include <camel/camel-stream.h>
 
-#define CAMEL_TCP_STREAM_TYPE     (camel_tcp_stream_get_type ())
-#define CAMEL_TCP_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TCP_STREAM_TYPE, CamelTcpStream))
-#define CAMEL_TCP_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TCP_STREAM_TYPE, CamelTcpStreamClass))
-#define CAMEL_IS_TCP_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TCP_STREAM_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_TCP_STREAM \
+       (camel_tcp_stream_get_type ())
+#define CAMEL_TCP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TCP_STREAM, CamelTcpStream))
+#define CAMEL_TCP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TCP_STREAM, CamelTcpStreamClass))
+#define CAMEL_IS_TCP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TCP_STREAM))
+#define CAMEL_IS_TCP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TCP_STREAM))
 #define CAMEL_TCP_STREAM_GET_CLASS(obj) \
-       ((CamelTcpStreamClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TCP_STREAM, CamelTcpStreamClass))
 
 G_BEGIN_DECLS
 
@@ -121,7 +133,7 @@ struct _CamelTcpStreamClass {
                                                 socklen_t *len);
 };
 
-CamelType      camel_tcp_stream_get_type       (void);
+GType          camel_tcp_stream_get_type       (void);
 gint           camel_tcp_stream_connect        (CamelTcpStream *stream,
                                                 struct addrinfo *host);
 gint           camel_tcp_stream_getsockopt     (CamelTcpStream *stream,
index ac471cb..e242669 100644 (file)
@@ -60,6 +60,10 @@ static gint text_index_compress_nosync (CamelIndex *idx);
 
 /* ********************************************************************** */
 
+#define CAMEL_TEXT_INDEX_NAME_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_NAME, CamelTextIndexNamePrivate))
+
 struct _CamelTextIndexNamePrivate {
        GString *buffer;
        camel_key_t nameid;
@@ -70,6 +74,10 @@ CamelTextIndexName *camel_text_index_name_new (CamelTextIndex *idx, const gchar
 
 /* ****************************** */
 
+#define CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_CURSOR, CamelTextIndexCursorPrivate))
+
 struct _CamelTextIndexCursorPrivate {
        camel_block_t first;
        camel_block_t next;
@@ -86,6 +94,10 @@ CamelTextIndexCursor *camel_text_index_cursor_new (CamelTextIndex *idx, camel_bl
 
 /* ****************************** */
 
+#define CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR, CamelTextIndexKeyCursorPrivate))
+
 struct _CamelTextIndexKeyCursorPrivate {
        CamelKeyTable *table;
 
@@ -102,6 +114,10 @@ CamelTextIndexKeyCursor *camel_text_index_key_cursor_new (CamelTextIndex *idx, C
 #define CAMEL_TEXT_INDEX_VERSION "TEXT.000"
 #define CAMEL_TEXT_INDEX_KEY_VERSION "KEYS.000"
 
+#define CAMEL_TEXT_INDEX_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX, CamelTextIndexPrivate))
+
 struct _CamelTextIndexPrivate {
        CamelBlockFile *blocks;
        CamelKeyFile *links;
@@ -148,15 +164,74 @@ struct _CamelTextIndexWord {
        camel_key_t names[32];
 };
 
-#define CAMEL_TEXT_INDEX_GET_PRIVATE(o) (((CamelTextIndex *)(o))->priv)
-
-#define CI_CLASS(o) ((CamelTextIndexClass *)(((CamelObject *)o)->classfuncs))
-
 /* ********************************************************************** */
 /* CamelTextIndex */
 /* ********************************************************************** */
 
-static CamelObjectClass *camel_text_index_parent;
+G_DEFINE_TYPE (CamelTextIndex, camel_text_index, CAMEL_TYPE_INDEX)
+
+static void
+text_index_dispose (GObject *object)
+{
+       CamelTextIndexPrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_GET_PRIVATE (object);
+
+       /* Only run this the first time. */
+       if (priv->word_index != NULL)
+               camel_index_sync (CAMEL_INDEX (object));
+
+       if (priv->word_index != NULL) {
+               g_object_unref (priv->word_index);
+               priv->word_index = NULL;
+       }
+
+       if (priv->word_hash != NULL) {
+               g_object_unref (priv->word_hash);
+               priv->word_hash = NULL;
+       }
+
+       if (priv->name_index != NULL) {
+               g_object_unref (priv->name_index);
+               priv->name_index = NULL;
+       }
+
+       if (priv->name_hash != NULL) {
+               g_object_unref (priv->name_hash);
+               priv->name_hash = NULL;
+       }
+
+       if (priv->blocks != NULL) {
+               g_object_unref (priv->blocks);
+               priv->blocks = NULL;
+       }
+
+       if (priv->links != NULL) {
+               g_object_unref (priv->links);
+               priv->links = NULL;
+       }
+
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_text_index_parent_class)->dispose (object);
+}
+
+static void
+text_index_finalize (GObject *object)
+{
+       CamelTextIndexPrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_GET_PRIVATE (object);
+
+       g_assert (camel_dlist_empty (&priv->word_cache));
+       g_assert (g_hash_table_size (priv->words) == 0);
+
+       g_hash_table_destroy (priv->words);
+
+       g_static_rec_mutex_free (&priv->lock);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_text_index_parent_class)->finalize (object);
+}
 
 /* call locked */
 static void
@@ -512,7 +587,7 @@ fail:
 
        camel_index_delete ((CamelIndex *)newidx);
 
-       camel_object_unref (newidx);
+       g_object_unref (newidx);
        g_free (name);
        g_hash_table_destroy (remap);
 
@@ -728,93 +803,47 @@ text_index_names (CamelIndex *idx)
 }
 
 static void
-camel_text_index_class_init (CamelTextIndexClass *klass)
+camel_text_index_class_init (CamelTextIndexClass *class)
 {
-       CamelIndexClass *iklass = (CamelIndexClass *)klass;
-
-       camel_text_index_parent = CAMEL_OBJECT_CLASS (camel_type_get_global_classfuncs (camel_object_get_type ()));
-
-       iklass->sync = text_index_sync;
-       iklass->compress = text_index_compress;
-       iklass->delete = text_index_delete;
-
-       iklass->rename = text_index_rename;
-
-       iklass->has_name = text_index_has_name;
-       iklass->add_name = text_index_add_name;
-       iklass->write_name = text_index_write_name;
-       iklass->find_name = text_index_find_name;
-       iklass->delete_name = text_index_delete_name;
-       iklass->find = text_index_find;
-
-       iklass->words = text_index_words;
-       iklass->names = text_index_names;
-}
-
-static void
-camel_text_index_init (CamelTextIndex *idx)
-{
-       CamelTextIndexPrivate *p;
-
-       p = CAMEL_TEXT_INDEX_GET_PRIVATE (idx) = g_malloc0(sizeof (*p));
-
-       camel_dlist_init (&p->word_cache);
-       p->words = g_hash_table_new (g_str_hash, g_str_equal);
-       p->word_cache_count = 0;
-       /* this cache size and the block cache size have been tuned for about the best
-          with moderate memory usage.  Doubling the memory usage barely affects performance. */
-       p->word_cache_limit = 4096; /* 1024 = 128K */
-
-       g_static_rec_mutex_init (&p->lock);
+       GObjectClass *object_class;
+       CamelIndexClass *index_class;
+
+       g_type_class_add_private (class, sizeof (CamelTextIndexPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = text_index_dispose;
+       object_class->finalize = text_index_finalize;
+
+       index_class = CAMEL_INDEX_CLASS (class);
+       index_class->sync = text_index_sync;
+       index_class->compress = text_index_compress;
+       index_class->delete = text_index_delete;
+       index_class->rename = text_index_rename;
+       index_class->has_name = text_index_has_name;
+       index_class->add_name = text_index_add_name;
+       index_class->write_name = text_index_write_name;
+       index_class->find_name = text_index_find_name;
+       index_class->delete_name = text_index_delete_name;
+       index_class->find = text_index_find;
+       index_class->words = text_index_words;
+       index_class->names = text_index_names;
 }
 
 static void
-camel_text_index_finalize (CamelTextIndex *idx)
+camel_text_index_init (CamelTextIndex *text_index)
 {
-       CamelTextIndexPrivate *p = CAMEL_TEXT_INDEX_GET_PRIVATE (idx);
-
-       camel_index_sync ((CamelIndex *)idx);
-
-       g_assert (camel_dlist_empty (&p->word_cache));
-       g_assert (g_hash_table_size (p->words) == 0);
-
-       g_hash_table_destroy (p->words);
+       text_index->priv = CAMEL_TEXT_INDEX_GET_PRIVATE (text_index);
 
-       if (p->word_index)
-               camel_object_unref (p->word_index);
-       if (p->word_hash)
-               camel_object_unref (p->word_hash);
-       if (p->name_index)
-               camel_object_unref (p->name_index);
-       if (p->name_hash)
-               camel_object_unref (p->name_hash);
+       camel_dlist_init (&text_index->priv->word_cache);
+       text_index->priv->words = g_hash_table_new (g_str_hash, g_str_equal);
+       text_index->priv->word_cache_count = 0;
 
-       if (p->blocks)
-               camel_object_unref (p->blocks);
-       if (p->links)
-               camel_object_unref (p->links);
+       /* This cache size and the block cache size have been tuned for
+        * about the best with moderate memory usage.  Doubling the memory
+        * usage barely affects performance. */
+       text_index->priv->word_cache_limit = 4096; /* 1024 = 128K */
 
-       g_static_rec_mutex_free (&p->lock);
-
-       g_free (p);
-}
-
-CamelType
-camel_text_index_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_index_get_type (), "CamelTextIndex",
-                                          sizeof (CamelTextIndex),
-                                          sizeof (CamelTextIndexClass),
-                                          (CamelObjectClassInitFunc) camel_text_index_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_text_index_init,
-                                          (CamelObjectFinalizeFunc) camel_text_index_finalize);
-       }
-
-       return type;
+       g_static_rec_mutex_init (&text_index->priv->lock);
 }
 
 static gchar *
@@ -832,7 +861,7 @@ text_index_normalize (CamelIndex *idx, const gchar *in, gpointer data)
 CamelTextIndex *
 camel_text_index_new (const gchar *path, gint flags)
 {
-       CamelTextIndex *idx = (CamelTextIndex *)camel_object_new (camel_text_index_get_type ());
+       CamelTextIndex *idx = g_object_new (CAMEL_TYPE_TEXT_INDEX, NULL);
        CamelTextIndexPrivate *p = CAMEL_TEXT_INDEX_GET_PRIVATE (idx);
        struct _CamelTextIndexRoot *rb;
        gchar *link;
@@ -906,14 +935,14 @@ camel_text_index_new (const gchar *path, gint flags)
 
        if (p->word_index == NULL || p->word_hash == NULL
            || p->name_index == NULL || p->name_hash == NULL) {
-               camel_object_unref (idx);
+               g_object_unref (idx);
                idx = NULL;
        }
 
        return idx;
 
 fail:
-       camel_object_unref (idx);
+       g_object_unref (idx);
        return NULL;
 }
 
@@ -937,12 +966,12 @@ camel_text_index_check (const gchar *path)
        keys = camel_key_file_new (key, O_RDONLY, CAMEL_TEXT_INDEX_KEY_VERSION);
        if (keys == NULL) {
                io (printf ("Check failed: No key file: %s\n", g_strerror (errno)));
-               camel_object_unref (blocks);
+               g_object_unref (blocks);
                return -1;
        }
 
-       camel_object_unref (keys);
-       camel_object_unref (blocks);
+       g_object_unref (keys);
+       g_object_unref (blocks);
 
        return 0;
 }
@@ -1236,7 +1265,7 @@ camel_text_index_dump (CamelTextIndex *idx)
                        printf (" %s", name);
                }
                printf ("\n");
-               camel_object_unref (idc);
+               g_object_unref (idc);
                g_free (word);
        }
 #else
@@ -1350,7 +1379,7 @@ camel_text_index_validate (CamelTextIndex *idx)
                                g_hash_table_insert (used, g_strdup (name), (gpointer)1);
                        }
                }
-               camel_object_unref (idc);
+               g_object_unref (idc);
 
                g_hash_table_foreach (used, (GHFunc)g_free, NULL);
                g_hash_table_destroy (used);
@@ -1385,10 +1414,23 @@ camel_text_index_validate (CamelTextIndex *idx)
 /* CamelTextIndexName */
 /* ********************************************************************** */
 
-static CamelIndexNameClass *camel_text_index_name_parent;
+G_DEFINE_TYPE (CamelTextIndexName, camel_text_index_name, CAMEL_TYPE_INDEX_NAME)
+
+static void
+text_index_name_finalize (GObject *object)
+{
+       CamelTextIndexNamePrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_NAME_GET_PRIVATE (object);
+
+       g_hash_table_destroy (CAMEL_TEXT_INDEX_NAME (object)->parent.words);
 
-#define CIN_CLASS(o) ((CamelTextIndexNameClass *)(((CamelObject *)o)->classfuncs))
-#define CAMEL_TEXT_INDEX_NAME_GET_PRIVATE(o) (((CamelTextIndexName *)(o))->priv)
+       g_string_free (priv->buffer, TRUE);
+       camel_mempool_destroy (priv->pool);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_text_index_name_parent_class)->finalize (object);
+}
 
 static void
 text_index_name_add_word (CamelIndexName *idn, const gchar *word)
@@ -1505,67 +1547,43 @@ text_index_name_add_buffer (CamelIndexName *idn, const gchar *buffer, gsize len)
 }
 
 static void
-camel_text_index_name_class_init (CamelTextIndexNameClass *klass)
+camel_text_index_name_class_init (CamelTextIndexNameClass *class)
 {
-       CamelIndexNameClass *nklass = (CamelIndexNameClass *)klass;
-
-       camel_text_index_name_parent = CAMEL_INDEX_NAME_CLASS (camel_type_get_global_classfuncs (camel_index_name_get_type ()));
-
-       nklass->add_word = text_index_name_add_word;
-       nklass->add_buffer = text_index_name_add_buffer;
-}
+       GObjectClass *object_class;
+       CamelIndexNameClass *index_name_class;
 
-static void
-camel_text_index_name_init (CamelTextIndexName *idn)
-{
-       CamelTextIndexNamePrivate *p;
+       g_type_class_add_private (class, sizeof (CamelTextIndexNamePrivate));
 
-       idn->parent.words = g_hash_table_new (g_str_hash, g_str_equal);
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = text_index_name_finalize;
 
-       p = idn->priv = g_malloc0(sizeof (*idn->priv));
-       p->buffer = g_string_new ("");
-       p->pool = camel_mempool_new (256, 128, CAMEL_MEMPOOL_ALIGN_BYTE);
+       index_name_class = CAMEL_INDEX_NAME_CLASS (class);
+       index_name_class->add_word = text_index_name_add_word;
+       index_name_class->add_buffer = text_index_name_add_buffer;
 }
 
 static void
-camel_text_index_name_finalize (CamelTextIndexName *idn)
+camel_text_index_name_init (CamelTextIndexName *text_index_name)
 {
-       CamelTextIndexNamePrivate *p = CAMEL_TEXT_INDEX_NAME_GET_PRIVATE (idn);
+       text_index_name->priv =
+               CAMEL_TEXT_INDEX_NAME_GET_PRIVATE (text_index_name);
 
-       g_hash_table_destroy (idn->parent.words);
+       text_index_name->parent.words = g_hash_table_new (
+               g_str_hash, g_str_equal);
 
-       g_string_free (p->buffer, TRUE);
-       camel_mempool_destroy (p->pool);
-
-       g_free (p);
-}
-
-CamelType
-camel_text_index_name_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_index_name_get_type (), "CamelTextIndexName",
-                                          sizeof (CamelTextIndexName),
-                                          sizeof (CamelTextIndexNameClass),
-                                          (CamelObjectClassInitFunc) camel_text_index_name_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_text_index_name_init,
-                                          (CamelObjectFinalizeFunc) camel_text_index_name_finalize);
-       }
-
-       return type;
+       text_index_name->priv->buffer = g_string_new ("");
+       text_index_name->priv->pool =
+               camel_mempool_new (256, 128, CAMEL_MEMPOOL_ALIGN_BYTE);
 }
 
 CamelTextIndexName *
 camel_text_index_name_new (CamelTextIndex *idx, const gchar *name, camel_key_t nameid)
 {
-       CamelTextIndexName *idn = (CamelTextIndexName *)camel_object_new (camel_text_index_name_get_type ());
+       CamelTextIndexName *idn = g_object_new (CAMEL_TYPE_TEXT_INDEX_NAME, NULL);
        CamelIndexName *cin = &idn->parent;
        CamelTextIndexNamePrivate *p = CAMEL_TEXT_INDEX_NAME_GET_PRIVATE (idn);
 
-       cin->index = camel_object_ref (idx);
+       cin->index = g_object_ref (idx);
        cin->name = camel_mempool_strdup (p->pool, name);
        p->nameid = nameid;
 
@@ -1576,10 +1594,21 @@ camel_text_index_name_new (CamelTextIndex *idx, const gchar *name, camel_key_t n
 /* CamelTextIndexCursor */
 /* ********************************************************************** */
 
-static CamelIndexCursorClass *camel_text_index_cursor_parent;
+G_DEFINE_TYPE (CamelTextIndexCursor, camel_text_index_cursor, CAMEL_TYPE_INDEX_CURSOR)
 
-#define CIC_CLASS(o) ((CamelTextIndexCursorClass *)(((CamelObject *)o)->classfuncs))
-#define CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE(o) (((CamelTextIndexCursor *)(o))->priv)
+static void
+text_index_cursor_finalize (GObject *object)
+{
+       CamelTextIndexCursorPrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE (object);
+
+       g_free (priv->records);
+       g_free (priv->current);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_text_index_cursor_parent_class)->finalize (object);
+}
 
 static const gchar *
 text_index_cursor_next (CamelIndexCursor *idc)
@@ -1631,58 +1660,36 @@ text_index_cursor_reset (CamelIndexCursor *idc)
 }
 
 static void
-camel_text_index_cursor_class_init (CamelTextIndexCursorClass *klass)
+camel_text_index_cursor_class_init (CamelTextIndexCursorClass *class)
 {
-       CamelIndexCursorClass *cklass = (CamelIndexCursorClass *)klass;
+       GObjectClass *object_class;
+       CamelIndexCursorClass *index_cursor_class;
 
-       camel_text_index_cursor_parent = CAMEL_INDEX_CURSOR_CLASS (camel_type_get_global_classfuncs (camel_index_cursor_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelTextIndexCursorPrivate));
 
-       cklass->next = text_index_cursor_next;
-       cklass->reset = text_index_cursor_reset;
-}
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = text_index_cursor_finalize;
 
-static void
-camel_text_index_cursor_init (CamelTextIndexCursor *idc)
-{
-       CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE (idc) = g_malloc0(sizeof (CamelTextIndexCursorPrivate));
+       index_cursor_class = CAMEL_INDEX_CURSOR_CLASS (class);
+       index_cursor_class->next = text_index_cursor_next;
+       index_cursor_class->reset = text_index_cursor_reset;
 }
 
 static void
-camel_text_index_cursor_finalize (CamelTextIndexCursor *idc)
+camel_text_index_cursor_init (CamelTextIndexCursor *text_index_cursor)
 {
-       CamelTextIndexCursorPrivate *p = CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE (idc);
-
-       g_free (p->records);
-       g_free (p->current);
-       g_free (p);
-}
-
-CamelType
-camel_text_index_cursor_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_index_cursor_get_type (), "CamelTextIndexCursor",
-                                          sizeof (CamelTextIndexCursor),
-                                          sizeof (CamelTextIndexCursorClass),
-                                          (CamelObjectClassInitFunc) camel_text_index_cursor_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_text_index_cursor_init,
-                                          (CamelObjectFinalizeFunc) camel_text_index_cursor_finalize);
-       }
-
-       return type;
+       text_index_cursor->priv =
+               CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE (text_index_cursor);
 }
 
 CamelTextIndexCursor *
 camel_text_index_cursor_new (CamelTextIndex *idx, camel_block_t data)
 {
-       CamelTextIndexCursor *idc = (CamelTextIndexCursor *)camel_object_new (camel_text_index_cursor_get_type ());
+       CamelTextIndexCursor *idc = g_object_new (CAMEL_TYPE_TEXT_INDEX_CURSOR, NULL);
        CamelIndexCursor *cic = &idc->parent;
        CamelTextIndexCursorPrivate *p = CAMEL_TEXT_INDEX_CURSOR_GET_PRIVATE (idc);
 
-       cic->index = camel_object_ref (idx);
+       cic->index = g_object_ref (idx);
        p->first = data;
        p->next = data;
        p->record_count = 0;
@@ -1695,10 +1702,36 @@ camel_text_index_cursor_new (CamelTextIndex *idx, camel_block_t data)
 /* CamelTextIndexKeyCursor */
 /* ********************************************************************** */
 
-static CamelIndexCursorClass *camel_text_index_key_cursor_parent;
+G_DEFINE_TYPE (CamelTextIndexKeyCursor, camel_text_index_key_cursor, CAMEL_TYPE_INDEX_CURSOR)
+
+static void
+text_index_key_cursor_dispose (GObject *object)
+{
+       CamelTextIndexKeyCursorPrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE (object);
+
+       if (priv->table != NULL) {
+               g_object_unref (priv->table);
+               priv->table = NULL;
+       }
 
-#define CIKC_CLASS(o) ((CamelTextIndexKeyCursorClass *)(((CamelObject *)o)->classfuncs))
-#define CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE(o) (((CamelTextIndexKeyCursor *)(o))->priv)
+       /* Chain up parent's dispose() method. */
+       G_OBJECT_CLASS (camel_text_index_key_cursor_parent_class)->dispose (object);
+}
+
+static void
+text_index_key_cursor_finalize (GObject *object)
+{
+       CamelTextIndexKeyCursorPrivate *priv;
+
+       priv = CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE (object);
+
+       g_free (priv->current);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_text_index_key_cursor_parent_class)->finalize (object);
+}
 
 static const gchar *
 text_index_key_cursor_next (CamelIndexCursor *idc)
@@ -1735,66 +1768,43 @@ text_index_key_cursor_reset (CamelIndexCursor *idc)
 }
 
 static void
-camel_text_index_key_cursor_class_init (CamelTextIndexKeyCursorClass *klass)
+camel_text_index_key_cursor_class_init (CamelTextIndexKeyCursorClass *class)
 {
-       CamelIndexCursorClass *cklass = (CamelIndexCursorClass *)klass;
+       GObjectClass *object_class;
+       CamelIndexCursorClass *index_cursor_class;
 
-       camel_text_index_key_cursor_parent = CAMEL_INDEX_CURSOR_CLASS (camel_type_get_global_classfuncs (camel_index_cursor_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelTextIndexKeyCursorPrivate));
 
-       cklass->next = text_index_key_cursor_next;
-       cklass->reset = text_index_key_cursor_reset;
-}
-
-static void
-camel_text_index_key_cursor_init (CamelTextIndexKeyCursor *idc)
-{
-       CamelTextIndexKeyCursorPrivate *p;
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = text_index_key_cursor_dispose;
+       object_class->finalize = text_index_key_cursor_finalize;
 
-       p = idc->priv = g_malloc0(sizeof (CamelTextIndexKeyCursorPrivate));
-       p->keyid = 0;
-       p->flags = 0;
-       p->data = 0;
-       p->current = NULL;
+       index_cursor_class = CAMEL_INDEX_CURSOR_CLASS (class);
+       index_cursor_class->next = text_index_key_cursor_next;
+       index_cursor_class->reset = text_index_key_cursor_reset;
 }
 
 static void
-camel_text_index_key_cursor_finalize (CamelTextIndexKeyCursor *idc)
+camel_text_index_key_cursor_init (CamelTextIndexKeyCursor *text_index_key_cursor)
 {
-       CamelTextIndexKeyCursorPrivate *p = CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE (idc);
-
-       g_free (p->current);
-       if (p->table)
-               camel_object_unref (p->table);
-       g_free (p);
-}
-
-CamelType
-camel_text_index_key_cursor_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_index_cursor_get_type (), "CamelTextIndexKeyCursor",
-                                          sizeof (CamelTextIndexKeyCursor),
-                                          sizeof (CamelTextIndexKeyCursorClass),
-                                          (CamelObjectClassInitFunc) camel_text_index_key_cursor_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_text_index_key_cursor_init,
-                                          (CamelObjectFinalizeFunc) camel_text_index_key_cursor_finalize);
-       }
+       text_index_key_cursor->priv =
+               CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE (text_index_key_cursor);
 
-       return type;
+       text_index_key_cursor->priv->keyid = 0;
+       text_index_key_cursor->priv->flags = 0;
+       text_index_key_cursor->priv->data = 0;
+       text_index_key_cursor->priv->current = NULL;
 }
 
 CamelTextIndexKeyCursor *
 camel_text_index_key_cursor_new (CamelTextIndex *idx, CamelKeyTable *table)
 {
-       CamelTextIndexKeyCursor *idc = (CamelTextIndexKeyCursor *)camel_object_new (camel_text_index_key_cursor_get_type ());
+       CamelTextIndexKeyCursor *idc = g_object_new (CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR, NULL);
        CamelIndexCursor *cic = &idc->parent;
        CamelTextIndexKeyCursorPrivate *p = CAMEL_TEXT_INDEX_KEY_CURSOR_GET_PRIVATE (idc);
 
-       cic->index = camel_object_ref (idx);
-       p->table = camel_object_ref (table);
+       cic->index = g_object_ref (idx);
+       p->table = g_object_ref (table);
 
        return idc;
 }
@@ -1860,7 +1870,7 @@ gint main (gint argc, gchar **argv)
                idn = camel_index_add_name (idx, name);
                camel_index_name_add_buffer (idn, wordbuffer, sizeof (wordbuffer)-1);
                camel_index_write_name (idx, idn);
-               camel_object_unref (idn);
+               g_object_unref (idn);
        }
 
        printf ("Looking up which names contain word 'word'\n");
@@ -1868,7 +1878,7 @@ gint main (gint argc, gchar **argv)
        while ((word = camel_index_cursor_next (idc)) != NULL) {
                printf (" name is '%s'\n", word);
        }
-       camel_object_unref (idc);
+       g_object_unref (idc);
        printf ("done.\n");
 
        printf ("Looking up which names contain word 'truncate'\n");
@@ -1876,11 +1886,11 @@ gint main (gint argc, gchar **argv)
        while ((word = camel_index_cursor_next (idc)) != NULL) {
                printf (" name is '%s'\n", word);
        }
-       camel_object_unref (idc);
+       g_object_unref (idc);
        printf ("done.\n");
 
        camel_index_sync (idx);
-       camel_object_unref (idx);
+       g_object_unref (idx);
 
 #if 0
        bs = camel_block_file_new ("blocks", "TESTINDX", CAMEL_BLOCK_SIZE);
index 610d416..d1d5c41 100644 (file)
 #include <camel/camel-object.h>
 #include "camel-index.h"
 
-#define CAMEL_TEXT_INDEX(obj)         CAMEL_CHECK_CAST (obj, camel_text_index_get_type (), CamelTextIndex)
-#define CAMEL_TEXT_INDEX_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_text_index_get_type (), CamelTextIndexClass)
-#define CAMEL_IS_TEXT_INDEX(obj)      CAMEL_CHECK_TYPE (obj, camel_text_index_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_TEXT_INDEX \
+       (camel_text_index_get_type ())
+#define CAMEL_TEXT_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TEXT_INDEX, CamelTextIndex))
+#define CAMEL_TEXT_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TEXT_INDEX, CamelTextIndexClass))
+#define CAMEL_IS_TEXT_INDEX(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX))
+#define CAMEL_IS_TEXT_INDEX_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TEXT_INDEX))
+#define CAMEL_TEXT_INDEX_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TEXT_INDEX, CamelTextIndexClass))
+
+#define CAMEL_TYPE_TEXT_INDEX_NAME \
+       (camel_text_index_name_get_type ())
+#define CAMEL_TEXT_INDEX_NAME(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_NAME, CamelTextIndexName))
+#define CAMEL_TEXT_INDEX_NAME_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_NAME, CamelTextIndexNameClass))
+#define CAMEL_IS_TEXT_INDEX_NAME(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_NAME))
+#define CAMEL_IS_TEXT_INDEX_NAME_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_NAME))
+#define CAMEL_TEXT_INDEX_NAME_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_NAME, CamelTextIndexNameClass))
+
+#define CAMEL_TYPE_TEXT_INDEX_CURSOR \
+       (camel_text_index_cursor_get_type ())
+#define CAMEL_TEXT_INDEX_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_CURSOR, CamelTextIndexCursor))
+#define CAMEL_TEXT_INDEX_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_CURSOR, CamelTextIndexCursorClass))
+#define CAMEL_IS_TEXT_INDEX_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_CURSOR))
+#define CAMEL_IS_TEXT_INDEX_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_CURSOR))
+#define CAMEL_TEXT_INDEX_CURSOR_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_CURSOR, CamelTextIndexCursorClass))
+
+#define CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR \
+       (camel_text_index_key_cursor_get_type ())
+#define CAMEL_TEXT_INDEX_KEY_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR, CamelTextIndexKeyCursor))
+#define CAMEL_TEXT_INDEX_KEY_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR, CamelTextIndexKeyCursorClass))
+#define CAMEL_IS_TEXT_INDEX_KEY_CURSOR(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR))
+#define CAMEL_IS_TEXT_INDEX_KEY_CURSOR_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR))
+#define CAMEL_TEXT_INDEX_KEY_CURSOR_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR, CamelTextIndexKeyCursorClass))
 
 G_BEGIN_DECLS
 
@@ -65,7 +134,7 @@ struct _CamelTextIndexCursorClass {
        CamelIndexCursorClass parent_class;
 };
 
-CamelType camel_text_index_cursor_get_type(void);
+GType camel_text_index_cursor_get_type(void);
 
 /* ********************************************************************** */
 
@@ -78,7 +147,7 @@ struct _CamelTextIndexKeyCursorClass {
        CamelIndexCursorClass parent_class;
 };
 
-CamelType camel_text_index_key_cursor_get_type(void);
+GType camel_text_index_key_cursor_get_type(void);
 
 /* ********************************************************************** */
 
@@ -91,7 +160,7 @@ struct _CamelTextIndexNameClass {
        CamelIndexNameClass parent_class;
 };
 
-CamelType camel_text_index_name_get_type(void);
+GType camel_text_index_name_get_type(void);
 
 /* ********************************************************************** */
 
@@ -104,7 +173,7 @@ struct _CamelTextIndexClass {
        CamelIndexClass parent_class;
 };
 
-CamelType      camel_text_index_get_type       (void);
+GType          camel_text_index_get_type       (void);
 CamelTextIndex *camel_text_index_new           (const gchar *path,
                                                 gint flags);
 
index 29aba48..5a1e5bf 100644 (file)
 #include "camel-mime-message.h"
 #include "camel-transport.h"
 
+#define CAMEL_TRANSPORT_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_TRANSPORT, CamelTransportPrivate))
+
 struct _CamelTransportPrivate {
        GMutex *send_lock;   /* for locking send operations */
 };
 
-static CamelServiceClass *parent_class = NULL;
+G_DEFINE_ABSTRACT_TYPE (CamelTransport, camel_transport, CAMEL_TYPE_SERVICE)
 
 static void
-transport_finalize (CamelObject *object)
+transport_finalize (GObject *object)
 {
-       CamelTransportPrivate *priv = CAMEL_TRANSPORT (object)->priv;
+       CamelTransportPrivate *priv;
+
+       priv = CAMEL_TRANSPORT_GET_PRIVATE (object);
 
        g_mutex_free (priv->send_lock);
 
-       g_free (priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_transport_parent_class)->finalize (object);
 }
 
 static void
 camel_transport_class_init (CamelTransportClass *class)
 {
-       parent_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
+       GObjectClass *object_class;
+
+       g_type_class_add_private (class, sizeof (CamelTransportPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = transport_finalize;
 }
 
 static void
 camel_transport_init (CamelTransport *transport)
 {
-       transport->priv = g_malloc0 (sizeof (struct _CamelTransportPrivate));
+       transport->priv = CAMEL_TRANSPORT_GET_PRIVATE (transport);
 
        transport->priv->send_lock = g_mutex_new ();
 }
 
-CamelType
-camel_transport_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_SERVICE_TYPE,
-                                           "CamelTransport",
-                                           sizeof (CamelTransport),
-                                           sizeof (CamelTransportClass),
-                                           (CamelObjectClassInitFunc) camel_transport_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_transport_init,
-                                           (CamelObjectFinalizeFunc) transport_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_transport_send_to:
  * @transport: a #CamelTransport object
@@ -126,21 +119,20 @@ camel_transport_send_to (CamelTransport *transport,
  *
  * Locks #transport's #lock. Unlock it with camel_transport_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_transport_lock (CamelTransport *transport, CamelTransportLock lock)
+camel_transport_lock (CamelTransport *transport,
+                      CamelTransportLock lock)
 {
-       g_return_if_fail (transport != NULL);
        g_return_if_fail (CAMEL_IS_TRANSPORT (transport));
-       g_return_if_fail (transport->priv != NULL);
 
        switch (lock) {
-       case CT_SEND_LOCK:
-               g_mutex_lock (transport->priv->send_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CT_SEND_LOCK:
+                       g_mutex_lock (transport->priv->send_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -151,20 +143,19 @@ camel_transport_lock (CamelTransport *transport, CamelTransportLock lock)
  *
  * Unlocks #transport's #lock, previously locked with camel_transport_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_transport_unlock (CamelTransport *transport, CamelTransportLock lock)
+camel_transport_unlock (CamelTransport *transport,
+                        CamelTransportLock lock)
 {
-       g_return_if_fail (transport != NULL);
        g_return_if_fail (CAMEL_IS_TRANSPORT (transport));
-       g_return_if_fail (transport->priv != NULL);
 
        switch (lock) {
-       case CT_SEND_LOCK:
-               g_mutex_unlock (transport->priv->send_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CT_SEND_LOCK:
+                       g_mutex_unlock (transport->priv->send_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index 3508351..f1b6e8d 100644 (file)
 #include <camel/camel-mime-message.h>
 #include <camel/camel-service.h>
 
-#define CAMEL_TRANSPORT_TYPE     (camel_transport_get_type ())
-#define CAMEL_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TRANSPORT_TYPE, CamelTransport))
-#define CAMEL_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TRANSPORT_TYPE, CamelTransportClass))
-#define CAMEL_IS_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TRANSPORT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_TRANSPORT \
+       (camel_transport_get_type ())
+#define CAMEL_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TRANSPORT, CamelTransport))
+#define CAMEL_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TRANSPORT, CamelTransportClass))
+#define CAMEL_IS_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TRANSPORT))
+#define CAMEL_IS_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TRANSPORT))
 #define CAMEL_TRANSPORT_GET_CLASS(obj) \
-       ((CamelTransportClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TRANSPORT, CamelTransportClass))
 
 G_BEGIN_DECLS
 
@@ -51,7 +63,7 @@ enum {
        CAMEL_TRANSPORT_ARG_FIRST  = CAMEL_SERVICE_ARG_FIRST + 100
 };
 
-typedef enum _CamelTransportLock {
+typedef enum {
        CT_SEND_LOCK
 } CamelTransportLock;
 
@@ -63,23 +75,23 @@ struct _CamelTransport {
 struct _CamelTransportClass {
        CamelServiceClass parent_class;
 
-       gboolean (*send_to) (CamelTransport *transport,
-                            CamelMimeMessage *message,
-                            CamelAddress *from, CamelAddress *recipients,
-                            CamelException *ex);
+       gboolean        (*send_to)              (CamelTransport *transport,
+                                                CamelMimeMessage *message,
+                                                CamelAddress *from,
+                                                CamelAddress *recipients,
+                                                CamelException *ex);
 };
 
-/* public methods */
-gboolean camel_transport_send_to (CamelTransport *transport,
-                                 CamelMimeMessage *message,
-                                 CamelAddress *from,
-                                 CamelAddress *recipients,
-                                 CamelException *ex);
-
-CamelType camel_transport_get_type (void);
-
-void camel_transport_lock      (CamelTransport *transport, CamelTransportLock lock);
-void camel_transport_unlock    (CamelTransport *transport, CamelTransportLock lock);
+GType          camel_transport_get_type        (void);
+gboolean       camel_transport_send_to         (CamelTransport *transport,
+                                                CamelMimeMessage *message,
+                                                CamelAddress *from,
+                                                CamelAddress *recipients,
+                                                CamelException *ex);
+void           camel_transport_lock            (CamelTransport *transport,
+                                                CamelTransportLock lock);
+void           camel_transport_unlock          (CamelTransport *transport,
+                                                CamelTransportLock lock);
 
 G_END_DECLS
 
index c46b7e4..76ce2c1 100644 (file)
 #define d(x)
 #define dd(x) (camel_debug ("vfolder")?(x):0)
 
+#define CAMEL_VEE_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_VEE_FOLDER, CamelVeeFolderPrivate))
+
 struct _CamelVeeFolderPrivate {
        gboolean destroyed;
        GList *folders;                 /* lock using subfolder_lock before changing/accessing */
@@ -56,10 +60,6 @@ struct _CamelVeeFolderPrivate {
        gint unread_vfolder;
 };
 
-#define CAMEL_VEE_FOLDER_GET_PRIVATE(o) (((CamelVeeFolder *)(o))->priv)
-
-static gpointer camel_vee_folder_parent_class;
-
 struct _update_data {
        CamelFolder *source;
        CamelVeeFolder *vee_folder;
@@ -76,6 +76,8 @@ struct _folder_changed_msg {
        CamelVeeFolder *vee_folder;
 };
 
+G_DEFINE_TYPE (CamelVeeFolder, camel_vee_folder, CAMEL_TYPE_FOLDER)
+
 /* must be called with summary_lock held */
 static CamelVeeMessageInfo *
 vee_folder_add_uid (CamelVeeFolder *vf,
@@ -620,8 +622,8 @@ folder_changed_free (CamelSession *session, CamelSessionThreadMsg *msg)
        struct _folder_changed_msg *m = (struct _folder_changed_msg *)msg;
 
        camel_folder_change_info_free (m->changes);
-       camel_object_unref (m->vee_folder);
-       camel_object_unref (m->sub);
+       g_object_unref (m->vee_folder);
+       g_object_unref (m->sub);
 }
 
 static CamelSessionThreadOps folder_changed_ops = {
@@ -846,7 +848,7 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
                if (sub->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED) {
                        while (g_list_find (up->folders, sub)) {
                                up->folders = g_list_remove (up->folders, sub);
-                               camel_object_unref (sub);
+                               g_object_unref (sub);
 
                                /* undo the freeze state that Unmatched has imposed on this source folder */
                                camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
@@ -857,7 +859,7 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
                } else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
                        if (g_list_find (up->folders, sub) != NULL) {
                                up->folders = g_list_remove (up->folders, sub);
-                               camel_object_unref (sub);
+                               g_object_unref (sub);
 
                                /* undo the freeze state that Unmatched has imposed on this source folder */
                                camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
@@ -872,16 +874,18 @@ vee_folder_stop_folder (CamelVeeFolder *vf, CamelFolder *sub)
        if (CAMEL_IS_VEE_FOLDER (sub))
                return;
 
-       camel_object_unref (sub);
+       g_object_unref (sub);
 }
 
 static void
-vee_folder_finalize (CamelVeeFolder *vf)
+vee_folder_finalize (GObject *object)
 {
+       CamelVeeFolder *vf;
        CamelVeeFolder *folder_unmatched;
        GList *node;
        CamelFIRecord * record;
 
+       vf = CAMEL_VEE_FOLDER (object);
        vf->priv->destroyed = TRUE;
 
        folder_unmatched = vf->parent_vee_store ? vf->parent_vee_store->folder_unmatched : NULL;
@@ -898,7 +902,7 @@ vee_folder_finalize (CamelVeeFolder *vf)
        /* This may invoke sub-classes with partially destroyed state, they must deal with this */
        if (vf == folder_unmatched) {
                for (node = vf->priv->folders;node;node = g_list_next (node))
-                       camel_object_unref (node->data);
+                       g_object_unref (node->data);
        } else {
                /* FIXME[disk-summary] See if it is really reqd */
                camel_folder_freeze ((CamelFolder *)vf);
@@ -915,13 +919,15 @@ vee_folder_finalize (CamelVeeFolder *vf)
        g_list_free (vf->priv->folders_changed);
 
        camel_folder_change_info_free (vf->changes);
-       camel_object_unref (vf->search);
+       g_object_unref (vf->search);
 
        g_mutex_free (vf->priv->summary_lock);
        g_mutex_free (vf->priv->subfolder_lock);
        g_mutex_free (vf->priv->changed_lock);
        g_hash_table_destroy (vf->hashes);
-       g_free (vf->priv);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_vee_folder_parent_class)->finalize (object);
 }
 
 /* This entire code will be useless, since we sync the counts always. */
@@ -1369,11 +1375,11 @@ vee_folder_delete (CamelFolder *folder)
        while (p->folders) {
                CamelFolder *f = p->folders->data;
 
-               camel_object_ref (f);
+               g_object_ref (f);
                camel_vee_folder_unlock (CAMEL_VEE_FOLDER (folder), CVF_SUBFOLDER_LOCK);
 
                camel_vee_folder_remove_folder ((CamelVeeFolder *)folder, f);
-               camel_object_unref (f);
+               g_object_unref (f);
                camel_vee_folder_lock (CAMEL_VEE_FOLDER (folder), CVF_SUBFOLDER_LOCK);
        }
        camel_vee_folder_unlock (CAMEL_VEE_FOLDER (folder), CVF_SUBFOLDER_LOCK);
@@ -1907,8 +1913,8 @@ vee_folder_folder_changed (CamelVeeFolder *vee_folder,
        m = camel_session_thread_msg_new (session, &folder_changed_ops, sizeof (*m));
        m->changes = camel_folder_change_info_new ();
        camel_folder_change_info_cat (m->changes, changes);
-       m->sub = camel_object_ref (sub);
-       m->vee_folder = camel_object_ref (vee_folder);
+       m->sub = g_object_ref (sub);
+       m->vee_folder = g_object_ref (vee_folder);
        camel_session_thread_queue (session, &m->msg, 0);
 }
 
@@ -1935,10 +1941,14 @@ vee_folder_folder_renamed (CamelVeeFolder *vee_folder,
 static void
 camel_vee_folder_class_init (CamelVeeFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelFolderClass *folder_class;
 
-       camel_vee_folder_parent_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelVeeFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = vee_folder_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = vee_folder_getv;
@@ -1970,7 +1980,7 @@ camel_vee_folder_init (CamelVeeFolder *vee_folder)
 {
        CamelFolder *folder = CAMEL_FOLDER (vee_folder);
 
-       vee_folder->priv = g_new0 (CamelVeeFolderPrivate, 1);
+       vee_folder->priv = CAMEL_VEE_FOLDER_GET_PRIVATE (vee_folder);
 
        folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
                                 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
@@ -1996,24 +2006,6 @@ camel_vee_folder_init (CamelVeeFolder *vee_folder)
        vee_folder->priv->unread_vfolder = -1;
 }
 
-CamelType
-camel_vee_folder_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_folder_get_type (), "CamelVeeFolder",
-                                           sizeof (CamelVeeFolder),
-                                           sizeof (CamelVeeFolderClass),
-                                           (CamelObjectClassInitFunc) camel_vee_folder_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_vee_folder_init,
-                                           (CamelObjectFinalizeFunc) vee_folder_finalize);
-       }
-
-       return type;
-}
-
 void
 camel_vee_folder_construct (CamelVeeFolder *vf, CamelStore *parent_store, const gchar *full, const gchar *name, guint32 flags)
 {
@@ -2046,7 +2038,7 @@ camel_vee_folder_new (CamelStore *parent_store, const gchar *full, guint32 flags
 
        if (CAMEL_IS_VEE_STORE (parent_store) && strcmp (full, CAMEL_UNMATCHED_NAME) == 0) {
                vf = ((CamelVeeStore *)parent_store)->folder_unmatched;
-               camel_object_ref (vf);
+               g_object_ref (vf);
        } else {
                const gchar *name = strrchr (full, '/');
 
@@ -2054,7 +2046,7 @@ camel_vee_folder_new (CamelStore *parent_store, const gchar *full, guint32 flags
                        name = full;
                else
                        name++;
-               vf = (CamelVeeFolder *)camel_object_new (camel_vee_folder_get_type ());
+               vf = g_object_new (CAMEL_TYPE_VEE_FOLDER, NULL);
                camel_vee_folder_construct (vf, parent_store, full, name, flags);
        }
 
@@ -2101,7 +2093,7 @@ camel_vee_folder_add_folder (CamelVeeFolder *vf, CamelFolder *sub)
        /* for normal vfolders we want only unique ones, for unmatched we want them all recorded */
        if (g_list_find (p->folders, sub) == NULL) {
                p->folders = g_list_append (
-                       p->folders, camel_object_ref (sub));
+                       p->folders, g_object_ref (sub));
 
                camel_folder_lock (CAMEL_FOLDER (vf), CF_CHANGE_LOCK);
 
@@ -2114,7 +2106,7 @@ camel_vee_folder_add_folder (CamelVeeFolder *vf, CamelFolder *sub)
        if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0 && !CAMEL_IS_VEE_FOLDER (sub) && folder_unmatched != NULL) {
                CamelVeeFolderPrivate *up = CAMEL_VEE_FOLDER_GET_PRIVATE (folder_unmatched);
                up->folders = g_list_append (
-                       up->folders, camel_object_ref (sub));
+                       up->folders, g_object_ref (sub));
 
                camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
 
@@ -2183,7 +2175,7 @@ camel_vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
                if (sub->folder_flags & CAMEL_FOLDER_HAS_BEEN_DELETED) {
                        while (g_list_find (up->folders, sub)) {
                                up->folders = g_list_remove (up->folders, sub);
-                               camel_object_unref (sub);
+                               g_object_unref (sub);
 
                                /* undo the freeze state that Unmatched has imposed on this source folder */
                                camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
@@ -2194,7 +2186,7 @@ camel_vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
                } else if ((vf->flags & CAMEL_STORE_FOLDER_PRIVATE) == 0) {
                        if (g_list_find (up->folders, sub) != NULL) {
                                up->folders = g_list_remove (up->folders, sub);
-                               camel_object_unref (sub);
+                               g_object_unref (sub);
 
                                /* undo the freeze state that Unmatched has imposed on this source folder */
                                camel_folder_lock (CAMEL_FOLDER (folder_unmatched), CF_CHANGE_LOCK);
@@ -2211,7 +2203,7 @@ camel_vee_folder_remove_folder (CamelVeeFolder *vf, CamelFolder *sub)
        if (CAMEL_IS_VEE_FOLDER (sub))
                return;
 
-       camel_object_unref (sub);
+       g_object_unref (sub);
 }
 
 /**
@@ -2234,7 +2226,7 @@ static void
 remove_folders (CamelFolder *folder, CamelFolder *foldercopy, CamelVeeFolder *vf)
 {
        camel_vee_folder_remove_folder (vf, folder);
-       camel_object_unref (folder);
+       g_object_unref (folder);
 }
 
 /**
@@ -2257,7 +2249,7 @@ camel_vee_folder_set_folders (CamelVeeFolder *vf, GList *folders)
        l = p->folders;
        while (l) {
                g_hash_table_insert (remove, l->data, l->data);
-               camel_object_ref (l->data);
+               g_object_ref (l->data);
                l = l->next;
        }
        camel_vee_folder_unlock (vf, CVF_SUBFOLDER_LOCK);
@@ -2267,7 +2259,7 @@ camel_vee_folder_set_folders (CamelVeeFolder *vf, GList *folders)
        while (l) {
                if ((folder = g_hash_table_lookup (remove, l->data))) {
                        g_hash_table_remove (remove, folder);
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                } else {
                        camel_vee_folder_add_folder (vf, l->data);
                }
@@ -2413,7 +2405,8 @@ camel_vee_folder_get_unread_vfolder (CamelVeeFolder *folder)
 
 /* FIXME: This shouldn't be needed */
 void
-camel_vee_folder_set_unread_vfolder (CamelVeeFolder *folder, gint unread_vfolder)
+camel_vee_folder_set_unread_vfolder (CamelVeeFolder *folder,
+                                     gint unread_vfolder)
 {
        g_return_if_fail (folder != NULL);
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (folder));
@@ -2428,27 +2421,26 @@ camel_vee_folder_set_unread_vfolder (CamelVeeFolder *folder, gint unread_vfolder
  *
  * Locks #folder's #lock. Unlock it with camel_vee_folder_unlock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_vee_folder_lock (CamelVeeFolder *folder, CamelVeeFolderLock lock)
+camel_vee_folder_lock (CamelVeeFolder *folder,
+                       CamelVeeFolderLock lock)
 {
-       g_return_if_fail (folder != NULL);
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (folder));
-       g_return_if_fail (folder->priv != NULL);
 
        switch (lock) {
-       case CVF_SUMMARY_LOCK:
-               g_mutex_lock (folder->priv->summary_lock);
-               break;
-       case CVF_SUBFOLDER_LOCK:
-               g_mutex_lock (folder->priv->subfolder_lock);
-               break;
-       case CVF_CHANGED_LOCK:
-               g_mutex_lock (folder->priv->changed_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CVF_SUMMARY_LOCK:
+                       g_mutex_lock (folder->priv->summary_lock);
+                       break;
+               case CVF_SUBFOLDER_LOCK:
+                       g_mutex_lock (folder->priv->subfolder_lock);
+                       break;
+               case CVF_CHANGED_LOCK:
+                       g_mutex_lock (folder->priv->changed_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
 
@@ -2459,26 +2451,25 @@ camel_vee_folder_lock (CamelVeeFolder *folder, CamelVeeFolderLock lock)
  *
  * Unlocks #folder's #lock, previously locked with camel_vee_folder_lock().
  *
- * Since: 2.31.1
+ * Since: 3.0
  **/
 void
-camel_vee_folder_unlock (CamelVeeFolder *folder, CamelVeeFolderLock lock)
+camel_vee_folder_unlock (CamelVeeFolder *folder,
+                         CamelVeeFolderLock lock)
 {
-       g_return_if_fail (folder != NULL);
        g_return_if_fail (CAMEL_IS_VEE_FOLDER (folder));
-       g_return_if_fail (folder->priv != NULL);
 
        switch (lock) {
-       case CVF_SUMMARY_LOCK:
-               g_mutex_unlock (folder->priv->summary_lock);
-               break;
-       case CVF_SUBFOLDER_LOCK:
-               g_mutex_unlock (folder->priv->subfolder_lock);
-               break;
-       case CVF_CHANGED_LOCK:
-               g_mutex_unlock (folder->priv->changed_lock);
-               break;
-       default:
-               g_return_if_reached ();
+               case CVF_SUMMARY_LOCK:
+                       g_mutex_unlock (folder->priv->summary_lock);
+                       break;
+               case CVF_SUBFOLDER_LOCK:
+                       g_mutex_unlock (folder->priv->subfolder_lock);
+                       break;
+               case CVF_CHANGED_LOCK:
+                       g_mutex_unlock (folder->priv->changed_lock);
+                       break;
+               default:
+                       g_return_if_reached ();
        }
 }
index d3c6020..da0e2c9 100644 (file)
 #include <camel/camel-store.h>
 #include <camel/camel-vee-summary.h>
 
-#define CAMEL_VEE_FOLDER(obj)         CAMEL_CHECK_CAST (obj, camel_vee_folder_get_type (), CamelVeeFolder)
-#define CAMEL_VEE_FOLDER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_folder_get_type (), CamelVeeFolderClass)
-#define CAMEL_IS_VEE_FOLDER(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_folder_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_VEE_FOLDER \
+       (camel_vee_folder_get_type ())
+#define CAMEL_VEE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_VEE_FOLDER, CamelVeeFolder))
+#define CAMEL_VEE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_VEE_FOLDER, CamelVeeFolderClass))
+#define CAMEL_IS_VEE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_VEE_FOLDER))
+#define CAMEL_IS_VEE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_VEE_FOLDER))
 #define CAMEL_VEE_FOLDER_GET_CLASS(obj) \
-       ((CamelVeeFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_VEE_FOLDER, CamelVeeFolderClass))
 
 G_BEGIN_DECLS
 
@@ -43,7 +56,7 @@ typedef struct _CamelVeeFolder CamelVeeFolder;
 typedef struct _CamelVeeFolderClass CamelVeeFolderClass;
 typedef struct _CamelVeeFolderPrivate CamelVeeFolderPrivate;
 
-typedef enum _CamelVeeFolderLock {
+typedef enum {
        CVF_SUMMARY_LOCK,
        CVF_SUBFOLDER_LOCK,
        CVF_CHANGED_LOCK
@@ -87,7 +100,7 @@ struct _CamelVeeFolderClass {
 
 #define CAMEL_UNMATCHED_NAME "UNMATCHED"
 
-CamelType            camel_vee_folder_get_type         (void);
+GType        camel_vee_folder_get_type         (void);
 CamelFolder  *camel_vee_folder_new             (CamelStore *parent_store, const gchar *full, guint32 flags);
 void         camel_vee_folder_construct                (CamelVeeFolder *vf, CamelStore *parent_store, const gchar *full, const gchar *name, guint32 flags);
 
index e22972b..53b385a 100644 (file)
@@ -43,7 +43,7 @@
 #define CHANGE_DELETE (1)
 #define CHANGE_NOSELECT (2)
 
-static gpointer camel_vee_store_parent_class;
+G_DEFINE_TYPE (CamelVeeStore, camel_vee_store, CAMEL_TYPE_STORE)
 
 static gint
 vee_folder_cmp (gconstpointer ap,
@@ -93,11 +93,16 @@ cvs_free_unmatched (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-vee_store_finalize (CamelVeeStore *vee_store)
+vee_store_finalize (GObject *object)
 {
+       CamelVeeStore *vee_store = CAMEL_VEE_STORE (object);
+
        g_hash_table_foreach (vee_store->unmatched_uids, cvs_free_unmatched, NULL);
        g_hash_table_destroy (vee_store->unmatched_uids);
-       camel_object_unref (vee_store->folder_unmatched);
+       g_object_unref (vee_store->folder_unmatched);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_vee_store_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -122,7 +127,7 @@ vee_store_construct (CamelService *service,
        /* Set up unmatched folder */
 #ifndef VEE_UNMATCHED_ENABLE
        vee_store->unmatched_uids = g_hash_table_new (g_str_hash, g_str_equal);
-       vee_store->folder_unmatched = (CamelVeeFolder *)camel_object_new (camel_vee_folder_get_type ());
+       vee_store->folder_unmatched = g_object_new (CAMEL_TYPE_VEE_FOLDER, NULL);
        camel_vee_folder_construct (vee_store->folder_unmatched, store, CAMEL_UNMATCHED_NAME, _("Unmatched"), CAMEL_STORE_FOLDER_PRIVATE);
        camel_db_create_vfolder (store->cdb_r, _("Unmatched"), NULL);
 #endif
@@ -164,7 +169,7 @@ vee_store_get_folder (CamelStore *store,
                                change_folder (store, name, CHANGE_ADD|CHANGE_NOSELECT, 0);
                                /* FIXME: this sort of leaks folder, nobody owns a ref to it but us */
                        } else {
-                               camel_object_unref (folder);
+                               g_object_unref (folder);
                        }
                        *p++='/';
                }
@@ -217,12 +222,12 @@ vee_store_rename_folder (CamelStore *store,
                        change_folder (store, name, CHANGE_ADD|CHANGE_NOSELECT, 0);
                        /* FIXME: this sort of leaks folder, nobody owns a ref to it but us */
                } else {
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                }
                *p++='/';
        }
 
-       camel_object_unref (oldfolder);
+       g_object_unref (oldfolder);
 
        return TRUE;
 }
@@ -258,7 +263,7 @@ vee_store_delete_folder (CamelStore *store,
                        change_folder (store, folder_name, CHANGE_DELETE, -1);
                }
 
-               camel_object_unref (folder);
+               g_object_unref (folder);
        } else {
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
@@ -370,7 +375,7 @@ vee_store_get_folder_info (CamelStore *store,
                }
 
                g_free (pname);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        }
        g_ptr_array_free (folders, TRUE);
        g_hash_table_destroy (infos_hash);
@@ -420,10 +425,12 @@ vee_store_get_junk (CamelStore *store,
 static void
 camel_vee_store_class_init (CamelVeeStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_vee_store_parent_class = (CamelStoreClass *)camel_store_get_type ();
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = vee_store_finalize;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = vee_store_construct;
@@ -448,24 +455,6 @@ camel_vee_store_init (CamelVeeStore *vee_store)
        store->flags &= ~(CAMEL_STORE_VTRASH | CAMEL_STORE_VJUNK);
 }
 
-CamelType
-camel_vee_store_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_store_get_type (), "CamelVeeStore",
-                                           sizeof (CamelVeeStore),
-                                           sizeof (CamelVeeStoreClass),
-                                           (CamelObjectClassInitFunc) camel_vee_store_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_vee_store_init,
-                                           (CamelObjectFinalizeFunc) vee_store_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_vee_store_new:
  *
@@ -476,5 +465,5 @@ camel_vee_store_get_type (void)
 CamelVeeStore *
 camel_vee_store_new (void)
 {
-       return CAMEL_VEE_STORE (camel_object_new (camel_vee_store_get_type ()));
+       return g_object_new (CAMEL_TYPE_VEE_STORE, NULL);
 }
index 6ff28f4..ae16975 100644 (file)
 
 #include <camel/camel-store.h>
 
-#define CAMEL_VEE_STORE(obj)         CAMEL_CHECK_CAST (obj, camel_vee_store_get_type (), CamelVeeStore)
-#define CAMEL_VEE_STORE_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_store_get_type (), CamelVeeStoreClass)
-#define CAMEL_IS_VEE_STORE(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_store_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_VEE_STORE \
+       (camel_vee_store_get_type ())
+#define CAMEL_VEE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_VEE_STORE, CamelVeeStore))
+#define CAMEL_VEE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_VEE_STORE, CamelVeeStoreClass))
+#define CAMEL_IS_VEE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_VEE_STORE))
+#define CAMEL_IS_VEE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_VEE_STORE))
+#define CAMEL_VEE_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_VEE_STORE, CamelVeeStoreClass))
 
 G_BEGIN_DECLS
 
@@ -59,7 +74,7 @@ struct _CamelVeeStoreClass {
        CamelStoreClass parent_class;
 };
 
-CamelType      camel_vee_store_get_type        (void);
+GType          camel_vee_store_get_type        (void);
 CamelVeeStore *        camel_vee_store_new             (void);
 
 G_END_DECLS
index cf73c9c..d2ba26f 100644 (file)
 
 #define d(x)
 
-static CamelFolderSummaryClass *camel_vee_summary_parent;
 static const gchar *unread_str = " (and\n  \n     (match-all (not (system-flag  \"Seen\")))\n    \n  )\n;  (or\n  \n     (match-all (not (system-flag  \"Seen\")))\n    \n  )\n; (match-threads \"all\"  (and\n  \n     (match-all (not (system-flag  \"Seen\")))\n    \n  )\n)\n;  (match-threads \"all\"  (or\n  \n     (match-all (not (system-flag  \"Seen\")))\n    \n  )\n)\n;";
 
+G_DEFINE_TYPE (CamelVeeSummary, camel_vee_summary, CAMEL_TYPE_FOLDER_SUMMARY)
+
 static void
 vee_message_info_free(CamelFolderSummary *s, CamelMessageInfo *info)
 {
        CamelVeeMessageInfo *mi = (CamelVeeMessageInfo *)info;
 
        camel_pstring_free(info->uid);
-       camel_object_unref (mi->summary);
+       g_object_unref (mi->summary);
 }
 
 static CamelMessageInfo *
@@ -60,7 +61,7 @@ vee_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 
        to = (CamelVeeMessageInfo *)camel_message_info_new(s);
 
-       to->summary = camel_object_ref (from->summary);
+       to->summary = g_object_ref (from->summary);
        to->info.summary = s;
        to->info.uid = camel_pstring_strdup(from->info.uid);
 
@@ -358,7 +359,7 @@ message_info_from_uid (CamelFolderSummary *s, const gchar *uid)
                strncpy(tmphash, uid, 8);
                tmphash[8] = 0;
                vinfo->summary = g_hash_table_lookup(((CamelVeeFolder *) s->folder)->hashes, tmphash);
-               camel_object_ref (vinfo->summary);
+               g_object_ref (vinfo->summary);
                camel_folder_summary_insert (s, info, FALSE);
        }
        return info;
@@ -390,27 +391,6 @@ camel_vee_summary_init (CamelVeeSummary *vee_summary)
 {
 }
 
-CamelType
-camel_vee_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               camel_vee_summary_parent = (CamelFolderSummaryClass *)camel_folder_summary_get_type();
-
-               type = camel_type_register(
-                       camel_folder_summary_get_type(), "CamelVeeSummary",
-                       sizeof (CamelVeeSummary),
-                       sizeof (CamelVeeSummaryClass),
-                       (CamelObjectClassInitFunc) camel_vee_summary_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_vee_summary_init,
-                       NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_vee_summary_new:
  * @parent: Folder its attached to.
@@ -425,7 +405,7 @@ camel_vee_summary_new(CamelFolder *parent)
 {
        CamelVeeSummary *s;
 
-       s = (CamelVeeSummary *)camel_object_new(camel_vee_summary_get_type());
+       s = g_object_new (CAMEL_TYPE_VEE_SUMMARY, NULL);
        s->summary.folder = parent;
        s->force_counts = FALSE;
        s->fake_visible_count = 0;
@@ -479,7 +459,7 @@ camel_vee_summary_add(CamelVeeSummary *s, CamelFolderSummary *summary, const gch
                d(g_message ("%s - already there\n", vuid));
                g_free (vuid);
                if (!mi->summary)
-                       mi->summary = camel_object_ref (summary);
+                       mi->summary = g_object_ref (summary);
 
                camel_message_info_ref (mi);
                return mi;
@@ -490,7 +470,7 @@ camel_vee_summary_add(CamelVeeSummary *s, CamelFolderSummary *summary, const gch
        fcache = camel_folder_summary_get_flag_cache(summary);
        mi->old_flags = GPOINTER_TO_UINT(g_hash_table_lookup (fcache, uid));
        /* We would do lazy loading of flags, when the folders are loaded to memory through folder_reloaded signal */
-       camel_object_ref (summary);
+       g_object_ref (summary);
        mi->info.uid = (gchar *) camel_pstring_strdup (vuid);
        g_free (vuid);
        camel_message_info_ref (mi);
index 0b7855b..28ac2d3 100644 (file)
 
 #include <camel/camel-folder-summary.h>
 
-#define CAMEL_VEE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_vee_summary_get_type (), CamelVeeSummary)
-#define CAMEL_VEE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_summary_get_type (), CamelVeeSummaryClass)
-#define CAMEL_IS_VEE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_VEE_SUMMARY \
+       (camel_vee_summary_get_type ())
+#define CAMEL_VEE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_VEE_SUMMARY, CamelVeeSummary))
+#define CAMEL_VEE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_VEE_SUMMARY, CamelVeeSummaryClass))
+#define CAMEL_IS_VEE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_VEE_SUMMARY))
+#define CAMEL_IS_VEE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_VEE_SUMMARY))
+#define CAMEL_VEE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_VEE_SUMMARY, CamelVeeSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -59,7 +74,7 @@ struct _CamelVeeSummaryClass {
        CamelFolderSummaryClass parent_class;
 };
 
-CamelType      camel_vee_summary_get_type      (void);
+GType          camel_vee_summary_get_type      (void);
 CamelFolderSummary *
                camel_vee_summary_new           (struct _CamelFolder *parent);
 CamelVeeMessageInfo *
index f7e5bf0..b013308 100644 (file)
@@ -59,7 +59,7 @@ struct _transfer_data {
        gboolean delete;
 };
 
-static CamelVeeFolderClass *camel_vtrash_folder_parent;
+G_DEFINE_TYPE (CamelVTrashFolder, camel_vtrash_folder, CAMEL_TYPE_VEE_FOLDER)
 
 static void
 transfer_messages (CamelFolder *folder,
@@ -75,7 +75,7 @@ transfer_messages (CamelFolder *folder,
        for (i=0;i<md->uids->len;i++)
                g_free(md->uids->pdata[i]);
        g_ptr_array_free(md->uids, TRUE);
-       camel_object_unref (md->folder);
+       g_object_unref (md->folder);
        g_free(md);
 }
 
@@ -166,7 +166,7 @@ vtrash_folder_getv (CamelObject *object,
                arg->tag = (tag & CAMEL_ARG_TYPE) | CAMEL_ARG_IGNORE;
        }
 
-       return CAMEL_OBJECT_CLASS (camel_vtrash_folder_parent)->getv (object, ex, args);
+       return CAMEL_OBJECT_CLASS (camel_vtrash_folder_parent_class)->getv (object, ex, args);
 }
 
 static gboolean
@@ -243,7 +243,7 @@ vtrash_folder_transfer_messages_to (CamelFolder *source,
                        md = g_hash_table_lookup(batch, mi->summary->folder);
                        if (md == NULL) {
                                md = g_malloc0(sizeof(*md));
-                               md->folder = camel_object_ref (mi->summary->folder);
+                               md->folder = g_object_ref (mi->summary->folder);
                                md->uids = g_ptr_array_new();
                                md->dest = dest;
                                g_hash_table_insert(batch, mi->summary->folder, md);
@@ -271,8 +271,6 @@ camel_vtrash_folder_class_init (CamelVTrashFolderClass *class)
        CamelObjectClass *camel_object_class;
        CamelFolderClass *folder_class;
 
-       camel_vtrash_folder_parent = CAMEL_VEE_FOLDER_CLASS(camel_vee_folder_get_type());
-
        /* Not required from here on. We don't count */
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = vtrash_folder_getv;
@@ -287,25 +285,6 @@ camel_vtrash_folder_init (CamelVTrashFolder *vtrash_folder)
 {
 }
 
-CamelType
-camel_vtrash_folder_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (camel_vee_folder_get_type (),
-                                           "CamelVTrashFolder",
-                                           sizeof (CamelVTrashFolder),
-                                           sizeof (CamelVTrashFolderClass),
-                                           (CamelObjectClassInitFunc) camel_vtrash_folder_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_vtrash_folder_init,
-                                           NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_vtrash_folder_new:
  * @parent_store: the parent #CamelVeeStore object
@@ -323,7 +302,7 @@ camel_vtrash_folder_new (CamelStore *parent_store, camel_vtrash_folder_t type)
 
        g_assert(type < CAMEL_VTRASH_FOLDER_LAST);
 
-       vtrash = (CamelVTrashFolder *)camel_object_new(camel_vtrash_folder_get_type());
+       vtrash = g_object_new (CAMEL_TYPE_VTRASH_FOLDER, NULL);
        camel_vee_folder_construct(CAMEL_VEE_FOLDER (vtrash), parent_store, vdata[type].full_name, _(vdata[type].name),
                                   CAMEL_STORE_FOLDER_PRIVATE|CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_VEE_FOLDER_AUTO|CAMEL_STORE_VEE_FOLDER_SPECIAL);
 
index 87112ca..d9ee180 100644 (file)
 #include <camel/camel-folder.h>
 #include <camel/camel-vee-folder.h>
 
-#define CAMEL_VTRASH_FOLDER(obj)         CAMEL_CHECK_CAST (obj, camel_vtrash_folder_get_type (), CamelVTrashFolder)
-#define CAMEL_VTRASH_FOLDER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vtrash_folder_get_type (), CamelVTrashFolderClass)
-#define CAMEL_IS_VTRASH_FOLDER(obj)      CAMEL_CHECK_TYPE (obj, camel_vtrash_folder_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_VTRASH_FOLDER \
+       (camel_vtrash_folder_get_type ())
+#define CAMEL_VTRASH_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_VTRASH_FOLDER, CamelVTrashFolder))
+#define CAMEL_VTRASH_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_VTRASH_FOLDER, CamelVTrashFolderClass))
+#define CAMEL_IS_VTRASH_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_VTRASH_FOLDER))
+#define CAMEL_IS_VTRASH_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_VTRASH_FOLDER))
+#define CAMEL_VTRASH_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_VTRASH_FOLDER, CamelVTrashFolderClass))
 
 #define CAMEL_VTRASH_NAME      ".#evolution/Trash"
 #define CAMEL_VJUNK_NAME       ".#evolution/Junk"
@@ -59,7 +74,7 @@ struct _CamelVTrashFolderClass {
        CamelVeeFolderClass parent_class;
 };
 
-CamelType      camel_vtrash_folder_get_type    (void);
+GType          camel_vtrash_folder_get_type    (void);
 CamelFolder *  camel_vtrash_folder_new         (CamelStore *parent_store,
                                                 camel_vtrash_folder_t type);
 
index 9bf0796..f9214a0 100644 (file)
@@ -72,9 +72,6 @@ camel_init (const gchar *configdir, gboolean nss_init)
 
        camel_debug_init();
 
-       /* initialise global camel_object_type */
-       camel_object_get_type ();
-
 #ifdef HAVE_NSS
        if (nss_init) {
                gchar *nss_configdir;
@@ -137,7 +134,7 @@ camel_init (const gchar *configdir, gboolean nss_init)
        /* set this certdb as the default db */
        camel_certdb_set_default (certdb);
 
-       camel_object_unref (certdb);
+       g_object_unref (certdb);
 
        initialised = TRUE;
 
index 4a776f9..3465e86 100644 (file)
@@ -91,6 +91,7 @@
 #include <camel/camel-net-utils.h>
 #include <camel/camel-nntp-address.h>
 #include <camel/camel-object.h>
+#include <camel/camel-object-bag.h>
 #include <camel/camel-offline-folder.h>
 #include <camel/camel-offline-journal.h>
 #include <camel/camel-offline-store.h>
index d678fb1..5d47efe 100644 (file)
@@ -61,7 +61,9 @@ which needs to be better organized via functions */
 #define MAX_ATTACHMENT_SIZE 1*1024*1024   /*In bytes*/
 #define GROUPWISE_BULK_DELETE_LIMIT 100
 
-static gpointer camel_groupwise_folder_parent_class;
+#define CAMEL_GROUPWISE_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_GROUPWISE_FOLDER, CamelGroupwiseFolderPrivate))
 
 struct _CamelGroupwiseFolderPrivate {
 
@@ -96,6 +98,8 @@ static gboolean groupwise_sync (CamelFolder *folder, gboolean expunge, CamelMess
 static const gchar * GET_ITEM_VIEW_WITH_CACHE = "peek default recipient threading attachments subject status priority startDate created delivered size recurrenceKey message notification";
 static const gchar * GET_ITEM_VIEW_WITHOUT_CACHE = "peek default recipient threading hasAttachment subject status priority startDate created delivered size recurrenceKey";
 
+G_DEFINE_TYPE (CamelGroupwiseFolder, camel_groupwise_folder, CAMEL_TYPE_OFFLINE_FOLDER)
+
 static gchar *
 groupwise_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex)
 {
@@ -140,9 +144,9 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
                                camel_exception_setv (
                                        ex, CAMEL_EXCEPTION_USER_CANCEL,
                                        _("User canceled"));
-                               camel_object_unref (msg);
-                               camel_object_unref (cache_stream);
-                               camel_object_unref (stream);
+                               g_object_unref (msg);
+                               g_object_unref (cache_stream);
+                               g_object_unref (stream);
                                camel_message_info_free (&mi->info);
                                return NULL;
                        } else {
@@ -150,13 +154,13 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
                                        ex, CAMEL_EXCEPTION_SYSTEM,
                                        _("Cannot get message %s: %s"),
                                        uid, g_strerror (errno));
-                               camel_object_unref (msg);
+                               g_object_unref (msg);
                                msg = NULL;
                        }
                }
-               camel_object_unref (cache_stream);
+               g_object_unref (cache_stream);
        }
-       camel_object_unref (stream);
+       g_object_unref (stream);
 
        if (msg != NULL) {
                camel_message_info_free (&mi->info);
@@ -219,7 +223,7 @@ groupwise_folder_get_message( CamelFolder *folder, const gchar *uid, CamelExcept
                if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, cache_stream) == -1
                                || camel_stream_flush (cache_stream) == -1)
                        camel_data_cache_remove (gw_folder->cache, "cache", uid, NULL);
-               camel_object_unref (cache_stream);
+               g_object_unref (cache_stream);
        }
 
        CAMEL_GROUPWISE_FOLDER_REC_UNLOCK (folder, cache_lock);
@@ -335,7 +339,7 @@ groupwise_populate_msg_body_from_item (EGwConnection *cnc, CamelMultipart *multi
 
        camel_multipart_set_boundary (multipart, NULL);
        camel_multipart_add_part (multipart, part);
-       camel_object_unref (part);
+       g_object_unref (part);
 }
 
 /* Set the recipients list in the message from the item */
@@ -985,7 +989,7 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
        gchar *summary_file, *state_file, *journal_file;
        gchar *short_name;
 
-       folder = CAMEL_FOLDER (camel_object_new(camel_groupwise_folder_get_type ()) );
+       folder = g_object_new (CAMEL_TYPE_GROUPWISE_FOLDER, NULL);
 
        gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
        short_name = strrchr (folder_name, '/');
@@ -999,7 +1003,7 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
        folder->summary = camel_groupwise_summary_new(folder, summary_file);
        g_free(summary_file);
        if (!folder->summary) {
-               camel_object_unref (CAMEL_OBJECT (folder));
+               g_object_unref (CAMEL_OBJECT (folder));
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        _("Could not load summary for %s"), folder_name);
@@ -1014,7 +1018,7 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
 
        gw_folder->cache = camel_data_cache_new (folder_dir ,ex);
        if (!gw_folder->cache) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                return NULL;
        }
 
@@ -1022,7 +1026,7 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
        gw_folder->journal = camel_groupwise_journal_new (gw_folder, journal_file);
        g_free (journal_file);
        if (!gw_folder->journal) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                return NULL;
        }
 
@@ -1033,7 +1037,7 @@ camel_gw_folder_new(CamelStore *store, const gchar *folder_name, const gchar *fo
 
        gw_folder->search = camel_folder_search_new ();
        if (!gw_folder->search) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                return NULL;
        }
 
@@ -1163,7 +1167,7 @@ update_free (CamelSession *session, CamelSessionThreadMsg *msg)
 
        g_free (m->t_str);
        g_free (m->container_id);
-       camel_object_unref (m->folder);
+       g_object_unref (m->folder);
        g_slist_foreach (m->slist, (GFunc) g_free, NULL);
        g_slist_free (m->slist);
        m->slist = NULL;
@@ -1464,7 +1468,7 @@ groupwise_refresh_folder(CamelFolder *folder, CamelException *ex)
                msg->cnc = cnc;
                msg->t_str = g_strdup (old_sync_time);
                msg->container_id = g_strdup (container_id);
-               msg->folder = camel_object_ref (folder);
+               msg->folder = g_object_ref (folder);
                camel_session_thread_queue (session, &msg->msg, 0);
                /*thread creation and queueing done*/
        }
@@ -1760,7 +1764,7 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean
                                /* add to cache if its a new message*/
                                t_cache_stream  = camel_data_cache_get (gw_folder->cache, "cache", id, ex);
                                if (t_cache_stream) {
-                                               camel_object_unref (t_cache_stream);
+                                               g_object_unref (t_cache_stream);
 
                                                mail_msg = groupwise_folder_item_to_msg (folder, item, ex);
                                                if (mail_msg)
@@ -1770,10 +1774,10 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean
                                                if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", id, NULL))) {
                                                                if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) mail_msg,  cache_stream) == -1 || camel_stream_flush (cache_stream) == -1)
                                                                                camel_data_cache_remove (gw_folder->cache, "cache", id, NULL);
-                                                               camel_object_unref (cache_stream);
+                                                               g_object_unref (cache_stream);
                                                }
 
-                                               camel_object_unref (mail_msg);
+                                               g_object_unref (mail_msg);
                                                CAMEL_GROUPWISE_FOLDER_REC_UNLOCK (folder, cache_lock);
                                }
                                /******************** Caching stuff ends *************************/
@@ -2110,8 +2114,8 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
        if (has_mime_822 && body) {
                temp_stream = camel_stream_mem_new_with_buffer (body, body_len);
                if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) msg, temp_stream) == -1) {
-                       camel_object_unref (msg);
-                       camel_object_unref (temp_stream);
+                       g_object_unref (msg);
+                       g_object_unref (temp_stream);
                        msg = NULL;
                        goto end;
                }
@@ -2211,8 +2215,8 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
                                        camel_medium_set_content (CAMEL_MEDIUM (part),CAMEL_DATA_WRAPPER(temp_msg));
 
                                        camel_multipart_add_part (multipart,part);
-                                       camel_object_unref (temp_msg);
-                                       camel_object_unref (part);
+                                       g_object_unref (temp_msg);
+                                       g_object_unref (part);
                                }
                                g_object_unref (temp_item);
                        } else {
@@ -2293,7 +2297,7 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
                                        camel_multipart_set_boundary(multipart, NULL);
                                        camel_multipart_add_part (multipart, part);
 
-                                       camel_object_unref (part);
+                                       g_object_unref (part);
                                        g_free (attachment);
                                } /* if attachment */
                        }
@@ -2310,7 +2314,7 @@ groupwise_folder_item_to_msg( CamelFolder *folder,
                camel_medium_add_header ( CAMEL_MEDIUM (msg), "Security", e_gw_item_get_security(item));
 
        camel_medium_set_content (CAMEL_MEDIUM (msg), CAMEL_DATA_WRAPPER(multipart));
-       camel_object_unref (multipart);
+       g_object_unref (multipart);
 
 end:
        if (body)
@@ -2538,7 +2542,7 @@ groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
                                break;
 
                        camel_groupwise_journal_transfer (journal, (CamelGroupwiseFolder *)source, message, info, uids->pdata[i], NULL, ex);
-                       camel_object_unref (message);
+                       g_object_unref (message);
 
                        if (camel_exception_is_set (ex))
                                break;
@@ -2798,23 +2802,35 @@ groupwise_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2)
 }
 
 static void
-groupwise_folder_finalize (CamelGroupwiseFolder *gw_folder)
+groupwise_folder_dispose (GObject *object)
 {
-       g_free (gw_folder->priv);
+       CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (object);
+
+       if (gw_folder->cache != NULL) {
+               g_object_unref (gw_folder->cache);
+               gw_folder->cache = NULL;
+       }
 
-       if (gw_folder->cache)
-               camel_object_unref (gw_folder->cache);
-       if (gw_folder->search)
-               camel_object_unref (gw_folder->search);
+       if (gw_folder->search != NULL) {
+               g_object_unref (gw_folder->search);
+               gw_folder->search = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_groupwise_folder_parent_class)->dispose (object);
 }
 
 static void
 camel_groupwise_folder_class_init (CamelGroupwiseFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelFolderClass *folder_class;
 
-       camel_groupwise_folder_parent_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelGroupwiseFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = groupwise_folder_dispose;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = gw_getv;
@@ -2841,7 +2857,7 @@ camel_groupwise_folder_init (CamelGroupwiseFolder *gw_folder)
 {
        CamelFolder *folder = CAMEL_FOLDER (gw_folder);
 
-       gw_folder->priv = g_malloc0 (sizeof(*gw_folder->priv));
+       gw_folder->priv = CAMEL_GROUPWISE_FOLDER_GET_PRIVATE (gw_folder);
 
        folder->permanent_flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED |
                CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN;
@@ -2856,26 +2872,6 @@ camel_groupwise_folder_init (CamelGroupwiseFolder *gw_folder)
        gw_folder->need_rescan = TRUE;
 }
 
-CamelType
-camel_groupwise_folder_get_type (void)
-{
-       static CamelType camel_groupwise_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_groupwise_folder_type == CAMEL_INVALID_TYPE) {
-               camel_groupwise_folder_type =
-                       camel_type_register (camel_offline_folder_get_type (),
-                                       "CamelGroupwiseFolder",
-                                       sizeof (CamelGroupwiseFolder),
-                                       sizeof (CamelGroupwiseFolderClass),
-                                       (CamelObjectClassInitFunc) camel_groupwise_folder_class_init,
-                                       NULL,
-                                       (CamelObjectInitFunc) camel_groupwise_folder_init,
-                                       (CamelObjectFinalizeFunc) groupwise_folder_finalize);
-       }
-
-       return camel_groupwise_folder_type;
-}
-
 static gint
 gw_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args)
 {
index aed6b14..937818e 100644 (file)
 
 #include "camel-groupwise-summary.h"
 
-#define CAMEL_GROUPWISE_FOLDER_TYPE     (camel_groupwise_folder_get_type ())
-#define CAMEL_GROUPWISE_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_GROUPWISE_FOLDER_TYPE, CamelGroupwiseFolder))
-#define CAMEL_GROUPWISE_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_GROUPWISE_FOLDER_TYPE, CamelGroupwiseFolderClass))
-#define CAMEL_IS_GROUPWISE_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_GROUPWISE_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_FOLDER \
+       (camel_groupwise_folder_get_type ())
+#define CAMEL_GROUPWISE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_FOLDER, CamelGroupwiseFolder))
+#define CAMEL_GROUPWISE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_FOLDER, CamelGroupwiseFolderClass))
+#define CAMEL_IS_GROUPWISE_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_FOLDER))
+#define CAMEL_IS_GROUPWISE_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_FOLDER))
+#define CAMEL_GROUPWISE_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_FOLDER, CamelGroupwiseFolderClass))
 
 G_BEGIN_DECLS
 
@@ -64,7 +78,7 @@ struct _CamelGroupwiseFolderClass {
 
 } ;
 
-CamelType camel_groupwise_folder_get_type (void);
+GType camel_groupwise_folder_get_type (void);
 
 /* implemented */
 CamelFolder * camel_gw_folder_new(CamelStore *store, const gchar *folder_dir, const gchar *folder_name, CamelException *ex);
index 558a604..a854978 100644 (file)
@@ -46,15 +46,13 @@ static CamelDListNode *groupwise_entry_load (CamelOfflineJournal *journal, FILE
 static gint groupwise_entry_write (CamelOfflineJournal *journal, CamelDListNode *entry, FILE *out);
 static gint groupwise_entry_play (CamelOfflineJournal *journal, CamelDListNode *entry, CamelException *ex);
 
-static gpointer camel_groupwise_journal_parent_class;
+G_DEFINE_TYPE (CamelGroupwiseJournal, camel_groupwise_journal, CAMEL_TYPE_OFFLINE_JOURNAL)
 
 static void
 camel_groupwise_journal_class_init (CamelGroupwiseJournalClass *class)
 {
        CamelOfflineJournalClass *offline_journal_class;
 
-       camel_groupwise_journal_parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
-
        offline_journal_class = CAMEL_OFFLINE_JOURNAL_CLASS (class);
        offline_journal_class->entry_free = groupwise_entry_free;
        offline_journal_class->entry_load = groupwise_entry_load;
@@ -67,25 +65,6 @@ camel_groupwise_journal_init (CamelGroupwiseJournal *groupwise_journal)
 {
 }
 
-CamelType
-camel_groupwise_journal_get_type (void)
-{
-       static CamelType type = NULL;
-
-       if (!type) {
-               type = camel_type_register (camel_offline_journal_get_type (),
-                                           "CamelGroupwiseJournal",
-                                           sizeof (CamelGroupwiseJournal),
-                                           sizeof (CamelGroupwiseJournalClass),
-                                           (CamelObjectClassInitFunc) camel_groupwise_journal_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_groupwise_journal_init,
-                                           (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 static void
 groupwise_entry_free (CamelOfflineJournal *journal, CamelDListNode *entry)
 {
@@ -192,12 +171,12 @@ groupwise_entry_play_append (CamelOfflineJournal *journal, CamelGroupwiseJournal
 
        message = camel_mime_message_new ();
        if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) message, stream) == -1) {
-               camel_object_unref (message);
-               camel_object_unref (stream);
+               g_object_unref (message);
+               g_object_unref (stream);
                goto done;
        }
 
-       camel_object_unref (stream);
+       g_object_unref (stream);
 
        if (!(info = camel_folder_summary_uid (folder->summary, entry->uid))) {
                /* Note: this should never happen, but rather than crash lets make a new info */
@@ -206,7 +185,7 @@ groupwise_entry_play_append (CamelOfflineJournal *journal, CamelGroupwiseJournal
 
        success = camel_folder_append_message (folder, message, info, NULL, ex);
        camel_message_info_free (info);
-       camel_object_unref (message);
+       g_object_unref (message);
 
        if (!success)
                return -1;
@@ -252,7 +231,7 @@ groupwise_entry_play_transfer (CamelOfflineJournal *journal, CamelGroupwiseJourn
 
                g_ptr_array_free (xuids, TRUE);
                g_ptr_array_free (uids, TRUE);
-               camel_object_unref (src);
+               g_object_unref (src);
        } else if (!name) {
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SYSTEM,
@@ -298,7 +277,7 @@ camel_groupwise_journal_new (CamelGroupwiseFolder *folder, const gchar *filename
 
        g_return_val_if_fail (CAMEL_IS_GROUPWISE_FOLDER (folder), NULL);
 
-       journal = (CamelOfflineJournal *) camel_object_new (camel_groupwise_journal_get_type ());
+       journal = g_object_new (CAMEL_TYPE_OFFLINE_JOURNAL, NULL);
        camel_offline_journal_construct (journal, (CamelFolder *) folder, filename);
 
        return journal;
@@ -340,12 +319,12 @@ update_cache (CamelGroupwiseJournal *groupwise_journal, CamelMimeMessage *messag
                        g_strerror (errno));
                camel_data_cache_remove (groupwise_folder->cache, "cache", uid, NULL);
                folder->summary->nextuid--;
-               camel_object_unref (cache);
+               g_object_unref (cache);
                g_free (uid);
                return FALSE;
        }
 
-       camel_object_unref (cache);
+       g_object_unref (cache);
 
        info = camel_folder_summary_info_new_from_message (folder->summary, message, NULL);
        camel_pstring_free(info->uid);
index b16349c..d6246ea 100644 (file)
 #include <stdarg.h>
 #include <camel/camel.h>
 
-#define CAMEL_TYPE_GROUPWISE_JOURNAL            (camel_groupwise_journal_get_type ())
-#define CAMEL_GROUPWISE_JOURNAL(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournal))
-#define CAMEL_GROUPWISE_JOURNAL_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournalClass))
-#define CAMEL_IS_GROUPWISE_JOURNAL(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL))
-#define CAMEL_IS_GROUPWISE_JOURNAL_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_GROUPWISE_JOURNAL))
-#define CAMEL_GROUPWISE_JOURNAL_GET_CLASS(obj)  (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournalClass))
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_JOURNAL \
+       (camel_groupwise_journal_get_type ())
+#define CAMEL_GROUPWISE_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournal))
+#define CAMEL_GROUPWISE_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournalClass))
+#define CAMEL_IS_GROUPWISE_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL))
+#define CAMEL_IS_GROUPWISE_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_JOURNAL))
+#define CAMEL_GROUPWISE_JOURNAL_GET_CLASS(obj) \
+       (CAMEL_CHECK_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_JOURNAL, CamelGroupwiseJournalClass))
 
 G_BEGIN_DECLS
 
@@ -66,7 +78,7 @@ struct _CamelGroupwiseJournalClass {
 
 };
 
-CamelType camel_groupwise_journal_get_type (void);
+GType camel_groupwise_journal_get_type (void);
 
 CamelOfflineJournal *camel_groupwise_journal_new (struct _CamelGroupwiseFolder *folder, const gchar *filename);
 
index 5bdf956..8bcd0b6 100644 (file)
@@ -50,15 +50,13 @@ static void store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint
 static const gchar *store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type);
 CamelGroupwiseStoreNamespace *camel_groupwise_store_summary_namespace_find_full(CamelGroupwiseStoreSummary *s, const gchar *full);
 
-static gpointer camel_groupwise_store_summary_parent_class;
+G_DEFINE_TYPE (CamelGroupwiseStoreSummary, camel_groupwise_store_summary, CAMEL_TYPE_STORE_SUMMARY)
 
 static void
 camel_groupwise_store_summary_class_init (CamelGroupwiseStoreSummaryClass *class)
 {
        CamelStoreSummaryClass *store_summary_class;
 
-       camel_groupwise_store_summary_parent_class = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-
        store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
        store_summary_class->summary_header_load = summary_header_load;
        store_summary_class->summary_header_save = summary_header_save;
@@ -78,29 +76,10 @@ camel_groupwise_store_summary_init (CamelGroupwiseStoreSummary *gw_summary)
        gw_summary->version = CAMEL_GW_STORE_SUMMARY_VERSION;
 }
 
-CamelType
-camel_groupwise_store_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_store_summary_get_type (),
-                               "CamelGroupwiseStoreSummary",
-                               sizeof (CamelGroupwiseStoreSummary),
-                               sizeof (CamelGroupwiseStoreSummaryClass),
-                               (CamelObjectClassInitFunc) camel_groupwise_store_summary_class_init,
-                               NULL,
-                               (CamelObjectInitFunc) camel_groupwise_store_summary_init,
-                               (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 CamelGroupwiseStoreSummary *
 camel_groupwise_store_summary_new (void)
 {
-       return CAMEL_GW_STORE_SUMMARY ( camel_object_new (camel_groupwise_store_summary_get_type ()));
+       return g_object_new (CAMEL_TYPE_GROUPWISE_STORE_SUMMARY, NULL);
 }
 
 CamelGroupwiseStoreInfo *
index 59a0b91..45eebf7 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_GW_STORE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_groupwise_store_summary_get_type (), CamelGroupwiseStoreSummary)
-#define CAMEL_GW_STORE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_groupwise_store_summary_get_type (), CamelGroupwiseStoreSummaryClass)
-#define CAMEL_IS_GW_STORE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_groupwise_store_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_STORE_SUMMARY \
+       (camel_groupwise_store_summary_get_type ())
+#define CAMEL_GROUPWISE_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE_SUMMARY, CamelGroupwiseStoreSummary))
+#define CAMEL_GROUPWISE_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_STORE_SUMMARY, CamelGroupwiseStoreSummaryClass))
+#define CAMEL_IS_GROUPWISE_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE_SUMMARY))
+#define CAMEL_IS_GROUPWISE_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_STORE_SUMMARY))
+#define CAMEL_GROUPWISE_STORE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE_SUMMARY, CamelGroupwiseStoreSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -68,7 +83,7 @@ struct _CamelGroupwiseStoreSummaryClass {
        CamelStoreSummaryClass summary_class;
 };
 
-CamelType                        camel_groupwise_store_summary_get_type      (void);
+GType                        camel_groupwise_store_summary_get_type      (void);
 CamelGroupwiseStoreSummary      *camel_groupwise_store_summary_new        (void);
 CamelGroupwiseStoreInfo *camel_groupwise_store_summary_full_name(CamelGroupwiseStoreSummary *s, const gchar *full_name);
 CamelGroupwiseStoreInfo *camel_groupwise_store_summary_add_from_full(CamelGroupwiseStoreSummary *s, const gchar *full, gchar dir_sep);
index 995ed8b..b152258 100644 (file)
 #define JUNK_ENABLE 1
 #define JUNK_PERSISTENCE 14
 
+#define CAMEL_GROUPWISE_STORE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE, CamelGroupwiseStorePrivate))
+
 const gchar * CREATE_CURSOR_VIEW = "peek id default recipient threading hasAttachment subject status priority startDate created delivered size recurrenceKey";
 
 struct _CamelGroupwiseStorePrivate {
@@ -70,13 +74,13 @@ struct _CamelGroupwiseStorePrivate {
        EGwConnection *cnc;
 };
 
-static gpointer camel_groupwise_store_parent_class;
-
 extern CamelServiceAuthType camel_groupwise_password_authtype; /*for the query_auth_types function*/
 static CamelFolderInfo *convert_to_folder_info (CamelGroupwiseStore *store, EGwContainer *container, const gchar *url, CamelException *ex);
 static gboolean groupwise_folders_sync (CamelGroupwiseStore *store, CamelException *ex);
 static gint match_path(const gchar *path, const gchar *name);
 
+G_DEFINE_TYPE (CamelGroupwiseStore, camel_groupwise_store, CAMEL_TYPE_OFFLINE_STORE)
+
 static gboolean
 groupwise_store_construct (CamelService *service, CamelSession *session,
                           CamelProvider *provider, CamelURL *url,
@@ -263,12 +267,12 @@ groupwise_store_set_current_folder (CamelGroupwiseStore *groupwise_store, CamelF
        camel_service_lock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
 
        if (groupwise_store->current_folder) {
-               camel_object_unref (groupwise_store->current_folder);
+               g_object_unref (groupwise_store->current_folder);
                groupwise_store->current_folder = NULL;
        }
 
        if (folder)
-               groupwise_store->current_folder = camel_object_ref (folder);
+               groupwise_store->current_folder = g_object_ref (folder);
 
        camel_service_unlock (CAMEL_SERVICE (groupwise_store), CS_REC_CONNECT_LOCK);
 }
@@ -295,6 +299,7 @@ groupwise_connect (CamelService *service, CamelException *ex)
                camel_service_construct (service, service->session, service->provider, service->url, ex);
        }
 
+
        camel_service_lock (service, CS_REC_CONNECT_LOCK);
 
        if (priv->cnc) {
@@ -344,10 +349,9 @@ groupwise_disconnect_cleanup (CamelService *service, gboolean clean, CamelExcept
        CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (service);
        CamelGroupwiseStorePrivate *priv = groupwise_store->priv;
 
-       g_print ("camel_groupwise_store_finalize\n");
        if (groupwise_store->summary) {
                camel_store_summary_save ((CamelStoreSummary *)groupwise_store->summary);
-               camel_object_unref (groupwise_store->summary);
+               g_object_unref (groupwise_store->summary);
        }
 
        if (priv) {
@@ -648,7 +652,7 @@ groupwise_get_folder (CamelStore *store, const gchar *folder_name, guint32 flags
                                                camel_folder_summary_save_to_db (folder->summary, ex);
                                                camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
                                                camel_operation_end (NULL);
-                                               camel_object_unref (folder);
+                                               g_object_unref (folder);
                                                g_free (container_id);
                                                return NULL;*/
                                }
@@ -1117,7 +1121,7 @@ store_refresh_free(CamelSession *session, CamelSessionThreadMsg *msg)
 {
        struct _store_refresh_msg *m = (struct _store_refresh_msg *)msg;
 
-       camel_object_unref (m->store);
+       g_object_unref (m->store);
        camel_exception_clear (&m->ex);
 }
 
@@ -1487,15 +1491,35 @@ match_path(const gchar *path, const gchar *name)
 }
 
 static void
-groupwise_store_finalize (CamelGroupwiseStore *groupwise_store)
+groupwise_store_dispose (GObject *object)
 {
-       CamelGroupwiseStorePrivate *priv = groupwise_store->priv;
+       CamelGroupwiseStore *groupwise_store;
+
+       groupwise_store = CAMEL_GROUPWISE_STORE (object);
 
        if (groupwise_store->summary != NULL) {
-               camel_store_summary_save ((CamelStoreSummary *)groupwise_store->summary);
-               camel_object_unref (groupwise_store->summary);
+               camel_store_summary_save (
+                       CAMEL_STORE_SUMMARY (groupwise_store->summary));
+               g_object_unref (groupwise_store->summary);
+               groupwise_store->summary = NULL;
        }
 
+       if (groupwise_store->priv->cnc != NULL) {
+               g_object_unref (groupwise_store->priv->cnc);
+               groupwise_store->priv->cnc = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_groupwise_store_parent_class)->dispose (object);
+}
+
+static void
+groupwise_store_finalize (GObject *object)
+{
+       CamelGroupwiseStore *groupwise_store;
+
+       groupwise_store = CAMEL_GROUPWISE_STORE (object);
+
        g_free (groupwise_store->priv->user);
        g_free (groupwise_store->priv->server_name);
        g_free (groupwise_store->priv->port);
@@ -1504,31 +1528,31 @@ groupwise_store_finalize (CamelGroupwiseStore *groupwise_store)
        g_free (groupwise_store->priv->storage_path);
        g_free (groupwise_store->root_container);
 
-
-       if (E_IS_GW_CONNECTION (groupwise_store->priv->cnc)) {
-               g_object_unref (groupwise_store->priv->cnc);
-               groupwise_store->priv->cnc = NULL;
-       }
-
        if (groupwise_store->priv->id_hash != NULL)
-               g_hash_table_destroy (priv->id_hash);
+               g_hash_table_destroy (groupwise_store->priv->id_hash);
 
        if (groupwise_store->priv->name_hash != NULL)
-               g_hash_table_destroy (priv->name_hash);
+               g_hash_table_destroy (groupwise_store->priv->name_hash);
 
        if (groupwise_store->priv->parent_hash != NULL)
-               g_hash_table_destroy (priv->parent_hash);
+               g_hash_table_destroy (groupwise_store->priv->parent_hash);
 
-       g_free (groupwise_store->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_groupwise_store_parent_class)->finalize (object);
 }
 
 static void
 camel_groupwise_store_class_init (CamelGroupwiseStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_groupwise_store_parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelGroupwiseStorePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = groupwise_store_dispose;
+       object_class->finalize = groupwise_store_finalize;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = groupwise_store_construct;
@@ -1553,7 +1577,8 @@ camel_groupwise_store_class_init (CamelGroupwiseStoreClass *class)
 static void
 camel_groupwise_store_init (CamelGroupwiseStore *groupwise_store)
 {
-       groupwise_store->priv = g_new0 (CamelGroupwiseStorePrivate, 1);
+       groupwise_store->priv =
+               CAMEL_GROUPWISE_STORE_GET_PRIVATE (groupwise_store);
 
        d("in groupwise store init\n");
        groupwise_store->priv->server_name = NULL;
@@ -1563,23 +1588,3 @@ camel_groupwise_store_init (CamelGroupwiseStore *groupwise_store)
        groupwise_store->priv->cnc = NULL;
        groupwise_store->current_folder = NULL;
 }
-
-CamelType
-camel_groupwise_store_get_type (void)
-{
-       static CamelType camel_groupwise_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_groupwise_store_type == CAMEL_INVALID_TYPE)   {
-               camel_groupwise_store_type =
-                       camel_type_register (camel_offline_store_get_type (),
-                                            "CamelGroupwiseStore",
-                                            sizeof (CamelGroupwiseStore),
-                                            sizeof (CamelGroupwiseStoreClass),
-                                            (CamelObjectClassInitFunc) camel_groupwise_store_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_groupwise_store_init,
-                                            (CamelObjectFinalizeFunc) groupwise_store_finalize);
-       }
-
-       return camel_groupwise_store_type;
-}
index b52f2a0..02bb9a6 100644 (file)
 #include <e-gw-connection.h>
 #include <e-gw-container.h>
 
-#define CAMEL_GROUPWISE_STORE_TYPE     (camel_groupwise_store_get_type ())
-#define CAMEL_GROUPWISE_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_GROUPWISE_STORE_TYPE, CamelGroupwiseStore))
-#define CAMEL_GROUPWISE_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_GROUPWISE_STORE_TYPE, CamelGroupwiseStoreClass))
-#define CAMEL_IS_GROUPWISE_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_GROUPWISE_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_STORE \
+       (camel_groupwise_store_get_type ())
+#define CAMEL_GROUPWISE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE, CamelGroupwiseStore))
+#define CAMEL_GROUPWISE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_STORE, CamelGroupwiseStoreClass))
+#define CAMEL_IS_GROUPWISE_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE))
+#define CAMEL_IS_GROUPWISE_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_STORE))
+#define CAMEL_GROUPWISE_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_STORE, CamelGroupwiseStoreClass))
 
 #define GW_PARAM_FILTER_INBOX          (1 << 0)
 
@@ -62,7 +76,7 @@ struct _CamelGroupwiseStoreClass {
        CamelOfflineStoreClass parent_class;
 };
 
-CamelType camel_groupwise_store_get_type (void);
+GType camel_groupwise_store_get_type (void);
 gchar * groupwise_get_name(CamelService *service, gboolean brief);
 
 /*IMplemented*/
index 601c896..f8f1cb1 100644 (file)
@@ -63,7 +63,7 @@ static CamelMessageContentInfo * content_info_from_db (CamelFolderSummary *s, Ca
 
 /*End of Prototypes*/
 
-static gpointer camel_groupwise_summary_parent_class;
+G_DEFINE_TYPE (CamelGroupwiseSummary, camel_groupwise_summary, CAMEL_TYPE_FOLDER_SUMMARY)
 
 static CamelMessageInfo *
 gw_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
@@ -85,8 +85,6 @@ camel_groupwise_summary_class_init (CamelGroupwiseSummaryClass *class)
 {
        CamelFolderSummaryClass *folder_summary_class;
 
-       camel_groupwise_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
-
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelGroupwiseMessageInfo);
        folder_summary_class->content_info_size = sizeof (CamelGroupwiseMessageContentInfo);
@@ -115,25 +113,6 @@ camel_groupwise_summary_init (CamelGroupwiseSummary *gw_summary)
        summary->meta_summary->uid_len = 2048;
 }
 
-CamelType
-camel_groupwise_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(
-                               camel_folder_summary_get_type(), "CamelGroupwiseSummary",
-                               sizeof (CamelGroupwiseSummary),
-                               sizeof (CamelGroupwiseSummaryClass),
-                               (CamelObjectClassInitFunc) camel_groupwise_summary_class_init,
-                               NULL,
-                               (CamelObjectInitFunc) camel_groupwise_summary_init,
-                               NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_groupwise_summary_new:
  * @filename: the file to store the summary in.
@@ -149,7 +128,7 @@ camel_groupwise_summary_new (struct _CamelFolder *folder, const gchar *filename)
        CamelFolderSummary *summary;
        CamelException ex;
 
-       summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_groupwise_summary_get_type ()));
+       summary = g_object_new (CAMEL_TYPE_GROUPWISE_SUMMARY, NULL);
        summary->folder = folder;
        camel_folder_summary_set_build_content (summary, TRUE);
        camel_folder_summary_set_filename (summary, filename);
index 1056af5..fbe84b4 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_GROUPWISE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_groupwise_summary_get_type (), CamelGroupwiseSummary)
-#define CAMEL_GROUPWISE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_groupwise_summary_get_type (), CamelGroupwiseSummaryClass)
-#define CAMEL_IS_GROUPWISE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_groupwise_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_SUMMARY \
+       (camel_groupwise_summary_get_type ())
+#define CAMEL_GROUPWISE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_SUMMARY, CamelGroupwiseSummary))
+#define CAMEL_GROUPWISE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_SUMMARY, CamelGroupwiseSummaryClass))
+#define CAMEL_IS_GROUPWISE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_SUMMARY))
+#define CAMEL_IS_GROUPWISE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_SUMMARY))
+#define CAMEL_GROUPWISE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_SUMMARY, CamelGroupwiseSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -63,7 +78,7 @@ struct _CamelGroupwiseSummaryClass {
        CamelFolderSummaryClass parent_class;
 } ;
 
-CamelType camel_groupwise_summary_get_type (void);
+GType camel_groupwise_summary_get_type (void);
 
 CamelFolderSummary *camel_groupwise_summary_new (struct _CamelFolder *folder, const gchar *filename);
 
index 2880fe5..786ec13 100644 (file)
@@ -36,7 +36,7 @@
 
 #define REPLY_VIEW "default message attachments threading"
 
-static gpointer camel_groupwise_transport_parent_class;
+G_DEFINE_TYPE (CamelGroupwiseTransport, camel_groupwise_transport, CAMEL_TYPE_TRANSPORT)
 
 static gboolean
 groupwise_transport_connect (CamelService *service,
@@ -173,8 +173,6 @@ camel_groupwise_transport_class_init (CamelGroupwiseTransportClass *class)
        CamelServiceClass *service_class;
        CamelTransportClass *transport_class;
 
-       camel_groupwise_transport_parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->connect = groupwise_transport_connect;
        service_class->get_name = groupwise_transport_get_name;
@@ -187,23 +185,3 @@ static void
 camel_groupwise_transport_init (CamelGroupwiseTransport *groupwise_transport)
 {
 }
-
-CamelType
-camel_groupwise_transport_get_type (void)
-{
-       static CamelType camel_groupwise_transport_type = CAMEL_INVALID_TYPE;
-
-       if (camel_groupwise_transport_type == CAMEL_INVALID_TYPE) {
-               camel_groupwise_transport_type =
-                       camel_type_register (CAMEL_TRANSPORT_TYPE,
-                                            "CamelGroupwiseTransport",
-                                            sizeof (CamelGroupwiseTransport),
-                                            sizeof (CamelGroupwiseTransportClass),
-                                            (CamelObjectClassInitFunc) camel_groupwise_transport_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_groupwise_transport_init,
-                                            NULL);
-       }
-
-       return camel_groupwise_transport_type;
-}
index 61e5773..9abf71a 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_GROUPWISE_TRANSPORT_TYPE     (camel_groupwise_transport_get_type ())
-#define CAMEL_GROUPWISE_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_GROUPWISE_TRANSPORT_TYPE, CamelGroupwiseTransport))
-#define CAMEL_GROUPWISE_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_GROUPWISE_TRANSPORT_TYPE, CamelGroupwiseTransportClass))
-#define CAMEL_IS_GROUPWISE_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_GROUPWISE_TRANSPORT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_GROUPWISE_TRANSPORT \
+       (camel_groupwise_transport_get_type ())
+#define CAMEL_GROUPWISE_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_GROUPWISE_TRANSPORT, CamelGroupwiseTransport))
+#define CAMEL_GROUPWISE_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_GROUPWISE_TRANSPORT, CamelGroupwiseTransportClass))
+#define CAMEL_IS_GROUPWISE_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_GROUPWISE_TRANSPORT))
+#define CAMEL_IS_GROUPWISE_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_GROUPWISE_TRANSPORT))
+#define CAMEL_GROUPWISE_TRANSPORT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_GROUPWISE_TRANSPORT, CamelGroupwiseTransportClass))
 
 G_BEGIN_DECLS
 
@@ -45,7 +59,7 @@ struct _CamelGroupwiseTransportClass {
        CamelTransportClass parent_class;
 };
 
-CamelType camel_groupwise_transport_get_type (void);
+GType camel_groupwise_transport_get_type (void);
 
 G_END_DECLS
 
index c4f9ca1..775f0f7 100644 (file)
@@ -438,15 +438,15 @@ camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *me
                                filter = camel_mime_filter_charset_new (charset, "UTF-8");
                                filtered_stream = camel_stream_filter_new (content);
                                camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
-                               camel_object_unref (filter);
+                               g_object_unref (filter);
                        } else {
                                /* US-ASCII or UTF-8 */
-                               filtered_stream = camel_object_ref (content);
+                               filtered_stream = g_object_ref (content);
                        }
 
                        camel_data_wrapper_decode_to_stream (dw, filtered_stream);
                        camel_stream_flush (filtered_stream);
-                       camel_object_unref (filtered_stream);
+                       g_object_unref (filtered_stream);
 
                        camel_stream_write (content, "", 1);
                        e_gw_item_set_message (item, (const gchar *)byte_array->data);
@@ -455,7 +455,7 @@ camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *me
                        send_as_attachment (cnc, item, content, type, dw, NULL, NULL, &attach_list);
                }
 
-               camel_object_unref (content);
+               g_object_unref (content);
        }
        /*Populate EGwItem*/
        /*From Address*/
@@ -654,7 +654,7 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
                                cid = camel_mime_part_get_content_id (temp_part);
                                send_as_attachment (cnc, item, temp_content, type, temp_dw, filename, cid, attach_list);
                        }
-                       camel_object_unref (temp_content);
+                       g_object_unref (temp_content);
                        continue;
                }
 
@@ -673,15 +673,15 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
                                filter = camel_mime_filter_charset_new (charset, "UTF-8");
                                filtered_stream = camel_stream_filter_new (content);
                                camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
-                               camel_object_unref (filter);
+                               g_object_unref (filter);
                        } else {
                                /* US-ASCII or UTF-8 */
-                               filtered_stream = camel_object_ref (content);
+                               filtered_stream = g_object_ref (content);
                        }
 
                        camel_data_wrapper_decode_to_stream (dw, filtered_stream);
                        camel_stream_flush (filtered_stream);
-                       camel_object_unref (filtered_stream);
+                       g_object_unref (filtered_stream);
 
                        camel_stream_write (content, "", 1);
                        e_gw_item_set_message (item, (const gchar *) buffer->data);
@@ -694,6 +694,6 @@ do_multipart (EGwConnection *cnc, EGwItem *item, CamelMultipart *mp, GSList **at
                        send_as_attachment (cnc, item, content, type, dw, filename, content_id, attach_list);
                }
 
-               camel_object_unref (content);
+               g_object_unref (content);
        } /*end of for*/
 }
index 0a3bcdb..fba6122 100644 (file)
@@ -97,9 +97,9 @@ camel_imap_command (CamelImapStore *store,
                cmd = imap_command_strdup_vprintf (store, fmt, ap);
                va_end (ap);
        } else {
-               camel_object_ref (folder);
+               g_object_ref (folder);
                if (store->current_folder)
-                       camel_object_unref (store->current_folder);
+                       g_object_unref (store->current_folder);
                store->current_folder = folder;
                cmd = imap_command_strdup_printf (store, "SELECT %F", folder->full_name);
        }
@@ -406,7 +406,7 @@ imap_read_response (CamelImapStore *store, CamelException *ex)
        response = g_new0 (CamelImapResponse, 1);
 /*FIXME        if (store->current_folder && camel_disco_store_status (CAMEL_DISCO_STORE (store)) != CAMEL_DISCO_STORE_RESYNCING) {
                response->folder = store->current_folder;
-               camel_object_ref (CAMEL_OBJECT (response->folder));
+               g_object_ref (CAMEL_OBJECT (response->folder));
        } */
 
        response->untagged = g_ptr_array_new ();
@@ -663,7 +663,7 @@ camel_imap_response_free (CamelImapStore *store, CamelImapResponse *response)
                                g_array_free (expunged, TRUE);
                }
 
-               camel_object_unref (CAMEL_OBJECT (response->folder));
+               g_object_unref (CAMEL_OBJECT (response->folder));
        }
 
        g_free (response);
@@ -686,7 +686,7 @@ camel_imap_response_free_without_processing (CamelImapStore *store,
                return;
 
        if (response->folder) {
-               camel_object_unref (CAMEL_OBJECT (response->folder));
+               g_object_unref (CAMEL_OBJECT (response->folder));
                response->folder = NULL;
        }
        camel_imap_response_free (store, response);
index 1505569..3b4004c 100644 (file)
  * octets) */
 #define UID_SET_LIMIT  (768)
 
-extern gint camel_application_is_exiting;
+#define CAMEL_IMAP_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_IMAP_FOLDER, CamelImapFolderPrivate))
 
-static gpointer camel_imap_folder_parent_class;
+extern gint camel_application_is_exiting;
 
 static CamelProperty imap_property_list[] = {
        { CAMEL_IMAP_FOLDER_CHECK_FOLDER, "check_folder", N_("Always check for new mail in this folder") },
@@ -127,42 +129,69 @@ static CamelImapMessageInfo * imap_folder_summary_uid_or_error(
 #define strtok_r(s,sep,lasts) (*(lasts)=strtok((s),(sep)))
 #endif
 
+G_DEFINE_TYPE (CamelImapFolder, camel_imap_folder, CAMEL_TYPE_OFFLINE_FOLDER)
+
 static void
-imap_folder_finalize (CamelObject *object)
+imap_folder_dispose (GObject *object)
 {
        CamelImapFolder *imap_folder;
 
        imap_folder = CAMEL_IMAP_FOLDER (object);
 
-       if (imap_folder->search != NULL)
-               camel_object_unref (imap_folder->search);
+       if (imap_folder->search != NULL) {
+               g_object_unref (imap_folder->search);
+               imap_folder->search = NULL;
+       }
 
-       if (imap_folder->cache != NULL)
-               camel_object_unref (imap_folder->cache);
+       if (imap_folder->cache != NULL) {
+               g_object_unref (imap_folder->cache);
+               imap_folder->cache = NULL;
+       }
 
-#ifdef ENABLE_THREADS
-       g_static_mutex_free(&imap_folder->priv->search_lock);
-       g_static_rec_mutex_free(&imap_folder->priv->cache_lock);
-#endif
-       if (imap_folder->priv->ignore_recent)
+       if (imap_folder->priv->ignore_recent != NULL) {
                g_hash_table_unref (imap_folder->priv->ignore_recent);
+               imap_folder->priv->ignore_recent = NULL;
+       }
 
-       if (imap_folder->journal) {
+       if (imap_folder->journal != NULL) {
                camel_offline_journal_write (imap_folder->journal, NULL);
-               camel_object_unref (imap_folder->journal);
+               g_object_unref (imap_folder->journal);
+               imap_folder->journal = NULL;
        }
 
-       g_free(imap_folder->priv);
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imap_folder_parent_class)->dispose (object);
+}
+
+static void
+imap_folder_finalize (GObject *object)
+{
+       CamelImapFolder *imap_folder;
+
+       imap_folder = CAMEL_IMAP_FOLDER (object);
+
+#ifdef ENABLE_THREADS
+       g_static_mutex_free (&imap_folder->priv->search_lock);
+       g_static_rec_mutex_free (&imap_folder->priv->cache_lock);
+#endif
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_folder_parent_class)->finalize (object);
 }
 
 static void
 camel_imap_folder_class_init (CamelImapFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelFolderClass *folder_class;
-       gint ii;
+       gint i;
 
-       camel_imap_folder_parent_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelImapFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imap_folder_dispose;
+       object_class->finalize = imap_folder_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = imap_getv;
@@ -187,9 +216,9 @@ camel_imap_folder_class_init (CamelImapFolderClass *class)
        folder_class->get_filename = imap_get_filename;
 
        /* only localize here, do not create GSList, we do not want to leak */
-       for (ii = 0; ii < G_N_ELEMENTS (imap_property_list); ii++)
-               imap_property_list[ii].description =
-                       _(imap_property_list[ii].description);
+       for (i = 0; i < G_N_ELEMENTS (imap_property_list); i++)
+               imap_property_list[i].description =
+                       _(imap_property_list[i].description);
 }
 
 static void
@@ -197,7 +226,7 @@ camel_imap_folder_init (CamelImapFolder *imap_folder)
 {
        CamelFolder *folder = CAMEL_FOLDER (imap_folder);
 
-       imap_folder->priv = g_malloc0(sizeof(*imap_folder->priv));
+       imap_folder->priv = CAMEL_IMAP_FOLDER_GET_PRIVATE (imap_folder);
 
        folder->permanent_flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED |
                CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN;
@@ -215,26 +244,6 @@ camel_imap_folder_init (CamelImapFolder *imap_folder)
        imap_folder->need_rescan = TRUE;
 }
 
-CamelType
-camel_imap_folder_get_type (void)
-{
-       static CamelType camel_imap_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_imap_folder_type == CAMEL_INVALID_TYPE) {
-               camel_imap_folder_type =
-                       camel_type_register (camel_offline_folder_get_type (),
-                                            "CamelImapFolder",
-                                            sizeof (CamelImapFolder),
-                                            sizeof (CamelImapFolderClass),
-                                            (CamelObjectClassInitFunc) camel_imap_folder_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_imap_folder_init,
-                                            (CamelObjectFinalizeFunc) imap_folder_finalize);
-       }
-
-       return camel_imap_folder_type;
-}
-
 static void
 replay_offline_journal (CamelImapStore *imap_store, CamelImapFolder *imap_folder, CamelException *ex)
 {
@@ -282,7 +291,7 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
                return NULL;
        }
 
-       folder = CAMEL_FOLDER (camel_object_new (camel_imap_folder_get_type ()));
+       folder = g_object_new (CAMEL_TYPE_IMAP_FOLDER, NULL);
        short_name = strrchr (folder_name, '/');
        if (short_name)
                short_name++;
@@ -294,7 +303,7 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
        folder->summary = camel_imap_summary_new (folder, summary_file);
        g_free (summary_file);
        if (!folder->summary) {
-               camel_object_unref (CAMEL_OBJECT (folder));
+               g_object_unref (CAMEL_OBJECT (folder));
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        _("Could not load summary for %s"), folder_name);
@@ -314,7 +323,7 @@ camel_imap_folder_new (CamelStore *parent, const gchar *folder_name,
 
        imap_folder->cache = camel_imap_message_cache_new (folder_dir, folder->summary, ex);
        if (!imap_folder->cache) {
-               camel_object_unref (CAMEL_OBJECT (folder));
+               g_object_unref (CAMEL_OBJECT (folder));
                return NULL;
        }
 
@@ -1600,7 +1609,7 @@ imap_expunge_uids_online (CamelFolder *folder,
        camel_service_lock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
 
        if ((store->capabilities & IMAP_CAPABILITY_UIDPLUS) == 0) {
-               if (!CAMEL_FOLDER_GET_CLASS (folder)->sync(folder, 0, ex)) {
+               if (!CAMEL_FOLDER_GET_CLASS (folder)->sync (folder, 0, ex)) {
                        camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
                        return FALSE;
                }
@@ -1963,9 +1972,9 @@ do_append (CamelFolder *folder,
                CAMEL_STREAM_FILTER (streamfilter), crlf_filter);
        camel_data_wrapper_write_to_stream (
                CAMEL_DATA_WRAPPER (message), streamfilter);
-       camel_object_unref (streamfilter);
-       camel_object_unref (crlf_filter);
-       camel_object_unref (memstream);
+       g_object_unref (streamfilter);
+       g_object_unref (crlf_filter);
+       g_object_unref (memstream);
 
        /* Some servers don't let us append with (CamelMessageInfo *)custom flags.  If the command fails for
           whatever reason, assume this is the case and save the state and try again */
@@ -2180,7 +2189,7 @@ imap_transfer_offline (CamelFolder *source,
 
                if (message) {
                        camel_imap_summary_add_offline (dest->summary, destuid, message, mi);
-                       camel_object_unref (CAMEL_OBJECT (message));
+                       g_object_unref (CAMEL_OBJECT (message));
                } else
                        camel_imap_summary_add_offline_uncached (dest->summary, destuid, mi);
 
@@ -2531,7 +2540,7 @@ imap_transfer_resyncing (CamelFolder *source,
 
                        imap_append_online (dest, message, info, NULL, ex);
                        camel_folder_free_message_info (source, info);
-                       camel_object_unref (CAMEL_OBJECT (message));
+                       g_object_unref (CAMEL_OBJECT (message));
                        if (delete_originals && !camel_exception_is_set (ex))
                                camel_folder_delete_message (source, uid);
                        i++;
@@ -2755,9 +2764,9 @@ get_content (CamelImapFolder *imap_folder, const gchar *uid,
                if (stream) {
                        ret = camel_data_wrapper_construct_from_stream (
                                CAMEL_DATA_WRAPPER (body_mp), stream);
-                       camel_object_unref (CAMEL_OBJECT (stream));
+                       g_object_unref (CAMEL_OBJECT (stream));
                        if (ret == -1) {
-                               camel_object_unref ( body_mp);
+                               g_object_unref ( body_mp);
                                return NULL;
                        }
                }
@@ -2795,10 +2804,10 @@ get_content (CamelImapFolder *imap_folder, const gchar *uid,
 
                                part = camel_mime_part_new ();
                                ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (part), stream);
-                               camel_object_unref (CAMEL_OBJECT (stream));
+                               g_object_unref (CAMEL_OBJECT (stream));
                                if (ret == -1) {
-                                       camel_object_unref (CAMEL_OBJECT (part));
-                                       camel_object_unref (CAMEL_OBJECT (body_mp));
+                                       g_object_unref (CAMEL_OBJECT (part));
+                                       g_object_unref (CAMEL_OBJECT (body_mp));
                                        g_free (child_spec);
                                        return NULL;
                                }
@@ -2807,7 +2816,7 @@ get_content (CamelImapFolder *imap_folder, const gchar *uid,
                        }
 
                        if (!stream || !content) {
-                               camel_object_unref (CAMEL_OBJECT (body_mp));
+                               g_object_unref (CAMEL_OBJECT (body_mp));
                                g_free (child_spec);
                                return NULL;
                        }
@@ -2833,10 +2842,10 @@ get_content (CamelImapFolder *imap_folder, const gchar *uid,
                        }
 
                        camel_medium_set_content (CAMEL_MEDIUM (part), content);
-                       camel_object_unref (content);
+                       g_object_unref (content);
 
                        camel_multipart_add_part (body_mp, part);
-                       camel_object_unref (part);
+                       g_object_unref (part);
 
                        ci = ci->next;
                }
@@ -2892,15 +2901,15 @@ get_message (CamelImapFolder *imap_folder, const gchar *uid,
        msg = camel_mime_message_new ();
        ret = camel_data_wrapper_construct_from_stream (
                CAMEL_DATA_WRAPPER (msg), stream);
-       camel_object_unref (CAMEL_OBJECT (stream));
+       g_object_unref (CAMEL_OBJECT (stream));
        if (ret == -1) {
-               camel_object_unref (CAMEL_OBJECT (msg));
+               g_object_unref (CAMEL_OBJECT (msg));
                return NULL;
        }
 
        content = get_content (imap_folder, uid, CAMEL_MIME_PART (msg), ci, TRUE, ex);
        if (!content) {
-               camel_object_unref (CAMEL_OBJECT (msg));
+               g_object_unref (CAMEL_OBJECT (msg));
                return NULL;
        }
 
@@ -2915,7 +2924,7 @@ get_message (CamelImapFolder *imap_folder, const gchar *uid,
 
        camel_data_wrapper_set_mime_type_field(content, camel_mime_part_get_content_type((CamelMimePart *)msg));
        camel_medium_set_content (CAMEL_MEDIUM (msg), content);
-       camel_object_unref (CAMEL_OBJECT (content));
+       g_object_unref (CAMEL_OBJECT (content));
 
        return msg;
 }
@@ -2939,13 +2948,13 @@ get_message_simple (CamelImapFolder *imap_folder, const gchar *uid,
        msg = camel_mime_message_new ();
        ret = camel_data_wrapper_construct_from_stream (
                CAMEL_DATA_WRAPPER (msg), stream);
-       camel_object_unref (CAMEL_OBJECT (stream));
+       g_object_unref (CAMEL_OBJECT (stream));
        if (ret == -1) {
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
                        _("Unable to retrieve message: %s"),
                        g_strerror (errno));
-               camel_object_unref (CAMEL_OBJECT (msg));
+               g_object_unref (CAMEL_OBJECT (msg));
                return NULL;
        }
 
@@ -3184,12 +3193,12 @@ imap_sync_message (CamelFolder *folder,
        /* If its cached in full, just get it as is, this is only a shortcut,
           since we get stuff from the cache anyway.  It affects a busted connection though. */
        if ((stream = camel_imap_folder_fetch_data(imap_folder, uid, "", TRUE, NULL))) {
-               camel_object_unref (stream);
+               g_object_unref (stream);
                return TRUE;
        }
        msg = imap_get_message(folder, uid, ex);
        if (msg != NULL) {
-               camel_object_unref (msg);
+               g_object_unref (msg);
                success = TRUE;
        }
 
@@ -3206,7 +3215,7 @@ imap_cache_message (CamelDiscoFolder *disco_folder, const gchar *uid,
 
        stream = camel_imap_folder_fetch_data (imap_folder, uid, "", FALSE, ex);
        if (stream)
-               camel_object_unref (CAMEL_OBJECT (stream));
+               g_object_unref (CAMEL_OBJECT (stream));
 }
 */
 
@@ -3340,14 +3349,14 @@ add_message_from_data (CamelFolder *folder, GPtrArray *messages,
        msg = camel_mime_message_new ();
        if (camel_data_wrapper_construct_from_stream (
                CAMEL_DATA_WRAPPER (msg), stream) == -1) {
-               camel_object_unref (CAMEL_OBJECT (msg));
+               g_object_unref (CAMEL_OBJECT (msg));
                return;
        }
 
        bodystructure = g_datalist_get_data (&data, "BODY");
 
        mi = (CamelImapMessageInfo *)camel_folder_summary_info_new_from_message (folder->summary, msg, bodystructure);
-       camel_object_unref (CAMEL_OBJECT (msg));
+       g_object_unref (CAMEL_OBJECT (msg));
 
        if ((idate = g_datalist_get_data (&data, "INTERNALDATE")))
                mi->info.date_received = decode_internaldate ((const guchar *) idate);
@@ -3949,7 +3958,7 @@ camel_imap_folder_fetch_data (CamelImapFolder *imap_folder, const gchar *uid,
                        ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
                        _("Could not find message body in FETCH response."));
        } else {
-               camel_object_ref (CAMEL_OBJECT (stream));
+               g_object_ref (CAMEL_OBJECT (stream));
                g_datalist_clear (&fetch_data);
        }
 
@@ -4100,7 +4109,7 @@ parse_fetch_response (CamelImapFolder *imap_folder, gchar *response)
 
                if (stream)
                        g_datalist_set_data_full (&data, "BODY_PART_STREAM", stream,
-                                                 (GDestroyNotify) camel_object_unref);
+                                                 (GDestroyNotify) g_object_unref);
        }
 
        return data;
index b68fc11..c47959d 100644 (file)
 #include "camel-imap-command.h"
 #include "camel-imap-message-cache.h"
 
-#define CAMEL_IMAP_FOLDER_TYPE     (camel_imap_folder_get_type ())
-#define CAMEL_IMAP_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolder))
-#define CAMEL_IMAP_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolderClass))
-#define CAMEL_IS_IMAP_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_FOLDER \
+       (camel_imap_folder_get_type ())
+#define CAMEL_IMAP_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_FOLDER, CamelImapFolder))
+#define CAMEL_IMAP_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_FOLDER, CamelImapFolderClass))
+#define CAMEL_IS_IMAP_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_FOLDER))
+#define CAMEL_IS_IMAP_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_FOLDER))
+#define CAMEL_IMAP_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_FOLDER, CamelImapFolderClass))
 
 G_BEGIN_DECLS
 
@@ -101,8 +115,7 @@ imap_transfer_resyncing (CamelFolder *source, GPtrArray *uids,
 gboolean
 imap_expunge_uids_resyncing (CamelFolder *folder, GPtrArray *uids, CamelException *ex);
 
-/* Standard Camel function */
-CamelType camel_imap_folder_get_type (void);
+GType camel_imap_folder_get_type (void);
 
 G_END_DECLS
 
index 730d281..340aa02 100644 (file)
@@ -49,7 +49,7 @@ static void unref_folder (gpointer key, gpointer value, gpointer data);
 static void free_uids (GPtrArray *array);
 static void close_folder (gpointer name, gpointer folder, gpointer data);
 
-static gpointer camel_imap_journal_parent_class;
+G_DEFINE_TYPE (CamelIMAPJournal, camel_imap_journal, CAMEL_TYPE_OFFLINE_JOURNAL)
 
 static void
 free_uid (gpointer key, gpointer value, gpointer data)
@@ -59,8 +59,10 @@ free_uid (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-imap_journal_finalize (CamelIMAPJournal *journal)
+imap_journal_finalize (GObject *object)
 {
+       CamelIMAPJournal *journal = CAMEL_IMAP_JOURNAL (object);
+
        if (journal->folders) {
                g_hash_table_foreach (journal->folders, unref_folder, NULL);
                g_hash_table_destroy (journal->folders);
@@ -71,14 +73,19 @@ imap_journal_finalize (CamelIMAPJournal *journal)
                g_hash_table_foreach (journal->uidmap, free_uid, NULL);
                g_hash_table_destroy (journal->uidmap);
        }
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_journal_parent_class)->finalize (object);
 }
 
 static void
 camel_imap_journal_class_init (CamelIMAPJournalClass *class)
 {
+       GObjectClass *object_class;
        CamelOfflineJournalClass *offline_journal_class;
 
-       camel_imap_journal_parent_class = (CamelOfflineJournalClass *) camel_type_get_global_classfuncs (CAMEL_TYPE_OFFLINE_JOURNAL);
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = imap_journal_finalize;
 
        offline_journal_class = CAMEL_OFFLINE_JOURNAL_CLASS (class);
        offline_journal_class->entry_free = imap_entry_free;
@@ -94,29 +101,10 @@ camel_imap_journal_init (CamelIMAPJournal *journal)
        journal->uidmap = g_hash_table_new (g_str_hash, g_str_equal);
 }
 
-CamelType
-camel_imap_journal_get_type (void)
-{
-       static CamelType type = NULL;
-
-       if (!type) {
-               type = camel_type_register (camel_offline_journal_get_type (),
-                                           "CamelIMAPJournal",
-                                           sizeof (CamelIMAPJournal),
-                                           sizeof (CamelIMAPJournalClass),
-                                           (CamelObjectClassInitFunc) camel_imap_journal_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_imap_journal_init,
-                                           (CamelObjectFinalizeFunc) imap_journal_finalize);
-       }
-
-       return type;
-}
-
 static void
 unref_folder (gpointer key, gpointer value, gpointer data)
 {
-       camel_object_unref (value);
+       g_object_unref (value);
 }
 
 static void
@@ -393,7 +381,7 @@ camel_imap_journal_new (CamelImapFolder *folder, const gchar *filename)
        g_return_val_if_fail (CAMEL_IS_IMAP_FOLDER (folder), NULL);
 
        d(g_print ("Creating the journal \n"));
-       journal = (CamelOfflineJournal *) camel_object_new (camel_imap_journal_get_type ());
+       journal = g_object_new (CAMEL_TYPE_IMAP_JOURNAL, NULL);
        camel_offline_journal_construct (journal, (CamelFolder *) folder, filename);
 
        return journal;
@@ -450,7 +438,7 @@ close_folder (gpointer name, gpointer folder, gpointer data)
 {
        g_free (name);
        camel_folder_sync (folder, FALSE, NULL);
-       camel_object_unref (folder);
+       g_object_unref (folder);
 }
 
 void
index 302cc7d..8cc6f13 100644 (file)
 #include <stdarg.h>
 #include <camel/camel.h>
 
-#define CAMEL_TYPE_IMAP_JOURNAL            (camel_imap_journal_get_type ())
-#define CAMEL_IMAP_JOURNAL(obj)            (CAMEL_CHECK_CAST ((obj), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournal))
-#define CAMEL_IMAP_JOURNAL_CLASS(klass)    (CAMEL_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournalClass))
-#define CAMEL_IS_IMAP_JOURNAL(obj)         (CAMEL_CHECK_TYPE ((obj), CAMEL_TYPE_IMAP_JOURNAL))
-#define CAMEL_IS_IMAP_JOURNAL_CLASS(klass) (CAMEL_CHECK_CLASS_TYPE ((klass), CAMEL_TYPE_IMAP_JOURNAL))
-#define CAMEL_IMAP_JOURNAL_GET_CLASS(obj)  (CAMEL_CHECK_GET_CLASS ((obj), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournalClass))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_JOURNAL \
+       (camel_imap_journal_get_type ())
+#define CAMEL_IMAP_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournal))
+#define CAMEL_IMAP_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournalClass))
+#define CAMEL_IS_IMAP_JOURNAL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_JOURNAL))
+#define CAMEL_IS_IMAP_JOURNAL_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_JOURNAL))
+#define CAMEL_IMAP_JOURNAL_GET_CLASS(obj) \
+       (CAMEL_CHECK_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_JOURNAL, CamelIMAPJournalClass))
 
 G_BEGIN_DECLS
 
@@ -73,7 +85,7 @@ struct _CamelIMAPJournalClass {
 
 };
 
-CamelType camel_imap_journal_get_type (void);
+GType camel_imap_journal_get_type (void);
 
 CamelOfflineJournal *camel_imap_journal_new (struct _CamelImapFolder *folder, const gchar *filename);
 void camel_imap_journal_log (CamelOfflineJournal *journal, CamelOfflineAction action, ...);
index 81398a2..e0e0c94 100644 (file)
@@ -58,6 +58,8 @@ struct _part_find {
        gint found;
 };
 
+G_DEFINE_TYPE (CamelImapMessageCache, camel_imap_message_cache, CAMEL_TYPE_OBJECT)
+
 static void
 free_part (gpointer key, gpointer value, gpointer data)
 {
@@ -65,7 +67,7 @@ free_part (gpointer key, gpointer value, gpointer data)
                if (strchr (key, '.')) {
                        camel_object_unhook_event (value, "finalize",
                                                   stream_finalize, data);
-                       camel_object_unref (value);
+                       g_object_unref (value);
                } else
                        g_ptr_array_free (value, TRUE);
        }
@@ -73,10 +75,14 @@ free_part (gpointer key, gpointer value, gpointer data)
 }
 
 static void
-imap_message_cache_finalize (CamelImapMessageCache *cache)
+imap_message_cache_finalize (GObject *object)
 {
+       CamelImapMessageCache *cache;
+
+       cache = CAMEL_IMAP_MESSAGE_CACHE (object);
+
        g_free (cache->path);
-\
+
        if (cache->parts) {
                g_hash_table_foreach (cache->parts, free_part, cache);
                g_hash_table_destroy (cache->parts);
@@ -84,25 +90,23 @@ imap_message_cache_finalize (CamelImapMessageCache *cache)
 
        if (cache->cached)
                g_hash_table_destroy (cache->cached);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_message_cache_parent_class)->finalize (object);
 }
 
-CamelType
-camel_imap_message_cache_get_type (void)
+static void
+camel_imap_message_cache_class_init (CamelImapMessageCacheClass *class)
 {
-       static CamelType camel_imap_message_cache_type = CAMEL_INVALID_TYPE;
-
-       if (camel_imap_message_cache_type == CAMEL_INVALID_TYPE) {
-               camel_imap_message_cache_type = camel_type_register (
-                       CAMEL_TYPE_OBJECT, "CamelImapMessageCache",
-                       sizeof (CamelImapMessageCache),
-                       sizeof (CamelImapMessageCacheClass),
-                       NULL,
-                       NULL,
-                       NULL,
-                       (CamelObjectFinalizeFunc) imap_message_cache_finalize);
-       }
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = imap_message_cache_finalize;
+}
 
-       return camel_imap_message_cache_type;
+static void
+camel_imap_message_cache_init (CamelImapMessageCache *imap_message_cache)
+{
 }
 
 static void
@@ -129,7 +133,7 @@ cache_put (CamelImapMessageCache *cache, const gchar *uid, const gchar *key,
                        camel_object_unhook_event (ostream, "finalize",
                                                   stream_finalize, cache);
                        g_hash_table_remove (cache->cached, ostream);
-                       camel_object_unref (ostream);
+                       g_object_unref (ostream);
                }
                hash_key = okey;
        } else {
@@ -181,7 +185,7 @@ camel_imap_message_cache_new (const gchar *path,
                return NULL;
        }
 
-       cache = (CamelImapMessageCache *)camel_object_new (CAMEL_IMAP_MESSAGE_CACHE_TYPE);
+       cache = g_object_new (CAMEL_TYPE_IMAP_MESSAGE_CACHE, NULL);
        cache->path = g_strdup (path);
 
        cache->parts = g_hash_table_new (g_str_hash, g_str_equal);
@@ -321,7 +325,7 @@ insert_setup (CamelImapMessageCache *cache, const gchar *uid, const gchar *part_
        *key = strrchr (*path, '/') + 1;
        stream = g_hash_table_lookup (cache->parts, *key);
        if (stream)
-               camel_object_unref (CAMEL_OBJECT (stream));
+               g_object_unref (CAMEL_OBJECT (stream));
 
        fd = g_open (*path, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, 0600);
        if (fd == -1) {
@@ -341,7 +345,7 @@ insert_abort (gchar *path, CamelStream *stream)
 {
        g_unlink (path);
        g_free (path);
-       camel_object_unref (CAMEL_OBJECT (stream));
+       g_object_unref (CAMEL_OBJECT (stream));
        return NULL;
 }
 
@@ -430,7 +434,7 @@ camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache,
                insert_abort (path, stream);
        } else {
                insert_finish (cache, uid, path, key, stream);
-               camel_object_unref (CAMEL_OBJECT (stream));
+               g_object_unref (CAMEL_OBJECT (stream));
        }
 }
 
@@ -465,7 +469,7 @@ camel_imap_message_cache_insert_wrapper (CamelImapMessageCache *cache,
                insert_abort (path, stream);
        } else {
                insert_finish (cache, uid, path, key, stream);
-               camel_object_unref (CAMEL_OBJECT (stream));
+               g_object_unref (CAMEL_OBJECT (stream));
        }
 }
 
@@ -530,7 +534,7 @@ camel_imap_message_cache_get (CamelImapMessageCache *cache, const gchar *uid,
        stream = g_hash_table_lookup (cache->parts, key);
        if (stream) {
                camel_stream_reset (CAMEL_STREAM (stream));
-               camel_object_ref (stream);
+               g_object_ref (stream);
                g_free (path);
                return stream;
        }
@@ -576,7 +580,7 @@ camel_imap_message_cache_remove (CamelImapMessageCache *cache, const gchar *uid)
                if (stream) {
                        camel_object_unhook_event (stream, "finalize",
                                                   stream_finalize, cache);
-                       camel_object_unref (stream);
+                       g_object_unref (stream);
                        g_hash_table_remove (cache->cached, stream);
                }
                g_hash_table_remove (cache->parts, key);
@@ -646,7 +650,7 @@ camel_imap_message_cache_copy (CamelImapMessageCache *source,
 
                if ((stream = camel_imap_message_cache_get (source, source_uid, part, ex))) {
                        camel_imap_message_cache_insert_stream (dest, dest_uid, part, stream, ex);
-                       camel_object_unref (CAMEL_OBJECT (stream));
+                       g_object_unref (CAMEL_OBJECT (stream));
                }
        }
 }
index 20b6161..640c388 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAP_MESSAGE_CACHE_TYPE     (camel_imap_message_cache_get_type ())
-#define CAMEL_IMAP_MESSAGE_CACHE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_MESSAGE_CACHE_TYPE, CamelImapFolder))
-#define CAMEL_IMAP_MESSAGE_CACHE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_MESSAGE_CACHE_TYPE, CamelImapFolderClass))
-#define CAMEL_IS_IMAP_MESSAGE_CACHE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_MESSAGE_CACHE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_MESSAGE_CACHE \
+       (camel_imap_message_cache_get_type ())
+#define CAMEL_IMAP_MESSAGE_CACHE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_MESSAGE_CACHE, CamelImapMessageCache))
+#define CAMEL_IMAP_MESSAGE_CACHE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_MESSAGE_CACHE, CamelImapMessageCacheClass))
+#define CAMEL_IS_IMAP_MESSAGE_CACHE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_MESSAGE_CACHE))
+#define CAMEL_IS_IMAP_MESSAGE_CACHE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_MESSAGE_CACHE))
+#define CAMEL_IMAP_MESSAGE_CACHE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_MESSAGE_CACHE, CamelImapMessageCacheClass))
 
 G_BEGIN_DECLS
 
@@ -109,7 +123,7 @@ GPtrArray *  camel_imap_message_cache_filter_cached(CamelImapMessageCache *,
                                               GPtrArray *uids,
                                               CamelException *ex);
 
-CamelType camel_imap_message_cache_get_type (void);
+GType camel_imap_message_cache_get_type (void);
 
 G_END_DECLS
 
index 6afdf66..ea9b967 100644 (file)
@@ -91,7 +91,7 @@ struct _match_record {
 
 static ESExpResult *imap_body_contains (struct _ESExp *f, gint argc, struct _ESExpResult **argv, CamelFolderSearch *s);
 
-static gpointer camel_imap_search_parent_class;
+G_DEFINE_TYPE (CamelImapSearch, camel_imap_search, CAMEL_TYPE_FOLDER_SEARCH)
 
 static void
 free_match(CamelImapSearch *is, struct _match_record *mr)
@@ -106,23 +106,47 @@ free_match(CamelImapSearch *is, struct _match_record *mr)
 }
 
 static void
-imap_search_finalize (CamelImapSearch *search)
+imap_search_dispose (GObject *object)
 {
+       CamelImapSearch *search;
+
+       search = CAMEL_IMAP_SEARCH (object);
+
+       if (search->cache != NULL) {
+               g_object_unref (search->cache);
+               search->cache = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imap_search_parent_class)->dispose (object);
+}
+
+static void
+imap_search_finalize (GObject *object)
+{
+       CamelImapSearch *search;
        struct _match_record *mr;
 
+       search = CAMEL_IMAP_SEARCH (object);
+
        while ((mr = (struct _match_record *)camel_dlist_remtail(&search->matches)))
-               free_match(search, mr);
-       g_hash_table_destroy(search->matches_hash);
-       if (search->cache != NULL)
-               camel_object_unref (search->cache);
+               free_match (search, mr);
+
+       g_hash_table_destroy (search->matches_hash);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_search_parent_class)->finalize (object);
 }
 
 static void
 camel_imap_search_class_init (CamelImapSearchClass *class)
 {
+       GObjectClass *object_class;
        CamelFolderSearchClass *folder_search_class;
 
-       camel_imap_search_parent_class = (CamelFolderSearchClass *)camel_type_get_global_classfuncs (camel_folder_search_get_type ());
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imap_search_dispose;
+       object_class->finalize = imap_search_finalize;
 
        folder_search_class = CAMEL_FOLDER_SEARCH_CLASS (class);
        folder_search_class->body_contains = imap_body_contains;
@@ -137,24 +161,6 @@ camel_imap_search_init (CamelImapSearch *is)
        is->lastuid = 0;
 }
 
-CamelType
-camel_imap_search_get_type (void)
-{
-       static CamelType camel_imap_search_type = CAMEL_INVALID_TYPE;
-
-       if (camel_imap_search_type == CAMEL_INVALID_TYPE) {
-               camel_imap_search_type = camel_type_register (
-                       CAMEL_FOLDER_SEARCH_TYPE, "CamelImapSearch",
-                       sizeof (CamelImapSearch),
-                       sizeof (CamelImapSearchClass),
-                       (CamelObjectClassInitFunc) camel_imap_search_class_init, NULL,
-                       (CamelObjectInitFunc) camel_imap_search_init,
-                       (CamelObjectFinalizeFunc) imap_search_finalize);
-       }
-
-       return camel_imap_search_type;
-}
-
 /**
  * camel_imap_search_new:
  *
@@ -163,7 +169,7 @@ camel_imap_search_get_type (void)
 CamelFolderSearch *
 camel_imap_search_new (const gchar *cachedir)
 {
-       CamelFolderSearch *new = CAMEL_FOLDER_SEARCH (camel_object_new (camel_imap_search_get_type ()));
+       CamelFolderSearch *new = g_object_new (CAMEL_TYPE_IMAP_SEARCH, NULL);
        CamelImapSearch *is = (CamelImapSearch *)new;
 
        camel_folder_search_construct (new);
@@ -246,7 +252,7 @@ save_match(CamelImapSearch *is, struct _match_record *mr)
                ret = -1;
        }
 
-       camel_object_unref (stream);
+       g_object_unref (stream);
        return ret;
 }
 
@@ -292,7 +298,7 @@ load_match(CamelImapSearch *is, gchar hash[17], gint argc, struct _ESExpResult *
                        d(printf(" file format invalid/validity changed\n"));
                        memset(&header, 0, sizeof(header));
                }
-               camel_object_unref (stream);
+               g_object_unref (stream);
        } else {
                d(printf(" no cache entry found\n"));
        }
index 5959ce9..26e8993 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAP_SEARCH_TYPE         (camel_imap_search_get_type ())
-#define CAMEL_IMAP_SEARCH(obj)         CAMEL_CHECK_CAST (obj, camel_imap_search_get_type (), CamelImapSearch)
-#define CAMEL_IMAP_SEARCH_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imap_search_get_type (), CamelImapSearchClass)
-#define CAMEL_IS_IMAP_SEARCH(obj)      CAMEL_CHECK_TYPE (obj, camel_imap_search_get_type ())
+/* Standard GObject class */
+#define CAMEL_TYPE_IMAP_SEARCH \
+       (camel_imap_search_get_type ())
+#define CAMEL_IMAP_SEARCH(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_SEARCH, CamelImapSearch))
+#define CAMEL_IMAP_SEARCH_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_SEARCH, CamelImapSearchClass))
+#define CAMEL_IS_IMAP_SEARCH(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_SEARCH))
+#define CAMEL_IS_IMAP_SEARCH_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_SEARCH))
+#define CAMEL_IMAP_SEARCH_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_SEARCH, CamelImapSearchClass))
 
 G_BEGIN_DECLS
 
@@ -57,7 +71,7 @@ struct _CamelImapSearchClass {
 
 };
 
-CamelType              camel_imap_search_get_type (void);
+GType              camel_imap_search_get_type (void);
 CamelFolderSearch *camel_imap_search_new      (const gchar *cachedir);
 
 G_END_DECLS
index ed4e683..30081cd 100644 (file)
@@ -49,15 +49,13 @@ static void          store_info_free(CamelStoreSummary *, CamelStoreInfo *);
 static const gchar *store_info_string(CamelStoreSummary *, const CamelStoreInfo *, gint);
 static void store_info_set_string(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 
-static gpointer camel_imap_store_summary_parent_class;
+G_DEFINE_TYPE (CamelImapStoreSummary, camel_imap_store_summary, CAMEL_TYPE_STORE_SUMMARY)
 
 static void
 camel_imap_store_summary_class_init (CamelImapStoreSummaryClass *class)
 {
        CamelStoreSummaryClass *store_summary_class;
 
-       camel_imap_store_summary_parent_class = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-
        store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
        store_summary_class->summary_header_load = summary_header_load;
        store_summary_class->summary_header_save = summary_header_save;
@@ -79,25 +77,6 @@ camel_imap_store_summary_init (CamelImapStoreSummary *imap_store_summary)
        imap_store_summary->version = CAMEL_IMAP_STORE_SUMMARY_VERSION;
 }
 
-CamelType
-camel_imap_store_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_store_summary_get_type (),
-                                          "CamelImapStoreSummary",
-                                          sizeof (CamelImapStoreSummary),
-                                          sizeof (CamelImapStoreSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_imap_store_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_imap_store_summary_init,
-                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_imap_store_summary_new:
  *
@@ -108,7 +87,7 @@ camel_imap_store_summary_get_type (void)
 CamelImapStoreSummary *
 camel_imap_store_summary_new (void)
 {
-       return CAMEL_IMAP_STORE_SUMMARY ( camel_object_new (camel_imap_store_summary_get_type ()));
+       return g_object_new (CAMEL_TYPE_IMAP_STORE_SUMMARY, NULL);
 }
 
 /**
index fff3c3c..ad31198 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAP_STORE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_imap_store_summary_get_type (), CamelImapStoreSummary)
-#define CAMEL_IMAP_STORE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imap_store_summary_get_type (), CamelImapStoreSummaryClass)
-#define CAMEL_IS_IMAP_STORE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_imap_store_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_STORE_SUMMARY \
+       (camel_imap_store_summary_get_type ())
+#define CAMEL_IMAP_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_STORE_SUMMARY, CamelImapStoreSummary))
+#define CAMEL_IMAP_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_STORE_SUMMARY, CamelImapStoreSummaryClass))
+#define CAMEL_IS_IMAP_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_STORE_SUMMARY))
+#define CAMEL_IS_IMAP_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_STORE_SUMMARY))
+#define CAMEL_IMAP_STORE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_STORE_SUMMARY, CamelImapStoreSummaryClass))
 
 G_BEGIN_DECLS
 
-typedef struct _CamelImapStoreSummary      CamelImapStoreSummary;
+typedef struct _CamelImapStoreSummary CamelImapStoreSummary;
 typedef struct _CamelImapStoreSummaryClass CamelImapStoreSummaryClass;
+typedef struct _CamelImapStoreSummaryPrivate CamelImapStoreSummaryPrivate;
 
 typedef struct _CamelImapStoreInfo CamelImapStoreInfo;
 
@@ -57,8 +73,7 @@ struct _CamelImapStoreNamespace {
 
 struct _CamelImapStoreSummary {
        CamelStoreSummary summary;
-
-       struct _CamelImapStoreSummaryPrivate *priv;
+       CamelImapStoreSummaryPrivate *priv;
 
        /* header info */
        guint32 version;        /* version of base part of file */
@@ -70,7 +85,7 @@ struct _CamelImapStoreSummaryClass {
        CamelStoreSummaryClass summary_class;
 };
 
-CamelType                       camel_imap_store_summary_get_type      (void);
+GType                   camel_imap_store_summary_get_type      (void);
 CamelImapStoreSummary      *camel_imap_store_summary_new       (void);
 
 void camel_imap_store_summary_namespace_set_main (CamelImapStoreSummary *s, const gchar *full_name, gchar dir_sep);
index 5e28857..4ad0ca1 100644 (file)
@@ -64,8 +64,6 @@
 
 extern gint camel_verbose_debug;
 
-static gpointer camel_imap_store_parent_class;
-
 static gchar imap_tag_prefix = 'A';
 
 static gboolean construct (CamelService *service, CamelSession *session,
@@ -108,6 +106,8 @@ static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, g
 static CamelFolder * get_folder_offline (CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex);
 static CamelFolderInfo * get_folder_info_offline (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 
+G_DEFINE_TYPE (CamelImapStore, camel_imap_store, CAMEL_TYPE_OFFLINE_STORE)
+
 static gboolean
 free_key (gpointer key, gpointer value, gpointer user_data)
 {
@@ -116,31 +116,49 @@ free_key (gpointer key, gpointer value, gpointer user_data)
 }
 
 static void
-imap_store_finalize (CamelImapStore *imap_store)
+imap_store_dispose (GObject *object)
 {
-       /* This frees current_folder, folders, authtypes, streams, and namespace. */
-       camel_service_disconnect((CamelService *)imap_store, TRUE, NULL);
+       CamelImapStore *imap_store = CAMEL_IMAP_STORE (object);
 
        if (imap_store->summary != NULL) {
                camel_store_summary_save (
                        CAMEL_STORE_SUMMARY (imap_store->summary));
-               camel_object_unref (imap_store->summary);
+               g_object_unref (imap_store->summary);
+               imap_store->summary = NULL;
        }
 
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imap_store_parent_class)->dispose (object);
+}
+
+static void
+imap_store_finalize (GObject *object)
+{
+       CamelImapStore *imap_store = CAMEL_IMAP_STORE (object);
+
+       /* This frees current_folder, folders, authtypes, streams, and namespace. */
+       camel_service_disconnect (CAMEL_SERVICE (imap_store), TRUE, NULL);
+
        g_free (imap_store->base_url);
        g_free (imap_store->storage_path);
        g_free (imap_store->users_namespace);
        g_free (imap_store->custom_headers);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_store_parent_class)->finalize (object);
 }
 
 static void
 camel_imap_store_class_init (CamelImapStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_imap_store_parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imap_store_dispose;
+       object_class->finalize = imap_store_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->setv = imap_setv;
@@ -189,26 +207,6 @@ camel_imap_store_init (CamelImapStore *imap_store)
                imap_tag_prefix = 'A';
 }
 
-CamelType
-camel_imap_store_get_type (void)
-{
-       static CamelType camel_imap_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_imap_store_type == CAMEL_INVALID_TYPE)        {
-               camel_imap_store_type =
-                       camel_type_register (camel_offline_store_get_type (),
-                                            "CamelImapStore",
-                                            sizeof (CamelImapStore),
-                                            sizeof (CamelImapStoreClass),
-                                            (CamelObjectClassInitFunc) camel_imap_store_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_imap_store_init,
-                                            (CamelObjectFinalizeFunc) imap_store_finalize);
-       }
-
-       return camel_imap_store_type;
-}
-
 static gboolean
 construct (CamelService *service, CamelSession *session,
           CamelProvider *provider, CamelURL *url,
@@ -565,7 +563,7 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
                                ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
                                _("Could not connect to %s: %s"),
                                service->url->host, g_strerror (errno));
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return FALSE;
        }
 
@@ -589,12 +587,12 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
        /* Read the greeting, if any, and deal with PREAUTH */
        if (camel_imap_store_readline (store, &buf, ex) < 0) {
                if (store->istream) {
-                       camel_object_unref (store->istream);
+                       g_object_unref (store->istream);
                        store->istream = NULL;
                }
 
                if (store->ostream) {
-                       camel_object_unref (store->ostream);
+                       g_object_unref (store->ostream);
                        store->ostream = NULL;
                }
 
@@ -639,12 +637,12 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
        /* get the imap server capabilities */
        if (!imap_get_capability (service, ex)) {
                if (store->istream) {
-                       camel_object_unref (store->istream);
+                       g_object_unref (store->istream);
                        store->istream = NULL;
                }
 
                if (store->ostream) {
-                       camel_object_unref (store->ostream);
+                       g_object_unref (store->ostream);
                        store->ostream = NULL;
                }
 
@@ -677,8 +675,8 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
 
        response = camel_imap_command (store, NULL, ex, "STARTTLS");
        if (!response) {
-               camel_object_unref (store->istream);
-               camel_object_unref (store->ostream);
+               g_object_unref (store->istream);
+               g_object_unref (store->ostream);
                store->istream = store->ostream = NULL;
                return FALSE;
        }
@@ -705,12 +703,12 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
            command, the client MUST discard prior CAPA responses */
        if (!imap_get_capability (service, ex)) {
                if (store->istream) {
-                       camel_object_unref (store->istream);
+                       g_object_unref (store->istream);
                        store->istream = NULL;
                }
 
                if (store->ostream) {
-                       camel_object_unref (store->ostream);
+                       g_object_unref (store->ostream);
                        store->ostream = NULL;
                }
 
@@ -740,12 +738,12 @@ exception:
        }
 
        if (store->istream) {
-               camel_object_unref (store->istream);
+               g_object_unref (store->istream);
                store->istream = NULL;
        }
 
        if (store->ostream) {
-               camel_object_unref (store->ostream);
+               g_object_unref (store->ostream);
                store->ostream = NULL;
        }
 
@@ -851,7 +849,7 @@ connect_to_server_process (CamelService *service, const gchar *cmd, CamelExcepti
                                _("Could not connect with command \"%s\": %s"),
                                full_cmd, g_strerror (errno));
 
-               camel_object_unref (cmd_stream);
+               g_object_unref (cmd_stream);
                g_free (full_cmd);
                return FALSE;
        }
@@ -867,12 +865,12 @@ connect_to_server_process (CamelService *service, const gchar *cmd, CamelExcepti
        /* Read the greeting, if any, and deal with PREAUTH */
        if (camel_imap_store_readline (store, &buf, ex) < 0) {
                if (store->istream) {
-                       camel_object_unref (store->istream);
+                       g_object_unref (store->istream);
                        store->istream = NULL;
                }
 
                if (store->ostream) {
-                       camel_object_unref (store->ostream);
+                       g_object_unref (store->ostream);
                        store->ostream = NULL;
                }
 
@@ -887,12 +885,12 @@ connect_to_server_process (CamelService *service, const gchar *cmd, CamelExcepti
        /* get the imap server capabilities */
        if (!imap_get_capability (service, ex)) {
                if (store->istream) {
-                       camel_object_unref (store->istream);
+                       g_object_unref (store->istream);
                        store->istream = NULL;
                }
 
                if (store->ostream) {
-                       camel_object_unref (store->ostream);
+                       g_object_unref (store->ostream);
                        store->ostream = NULL;
                }
 
@@ -1182,7 +1180,7 @@ imap_store_refresh_folders (CamelImapStore *store, CamelException *ex)
 
                /* NB: we can have vtrash folders also in our store ... bit hacky */
                if (!CAMEL_IS_IMAP_FOLDER(folder)) {
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                        continue;
                }
 
@@ -1198,12 +1196,12 @@ imap_store_refresh_folders (CamelImapStore *store, CamelException *ex)
                         * after being offline */
 
                        namedup = g_strdup (folder->full_name);
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                        imap_folder_effectively_unsubscribed (store, namedup, ex);
                        imap_forget_folder (store, namedup, ex);
                        g_free (namedup);
                } else
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
        }
 
        g_ptr_array_free (folders, TRUE);
@@ -1248,7 +1246,7 @@ try_auth (CamelImapStore *store, const gchar *mech, CamelException *ex)
                goto lose;
        }
 
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
 
        return TRUE;
 
@@ -1265,7 +1263,7 @@ try_auth (CamelImapStore *store, const gchar *mech, CamelException *ex)
                        _("Bad authentication response from server."));
        }
 
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
 
        return FALSE;
 }
@@ -1580,19 +1578,19 @@ imap_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 
        if (store->istream) {
                camel_stream_close(store->istream);
-               camel_object_unref (store->istream);
+               g_object_unref (store->istream);
                store->istream = NULL;
        }
 
        if (store->ostream) {
                camel_stream_close(store->ostream);
-               camel_object_unref (store->ostream);
+               g_object_unref (store->ostream);
                store->ostream = NULL;
        }
 
        store->connected = FALSE;
        if (store->current_folder) {
-               camel_object_unref (store->current_folder);
+               g_object_unref (store->current_folder);
                store->current_folder = NULL;
        }
 
@@ -1861,7 +1859,7 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
                folder_name = "INBOX";
 
        if (imap_store->current_folder) {
-               camel_object_unref (imap_store->current_folder);
+               g_object_unref (imap_store->current_folder);
                imap_store->current_folder = NULL;
        }
 
@@ -2029,12 +2027,12 @@ get_folder (CamelStore *store, const gchar *folder_name, guint32 flags, CamelExc
        new_folder = camel_imap_folder_new (store, folder_name, folder_dir, ex);
        g_free (folder_dir);
        if (new_folder) {
-               imap_store->current_folder = camel_object_ref (new_folder);
+               imap_store->current_folder = g_object_ref (new_folder);
                if (!camel_imap_folder_selected (new_folder, response, ex)) {
 
-                       camel_object_unref (imap_store->current_folder);
+                       g_object_unref (imap_store->current_folder);
                        imap_store->current_folder = NULL;
-                       camel_object_unref (new_folder);
+                       g_object_unref (new_folder);
                        new_folder = NULL;
                }
        }
@@ -2108,7 +2106,7 @@ delete_folder (CamelStore *store,
 
        camel_imap_response_free_without_processing (imap_store, response);
        if (imap_store->current_folder)
-               camel_object_unref (imap_store->current_folder);
+               g_object_unref (imap_store->current_folder);
        /* no need to actually create a CamelFolder for INBOX */
        imap_store->current_folder = NULL;
 
@@ -2222,7 +2220,7 @@ rename_folder (CamelStore *store,
 
        camel_imap_response_free_without_processing (imap_store, response);
        if (imap_store->current_folder)
-               camel_object_unref (imap_store->current_folder);
+               g_object_unref (imap_store->current_folder);
        /* no need to actually create a CamelFolder for INBOX */
        imap_store->current_folder = NULL;
 
@@ -2273,7 +2271,7 @@ rename_folder (CamelStore *store,
                                g_free (folder_dir);
                        }
 
-                       camel_object_unref (folder);
+                       g_object_unref (folder);
                }
        }
 
@@ -2737,8 +2735,8 @@ fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
                fi->total = ((CamelFolderSummary *)ims)->saved_count;
 
                if (!folder->summary)
-                       camel_object_unref (ims);
-               camel_object_unref (folder);
+                       g_object_unref (ims);
+               g_object_unref (folder);
        }
 }
 
@@ -2779,7 +2777,7 @@ refresh_free(CamelSession *session, CamelSessionThreadMsg *msg)
 {
        struct _refresh_msg *m = (struct _refresh_msg *)msg;
 
-       camel_object_unref (m->store);
+       g_object_unref (m->store);
        camel_exception_clear(&m->ex);
 }
 
@@ -2828,7 +2826,7 @@ get_folder_info (CamelStore *store,
                                imap_store->refresh_stamp = now;
 
                                m = camel_session_thread_msg_new(((CamelService *)store)->session, &refresh_ops, sizeof(*m));
-                               m->store = camel_object_ref (store);
+                               m->store = g_object_ref (store);
                                camel_exception_init(&m->ex);
                                camel_session_thread_queue(((CamelService *)store)->session, &m->msg, 0);
                        }
index 9aa9c2f..e24c244 100644 (file)
@@ -52,10 +52,24 @@ void camel_imap_msg_queue(CamelImapStore *store, CamelImapMsg *msg);
 
 G_END_DECLS
 
-#define CAMEL_IMAP_STORE_TYPE     (camel_imap_store_get_type ())
-#define CAMEL_IMAP_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_STORE_TYPE, CamelImapStore))
-#define CAMEL_IMAP_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STORE_TYPE, CamelImapStoreClass))
-#define CAMEL_IS_IMAP_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_STORE \
+       (camel_imap_store_get_type ())
+#define CAMEL_IMAP_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_STORE, CamelImapStore))
+#define CAMEL_IMAP_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_STORE, CamelImapStoreClass))
+#define CAMEL_IS_IMAP_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_STORE))
+#define CAMEL_IS_IMAP_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_STORE))
+#define CAMEL_IMAP_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_STORE, CamelImapStoreClass))
 
 G_BEGIN_DECLS
 
@@ -152,8 +166,7 @@ struct _CamelImapStoreClass {
        CamelOfflineStoreClass parent_class;
 };
 
-/* Standard Camel function */
-CamelType camel_imap_store_get_type (void);
+GType camel_imap_store_get_type (void);
 
 gboolean camel_imap_store_connected (CamelImapStore *store, CamelException *ex);
 
index 5581663..afc22e7 100644 (file)
@@ -57,7 +57,7 @@ static CamelMessageInfo * message_info_from_db (CamelFolderSummary *s, CamelMIRe
 static gint content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelMIRecord *mir);
 static CamelMessageContentInfo * content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir);
 
-static gpointer camel_imap_summary_parent_class;
+G_DEFINE_TYPE (CamelImapSummary, camel_imap_summary, CAMEL_TYPE_FOLDER_SUMMARY)
 
 static CamelMessageInfo *
 imap_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
@@ -79,8 +79,6 @@ camel_imap_summary_class_init (CamelImapSummaryClass *class)
 {
        CamelFolderSummaryClass *folder_summary_class;
 
-       camel_imap_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
-
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelImapMessageInfo);
        folder_summary_class->content_info_size = sizeof (CamelImapMessageContentInfo);
@@ -105,25 +103,6 @@ camel_imap_summary_init (CamelImapSummary *imap_summary)
 {
 }
 
-CamelType
-camel_imap_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(
-                       camel_folder_summary_get_type(), "CamelImapSummary",
-                       sizeof (CamelImapSummary),
-                       sizeof (CamelImapSummaryClass),
-                       (CamelObjectClassInitFunc) camel_imap_summary_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_imap_summary_init,
-                       NULL);
-       }
-
-       return type;
-}
-
 static gint
 sort_uid_cmp (gpointer enc, gint len1, gpointer  data1, gint len2, gpointer data2)
 {
@@ -181,7 +160,7 @@ camel_imap_summary_new (struct _CamelFolder *folder, const gchar *filename)
        CamelException ex;
        camel_exception_init (&ex);
 
-       summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_imap_summary_get_type ()));
+       summary = g_object_new (CAMEL_TYPE_IMAP_SUMMARY, NULL);
        summary->folder = folder;
        /* Don't do DB sort. Its pretty slow to load */
        if (folder && 0) {
index 276c22d..d7eefb1 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAP_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_imap_summary_get_type (), CamelImapSummary)
-#define CAMEL_IMAP_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imap_summary_get_type (), CamelImapSummaryClass)
-#define CAMEL_IS_IMAP_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_imap_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_SUMMARY \
+       (camel_imap_summary_get_type ())
+#define CAMEL_IMAP_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_SUMMARY, CamelImapSummary))
+#define CAMEL_IMAP_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_SUMMARY, CamelImapSummaryClass))
+#define CAMEL_IS_IMAP_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_SUMMARY))
+#define CAMEL_IS_IMAP_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_SUMMARY))
+#define CAMEL_IMAP_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_SUMMARY, CamelImapSummaryClass))
 
 #define CAMEL_IMAP_SERVER_FLAGS (CAMEL_MESSAGE_ANSWERED | \
                                 CAMEL_MESSAGE_DELETED | \
@@ -67,7 +82,7 @@ struct _CamelImapSummaryClass {
 
 };
 
-CamelType               camel_imap_summary_get_type     (void);
+GType               camel_imap_summary_get_type     (void);
 CamelFolderSummary *camel_imap_summary_new          (struct _CamelFolder *folder, const gchar *filename);
 
 void camel_imap_summary_add_offline (CamelFolderSummary *summary,
index 8a99941..ce42c85 100644 (file)
 #include "camel-imap-folder.h"
 #include "camel-imap-wrapper.h"
 
+#define CAMEL_IMAP_WRAPPER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_IMAP_WRAPPER, CamelImapWrapperPrivate))
+
 struct _CamelImapWrapperPrivate {
        GMutex *lock;
 };
@@ -38,7 +42,7 @@ struct _CamelImapWrapperPrivate {
 #define CAMEL_IMAP_WRAPPER_LOCK(f, l) (g_mutex_lock(((CamelImapWrapper *)f)->priv->l))
 #define CAMEL_IMAP_WRAPPER_UNLOCK(f, l) (g_mutex_unlock(((CamelImapWrapper *)f)->priv->l))
 
-static gpointer camel_imap_wrapper_parent_class;
+G_DEFINE_TYPE (CamelImapWrapper, camel_imap_wrapper, CAMEL_TYPE_DATA_WRAPPER)
 
 static void
 imap_wrapper_hydrate (CamelImapWrapper *imap_wrapper,
@@ -46,32 +50,43 @@ imap_wrapper_hydrate (CamelImapWrapper *imap_wrapper,
 {
        CamelDataWrapper *data_wrapper = (CamelDataWrapper *) imap_wrapper;
 
-       data_wrapper->stream = camel_object_ref (stream);
+       data_wrapper->stream = g_object_ref (stream);
        data_wrapper->offline = FALSE;
 
-       camel_object_unref (imap_wrapper->folder);
+       g_object_unref (imap_wrapper->folder);
        imap_wrapper->folder = NULL;
        g_free (imap_wrapper->uid);
        imap_wrapper->uid = NULL;
        g_free (imap_wrapper->part_spec);
-       imap_wrapper->part = NULL;
+       imap_wrapper->part_spec = NULL;
 }
 
 static void
-imap_wrapper_finalize (CamelObject *object)
+imap_wrapper_dispose (GObject *object)
 {
        CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (object);
 
-       if (imap_wrapper->folder)
-               camel_object_unref (CAMEL_OBJECT (imap_wrapper->folder));
-       if (imap_wrapper->uid)
-               g_free (imap_wrapper->uid);
-       if (imap_wrapper->part)
-               g_free (imap_wrapper->part_spec);
+       if (imap_wrapper->folder != NULL) {
+               g_object_unref (imap_wrapper->folder);
+               imap_wrapper->folder = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imap_wrapper_parent_class)->dispose (object);
+}
+
+static void
+imap_wrapper_finalize (GObject *object)
+{
+       CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (object);
+
+       g_free (imap_wrapper->uid);
+       g_free (imap_wrapper->part_spec);
 
        g_mutex_free (imap_wrapper->priv->lock);
 
-       g_free (imap_wrapper->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imap_wrapper_parent_class)->finalize (object);
 }
 
 static gssize
@@ -103,7 +118,7 @@ imap_wrapper_write_to_stream (CamelDataWrapper *data_wrapper,
                }
 
                imap_wrapper_hydrate (imap_wrapper, datastream);
-               camel_object_unref (datastream);
+               g_object_unref (datastream);
        }
        CAMEL_IMAP_WRAPPER_UNLOCK (imap_wrapper, lock);
 
@@ -114,9 +129,14 @@ imap_wrapper_write_to_stream (CamelDataWrapper *data_wrapper,
 static void
 camel_imap_wrapper_class_init (CamelImapWrapperClass *class)
 {
+       GObjectClass *object_class;
        CamelDataWrapperClass *data_wrapper_class;
 
-       camel_imap_wrapper_parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelImapWrapperPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imap_wrapper_dispose;
+       object_class->finalize = imap_wrapper_finalize;
 
        data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (class);
        data_wrapper_class->write_to_stream = imap_wrapper_write_to_stream;
@@ -125,30 +145,10 @@ camel_imap_wrapper_class_init (CamelImapWrapperClass *class)
 static void
 camel_imap_wrapper_init (CamelImapWrapper *imap_wrapper)
 {
-       imap_wrapper->priv = g_new0 (CamelImapWrapperPrivate, 1);
+       imap_wrapper->priv = CAMEL_IMAP_WRAPPER_GET_PRIVATE (imap_wrapper);
        imap_wrapper->priv->lock = g_mutex_new ();
 }
 
-CamelType
-camel_imap_wrapper_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (
-                       CAMEL_DATA_WRAPPER_TYPE,
-                       "CamelImapWrapper",
-                       sizeof (CamelImapWrapper),
-                       sizeof (CamelImapWrapperClass),
-                       (CamelObjectClassInitFunc) camel_imap_wrapper_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_imap_wrapper_init,
-                       (CamelObjectFinalizeFunc) imap_wrapper_finalize);
-       }
-
-       return type;
-}
-
 CamelDataWrapper *
 camel_imap_wrapper_new (CamelImapFolder *imap_folder,
                        CamelContentType *type, CamelTransferEncoding encoding,
@@ -164,12 +164,12 @@ camel_imap_wrapper_new (CamelImapFolder *imap_folder,
        sync_offline = (camel_url_get_param (((CamelService *) store)->url, "sync_offline") != NULL ||
                                        ((CamelOfflineFolder *)imap_folder)->sync_offline);
 
-       imap_wrapper = (CamelImapWrapper *)camel_object_new (camel_imap_wrapper_get_type());
+       imap_wrapper = g_object_new (CAMEL_TYPE_IMAP_WRAPPER, NULL);
        camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (imap_wrapper), type);
        ((CamelDataWrapper *)imap_wrapper)->offline = !sync_offline;
        ((CamelDataWrapper *)imap_wrapper)->encoding = encoding;
 
-       imap_wrapper->folder = camel_object_ref (imap_folder);
+       imap_wrapper->folder = g_object_ref (imap_folder);
        imap_wrapper->uid = g_strdup (uid);
        imap_wrapper->part_spec = g_strdup (part_spec);
 
@@ -182,7 +182,7 @@ camel_imap_wrapper_new (CamelImapFolder *imap_folder,
 
        if (stream) {
                imap_wrapper_hydrate (imap_wrapper, stream);
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
 
        return (CamelDataWrapper *)imap_wrapper;
index dd9dc42..df46207 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAP_WRAPPER_TYPE     (camel_imap_wrapper_get_type ())
-#define CAMEL_IMAP_WRAPPER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_WRAPPER_TYPE, CamelImapWrapper))
-#define CAMEL_IMAP_WRAPPER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_WRAPPER_TYPE, CamelImapWrapperClass))
-#define CAMEL_IS_IMAP_WRAPPER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_WRAPPER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAP_WRAPPER \
+       (camel_imap_wrapper_get_type ())
+#define CAMEL_IMAP_WRAPPER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAP_WRAPPER, CamelImapWrapper))
+#define CAMEL_IMAP_WRAPPER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAP_WRAPPER, CamelImapWrapperClass))
+#define CAMEL_IS_IMAP_WRAPPER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAP_WRAPPER))
+#define CAMEL_IS_IMAP_WRAPPER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAP_WRAPPER))
+#define CAMEL_IMAP_WRAPPER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAP_WRAPPER, CamelImapWrapperClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelImapWrapperClass {
        CamelDataWrapperClass parent_class;
 };
 
-CamelType camel_imap_wrapper_get_type (void);
+GType camel_imap_wrapper_get_type (void);
 
 /* Constructor */
 CamelDataWrapper *camel_imap_wrapper_new (CamelImapFolder *imap_folder,
index d5ac1cf..1390485 100644 (file)
@@ -39,9 +39,7 @@
 
 #define d(x)
 
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(o)))
-static CamelObjectClass *parent_class;
-static CamelOfflineFolderClass *offline_folder_class = NULL;
+G_DEFINE_TYPE (CamelIMAPXFolder, camel_imapx_folder, CAMEL_TYPE_FOLDER)
 
 CamelFolder *
 camel_imapx_folder_new(CamelStore *store, const gchar *folder_dir, const gchar *folder_name, CamelException *ex)
@@ -60,7 +58,7 @@ camel_imapx_folder_new(CamelStore *store, const gchar *folder_dir, const gchar *
        else
                short_name = folder_name;
 
-       folder = CAMEL_FOLDER (camel_object_new (CAMEL_IMAPX_FOLDER_TYPE));
+       folder = g_object_new (CAMEL_TYPE_IMAPX_FOLDER, NULL);
        camel_folder_construct(folder, store, folder_name, short_name);
        ifolder = (CamelIMAPXFolder *) folder;
 
@@ -109,6 +107,40 @@ camel_imapx_folder_new(CamelStore *store, const gchar *folder_dir, const gchar *
        return folder;
 }
 
+static void
+imapx_folder_dispose (GObject *object)
+{
+       CamelIMAPXFolder *folder = CAMEL_IMAPX_FOLDER (object);
+
+       if (folder->cache != NULL) {
+               g_object_unref (folder->cache);
+               folder->cache = NULL;
+       }
+
+       if (folder->search != NULL) {
+               g_object_unref (folder->search);
+               folder->search = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imapx_folder_parent_class)->dispose (object);
+}
+
+static void
+imapx_folder_finalize (GObject *object)
+{
+       CamelIMAPXFolder *folder = CAMEL_IMAPX_FOLDER (object);
+
+       if (folder->ignore_recent != NULL)
+               g_hash_table_unref (folder->ignore_recent);
+
+       g_mutex_free (folder->search_lock);
+       g_mutex_free (folder->stream_lock);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imapx_folder_parent_class)->finalize (object);
+}
+
 static gboolean
 imapx_refresh_info (CamelFolder *folder, CamelException *ex)
 {
@@ -205,11 +237,11 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
        
                g_mutex_lock (ifolder->stream_lock);
                if (camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg, stream) == -1) {
-                       camel_object_unref (msg);
+                       g_object_unref (msg);
                        msg = NULL;
                }
                g_mutex_unlock (ifolder->stream_lock);
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
 
        return msg;
@@ -394,29 +426,34 @@ imapx_search_by_expression (CamelFolder *folder, const gchar *expression, CamelE
 }
 
 static void
-imapx_folder_class_init (CamelIMAPXFolderClass *klass)
+camel_imapx_folder_class_init (CamelIMAPXFolderClass *class)
 {
-       offline_folder_class = CAMEL_OFFLINE_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_offline_folder_get_type ()));
-
-       ((CamelFolderClass *)klass)->refresh_info = imapx_refresh_info;
-       ((CamelFolderClass *)klass)->sync = imapx_sync;
-       ((CamelFolderClass *)klass)->search_by_expression = imapx_search_by_expression;
-       ((CamelFolderClass *)klass)->search_by_uids = imapx_search_by_uids;
-       ((CamelFolderClass *)klass)->count_by_expression = imapx_count_by_expression;
-       ((CamelFolderClass *)klass)->search_free = imapx_search_free;
-
-       ((CamelFolderClass *)klass)->expunge = imapx_expunge;
-       ((CamelFolderClass *)klass)->get_message = imapx_get_message;
-       ((CamelFolderClass *)klass)->sync_message = imapx_sync_message;
-       ((CamelFolderClass *)klass)->append_message = imapx_append_message;
-       ((CamelFolderClass *)klass)->transfer_messages_to = imapx_transfer_messages_to;
-       ((CamelFolderClass *)klass)->get_filename = imapx_get_filename;
+       GObjectClass *object_class;
+       CamelFolderClass *folder_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imapx_folder_dispose;
+       object_class->finalize = imapx_folder_finalize;
+
+       folder_class = CAMEL_FOLDER_CLASS (class);
+       folder_class->refresh_info = imapx_refresh_info;
+       folder_class->sync = imapx_sync;
+       folder_class->search_by_expression = imapx_search_by_expression;
+       folder_class->search_by_uids = imapx_search_by_uids;
+       folder_class->count_by_expression = imapx_count_by_expression;
+       folder_class->search_free = imapx_search_free;
+       folder_class->expunge = imapx_expunge;
+       folder_class->get_message = imapx_get_message;
+       folder_class->sync_message = imapx_sync_message;
+       folder_class->append_message = imapx_append_message;
+       folder_class->transfer_messages_to = imapx_transfer_messages_to;
+       folder_class->get_filename = imapx_get_filename;
 }
 
 static void
-imapx_folder_init(CamelObject *o, CamelObjectClass *klass)
+camel_imapx_folder_init (CamelIMAPXFolder *imapx_folder)
 {
-       CamelFolder *folder = (CamelFolder *)o;
+       CamelFolder *folder = CAMEL_FOLDER (imapx_folder);
 
        folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
                                 CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
@@ -428,37 +465,3 @@ imapx_folder_init(CamelObject *o, CamelObjectClass *klass)
        camel_folder_set_lock_async (folder, TRUE);
 }
 
-static void
-imapx_finalize (CamelObject *object)
-{
-       CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) object;
-
-       camel_object_unref (CAMEL_OBJECT (ifolder->cache));
-       
-       if (ifolder->ignore_recent)
-               g_hash_table_unref (ifolder->ignore_recent);
-
-       g_mutex_free (ifolder->search_lock);
-       g_mutex_free (ifolder->stream_lock);
-       if (ifolder->search)
-               camel_object_unref (CAMEL_OBJECT (ifolder->search));
-}
-
-CamelType
-camel_imapx_folder_get_type (void)
-{
-       static CamelType camel_imapx_folder_type = CAMEL_INVALID_TYPE;
-
-       if (!camel_imapx_folder_type) {
-               parent_class = camel_offline_folder_get_type();
-               camel_imapx_folder_type = camel_type_register (parent_class, "CamelIMAPXFolder",
-                                                             sizeof (CamelIMAPXFolder),
-                                                             sizeof (CamelIMAPXFolderClass),
-                                                             (CamelObjectClassInitFunc)imapx_folder_class_init,
-                                                             NULL,
-                                                             imapx_folder_init,
-                                                             (CamelObjectFinalizeFunc) imapx_finalize);
-       }
-
-       return camel_imapx_folder_type;
-}
index 256888f..0ea9361 100644 (file)
 #ifndef CAMEL_IMAPX_FOLDER_H
 #define CAMEL_IMAPX_FOLDER_H
 
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
 #include <camel/camel.h>
 
-#define CAMEL_IMAPX_FOLDER_TYPE     (camel_imapx_folder_get_type ())
-#define CAMEL_IMAPX_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAPX_FOLDER_TYPE, CamelIMAPXFolder))
-#define CAMEL_IMAPX_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAPX_FOLDER_TYPE, CamelIMAPXFolderClass))
-#define CAMEL_IS_IMAPX_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAPX_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_FOLDER \
+       (camel_imapx_folder_get_type ())
+#define CAMEL_IMAPX_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_FOLDER, CamelIMAPXFolder))
+#define CAMEL_IMAPX_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_FOLDER, CamelIMAPXFolderClass))
+#define CAMEL_IS_IMAPX_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_FOLDER))
+#define CAMEL_IS_IMAPX_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_FOLDER))
+#define CAMEL_IMAPX_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_FOLDER, CamelIMAPXFolderClass))
+
+G_BEGIN_DECLS
 
-typedef struct _CamelIMAPXFolder {
+typedef struct _CamelIMAPXFolder CamelIMAPXFolder;
+typedef struct _CamelIMAPXFolderClass CamelIMAPXFolderClass;
+
+struct _CamelIMAPXFolder {
        CamelOfflineFolder parent;
 
        gchar *raw_name;
@@ -51,21 +65,21 @@ typedef struct _CamelIMAPXFolder {
        
        GMutex *search_lock;
        GMutex *stream_lock;
-} CamelIMAPXFolder;
+};
 
-typedef struct _CamelIMAPXFolderClass {
+struct _CamelIMAPXFolderClass {
        CamelOfflineFolderClass parent_class;
-} CamelIMAPXFolderClass;
-
-/* Standard Camel function */
-CamelType camel_imapx_folder_get_type (void);
+};
 
-/* public methods */
-CamelFolder *camel_imapx_folder_new(CamelStore *parent, const gchar *path, const gchar *raw, CamelException *ex);
-gchar * imapx_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
+GType          camel_imapx_folder_get_type     (void);
+CamelFolder *  camel_imapx_folder_new          (CamelStore *parent,
+                                                const gchar *path,
+                                                const gchar *raw,
+                                                CamelException *ex);
+gchar *                imapx_get_filename              (CamelFolder *folder,
+                                                const gchar *uid,
+                                                CamelException *ex);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* CAMEL_IMAPX_FOLDER_H */
index 7270b28..bc068df 100644 (file)
@@ -65,7 +65,6 @@ struct _uidset_state {
        guint32 last;
 };
 
-struct _CamelIMAPXCommand;
 void imapx_uidset_init(struct _uidset_state *ss, gint total, gint limit);
 gint imapx_uidset_done(struct _uidset_state *ss, struct _CamelIMAPXCommand *ic);
 gint imapx_uidset_add(struct _uidset_state *ss, struct _CamelIMAPXCommand *ic, const gchar *uid);
@@ -73,7 +72,6 @@ static gboolean imapx_disconnect (CamelIMAPXServer *is);
 static gint imapx_uid_cmp(gconstpointer ap, gconstpointer bp, gpointer data);
 
 typedef struct _CamelIMAPXCommandPart CamelIMAPXCommandPart;
-typedef struct _CamelIMAPXCommand CamelIMAPXCommand;
 
 typedef enum {
        CAMEL_IMAPX_COMMAND_SIMPLE = 0,
@@ -285,7 +283,6 @@ static gint imapx_refresh_info_uid_cmp(gconstpointer ap, gconstpointer bp);
 static gint imapx_uids_array_cmp (gconstpointer ap, gconstpointer bp);
 static void imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, gint pri, CamelException *ex);
 
-typedef struct _CamelIMAPXIdle CamelIMAPXIdle;
 struct _CamelIMAPXIdle {
        GMutex *idle_lock;
        EFlag *idle_start_watch;
@@ -316,6 +313,8 @@ enum {
 
 static void imapx_select(CamelIMAPXServer *is, CamelFolder *folder, gboolean force, CamelException *ex);
 
+G_DEFINE_TYPE (CamelIMAPXServer, camel_imapx_server, CAMEL_TYPE_OBJECT)
+
 /*
   this creates a uid (or sequence number) set directly into a command,
   if total is set, then we break it up into total uids. (i.e. command time)
@@ -421,9 +420,9 @@ imapx_command_add_part(CamelIMAPXCommand *ic, camel_imapx_command_part_t type, g
                        camel_stream_reset((CamelStream *)ob);
                }
                type |= CAMEL_IMAPX_COMMAND_CONTINUATION;
-               camel_object_ref (ob);
+               g_object_ref (ob);
                ob_size = null->written;
-               camel_object_unref (null);
+               g_object_unref (null);
                camel_stream_printf((CamelStream *)ic->mem, "{%u}", ob_size);
                break;
        }
@@ -431,7 +430,7 @@ imapx_command_add_part(CamelIMAPXCommand *ic, camel_imapx_command_part_t type, g
                CamelObject *ob = o;
 
                /* we presume we'll need to get additional data only if we're not authenticated yet */
-               camel_object_ref (ob);
+               g_object_ref (ob);
                camel_stream_printf((CamelStream *)ic->mem, "%s", camel_sasl_get_mechanism (CAMEL_SASL (ob)));
                if (!camel_sasl_get_authenticated((CamelSasl *)ob))
                        type |= CAMEL_IMAPX_COMMAND_CONTINUATION;
@@ -707,7 +706,7 @@ camel_imapx_command_free(CamelIMAPXCommand *ic)
                return;
 
        if (ic->mem)
-               camel_object_unref (ic->mem);
+               g_object_unref (ic->mem);
        imapx_free_status(ic->status);
        g_free(ic->select);
 
@@ -720,7 +719,7 @@ camel_imapx_command_free(CamelIMAPXCommand *ic)
                                g_free(cp->ob);
                                break;
                        default:
-                               camel_object_unref (cp->ob);
+                               g_object_unref (cp->ob);
                        }
                }
                g_free(cp);
@@ -742,7 +741,7 @@ camel_imapx_command_close(CamelIMAPXCommand *ic)
                if (byte_array->len > 0)
                        imapx_command_add_part(ic, CAMEL_IMAPX_COMMAND_SIMPLE, NULL);
 
-               camel_object_unref (ic->mem);
+               g_object_unref (ic->mem);
                ic->mem = NULL;
        }
 }
@@ -1204,7 +1203,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex)
                                gboolean changed = FALSE;
                                gchar *uid = NULL;
 
-                               camel_object_ref (imap->select_folder);
+                               g_object_ref (imap->select_folder);
                                folder = imap->select_folder;
 
                                c(printf("flag changed: %d\n", id));
@@ -1234,7 +1233,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex)
 
                                if (mi)
                                        camel_message_info_free (mi);
-                               camel_object_unref (folder);
+                               g_object_unref (folder);
                        }
                }
 
@@ -1274,7 +1273,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex)
                                mp = camel_mime_parser_new();
                                camel_mime_parser_init_with_stream(mp, finfo->header);
                                mi = camel_folder_summary_info_new_from_parser(job->folder->summary, mp);
-                               camel_object_unref (mp);
+                               g_object_unref (mp);
 
                                if (mi) {
                                        guint32 server_flags;
@@ -1502,7 +1501,7 @@ imapx_continuation(CamelIMAPXServer *imap, CamelException *ex)
                // FIXME: errors
                if (cp->ob && (file = camel_stream_fs_new_with_name(cp->ob, O_RDONLY, 0))) {
                        camel_stream_write_to_stream(file, (CamelStream *)imap->stream);
-                       camel_object_unref (file);
+                       g_object_unref (file);
                } else if (cp->ob_size > 0) {
                        // Server is expecting data ... ummm, send it zeros?  abort?
                }
@@ -2017,7 +2016,7 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic)
                }
 
                if (is->select_pending)
-                       camel_object_unref (is->select_pending);
+                       g_object_unref (is->select_pending);
        } else {
                CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) is->select_pending;
                c(printf("Select ok!\n"));
@@ -2071,10 +2070,10 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE
                return;
 
        is->select_pending = folder;
-       camel_object_ref (folder);
+       g_object_ref (folder);
        if (is->select_folder) {
                g_free(is->select);
-               camel_object_unref (is->select_folder);
+               g_object_unref (is->select_folder);
                is->select = NULL;
                is->select_folder = NULL;
        }
@@ -2150,7 +2149,7 @@ imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex)
 
        if (ex && ex->id) {
                e(printf ("Unable to connect %d %s \n", ex->id, ex->desc));
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return FALSE;
        }
 
@@ -2163,12 +2162,12 @@ imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex)
                        camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
                                        _("Could not connect to %s (port %s): %s"),
                                        is->url->host, serv, g_strerror(errno));
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return FALSE;
        }
 
        is->stream = (CamelIMAPXStream *) camel_imapx_stream_new(tcp_stream);
-       camel_object_unref (tcp_stream);
+       g_object_unref (tcp_stream);
 
        /* Disable Nagle - we send a lot of small requests which nagle slows down */
        sockopt.option = CAMEL_SOCKOPT_NODELAY;
@@ -2235,7 +2234,7 @@ imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex)
 exit:
        if (camel_exception_is_set (ex)) {
                e(printf("Unable to connect %d %s \n", ex->id, ex->desc));
-               camel_object_unref (is->stream);
+               g_object_unref (is->stream);
                is->stream = NULL;
                
                if (is->cinfo) {
@@ -2304,7 +2303,7 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex)
                if (service->url->authmech
                                && (sasl = camel_sasl_new("imap", service->url->authmech, NULL))) {
                        ic = camel_imapx_command_new("AUTHENTICATE", NULL, "AUTHENTICATE %A", sasl);
-                       camel_object_unref (sasl);
+                       g_object_unref (sasl);
                } else {
                        ic = camel_imapx_command_new("LOGIN", NULL, "LOGIN %s %s", service->url->user, service->url->passwd);
                }
@@ -2446,7 +2445,7 @@ imapx_command_fetch_message_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic)
                                camel_exception_setv(job->ex, 1, "Error fetching message: %s", ic->status->text);
                        else
                                camel_exception_xfer (job->ex, ic->ex);
-                       camel_object_unref (stream);
+                       g_object_unref (stream);
                        job->u.get_message.stream = NULL;
                } else {
                        CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) job->folder;
@@ -2589,8 +2588,8 @@ imapx_command_copy_messages_step_done (CamelIMAPXServer *is, CamelIMAPXCommand *
        }
 
 cleanup:
-       camel_object_unref (job->u.copy_messages.dest);
-       camel_object_unref (job->folder);
+       g_object_unref (job->u.copy_messages.dest);
+       g_object_unref (job->folder);
 
        imapx_job_done (is, job);
        camel_imapx_command_free (ic);
@@ -2664,7 +2663,7 @@ imapx_command_append_message_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic)
        g_free (old_uid);
        camel_message_info_free(job->u.append_message.info);
        g_free(job->u.append_message.path);
-       camel_object_unref (job->folder);
+       g_object_unref (job->folder);
 
        imapx_job_done (is, job);
        camel_imapx_command_free (ic);
@@ -3772,15 +3771,53 @@ imapx_parser_thread (gpointer d)
 }
 
 static void
-imapx_server_class_init(CamelIMAPXServerClass *ieclass)
+imapx_server_finalize (GObject *object)
+{
+       CamelIMAPXServer *is = CAMEL_IMAPX_SERVER (object);
+
+       g_static_rec_mutex_free(&is->queue_lock);
+       g_static_rec_mutex_free (&is->ostream_lock);
+       g_hash_table_destroy (is->uid_eflags);
+
+       camel_folder_change_info_free (is->changes);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imapx_server_parent_class)->finalize (object);
+}
+
+static void
+imapx_server_constructed (GObject *object)
+{
+       CamelIMAPXServer *server;
+       CamelIMAPXServerClass *class;
+
+       server = CAMEL_IMAPX_SERVER (object);
+       class = CAMEL_IMAPX_SERVER_GET_CLASS (server);
+
+       server->tagprefix = class->tagprefix;
+       class->tagprefix++;
+       if (class->tagprefix > 'Z')
+               class->tagprefix = 'A';
+       server->tagprefix = 'A';
+
+}
+
+static void
+camel_imapx_server_class_init(CamelIMAPXServerClass *class)
 {
-       ieclass->tagprefix = 'A';
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = imapx_server_finalize;
+       object_class->constructed = imapx_server_constructed;
+
+       class->tagprefix = 'A';
 
-//     camel_object_class_add_event((CamelObjectClass *)ieclass, "status", NULL);
+//     camel_object_class_add_event((CamelObjectClass *)class, "status", NULL);
 }
 
 static void
-imapx_server_init(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass)
+camel_imapx_server_init (CamelIMAPXServer *is)
 {
        camel_dlist_init(&is->queue);
        camel_dlist_init(&is->active);
@@ -3793,12 +3830,6 @@ imapx_server_init(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass)
        g_static_rec_mutex_init (&is->queue_lock);
        g_static_rec_mutex_init (&is->ostream_lock);
 
-       is->tagprefix = isclass->tagprefix;
-       isclass->tagprefix++;
-       if (isclass->tagprefix > 'Z')
-               isclass->tagprefix = 'A';
-       is->tagprefix = 'A';
-
        is->state = IMAPX_DISCONNECTED;
 
        is->expunged = NULL;
@@ -3808,43 +3839,13 @@ imapx_server_init(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass)
        is->uid_eflags = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify) e_flag_free);
 }
 
-static void
-imapx_server_finalize(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass)
-{
-       g_static_rec_mutex_free(&is->queue_lock);
-       g_static_rec_mutex_free (&is->ostream_lock);
-       g_hash_table_destroy (is->uid_eflags);
-
-       camel_folder_change_info_free (is->changes);
-}
-
-CamelType
-camel_imapx_server_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (
-                       camel_object_get_type (),
-                       "CamelIMAPXServer",
-                       sizeof (CamelIMAPXServer),
-                       sizeof (CamelIMAPXServerClass),
-                       (CamelObjectClassInitFunc) imapx_server_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) imapx_server_init,
-                       (CamelObjectFinalizeFunc) imapx_server_finalize);
-       }
-
-       return type;
-}
-
 CamelIMAPXServer *
 camel_imapx_server_new(CamelStore *store, CamelURL *url)
 {
-       CamelIMAPXServer *is = (CamelIMAPXServer *)camel_object_new(camel_imapx_server_get_type());
+       CamelIMAPXServer *is;
 
-       is->session = ((CamelService *)store)->session;
-       camel_object_ref (is->session);
+       is = g_object_new (CAMEL_TYPE_IMAPX_SERVER, NULL);
+       is->session = g_object_ref (CAMEL_SERVICE (store)->session);
        is->store = store;
        is->url = camel_url_copy(url);
 
@@ -3862,13 +3863,13 @@ imapx_disconnect (CamelIMAPXServer *is)
                if (camel_stream_close (is->stream->source) == -1)
                        ret = FALSE;
 
-               camel_object_unref (CAMEL_OBJECT (is->stream));
+               g_object_unref (CAMEL_OBJECT (is->stream));
                is->stream = NULL;
        }
 
        /* TODO need a select lock */
        if (is->select_folder) {
-               camel_object_unref (is->select_folder);
+               g_object_unref (is->select_folder);
                is->select_folder = NULL;
        }
 
@@ -3878,7 +3879,7 @@ imapx_disconnect (CamelIMAPXServer *is)
        }
 
        if (is->select_pending) {
-               camel_object_unref (is->select_pending);
+               g_object_unref (is->select_pending);
                is->select_pending = NULL;
        }
 
@@ -4050,7 +4051,7 @@ camel_imapx_server_sync_message (CamelIMAPXServer *is, CamelFolder *folder, cons
 
        stream = imapx_server_get_message (is, folder, NULL, uid, IMAPX_PRIORITY_SYNC_MESSAGE, ex);
        if (stream)
-               camel_object_unref (stream);
+               g_object_unref (stream);
 }
 
 void
@@ -4068,8 +4069,8 @@ camel_imapx_server_copy_message (CamelIMAPXServer *is, CamelFolder *source, Came
        job->u.copy_messages.delete_originals = delete_originals;
        job->ex = ex;
 
-       camel_object_ref (source);
-       camel_object_ref (dest);
+       g_object_ref (source);
+       g_object_ref (dest);
 
        if (imapx_register_job (is, job))
                imapx_run_job (is, job);
@@ -4100,12 +4101,12 @@ camel_imapx_server_append_message(CamelIMAPXServer *is, CamelFolder *folder, Cam
        }
 
        filter = camel_stream_filter_new (stream);
-       camel_object_unref (stream);
+       g_object_unref (stream);
        canon = camel_mime_filter_canon_new(CAMEL_MIME_FILTER_CANON_CRLF);
        camel_stream_filter_add((CamelStreamFilter *)filter, canon);
        res = camel_data_wrapper_write_to_stream((CamelDataWrapper *)message, filter);
-       camel_object_unref (canon);
-       camel_object_unref (filter);
+       g_object_unref (canon);
+       g_object_unref (filter);
 
        if (res == -1) {
                camel_exception_setv(ex, 2, "Cannot create spool file: %s", g_strerror(errno));
@@ -4130,7 +4131,7 @@ camel_imapx_server_append_message(CamelIMAPXServer *is, CamelFolder *folder, Cam
        job->noreply = 1;
        job->start = imapx_job_append_message_start;
        job->folder = folder;
-       camel_object_ref (folder);
+       g_object_ref (folder);
        job->u.append_message.info = info;
        job->u.append_message.path = tmp;
 
index 382cfa2..5be5238 100644 (file)
 #include <camel/camel.h>
 #include <libedataserver/e-flag.h>
 
-struct _CamelFolder;
-struct _CamelException;
-struct _CamelMimeMessage;
-struct _CamelMessageInfo;
+#include "camel-imapx-stream.h"
+#include "camel-imapx-store-summary.h"
+
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_SERVER \
+       (camel_imapx_server_get_type ())
+#define CAMEL_IMAPX_SERVER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_SERVER, CamelIMAPXServer))
+#define CAMEL_IMAPX_SERVER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_SERVER, CamelIMAPXServerClass))
+#define CAMEL_IS_IMAPX_SERVER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_SERVER))
+#define CAMEL_IS_IMAPX_SERVER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_SERVER))
+#define CAMEL_IMAPX_SERVER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_SERVER, CamelIMAPXServerClass))
 
-#define CAMEL_IMAPX_SERVER(obj)         CAMEL_CHECK_CAST (obj, camel_imapx_server_get_type (), CamelIMAPPServer)
-#define CAMEL_IMAPX_SERVER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imapx_server_get_type (), CamelIMAPPServerClass)
-#define CAMEL_IS_IMAPX_SERVER(obj)      CAMEL_CHECK_TYPE (obj, camel_imapx_server_get_type ())
+#define IMAPX_MODE_READ (1<<0)
+#define IMAPX_MODE_WRITE (1<<1)
+
+G_BEGIN_DECLS
 
 typedef struct _CamelIMAPXServer CamelIMAPXServer;
 typedef struct _CamelIMAPXServerClass CamelIMAPXServerClass;
 
-#define IMAPX_MODE_READ (1<<0)
-#define IMAPX_MODE_WRITE (1<<1)
+typedef struct _CamelIMAPXCommand CamelIMAPXCommand;
+typedef struct _CamelIMAPXIdle CamelIMAPXIdle;
 
 struct _CamelIMAPXServer {
-       CamelObject cobject;
+       CamelObject parent;
 
-       struct _CamelStore *store;
-       struct _CamelSession *session;
+       CamelStore *store;
+       CamelSession *session;
 
        /* Info about the current connection */
-       struct _CamelURL *url;
-       struct _CamelIMAPXStream *stream;
+       CamelURL *url;
+       CamelIMAPXStream *stream;
        struct _capability_info *cinfo;
        gboolean is_ssl_stream;
 
@@ -66,16 +84,16 @@ struct _CamelIMAPXServer {
        /* Current command/work queue.  All commands are stored in one list,
           all the time, so they can be cleaned up in exception cases */
        GStaticRecMutex queue_lock;
-       struct _CamelIMAPXCommand *literal;
+       CamelIMAPXCommand *literal;
        CamelDList queue;
        CamelDList active;
        CamelDList done;
 
        /* info on currently selected folder */
-       struct _CamelFolder *select_folder;
+       CamelFolder *select_folder;
        gchar *select;
-       struct _CamelFolderChangeInfo *changes;
-       struct _CamelFolder *select_pending;
+       CamelFolderChangeInfo *changes;
+       CamelFolder *select_pending;
        guint32 permanentflags;
        guint32 uidvalidity;
        guint32 unseen;
@@ -97,7 +115,7 @@ struct _CamelIMAPXServer {
        gboolean parser_quit;
 
        /* Idle */
-       struct _CamelIMAPXIdle *idle;
+       CamelIMAPXIdle *idle;
        gboolean use_idle;
 
        /* used for storing eflags to syncronize duplicate get_message requests */
@@ -105,32 +123,72 @@ struct _CamelIMAPXServer {
 };
 
 struct _CamelIMAPXServerClass {
-       CamelObjectClass cclass;
+       CamelObjectClass parent_class;
 
        gchar tagprefix;
 };
 
-CamelType               camel_imapx_server_get_type     (void);
-CamelIMAPXServer *camel_imapx_server_new(struct _CamelStore *store, struct _CamelURL *url);
-
-gboolean camel_imapx_server_connect(CamelIMAPXServer *is, gint state, CamelException *ex);
-gboolean imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex);
-
-GPtrArray *camel_imapx_server_list(CamelIMAPXServer *is, const gchar *top, guint32 flags, CamelException *ex);
-
-void camel_imapx_server_refresh_info(CamelIMAPXServer *is, CamelFolder *folder, struct _CamelException *ex);
-void camel_imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
-void camel_imapx_server_expunge(CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
-void camel_imapx_server_noop (CamelIMAPXServer *is, CamelFolder *folder, CamelException *ex);
-
-CamelStream *camel_imapx_server_get_message(CamelIMAPXServer *is, CamelFolder *folder, const gchar *uid, struct _CamelException *ex);
-void camel_imapx_server_copy_message (CamelIMAPXServer *is, CamelFolder *source, CamelFolder *dest, GPtrArray *uids, gboolean delete_originals, CamelException *ex);
-void camel_imapx_server_append_message(CamelIMAPXServer *is, CamelFolder *folder, struct _CamelMimeMessage *message, const struct _CamelMessageInfo *mi, CamelException *ex);
-void camel_imapx_server_sync_message (CamelIMAPXServer *is, CamelFolder *folder, const gchar *uid, CamelException *ex);
-
-void camel_imapx_server_manage_subscription (CamelIMAPXServer *is, const gchar *folder_name, gboolean subscribe, CamelException *ex);
-void camel_imapx_server_create_folder (CamelIMAPXServer *is, const gchar *folder_name, CamelException *ex);
-void camel_imapx_server_delete_folder (CamelIMAPXServer *is, const gchar *folder_name, CamelException *ex);
-void camel_imapx_server_rename_folder (CamelIMAPXServer *is, const gchar *old_name, const gchar *new_name, CamelException *ex);
+GType          camel_imapx_server_get_type     (void);
+CamelIMAPXServer *
+               camel_imapx_server_new          (CamelStore *store,
+                                                CamelURL *url);
+gboolean       camel_imapx_server_connect      (CamelIMAPXServer *is,
+                                                gint state,
+                                                CamelException *ex);
+gboolean       imapx_connect_to_server         (CamelIMAPXServer *is,
+                                                CamelException *ex);
+GPtrArray *    camel_imapx_server_list         (CamelIMAPXServer *is,
+                                                const gchar *top,
+                                                guint32 flags,
+                                                CamelException *ex);
+void           camel_imapx_server_refresh_info (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                CamelException *ex);
+void           camel_imapx_server_sync_changes (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                CamelException *ex);
+void           camel_imapx_server_expunge      (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                CamelException *ex);
+void           camel_imapx_server_noop         (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                CamelException *ex);
+CamelStream *  camel_imapx_server_get_message  (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                const gchar *uid,
+                                                CamelException *ex);
+void           camel_imapx_server_copy_message (CamelIMAPXServer *is,
+                                                CamelFolder *source,
+                                                CamelFolder *dest,
+                                                GPtrArray *uids,
+                                                gboolean delete_originals,
+                                                CamelException *ex);
+void           camel_imapx_server_append_message
+                                               (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                CamelMimeMessage *message,
+                                                const CamelMessageInfo *mi,
+                                                CamelException *ex);
+void           camel_imapx_server_sync_message (CamelIMAPXServer *is,
+                                                CamelFolder *folder,
+                                                const gchar *uid,
+                                                CamelException *ex);
+void           camel_imapx_server_manage_subscription
+                                               (CamelIMAPXServer *is,
+                                                const gchar *folder_name,
+                                                gboolean subscribe,
+                                                CamelException *ex);
+void           camel_imapx_server_create_folder(CamelIMAPXServer *is,
+                                                const gchar *folder_name,
+                                                CamelException *ex);
+void           camel_imapx_server_delete_folder(CamelIMAPXServer *is,
+                                                const gchar *folder_name,
+                                                CamelException *ex);
+void           camel_imapx_server_rename_folder(CamelIMAPXServer *is,
+                                                const gchar *old_name,
+                                                const gchar *new_name,
+                                                CamelException *ex);
+
+G_END_DECLS
 
 #endif /* CAMEL_IMAPX_SERVER_H */
index 8eb7ec2..4d2c277 100644 (file)
@@ -39,8 +39,6 @@
 
 #define CAMEL_IMAPX_STORE_SUMMARY_VERSION (0)
 
-#define _PRIVATE(o) (((CamelIMAPXStoreSummary *)(o))->priv)
-
 static gint summary_header_load(CamelStoreSummary *, FILE *);
 static gint summary_header_save(CamelStoreSummary *, FILE *);
 
@@ -52,69 +50,30 @@ static void          store_info_free(CamelStoreSummary *, CamelStoreInfo *);
 static const gchar *store_info_string(CamelStoreSummary *, const CamelStoreInfo *, gint);
 static void store_info_set_string(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 
-static void camel_imapx_store_summary_class_init (CamelIMAPXStoreSummaryClass *klass);
-static void camel_imapx_store_summary_init       (CamelIMAPXStoreSummary *obj);
-static void camel_imapx_store_summary_finalize   (CamelObject *obj);
-
-static CamelStoreSummaryClass *camel_imapx_store_summary_parent;
+G_DEFINE_TYPE (CamelIMAPXStoreSummary, camel_imapx_store_summary, CAMEL_TYPE_STORE_SUMMARY)
 
 static void
-camel_imapx_store_summary_class_init (CamelIMAPXStoreSummaryClass *klass)
+camel_imapx_store_summary_class_init (CamelIMAPXStoreSummaryClass *class)
 {
-       CamelStoreSummaryClass *ssklass = (CamelStoreSummaryClass *)klass;
-
-       ssklass->summary_header_load = summary_header_load;
-       ssklass->summary_header_save = summary_header_save;
-
-       /*ssklass->store_info_new  = store_info_new;*/
-       ssklass->store_info_load = store_info_load;
-       ssklass->store_info_save = store_info_save;
-       ssklass->store_info_free = store_info_free;
-
-       ssklass->store_info_string = store_info_string;
-       ssklass->store_info_set_string = store_info_set_string;
+       CamelStoreSummaryClass *store_summary_class;
+
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+       store_summary_class->summary_header_load = summary_header_load;
+       store_summary_class->summary_header_save = summary_header_save;
+       store_summary_class->store_info_load = store_info_load;
+       store_summary_class->store_info_save = store_info_save;
+       store_summary_class->store_info_free = store_info_free;
+       store_summary_class->store_info_string = store_info_string;
+       store_summary_class->store_info_set_string = store_info_set_string;
 }
 
 static void
 camel_imapx_store_summary_init (CamelIMAPXStoreSummary *s)
 {
-       /*struct _CamelImapStoreSummaryPrivate *p;
-
-         p = _PRIVATE(s) = g_malloc0(sizeof(*p));*/
-
        ((CamelStoreSummary *)s)->store_info_size = sizeof(CamelIMAPXStoreInfo);
        s->version = CAMEL_IMAPX_STORE_SUMMARY_VERSION;
 }
 
-static void
-camel_imapx_store_summary_finalize (CamelObject *obj)
-{
-       /*struct _CamelImapStoreSummaryPrivate *p;*/
-       /*CamelImapStoreSummary *s = (CamelImapStoreSummary *)obj;*/
-
-       /*p = _PRIVATE(obj);
-         g_free(p);*/
-}
-
-CamelType
-camel_imapx_store_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               camel_imapx_store_summary_parent = (CamelStoreSummaryClass *)camel_store_summary_get_type();
-               type = camel_type_register((CamelType)camel_imapx_store_summary_parent, "CamelIMAPXStoreSummary",
-                                          sizeof (CamelIMAPXStoreSummary),
-                                          sizeof (CamelIMAPXStoreSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_imapx_store_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_imapx_store_summary_init,
-                                          (CamelObjectFinalizeFunc) camel_imapx_store_summary_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_imapx_store_summary_new:
  *
@@ -125,9 +84,7 @@ camel_imapx_store_summary_get_type (void)
 CamelIMAPXStoreSummary *
 camel_imapx_store_summary_new (void)
 {
-       CamelIMAPXStoreSummary *new = CAMEL_IMAPX_STORE_SUMMARY ( camel_object_new (camel_imapx_store_summary_get_type ()));
-
-       return new;
+       return g_object_new (CAMEL_TYPE_IMAPX_STORE_SUMMARY, NULL);
 }
 
 /**
@@ -549,11 +506,13 @@ static gint
 summary_header_load(CamelStoreSummary *s, FILE *in)
 {
        CamelIMAPXStoreSummary *is = (CamelIMAPXStoreSummary *)s;
+       CamelStoreSummaryClass *store_summary_class;
        gint32 version, capabilities;
 
        camel_imapx_namespace_list_clear (is->namespaces);
 
-       if (camel_imapx_store_summary_parent->summary_header_load((CamelStoreSummary *)s, in) == -1
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+       if (store_summary_class->summary_header_load((CamelStoreSummary *)s, in) == -1
            || camel_file_util_decode_fixed_int32(in, &version) == -1)
                return -1;
 
@@ -581,9 +540,11 @@ static gint
 summary_header_save(CamelStoreSummary *s, FILE *out)
 {
        CamelIMAPXStoreSummary *is = (CamelIMAPXStoreSummary *)s;
+       CamelStoreSummaryClass *store_summary_class;
 
        /* always write as latest version */
-       if (camel_imapx_store_summary_parent->summary_header_save((CamelStoreSummary *)s, out) == -1
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+       if (store_summary_class->summary_header_save((CamelStoreSummary *)s, out) == -1
            || camel_file_util_encode_fixed_int32(out, CAMEL_IMAPX_STORE_SUMMARY_VERSION) == -1
            || camel_file_util_encode_fixed_int32(out, is->capabilities) == -1)
                return -1;
@@ -598,8 +559,10 @@ static CamelStoreInfo *
 store_info_load(CamelStoreSummary *s, FILE *in)
 {
        CamelIMAPXStoreInfo *mi;
+       CamelStoreSummaryClass *store_summary_class;
 
-       mi = (CamelIMAPXStoreInfo *)camel_imapx_store_summary_parent->store_info_load(s, in);
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+       mi = (CamelIMAPXStoreInfo *)store_summary_class->store_info_load(s, in);
        if (mi) {
                if (camel_file_util_decode_string(in, &mi->full_name) == -1) {
                        camel_store_summary_info_free(s, (CamelStoreInfo *)mi);
@@ -618,8 +581,10 @@ static gint
 store_info_save(CamelStoreSummary *s, FILE *out, CamelStoreInfo *mi)
 {
        CamelIMAPXStoreInfo *isi = (CamelIMAPXStoreInfo *)mi;
+       CamelStoreSummaryClass *store_summary_class;
 
-       if (camel_imapx_store_summary_parent->store_info_save(s, out, mi) == -1
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+       if (store_summary_class->store_info_save(s, out, mi) == -1
            || camel_file_util_encode_string(out, isi->full_name) == -1)
                return -1;
 
@@ -630,25 +595,31 @@ static void
 store_info_free(CamelStoreSummary *s, CamelStoreInfo *mi)
 {
        CamelIMAPXStoreInfo *isi = (CamelIMAPXStoreInfo *)mi;
+       CamelStoreSummaryClass *store_summary_class;
 
        g_free(isi->full_name);
-       camel_imapx_store_summary_parent->store_info_free(s, mi);
+
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+       store_summary_class->store_info_free(s, mi);
 }
 
 static const gchar *
 store_info_string(CamelStoreSummary *s, const CamelStoreInfo *mi, gint type)
 {
        CamelIMAPXStoreInfo *isi = (CamelIMAPXStoreInfo *)mi;
+       CamelStoreSummaryClass *store_summary_class;
 
        /* FIXME: Locks? */
 
        g_assert (mi != NULL);
 
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+
        switch (type) {
        case CAMEL_IMAPX_STORE_INFO_FULL_NAME:
                return isi->full_name;
        default:
-               return camel_imapx_store_summary_parent->store_info_string(s, mi, type);
+               return store_summary_class->store_info_string(s, mi, type);
        }
 }
 
@@ -656,9 +627,12 @@ static void
 store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint type, const gchar *str)
 {
        CamelIMAPXStoreInfo *isi = (CamelIMAPXStoreInfo *)mi;
+       CamelStoreSummaryClass *store_summary_class;
 
        g_assert(mi != NULL);
 
+       store_summary_class = CAMEL_STORE_SUMMARY_CLASS (camel_imapx_store_summary_parent_class);
+
        switch (type) {
        case CAMEL_IMAPX_STORE_INFO_FULL_NAME:
                d(printf("Set full name %s -> %s\n", isi->full_name, str));
@@ -668,7 +642,7 @@ store_info_set_string(CamelStoreSummary *s, CamelStoreInfo *mi, gint type, const
                camel_store_summary_unlock (s, CSS_SUMMARY_LOCK);
                break;
        default:
-               camel_imapx_store_summary_parent->store_info_set_string(s, mi, type, str);
+               store_summary_class->store_info_set_string(s, mi, type, str);
                break;
        }
 }
index cf78e88..c290ee0 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAPX_STORE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_imapx_store_summary_get_type (), CamelIMAPXStoreSummary)
-#define CAMEL_IMAPX_STORE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imapx_store_summary_get_type (), CamelIMAPXStoreSummaryClass)
-#define CAMEL_IS_IMAPX_STORE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_imapx_store_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_STORE_SUMMARY \
+       (camel_imapx_store_summary_get_type ())
+#define CAMEL_IMAPX_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_STORE_SUMMARY, CamelIMAPXStoreSummary)
+#define CAMEL_IMAPX_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_STORE_SUMMARY, CamelIMAPXStoreSummaryClass)
+#define CAMEL_IS_IMAPX_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_STORE_SUMMARY))
+#define CAMEL_IS_IMAPX_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_STORE_SUMMARY))
+#define CAMEL_IMAPX_STORE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_STORE_SUMMARY, CamelIMAPXStoreSummaryClass))
 
 G_BEGIN_DECLS
 
-typedef struct _CamelIMAPXStoreSummary      CamelIMAPXStoreSummary;
+typedef struct _CamelIMAPXStoreSummary CamelIMAPXStoreSummary;
 typedef struct _CamelIMAPXStoreSummaryClass CamelIMAPXStoreSummaryClass;
 
 typedef struct _CamelIMAPXStoreInfo CamelIMAPXStoreInfo;
@@ -48,7 +63,7 @@ struct _CamelIMAPXStoreInfo {
 typedef struct _CamelIMAPXStoreNamespace CamelIMAPXStoreNamespace;
 
 struct _CamelIMAPXStoreNamespace {
-       struct _CamelIMAPXStoreNamespace *next;
+       CamelIMAPXStoreNamespace *next;
        gchar *path;            /* display path */
        gchar *full_name;       /* real name */
        gchar sep;              /* directory separator */
@@ -61,9 +76,7 @@ typedef struct _CamelIMAPXNamespaceList {
 } CamelIMAPXNamespaceList;
 
 struct _CamelIMAPXStoreSummary {
-       CamelStoreSummary summary;
-
-       struct _CamelIMAPXStoreSummaryPrivate *priv;
+       CamelStoreSummary parent;
 
        /* header info */
        guint32 version;        /* version of base part of file */
@@ -72,32 +85,65 @@ struct _CamelIMAPXStoreSummary {
 };
 
 struct _CamelIMAPXStoreSummaryClass {
-       CamelStoreSummaryClass summary_class;
+       CamelStoreSummaryClass parent_class;
 };
 
-CamelType                       camel_imapx_store_summary_get_type     (void);
-CamelIMAPXStoreSummary      *camel_imapx_store_summary_new     (void);
+GType          camel_imapx_store_summary_get_type (void);
+CamelIMAPXStoreSummary *
+               camel_imapx_store_summary_new   (void);
 
 /* TODO: this api needs some more work, needs to support lists */
-CamelIMAPXStoreNamespace *camel_imapx_store_summary_namespace_new(CamelIMAPXStoreSummary *s, const gchar *full_name, gchar dir_sep);
-void camel_imapx_store_summary_namespace_set(CamelIMAPXStoreSummary *s, CamelIMAPXStoreNamespace *ns);
-CamelIMAPXStoreNamespace *camel_imapx_store_summary_namespace_find_path(CamelIMAPXStoreSummary *s, const gchar *path);
-CamelIMAPXStoreNamespace *camel_imapx_store_summary_namespace_find_full(CamelIMAPXStoreSummary *s, const gchar *full_name);
+CamelIMAPXStoreNamespace *
+               camel_imapx_store_summary_namespace_new
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *full_name,
+                                                gchar dir_sep);
+void           camel_imapx_store_summary_namespace_set
+                                               (CamelIMAPXStoreSummary *s,
+                                                CamelIMAPXStoreNamespace *ns);
+CamelIMAPXStoreNamespace *
+               camel_imapx_store_summary_namespace_find_path
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *path);
+CamelIMAPXStoreNamespace *
+               camel_imapx_store_summary_namespace_find_full
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *full_name);
 
 /* converts to/from utf8 canonical nasmes */
-gchar *camel_imapx_store_summary_full_to_path(CamelIMAPXStoreSummary *s, const gchar *full_name, gchar dir_sep);
-gchar *camel_imapx_store_summary_path_to_full(CamelIMAPXStoreSummary *s, const gchar *path, gchar dir_sep);
-
-CamelIMAPXStoreInfo *camel_imapx_store_summary_full_name(CamelIMAPXStoreSummary *s, const gchar *full_name);
-CamelIMAPXStoreInfo *camel_imapx_store_summary_add_from_full(CamelIMAPXStoreSummary *s, const gchar *full_name, gchar dir_sep);
+gchar *                camel_imapx_store_summary_full_to_path
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *full_name,
+                                                gchar dir_sep);
+gchar *                camel_imapx_store_summary_path_to_full
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *path,
+                                                gchar dir_sep);
+
+CamelIMAPXStoreInfo *
+               camel_imapx_store_summary_full_name
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *full_name);
+CamelIMAPXStoreInfo *
+               camel_imapx_store_summary_add_from_full
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *full_name,
+                                                gchar dir_sep);
 
 /* a convenience lookup function. always use this if path known */
-gchar *camel_imapx_store_summary_full_from_path(CamelIMAPXStoreSummary *s, const gchar *path);
+gchar *                camel_imapx_store_summary_full_from_path
+                                               (CamelIMAPXStoreSummary *s,
+                                                const gchar *path);
 
-void camel_imapx_store_summary_set_namespaces (CamelIMAPXStoreSummary *summary, const CamelIMAPXNamespaceList *nsl);
+void           camel_imapx_store_summary_set_namespaces
+                                               (CamelIMAPXStoreSummary *summary,
+                                                const CamelIMAPXNamespaceList *nsl);
 
 /* helpe macro's */
-#define camel_imapx_store_info_full_name(s, i) (camel_store_info_string((CamelStoreSummary *)s, (const CamelStoreInfo *)i, CAMEL_IMAPX_STORE_INFO_FULL_NAME))
+#define camel_imapx_store_info_full_name(s, i) \
+       (camel_store_info_string ( \
+               (CamelStoreSummary *)s, (const CamelStoreInfo *)i, \
+               CAMEL_IMAPX_STORE_INFO_FULL_NAME))
 
 G_END_DECLS
 
index 7848be5..629007d 100644 (file)
@@ -53,7 +53,7 @@
 
 #define FINFO_REFRESH_INTERVAL 60
 
-static CamelOfflineStoreClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelIMAPXStore, camel_imapx_store, CAMEL_TYPE_STORE)
 
 static guint
 imapx_name_hash(gconstpointer key)
@@ -109,13 +109,32 @@ imapx_parse_receiving_options (CamelIMAPXStore *istore, CamelURL *url)
                istore->rec_options |= IMAPX_USE_IDLE;
 }
 
+static void
+imapx_store_finalize (GObject *object)
+{
+       CamelIMAPXStore *imapx_store = CAMEL_IMAPX_STORE (object);
+
+       /* force disconnect so we dont have it run later, after we've cleaned up some stuff */
+       /* SIGH */
+
+       camel_service_disconnect((CamelService *)imapx_store, TRUE, NULL);
+       g_mutex_free (imapx_store->get_finfo_lock);
+
+       g_free (imapx_store->base_url);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imapx_store_parent_class)->finalize (object);
+}
+
 static gboolean
 imapx_construct(CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex)
 {
        gchar *summary;
        CamelIMAPXStore *store = (CamelIMAPXStore *)service;
+       CamelServiceClass *service_class;
 
-       if (!CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex))
+       service_class = CAMEL_SERVICE_CLASS (camel_imapx_store_parent_class);
+       if (!service_class->construct (service, session, provider, url, ex))
                return FALSE;
 
        store->base_url = camel_url_to_string (service->url, (CAMEL_URL_HIDE_PASSWORD |
@@ -206,8 +225,10 @@ static gboolean
 imapx_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 {
        CamelIMAPXStore *istore = CAMEL_IMAPX_STORE (service);
+       CamelServiceClass *service_class;
 
-       CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex);
+       service_class = CAMEL_SERVICE_CLASS (camel_imapx_store_parent_class);
+       service_class->disconnect (service, clean, ex);
 
        if (istore->server)
                camel_imapx_server_connect(istore->server, FALSE, ex);
@@ -218,7 +239,11 @@ imapx_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 static CamelFolder *
 imapx_get_junk(CamelStore *store, CamelException *ex)
 {
-       CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_junk(store, ex);
+       CamelFolder *folder;
+       CamelStoreClass *store_class;
+
+       store_class = CAMEL_STORE_CLASS (camel_imapx_store_parent_class);
+       folder = store_class->get_junk (store, ex);
 
        if (folder) {
                gchar *state = g_build_filename(((CamelIMAPXStore *)store)->storage_path, "system", "Junk.cmeta", NULL);
@@ -235,7 +260,11 @@ imapx_get_junk(CamelStore *store, CamelException *ex)
 static CamelFolder *
 imapx_get_trash (CamelStore *store, CamelException *ex)
 {
-       CamelFolder *folder = CAMEL_STORE_CLASS(parent_class)->get_trash(store, ex);
+       CamelFolder *folder;
+       CamelStoreClass *store_class;
+
+       store_class = CAMEL_STORE_CLASS (camel_imapx_store_parent_class);
+       folder = store_class->get_trash (store, ex);
 
        if (folder) {
                gchar *state = g_build_filename(((CamelIMAPXStore *)store)->storage_path, "system", "Trash.cmeta", NULL);
@@ -406,8 +435,8 @@ fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
                fi->total = ((CamelFolderSummary *)ims)->saved_count;
 
                if (!folder->summary)
-                       camel_object_unref (ims);
-               camel_object_unref (folder);
+                       g_object_unref (ims);
+               g_object_unref (folder);
        }
 }
 
@@ -1173,7 +1202,7 @@ imapx_refresh_free(CamelSession *session, CamelSessionThreadMsg *msg)
 {
        struct _imapx_refresh_msg *m = (struct _imapx_refresh_msg *)msg;
 
-       camel_object_unref (m->store);
+       g_object_unref (m->store);
        camel_exception_clear(&m->ex);
 }
 
@@ -1232,7 +1261,7 @@ imapx_get_folder_info(CamelStore *store, const gchar *top, guint32 flags, CamelE
                        istore->last_refresh_time = time (NULL);
                        m = camel_session_thread_msg_new(((CamelService *)store)->session, &imapx_refresh_ops, sizeof(*m));
                        m->store = store;
-                       camel_object_ref (store);
+                       g_object_ref (store);
                        camel_exception_init(&m->ex);
                        camel_session_thread_queue(((CamelService *)store)->session, &m->msg, 0);
                }
@@ -1290,13 +1319,16 @@ imapx_get_folder_info(CamelStore *store, const gchar *top, guint32 flags, CamelE
 static gboolean
 imapx_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex)
 {
+       CamelStoreClass *store_class;
        gboolean res;
 
-       res = CAMEL_STORE_CLASS(parent_class)->can_refresh_folder (store, info, ex) ||
+       store_class = CAMEL_STORE_CLASS (camel_imapx_store_parent_class);
+
+       res = store_class->can_refresh_folder (store, info, ex) ||
              (camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL) ||
              (camel_url_get_param (((CamelService *)store)->url, "check_lsub") != NULL && (info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
 
-       if (!res && !camel_exception_is_set (ex) && CAMEL_IS_IMAP_STORE (store)) {
+       if (!res && !camel_exception_is_set (ex) && CAMEL_IS_IMAPX_STORE (store)) {
                CamelStoreInfo *si;
                CamelStoreSummary *sm = CAMEL_STORE_SUMMARY (((CamelIMAPXStore *)(store))->summary);
 
@@ -1331,83 +1363,50 @@ imapx_folder_subscribed (CamelStore *store, const gchar *folder_name)
 }
 
 static void
-camel_imapx_store_class_init(CamelIMAPXStoreClass *klass)
+camel_imapx_store_class_init(CamelIMAPXStoreClass *class)
 {
-       CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS(klass);
-       CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS(klass);
-
-       parent_class = CAMEL_OFFLINE_STORE_CLASS (camel_type_get_global_classfuncs (camel_offline_store_get_type ()));
-
-       camel_service_class->construct = imapx_construct;
-       camel_service_class->query_auth_types = imapx_query_auth_types;
-       camel_service_class->get_name = imapx_get_name;
-       camel_service_class->connect = imapx_connect;
-       camel_service_class->disconnect = imapx_disconnect;
-
-       camel_store_class->get_trash = imapx_get_trash;
-       camel_store_class->get_junk = imapx_get_junk;
-       camel_store_class->noop = imapx_noop;
-       camel_store_class->get_folder = imapx_get_folder;
-       camel_store_class->get_inbox = imapx_get_inbox;
-       camel_store_class->hash_folder_name = imapx_hash_folder_name;
-       camel_store_class->compare_folder_name = imapx_compare_folder_name;
-
-       camel_store_class->can_refresh_folder = imapx_can_refresh_folder;
-       camel_store_class->create_folder = imapx_create_folder;
-       camel_store_class->rename_folder = imapx_rename_folder;
-       camel_store_class->delete_folder = imapx_delete_folder;
-       camel_store_class->subscribe_folder = imapx_store_subscribe_folder;
-       camel_store_class->unsubscribe_folder = imapx_store_unsubscribe_folder;
-       camel_store_class->get_folder_info = imapx_get_folder_info;
-       camel_store_class->folder_subscribed = imapx_folder_subscribed;
-       camel_store_class->free_folder_info = camel_store_free_folder_info_full;
-
-       ((CamelStoreClass *)klass)->hash_folder_name = imapx_name_hash;
-       ((CamelStoreClass *)klass)->compare_folder_name = imapx_name_equal;
+       GObjectClass *object_class;
+       CamelServiceClass *service_class;
+       CamelStoreClass *store_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = imapx_store_finalize;
+
+       service_class = CAMEL_SERVICE_CLASS (class);
+       service_class->construct = imapx_construct;
+       service_class->query_auth_types = imapx_query_auth_types;
+       service_class->get_name = imapx_get_name;
+       service_class->connect = imapx_connect;
+       service_class->disconnect = imapx_disconnect;
+
+       store_class = CAMEL_STORE_CLASS (class);
+       store_class->get_trash = imapx_get_trash;
+       store_class->get_junk = imapx_get_junk;
+       store_class->noop = imapx_noop;
+       store_class->get_folder = imapx_get_folder;
+       store_class->get_inbox = imapx_get_inbox;
+       store_class->hash_folder_name = imapx_hash_folder_name;
+       store_class->compare_folder_name = imapx_compare_folder_name;
+       store_class->can_refresh_folder = imapx_can_refresh_folder;
+       store_class->create_folder = imapx_create_folder;
+       store_class->rename_folder = imapx_rename_folder;
+       store_class->delete_folder = imapx_delete_folder;
+       store_class->subscribe_folder = imapx_store_subscribe_folder;
+       store_class->unsubscribe_folder = imapx_store_unsubscribe_folder;
+       store_class->get_folder_info = imapx_get_folder_info;
+       store_class->folder_subscribed = imapx_folder_subscribed;
+       store_class->free_folder_info = camel_store_free_folder_info_full;
+       store_class->hash_folder_name = imapx_name_hash;
+       store_class->compare_folder_name = imapx_name_equal;
 }
 
 static void
-camel_imapx_store_init (gpointer object, gpointer klass)
+camel_imapx_store_init (CamelIMAPXStore *istore)
 {
-       CamelStore *store = (CamelStore *) object;
-       CamelIMAPXStore *istore = CAMEL_IMAPX_STORE (object);
+       CamelStore *store = CAMEL_STORE (istore);
 
        store->flags |= CAMEL_STORE_ASYNC | CAMEL_STORE_SUBSCRIPTIONS;
        istore->get_finfo_lock = g_mutex_new ();
        istore->last_refresh_time = time (NULL) - (FINFO_REFRESH_INTERVAL + 10);
        istore->dir_sep = '/';
 }
-
-static void
-imapx_store_finalize(CamelObject *object)
-{
-       CamelIMAPXStore *imapx_store = CAMEL_IMAPX_STORE (object);
-
-       /* force disconnect so we dont have it run later, after we've cleaned up some stuff */
-       /* SIGH */
-
-       camel_service_disconnect((CamelService *)imapx_store, TRUE, NULL);
-       g_mutex_free (imapx_store->get_finfo_lock);
-
-       if (imapx_store->base_url)
-               g_free (imapx_store->base_url);
-}
-
-CamelType
-camel_imapx_store_get_type (void)
-{
-       static CamelType camel_imapx_store_type = CAMEL_INVALID_TYPE;
-
-       if (!camel_imapx_store_type) {
-               camel_imapx_store_type = camel_type_register(camel_offline_store_get_type (),
-                                                           "CamelIMAPXStore",
-                                                           sizeof (CamelIMAPXStore),
-                                                           sizeof (CamelIMAPXStoreClass),
-                                                           (CamelObjectClassInitFunc) camel_imapx_store_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_imapx_store_init,
-                                                            imapx_store_finalize);
-       }
-
-       return camel_imapx_store_type;
-}
index 3da0782..79fb9da 100644 (file)
 #ifndef CAMEL_IMAPX_STORE_H
 #define CAMEL_IMAPX_STORE_H
 
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
 #include <camel/camel.h>
 
+#include "camel-imapx-server.h"
 #include "camel-imapx-store-summary.h"
 
-#define CAMEL_IMAPX_STORE_TYPE     (camel_imapx_store_get_type ())
-#define CAMEL_IMAPX_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAPX_STORE_TYPE, CamelIMAPXStore))
-#define CAMEL_IMAPX_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAPX_STORE_TYPE, CamelIMAPXStoreClass))
-#define CAMEL_IS_IMAP_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAPX_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_STORE \
+       (camel_imapx_store_get_type ())
+#define CAMEL_IMAPX_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_STORE, CamelIMAPXStore))
+#define CAMEL_IMAPX_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_STORE, CamelIMAPXStoreClass))
+#define CAMEL_IS_IMAPX_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_STORE))
+#define CAMEL_IS_IMAPX_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_STORE))
+#define CAMEL_IMAPX_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_STORE, CamelIMAPXStoreClass))
 
 #define IMAPX_OVERRIDE_NAMESPACE       (1 << 0)
 #define IMAPX_CHECK_ALL                        (1 << 1)
@@ -47,10 +57,15 @@ extern "C" {
 #define IMAPX_CHECK_LSUB               (1 << 6)
 #define IMAPX_USE_IDLE                 (1 << 7)
 
-typedef struct {
+G_BEGIN_DECLS
+
+typedef struct _CamelIMAPXStore CamelIMAPXStore;
+typedef struct _CamelIMAPXStoreClass CamelIMAPXStoreClass;
+
+struct _CamelIMAPXStore {
        CamelOfflineStore parent;
 
-       struct _CamelIMAPXServer *server;
+       CamelIMAPXServer *server;
 
        CamelIMAPXStoreSummary *summary; /* in-memory list of folders */
        gchar *namespace, dir_sep, *base_url, *storage_path;
@@ -69,19 +84,15 @@ typedef struct {
        gchar *login_error;
 
        GPtrArray *pending_list;
-} CamelIMAPXStore;
+};
 
-typedef struct {
+struct _CamelIMAPXStoreClass {
        CamelOfflineStoreClass parent_class;
+};
 
-} CamelIMAPXStoreClass;
-
-/* Standard Camel function */
-CamelType camel_imapx_store_get_type (void);
+GType          camel_imapx_store_get_type (void);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* CAMEL_IMAPX_STORE_H */
 
index 270747d..c63cdc3 100644 (file)
 #define t(x) 
 #define io(x)
 
-static CamelObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_IMAPX_STREAM_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
 #define CAMEL_IMAPX_STREAM_SIZE (4096)
 #define CAMEL_IMAPX_STREAM_TOKEN (4096) /* maximum token size */
 
+G_DEFINE_TYPE (CamelIMAPXStream, camel_imapx_stream, CAMEL_TYPE_STREAM)
+
 static gint
-stream_fill(CamelIMAPXStream *is)
+imapx_stream_fill (CamelIMAPXStream *is)
 {
        gint left = 0;
 
@@ -72,8 +69,35 @@ stream_fill(CamelIMAPXStream *is)
        return -1;
 }
 
+static void
+imapx_stream_dispose (GObject *object)
+{
+       CamelIMAPXStream *stream = CAMEL_IMAPX_STREAM (object);
+
+       if (stream->source != NULL) {
+               g_object_unref (stream->source);
+               stream->source = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_imapx_stream_parent_class)->dispose (object);
+}
+
+static void
+imapx_stream_finalize (GObject *object)
+{
+       CamelIMAPXStream *stream = CAMEL_IMAPX_STREAM (object);
+
+       g_free (stream->buf);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_imapx_stream_parent_class)->finalize (object);
+}
+
 static gssize
-stream_read(CamelStream *stream, gchar *buffer, gsize n)
+imapx_stream_read (CamelStream *stream,
+                   gchar *buffer,
+                   gsize n)
 {
        CamelIMAPXStream *is = (CamelIMAPXStream *)stream;
        gssize max;
@@ -102,7 +126,9 @@ stream_read(CamelStream *stream, gchar *buffer, gsize n)
 }
 
 static gssize
-stream_write(CamelStream *stream, const gchar *buffer, gsize n)
+imapx_stream_write (CamelStream *stream,
+                    const gchar *buffer,
+                    gsize n)
 {
        CamelIMAPXStream *is = (CamelIMAPXStream *)stream;
 
@@ -112,21 +138,21 @@ stream_write(CamelStream *stream, const gchar *buffer, gsize n)
 }
 
 static gint
-stream_close(CamelStream *stream)
+imapx_stream_close (CamelStream *stream)
 {
        /* nop? */
        return 0;
 }
 
 static gint
-stream_flush(CamelStream *stream)
+imapx_stream_flush (CamelStream *stream)
 {
        /* nop? */
        return 0;
 }
 
 static gboolean
-stream_eos(CamelStream *stream)
+imapx_stream_eos (CamelStream *stream)
 {
        CamelIMAPXStream *is = (CamelIMAPXStream *)stream;
 
@@ -134,30 +160,33 @@ stream_eos(CamelStream *stream)
 }
 
 static gint
-stream_reset(CamelStream *stream)
+imapx_stream_reset (CamelStream *stream)
 {
        /* nop?  reset literal mode? */
        return 0;
 }
 
 static void
-camel_imapx_stream_class_init (CamelStreamClass *camel_imapx_stream_class)
+camel_imapx_stream_class_init (CamelIMAPXStreamClass *class)
 {
-       CamelStreamClass *camel_stream_class = (CamelStreamClass *)camel_imapx_stream_class;
-
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
-
-       /* virtual method definition */
-       camel_stream_class->read = stream_read;
-       camel_stream_class->write = stream_write;
-       camel_stream_class->close = stream_close;
-       camel_stream_class->flush = stream_flush;
-       camel_stream_class->eos = stream_eos;
-       camel_stream_class->reset = stream_reset;
+       GObjectClass *object_class;
+       CamelStreamClass *stream_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = imapx_stream_dispose;
+       object_class->finalize = imapx_stream_finalize;
+
+       stream_class = CAMEL_STREAM_CLASS (class);
+       stream_class->read = imapx_stream_read;
+       stream_class->write = imapx_stream_write;
+       stream_class->close = imapx_stream_close;
+       stream_class->flush = imapx_stream_flush;
+       stream_class->eos = imapx_stream_eos;
+       stream_class->reset = imapx_stream_reset;
 }
 
 static void
-camel_imapx_stream_init(CamelIMAPXStream *is, CamelIMAPXStreamClass *isclass)
+camel_imapx_stream_init (CamelIMAPXStream *is)
 {
        /* +1 is room for appending a 0 if we need to for a token */
        is->ptr = is->end = is->buf = g_malloc(CAMEL_IMAPX_STREAM_SIZE+1);
@@ -165,33 +194,6 @@ camel_imapx_stream_init(CamelIMAPXStream *is, CamelIMAPXStreamClass *isclass)
        is->tokenend = is->tokenbuf + CAMEL_IMAPX_STREAM_SIZE;
 }
 
-static void
-camel_imapx_stream_finalize(CamelIMAPXStream *is)
-{
-       g_free(is->buf);
-       if (is->source)
-               camel_object_unref (is->source);
-}
-
-CamelType
-camel_imapx_stream_get_type (void)
-{
-       static CamelType camel_imapx_stream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_imapx_stream_type == CAMEL_INVALID_TYPE) {
-               camel_imapx_stream_type = camel_type_register( camel_stream_get_type(),
-                                                           "CamelIMAPXStream",
-                                                           sizeof( CamelIMAPXStream ),
-                                                           sizeof( CamelIMAPXStreamClass ),
-                                                           (CamelObjectClassInitFunc) camel_imapx_stream_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_imapx_stream_init,
-                                                           (CamelObjectFinalizeFunc) camel_imapx_stream_finalize );
-       }
-
-       return camel_imapx_stream_type;
-}
-
 /**
  * camel_imapx_stream_new:
  *
@@ -205,9 +207,8 @@ camel_imapx_stream_new(CamelStream *source)
 {
        CamelIMAPXStream *is;
 
-       is = (CamelIMAPXStream *)camel_object_new(camel_imapx_stream_get_type ());
-       camel_object_ref (source);
-       is->source = source;
+       is = g_object_new (CAMEL_TYPE_IMAPX_STREAM, NULL);
+       is->source = g_object_ref (source);
 
        return (CamelStream *)is;
 }
@@ -233,7 +234,7 @@ skip_ws(CamelIMAPXStream *is, guchar *pp, guchar *pe)
        do {
                while (p >= e ) {
                        is->ptr = p;
-                       if (stream_fill(is) == IMAPX_TOK_ERROR)
+                       if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                return IMAPX_TOK_ERROR;
                        p = is->ptr;
                        e = is->end;
@@ -380,7 +381,7 @@ camel_imapx_stream_nstring_stream(CamelIMAPXStream *is, CamelStream **stream, Ca
                        mem = camel_stream_mem_new();
                        if (camel_stream_write_to_stream((CamelStream *)is, mem) == -1) {
                                camel_exception_setv (ex, 1, "nstring: io error: %s", strerror(errno));
-                               camel_object_unref (mem);
+                               g_object_unref (mem);
                                ret = -1;
                                break;
                        }
@@ -482,7 +483,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
        do {
                while (p >= e ) {
                        is->ptr = p;
-                       if (stream_fill(is) == IMAPX_TOK_ERROR)
+                       if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                goto io_error;
                        p = is->ptr;
                        e = is->end;
@@ -516,7 +517,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
                                                        }
                                                }
                                                is->ptr = p;
-                                               if (stream_fill(is) == IMAPX_TOK_ERROR)
+                                               if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                                        goto io_error;
                                                p = is->ptr;
                                                e = is->end;
@@ -531,7 +532,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
                                }
                        }
                        is->ptr = p;
-                       if (stream_fill(is) == IMAPX_TOK_ERROR)
+                       if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                goto io_error;
                        p = is->ptr;
                        e = is->end;
@@ -545,7 +546,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
                                if (c == '\\') {
                                        while (p >= e) {
                                                is->ptr = p;
-                                               if (stream_fill(is) == IMAPX_TOK_ERROR)
+                                               if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                                        goto io_error;
                                                p = is->ptr;
                                                e = is->end;
@@ -574,7 +575,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
                                }
                        }
                        is->ptr = p;
-                       if (stream_fill(is) == IMAPX_TOK_ERROR)
+                       if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                goto io_error;
                        p = is->ptr;
                        e = is->end;
@@ -607,7 +608,7 @@ camel_imapx_stream_token(CamelIMAPXStream *is, guchar **data, guint *len, CamelE
                                }
                        }
                        is->ptr = p;
-                       if (stream_fill(is) == IMAPX_TOK_ERROR)
+                       if (imapx_stream_fill(is) == IMAPX_TOK_ERROR)
                                goto io_error;
                        p = is->ptr;
                        e = is->end;
@@ -652,7 +653,7 @@ gint camel_imapx_stream_gets(CamelIMAPXStream *is, guchar **start, guint *len)
 
        max = is->end - is->ptr;
        if (max == 0) {
-               max = stream_fill(is);
+               max = imapx_stream_fill(is);
                if (max <= 0)
                        return max;
        }
@@ -683,7 +684,7 @@ gint camel_imapx_stream_getl(CamelIMAPXStream *is, guchar **start, guint *len)
        if (is->literal > 0) {
                max = is->end - is->ptr;
                if (max == 0) {
-                       max = stream_fill(is);
+                       max = imapx_stream_fill(is);
                        if (max <= 0)
                                return max;
                }
index 0416c56..433a01f 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAPX_STREAM(obj)         CAMEL_CHECK_CAST (obj, camel_imapx_stream_get_type (), CamelIMAPXStream)
-#define CAMEL_IMAPX_STREAM_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imapx_stream_get_type (), CamelIMAPXStreamClass)
-#define CAMEL_IS_IMAPX_STREAM(obj)      CAMEL_CHECK_TYPE (obj, camel_imapx_stream_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_STREAM \
+       (camel_imapx_stream_get_type ())
+#define CAMEL_IMAPX_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_STREAM, CamelIMAPXStream))
+#define CAMEL_IMAPX_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_STREAM, CamelIMAPXStreamClass))
+#define CAMEL_IS_IMAPX_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_STREAM))
+#define CAMEL_IS_IMAPX_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_STREAM))
+#define CAMEL_IMAPX_STREAM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_STREAM, CamelIMAPXStreamClass))
+
+G_BEGIN_DECLS
 
-typedef struct _CamelIMAPXStreamClass CamelIMAPXStreamClass;
 typedef struct _CamelIMAPXStream CamelIMAPXStream;
+typedef struct _CamelIMAPXStreamClass CamelIMAPXStreamClass;
 
 typedef enum {
        IMAPX_TOK_PROTOCOL = -2,
@@ -60,36 +77,63 @@ struct _CamelIMAPXStreamClass {
        CamelStreamClass parent_class;
 };
 
-CamelType       camel_imapx_stream_get_type    (void);
-
-CamelStream     *camel_imapx_stream_new                (CamelStream *source);
-
-gint            camel_imapx_stream_buffered    (CamelIMAPXStream *is);
-
-camel_imapx_token_t camel_imapx_stream_token   (CamelIMAPXStream *is, guchar **start, guint *len, CamelException *ex); /* throws IO,PARSE exception */
-void            camel_imapx_stream_ungettoken  (CamelIMAPXStream *is, camel_imapx_token_t tok, guchar *token, guint len);
-
-void            camel_imapx_stream_set_literal (CamelIMAPXStream *is, guint literal);
-gint            camel_imapx_stream_gets                (CamelIMAPXStream *is, guchar **start, guint *len);
-gint            camel_imapx_stream_getl                (CamelIMAPXStream *is, guchar **start, guint *len);
+GType          camel_imapx_stream_get_type     (void);
+CamelStream *  camel_imapx_stream_new          (CamelStream *source);
+gint           camel_imapx_stream_buffered     (CamelIMAPXStream *is);
+
+/* throws IO,PARSE exception */
+camel_imapx_token_t
+               camel_imapx_stream_token        (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                guint *len,
+                                                CamelException *ex);
+
+void           camel_imapx_stream_ungettoken   (CamelIMAPXStream *is,
+                                                camel_imapx_token_t tok,
+                                                guchar *token,
+                                                guint len);
+void           camel_imapx_stream_set_literal  (CamelIMAPXStream *is,
+                                                guint literal);
+gint           camel_imapx_stream_gets         (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                guint *len);
+gint            camel_imapx_stream_getl        (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                guint *len);
 
 /* all throw IO,PARSE exceptions */
 
 /* gets an atom, upper-cases */
-gint            camel_imapx_stream_atom                (CamelIMAPXStream *is, guchar **start, guint *len, CamelException *ex);
+gint           camel_imapx_stream_atom         (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                guint *len,
+                                                CamelException *ex);
 /* gets an atom or string */
-gint            camel_imapx_stream_astring     (CamelIMAPXStream *is, guchar **start, CamelException *ex);
+gint           camel_imapx_stream_astring      (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                CamelException *ex);
 /* gets a NIL or a string, start==NULL if NIL */
-gint            camel_imapx_stream_nstring     (CamelIMAPXStream *is, guchar **start, CamelException *ex);
+gint           camel_imapx_stream_nstring      (CamelIMAPXStream *is,
+                                                guchar **start,
+                                                CamelException *ex);
 /* gets a NIL or string into a stream, stream==NULL if NIL */
-gint            camel_imapx_stream_nstring_stream(CamelIMAPXStream *is, CamelStream **stream, CamelException *ex);
+gint           camel_imapx_stream_nstring_stream
+                                               (CamelIMAPXStream *is,
+                                                CamelStream **stream,
+                                                CamelException *ex);
 /* gets 'text' */
-gint            camel_imapx_stream_text                (CamelIMAPXStream *is, guchar **text, CamelException *ex);
+gint           camel_imapx_stream_text         (CamelIMAPXStream *is,
+                                                guchar **text,
+                                                CamelException *ex);
 
 /* gets a 'number' */
-guint32                 camel_imapx_stream_number(CamelIMAPXStream *is, CamelException *ex);
+guint32                 camel_imapx_stream_number      (CamelIMAPXStream *is,
+                                                CamelException *ex);
 
 /* skips the rest of a line, including literals, etc */
-gint camel_imapx_stream_skip(CamelIMAPXStream *is, CamelException *ex);
+gint           camel_imapx_stream_skip         (CamelIMAPXStream *is,
+                                                CamelException *ex);
+
+G_END_DECLS
 
 #endif /* CAMEL_IMAPX_STREAM_H */
index 2db97dd..5fd38f2 100644 (file)
@@ -56,37 +56,20 @@ static CamelMessageInfo * message_info_from_db (CamelFolderSummary *s, CamelMIRe
 static gint content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelMIRecord *mir);
 static CamelMessageContentInfo * content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir);
 
-static void camel_imapx_summary_class_init (CamelIMAPXSummaryClass *klass);
-static void camel_imapx_summary_init       (CamelIMAPXSummary *obj);
-
-static CamelFolderSummaryClass *camel_imapx_summary_parent;
-
-CamelType
-camel_imapx_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(
-                       camel_folder_summary_get_type(), "CamelIMAPXSummary",
-                       sizeof (CamelIMAPXSummary),
-                       sizeof (CamelIMAPXSummaryClass),
-                       (CamelObjectClassInitFunc) camel_imapx_summary_class_init,
-                       NULL,
-                       (CamelObjectInitFunc) camel_imapx_summary_init,
-                       NULL);
-       }
-
-       return type;
-}
+G_DEFINE_TYPE (CamelIMAPXSummary, camel_imapx_summary, CAMEL_TYPE_FOLDER_SUMMARY)
 
 static CamelMessageInfo *
 imapx_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 {
        CamelIMAPXMessageInfo *to;
+       CamelFolderSummaryClass *folder_summary_class;
        const CamelIMAPXMessageInfo *from = (const CamelIMAPXMessageInfo *)mi;
 
-       to = (CamelIMAPXMessageInfo *)camel_imapx_summary_parent->message_info_clone(s, mi);
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       to = (CamelIMAPXMessageInfo *)
+               folder_summary_class->message_info_clone(s, mi);
        to->server_flags = from->server_flags;
 
        /* FIXME: parent clone should do this */
@@ -96,32 +79,27 @@ imapx_message_info_clone(CamelFolderSummary *s, const CamelMessageInfo *mi)
 }
 
 static void
-camel_imapx_summary_class_init (CamelIMAPXSummaryClass *klass)
+camel_imapx_summary_class_init (CamelIMAPXSummaryClass *class)
 {
-       CamelFolderSummaryClass *cfs_class = (CamelFolderSummaryClass *) klass;
-
-       camel_imapx_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_folder_summary_get_type()));
-
-       cfs_class->message_info_size = sizeof(CamelIMAPXMessageInfo);
-       cfs_class->content_info_size = sizeof(CamelIMAPXMessageContentInfo);
-
-       cfs_class->message_info_clone = imapx_message_info_clone;
-
-       cfs_class->summary_header_load = summary_header_load;
-       cfs_class->summary_header_save = summary_header_save;
-       cfs_class->message_info_load = message_info_load;
-       cfs_class->message_info_save = message_info_save;
-       cfs_class->content_info_load = content_info_load;
-       cfs_class->content_info_save = content_info_save;
-
-       cfs_class->summary_header_to_db = summary_header_to_db;
-       cfs_class->summary_header_from_db = summary_header_from_db;
-       cfs_class->message_info_to_db = message_info_to_db;
-       cfs_class->message_info_from_db = message_info_from_db;
-       cfs_class->content_info_to_db = content_info_to_db;
-       cfs_class->content_info_from_db = content_info_from_db;
-
-       cfs_class->info_set_user_flag = info_set_user_flag;
+       CamelFolderSummaryClass *folder_summary_class;
+
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
+       folder_summary_class->message_info_size = sizeof (CamelIMAPXMessageInfo);
+       folder_summary_class->content_info_size = sizeof (CamelIMAPXMessageContentInfo);
+       folder_summary_class->message_info_clone = imapx_message_info_clone;
+       folder_summary_class->summary_header_load = summary_header_load;
+       folder_summary_class->summary_header_save = summary_header_save;
+       folder_summary_class->message_info_load = message_info_load;
+       folder_summary_class->message_info_save = message_info_save;
+       folder_summary_class->content_info_load = content_info_load;
+       folder_summary_class->content_info_save = content_info_save;
+       folder_summary_class->summary_header_to_db = summary_header_to_db;
+       folder_summary_class->summary_header_from_db = summary_header_from_db;
+       folder_summary_class->message_info_to_db = message_info_to_db;
+       folder_summary_class->message_info_from_db = message_info_from_db;
+       folder_summary_class->content_info_to_db = content_info_to_db;
+       folder_summary_class->content_info_from_db = content_info_from_db;
+       folder_summary_class->info_set_user_flag = info_set_user_flag;
 }
 
 static void
@@ -182,10 +160,12 @@ uid_compare (gconstpointer va, gconstpointer vb)
 CamelFolderSummary *
 camel_imapx_summary_new (struct _CamelFolder *folder, const gchar *filename)
 {
-       CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (camel_object_new (camel_imapx_summary_get_type ()));
+       CamelFolderSummary *summary;
        CamelException ex;
        camel_exception_init (&ex);
 
+       summary = g_object_new (CAMEL_TYPE_IMAPX_SUMMARY, NULL);
+
        summary->folder = folder;
        /* Don't do DB sort. Its pretty slow to load */
        if (folder && 0) {
@@ -215,9 +195,13 @@ static gint
 summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir)
 {
        CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY (s);
+       CamelFolderSummaryClass *folder_summary_class;
        gchar *part;
 
-       if (camel_imapx_summary_parent->summary_header_from_db (s, mir) == -1)
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       if (folder_summary_class->summary_header_from_db (s, mir) == -1)
                return -1;
 
        part = mir->bdata;
@@ -243,8 +227,12 @@ static gint
 summary_header_load (CamelFolderSummary *s, FILE *in)
 {
        CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY (s);
+       CamelFolderSummaryClass *folder_summary_class;
 
-       if (camel_imapx_summary_parent->summary_header_load (s, in) == -1)
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       if (folder_summary_class->summary_header_load (s, in) == -1)
                return -1;
 
        /* Legacy version */
@@ -279,9 +267,13 @@ static CamelFIRecord *
 summary_header_to_db (CamelFolderSummary *s, CamelException *ex)
 {
        CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY(s);
+       CamelFolderSummaryClass *folder_summary_class;
        struct _CamelFIRecord *fir;
 
-       fir = camel_imapx_summary_parent->summary_header_to_db (s, ex);
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       fir = folder_summary_class->summary_header_to_db (s, ex);
        if (!fir)
                return NULL;
        fir->bdata = g_strdup_printf ("%d %u", CAMEL_IMAPX_SUMMARY_VERSION, ims->validity);
@@ -293,8 +285,12 @@ static gint
 summary_header_save (CamelFolderSummary *s, FILE *out)
 {
        CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY(s);
+       CamelFolderSummaryClass *folder_summary_class;
 
-       if (camel_imapx_summary_parent->summary_header_save (s, out) == -1)
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       if (folder_summary_class->summary_header_save (s, out) == -1)
                return -1;
 
        camel_file_util_encode_fixed_int32(out, CAMEL_IMAPX_SUMMARY_VERSION);
@@ -307,8 +303,12 @@ message_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 {
        CamelMessageInfo *info;
        CamelIMAPXMessageInfo *iinfo;
+       CamelFolderSummaryClass *folder_summary_class;
+
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
 
-       info = camel_imapx_summary_parent->message_info_from_db (s, mir);
+       info = folder_summary_class->message_info_from_db (s, mir);
        if (info) {
                gchar *part = g_strdup (mir->bdata), *tmp;
                tmp = part;
@@ -325,8 +325,12 @@ message_info_load (CamelFolderSummary *s, FILE *in)
 {
        CamelMessageInfo *info;
        CamelIMAPXMessageInfo *iinfo;
+       CamelFolderSummaryClass *folder_summary_class;
 
-       info = camel_imapx_summary_parent->message_info_load (s, in);
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       info = folder_summary_class->message_info_load (s, in);
        if (info) {
                iinfo = (CamelIMAPXMessageInfo *)info;
 
@@ -344,9 +348,13 @@ static CamelMIRecord *
 message_info_to_db (CamelFolderSummary *s, CamelMessageInfo *info)
 {
        CamelIMAPXMessageInfo *iinfo = (CamelIMAPXMessageInfo *)info;
+       CamelFolderSummaryClass *folder_summary_class;
        struct _CamelMIRecord *mir;
 
-       mir = camel_imapx_summary_parent->message_info_to_db (s, info);
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       mir = folder_summary_class->message_info_to_db (s, info);
        if (mir)
                mir->bdata = g_strdup_printf ("%u", iinfo->server_flags);
 
@@ -357,8 +365,12 @@ static gint
 message_info_save (CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
 {
        CamelIMAPXMessageInfo *iinfo = (CamelIMAPXMessageInfo *)info;
+       CamelFolderSummaryClass *folder_summary_class;
 
-       if (camel_imapx_summary_parent->message_info_save (s, out, info) == -1)
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       if (folder_summary_class->message_info_save (s, out, info) == -1)
                return -1;
 
        return camel_file_util_encode_uint32 (out, iinfo->server_flags);
@@ -367,9 +379,13 @@ message_info_save (CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
 static gboolean
 info_set_user_flag (CamelMessageInfo *info, const gchar *id, gboolean state)
 {
+       CamelFolderSummaryClass *folder_summary_class;
        gboolean res;
 
-       res = camel_imapx_summary_parent->info_set_user_flag (info, id, state);
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
+       res = folder_summary_class->info_set_user_flag (info, id, state);
 
        /* there was a change, so do not forget to store it to server */
        if (res)
@@ -381,9 +397,13 @@ info_set_user_flag (CamelMessageInfo *info, const gchar *id, gboolean state)
 static CamelMessageContentInfo *
 content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 {
+       CamelFolderSummaryClass *folder_summary_class;
        gchar *part = mir->cinfo;
        guint32 type=0;
 
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
        if (part) {
                if (*part == ' ')
                        part++;
@@ -393,7 +413,7 @@ content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
        }
        mir->cinfo = part;
        if (type)
-               return camel_imapx_summary_parent->content_info_from_db (s, mir);
+               return folder_summary_class->content_info_from_db (s, mir);
        else
                return camel_folder_summary_content_info_new (s);
 }
@@ -401,8 +421,13 @@ content_info_from_db (CamelFolderSummary *s, CamelMIRecord *mir)
 static CamelMessageContentInfo *
 content_info_load (CamelFolderSummary *s, FILE *in)
 {
+       CamelFolderSummaryClass *folder_summary_class;
+
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
        if (fgetc (in))
-               return camel_imapx_summary_parent->content_info_load (s, in);
+               return folder_summary_class->content_info_load (s, in);
        else
                return camel_folder_summary_content_info_new (s);
 }
@@ -410,12 +435,17 @@ content_info_load (CamelFolderSummary *s, FILE *in)
 static gint
 content_info_to_db (CamelFolderSummary *s, CamelMessageContentInfo *info, CamelMIRecord *mir)
 {
+       CamelFolderSummaryClass *folder_summary_class;
        gchar *oldr;
+
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
        if (info->type) {
                oldr = mir->cinfo;
                mir->cinfo = oldr ? g_strdup_printf("%s 1", oldr) : g_strdup ("1");
                g_free(oldr);
-               return camel_imapx_summary_parent->content_info_to_db (s, info, mir);
+               return folder_summary_class->content_info_to_db (s, info, mir);
        } else {
                oldr = mir->cinfo;
                mir->cinfo = oldr ? g_strdup_printf("%s 0", oldr) : g_strdup ("0");
@@ -428,9 +458,14 @@ static gint
 content_info_save (CamelFolderSummary *s, FILE *out,
                   CamelMessageContentInfo *info)
 {
+       CamelFolderSummaryClass *folder_summary_class;
+
+       folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (
+               camel_imapx_summary_parent_class);
+
        if (info->type) {
                fputc (1, out);
-               return camel_imapx_summary_parent->content_info_save (s, out, info);
+               return folder_summary_class->content_info_save (s, out, info);
        } else
                return fputc (0, out);
 }
index e78651f..e37772c 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_IMAPX_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_imapx_summary_get_type (), CamelIMAPXSummary)
-#define CAMEL_IMAPX_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_imapx_summary_get_type (), CamelIMAPXSummaryClass)
-#define CAMEL_IS_IMAPX_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_imapx_summary_get_type ())
-
-#define CAMEL_IMAPX_SERVER_FLAGS (CAMEL_MESSAGE_ANSWERED | \
-                                CAMEL_MESSAGE_DELETED | \
-                                CAMEL_MESSAGE_DRAFT | \
-                                CAMEL_MESSAGE_FLAGGED | \
-                                CAMEL_MESSAGE_SEEN)
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_SUMMARY \
+       (camel_imapx_summary_get_type ())
+#define CAMEL_IMAPX_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_SUMMARY, CamelIMAPXSummary))
+#define CAMEL_IMAPX_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_SUMMARY, CamelIMAPXSummaryClass))
+#define CAMEL_IS_IMAPX_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_SUMMARY))
+#define CAMEL_IS_IMAPX_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_SUMMARY))
+#define CAMEL_IMAPX_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_SUMMARY, CamelIMAPXSummaryClass))
+
+#define CAMEL_IMAPX_SERVER_FLAGS \
+       (CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED | \
+        CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | \
+        CAMEL_MESSAGE_SEEN)
 
 G_BEGIN_DECLS
 
-typedef struct _CamelIMAPXSummaryClass CamelIMAPXSummaryClass;
 typedef struct _CamelIMAPXSummary CamelIMAPXSummary;
+typedef struct _CamelIMAPXSummaryClass CamelIMAPXSummaryClass;
 
-typedef struct _CamelIMAPXMessageContentInfo {
-       CamelMessageContentInfo info;
+typedef struct _CamelIMAPXMessageInfo CamelIMAPXMessageInfo;
+typedef struct _CamelIMAPXMessageContentInfo CamelIMAPXMessageContentInfo;
 
-} CamelIMAPXMessageContentInfo;
+struct _CamelIMAPXMessageContentInfo {
+       CamelMessageContentInfo info;
+};
 
-typedef struct _CamelIMAPXMessageInfo {
+struct _CamelIMAPXMessageInfo {
        CamelMessageInfoBase info;
 
        guint32 server_flags;
-       struct _CamelFlag *server_user_flags;
-} CamelIMAPXMessageInfo;
+       CamelFlag *server_user_flags;
+};
 
 struct _CamelIMAPXSummary {
        CamelFolderSummary parent;
@@ -61,20 +77,20 @@ struct _CamelIMAPXSummary {
 
 struct _CamelIMAPXSummaryClass {
        CamelFolderSummaryClass parent_class;
-
 };
 
-CamelType               camel_imapx_summary_get_type     (void);
-CamelFolderSummary *camel_imapx_summary_new          (struct _CamelFolder *folder, const gchar *filename);
-
-void camel_imapx_summary_add_offline (CamelFolderSummary *summary,
-                                    const gchar *uid,
-                                    CamelMimeMessage *message,
-                                    const CamelMessageInfo *info);
-
-void camel_imapx_summary_add_offline_uncached (CamelFolderSummary *summary,
-                                             const gchar *uid,
-                                             const CamelMessageInfo *info);
+GType          camel_imapx_summary_get_type    (void);
+CamelFolderSummary *
+               camel_imapx_summary_new         (CamelFolder *folder,
+                                                const gchar *filename);
+void           camel_imapx_summary_add_offline (CamelFolderSummary *summary,
+                                                const gchar *uid,
+                                                CamelMimeMessage *message,
+                                                const CamelMessageInfo *info);
+void           camel_imapx_summary_add_offline_uncached
+                                               (CamelFolderSummary *summary,
+                                                const gchar *uid,
+                                                const CamelMessageInfo *info);
 
 G_END_DECLS
 
index f43f75c..569ceab 100644 (file)
@@ -1281,11 +1281,11 @@ imapx_free_fetch(struct _fetch_info *finfo)
                return;
 
        if (finfo->body)
-               camel_object_unref (finfo->body);
+               g_object_unref (finfo->body);
        if (finfo->text)
-               camel_object_unref (finfo->text);
+               g_object_unref (finfo->text);
        if (finfo->header)
-               camel_object_unref (finfo->header);
+               g_object_unref (finfo->header);
        if (finfo->minfo)
                camel_message_info_free(finfo->minfo);
        if (finfo->cinfo)
@@ -1347,7 +1347,7 @@ imapx_dump_fetch(struct _fetch_info *finfo)
                camel_stream_printf(sout, "Section: '%s'\n", finfo->section);
        if (finfo->date)
                camel_stream_printf(sout, "UID: '%s'\n", finfo->uid);
-       camel_object_unref (sout);
+       g_object_unref (sout);
 }
 
 struct _fetch_info *
index 53917c4..dfb05a5 100644 (file)
 
 #include "camel-view-summary-disk.h"
 
-typedef struct _CamelIMAPXViewSummary      CamelIMAPXViewSummary;
+/* Standard GObject macros */
+#define CAMEL_TYPE_IMAPX_VIEW_SUMMARY \
+       (camel_imapx_view_summary_get_type ())
+#define CAMEL_IMAPX_VIEW_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_IMAPX_VIEW_SUMMARY, CamelIMAPXViewSummary))
+#define CAMEL_IMAPX_VIEW_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_IMAPX_VIEW_SUMMARY, CamelIMAPXViewSummaryClass))
+#define CAMEL_IS_IMAPX_VIEW_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_IMAPX_VIEW_SUMMARY))
+#define CAMEL_IS_IMAPX_VIEW_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_IMAPX_VIEW_SUMMARY))
+#define CAMEL_IMAPX_VIEW_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_IMAPX_VIEW_SUMMARY, CamelIMAPXViewSummaryClass))
+
+G_BEGIN_DECLS
+
+typedef struct _CamelIMAPXViewSummary CamelIMAPXViewSummary;
 typedef struct _CamelIMAPXViewSummaryClass CamelIMAPXViewSummaryClass;
 
 enum {
@@ -52,12 +73,17 @@ struct _CamelIMAPXViewSummaryClass {
        CamelViewSummaryDiskClass parent_class;
 };
 
-CamelType              camel_imapx_view_summary_get_type       (void);
-CamelIMAPXViewSummary      *camel_imapx_view_summary_new       (const gchar *base, CamelException *ex);
+GType          camel_imapx_view_summary_get_type (void);
+CamelIMAPXViewSummary *
+               camel_imapx_view_summary_new    (const gchar *base,
+                                                CamelException *ex);
 
 /* called on root view */
-guint32 camel_imapx_view_next_uid(CamelIMAPXView *view);
-void camel_imapx_view_last_uid(CamelIMAPXView *view, guint32 uid);
+guint32                camel_imapx_view_next_uid       (CamelIMAPXView *view);
+void           camel_imapx_view_last_uid       (CamelIMAPXView *view,
+                                                guint32 uid);
+
+G_END_DECLS
 
 #endif /* CAMEL_IMAPX_VIEW_SUMMARY_H */
 
index cc2df88..eacaaef 100644 (file)
@@ -24,7 +24,7 @@ main (gint argc, gchar *argv [])
        camel_provider_init ();
        ex = camel_exception_new ();
 
-       session = CAMEL_SESSION (camel_object_new (CAMEL_SESSION_TYPE));
+       session = g_object_new (CAMEL_TYPE_SESSION, NULL);
        camel_session_construct (session, "/tmp/test-camel-imapx");
 
        service = camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, ex);
index c039f3c..d9f903c 100644 (file)
 #define PATH_MAX _POSIX_PATH_MAX
 #endif
 
-static gpointer camel_local_folder_parent_class;
+#define CAMEL_LOCAL_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_LOCAL_FOLDER, CamelLocalFolderPrivate))
+
 static GSList *local_folder_properties;
 
 static gint local_getv(CamelObject *object, CamelException *ex, CamelArgGetV *args);
@@ -78,27 +81,48 @@ static CamelProperty local_property_list[] = {
        { CAMEL_LOCAL_FOLDER_INDEX_BODY, "index_body", N_("Index message body data") },
 };
 
+G_DEFINE_TYPE (CamelLocalFolder, camel_local_folder, CAMEL_TYPE_FOLDER)
+
 static void
-local_folder_finalize (CamelLocalFolder *local_folder)
+local_folder_dispose (GObject *object)
 {
-       CamelFolder *folder = CAMEL_FOLDER (local_folder);
+       CamelFolder *folder;
+       CamelLocalFolder *local_folder;
+
+       folder = CAMEL_FOLDER (object);
+       local_folder = CAMEL_LOCAL_FOLDER (object);
 
-       if (folder->summary) {
+       if (folder->summary != NULL) {
                camel_local_summary_sync (
                        CAMEL_LOCAL_SUMMARY (folder->summary),
                        FALSE, local_folder->changes, NULL);
-               camel_object_unref (folder->summary);
+               g_object_unref (folder->summary);
                folder->summary = NULL;
        }
 
-       if (local_folder->search)
-               camel_object_unref (local_folder->search);
+       if (local_folder->search != NULL) {
+               g_object_unref (local_folder->search);
+               local_folder->search = NULL;
+       }
 
-       if (local_folder->index)
-               camel_object_unref (local_folder->index);
+       if (local_folder->index != NULL) {
+               g_object_unref (local_folder->index);
+               local_folder->index = NULL;
+       }
 
-       while (local_folder->locked> 0)
-               camel_local_folder_unlock(local_folder);
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_local_folder_parent_class)->dispose (object);
+}
+
+static void
+local_folder_finalize (GObject *object)
+{
+       CamelLocalFolder *local_folder;
+
+       local_folder = CAMEL_LOCAL_FOLDER (object);
+
+       while (local_folder->locked > 0)
+               camel_local_folder_unlock (local_folder);
 
        g_free (local_folder->base_path);
        g_free (local_folder->folder_path);
@@ -109,17 +133,23 @@ local_folder_finalize (CamelLocalFolder *local_folder)
 
        g_mutex_free (local_folder->priv->search_lock);
 
-       g_free (local_folder->priv);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_local_folder_parent_class)->finalize (object);
 }
 
 static void
 camel_local_folder_class_init (CamelLocalFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelObjectClass *camel_object_class;
        CamelFolderClass *folder_class;
        gint ii;
 
-       camel_local_folder_parent_class = (CamelFolderClass *)camel_folder_get_type();
+       g_type_class_add_private (class, sizeof (CamelLocalFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = local_folder_dispose;
+       object_class->finalize = local_folder_finalize;
 
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = local_getv;
@@ -153,7 +183,7 @@ camel_local_folder_init (CamelLocalFolder *local_folder)
 {
        CamelFolder *folder = CAMEL_FOLDER (local_folder);
 
-       local_folder->priv = g_new0 (CamelLocalFolderPrivate, 1);
+       local_folder->priv = CAMEL_LOCAL_FOLDER_GET_PRIVATE (local_folder);
        local_folder->priv->search_lock = g_mutex_new();
 
        folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
@@ -168,24 +198,6 @@ camel_local_folder_init (CamelLocalFolder *local_folder)
        local_folder->search = NULL;
 }
 
-CamelType
-camel_local_folder_get_type(void)
-{
-       static CamelType camel_local_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_local_folder_type == CAMEL_INVALID_TYPE) {
-               camel_local_folder_type = camel_type_register(camel_folder_get_type(), "CamelLocalFolder",
-                                                            sizeof(CamelLocalFolder),
-                                                            sizeof(CamelLocalFolderClass),
-                                                            (CamelObjectClassInitFunc) camel_local_folder_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_local_folder_init,
-                                                            (CamelObjectFinalizeFunc) local_folder_finalize);
-       }
-
-       return camel_local_folder_type;
-}
-
 CamelLocalFolder *
 camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex)
 {
@@ -278,7 +290,7 @@ camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store, con
                if (camel_local_summary_check((CamelLocalSummary *)folder->summary, lf->changes, ex) == 0) {
                        /* we sync here so that any hard work setting up the folder isn't lost */
                        if (camel_local_summary_sync((CamelLocalSummary *)folder->summary, FALSE, lf->changes, ex) == -1) {
-                               camel_object_unref (CAMEL_OBJECT (folder));
+                               g_object_unref (CAMEL_OBJECT (folder));
                                g_free(name);
                                return NULL;
                        }
@@ -290,7 +302,7 @@ camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store, con
        /*if (camel_local_summary_check((CamelLocalSummary *)folder->summary, lf->changes, ex) == -1) {*/
        /* we sync here so that any hard work setting up the folder isn't lost */
        /*if (camel_local_summary_sync((CamelLocalSummary *)folder->summary, FALSE, lf->changes, ex) == -1) {
-               camel_object_unref (CAMEL_OBJECT (folder));
+               g_object_unref (CAMEL_OBJECT (folder));
                g_free(name);
                return NULL;
                }*/
index 84e379e..4314854 100644 (file)
 
 #include "camel-local-summary.h"
 
-#define CAMEL_LOCAL_FOLDER_TYPE     (camel_local_folder_get_type ())
-#define CAMEL_LOCAL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_LOCAL_FOLDER_TYPE, CamelLocalFolder))
-#define CAMEL_LOCAL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_LOCAL_FOLDER_TYPE, CamelLocalFolderClass))
-#define CAMEL_IS_LOCAL_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_LOCAL_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_LOCAL_FOLDER \
+       (camel_local_folder_get_type ())
+#define CAMEL_LOCAL_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_LOCAL_FOLDER, CamelLocalFolder))
+#define CAMEL_LOCAL_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_LOCAL_FOLDER, CamelLocalFolderClass))
+#define CAMEL_IS_LOCAL_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_LOCAL_FOLDER))
+#define CAMEL_IS_LOCAL_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_LOCAL_FOLDER))
 #define CAMEL_LOCAL_FOLDER_GET_CLASS(obj) \
-       ((CamelLocalFolderClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_LOCAL_FOLDER, CamelLocalFolderClass))
 
 G_BEGIN_DECLS
 
@@ -88,8 +100,7 @@ struct _CamelLocalFolderClass {
 CamelLocalFolder *camel_local_folder_construct(CamelLocalFolder *lf, CamelStore *parent_store,
                                               const gchar *full_name, guint32 flags, CamelException *ex);
 
-/* Standard Camel function */
-CamelType camel_local_folder_get_type(void);
+GType camel_local_folder_get_type(void);
 
 /* Lock the folder for internal use.  May be called repeatedly */
 /* UNIMPLEMENTED */
index d364f11..c853d84 100644 (file)
@@ -235,7 +235,7 @@ camel_provider_module_init(void)
 #else
        mbox_conf_entries[0].value = "";  /* default path */
 #endif
-       mbox_provider.object_types[CAMEL_PROVIDER_STORE] = CAMEL_MBOX_STORE_TYPE;
+       mbox_provider.object_types[CAMEL_PROVIDER_STORE] = CAMEL_TYPE_MBOX_STORE;
        mbox_provider.url_hash = local_url_hash;
        mbox_provider.url_equal = local_url_equal;
        mbox_provider.translation_domain = GETTEXT_PACKAGE;
index 75963a5..072407c 100644 (file)
@@ -52,21 +52,28 @@ static gboolean local_can_refresh_folder (CamelStore *store, CamelFolderInfo *in
 static gchar *local_get_full_path(CamelLocalStore *lf, const gchar *full_name);
 static gchar *local_get_meta_path(CamelLocalStore *lf, const gchar *full_name, const gchar *ext);
 
-static gpointer camel_local_store_parent_class;
+G_DEFINE_TYPE (CamelLocalStore, camel_local_store, CAMEL_TYPE_STORE)
 
 static void
-local_store_finalize (CamelLocalStore *local_store)
+local_store_finalize (GObject *object)
 {
+       CamelLocalStore *local_store = CAMEL_LOCAL_STORE (object);
+
        g_free (local_store->toplevel_dir);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_local_store_parent_class)->finalize (object);
 }
 
 static void
 camel_local_store_class_init (CamelLocalStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_local_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = local_store_finalize;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = construct;
@@ -88,22 +95,9 @@ camel_local_store_class_init (CamelLocalStoreClass *class)
        class->get_meta_path = local_get_meta_path;
 }
 
-CamelType
-camel_local_store_get_type (void)
+static void
+camel_local_store_init (CamelLocalStore *local_store)
 {
-       static CamelType camel_local_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_local_store_type == CAMEL_INVALID_TYPE)       {
-               camel_local_store_type = camel_type_register (CAMEL_STORE_TYPE, "CamelLocalStore",
-                                                            sizeof (CamelLocalStore),
-                                                            sizeof (CamelLocalStoreClass),
-                                                            (CamelObjectClassInitFunc) camel_local_store_class_init,
-                                                            NULL,
-                                                            NULL,
-                                                            (CamelObjectFinalizeFunc) local_store_finalize);
-       }
-
-       return camel_local_store_type;
 }
 
 static gboolean
@@ -307,7 +301,7 @@ create_folder (CamelStore *store,
        folder = CAMEL_STORE_GET_CLASS (store)->get_folder (
                store, name, CAMEL_STORE_FOLDER_CREATE, ex);
        if (folder) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                info = CAMEL_STORE_GET_CLASS (store)->get_folder_info (
                        store, name, 0, ex);
 
@@ -406,7 +400,7 @@ rename_folder(CamelStore *store,
        g_free(oldibex);
 
        if (folder)
-               camel_object_unref (folder);
+               g_object_unref (folder);
 
        return TRUE;
 
@@ -434,7 +428,7 @@ ibex_failed:
        g_free(oldibex);
 
        if (folder)
-               camel_object_unref (folder);
+               g_object_unref (folder);
 
        return FALSE;
 }
@@ -470,7 +464,7 @@ delete_folder (CamelStore *store,
        if ((lf = camel_store_get_folder (store, folder_name, 0, &lex))) {
                camel_object_get (lf, NULL, CAMEL_OBJECT_STATE_FILE, &str, NULL);
                camel_object_set (lf, NULL, CAMEL_OBJECT_STATE_FILE, NULL, NULL);
-               camel_object_unref (lf);
+               g_object_unref (lf);
        } else {
                camel_exception_clear (&lex);
        }
index 35317ec..93f66c0 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_LOCAL_STORE_TYPE     (camel_local_store_get_type ())
-#define CAMEL_LOCAL_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_LOCAL_STORE_TYPE, CamelLocalStore))
-#define CAMEL_LOCAL_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_LOCAL_STORE_TYPE, CamelLocalStoreClass))
-#define CAMEL_IS_LOCAL_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_LOCAL_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_LOCAL_STORE \
+       (camel_local_store_get_type ())
+#define CAMEL_LOCAL_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_LOCAL_STORE, CamelLocalStore))
+#define CAMEL_LOCAL_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_LOCAL_STORE, CamelLocalStoreClass))
+#define CAMEL_IS_LOCAL_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_LOCAL_STORE))
+#define CAMEL_IS_LOCAL_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_LOCAL_STORE))
 #define CAMEL_LOCAL_STORE_GET_CLASS(obj) \
-       ((CamelLocalStoreClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_LOCAL_STORE, CamelLocalStoreClass))
 
 G_BEGIN_DECLS
 
@@ -50,7 +62,7 @@ struct _CamelLocalStoreClass {
        gchar *(*get_meta_path)(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
 };
 
-CamelType camel_local_store_get_type (void);
+GType camel_local_store_get_type (void);
 
 const gchar *camel_local_store_get_toplevel_dir (CamelLocalStore *store);
 
index 77af97a..8cf829b 100644 (file)
@@ -60,22 +60,46 @@ static gint local_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFo
 static CamelMessageInfo *local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMessageInfo *info, CamelFolderChangeInfo *, CamelException *ex);
 static gint local_summary_need_index(void);
 
-static gpointer camel_local_summary_parent_class;
+G_DEFINE_TYPE (CamelLocalSummary, camel_local_summary, CAMEL_TYPE_FOLDER_SUMMARY)
 
 static void
-local_summary_finalize (CamelLocalSummary *local_summary)
+local_summary_dispose (GObject *object)
 {
-       if (local_summary->index)
-               camel_object_unref (local_summary->index);
+       CamelLocalSummary *local_summary;
+
+       local_summary = CAMEL_LOCAL_SUMMARY (object);
+
+       if (local_summary->index != NULL) {
+               g_object_unref (local_summary->index);
+               local_summary->index = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_local_summary_parent_class)->dispose (object);
+}
+
+static void
+local_summary_finalize (GObject *object)
+{
+       CamelLocalSummary *local_summary;
+
+       local_summary = CAMEL_LOCAL_SUMMARY (object);
+
        g_free (local_summary->folder_path);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_local_summary_parent_class)->finalize (object);
 }
 
 static void
 camel_local_summary_class_init (CamelLocalSummaryClass *class)
 {
+       GObjectClass *object_class;
        CamelFolderSummaryClass *folder_summary_class;
 
-       camel_local_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = local_summary_dispose;
+       object_class->finalize = local_summary_finalize;
 
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelLocalMessageInfo);
@@ -106,24 +130,6 @@ camel_local_summary_init (CamelLocalSummary *local_summary)
        folder_summary->version += CAMEL_LOCAL_SUMMARY_VERSION;
 }
 
-CamelType
-camel_local_summary_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_folder_summary_get_type(), "CamelLocalSummary",
-                                          sizeof (CamelLocalSummary),
-                                          sizeof (CamelLocalSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_local_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_local_summary_init,
-                                          (CamelObjectFinalizeFunc) local_summary_finalize);
-       }
-
-       return type;
-}
-
 void
 camel_local_summary_construct(CamelLocalSummary *new, const gchar *filename, const gchar *local_name, CamelIndex *index)
 {
@@ -132,7 +138,7 @@ camel_local_summary_construct(CamelLocalSummary *new, const gchar *filename, con
        new->folder_path = g_strdup(local_name);
        new->index = index;
        if (index)
-               camel_object_ref (index);
+               g_object_ref (index);
 }
 
 static gint
@@ -516,7 +522,7 @@ local_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, const CamelMess
 
                        camel_data_wrapper_write_to_stream((CamelDataWrapper *)msg, (CamelStream *)sn);
                        mi->info.size = sn->written;
-                       camel_object_unref (sn);
+                       g_object_unref (sn);
                }
 
                mi->info.flags &= ~(CAMEL_MESSAGE_FOLDER_NOXEV|CAMEL_MESSAGE_FOLDER_FLAGGED);
index 002c15f..204ff1c 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_LOCAL_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_local_summary_get_type (), CamelLocalSummary)
-#define CAMEL_LOCAL_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_local_summary_get_type (), CamelLocalSummaryClass)
-#define CAMEL_IS_LOCAL_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_local_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_LOCAL_SUMMARY \
+       (camel_local_summary_get_type ())
+#define CAMEL_LOCAL_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_LOCAL_SUMMARY, CamelLocalSummary))
+#define CAMEL_LOCAL_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_LOCAL_SUMMARY, CamelLocalSummaryClass))
+#define CAMEL_IS_LOCAL_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_LOCAL_SUMMARY))
+#define CAMEL_IS_LOCAL_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_LOCAL_SUMMARY))
 #define CAMEL_LOCAL_SUMMARY_GET_CLASS(obj) \
-       ((CamelLocalSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_LOCAL_SUMMARY, CamelLocalSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -72,7 +85,7 @@ struct _CamelLocalSummaryClass {
        gint (*need_index)(void);
 };
 
-CamelType      camel_local_summary_get_type    (void);
+GType  camel_local_summary_get_type    (void);
 void   camel_local_summary_construct   (CamelLocalSummary *new, const gchar *filename, const gchar *local_name, CamelIndex *index);
 
 /* load/check the summary */
index 59a5b59..ce6efe0 100644 (file)
@@ -41,8 +41,6 @@
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static gpointer camel_maildir_folder_parent_class;
-
 static CamelLocalSummary *maildir_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
 static gboolean maildir_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
@@ -52,6 +50,8 @@ static gint maildir_cmp_uids (CamelFolder *folder, const gchar *uid1, const gcha
 static void maildir_sort_uids (CamelFolder *folder, GPtrArray *uids);
 static gboolean maildir_transfer_messages_to (CamelFolder *source, GPtrArray *uids, CamelFolder *dest, GPtrArray **transferred_uids, gboolean delete_originals, CamelException *ex);
 
+G_DEFINE_TYPE (CamelMaildirFolder, camel_maildir_folder, CAMEL_TYPE_LOCAL_FOLDER)
+
 static gint
 maildir_folder_getv (CamelObject *object,
                      CamelException *ex,
@@ -90,8 +90,6 @@ camel_maildir_folder_class_init (CamelMaildirFolderClass *class)
        CamelFolderClass *folder_class;
        CamelLocalFolderClass *local_folder_class;
 
-       camel_maildir_folder_parent_class = CAMEL_LOCAL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_local_folder_get_type()));
-
        camel_object_class = CAMEL_OBJECT_CLASS (class);
        camel_object_class->getv = maildir_folder_getv;
 
@@ -112,24 +110,6 @@ camel_maildir_folder_init (CamelMaildirFolder *maildir_folder)
 {
 }
 
-CamelType
-camel_maildir_folder_get_type(void)
-{
-       static CamelType camel_maildir_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_maildir_folder_type == CAMEL_INVALID_TYPE) {
-               camel_maildir_folder_type = camel_type_register(CAMEL_LOCAL_FOLDER_TYPE, "CamelMaildirFolder",
-                                                          sizeof(CamelMaildirFolder),
-                                                          sizeof(CamelMaildirFolderClass),
-                                                          (CamelObjectClassInitFunc) camel_maildir_folder_class_init,
-                                                          NULL,
-                                                          (CamelObjectInitFunc) camel_maildir_folder_init,
-                                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return camel_maildir_folder_type;
-}
-
 CamelFolder *
 camel_maildir_folder_new (CamelStore *parent_store,
                           const gchar *full_name,
@@ -140,7 +120,7 @@ camel_maildir_folder_new (CamelStore *parent_store,
 
        d(printf("Creating maildir folder: %s\n", full_name));
 
-       folder = (CamelFolder *)camel_object_new(CAMEL_MAILDIR_FOLDER_TYPE);
+       folder = g_object_new (CAMEL_TYPE_MAILDIR_FOLDER, NULL);
 
        if (parent_store->flags & CAMEL_STORE_FILTER_INBOX
            && strcmp(full_name, ".") == 0)
@@ -220,7 +200,7 @@ maildir_append_message (CamelFolder *folder,
                *appended_uid = g_strdup(camel_message_info_uid(mi));
 
        if (output_stream)
-               camel_object_unref (output_stream);
+               g_object_unref (output_stream);
 
        goto check_changed;
 
@@ -241,7 +221,7 @@ maildir_append_message (CamelFolder *folder,
                        name, g_strerror (errno));
 
        if (output_stream) {
-               camel_object_unref (CAMEL_OBJECT (output_stream));
+               g_object_unref (CAMEL_OBJECT (output_stream));
                unlink (name);
        }
 
@@ -329,11 +309,11 @@ maildir_get_message (CamelFolder *folder,
                        ex, (errno==EINTR) ?
                        CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
                        uid, lf->folder_path, _("Invalid message contents"));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
 
        }
-       camel_object_unref (message_stream);
+       g_object_unref (message_stream);
  fail:
        g_free (name);
 
index b85cfc7..2165756 100644 (file)
 
 #include "camel-local-folder.h"
 
-#define CAMEL_MAILDIR_FOLDER_TYPE     (camel_maildir_folder_get_type ())
-#define CAMEL_MAILDIR_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolder))
-#define CAMEL_MAILDIR_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolderClass))
-#define CAMEL_IS_MAILDIR_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MAILDIR_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MAILDIR_FOLDER \
+       (camel_maildir_folder_get_type ())
+#define CAMEL_MAILDIR_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MAILDIR_FOLDER, CamelMaildirFolder))
+#define CAMEL_MAILDIR_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MAILDIR_FOLDER, CamelMaildirFolderClass))
+#define CAMEL_IS_MAILDIR_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MAILDIR_FOLDER))
+#define CAMEL_IS_MAILDIR_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MAILDIR_FOLDER))
+#define CAMEL_MAILDIR_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MAILDIR_FOLDER, CamelMaildirFolderClass))
 
 G_BEGIN_DECLS
 
@@ -46,7 +60,7 @@ struct _CamelMaildirFolderClass {
 /* public methods */
 CamelFolder *camel_maildir_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-CamelType camel_maildir_folder_get_type(void);
+GType camel_maildir_folder_get_type(void);
 
 G_END_DECLS
 
index 7995400..b0859e3 100644 (file)
@@ -38,8 +38,6 @@
 
 #define d(x)
 
-static gpointer camel_maildir_store_parent_class;
-
 static CamelFolder *get_folder(CamelStore * store, const gchar *folder_name, guint32 flags, CamelException * ex);
 static CamelFolder *get_inbox (CamelStore *store, CamelException *ex);
 static gboolean delete_folder(CamelStore * store, const gchar *folder_name, CamelException * ex);
@@ -50,13 +48,13 @@ static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, g
 static gboolean maildir_compare_folder_name(gconstpointer a, gconstpointer b);
 static guint maildir_hash_folder_name(gconstpointer a);
 
+G_DEFINE_TYPE (CamelMaildirStore, camel_maildir_store, CAMEL_TYPE_LOCAL_STORE)
+
 static void
 camel_maildir_store_class_init (CamelMaildirStoreClass *class)
 {
        CamelStoreClass *store_class;
 
-       camel_maildir_store_parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
-
        store_class = CAMEL_STORE_CLASS (class);
        store_class->hash_folder_name = maildir_hash_folder_name;
        store_class->compare_folder_name = maildir_compare_folder_name;
@@ -68,22 +66,9 @@ camel_maildir_store_class_init (CamelMaildirStoreClass *class)
        store_class->free_folder_info = camel_store_free_folder_info_full;
 }
 
-CamelType
-camel_maildir_store_get_type(void)
+static void
+camel_maildir_store_init (CamelMaildirStore *maildir_store)
 {
-       static CamelType camel_maildir_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_maildir_store_type == CAMEL_INVALID_TYPE) {
-               camel_maildir_store_type = camel_type_register(CAMEL_LOCAL_STORE_TYPE, "CamelMaildirStore",
-                                                         sizeof(CamelMaildirStore),
-                                                         sizeof(CamelMaildirStoreClass),
-                                                         (CamelObjectClassInitFunc) camel_maildir_store_class_init,
-                                                         NULL,
-                                                         NULL,
-                                                         NULL);
-       }
-
-       return camel_maildir_store_type;
 }
 
 /* This fixes up some historical cruft of names starting with "./" */
@@ -345,7 +330,7 @@ fill_fi (CamelStore *store,
                        camel_folder_refresh_info(folder, NULL);
                fi->unread = camel_folder_get_unread_message_count(folder);
                fi->total = camel_folder_get_message_count(folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        } else {
                gchar *path, *folderpath;
                CamelFolderSummary *s;
@@ -360,7 +345,7 @@ fill_fi (CamelStore *store,
                        fi->unread = s->unread_count;
                        fi->total = s->saved_count;
                }
-               camel_object_unref (s);
+               g_object_unref (s);
                g_free(folderpath);
                g_free(path);
        }
index b652f1c..b62a90c 100644 (file)
 
 #include "camel-local-store.h"
 
-#define CAMEL_MAILDIR_STORE_TYPE     (camel_maildir_store_get_type ())
-#define CAMEL_MAILDIR_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStore))
-#define CAMEL_MAILDIR_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStoreClass))
-#define CAMEL_IS_MAILDIR_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MAILDIR_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MAILDIR_STORE \
+       (camel_maildir_store_get_type ())
+#define CAMEL_MAILDIR_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MAILDIR_STORE, CamelMaildirStore))
+#define CAMEL_MAILDIR_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MAILDIR_STORE, CamelMaildirStoreClass))
+#define CAMEL_IS_MAILDIR_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MAILDIR_STORE))
+#define CAMEL_IS_MAILDIR_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MAILDIR_STORE))
+#define CAMEL_MAILDIR_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MAILDIR_STORE, CamelMaildirStoreClass))
 
 G_BEGIN_DECLS
 
@@ -42,7 +56,7 @@ struct _CamelMaildirStoreClass {
        CamelLocalStoreClass parent_class;
 };
 
-CamelType camel_maildir_store_get_type(void);
+GType camel_maildir_store_get_type(void);
 
 G_END_DECLS
 
index 88b6828..de0b659 100644 (file)
 
 #define CAMEL_MAILDIR_SUMMARY_VERSION (0x2000)
 
+#define CAMEL_MAILDIR_SUMMARY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MAILDIR_SUMMARY, CamelMaildirSummaryPrivate))
+
 static CamelMessageInfo *message_info_load(CamelFolderSummary *s, FILE *in);
 static CamelMessageInfo *message_info_new_from_header(CamelFolderSummary *, struct _camel_header_raw *);
 static void message_info_free(CamelFolderSummary *, CamelMessageInfo *mi);
@@ -62,23 +66,33 @@ struct _CamelMaildirSummaryPrivate {
        GMutex *summary_lock;
 };
 
-static gpointer camel_maildir_summary_parent_class;
+G_DEFINE_TYPE (CamelMaildirSummary, camel_maildir_summary, CAMEL_TYPE_LOCAL_SUMMARY)
 
 static void
-maildir_summary_finalize (CamelMaildirSummary *summary)
+maildir_summary_finalize (GObject *object)
 {
-       g_free (summary->priv->hostname);
-       g_mutex_free (summary->priv->summary_lock);
-       g_free (summary->priv);
+       CamelMaildirSummaryPrivate *priv;
+
+       priv = CAMEL_MAILDIR_SUMMARY_GET_PRIVATE (object);
+
+       g_free (priv->hostname);
+       g_mutex_free (priv->summary_lock);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_maildir_summary_parent_class)->finalize (object);
 }
 
 static void
 camel_maildir_summary_class_init (CamelMaildirSummaryClass *class)
 {
+       GObjectClass *object_class;
        CamelFolderSummaryClass *folder_summary_class;
        CamelLocalSummaryClass *local_summary_class;
 
-       camel_maildir_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
+       g_type_class_add_private (class, sizeof (CamelMaildirSummaryPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = maildir_summary_finalize;
 
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelMaildirMessageInfo);
@@ -105,7 +119,8 @@ camel_maildir_summary_init (CamelMaildirSummary *maildir_summary)
 
        folder_summary = CAMEL_FOLDER_SUMMARY (maildir_summary);
 
-       maildir_summary->priv = g_new0 (CamelMaildirSummaryPrivate, 1);
+       maildir_summary->priv =
+               CAMEL_MAILDIR_SUMMARY_GET_PRIVATE (maildir_summary);
 
        /* set unique file version */
        folder_summary->version += CAMEL_MAILDIR_SUMMARY_VERSION;
@@ -118,24 +133,6 @@ camel_maildir_summary_init (CamelMaildirSummary *maildir_summary)
        maildir_summary->priv->summary_lock = g_mutex_new ();
 }
 
-CamelType
-camel_maildir_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_local_summary_get_type (), "CamelMaildirSummary",
-                                          sizeof(CamelMaildirSummary),
-                                          sizeof(CamelMaildirSummaryClass),
-                                          (CamelObjectClassInitFunc)camel_maildir_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc)camel_maildir_summary_init,
-                                          (CamelObjectFinalizeFunc)maildir_summary_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_maildir_summary_new:
  * @folder: parent folder.
@@ -151,7 +148,7 @@ CamelMaildirSummary
 {
        CamelMaildirSummary *o;
 
-       o = (CamelMaildirSummary *)camel_object_new(camel_maildir_summary_get_type ());
+       o = g_object_new (CAMEL_TYPE_MAILDIR_SUMMARY, NULL);
        ((CamelFolderSummary *)o)->folder = folder;
        if (folder) {
                camel_db_set_collate (folder->parent_store->cdb_r, "dreceived", NULL, NULL);
@@ -497,7 +494,7 @@ camel_maildir_summary_add (CamelLocalSummary *cls, const gchar *name, gint force
        }
        maildirs->priv->current_file = (gchar *)name;
        camel_folder_summary_add_from_parser((CamelFolderSummary *)maildirs, mp);
-       camel_object_unref (mp);
+       g_object_unref (mp);
        maildirs->priv->current_file = NULL;
        camel_folder_summary_set_index((CamelFolderSummary *)maildirs, NULL);
        g_free(filename);
index 34af003..5523062 100644 (file)
 
 #include "camel-local-summary.h"
 
-#define CAMEL_MAILDIR_SUMMARY(obj)     CAMEL_CHECK_CAST (obj, camel_maildir_summary_get_type (), CamelMaildirSummary)
-#define CAMEL_MAILDIR_SUMMARY_CLASS(klass)     CAMEL_CHECK_CLASS_CAST (klass, camel_maildir_summary_get_type (), CamelMaildirSummaryClass)
-#define CAMEL_IS_MAILDIR_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_maildir_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MAILDIR_SUMMARY \
+       (camel_maildir_summary_get_type ())
+#define CAMEL_MAILDIR_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MAILDIR_SUMMARY, CamelMaildirSummary))
+#define CAMEL_MAILDIR_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MAILDIR_SUMMARY, CamelMaildirSummaryClass))
+#define CAMEL_IS_MAILDIR_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MAILDIR_SUMMARY))
+#define CAMEL_IS_MAILDIR_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MAILDIR_SUMMARY))
+#define CAMEL_MAILDIR_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MAILDIR_SUMMARY, CamelMaildirSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -57,7 +72,7 @@ struct _CamelMaildirSummaryClass {
        CamelLocalSummaryClass parent_class;
 };
 
-CamelType       camel_maildir_summary_get_type (void);
+GType   camel_maildir_summary_get_type (void);
 CamelMaildirSummary    *camel_maildir_summary_new      (struct _CamelFolder *folder, const gchar *filename, const gchar *maildirdir, CamelIndex *index);
 
 /* convert some info->flags to/from the messageinfo */
index df1c6dc..dfa299b 100644 (file)
@@ -46,8 +46,6 @@
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static gpointer camel_mbox_folder_parent_class;
-
 static gint mbox_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex);
 static void mbox_unlock(CamelLocalFolder *lf);
 
@@ -58,14 +56,14 @@ static gchar * mbox_get_filename (CamelFolder *folder, const gchar *uid, CamelEx
 static gint mbox_cmp_uids (CamelFolder *folder, const gchar *uid1, const gchar *uid2);
 static void mbox_sort_uids (CamelFolder *folder, GPtrArray *uids);
 
+G_DEFINE_TYPE (CamelMboxFolder, camel_mbox_folder, CAMEL_TYPE_LOCAL_FOLDER)
+
 static void
 camel_mbox_folder_class_init (CamelMboxFolderClass *class)
 {
        CamelFolderClass *folder_class;
        CamelLocalFolderClass *local_folder_class;
 
-       camel_mbox_folder_parent_class = (CamelLocalFolderClass *)camel_type_get_global_classfuncs(camel_local_folder_get_type());
-
        folder_class = CAMEL_FOLDER_CLASS (class);
        folder_class->append_message = mbox_append_message;
        folder_class->get_message = mbox_get_message;
@@ -85,24 +83,6 @@ camel_mbox_folder_init (CamelMboxFolder *mbox_folder)
        mbox_folder->lockfd = -1;
 }
 
-CamelType
-camel_mbox_folder_get_type(void)
-{
-       static CamelType camel_mbox_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mbox_folder_type == CAMEL_INVALID_TYPE) {
-               camel_mbox_folder_type = camel_type_register(CAMEL_LOCAL_FOLDER_TYPE, "CamelMboxFolder",
-                                                            sizeof(CamelMboxFolder),
-                                                            sizeof(CamelMboxFolderClass),
-                                                            (CamelObjectClassInitFunc) camel_mbox_folder_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_mbox_folder_init,
-                                                            (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return camel_mbox_folder_type;
-}
-
 CamelFolder *
 camel_mbox_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex)
 {
@@ -110,7 +90,7 @@ camel_mbox_folder_new(CamelStore *parent_store, const gchar *full_name, guint32
 
        d(printf("Creating mbox folder: %s in %s\n", full_name, camel_local_store_get_toplevel_dir((CamelLocalStore *)parent_store)));
 
-       folder = (CamelFolder *)camel_object_new(CAMEL_MBOX_FOLDER_TYPE);
+       folder = g_object_new (CAMEL_TYPE_MBOX_FOLDER, NULL);
        folder = (CamelFolder *)camel_local_folder_construct((CamelLocalFolder *)folder,
                                                             parent_store, full_name, flags, ex);
 
@@ -231,7 +211,7 @@ mbox_append_message (CamelFolder *folder,
        filter_stream = camel_stream_filter_new (output_stream);
        filter_from = camel_mime_filter_from_new();
        camel_stream_filter_add((CamelStreamFilter *) filter_stream, filter_from);
-       camel_object_unref (filter_from);
+       g_object_unref (filter_from);
 
        if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) message, filter_stream) == -1 ||
            camel_stream_write (filter_stream, "\n", 1) == -1 ||
@@ -239,8 +219,8 @@ mbox_append_message (CamelFolder *folder,
                goto fail_write;
 
        /* filter stream ref's the output stream itself, so we need to unref it too */
-       camel_object_unref (filter_stream);
-       camel_object_unref (output_stream);
+       g_object_unref (filter_stream);
+       g_object_unref (output_stream);
        g_free(fromline);
 
        if (!((CamelMessageInfoBase *)mi)->preview && camel_folder_summary_get_need_preview(folder->summary)) {
@@ -289,11 +269,11 @@ fail_write:
                        retval = ftruncate (fd, mbs->folder_size);
                } while (retval == -1 && errno == EINTR);
 
-               camel_object_unref (output_stream);
+               g_object_unref (output_stream);
        }
 
        if (filter_stream)
-               camel_object_unref (filter_stream);
+               g_object_unref (filter_stream);
 
        g_free(fromline);
 
@@ -435,7 +415,7 @@ retry:
                          (glong)camel_mime_parser_tell_start_from(parser),
                          camel_mime_parser_state(parser));
 
-               camel_object_unref (parser);
+               g_object_unref (parser);
                parser = NULL;
 
                if (!retried) {
@@ -460,7 +440,7 @@ retry:
                        CAMEL_EXCEPTION_USER_CANCEL : CAMEL_EXCEPTION_SYSTEM,
                        uid, lf->folder_path,
                        _("Message construction failed."));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
                goto fail;
        }
@@ -472,7 +452,7 @@ fail:
        camel_local_folder_unlock(lf);
 
        if (parser)
-               camel_object_unref (parser);
+               g_object_unref (parser);
 
        /* use the opportunity to notify of changes (particularly if we had a rebuild) */
        if (camel_folder_change_info_changed(lf->changes)) {
index 7a61f33..89b03b7 100644 (file)
 #include "camel-local-folder.h"
 #include "camel-mbox-summary.h"
 
-#define CAMEL_MBOX_FOLDER_TYPE     (camel_mbox_folder_get_type ())
-#define CAMEL_MBOX_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolder))
-#define CAMEL_MBOX_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolderClass))
-#define CAMEL_IS_MBOX_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MBOX_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MBOX_FOLDER \
+       (camel_mbox_folder_get_type ())
+#define CAMEL_MBOX_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MBOX_FOLDER, CamelMboxFolder))
+#define CAMEL_MBOX_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MBOX_FOLDER, CamelMboxFolderClass))
+#define CAMEL_IS_MBOX_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MBOX_FOLDER))
+#define CAMEL_IS_MBOX_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MBOX_FOLDER))
+#define CAMEL_MBOX_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MBOX_FOLDER, CamelMboxFolderClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelMboxFolderClass {
 /* flags are taken from CAMEL_STORE_FOLDER_* flags */
 CamelFolder *camel_mbox_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-CamelType camel_mbox_folder_get_type(void);
+GType camel_mbox_folder_get_type(void);
 
 G_END_DECLS
 
index 13f5a6b..fde5b5f 100644 (file)
@@ -38,8 +38,6 @@
 
 #define d(x)
 
-static gpointer camel_mbox_store_parent_class;
-
 static CamelFolder *get_folder(CamelStore *store, const gchar *folder_name, guint32 flags, CamelException *ex);
 static gboolean delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex);
 static gboolean rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
@@ -48,14 +46,14 @@ static CamelFolderInfo *get_folder_info(CamelStore *store, const gchar *top, gui
 static gchar *mbox_get_meta_path(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
 static gchar *mbox_get_full_path(CamelLocalStore *ls, const gchar *full_name);
 
+G_DEFINE_TYPE (CamelMboxStore, camel_mbox_store, CAMEL_TYPE_LOCAL_STORE)
+
 static void
 camel_mbox_store_class_init (CamelMboxStoreClass *class)
 {
        CamelStoreClass *store_class;
        CamelLocalStoreClass *local_store_class;
 
-       camel_mbox_store_parent_class =(CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
-
        store_class = CAMEL_STORE_CLASS (class);
        store_class->get_folder = get_folder;
        store_class->delete_folder = delete_folder;
@@ -69,22 +67,9 @@ camel_mbox_store_class_init (CamelMboxStoreClass *class)
        local_store_class->get_meta_path = mbox_get_meta_path;
 }
 
-CamelType
-camel_mbox_store_get_type(void)
+static void
+camel_mbox_store_init (CamelMboxStore *mbox_store)
 {
-       static CamelType camel_mbox_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mbox_store_type == CAMEL_INVALID_TYPE)        {
-               camel_mbox_store_type = camel_type_register(CAMEL_LOCAL_STORE_TYPE, "CamelMboxStore",
-                                                           sizeof(CamelMboxStore),
-                                                           sizeof(CamelMboxStoreClass),
-                                                           (CamelObjectClassInitFunc) camel_mbox_store_class_init,
-                                                           NULL,
-                                                           NULL,
-                                                           NULL);
-       }
-
-       return camel_mbox_store_type;
 }
 
 static const gchar *extensions[] = {
@@ -319,7 +304,7 @@ delete_folder(CamelStore *store, const gchar *folder_name, CamelException *ex)
        if ((lf = camel_store_get_folder(store, folder_name, 0, &lex))) {
                camel_object_get(lf, NULL, CAMEL_OBJECT_STATE_FILE, &path, NULL);
                camel_object_set(lf, NULL, CAMEL_OBJECT_STATE_FILE, NULL, NULL);
-               camel_object_unref (lf);
+               g_object_unref (lf);
        } else {
                camel_exception_clear(&lex);
        }
@@ -421,7 +406,7 @@ create_folder(CamelStore *store, const gchar *parent_name, const gchar *folder_n
        folder = CAMEL_STORE_GET_CLASS (store)->get_folder (
                store, name, CAMEL_STORE_FOLDER_CREATE, ex);
        if (folder) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                info = CAMEL_STORE_GET_CLASS (store)->get_folder_info (
                        store, name, 0, ex);
        }
@@ -572,7 +557,7 @@ rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelExcept
        g_free(newibex);
 
        if (folder)
-               camel_object_unref (folder);
+               g_object_unref (folder);
 
        return TRUE;
 
@@ -605,7 +590,7 @@ ibex_failed:
        g_free(oldibex);
 
        if (folder)
-               camel_object_unref (folder);
+               g_object_unref (folder);
 
        return FALSE;
 }
@@ -652,7 +637,7 @@ fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
                        camel_folder_refresh_info(folder, NULL);
                fi->unread = camel_folder_get_unread_message_count(folder);
                fi->total = camel_folder_get_message_count(folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        } else {
                gchar *path, *folderpath;
                CamelMboxSummary *mbs;
@@ -668,7 +653,7 @@ fill_fi(CamelStore *store, CamelFolderInfo *fi, guint32 flags)
                        fi->total = ((CamelFolderSummary *)mbs)->saved_count;
                }
 
-               camel_object_unref (mbs);
+               g_object_unref (mbs);
                g_free(folderpath);
                g_free(path);
        }
index 49f7ac1..97cad66 100644 (file)
 
 #include "camel-local-store.h"
 
-#define CAMEL_MBOX_STORE_TYPE     (camel_mbox_store_get_type ())
-#define CAMEL_MBOX_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MBOX_STORE_TYPE, CamelMboxStore))
-#define CAMEL_MBOX_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MBOX_STORE_TYPE, CamelMboxStoreClass))
-#define CAMEL_IS_MBOX_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MBOX_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MBOX_STORE \
+       (camel_mbox_store_get_type ())
+#define CAMEL_MBOX_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MBOX_STORE, CamelMboxStore))
+#define CAMEL_MBOX_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MBOX_STORE, CamelMboxStoreClass))
+#define CAMEL_IS_MBOX_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MBOX_STORE))
+#define CAMEL_IS_MBOX_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MBOX_STORE))
+#define CAMEL_MBOX_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MBOX_STORE, CamelMboxStoreClass))
 
 G_BEGIN_DECLS
 
@@ -42,7 +56,7 @@ struct _CamelMboxStoreClass {
        CamelLocalStoreClass parent_class;
 };
 
-CamelType camel_mbox_store_get_type (void);
+GType camel_mbox_store_get_type (void);
 
 G_END_DECLS
 
index 256203d..9776241 100644 (file)
@@ -81,7 +81,7 @@ static void encode_status(guint32 flags, gchar status[8]);
 static guint32 decode_status(const gchar *status);
 #endif
 
-static gpointer camel_mbox_summary_parent_class;
+G_DEFINE_TYPE (CamelMboxSummary, camel_mbox_summary, CAMEL_TYPE_LOCAL_SUMMARY)
 
 static gboolean
 mbox_info_set_user_flag(CamelMessageInfo *mi, const gchar *name, gboolean value)
@@ -128,8 +128,6 @@ camel_mbox_summary_class_init (CamelMboxSummaryClass *class)
        CamelFolderSummaryClass *folder_summary_class;
        CamelLocalSummaryClass *local_summary_class;
 
-       camel_mbox_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type());
-
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelMboxMessageInfo);
        folder_summary_class->content_info_size = sizeof (CamelMboxMessageContentInfo);
@@ -173,24 +171,6 @@ camel_mbox_summary_init (CamelMboxSummary *mbox_summary)
        folder_summary->version += CAMEL_MBOX_SUMMARY_VERSION;
 }
 
-CamelType
-camel_mbox_summary_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_local_summary_get_type(), "CamelMboxSummary",
-                                          sizeof (CamelMboxSummary),
-                                          sizeof (CamelMboxSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_mbox_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_mbox_summary_init,
-                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_mbox_summary_new:
  *
@@ -203,7 +183,7 @@ camel_mbox_summary_new(struct _CamelFolder *folder, const gchar *filename, const
 {
        CamelMboxSummary *new;
 
-       new = (CamelMboxSummary *)camel_object_new(camel_mbox_summary_get_type());
+       new = g_object_new (CAMEL_TYPE_MBOX_SUMMARY, NULL);
        ((CamelFolderSummary *)new)->folder = folder;
        if (folder) {
                CamelFolderSummary *summary = (CamelFolderSummary *)new;
@@ -574,7 +554,7 @@ summary_update(CamelLocalSummary *cls, off_t offset, CamelFolderChangeInfo *chan
                g_assert(camel_mime_parser_step(mp, NULL, NULL) == CAMEL_MIME_PARSER_STATE_FROM_END);
        }
 
-       camel_object_unref (CAMEL_OBJECT (mp));
+       g_object_unref (CAMEL_OBJECT (mp));
 
        count = camel_folder_summary_count(s);
        for (i=0;i<count;i++) {
@@ -959,7 +939,7 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
 
        g_ptr_array_foreach (summary, (GFunc) camel_pstring_free, NULL);
        g_ptr_array_free (summary, TRUE);
-       camel_object_unref (mp);
+       g_object_unref (mp);
 
        camel_operation_end(NULL);
 
@@ -970,7 +950,7 @@ mbox_summary_sync_quick(CamelMboxSummary *mbs, gboolean expunge, CamelFolderChan
        if (fd != -1)
                close(fd);
        if (mp)
-               camel_object_unref (mp);
+               g_object_unref (mp);
        if (info)
                camel_message_info_free((CamelMessageInfo *)info);
 
@@ -1239,7 +1219,7 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
                write(fdout, "\n", 1);
 #endif
 
-       camel_object_unref (mp);
+       g_object_unref (mp);
 
        /* clear working flags */
        for (i=0; i<count; i++) {
@@ -1265,7 +1245,7 @@ camel_mbox_summary_sync_mbox(CamelMboxSummary *cls, guint32 flags, CamelFolderCh
        g_free(xevnew);
 
        if (mp)
-               camel_object_unref (mp);
+               g_object_unref (mp);
        if (info)
                camel_message_info_free((CamelMessageInfo *)info);
 
index 4609860..5b4f95c 100644 (file)
 /* Enable the use of elm/pine style "Status" & "X-Status" headers */
 #define STATUS_PINE
 
-#define CAMEL_MBOX_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_mbox_summary_get_type (), CamelMboxSummary)
-#define CAMEL_MBOX_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mbox_summary_get_type (), CamelMboxSummaryClass)
-#define CAMEL_IS_MBOX_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_mbox_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MBOX_SUMMARY \
+       (camel_mbox_summary_get_type ())
+#define CAMEL_MBOX_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MBOX_SUMMARY, CamelMboxSummary))
+#define CAMEL_MBOX_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MBOX_SUMMARY, CamelMboxSummaryClass))
+#define CAMEL_IS_MBOX_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MBOX_SUMMARY))
+#define CAMEL_IS_MBOX_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MBOX_SUMMARY))
 #define CAMEL_MBOX_SUMMARY_GET_CLASS(obj) \
-       ((CamelMboxSummaryClass *) CAMEL_OBJECT_GET_CLASS (obj))
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MBOX_SUMMARY, CamelMboxSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -67,7 +80,7 @@ struct _CamelMboxSummaryClass {
        gint (*sync_full)(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 };
 
-CamelType              camel_mbox_summary_get_type     (void);
+GType          camel_mbox_summary_get_type     (void);
 CamelMboxSummary      *camel_mbox_summary_new  (struct _CamelFolder *, const gchar *filename, const gchar *mbox_name, CamelIndex *index);
 
 /* do we honour/use xstatus headers, etc */
index 05e2a91..d016d09 100644 (file)
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static CamelLocalFolderClass *parent_class = NULL;
-
 static CamelLocalSummary *mh_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
 static gboolean mh_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, gchar **appended_uid, CamelException * ex);
 static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex);
 static gchar * mh_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
+G_DEFINE_TYPE (CamelMhFolder, camel_mh_folder, CAMEL_TYPE_LOCAL_FOLDER)
+
 static void
 camel_mh_folder_class_init (CamelMhFolderClass *class)
 {
        CamelFolderClass *folder_class;
        CamelLocalFolderClass *local_folder_class;
 
-       parent_class = CAMEL_LOCAL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_local_folder_get_type()));
-
        folder_class = CAMEL_FOLDER_CLASS (class);
        folder_class->append_message = mh_append_message;
        folder_class->get_message = mh_get_message;
@@ -70,24 +68,6 @@ camel_mh_folder_init (CamelMhFolder *mh_folder)
 {
 }
 
-CamelType
-camel_mh_folder_get_type(void)
-{
-       static CamelType camel_mh_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mh_folder_type == CAMEL_INVALID_TYPE) {
-               camel_mh_folder_type = camel_type_register(CAMEL_LOCAL_FOLDER_TYPE, "CamelMhFolder",
-                                                          sizeof(CamelMhFolder),
-                                                          sizeof(CamelMhFolderClass),
-                                                          (CamelObjectClassInitFunc) camel_mh_folder_class_init,
-                                                          NULL,
-                                                          (CamelObjectInitFunc) camel_mh_folder_init,
-                                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return camel_mh_folder_type;
-}
-
 CamelFolder *
 camel_mh_folder_new (CamelStore *parent_store,
                      const gchar *full_name,
@@ -98,7 +78,7 @@ camel_mh_folder_new (CamelStore *parent_store,
 
        d(printf("Creating mh folder: %s\n", full_name));
 
-       folder = (CamelFolder *)camel_object_new(CAMEL_MH_FOLDER_TYPE);
+       folder = g_object_new (CAMEL_TYPE_MH_FOLDER, NULL);
        folder = (CamelFolder *) camel_local_folder_construct (
                CAMEL_LOCAL_FOLDER (folder),
                parent_store, full_name, flags, ex);
@@ -158,7 +138,7 @@ mh_append_message (CamelFolder *folder,
                goto fail_write;
 
        /* close this? */
-       camel_object_unref (CAMEL_OBJECT (output_stream));
+       g_object_unref (CAMEL_OBJECT (output_stream));
 
        g_free(name);
 
@@ -184,7 +164,7 @@ mh_append_message (CamelFolder *folder,
                        name, g_strerror (errno));
 
        if (output_stream) {
-               camel_object_unref (CAMEL_OBJECT (output_stream));
+               g_object_unref (CAMEL_OBJECT (output_stream));
                unlink (name);
        }
 
@@ -252,11 +232,11 @@ mh_get_message (CamelFolder *folder,
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        name, lf->folder_path,
                        _("Message construction failed."));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
 
        }
-       camel_object_unref (message_stream);
+       g_object_unref (message_stream);
 
  fail:
        g_free (name);
index 7304ba3..9857a3e 100644 (file)
 
 #include "camel-local-folder.h"
 
-#define CAMEL_MH_FOLDER_TYPE     (camel_mh_folder_get_type ())
-#define CAMEL_MH_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MH_FOLDER_TYPE, CamelMhFolder))
-#define CAMEL_MH_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MH_FOLDER_TYPE, CamelMhFolderClass))
-#define CAMEL_IS_MH_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MH_FOLDER_TYPE))
+#define CAMEL_TYPE_MH_FOLDER \
+       (camel_mh_folder_get_type ())
+#define CAMEL_MH_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MH_FOLDER, CamelMhFolder))
+#define CAMEL_MH_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MH_FOLDER, CamelMhFolderClass))
+#define CAMEL_IS_MH_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MH_FOLDER))
+#define CAMEL_IS_MH_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MH_FOLDER))
+#define CAMEL_MH_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MH_FOLDER, CamelMhFolderClass))
 
 G_BEGIN_DECLS
 
@@ -46,7 +59,7 @@ struct _CamelMhFolderClass {
 /* public methods */
 CamelFolder *camel_mh_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
-CamelType camel_mh_folder_get_type(void);
+GType camel_mh_folder_get_type(void);
 
 G_END_DECLS
 
index b225f7e..d0c2277 100644 (file)
@@ -35,8 +35,6 @@
 #include "camel-mh-store.h"
 #include "camel-mh-summary.h"
 
-static gpointer camel_mh_store_parent_class;
-
 #define d(x)
 
 static gboolean construct (CamelService *service, CamelSession *session, CamelProvider *provider, CamelURL *url, CamelException *ex);
@@ -46,14 +44,14 @@ static gboolean delete_folder(CamelStore * store, const gchar *folder_name, Came
 static gboolean rename_folder(CamelStore *store, const gchar *old, const gchar *new, CamelException *ex);
 static CamelFolderInfo * get_folder_info (CamelStore *store, const gchar *top, guint32 flags, CamelException *ex);
 
+G_DEFINE_TYPE (CamelMhStore, camel_mh_store, CAMEL_TYPE_LOCAL_STORE)
+
 static void
-camel_mh_store_class_init (CamelObjectClass *class)
+camel_mh_store_class_init (CamelMhStoreClass *class)
 {
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_mh_store_parent_class = (CamelLocalStoreClass *)camel_type_get_global_classfuncs(camel_local_store_get_type());
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = construct;
 
@@ -65,22 +63,9 @@ camel_mh_store_class_init (CamelObjectClass *class)
        store_class->get_folder_info = get_folder_info;
 }
 
-CamelType
-camel_mh_store_get_type(void)
+static void
+camel_mh_store_init (CamelMhStore *mh_store)
 {
-       static CamelType camel_mh_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_mh_store_type == CAMEL_INVALID_TYPE) {
-               camel_mh_store_type = camel_type_register(CAMEL_LOCAL_STORE_TYPE, "CamelMhStore",
-                                                         sizeof(CamelMhStore),
-                                                         sizeof(CamelMhStoreClass),
-                                                         (CamelObjectClassInitFunc) camel_mh_store_class_init,
-                                                         NULL,
-                                                         NULL,
-                                                         NULL);
-       }
-
-       return camel_mh_store_type;
 }
 
 static gboolean
@@ -135,7 +120,7 @@ folders_update (const gchar *root,
        stream = camel_stream_fs_new_with_name (tmp, O_RDONLY, 0);
        if (stream) {
                in = camel_stream_buffer_new(stream, CAMEL_STREAM_BUFFER_READ);
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
        if (in == NULL || stream == NULL) {
                if (mode == UPDATE_ADD && camel_stream_printf (out, "%s\n", folder) == -1)
@@ -199,9 +184,9 @@ fail:
        unlink(tmpnew);         /* remove it if its there */
        g_free(line);
        if (in)
-               camel_object_unref (in);
+               g_object_unref (in);
        if (out)
-               camel_object_unref (out);
+               g_object_unref (out);
 }
 
 static CamelFolder *
@@ -348,7 +333,7 @@ fill_fi (CamelStore *store,
                        camel_folder_refresh_info(folder, NULL);
                fi->unread = camel_folder_get_unread_message_count(folder);
                fi->total = camel_folder_get_message_count(folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        } else {
                gchar *path, *folderpath;
                CamelFolderSummary *s;
@@ -368,7 +353,7 @@ fill_fi (CamelStore *store,
                        fi->unread = s->unread_count;
                        fi->total = s->saved_count;
                }
-               camel_object_unref (s);
+               g_object_unref (s);
                g_free(folderpath);
                g_free(path);
        }
@@ -509,7 +494,7 @@ folders_scan (CamelStore *store,
                return;
 
        in = camel_stream_buffer_new(stream, CAMEL_STREAM_BUFFER_READ);
-       camel_object_unref (stream);
+       g_object_unref (stream);
        if (in == NULL)
                return;
 
@@ -569,7 +554,7 @@ folders_scan (CamelStore *store,
        g_hash_table_foreach(visited, (GHFunc)g_free, NULL);
        g_hash_table_destroy(visited);
 
-       camel_object_unref (in);
+       g_object_unref (in);
 }
 
 /* FIXME: move to camel-local, this is shared with maildir code */
index 2558590..e166ea3 100644 (file)
 
 #include "camel-local-store.h"
 
-#define CAMEL_MH_STORE_TYPE     (camel_mh_store_get_type ())
-#define CAMEL_MH_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MH_STORE_TYPE, CamelMhStore))
-#define CAMEL_MH_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MH_STORE_TYPE, CamelMhStoreClass))
-#define CAMEL_IS_MH_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MH_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_MH_STORE \
+       (camel_mh_store_get_type ())
+#define CAMEL_MH_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MH_STORE, CamelMhStore))
+#define CAMEL_MH_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MH_STORE, CamelMhStoreClass))
+#define CAMEL_IS_MH_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MH_STORE))
+#define CAMEL_IS_MH_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MH_STORE))
+#define CAMEL_MH_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MH_STORE, CamelMhStoreClass))
 
 G_BEGIN_DECLS
 
@@ -48,7 +62,7 @@ struct _CamelMhStoreClass {
        CamelLocalStoreClass parent_class;
 };
 
-CamelType camel_mh_store_get_type(void);
+GType camel_mh_store_get_type (void);
 
 G_END_DECLS
 
index e00a2d9..9a48078 100644 (file)
 
 #define CAMEL_MH_SUMMARY_VERSION (0x2000)
 
+#define CAMEL_MH_SUMMARY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_MH_SUMMARY, CamelMhSummaryPrivate))
+
 static gint mh_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 static gint mh_summary_sync(CamelLocalSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 /*static gint mh_summary_add(CamelLocalSummary *cls, CamelMimeMessage *msg, CamelMessageInfo *info, CamelFolderChangeInfo *, CamelException *ex);*/
@@ -51,13 +55,7 @@ struct _CamelMhSummaryPrivate {
        gchar *current_uid;
 };
 
-static gpointer camel_mh_summary_parent_class;
-
-static void
-mh_summary_finalize (CamelMhSummary *mh_summary)
-{
-       g_free (mh_summary->priv);
-}
+G_DEFINE_TYPE (CamelMhSummary, camel_mh_summary, CAMEL_TYPE_LOCAL_SUMMARY)
 
 static void
 camel_mh_summary_class_init (CamelMhSummaryClass *class)
@@ -65,7 +63,7 @@ camel_mh_summary_class_init (CamelMhSummaryClass *class)
        CamelFolderSummaryClass *folder_summary_class;
        CamelLocalSummaryClass *local_summary_class;
 
-       camel_mh_summary_parent_class = (CamelLocalSummaryClass *)camel_type_get_global_classfuncs(camel_local_summary_get_type ());
+       g_type_class_add_private (class, sizeof (CamelMhSummaryPrivate));
 
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->next_uid_string = mh_summary_next_uid_string;
@@ -80,7 +78,7 @@ camel_mh_summary_init (CamelMhSummary *mh_summary)
 {
        CamelFolderSummary *folder_summary;
 
-       mh_summary->priv = g_new0 (CamelMhSummaryPrivate, 1);
+       mh_summary->priv = CAMEL_MH_SUMMARY_GET_PRIVATE (mh_summary);
 
        folder_summary = CAMEL_FOLDER_SUMMARY (mh_summary);
 
@@ -88,24 +86,6 @@ camel_mh_summary_init (CamelMhSummary *mh_summary)
        folder_summary->version += CAMEL_MH_SUMMARY_VERSION;
 }
 
-CamelType
-camel_mh_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_local_summary_get_type (), "CamelMhSummary",
-                                          sizeof(CamelMhSummary),
-                                          sizeof(CamelMhSummaryClass),
-                                          (CamelObjectClassInitFunc)camel_mh_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc)camel_mh_summary_init,
-                                          (CamelObjectFinalizeFunc)mh_summary_finalize);
-       }
-
-       return type;
-}
-
 /**
  * camel_mh_summary_new:
  *
@@ -121,7 +101,7 @@ camel_mh_summary_new (CamelFolder *folder,
 {
        CamelMhSummary *o;
 
-       o = (CamelMhSummary *)camel_object_new(camel_mh_summary_get_type ());
+       o = g_object_new (CAMEL_TYPE_MH_SUMMARY, NULL);
        ((CamelFolderSummary *)o)->folder = folder;
        if (folder) {
                camel_db_set_collate (folder->parent_store->cdb_r, "uid", "mh_uid_sort", (CamelDBCollate)camel_local_frompos_sort);
@@ -198,7 +178,7 @@ camel_mh_summary_add (CamelLocalSummary *cls,
        }
        mhs->priv->current_uid = (gchar *)name;
        camel_folder_summary_add_from_parser((CamelFolderSummary *)mhs, mp);
-       camel_object_unref (mp);
+       g_object_unref (mp);
        mhs->priv->current_uid = NULL;
        camel_folder_summary_set_index((CamelFolderSummary *)mhs, NULL);
        g_free(filename);
index 218eed2..9f211d2 100644 (file)
 
 #include "camel-local-summary.h"
 
-#define CAMEL_MH_SUMMARY(obj)  CAMEL_CHECK_CAST (obj, camel_mh_summary_get_type (), CamelMhSummary)
-#define CAMEL_MH_SUMMARY_CLASS(klass)  CAMEL_CHECK_CLASS_CAST (klass, camel_mh_summary_get_type (), CamelMhSummaryClass)
-#define CAMEL_IS_MH_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_mh_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_MH_SUMMARY \
+       (camel_mh_summary_get_type ())
+#define CAMEL_MH_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_MH_SUMMARY, CamelMhSummary))
+#define CAMEL_MH_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_MH_SUMMARY, CamelMhSummaryClass))
+#define CAMEL_IS_MH_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_MH_SUMMARY))
+#define CAMEL_IS_MH_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_MH_SUMMARY))
+#define CAMEL_MH_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_MH_SUMMARY, CamelMhSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -42,7 +57,7 @@ struct _CamelMhSummaryClass {
        CamelLocalSummaryClass parent_class;
 };
 
-CamelType       camel_mh_summary_get_type      (void);
+GType   camel_mh_summary_get_type      (void);
 CamelMhSummary *camel_mh_summary_new(struct _CamelFolder *, const gchar *filename, const gchar *mhdir, CamelIndex *index);
 
 G_END_DECLS
index c55fadb..2cae7d0 100644 (file)
 
 #define d(x) /*(printf("%s(%d): ", __FILE__, __LINE__),(x))*/
 
-static CamelFolderClass *parent_class = NULL;
-
 static CamelLocalSummary *spool_create_summary(CamelLocalFolder *lf, const gchar *path, const gchar *folder, CamelIndex *index);
 
 static gint spool_lock(CamelLocalFolder *lf, CamelLockType type, CamelException *ex);
 static void spool_unlock(CamelLocalFolder *lf);
 
+G_DEFINE_TYPE (CamelSpoolFolder, camel_spool_folder, CAMEL_TYPE_MBOX_FOLDER)
+
 static void
 camel_spool_folder_class_init (CamelSpoolFolderClass *class)
 {
        CamelLocalFolderClass *local_folder_class;
 
-       parent_class = (CamelFolderClass *)camel_mbox_folder_get_type();
-
        local_folder_class = CAMEL_LOCAL_FOLDER_CLASS (class);
        local_folder_class->create_summary = spool_create_summary;
        local_folder_class->lock = spool_lock;
@@ -66,24 +64,6 @@ camel_spool_folder_init (CamelSpoolFolder *spool_folder)
        spool_folder->lockid = -1;
 }
 
-CamelType
-camel_spool_folder_get_type (void)
-{
-       static CamelType camel_spool_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_spool_folder_type == CAMEL_INVALID_TYPE) {
-               camel_spool_folder_type = camel_type_register(camel_mbox_folder_get_type(), "CamelSpoolFolder",
-                                                            sizeof(CamelSpoolFolder),
-                                                            sizeof(CamelSpoolFolderClass),
-                                                            (CamelObjectClassInitFunc) camel_spool_folder_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_spool_folder_init,
-                                                            (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return camel_spool_folder_type;
-}
-
 CamelFolder *
 camel_spool_folder_new (CamelStore *parent_store,
                         const gchar *full_name,
@@ -94,7 +74,7 @@ camel_spool_folder_new (CamelStore *parent_store,
 
        d(printf("Creating spool folder: %s in %s\n", full_name, camel_local_store_get_toplevel_dir((CamelLocalStore *)parent_store)));
 
-       folder = (CamelFolder *)camel_object_new(CAMEL_SPOOL_FOLDER_TYPE);
+       folder = g_object_new (CAMEL_TYPE_SPOOL_FOLDER, NULL);
 
        if (parent_store->flags & CAMEL_STORE_FILTER_INBOX
            && strcmp(full_name, "INBOX") == 0)
index ec0280a..7ae32af 100644 (file)
 #include "camel-mbox-folder.h"
 #include "camel-spool-summary.h"
 
-#define CAMEL_SPOOL_FOLDER_TYPE     (camel_spool_folder_get_type ())
-#define CAMEL_SPOOL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SPOOL_FOLDER_TYPE, CamelSpoolFolder))
-#define CAMEL_SPOOL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SPOOL_FOLDER_TYPE, CamelSpoolFolderClass))
-#define CAMEL_IS_SPOOL_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SPOOL_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SPOOL_FOLDER \
+       (camel_spool_folder_get_type ())
+#define CAMEL_SPOOL_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SPOOL_FOLDER, CamelSpoolFolder))
+#define CAMEL_SPOOL_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SPOOL_FOLDER, CamelSpoolFolderClass))
+#define CAMEL_IS_SPOOL_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SPOOL_FOLDER))
+#define CAMEL_IS_SPOOL_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SPOOL_FOLDER))
+#define CAMEL_SPOOL_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SPOOL_FOLDER, CamelSpoolFolderClass))
 
 G_BEGIN_DECLS
 
@@ -47,7 +61,7 @@ struct _CamelSpoolFolderClass {
        CamelMboxFolderClass parent_class;
 };
 
-CamelType camel_spool_folder_get_type(void);
+GType camel_spool_folder_get_type(void);
 
 CamelFolder *camel_spool_folder_new(CamelStore *parent_store, const gchar *full_name, guint32 flags, CamelException *ex);
 
index e476ff1..811efb0 100644 (file)
@@ -56,7 +56,7 @@ static gboolean delete_folder(CamelStore *store, const gchar *folder_name, Camel
 static gchar *spool_get_meta_path(CamelLocalStore *ls, const gchar *full_name, const gchar *ext);
 static gchar *spool_get_full_path(CamelLocalStore *ls, const gchar *full_name);
 
-static gpointer camel_spool_store_parent_class;
+G_DEFINE_TYPE (CamelSpoolStore, camel_spool_store, CAMEL_TYPE_MBOX_STORE)
 
 static void
 camel_spool_store_class_init (CamelSpoolStoreClass *class)
@@ -65,8 +65,6 @@ camel_spool_store_class_init (CamelSpoolStoreClass *class)
        CamelStoreClass *store_class;
        CamelLocalStoreClass *local_store_class;
 
-       camel_spool_store_parent_class = CAMEL_STORE_CLASS(camel_mbox_store_get_type());
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = construct;
        service_class->get_name = get_name;
@@ -84,22 +82,9 @@ camel_spool_store_class_init (CamelSpoolStoreClass *class)
        local_store_class->get_meta_path = spool_get_meta_path;
 }
 
-CamelType
-camel_spool_store_get_type (void)
+static void
+camel_spool_store_init (CamelSpoolStore *spool_store)
 {
-       static CamelType camel_spool_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_spool_store_type == CAMEL_INVALID_TYPE)       {
-               camel_spool_store_type = camel_type_register (camel_mbox_store_get_type(), "CamelSpoolStore",
-                                                            sizeof (CamelSpoolStore),
-                                                            sizeof (CamelSpoolStoreClass),
-                                                            (CamelObjectClassInitFunc) camel_spool_store_class_init,
-                                                            NULL,
-                                                            NULL,
-                                                            NULL);
-       }
-
-       return camel_spool_store_type;
 }
 
 static gboolean
@@ -113,7 +98,7 @@ construct (CamelService *service,
        struct stat st;
 
        d(printf("constructing store of type %s '%s:%s'\n",
-                camel_type_to_name(((CamelObject *)service)->s.type), url->protocol, url->path));
+                G_OBJECT_CLASS_NAME(((CamelObject *)service)->s.type), url->protocol, url->path));
 
        /* Chain up to parent's construct() method. */
        service_class = CAMEL_SERVICE_CLASS (camel_spool_store_parent_class);
@@ -290,7 +275,7 @@ spool_fill_fi (CamelStore *store,
                        camel_folder_refresh_info(folder, NULL);
                fi->unread = camel_folder_get_unread_message_count(folder);
                fi->total = camel_folder_get_message_count(folder);
-               camel_object_unref (folder);
+               g_object_unref (folder);
        }
 }
 
@@ -427,7 +412,7 @@ scan_dir (CamelStore *store,
                                        spool_fill_fi(store, fi, flags);
                                }
                                if (folder)
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
 
                        } else if (S_ISDIR(st.st_mode)) {
                                struct _inode in = { st.st_dev, st.st_ino };
index 0c5f609..f0b9d34 100644 (file)
 
 #include "camel-mbox-store.h"
 
-#define CAMEL_SPOOL_STORE_TYPE     (camel_spool_store_get_type ())
-#define CAMEL_SPOOL_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SPOOL_STORE_TYPE, CamelSpoolStore))
-#define CAMEL_SPOOL_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SPOOL_STORE_TYPE, CamelSpoolStoreClass))
-#define CAMEL_IS_SPOOL_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SPOOL_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SPOOL_STORE \
+       (camel_spool_store_get_type ())
+#define CAMEL_SPOOL_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SPOOL_STORE, CamelSpoolStore))
+#define CAMEL_SPOOL_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SPOOL_STORE, CamelSpoolStoreClass))
+#define CAMEL_IS_SPOOL_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SPOOL_STORE))
+#define CAMEL_IS_SPOOL_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SPOOL_STORE))
+#define CAMEL_SPOOL_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SPOOL_STORE, CamelSpoolStoreClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +63,7 @@ struct _CamelSpoolStoreClass {
        CamelMboxStoreClass parent_class;
 };
 
-CamelType camel_spool_store_get_type (void);
+GType camel_spool_store_get_type (void);
 
 G_END_DECLS
 
index b4b789c..258cda8 100644 (file)
@@ -49,7 +49,7 @@ static gint spool_summary_check(CamelLocalSummary *cls, CamelFolderChangeInfo *c
 static gint spool_summary_sync_full(CamelMboxSummary *cls, gboolean expunge, CamelFolderChangeInfo *changeinfo, CamelException *ex);
 static gint spool_summary_need_index(void);
 
-static gpointer camel_spool_summary_parent_class;
+G_DEFINE_TYPE (CamelSpoolSummary, camel_spool_summary, CAMEL_TYPE_MBOX_SUMMARY)
 
 static void
 camel_spool_summary_class_init (CamelSpoolSummaryClass *class)
@@ -57,8 +57,6 @@ camel_spool_summary_class_init (CamelSpoolSummaryClass *class)
        CamelLocalSummaryClass *local_summary_class;
        CamelMboxSummaryClass *mbox_summary_class;
 
-       camel_spool_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_mbox_summary_get_type());
-
        local_summary_class = CAMEL_LOCAL_SUMMARY_CLASS (class);
        local_summary_class->load = spool_summary_load;
        local_summary_class->check = spool_summary_check;
@@ -81,31 +79,13 @@ camel_spool_summary_init(CamelSpoolSummary *spool_summary)
        folder_summary->version += CAMEL_SPOOL_SUMMARY_VERSION;
 }
 
-CamelType
-camel_spool_summary_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_mbox_summary_get_type(), "CamelSpoolSummary",
-                                          sizeof (CamelSpoolSummary),
-                                          sizeof (CamelSpoolSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_spool_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_spool_summary_init,
-                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 CamelSpoolSummary *
 camel_spool_summary_new (CamelFolder *folder,
                          const gchar *mbox_name)
 {
        CamelSpoolSummary *new;
 
-       new = (CamelSpoolSummary *)camel_object_new(camel_spool_summary_get_type());
+       new = g_object_new (CAMEL_TYPE_SPOOL_SUMMARY, NULL);
        ((CamelFolderSummary *)new)->folder = folder;
        if (folder) {
                camel_db_set_collate (folder->parent_store->cdb_r, "bdata", "spool_frompos_sort", (CamelDBCollate)camel_local_frompos_sort);
index b4fd894..98aa960 100644 (file)
 
 #include "camel-mbox-summary.h"
 
-#define CAMEL_SPOOL_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_spool_summary_get_type (), CamelSpoolSummary)
-#define CAMEL_SPOOL_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_spool_summary_get_type (), CamelSpoolSummaryClass)
-#define CAMEL_IS_SPOOL_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_spool_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_SPOOL_SUMMARY \
+       (camel_spool_summary_get_type ())
+#define CAMEL_SPOOL_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SPOOL_SUMMARY, CamelSpoolSummary))
+#define CAMEL_SPOOL_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SPOOL_SUMMARY, CamelSpoolSummaryClass))
+#define CAMEL_IS_SPOOL_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SPOOL_SUMMARY))
+#define CAMEL_IS_SPOOL_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SPOOL_SUMMARY))
+#define CAMEL_SPOOL_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SPOOL_SUMMARY, CamelSpoolSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -43,7 +58,7 @@ struct _CamelSpoolSummaryClass {
        CamelMboxSummaryClass parent_class;
 };
 
-CamelType      camel_spool_summary_get_type    (void);
+GType  camel_spool_summary_get_type    (void);
 void   camel_spool_summary_construct   (CamelSpoolSummary *new, const gchar *filename, const gchar *spool_name, CamelIndex *index);
 
 /* create the summary, in-memory only */
index 0a9c882..7cb9493 100644 (file)
 #include "camel-nntp-store.h"
 #include "camel-nntp-summary.h"
 
-static CamelDiscoFolderClass *parent_class = NULL;
+#define CAMEL_NNTP_FOLDER_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_NNTP_FOLDER, CamelNNTPFolderPrivate))
+
+G_DEFINE_TYPE (CamelNNTPFolder, camel_nntp_folder, CAMEL_TYPE_DISCO_FOLDER)
 
 static void
-nntp_folder_finalize (CamelNNTPFolder *nntp_folder)
+nntp_folder_dispose (GObject *object)
 {
-       CamelException ex;
-
-       camel_exception_init (&ex);
+       CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (object);
 
        camel_folder_summary_save_to_db (
-               CAMEL_FOLDER (nntp_folder)->summary, &ex);
+               CAMEL_FOLDER (nntp_folder)->summary, NULL);
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_nntp_folder_parent_class)->dispose (object);
+}
+
+static void
+nntp_folder_finalize (GObject *object)
+{
+       CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (object);
 
        g_mutex_free (nntp_folder->priv->search_lock);
        g_mutex_free (nntp_folder->priv->cache_lock);
-       g_free (nntp_folder->priv);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_nntp_folder_parent_class)->finalize (object);
 }
 
 gboolean
@@ -106,7 +119,9 @@ nntp_folder_sync_online (CamelFolder *folder, CamelException *ex)
        gboolean success;
 
        camel_service_lock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
+
        success = camel_folder_summary_save_to_db (folder->summary, ex);
+
        camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
 
        return success;
@@ -118,7 +133,9 @@ nntp_folder_sync_offline (CamelFolder *folder, CamelException *ex)
        gboolean success;
 
        camel_service_lock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
+
        success = camel_folder_summary_save_to_db (folder->summary, ex);
+
        camel_service_unlock (CAMEL_SERVICE (folder->parent_store), CS_REC_CONNECT_LOCK);
 
        return success;
@@ -161,7 +178,7 @@ nntp_folder_download_message (CamelNNTPFolder *nntp_folder, const gchar *id, con
                        if (camel_stream_reset (stream) == -1)
                                goto fail;
                } else {
-                       stream = camel_object_ref (nntp_store->stream);
+                       stream = g_object_ref (nntp_store->stream);
                }
        } else if (ret == 423 || ret == 430) {
                camel_exception_setv (
@@ -215,7 +232,7 @@ nntp_folder_cache_message (CamelDiscoFolder *disco_folder,
        stream = nntp_folder_download_message (
                (CamelNNTPFolder *) disco_folder, article, msgid, ex);
        if (stream)
-               camel_object_unref (stream);
+               g_object_unref (stream);
        else
                success = FALSE;
 
@@ -276,11 +293,11 @@ nntp_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException *
                                ex, CAMEL_EXCEPTION_SYSTEM,
                                _("Cannot get message %s: %s"), uid,
                                g_strerror (errno));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
        }
 
-       camel_object_unref (stream);
+       g_object_unref (stream);
 fail:
        if (camel_folder_change_info_changed (nntp_folder->changes)) {
                changes = nntp_folder->changes;
@@ -414,7 +431,7 @@ nntp_folder_append_message_online (CamelFolder *folder,
        filtered_stream = camel_stream_filter_new (stream);
        camel_stream_filter_add (
                CAMEL_STREAM_FILTER (filtered_stream), crlffilter);
-       camel_object_unref (crlffilter);
+       g_object_unref (crlffilter);
 
        /* remove mail 'To', 'CC', and 'BCC' headers */
        savedhdrs = NULL;
@@ -457,7 +474,7 @@ nntp_folder_append_message_online (CamelFolder *folder,
                success = FALSE;
        }
 
-       camel_object_unref (filtered_stream);
+       g_object_unref (filtered_stream);
        g_free(group);
        header->next = savedhdrs;
 
@@ -501,11 +518,15 @@ nntp_folder_transfer_message (CamelFolder *source,
 static void
 camel_nntp_folder_class_init (CamelNNTPFolderClass *class)
 {
+       GObjectClass *object_class;
        CamelFolderClass *folder_class;
        CamelDiscoFolderClass *disco_folder_class;
 
-       parent_class = CAMEL_DISCO_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_disco_folder_get_type ()));
-       folder_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelNNTPFolderPrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = nntp_folder_dispose;
+       object_class->finalize = nntp_folder_finalize;
 
        folder_class = CAMEL_FOLDER_CLASS (class);
        folder_class->get_message = nntp_folder_get_message;
@@ -532,31 +553,13 @@ camel_nntp_folder_class_init (CamelNNTPFolderClass *class)
 static void
 camel_nntp_folder_init (CamelNNTPFolder *nntp_folder)
 {
-       nntp_folder->priv = g_new0 (CamelNNTPFolderPrivate, 1);
+       nntp_folder->priv = CAMEL_NNTP_FOLDER_GET_PRIVATE (nntp_folder);
 
        nntp_folder->changes = camel_folder_change_info_new ();
        nntp_folder->priv->search_lock = g_mutex_new ();
        nntp_folder->priv->cache_lock = g_mutex_new ();
 }
 
-CamelType
-camel_nntp_folder_get_type (void)
-{
-       static CamelType camel_nntp_folder_type = CAMEL_INVALID_TYPE;
-
-       if (camel_nntp_folder_type == CAMEL_INVALID_TYPE)       {
-               camel_nntp_folder_type = camel_type_register (CAMEL_DISCO_FOLDER_TYPE, "CamelNNTPFolder",
-                                                             sizeof (CamelNNTPFolder),
-                                                             sizeof (CamelNNTPFolderClass),
-                                                             (CamelObjectClassInitFunc) camel_nntp_folder_class_init,
-                                                             NULL,
-                                                             (CamelObjectInitFunc) camel_nntp_folder_init,
-                                                             (CamelObjectFinalizeFunc) nntp_folder_finalize);
-       }
-
-       return camel_nntp_folder_type;
-}
-
 CamelFolder *
 camel_nntp_folder_new (CamelStore *parent,
                        const gchar *folder_name,
@@ -577,7 +580,7 @@ camel_nntp_folder_new (CamelStore *parent,
        /* If this doesn't work, stuff wont save, but let it continue anyway */
        g_mkdir_with_parents (root, 0700);
 
-       folder = (CamelFolder *) camel_object_new (CAMEL_NNTP_FOLDER_TYPE);
+       folder = g_object_new (CAMEL_TYPE_NNTP_FOLDER, NULL);
        nntp_folder = (CamelNNTPFolder *)folder;
 
        camel_folder_construct (folder, parent, folder_name, folder_name);
@@ -604,7 +607,7 @@ camel_nntp_folder_new (CamelStore *parent,
        }
 
        if (subscribed && !camel_folder_refresh_info (folder, ex)) {
-               camel_object_unref (folder);
+               g_object_unref (folder);
                folder = NULL;
         }
 
index 10e88e1..7eb11b8 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_NNTP_FOLDER_TYPE     (camel_nntp_folder_get_type ())
-#define CAMEL_NNTP_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolder))
-#define CAMEL_NNTP_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolderClass))
-#define CAMEL_IS_NNTP_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_NNTP_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_FOLDER \
+       (camel_nntp_folder_get_type ())
+#define CAMEL_NNTP_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_FOLDER, CamelNNTPFolder))
+#define CAMEL_NNTP_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_FOLDER, CamelNNTPFolderClass))
+#define CAMEL_IS_NNTP_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_FOLDER))
+#define CAMEL_IS_NNTP_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_FOLDER))
+#define CAMEL_NNTP_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NNTP_FOLDER, CamelNNTPFolderClass))
 
 G_BEGIN_DECLS
 
@@ -52,7 +66,7 @@ struct _CamelNNTPFolderClass {
        CamelDiscoFolderClass parent;
 };
 
-CamelType camel_nntp_folder_get_type (void);
+GType camel_nntp_folder_get_type (void);
 
 CamelFolder *camel_nntp_folder_new (CamelStore *parent, const gchar *folder_name, CamelException *ex);
 
index 781da0a..a5cf6d7 100644 (file)
@@ -49,15 +49,13 @@ static void          store_info_free(CamelStoreSummary *, CamelStoreInfo *);
 static const gchar *store_info_string(CamelStoreSummary *, const CamelStoreInfo *, gint);
 static void store_info_set_string(CamelStoreSummary *, CamelStoreInfo *, int, const gchar *);
 
-static gpointer camel_nntp_store_summary_parent_class;
+G_DEFINE_TYPE (CamelNNTPStoreSummary, camel_nntp_store_summary, CAMEL_TYPE_STORE_SUMMARY)
 
 static void
 camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *class)
 {
        CamelStoreSummaryClass *store_summary_class;
 
-       camel_nntp_store_summary_parent_class = CAMEL_STORE_SUMMARY_CLASS (camel_type_get_global_classfuncs (camel_store_summary_get_type ()));
-
        store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
        store_summary_class->summary_header_load = summary_header_load;
        store_summary_class->summary_header_save = summary_header_save;
@@ -83,25 +81,6 @@ camel_nntp_store_summary_init (CamelNNTPStoreSummary *nntp_store_summary)
                sizeof (nntp_store_summary->last_newslist));
 }
 
-CamelType
-camel_nntp_store_summary_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_store_summary_get_type (),
-                                          "CamelNNTPStoreSummary",
-                                          sizeof (CamelNNTPStoreSummary),
-                                          sizeof (CamelNNTPStoreSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_nntp_store_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_nntp_store_summary_init,
-                                          (CamelObjectFinalizeFunc) NULL);
-       }
-
-       return type;
-}
-
 /**
  * camel_nntp_store_summary_new:
  *
@@ -112,7 +91,7 @@ camel_nntp_store_summary_get_type (void)
 CamelNNTPStoreSummary *
 camel_nntp_store_summary_new (void)
 {
-       return (CamelNNTPStoreSummary *) camel_object_new (camel_nntp_store_summary_get_type ());
+       return g_object_new (CAMEL_TYPE_NNTP_STORE_SUMMARY, NULL);
 }
 
 /**
index 8ba6400..a9858c3 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_NNTP_STORE_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_nntp_store_summary_get_type (), CamelNNTPStoreSummary)
-#define CAMEL_NNTP_STORE_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_nntp_store_summary_get_type (), CamelNNTPStoreSummaryClass)
-#define CAMEL_IS_NNTP_STORE_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_nntp_store_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_STORE_SUMMARY \
+       (camel_nntp_store_summary_get_type ())
+#define CAMEL_NNTP_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_STORE_SUMMARY, CamelNNTPStoreSummary))
+#define CAMEL_NNTP_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_STORE_SUMMARY, CamelNNTPStoreSummaryClass))
+#define CAMEL_IS_NNTP_STORE_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_STORE_SUMMARY))
+#define CAMEL_IS_NNTP_STORE_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_STORE_SUMMARY))
+#define CAMEL_NNTP_STORE_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NNTP_STORE_SUMMARY, CamelNNTPStoreSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -65,7 +80,7 @@ struct _CamelNNTPStoreSummaryClass {
        CamelStoreSummaryClass summary_class;
 };
 
-CamelType                       camel_nntp_store_summary_get_type      (void);
+GType                   camel_nntp_store_summary_get_type      (void);
 CamelNNTPStoreSummary      *camel_nntp_store_summary_new       (void);
 
 /* TODO: this api needs some more work, needs to support lists */
index aebfc26..0745af2 100644 (file)
 
 #define DUMP_EXTENSIONS
 
-static gpointer camel_nntp_store_parent_class;
+#define CAMEL_NNTP_STORE_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_NNTP_STORE, CamelNNTPStorePrivate))
 
 static gint camel_nntp_try_authenticate (CamelNNTPStore *store, CamelException *ex);
 
+G_DEFINE_TYPE (CamelNNTPStore, camel_nntp_store, CAMEL_TYPE_DISCO_STORE)
+
 static void
-nntp_store_finalize (CamelObject *object)
+nntp_store_dispose (GObject *object)
 {
-       /* call base finalize */
        CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (object);
-       CamelDiscoStore *disco_store = (CamelDiscoStore *) nntp_store;
-       struct _CamelNNTPStorePrivate *p = nntp_store->priv;
-       struct _xover_header *xover, *xn;
+       CamelDiscoStore *disco_store = CAMEL_DISCO_STORE (object);
 
-       camel_service_disconnect ((CamelService *)object, TRUE, NULL);
+       /* Only run this the first time. */
+       if (nntp_store->summary != NULL)
+               camel_service_disconnect (CAMEL_SERVICE (object), TRUE, NULL);
 
-       if (nntp_store->summary) {
-               camel_store_summary_save ((CamelStoreSummary *) nntp_store->summary);
-               camel_object_unref (nntp_store->summary);
+       if (nntp_store->summary != NULL) {
+               camel_store_summary_save (
+                       CAMEL_STORE_SUMMARY (nntp_store->summary));
+               g_object_unref (nntp_store->summary);
+               nntp_store->summary = NULL;
+       }
+
+       if (nntp_store->mem != NULL) {
+               g_object_unref (nntp_store->mem);
+               nntp_store->mem = NULL;
+       }
+
+       if (nntp_store->stream != NULL) {
+               g_object_unref (nntp_store->stream);
+               nntp_store->stream = NULL;
        }
 
-       camel_object_unref (nntp_store->mem);
-       nntp_store->mem = NULL;
-       if (nntp_store->stream)
-               camel_object_unref (nntp_store->stream);
+       if (nntp_store->cache != NULL) {
+               g_object_unref (nntp_store->cache);
+               nntp_store->cache = NULL;
+       }
+
+       if (disco_store->diary != NULL) {
+               g_object_unref (disco_store->diary);
+               disco_store->diary = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_nntp_store_parent_class)->dispose (object);
+}
+
+static void
+nntp_store_finalize (GObject *object)
+{
+       CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (object);
+       struct _xover_header *xover, *xn;
 
-       if (nntp_store->base_url)
-               g_free (nntp_store->base_url);
-       if (nntp_store->storage_path)
-               g_free (nntp_store->storage_path);
+       g_free (nntp_store->base_url);
+       g_free (nntp_store->storage_path);
 
        xover = nntp_store->xover;
        while (xover) {
@@ -91,15 +119,8 @@ nntp_store_finalize (CamelObject *object)
                xover = xn;
        }
 
-       if (nntp_store->cache)
-               camel_object_unref (nntp_store->cache);
-
-       if (disco_store->diary) {
-               camel_object_unref (disco_store->diary);
-               disco_store->diary = NULL;
-       }
-
-       g_free(p);
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_nntp_store_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -224,13 +245,13 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
                                ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
                                _("Could not connect to %s: %s"),
                                service->url->host, g_strerror (errno));
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
 
                goto fail;
        }
 
        store->stream = (CamelNNTPStream *) camel_nntp_stream_new (tcp_stream);
-       camel_object_unref (tcp_stream);
+       g_object_unref (tcp_stream);
 
        /* Read the greeting, if any. */
        if (camel_nntp_stream_line (store->stream, &buf, &len) == -1) {
@@ -242,7 +263,7 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
                                              _("Could not read greeting from %s: %s"),
                                              service->url->host, g_strerror (errno));
 
-               camel_object_unref (store->stream);
+               g_object_unref (store->stream);
                store->stream = NULL;
 
                goto fail;
@@ -254,7 +275,7 @@ connect_to_server (CamelService *service, struct addrinfo *ai, gint ssl_mode, Ca
                                      _("NNTP server %s returned error code %d: %s"),
                                      service->url->host, len, buf);
 
-               camel_object_unref (store->stream);
+               g_object_unref (store->stream);
                store->stream = NULL;
 
                goto fail;
@@ -399,13 +420,12 @@ nntp_disconnect_online (CamelService *service, gboolean clean, CamelException *e
                camel_exception_clear(ex);
        }
 
-       /* Chain up to parent's disconnect() method. */
        if (!service_class->disconnect (service, clean, ex)) {
                camel_service_unlock (CAMEL_SERVICE (store), CS_REC_CONNECT_LOCK);
                return FALSE;
        }
 
-       camel_object_unref (store->stream);
+       g_object_unref (store->stream);
        store->stream = NULL;
        g_free(store->current_folder);
        store->current_folder = NULL;
@@ -427,7 +447,7 @@ nntp_disconnect_offline (CamelService *service, gboolean clean, CamelException *
                return FALSE;
 
        if (disco->diary) {
-               camel_object_unref (disco->diary);
+               g_object_unref (disco->diary);
                disco->diary = NULL;
        }
 
@@ -658,7 +678,7 @@ nntp_store_get_subscribed_folder_info (CamelNNTPStore *store, const gchar *top,
                                                camel_object_trigger_event((CamelObject *) folder, "folder_changed", changes);
                                                camel_folder_change_info_free(changes);
                                        }
-                                       camel_object_unref (folder);
+                                       g_object_unref (folder);
                                }
                                camel_exception_clear(ex);
                        }
@@ -1111,11 +1131,16 @@ nntp_construct (CamelService *service, CamelSession *session,
 static void
 camel_nntp_store_class_init (CamelNNTPStoreClass *class)
 {
+       GObjectClass *object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
        CamelDiscoStoreClass *disco_store_class;
 
-       camel_nntp_store_parent_class = CAMEL_DISCO_STORE_CLASS (camel_type_get_global_classfuncs (camel_disco_store_get_type ()));
+       g_type_class_add_private (class, sizeof (CamelNNTPStorePrivate));
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = nntp_store_dispose;
+       object_class->finalize = nntp_store_finalize;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->construct = nntp_construct;
@@ -1155,27 +1180,7 @@ camel_nntp_store_init (CamelNNTPStore *nntp_store)
 
        nntp_store->mem = (CamelStreamMem *)camel_stream_mem_new();
 
-       nntp_store->priv = g_new0 (CamelNNTPStorePrivate, 1);
-}
-
-CamelType
-camel_nntp_store_get_type (void)
-{
-       static CamelType camel_nntp_store_type = CAMEL_INVALID_TYPE;
-
-       if (camel_nntp_store_type == CAMEL_INVALID_TYPE) {
-               camel_nntp_store_type =
-                       camel_type_register (CAMEL_DISCO_STORE_TYPE,
-                                            "CamelNNTPStore",
-                                            sizeof (CamelNNTPStore),
-                                            sizeof (CamelNNTPStoreClass),
-                                            (CamelObjectClassInitFunc) camel_nntp_store_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) camel_nntp_store_init,
-                                            (CamelObjectFinalizeFunc) nntp_store_finalize);
-       }
-
-       return camel_nntp_store_type;
+       nntp_store->priv = CAMEL_NNTP_STORE_GET_PRIVATE (nntp_store);
 }
 
 static gint
index 49c23a1..1a07a95 100644 (file)
 #include "camel-nntp-stream.h"
 #include "camel-nntp-store-summary.h"
 
-#define CAMEL_NNTP_STORE_TYPE     (camel_nntp_store_get_type ())
-#define CAMEL_NNTP_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_NNTP_STORE_TYPE, CamelNNTPStore))
-#define CAMEL_NNTP_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_NNTP_STORE_TYPE, CamelNNTPStoreClass))
-#define CAMEL_IS_NNTP_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_NNTP_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_STORE \
+       (camel_nntp_store_get_type ())
+#define CAMEL_NNTP_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_STORE, CamelNNTPStore))
+#define CAMEL_NNTP_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_STORE, CamelNNTPStoreClass))
+#define CAMEL_IS_NNTP_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_STORE))
+#define CAMEL_IS_NNTP_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_STORE))
+#define CAMEL_NNTP_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NNTP_STORE, CamelNNTPStoreClass))
 
 #define CAMEL_NNTP_EXT_SEARCH     (1<<0)
 #define CAMEL_NNTP_EXT_SETGET     (1<<1)
@@ -93,7 +107,7 @@ struct _CamelNNTPStoreClass {
 
 };
 
-CamelType camel_nntp_store_get_type (void);
+GType camel_nntp_store_get_type (void);
 
 gint camel_nntp_raw_commandv (CamelNNTPStore *store, struct _CamelException *ex, gchar **line, const gchar *fmt, va_list ap);
 gint camel_nntp_raw_command(CamelNNTPStore *store, struct _CamelException *ex, gchar **line, const gchar *fmt, ...);
index da0d56d..c90ecf8 100644 (file)
 
 #include "camel-nntp-stream.h"
 
-#define dd(x) (camel_debug("nntp:stream")?(x):0)
+#define dd(x) (camel_debug ("nntp:stream")?(x):0)
 
 #ifndef ECONNRESET
 #define ECONNRESET EIO
 #endif
 
-static CamelObjectClass *parent_class = NULL;
-
 #define CAMEL_NNTP_STREAM_SIZE (4096)
 #define CAMEL_NNTP_STREAM_LINE_SIZE (1024) /* maximum line size */
 
+G_DEFINE_TYPE (CamelNNTPStream, camel_nntp_stream, CAMEL_TYPE_STREAM)
+
+static void
+nntp_stream_dispose (GObject *object)
+{
+       CamelNNTPStream *stream = CAMEL_NNTP_STREAM (object);
+
+       if (stream->source != NULL) {
+               g_object_unref (stream->source);
+               stream->source = NULL;
+       }
+
+       /* Chain up to parent's dispose () method. */
+       G_OBJECT_CLASS (camel_nntp_stream_parent_class)->dispose (object);
+}
+
+static void
+nntp_stream_finalize (GObject *object)
+{
+       CamelNNTPStream *stream = CAMEL_NNTP_STREAM (object);
+
+       g_free (stream->buf);
+       g_free (stream->linebuf);
+
+       /* Chain up to parent's finalize () method. */
+       G_OBJECT_CLASS (camel_nntp_stream_parent_class)->finalize (object);
+}
+
 static gint
 nntp_stream_fill (CamelNNTPStream *is)
 {
@@ -67,16 +93,6 @@ nntp_stream_fill (CamelNNTPStream *is)
        return 0;
 }
 
-static void
-camel_nntp_stream_finalize(CamelNNTPStream *is)
-{
-       g_free (is->buf);
-       g_free (is->linebuf);
-       if (is->source)
-               camel_object_unref (is->source);
-}
-
-
 static gssize
 nntp_stream_read (CamelStream *stream,
                   gchar *buffer,
@@ -191,11 +207,14 @@ nntp_stream_reset (CamelStream *stream)
 }
 
 static void
-camel_nntp_stream_class_init (CamelStreamClass *class)
+camel_nntp_stream_class_init (CamelNNTPStreamClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = nntp_stream_dispose;
+       object_class->finalize = nntp_stream_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = nntp_stream_read;
@@ -221,25 +240,6 @@ camel_nntp_stream_init (CamelNNTPStream *is)
        is->mode = CAMEL_NNTP_STREAM_LINE;
 }
 
-CamelType
-camel_nntp_stream_get_type (void)
-{
-       static CamelType camel_nntp_stream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_nntp_stream_type == CAMEL_INVALID_TYPE) {
-               camel_nntp_stream_type = camel_type_register( camel_stream_get_type(),
-                                                           "CamelNNTPStream",
-                                                           sizeof( CamelNNTPStream ),
-                                                           sizeof( CamelNNTPStreamClass ),
-                                                           (CamelObjectClassInitFunc) camel_nntp_stream_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_nntp_stream_init,
-                                                           (CamelObjectFinalizeFunc) camel_nntp_stream_finalize );
-       }
-
-       return camel_nntp_stream_type;
-}
-
 /**
  * camel_nntp_stream_new:
  *
@@ -253,8 +253,8 @@ camel_nntp_stream_new (CamelStream *source)
 {
        CamelNNTPStream *is;
 
-       is = (CamelNNTPStream *)camel_object_new(camel_nntp_stream_get_type ());
-       is->source = camel_object_ref (source);
+       is = g_object_new (CAMEL_TYPE_NNTP_STREAM, NULL);
+       is->source = g_object_ref (source);
 
        return (CamelStream *)is;
 }
index bd5e7a6..f4375d4 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_NNTP_STREAM(obj)         CAMEL_CHECK_CAST (obj, camel_nntp_stream_get_type (), CamelNNTPStream)
-#define CAMEL_NNTP_STREAM_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_nntp_stream_get_type (), CamelNNTPStreamClass)
-#define CAMEL_IS_NNTP_STREAM(obj)      CAMEL_CHECK_TYPE (obj, camel_nntp_stream_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_STREAM \
+       (camel_nntp_stream_get_type ())
+#define CAMEL_NNTP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_STREAM, CamelNNTPStream))
+#define CAMEL_NNTP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_STREAM, CamelNNTPStreamClass))
+#define CAMEL_IS_NNTP_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_STREAM))
+#define CAMEL_IS_NNTP_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_STREAM))
+#define CAMEL_NNTP_STREAM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NNTP_STREAM, CamelNNTPStreamClass))
 
 G_BEGIN_DECLS
 
@@ -54,7 +69,7 @@ struct _CamelNNTPStreamClass {
        CamelStreamClass parent_class;
 };
 
-CamelType      camel_nntp_stream_get_type      (void);
+GType          camel_nntp_stream_get_type      (void);
 
 CamelStream *  camel_nntp_stream_new           (CamelStream *source);
 
index be3a060..03853fe 100644 (file)
 #define EXTRACT_FIRST_DIGIT(val) val=strtoul (part, &part, 10);
 #define EXTRACT_DIGIT(val) part++; val=strtoul (part, &part, 10);
 
+#define CAMEL_NNTP_SUMMARY_GET_PRIVATE(obj) \
+       (G_TYPE_INSTANCE_GET_PRIVATE \
+       ((obj), CAMEL_TYPE_NNTP_SUMMARY, CamelNNTPSummaryPrivate))
+
 struct _CamelNNTPSummaryPrivate {
        gchar *uid;
 
@@ -62,20 +66,14 @@ static gint summary_header_save (CamelFolderSummary *, FILE *);
 static gint summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir);
 static CamelFIRecord * summary_header_to_db (CamelFolderSummary *s, CamelException *ex);
 
-static gpointer camel_nntp_summary_parent_class;
-
-static void
-nntp_summary_finalize (CamelNNTPSummary *nntp_summary)
-{
-       g_free (nntp_summary->priv);
-}
+G_DEFINE_TYPE (CamelNNTPSummary, camel_nntp_summary, CAMEL_TYPE_FOLDER_SUMMARY)
 
 static void
 camel_nntp_summary_class_init (CamelNNTPSummaryClass *class)
 {
        CamelFolderSummaryClass *folder_summary_class;
 
-       camel_nntp_summary_parent_class = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
+       g_type_class_add_private (class, sizeof (CamelNNTPSummaryPrivate));
 
        folder_summary_class = CAMEL_FOLDER_SUMMARY_CLASS (class);
        folder_summary_class->message_info_size = sizeof (CamelMessageInfoBase);
@@ -92,36 +90,18 @@ camel_nntp_summary_init (CamelNNTPSummary *nntp_summary)
 {
        CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY (nntp_summary);
 
-       nntp_summary->priv = g_new0 (CamelNNTPSummaryPrivate, 1);
+       nntp_summary->priv = CAMEL_NNTP_SUMMARY_GET_PRIVATE (nntp_summary);
 
        /* and a unique file version */
        summary->version += CAMEL_NNTP_SUMMARY_VERSION;
 }
 
-CamelType
-camel_nntp_summary_get_type(void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register(camel_folder_summary_get_type(), "CamelNNTPSummary",
-                                          sizeof (CamelNNTPSummary),
-                                          sizeof (CamelNNTPSummaryClass),
-                                          (CamelObjectClassInitFunc) camel_nntp_summary_class_init,
-                                          NULL,
-                                          (CamelObjectInitFunc) camel_nntp_summary_init,
-                                          (CamelObjectFinalizeFunc) nntp_summary_finalize);
-       }
-
-       return type;
-}
-
 CamelNNTPSummary *
 camel_nntp_summary_new (CamelFolder *folder, const gchar *path)
 {
        CamelNNTPSummary *cns;
 
-       cns = (CamelNNTPSummary *)camel_object_new(camel_nntp_summary_get_type());
+       cns = g_object_new (CAMEL_TYPE_NNTP_SUMMARY, NULL);
        ((CamelFolderSummary *)cns)->folder = folder;
 
        camel_folder_summary_set_filename ((CamelFolderSummary *)cns, path);
@@ -424,7 +404,7 @@ ioerror:
                g_free (cns->priv->uid);
                cns->priv->uid = NULL;
        }
-       camel_object_unref (mp);
+       g_object_unref (mp);
 
        camel_operation_end (NULL);
 
index 5087bb9..b69c735 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_NNTP_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_nntp_summary_get_type (), CamelNNTPSummary)
-#define CAMEL_NNTP_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_nntp_summary_get_type (), CamelNNTPSummaryClass)
-#define CAMEL_IS_LOCAL_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_nntp_summary_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_NNTP_SUMMARY \
+       (camel_nntp_summary_get_type ())
+#define CAMEL_NNTP_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_NNTP_SUMMARY, CamelNNTPSummary))
+#define CAMEL_NNTP_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_NNTP_SUMMARY, CamelNNTPSummaryClass))
+#define CAMEL_IS_NNTP_SUMMARY(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_NNTP_SUMMARY))
+#define CAMEL_IS_NNTP_SUMMARY_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_NNTP_SUMMARY))
+#define CAMEL_NNTP_SUMMARY_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_NNTP_SUMMARY, CamelNNTPSummaryClass))
 
 G_BEGIN_DECLS
 
@@ -49,7 +64,7 @@ struct _CamelNNTPSummaryClass {
        CamelFolderSummaryClass parent_class;
 };
 
-CamelType      camel_nntp_summary_get_type     (void);
+GType  camel_nntp_summary_get_type     (void);
 CamelNNTPSummary *camel_nntp_summary_new(struct _CamelFolder *folder, const gchar *path);
 
 gint camel_nntp_summary_check(CamelNNTPSummary *cns, struct _CamelNNTPStore *store, gchar *line, struct _CamelFolderChangeInfo *changes, struct _CamelException *ex);
index 631528b..408887c 100644 (file)
@@ -45,24 +45,44 @@ extern gint camel_verbose_debug;
 
 static void get_capabilities(CamelPOP3Engine *pe);
 
-static CamelObjectClass *parent_class = NULL;
+G_DEFINE_TYPE (CamelPOP3Engine, camel_pop3_engine, CAMEL_TYPE_OBJECT)
 
 static void
-pop3_engine_finalize (CamelPOP3Engine *engine)
+pop3_engine_dispose (GObject *object)
 {
-       /* FIXME: Also flush/free any outstanding requests, etc */
+       CamelPOP3Engine *engine = CAMEL_POP3_ENGINE (object);
+
+       if (engine->stream != NULL) {
+               g_object_unref (engine->stream);
+               engine->stream = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_pop3_engine_parent_class)->dispose (object);
+}
+
+static void
+pop3_engine_finalize (GObject *object)
+{
+       CamelPOP3Engine *engine = CAMEL_POP3_ENGINE (object);
 
-       if (engine->stream)
-               camel_object_unref (engine->stream);
+       /* FIXME: Also flush/free any outstanding requests, etc */
 
        g_list_free (engine->auth);
        g_free (engine->apop);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_pop3_engine_parent_class)->finalize (object);
 }
 
 static void
 camel_pop3_engine_class_init (CamelPOP3EngineClass *class)
 {
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = pop3_engine_dispose;
+       object_class->finalize = pop3_engine_finalize;
 }
 
 static void
@@ -74,25 +94,6 @@ camel_pop3_engine_init (CamelPOP3Engine *engine)
        engine->state = CAMEL_POP3_ENGINE_DISCONNECT;
 }
 
-CamelType
-camel_pop3_engine_get_type (void)
-{
-       static CamelType camel_pop3_engine_type = CAMEL_INVALID_TYPE;
-
-       if (camel_pop3_engine_type == CAMEL_INVALID_TYPE) {
-               camel_pop3_engine_type = camel_type_register(camel_object_get_type(),
-                                                            "CamelPOP3Engine",
-                                                            sizeof( CamelPOP3Engine ),
-                                                            sizeof( CamelPOP3EngineClass ),
-                                                            (CamelObjectClassInitFunc) camel_pop3_engine_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_pop3_engine_init,
-                                                            (CamelObjectFinalizeFunc) pop3_engine_finalize );
-       }
-
-       return camel_pop3_engine_type;
-}
-
 static gint
 read_greeting (CamelPOP3Engine *pe)
 {
@@ -132,14 +133,14 @@ camel_pop3_engine_new(CamelStream *source, guint32 flags)
 {
        CamelPOP3Engine *pe;
 
-       pe = (CamelPOP3Engine *) camel_object_new(camel_pop3_engine_get_type ());
+       pe = g_object_new (CAMEL_TYPE_POP3_ENGINE, NULL);
 
        pe->stream = (CamelPOP3Stream *)camel_pop3_stream_new(source);
        pe->state = CAMEL_POP3_ENGINE_AUTH;
        pe->flags = flags;
 
        if (read_greeting (pe) == -1) {
-               camel_object_unref (pe);
+               g_object_unref (pe);
                return NULL;
        }
 
index 74cb476..89dbaf6 100644 (file)
 
 #include "camel-pop3-stream.h"
 
-#define CAMEL_POP3_ENGINE(obj)         CAMEL_CHECK_CAST (obj, camel_pop3_engine_get_type (), CamelPOP3Engine)
-#define CAMEL_POP3_ENGINE_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_pop3_engine_get_type (), CamelPOP3EngineClass)
-#define CAMEL_IS_POP3_ENGINE(obj)      CAMEL_CHECK_TYPE (obj, camel_pop3_engine_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_POP3_ENGINE \
+       (camel_pop3_engine_get_type ())
+#define CAMEL_POP3_ENGINE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_POP3_ENGINE, CamelPOP3Engine))
+#define CAMEL_POP3_ENGINE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_POP3_ENGINE, CamelPOP3EngineClass))
+#define CAMEL_IS_POP3_ENGINE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_POP3_ENGINE))
+#define CAMEL_IS_POP3_ENGINE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_POP3_ENGINE))
+#define CAMEL_POP3_ENGINE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_POP3_ENGINE, CamelPOP3EngineClass))
 
 G_BEGIN_DECLS
 
@@ -121,7 +136,7 @@ struct _CamelPOP3EngineClass {
        CamelObjectClass parent_class;
 };
 
-CamelType                camel_pop3_engine_get_type    (void);
+GType            camel_pop3_engine_get_type    (void);
 
 CamelPOP3Engine  *camel_pop3_engine_new                (CamelStream *source, guint32 flags);
 
index d774a75..42c7e4b 100644 (file)
@@ -38,8 +38,6 @@
 
 #define d(x)
 
-static CamelFolderClass *parent_class;
-
 static gboolean pop3_refresh_info (CamelFolder *folder, CamelException *ex);
 static gboolean pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
 static gint pop3_get_message_count (CamelFolder *folder);
@@ -48,8 +46,10 @@ static CamelMimeMessage *pop3_get_message (CamelFolder *folder, const gchar *uid
 static gboolean pop3_set_message_flags (CamelFolder *folder, const gchar *uid, guint32 flags, guint32 set);
 static gchar * pop3_get_filename (CamelFolder *folder, const gchar *uid, CamelException *ex);
 
+G_DEFINE_TYPE (CamelPOP3Folder, camel_pop3_folder, CAMEL_TYPE_FOLDER)
+
 static void
-pop3_folder_finalize (CamelObject *object)
+pop3_folder_finalize (GObject *object)
 {
        CamelPOP3Folder *pop3_folder = CAMEL_POP3_FOLDER (object);
        CamelPOP3FolderInfo **fi = (CamelPOP3FolderInfo **)pop3_folder->uids->pdata;
@@ -71,14 +71,19 @@ pop3_folder_finalize (CamelObject *object)
                g_ptr_array_free(pop3_folder->uids, TRUE);
                g_hash_table_destroy(pop3_folder->uids_uid);
        }
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_pop3_folder_parent_class)->finalize (object);
 }
 
 static void
 camel_pop3_folder_class_init (CamelPOP3FolderClass *class)
 {
+       GObjectClass *object_class;
        CamelFolderClass *folder_class;
 
-       parent_class = CAMEL_FOLDER_CLASS(camel_folder_get_type());
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = pop3_folder_finalize;
 
        folder_class = CAMEL_FOLDER_CLASS (class);
        folder_class->refresh_info = pop3_refresh_info;
@@ -91,22 +96,9 @@ camel_pop3_folder_class_init (CamelPOP3FolderClass *class)
        folder_class->set_message_flags = pop3_set_message_flags;
 }
 
-CamelType
-camel_pop3_folder_get_type (void)
+static void
+camel_pop3_folder_init (CamelPOP3Folder *pop3_folder)
 {
-       static CamelType camel_pop3_folder_type = CAMEL_INVALID_TYPE;
-
-       if (!camel_pop3_folder_type) {
-               camel_pop3_folder_type = camel_type_register (CAMEL_FOLDER_TYPE, "CamelPOP3Folder",
-                                                             sizeof (CamelPOP3Folder),
-                                                             sizeof (CamelPOP3FolderClass),
-                                                             (CamelObjectClassInitFunc) camel_pop3_folder_class_init,
-                                                             NULL,
-                                                             NULL,
-                                                             (CamelObjectFinalizeFunc) pop3_folder_finalize);
-       }
-
-       return camel_pop3_folder_type;
 }
 
 CamelFolder *
@@ -116,12 +108,12 @@ camel_pop3_folder_new (CamelStore *parent, CamelException *ex)
 
        d(printf("opening pop3 INBOX folder\n"));
 
-       folder = CAMEL_FOLDER (camel_object_new (CAMEL_POP3_FOLDER_TYPE));
+       folder = g_object_new (CAMEL_TYPE_POP3_FOLDER, NULL);
        camel_folder_construct (folder, parent, "inbox", "inbox");
 
        /* mt-ok, since we dont have the folder-lock for new() */
        if (!camel_folder_refresh_info (folder, ex)) { /* mt-ok */
-               camel_object_unref (folder);
+               g_object_unref (folder);
                folder = NULL;
        }
 
@@ -165,7 +157,7 @@ cmd_builduid(CamelPOP3Engine *pe, CamelPOP3Stream *stream, gpointer data)
        default:
                break;
        }
-       camel_object_unref (mp);
+       g_object_unref (mp);
        g_checksum_get_digest (checksum, digest, &length);
        g_checksum_free (checksum);
 
@@ -385,7 +377,7 @@ pop3_get_message_time_from_cache (CamelFolder *folder, const gchar *uid, time_t
                message = camel_mime_message_new ();
                if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *)message, stream) == -1) {
                        g_warning (_("Cannot get message %s: %s"), uid, g_strerror (errno));
-                       camel_object_unref (message);
+                       g_object_unref (message);
                        message = NULL;
                }
 
@@ -393,12 +385,12 @@ pop3_get_message_time_from_cache (CamelFolder *folder, const gchar *uid, time_t
                        res = TRUE;
                        *message_time = message->date + message->date_offset;
 
-                       camel_object_unref (message);
+                       g_object_unref (message);
                }
        }
 
        if (stream) {
-               camel_object_unref (stream);
+               g_object_unref (stream);
        }
        return res;
 }
@@ -429,7 +421,7 @@ camel_pop3_delete_old (CamelFolder *folder,
                        message = pop3_get_message (folder, fi->uid, ex);
                        if (message) {
                                message_time = message->date + message->date_offset;
-                               camel_object_unref (message);
+                               g_object_unref (message);
                        }
                }
 
@@ -523,7 +515,7 @@ done:
                fi->err = 0;
        }
 
-       camel_object_unref (fi->stream);
+       g_object_unref (fi->stream);
        fi->stream = NULL;
 }
 
@@ -611,7 +603,7 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
                        stream = camel_stream_mem_new();
 
                /* ref it, the cache storage routine unref's when done */
-               fi->stream = camel_object_ref (stream);
+               fi->stream = g_object_ref (stream);
                fi->err = EIO;
                pcr = camel_pop3_engine_command_new(pop3_store->engine, CAMEL_POP3_COMMAND_MULTI, cmd_tocache, fi, "RETR %u\r\n", fi->id);
 
@@ -680,11 +672,11 @@ pop3_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
                                ex, CAMEL_EXCEPTION_SYSTEM,
                                _("Cannot get message %s: %s"),
                                uid, g_strerror (errno));
-               camel_object_unref (message);
+               g_object_unref (message);
                message = NULL;
        }
 done:
-       camel_object_unref (stream);
+       g_object_unref (stream);
 fail:
        camel_operation_end(NULL);
 
index 08da313..e40fe76 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_POP3_FOLDER_TYPE     (camel_pop3_folder_get_type ())
-#define CAMEL_POP3_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_POP3_FOLDER_TYPE, CamelPOP3Folder))
-#define CAMEL_POP3_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_POP3_FOLDER_TYPE, CamelPOP3FolderClass))
-#define CAMEL_IS_POP3_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_POP3_FOLDER_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_POP3_FOLDER \
+       (camel_pop3_folder_get_type ())
+#define CAMEL_POP3_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_POP3_FOLDER, CamelPOP3Folder))
+#define CAMEL_POP3_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_POP3_FOLDER, CamelPOP3FolderClass))
+#define CAMEL_IS_POP3_FOLDER(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_POP3_FOLDER))
+#define CAMEL_IS_POP3_FOLDER_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_POP3_FOLDER))
+#define CAMEL_POP3_FOLDER_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_POP3_FOLDER, CamelPOP3FolderClass))
 
 G_BEGIN_DECLS
 
@@ -65,7 +79,7 @@ struct _CamelPOP3FolderClass {
 /* public methods */
 CamelFolder *camel_pop3_folder_new (CamelStore *parent, CamelException *ex);
 
-CamelType camel_pop3_folder_get_type (void);
+GType camel_pop3_folder_get_type (void);
 
 gint camel_pop3_delete_old(CamelFolder *folder, gint days_to_delete, CamelException *ex);
 
index 4a471a4..6e31ff7 100644 (file)
@@ -65,8 +65,10 @@ static CamelFolder *get_trash  (CamelStore *store, CamelException *ex);
 
 static gboolean pop3_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex);
 
+G_DEFINE_TYPE (CamelPOP3Store, camel_pop3_store, CAMEL_TYPE_STORE)
+
 static void
-pop3_store_finalize (CamelObject *object)
+pop3_store_finalize (GObject *object)
 {
        CamelPOP3Store *pop3_store = CAMEL_POP3_STORE (object);
 
@@ -76,18 +78,23 @@ pop3_store_finalize (CamelObject *object)
        camel_service_disconnect((CamelService *)pop3_store, TRUE, NULL);
 
        if (pop3_store->engine)
-               camel_object_unref (pop3_store->engine);
+               g_object_unref (pop3_store->engine);
        if (pop3_store->cache)
-               camel_object_unref (pop3_store->cache);
+               g_object_unref (pop3_store->cache);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_pop3_store_parent_class)->finalize (object);
 }
 
 static void
 camel_pop3_store_class_init (CamelPOP3StoreClass *class)
 {
+       GObjectClass *object_class;
        CamelServiceClass *service_class;
        CamelStoreClass *store_class;
 
-       camel_pop3_store_parent_class = CAMEL_STORE_CLASS (camel_type_get_global_classfuncs (camel_store_get_type ()));
+       object_class = G_OBJECT_CLASS (class);
+       object_class->finalize = pop3_store_finalize;
 
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->query_auth_types = query_auth_types;
@@ -105,25 +112,6 @@ camel_pop3_store_init (CamelPOP3Store *pop3_store)
 {
 }
 
-CamelType
-camel_pop3_store_get_type (void)
-{
-       static CamelType camel_pop3_store_type = CAMEL_INVALID_TYPE;
-
-       if (!camel_pop3_store_type) {
-               camel_pop3_store_type = camel_type_register (CAMEL_STORE_TYPE,
-                                                            "CamelPOP3Store",
-                                                            sizeof (CamelPOP3Store),
-                                                            sizeof (CamelPOP3StoreClass),
-                                                            (CamelObjectClassInitFunc) camel_pop3_store_class_init,
-                                                            NULL,
-                                                            (CamelObjectInitFunc) camel_pop3_store_init,
-                                                            pop3_store_finalize);
-       }
-
-       return camel_pop3_store_type;
-}
-
 enum {
        MODE_CLEAR,
        MODE_SSL,
@@ -198,14 +186,14 @@ connect_to_server (CamelService *service,
                                _("Could not connect to %s: %s"),
                                service->url->host, g_strerror (errno));
 
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
 
                return FALSE;
        }
 
        /* parent class connect initialization */
        if (CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class)->connect (service, ex) == FALSE) {
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return FALSE;
        }
 
@@ -220,12 +208,12 @@ connect_to_server (CamelService *service,
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        _("Failed to read a valid greeting from POP server %s"),
                        service->url->host);
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return FALSE;
        }
 
        if (ssl_mode != MODE_TLS) {
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
                return TRUE;
        }
 
@@ -278,7 +266,7 @@ connect_to_server (CamelService *service,
        goto stls_exception;
 #endif /* HAVE_SSL */
 
-       camel_object_unref (tcp_stream);
+       g_object_unref (tcp_stream);
 
        /* rfc2595, section 4 states that after a successful STLS
           command, the client MUST discard prior CAPA responses */
@@ -295,8 +283,8 @@ connect_to_server (CamelService *service,
                camel_pop3_engine_command_free (store->engine, pc);
        }
 
-       camel_object_unref (CAMEL_OBJECT (store->engine));
-       camel_object_unref (CAMEL_OBJECT (tcp_stream));
+       g_object_unref (CAMEL_OBJECT (store->engine));
+       g_object_unref (CAMEL_OBJECT (tcp_stream));
        store->engine = NULL;
 
        return FALSE;
@@ -480,7 +468,7 @@ try_sasl (CamelPOP3Store *store,
                        goto ioerror;
 
        }
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
        return 0;
 
  ioerror:
@@ -494,7 +482,7 @@ try_sasl (CamelPOP3Store *store,
                        CAMEL_SERVICE (store)->url->host, g_strerror (errno));
        }
  done:
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
        return -1;
 }
 
@@ -727,7 +715,7 @@ pop3_disconnect (CamelService *service,
        if (!service_class->disconnect (service, clean, ex))
                return FALSE;
 
-       camel_object_unref (store->engine);
+       g_object_unref (store->engine);
        store->engine = NULL;
 
        return TRUE;
index cb0e80c..31440d3 100644 (file)
 
 #include "camel-pop3-engine.h"
 
-#define CAMEL_POP3_STORE_TYPE     (camel_pop3_store_get_type ())
-#define CAMEL_POP3_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_POP3_STORE_TYPE, CamelPOP3Store))
-#define CAMEL_POP3_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_POP3_STORE_TYPE, CamelPOP3StoreClass))
-#define CAMEL_IS_POP3_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_POP3_STORE_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_POP3_STORE \
+       (camel_pop3_store_get_type ())
+#define CAMEL_POP3_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_POP3_STORE, CamelPOP3Store))
+#define CAMEL_POP3_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_POP3_STORE, CamelPOP3StoreClass))
+#define CAMEL_IS_POP3_STORE(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_POP3_STORE))
+#define CAMEL_IS_POP3_STORE_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_POP3_STORE))
+#define CAMEL_POP3_STORE_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_POP3_STORE, CamelPOP3StoreClass))
 
 G_BEGIN_DECLS
 
@@ -54,7 +68,7 @@ struct _CamelPOP3StoreClass {
        CamelStoreClass parent_class;
 };
 
-CamelType camel_pop3_store_get_type (void);
+GType camel_pop3_store_get_type (void);
 
 /* public methods */
 void camel_pop3_store_expunge (CamelPOP3Store *store, CamelException *ex);
index 7f9ab1d..01faeee 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
-#include <glib.h>
-
 #include "camel-pop3-stream.h"
 
 extern gint camel_verbose_debug;
 #define dd(x) (camel_verbose_debug?(x):0)
 
-static CamelObjectClass *parent_class = NULL;
-
 #define CAMEL_POP3_STREAM_SIZE (4096)
 #define CAMEL_POP3_STREAM_LINE (1024) /* maximum line size */
 
+G_DEFINE_TYPE (CamelPOP3Stream, camel_pop3_stream, CAMEL_TYPE_STREAM)
+
 static void
-pop3_stream_finalize (CamelPOP3Stream *is)
+pop3_stream_dispose (GObject *object)
 {
-       g_free (is->buf);
-       g_free (is->linebuf);
-       if (is->source)
-               camel_object_unref (is->source);
+       CamelPOP3Stream *stream = CAMEL_POP3_STREAM (object);
+
+       if (stream->source != NULL) {
+               g_object_unref (stream->source);
+               stream->source = NULL;
+       }
+
+       /* Chain up to parent's dispose() method. */
+       G_OBJECT_CLASS (camel_pop3_stream_parent_class)->dispose (object);
+}
+
+static void
+pop3_stream_finalize (GObject *object)
+{
+       CamelPOP3Stream *stream = CAMEL_POP3_STREAM (object);
+
+       g_free (stream->buf);
+       g_free (stream->linebuf);
+
+       /* Chain up to parent's finalize() method. */
+       G_OBJECT_CLASS (camel_pop3_stream_parent_class)->finalize (object);
 }
 
 static gint
@@ -195,11 +210,14 @@ stream_reset (CamelStream *stream)
 }
 
 static void
-camel_pop3_stream_class_init (CamelStreamClass *class)
+camel_pop3_stream_class_init (CamelPOP3StreamClass *class)
 {
+       GObjectClass *object_class;
        CamelStreamClass *stream_class;
 
-       parent_class = camel_type_get_global_classfuncs( CAMEL_TYPE_OBJECT );
+       object_class = G_OBJECT_CLASS (class);
+       object_class->dispose = pop3_stream_dispose;
+       object_class->finalize = pop3_stream_finalize;
 
        stream_class = CAMEL_STREAM_CLASS (class);
        stream_class->read = stream_read;
@@ -225,25 +243,6 @@ camel_pop3_stream_init (CamelPOP3Stream *is)
        is->mode = CAMEL_POP3_STREAM_LINE;
 }
 
-CamelType
-camel_pop3_stream_get_type (void)
-{
-       static CamelType camel_pop3_stream_type = CAMEL_INVALID_TYPE;
-
-       if (camel_pop3_stream_type == CAMEL_INVALID_TYPE) {
-               camel_pop3_stream_type = camel_type_register( camel_stream_get_type(),
-                                                           "CamelPOP3Stream",
-                                                           sizeof( CamelPOP3Stream ),
-                                                           sizeof( CamelPOP3StreamClass ),
-                                                           (CamelObjectClassInitFunc) camel_pop3_stream_class_init,
-                                                           NULL,
-                                                           (CamelObjectInitFunc) camel_pop3_stream_init,
-                                                           (CamelObjectFinalizeFunc) pop3_stream_finalize );
-       }
-
-       return camel_pop3_stream_type;
-}
-
 /**
  * camel_pop3_stream_new:
  *
@@ -257,8 +256,8 @@ camel_pop3_stream_new (CamelStream *source)
 {
        CamelPOP3Stream *is;
 
-       is = (CamelPOP3Stream *)camel_object_new(camel_pop3_stream_get_type ());
-       is->source = camel_object_ref (source);
+       is = g_object_new (CAMEL_TYPE_POP3_STREAM, NULL);
+       is->source = g_object_ref (source);
 
        return (CamelStream *)is;
 }
index b5b287b..8aaa085 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_POP3_STREAM(obj)         CAMEL_CHECK_CAST (obj, camel_pop3_stream_get_type (), CamelPOP3Stream)
-#define CAMEL_POP3_STREAM_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_pop3_stream_get_type (), CamelPOP3StreamClass)
-#define CAMEL_IS_POP3_STREAM(obj)      CAMEL_CHECK_TYPE (obj, camel_pop3_stream_get_type ())
+/* Standard GObject macros */
+#define CAMEL_TYPE_POP3_STREAM \
+       (camel_pop3_stream_get_type ())
+#define CAMEL_POP3_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_POP3_STREAM, CamelPOP3Stream))
+#define CAMEL_POP3_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_POP3_STREAM, CamelPOP3StreamClass))
+#define CAMEL_IS_POP3_STREAM(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_POP3_STREAM))
+#define CAMEL_IS_POP3_STREAM_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_POP3_STREAM))
+#define CAMEL_POP3_STREAM_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_POP3_STREAM, CamelPOP3StreamClass))
 
 G_BEGIN_DECLS
 
@@ -57,7 +72,7 @@ struct _CamelPOP3StreamClass {
        CamelStreamClass parent_class;
 };
 
-CamelType               camel_pop3_stream_get_type     (void);
+GType           camel_pop3_stream_get_type     (void);
 
 CamelStream     *camel_pop3_stream_new         (CamelStream *source);
 
index 633ed66..28dc6c8 100644 (file)
@@ -44,6 +44,8 @@ static gboolean sendmail_send_to (CamelTransport *transport,
                                  CamelAddress *from, CamelAddress *recipients,
                                  CamelException *ex);
 
+G_DEFINE_TYPE (CamelSendmailTransport, camel_sendmail_transport, CAMEL_TYPE_TRANSPORT)
+
 static void
 camel_sendmail_transport_class_init (CamelSendmailTransportClass *class)
 {
@@ -57,23 +59,9 @@ camel_sendmail_transport_class_init (CamelSendmailTransportClass *class)
        transport_class->send_to = sendmail_send_to;
 }
 
-CamelType
-camel_sendmail_transport_get_type (void)
+static void
+camel_sendmail_transport_init (CamelSendmailTransport *sendmail_transport)
 {
-       static CamelType camel_sendmail_transport_type = CAMEL_INVALID_TYPE;
-
-       if (camel_sendmail_transport_type == CAMEL_INVALID_TYPE)        {
-               camel_sendmail_transport_type =
-                       camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSendmailTransport",
-                                            sizeof (CamelSendmailTransport),
-                                            sizeof (CamelSendmailTransportClass),
-                                            (CamelObjectClassInitFunc) camel_sendmail_transport_class_init,
-                                            NULL,
-                                            (CamelObjectInitFunc) NULL,
-                                            NULL);
-       }
-
-       return camel_sendmail_transport_type;
 }
 
 static gboolean
@@ -193,13 +181,13 @@ sendmail_send_to (CamelTransport *transport,
        filter = camel_stream_filter_new (out);
        crlf = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE, CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
        camel_stream_filter_add (CAMEL_STREAM_FILTER (filter), crlf);
-       camel_object_unref (crlf);
-       camel_object_unref (out);
+       g_object_unref (crlf);
+       g_object_unref (out);
 
        out = (CamelStream *) filter;
        if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), out) == -1
            || camel_stream_close (out) == -1) {
-               camel_object_unref (CAMEL_OBJECT (out));
+               g_object_unref (CAMEL_OBJECT (out));
                camel_exception_setv (
                        ex, CAMEL_EXCEPTION_SYSTEM,
                        _("Could not send message: %s"),
@@ -217,7 +205,7 @@ sendmail_send_to (CamelTransport *transport,
                return FALSE;
        }
 
-       camel_object_unref (CAMEL_OBJECT (out));
+       g_object_unref (CAMEL_OBJECT (out));
 
        /* Wait for sendmail to exit. */
        while (waitpid (pid, &wstat, 0) == -1 && errno == EINTR)
index 6272e19..7ab978c 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_SENDMAIL_TRANSPORT_TYPE     (camel_sendmail_transport_get_type ())
-#define CAMEL_SENDMAIL_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransport))
-#define CAMEL_SENDMAIL_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransportClass))
-#define CAMEL_IS_SENDMAIL_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SENDMAIL_TRANSPORT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SENDMAIL_TRANSPORT \
+       (camel_sendmail_transport_get_type ())
+#define CAMEL_SENDMAIL_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SENDMAIL_TRANSPORT, CamelSendmailTransport))
+#define CAMEL_SENDMAIL_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SENDMAIL_TRANSPORT, CamelSendmailTransportClass))
+#define CAMEL_IS_SENDMAIL_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SENDMAIL_TRANSPORT))
+#define CAMEL_IS_SENDMAIL_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SENDMAIL_TRANSPORT))
+#define CAMEL_SENDMAIL_TRANSPORT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SENDMAIL_TRANSPORT, CamelSendmailTransportClass))
 
 G_BEGIN_DECLS
 
@@ -46,7 +60,7 @@ struct _CamelSendmailTransportClass {
        CamelTransportClass parent_class;
 };
 
-CamelType camel_sendmail_transport_get_type (void);
+GType camel_sendmail_transport_get_type (void);
 
 G_END_DECLS
 
index 66ffce8..7130893 100644 (file)
@@ -77,8 +77,7 @@ static gboolean smtp_quit (CamelSmtpTransport *transport, CamelException *ex);
 static void smtp_set_exception (CamelSmtpTransport *transport, gboolean disconnect, const gchar *respbuf,
                                const gchar *message, CamelException *ex);
 
-/* private data members */
-static gpointer camel_smtp_transport_parent_class;
+G_DEFINE_TYPE (CamelSmtpTransport, camel_smtp_transport, CAMEL_TYPE_TRANSPORT)
 
 static void
 camel_smtp_transport_class_init (CamelSmtpTransportClass *class)
@@ -86,8 +85,6 @@ camel_smtp_transport_class_init (CamelSmtpTransportClass *class)
        CamelTransportClass *transport_class;
        CamelServiceClass *service_class;
 
-       camel_smtp_transport_parent_class = CAMEL_TRANSPORT_CLASS (camel_type_get_global_classfuncs (camel_transport_get_type ()));
-
        service_class = CAMEL_SERVICE_CLASS (class);
        service_class->connect = smtp_connect;
        service_class->disconnect = smtp_disconnect;
@@ -105,25 +102,6 @@ camel_smtp_transport_init (CamelSmtpTransport *smtp)
        smtp->connected = FALSE;
 }
 
-CamelType
-camel_smtp_transport_get_type (void)
-{
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (CAMEL_TRANSPORT_TYPE,
-                                           "CamelSmtpTransport",
-                                           sizeof (CamelSmtpTransport),
-                                           sizeof (CamelSmtpTransportClass),
-                                           (CamelObjectClassInitFunc) camel_smtp_transport_class_init,
-                                           NULL,
-                                           (CamelObjectInitFunc) camel_smtp_transport_init,
-                                           NULL);
-       }
-
-       return type;
-}
-
 static const gchar *
 smtp_error_string (gint error)
 {
@@ -249,7 +227,7 @@ connect_to_server (CamelService *service,
                                              _("Could not connect to %s: %s"),
                                              service->url->host, g_strerror (errno));
 
-               camel_object_unref (tcp_stream);
+               g_object_unref (tcp_stream);
 
                return FALSE;
        }
@@ -362,9 +340,9 @@ connect_to_server (CamelService *service,
 
  exception_cleanup:
 
-       camel_object_unref (transport->istream);
+       g_object_unref (transport->istream);
        transport->istream = NULL;
-       camel_object_unref (transport->ostream);
+       g_object_unref (transport->ostream);
        transport->ostream = NULL;
 
        transport->connected = FALSE;
@@ -450,7 +428,7 @@ smtp_connect (CamelService *service, CamelException *ex)
                truth = camel_sasl_get_authenticated (sasl);
                if (chal)
                        g_byte_array_free (chal, TRUE);
-               camel_object_unref (sasl);
+               g_object_unref (sasl);
 
                if (!truth)
                        return FALSE;
@@ -601,12 +579,12 @@ smtp_disconnect (CamelService *service,
        }
 
        if (transport->istream) {
-               camel_object_unref (transport->istream);
+               g_object_unref (transport->istream);
                transport->istream = NULL;
        }
 
        if (transport->ostream) {
-               camel_object_unref (transport->ostream);
+               g_object_unref (transport->ostream);
                transport->ostream = NULL;
        }
 
@@ -1021,7 +999,9 @@ smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
                respbuf = camel_stream_buffer_read_line (
                        CAMEL_STREAM_BUFFER (transport->istream));
                if (!respbuf || strncmp (respbuf, "250", 3)) {
-                       smtp_set_exception (transport, FALSE, respbuf, _("HELO command failed"), ex);
+                       smtp_set_exception (
+                               transport, FALSE, respbuf,
+                               _("HELO command failed"), ex);
                        camel_operation_end (NULL);
                        g_free (respbuf);
                        return FALSE;
@@ -1186,7 +1166,7 @@ smtp_auth (CamelSmtpTransport *transport,
        if (strncmp (respbuf, "235", 3) != 0)
                goto lose;
 
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
        camel_operation_end (NULL);
 
        return TRUE;
@@ -1205,7 +1185,7 @@ smtp_auth (CamelSmtpTransport *transport,
                                     _("Bad authentication response from server.\n"));
        }
 
-       camel_object_unref (sasl);
+       g_object_unref (sasl);
        camel_operation_end (NULL);
 
        g_free (respbuf);
@@ -1382,8 +1362,8 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
        filter = camel_mime_filter_progress_new (NULL, null->written);
        camel_stream_filter_add (
                CAMEL_STREAM_FILTER (filtered_stream), filter);
-       camel_object_unref (filter);
-       camel_object_unref (null);
+       g_object_unref (filter);
+       g_object_unref (null);
 
        /* setup LF->CRLF conversion */
        filter = camel_mime_filter_crlf_new (
@@ -1391,7 +1371,7 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
                CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
        camel_stream_filter_add (
                CAMEL_STREAM_FILTER (filtered_stream), filter);
-       camel_object_unref (filter);
+       g_object_unref (filter);
 
        /* write the message */
        ret = camel_data_wrapper_write_to_stream (
@@ -1405,14 +1385,14 @@ smtp_data (CamelSmtpTransport *transport, CamelMimeMessage *message, CamelExcept
                                      _("DATA command failed: %s: mail not sent"),
                                      g_strerror (errno));
 
-               camel_object_unref (filtered_stream);
+               g_object_unref (filtered_stream);
 
                camel_service_disconnect ((CamelService *) transport, FALSE, NULL);
                return FALSE;
        }
 
        camel_stream_flush (filtered_stream);
-       camel_object_unref (filtered_stream);
+       g_object_unref (filtered_stream);
 
        /* terminate the message body */
 
index 57e61e0..faebdb2 100644 (file)
 
 #include <camel/camel.h>
 
-#define CAMEL_SMTP_TRANSPORT_TYPE     (camel_smtp_transport_get_type ())
-#define CAMEL_SMTP_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransport))
-#define CAMEL_SMTP_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransportClass))
-#define CAMEL_IS_SMTP_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SMTP_TRANSPORT_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_SMTP_TRANSPORT \
+       (camel_smtp_transport_get_type ())
+#define CAMEL_SMTP_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_SMTP_TRANSPORT, CamelSmtpTransport))
+#define CAMEL_SMTP_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_SMTP_TRANSPORT, CamelSmtpTransportClass))
+#define CAMEL_IS_SMTP_TRANSPORT(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_SMTP_TRANSPORT))
+#define CAMEL_IS_SMTP_TRANSPORT_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_SMTP_TRANSPORT))
+#define CAMEL_SMTP_TRANSPORT_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_SMTP_TRANSPORT, CamelSmtpTransportClass))
 
 #define CAMEL_SMTP_TRANSPORT_IS_ESMTP               (1 << 0)
 #define CAMEL_SMTP_TRANSPORT_8BITMIME               (1 << 1)
@@ -66,7 +80,7 @@ struct _CamelSmtpTransportClass {
        CamelTransportClass parent_class;
 };
 
-CamelType camel_smtp_transport_get_type (void);
+GType camel_smtp_transport_get_type (void);
 
 G_END_DECLS
 
index d8b86e0..649a30b 100644 (file)
@@ -9,7 +9,7 @@ static const gchar *local_drivers[] = {
        "local"
 };
 
-static gchar *local_providers[] = {
+static const gchar *local_providers[] = {
        "mbox",
        "mh",
        "maildir"
@@ -43,7 +43,7 @@ gint main(gint argc, gchar **argv)
                g_free(path);
        }
 
-       camel_object_unref (session);
+       g_object_unref (session);
        camel_exception_free(ex);
 
        return 0;
index 44a405f..c362273 100644 (file)
@@ -14,7 +14,7 @@
 #define d(x)
 
 static const gchar *local_drivers[] = { "local" };
-static gchar *local_providers[] = {
+static const gchar *local_providers[] = {
        "mbox",
        "mh",
        "maildir"
@@ -38,11 +38,11 @@ worker(gpointer d)
                folder = camel_store_get_folder(store, "testbox", CAMEL_STORE_FOLDER_CREATE, ex);
                camel_exception_clear(ex);
                if (testid == 0) {
-                       camel_object_unref (folder);
-                       camel_object_unref (store);
+                       g_object_unref (folder);
+                       g_object_unref (store);
                } else {
-                       camel_object_unref (store);
-                       camel_object_unref (folder);
+                       g_object_unref (store);
+                       g_object_unref (folder);
                }
        }
 
@@ -51,7 +51,8 @@ worker(gpointer d)
        return NULL;
 }
 
-gint main(gint argc, gchar **argv)
+gint
+main(gint argc, gchar **argv)
 {
        CamelException *ex;
        gint i, j;
@@ -101,7 +102,7 @@ gint main(gint argc, gchar **argv)
                camel_test_end();
        }
 
-       camel_object_unref (session);
+       g_object_unref (session);
        camel_exception_free(ex);
 
        return 0;
index 9875667..302609c 100644 (file)
@@ -92,7 +92,8 @@ check_fi(CamelFolderInfo *fi, CamelFolderInfo *list, gint len)
        g_ptr_array_free(folders, TRUE);
 }
 
-gint main(gint argc, gchar **argv)
+gint
+main(gint argc, gchar **argv)
 {
        CamelException *ex;
        CamelFolder *f1, *f2;
index 3ab9043..b57ec2d 100644 (file)
@@ -12,7 +12,7 @@
 
 static const gchar *local_drivers[] = { "local" };
 
-static gchar *stores[] = {
+static const gchar *stores[] = {
        "mbox:///tmp/camel-test/mbox",
        "mh:///tmp/camel-test/mh",
        "maildir:///tmp/camel-test/maildir"
index b34db78..d96890e 100644 (file)
@@ -130,7 +130,7 @@ run_search(CamelFolder *folder, gint m)
 
 static const gchar *local_drivers[] = { "local" };
 
-static gchar *stores[] = {
+static const gchar *stores[] = {
        "mbox:///tmp/camel-test/mbox",
        "mh:///tmp/camel-test/mh",
        "maildir:///tmp/camel-test/maildir"
@@ -162,7 +162,7 @@ gint main(gint argc, gchar **argv)
 
        /* we iterate over all stores we want to test, with indexing or indexing turned on or off */
        for (i = 0; i < G_N_ELEMENTS (stores); i++) {
-               gchar *name = stores[i];
+               const gchar *name = stores[i];
                for (indexed = 0;indexed<2;indexed++) {
                        gchar *what = g_strdup_printf("folder search: %s (%sindexed)", name, indexed?"":"non-");
                        gint flags;
index 60123fd..8cdfe42 100644 (file)
@@ -7,7 +7,7 @@
 
 static const gchar *imap_drivers[] = { "imap4" };
 
-static gchar *remote_providers[] = {
+static const gchar *remote_providers[] = {
        "IMAP_TEST_URL",
 };
 
@@ -44,7 +44,7 @@ gint main(gint argc, gchar **argv)
                /*camel_test_fatal();*/
        }
 
-       camel_object_unref (session);
+       g_object_unref (session);
        camel_exception_free(ex);
 
        return 0;
index e1412f5..db99240 100644 (file)
@@ -7,7 +7,7 @@
 
 static const gchar *nntp_drivers[] = { "nntp" };
 
-static gchar *remote_providers[] = {
+static const gchar *remote_providers[] = {
        "NNTP_TEST_URL",
 };
 
@@ -44,7 +44,7 @@ gint main(gint argc, gchar **argv)
                camel_test_fatal();
        }
 
-       camel_object_unref (session);
+       g_object_unref (session);
        camel_exception_free(ex);
 
        return 0;
index 6af5dea..3f5541c 100644 (file)
@@ -6,7 +6,7 @@
 #include "session.h"
 
 static const gchar *imap_drivers[] = { "imap4" };
-static gchar *remote_providers[] = {
+static const gchar *remote_providers[] = {
        "IMAP_TEST_URL",
 };
 
index 5e99fe3..a705096 100644 (file)
@@ -7,7 +7,7 @@
 #include "session.h"
 
 static const gchar *nntp_drivers[] = { "nntp" };
-static gchar *remote_providers[] = {
+static const gchar *remote_providers[] = {
        "NNTP_TEST_URL",
 };
 
index e50ae24..41befdc 100644 (file)
@@ -15,7 +15,7 @@
 
 static const gchar *local_drivers[] = { "local" };
 
-static gchar *local_providers[] = {
+static const gchar *local_providers[] = {
        "mbox",
        "mh",
        "maildir"
@@ -85,7 +85,7 @@ worker(gpointer d)
 
                content = g_strdup_printf("Test message %08x contents\n\n", id+i);
                push("comparing content '%s': '%s'", res->pdata[0], content);
-               test_message_compare_content(camel_medium_get_content ((CamelMedium *)msg), content, strlen(content));
+               test_message_compare_content(camel_medium_get_content((CamelMedium *)msg), content, strlen(content));
                test_free(content);
                pull();
 
@@ -204,7 +204,7 @@ gint main(gint argc, gchar **argv)
                }
        }
 
-       camel_object_unref (session);
+       g_object_unref (session);
        camel_exception_free(ex);
 
        return 0;
index 1e7d377..2ee34ff 100644 (file)
@@ -11,7 +11,7 @@
 static const gchar *local_drivers[] = { "local" };
 
 struct {
-       gchar *name;
+       const gchar *name;
        CamelFolder *folder;
 } mailboxes[] = {
        { "INBOX", NULL },
@@ -22,7 +22,7 @@ struct {
 };
 
 struct {
-       gchar *name, *match, *action;
+       const gchar *name, *match, *action;
 } rules[] = {
        { "empty1", "(match-all (header-contains \"Frobnitz\"))", "(copy-to \"folder1\")" },
        { "empty2", "(header-contains \"Frobnitz\")", "(copy-to \"folder2\")" },
@@ -37,7 +37,7 @@ struct {
 
 /* broken match rules */
 struct {
-       gchar *name, *match, *action;
+       const gchar *name, *match, *action;
 } brokens[] = {
        { "count1", "(body-contains data50)", "(copy-to \"folder1\")" }, /* non string argument */
        { "count1", "(body-contains-stuff \"data3\")", "(move-to-folder \"folder2\")" }, /* invalid function */
@@ -53,7 +53,7 @@ struct {
 
 /* broken action rules */
 struct {
-       gchar *name, *match, *action;
+       const gchar *name, *match, *action;
 } brokena[] = {
        { "a", "(body-contains \"data2\")", "(body-contains \"help\")" }, /* rule in action */
        { "a", "(body-contains \"data2\")", "(move-to-folder-name \"folder2\")" }, /* unknown function */
@@ -65,13 +65,17 @@ struct {
        { "a", "(body-contains \"data2\")", "" }, /* empty */
 };
 
-static CamelFolder *get_folder(CamelFilterDriver *d, const gchar *uri, gpointer data, CamelException *ex)
+static CamelFolder *
+get_folder (CamelFilterDriver *d,
+            const gchar *uri,
+            gpointer data,
+            CamelException *ex);
 {
        gint i;
 
        for (i = 0; i < G_N_ELEMENTS (mailboxes); i++)
                if (!strcmp(mailboxes[i].name, uri)) {
-                       return camel_object_ref (mailboxes[i].folder);
+                       return g_object_ref (mailboxes[i].folder);
                }
        return NULL;
 }
index 29a4076..75bdac0 100644 (file)
@@ -1,7 +1,8 @@
-
+#include "camel-test-provider.h"
 #include "camel-test.h"
 
-void camel_test_provider_init(gint argc, gchar **argv)
+void
+camel_test_provider_init (gint argc, const gchar **argv)
 {
        gchar *name, *path;
        gint i;
index 2ab7ba1..3c90ce2 100644 (file)
@@ -4,6 +4,6 @@
 
 #include <glib.h>
 
-void camel_test_provider_init(gint argc, gchar **argv);
+void camel_test_provider_init(gint argc, const gchar **argv);
 
 #endif
index ca4a5eb..b569142 100644 (file)
@@ -27,14 +27,14 @@ static void check_msg(gint truth, gchar *fmt, ...)
 #endif
 
 #define check_count(object, expected) do { \
-       if (CAMEL_OBJECT(object)->ref_count != expected) { \
-               camel_test_fail("%s->ref_count != %s\n\tref_count = %d", #object, #expected, CAMEL_OBJECT(object)->ref_count); \
+       if (G_OBJECT (object)->ref_count != expected) { \
+               camel_test_fail("%s->ref_count != %s\n\tref_count = %d", #object, #expected, G_OBJECT (object)->ref_count); \
        } \
 } while (0)
 
 #define check_unref(object, expected) do { \
        check_count(object, expected); \
-       camel_object_unref (CAMEL_OBJECT(object)); \
+       g_object_unref(CAMEL_OBJECT(object)); \
        if (expected == 1) { \
                object = NULL; \
        } \
index 4c23c43..c7059f5 100644 (file)
@@ -105,7 +105,7 @@ test_folder_message(CamelFolder *folder, const gchar *uid)
        /* cross check with info */
        test_message_info(msg, info);
 
-       camel_object_unref (msg);
+       g_object_unref (msg);
 
        /* see if it is in the summary (only once) */
        s = camel_folder_get_summary(folder);
index 07d8bba..006a297 100644 (file)
@@ -1,4 +1,6 @@
 
+#include <camel/camel.h>
+
 /* check the total/unread is what we think it should be, everywhere it can be determined */
 void test_folder_counts(CamelFolder *folder, gint total, gint unread);
 /* cross-check info/msg */
index fa79f51..a6cbee0 100644 (file)
@@ -57,14 +57,14 @@ test_message_set_content_simple(CamelMimePart *part, gint how, const gchar *type
                break;
        case 3:
                ba = g_byte_array_new();
-               g_byte_array_append(ba, text, len);
+               g_byte_array_append(ba, (guint8 *) text, len);
 
                content = (CamelStreamMem *)camel_stream_mem_new_with_byte_array(ba);
                ba = NULL;
                break;
        case 4:
                ba = g_byte_array_new();
-               g_byte_array_append(ba, text, len);
+               g_byte_array_append(ba, (guint8 *) text, len);
 
                content = (CamelStreamMem *)camel_stream_mem_new();
                camel_stream_mem_set_byte_array(content, ba);
@@ -95,8 +95,8 @@ test_message_write_file(CamelMimeMessage *msg, const gchar *name)
        camel_data_wrapper_write_to_stream((CamelDataWrapper *)msg, (CamelStream *)file);
        ret = camel_stream_close((CamelStream *)file);
 
-       check(((CamelObject *)file)->ref_count == 1);
-       camel_object_unref (file);
+       check(G_OBJECT (file)->ref_count == 1);
+       g_object_unref (file);
 
        return ret;
 }
@@ -112,8 +112,8 @@ test_message_read_file(const gchar *name)
 
        camel_data_wrapper_construct_from_stream((CamelDataWrapper *)msg2, (CamelStream *)file);
        /* file's refcount may be > 1 if the message is real big */
-       check(CAMEL_OBJECT(file)->ref_count >=1);
-       camel_object_unref (file);
+       check(G_OBJECT(file)->ref_count >=1);
+       g_object_unref (file);
 
        return msg2;
 }
@@ -165,7 +165,7 @@ test_message_compare_content(CamelDataWrapper *dw, const gchar *text, gint len)
 
        if (byte_array->len != len) {
                printf ("original text:\n");
-               hexdump (text, len);
+               hexdump ((guchar *) text, len);
 
                printf ("new text:\n");
                hexdump (byte_array->data, byte_array->len);
@@ -223,8 +223,8 @@ test_message_compare (CamelMimeMessage *msg)
 
        check_msg (memcmp (byte_array1->data, byte_array2->data, byte_array1->len) == 0, "msg/stream compare");
 
-       camel_object_unref (stream1);
-       camel_object_unref (stream2);
+       g_object_unref (stream1);
+       g_object_unref (stream2);
 
        return 0;
 }
@@ -254,11 +254,11 @@ message_dump_rec(CamelMimeMessage *msg, CamelMimePart *part, gint depth)
        s[depth] = 0;
 
        mime_type = camel_data_wrapper_get_mime_type((CamelDataWrapper *)part);
-       printf("%sPart <%s>\n", s, ((CamelObject *)part)->klass->name);
+       printf("%sPart <%s>\n", s, G_OBJECT_TYPE_NAME (part));
        printf("%sContent-Type: %s\n", s, mime_type);
        g_free(mime_type);
        printf("%s encoding: %s\n", s, camel_transfer_encoding_to_string(((CamelDataWrapper *)part)->encoding));
-       printf("%s part encoding: %s\n", s, camel_transfer_encoding_to_string(camel_mime_part_get_encoding(part)));
+       printf("%s part encoding: %s\n", s, camel_transfer_encoding_to_string(camel_mime_part_get_encoding (part)));
 
        containee = camel_medium_get_content (CAMEL_MEDIUM (part));
 
@@ -266,7 +266,7 @@ message_dump_rec(CamelMimeMessage *msg, CamelMimePart *part, gint depth)
                return;
 
        mime_type = camel_data_wrapper_get_mime_type(containee);
-       printf("%sContent <%s>\n", s, ((CamelObject *)containee)->klass->name);
+       printf("%sContent <%s>\n", s, G_OBJECT_TYPE_NAME (containee));
        printf ("%sContent-Type: %s\n", s, mime_type);
        g_free (mime_type);
        printf("%s encoding: %s\n", s, camel_transfer_encoding_to_string(((CamelDataWrapper *)containee)->encoding));
index a3d3d2b..b155069 100644 (file)
@@ -4,31 +4,16 @@
 
 #include "session.h"
 
+G_DEFINE_TYPE (CamelTestSession, camel_test_session, CAMEL_TYPE_SESSION)
+
 static void
-class_init (CamelTestSessionClass *camel_test_session_class)
+camel_test_session_class_init (CamelTestSessionClass *class)
 {
-       CamelSessionClass *camel_session_class =
-               CAMEL_SESSION_CLASS (camel_test_session_class);
 }
 
-CamelType
-camel_test_session_get_type (void)
+static void
+camel_test_session_init (CamelTestSession *test_session)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
-
-       if (type == CAMEL_INVALID_TYPE) {
-               type = camel_type_register (
-                       camel_session_get_type (),
-                       "CamelTestSession",
-                       sizeof (CamelTestSession),
-                       sizeof (CamelTestSessionClass),
-                       (CamelObjectClassInitFunc) class_init,
-                       NULL,
-                       NULL,
-                       NULL);
-       }
-
-       return type;
 }
 
 CamelSession *
@@ -36,8 +21,7 @@ camel_test_session_new (const gchar *path)
 {
        CamelSession *session;
 
-       session = CAMEL_SESSION (camel_object_new (CAMEL_TEST_SESSION_TYPE));
-
+       session = g_object_new (CAMEL_TYPE_TEST_SESSION, NULL);
        camel_session_construct (session, path);
 
        return session;
index b0a1204..2b2e5ec 100644 (file)
@@ -1,19 +1,38 @@
 #include <camel/camel.h>
 
-#define CAMEL_TEST_SESSION_TYPE     (camel_test_session_get_type ())
-#define CAMEL_TEST_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TEST_SESSION_TYPE, CamelTestSession))
-#define CAMEL_TEST_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TEST_SESSION_TYPE, CamelTestSessionClass))
-#define CAMEL_TEST_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TEST_SESSION_TYPE))
+/* Standard GObject macros */
+#define CAMEL_TYPE_TEST_SESSION \
+       (camel_test_session_get_type ())
+#define CAMEL_TEST_SESSION(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST \
+       ((obj), CAMEL_TYPE_TEST_SESSION, CamelTestSession))
+#define CAMEL_TEST_SESSION_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_CAST \
+       ((cls), CAMEL_TYPE_TEST_SESSION, CamelTestSessionClass))
+#define CAMEL_IS_TEST_SESSION(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE \
+       ((obj), CAMEL_TYPE_TEST_SESSION))
+#define CAMEL_IS_TEST_SESSION_CLASS(cls) \
+       (G_TYPE_CHECK_CLASS_TYPE \
+       ((cls), CAMEL_TYPE_TEST_SESSION))
+#define CAMEL_TEST_SESSION_GET_CLASS(obj) \
+       (G_TYPE_INSTANCE_GET_CLASS \
+       ((obj), CAMEL_TYPE_TEST_SESSION, CamelTestSessionClass))
 
-typedef struct _CamelTestSession {
-       CamelSession parent;
+G_BEGIN_DECLS
 
-} CamelTestSession;
+typedef struct _CamelTestSession CamelTestSession;
+typedef struct _CamelTestSessionClass CamelTestSessionClass;
 
-typedef struct _CamelTestSessionClass {
-       CamelSessionClass parent_class;
+struct _CamelTestSession {
+       CamelSession parent;
+};
 
-} CamelTestSessionClass;
+struct _CamelTestSessionClass {
+       CamelSessionClass parent_class;
+};
 
-CamelType camel_test_session_get_type (void);
+GType camel_test_session_get_type (void);
 CamelSession *camel_test_session_new (const gchar *path);
+
+G_END_DECLS
index 266a61b..4229a35 100644 (file)
@@ -147,7 +147,7 @@ test_seekable_substream_writepart(CamelStream *s, gint type)
                len = (ss->bound_end-ss->bound_start) % sizeof(teststring);
                check(camel_stream_write(s, teststring, len) == len);
                check(camel_seekable_stream_tell(CAMEL_SEEKABLE_STREAM(s)) == ss->bound_end);
-               if (type == 0) {
+               if (G_UNLIKELY (type == G_TYPE_INVALID)) {
                        check(camel_stream_write(s, teststring, sizeof(teststring)) == 0);
                        check(camel_stream_eos(s));
                        check(camel_seekable_stream_tell(CAMEL_SEEKABLE_STREAM(s)) == ss->bound_end);
index 568d436..b10a8a3 100644 (file)
@@ -37,37 +37,37 @@ gint main(gint argc, gchar **argv)
        part = camel_mime_part_new();
        test_message_set_content_simple(part, 0, "text/plain", "content part 1", strlen("content part 1"));
        camel_multipart_add_part(mp, part);
-       check(CAMEL_OBJECT(part)->ref_count == 2);
+       check(G_OBJECT(part)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 1);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == NULL);
 
        camel_multipart_remove_part(mp, part);
-       check(CAMEL_OBJECT(part)->ref_count == 1);
+       check(G_OBJECT(part)->ref_count == 1);
        check(camel_multipart_get_number(mp) == 0);
        check(camel_multipart_get_part(mp, 0) == NULL);
        check(camel_multipart_get_part(mp, 1) == NULL);
 
        camel_multipart_add_part_at(mp, part, 0);
-       check(CAMEL_OBJECT(part)->ref_count == 2);
+       check(G_OBJECT(part)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 1);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == NULL);
 
        check(camel_multipart_remove_part_at(mp, 1) == NULL);
-       check(CAMEL_OBJECT(part)->ref_count == 2);
+       check(G_OBJECT(part)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 1);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == NULL);
 
        check(camel_multipart_remove_part_at(mp, 0) == part);
-       check(CAMEL_OBJECT(part)->ref_count == 1);
+       check(G_OBJECT(part)->ref_count == 1);
        check(camel_multipart_get_number(mp) == 0);
        check(camel_multipart_get_part(mp, 0) == NULL);
        check(camel_multipart_get_part(mp, 1) == NULL);
 
        camel_multipart_add_part(mp, part);
-       check(CAMEL_OBJECT(part)->ref_count == 2);
+       check(G_OBJECT(part)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 1);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == NULL);
@@ -75,7 +75,7 @@ gint main(gint argc, gchar **argv)
        part2 = camel_mime_part_new();
        test_message_set_content_simple(part2, 0, "text/plain", "content part 2", strlen("content part 2"));
        camel_multipart_add_part(mp, part2);
-       check(CAMEL_OBJECT(part2)->ref_count == 2);
+       check(G_OBJECT(part2)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 2);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == part2);
@@ -83,7 +83,7 @@ gint main(gint argc, gchar **argv)
        part3 = camel_mime_part_new();
        test_message_set_content_simple(part3, 0, "text/plain", "content part 3", strlen("content part 3"));
        camel_multipart_add_part_at(mp, part3, 1);
-       check(CAMEL_OBJECT(part3)->ref_count == 2);
+       check(G_OBJECT(part3)->ref_count == 2);
        check(camel_multipart_get_number(mp) == 3);
        check(camel_multipart_get_part(mp, 0) == part);
        check(camel_multipart_get_part(mp, 1) == part3);
index 835bc3f..574fc18 100644 (file)
@@ -43,7 +43,7 @@ dump_mime_struct (CamelMimePart *mime_part, gint depth)
                i++;
        }
 
-       content = camel_medium_get_content_object ((CamelMedium *) mime_part);
+       content = camel_medium_get_content ((CamelMedium *) mime_part);
 
        mime_type = camel_data_wrapper_get_mime_type (content);
        printf ("Content-Type: %s\n", mime_type);
@@ -108,8 +108,8 @@ gint main (gint argc, gchar **argv)
                /*dump_mime_struct ((CamelMimePart *) message, 0);*/
                test_message_compare (message);
 
-               camel_object_unref (message);
-               camel_object_unref (stream);
+               g_object_unref (message);
+               g_object_unref (stream);
 
                pull ();
        }
index e859260..17e60c4 100644 (file)
@@ -72,7 +72,7 @@ main (gint argc, gchar **argv)
                ext = strchr (charset, '.');
                *((gchar *) ext) = '\0';
 
-               if (!(f = (CamelMimeFilter *) camel_mime_filter_charset_new (charset, "UTF-8"))) {
+               if (!(f = camel_mime_filter_charset_new (charset, "UTF-8"))) {
                        camel_test_fail ("Couldn't create CamelMimeFilterCharset??");
                        g_free (charset);
                        continue;
@@ -80,7 +80,7 @@ main (gint argc, gchar **argv)
                g_free (charset);
 
                camel_stream_filter_add (filter, f);
-               camel_object_unref (f);
+               g_object_unref (f);
 
                camel_test_push ("Running filter and comparing to correct result");
 
@@ -126,9 +126,9 @@ main (gint argc, gchar **argv)
 
                /* inefficient */
                camel_test_push ("Cleaning up");
-               camel_object_unref (CAMEL_OBJECT (filter));
-               camel_object_unref (CAMEL_OBJECT (correct));
-               camel_object_unref (CAMEL_OBJECT (source));
+               g_object_unref (CAMEL_OBJECT (filter));
+               g_object_unref (CAMEL_OBJECT (correct));
+               g_object_unref (CAMEL_OBJECT (source));
                camel_test_pull ();
 
                camel_test_end ();
index 602c934..68582d5 100644 (file)
@@ -139,10 +139,10 @@ main (gint argc, gchar **argv)
 
                        /* inefficient */
                        camel_test_push ("Cleaning up");
-                       camel_object_unref (CAMEL_OBJECT (filter));
-                       camel_object_unref (CAMEL_OBJECT (correct));
-                       camel_object_unref (CAMEL_OBJECT (source));
-                       camel_object_unref (CAMEL_OBJECT (sh));
+                       g_object_unref (CAMEL_OBJECT (filter));
+                       g_object_unref (CAMEL_OBJECT (correct));
+                       g_object_unref (CAMEL_OBJECT (source));
+                       g_object_unref (CAMEL_OBJECT (sh));
                        camel_test_pull ();
 
                        camel_test_pull ();
index 70ce4da..731ae63 100644 (file)
@@ -47,12 +47,12 @@ test_filter(CamelMimeFilter *f, const gchar *inname, const gchar *outname)
        byte_array_in = g_byte_array_new ();
        in = camel_stream_mem_new_with_byte_array (byte_array_in);
 
-       filter = (CamelStream *)camel_stream_filter_new (indisk);
+       filter = camel_stream_filter_new (indisk);
        check_count(indisk, 2);
        id = camel_stream_filter_add((CamelStreamFilter *)filter, f);
        check_count(f, 2);
 
-       check(camel_stream_write_to_stream(filter, (CamelStream *)in) > 0);
+       check(camel_stream_write_to_stream(filter, in) > 0);
        check_msg(byte_array_in->len == byte_array_out->len
                  && memcmp(byte_array_in->data, byte_array_out->data, byte_array_in->len) == 0,
                  "Buffer content mismatch, %d != %d, in = '%.*s' != out = '%.*s'", byte_array_in->len, byte_array_out->len,
@@ -75,7 +75,7 @@ test_filter(CamelMimeFilter *f, const gchar *inname, const gchar *outname)
 
        byte_array_in = g_byte_array_new ();
        in = camel_stream_mem_new_with_byte_array (byte_array_in);
-       filter = (CamelStream *)camel_stream_filter_new (in);
+       filter = camel_stream_filter_new (in);
        check_count(in, 2);
        id = camel_stream_filter_add((CamelStreamFilter *)filter, f);
        check_count(f, 2);
index f7fed37..1cf3212 100644 (file)
@@ -16,8 +16,8 @@
 
 struct {
        gint flags;
-       gchar *in;
-       gchar *out;
+       const gchar *in;
+       const gchar *out;
 } tests[] = {
        { CAMEL_MIME_FILTER_CANON_FROM|CAMEL_MIME_FILTER_CANON_CRLF,
          "From \nRussia - with love.\n\n",
@@ -51,7 +51,7 @@ struct {
 gint
 main (gint argc, gchar **argv)
 {
-       CamelStreamFilter *filter;
+       CamelStream *filter;
        CamelMimeFilter *sh;
        gint i;
 
@@ -68,7 +68,7 @@ main (gint argc, gchar **argv)
                for (step=1;step<20;step++) {
                        GByteArray *byte_array;
                        CamelStream *out;
-                       gchar *p;
+                       const gchar *p;
 
                        camel_test_push("Chunk size %d\n", step);
 
index 8c87bd9..7947e72 100644 (file)
@@ -4,7 +4,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <glib.h>
 #include <camel/camel-search-private.h>
 
 #include "camel-test.h"
 /* TODO: should put utf8 stuff here too */
 
 static struct {
-       gchar *word;
+       const gchar *word;
        gint count;
        struct {
-               gchar *word;
+               const gchar *word;
                gint type;
        } splits[5];
 } split_tests[] = {
@@ -33,10 +32,10 @@ static struct {
 };
 
 static struct {
-       gchar *word;
+       const gchar *word;
        gint count;
        struct {
-               gchar *word;
+               const gchar *word;
                gint type;
        } splits[5];
 } simple_tests[] = {
index b5f6fd5..e607b6a 100644 (file)
@@ -8,8 +8,8 @@
 #include "camel-test.h"
 
 struct {
-       gchar *header;
-       gchar *values[5];
+       const gchar *header;
+       const gchar *values[5];
 } test1[] = {
        { "<test@camel.host>", { "test@camel.host" } },
        { "(this is a comment) <test@camel.host>", { "test@camel.host" } },
index e4d6f66..f56c1c0 100644 (file)
@@ -11,9 +11,9 @@
 /* NB: We know which order the params will be decoded in, plain in the order they come,
    and rfc2184 encoded following those, sorted lexigraphically */
 struct {
-       gchar *list;
+       const gchar *list;
        gint count;
-       gchar *params[8];
+       const gchar *params[8];
 } test1[] = {
        { "; charset=\"iso-8859-1\"",
          1,
@@ -44,8 +44,8 @@ struct {
 
 struct {
        gint count;
-       gchar *params[8];
-       gchar *list;
+       const gchar *params[8];
+       const gchar *list;
 } test2[] = {
        { 1,
          { "name", "Doul\xC3\xADk01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123457890123456789123456789" },
index 9476526..a3381e1 100644 (file)
@@ -31,7 +31,7 @@
 #include "camel-test.h"
 
 struct {
-       gchar *text, *url;
+       const gchar *text, *url;
 } url_tests[] = {
        { "bob@foo.com", "mailto:bob@foo.com" },
        { "Ends with bob@foo.com", "mailto:bob@foo.com" },
index dcdb06f..b7b6951 100644 (file)
@@ -7,10 +7,10 @@
 
 #include "camel-test.h"
 
-gchar *base = "http://a/b/c/d;p?q#f";
+const gchar *base = "http://a/b/c/d;p?q#f";
 
 struct {
-       gchar *url_string, *result;
+       const gchar *url_string, *result;
 } tests[] = {
        { "g:h", "g:h" },
        { "g", "http://a/b/c/g" },
index b4d439c..c80e1f1 100644 (file)
@@ -4,13 +4,12 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <glib.h>
 
 #include "camel-test.h"
 
 static struct {
        guchar *utf8;
-       gchar *utf7;
+       const gchar *utf7;
        guint32 unicode[200];
 } tests[] = {
        /* the escape gchar */
index 3e6870a..d4cfcd9 100644 (file)
@@ -37,9 +37,9 @@ static gchar test_msg[] = "Since we need to make sure that\nFrom lines work okay
 "the basics at least...\n";
 
 #define CAMEL_PGP_SESSION_TYPE     (camel_pgp_session_get_type ())
-#define CAMEL_PGP_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_PGP_SESSION_TYPE, CamelPgpSession))
-#define CAMEL_PGP_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_PGP_SESSION_TYPE, CamelPgpSessionClass))
-#define CAMEL_PGP_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_PGP_SESSION_TYPE))
+#define CAMEL_PGP_SESSION(obj)     (G_TYPE_CHECK_INSTANCE_CAST((obj), CAMEL_PGP_SESSION_TYPE, CamelPgpSession))
+#define CAMEL_PGP_SESSION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CAMEL_PGP_SESSION_TYPE, CamelPgpSessionClass))
+#define CAMEL_PGP_IS_SESSION(o)    (G_TYPE_CHECK_INSTANCE_TYPE((o), CAMEL_PGP_SESSION_TYPE))
 
 typedef struct _CamelPgpSession {
        CamelSession parent_object;
@@ -68,26 +68,24 @@ class_init (CamelPgpSessionClass *camel_pgp_session_class)
        CamelSessionClass *camel_session_class =
                CAMEL_SESSION_CLASS (camel_pgp_session_class);
 
-       /* virtual method override */
        camel_session_class->get_password = get_password;
 }
 
-static CamelType
+static GType
 camel_pgp_session_get_type (void)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
+       static GType type = G_TYPE_INVALID;
 
-       if (type == CAMEL_INVALID_TYPE) {
+       if (G_UNLIKELY (type == G_TYPE_INVALID))
                type = camel_type_register (
-                       camel_test_session_get_type (),
+                       CAMEL_TYPE_TEST_SESSION,
                        "CamelPgpSession",
                        sizeof (CamelPgpSession),
                        sizeof (CamelPgpSessionClass),
-                       (CamelObjectClassInitFunc) class_init,
+                       (GClassInitFunc) class_init,
                        NULL,
-                       (CamelObjectInitFunc) init,
+                       (GInstanceInitFunc) init,
                        NULL);
-       }
 
        return type;
 }
@@ -104,8 +102,7 @@ camel_pgp_session_new (const gchar *path)
 {
        CamelSession *session;
 
-       session = CAMEL_SESSION (camel_object_new (CAMEL_PGP_SESSION_TYPE));
-
+       session = g_object_new (CAMEL_TYPE_PGP_SESSION, NULL);
        camel_session_construct (session, path);
 
        return session;
@@ -158,7 +155,7 @@ gint main (gint argc, gchar **argv)
        check_msg (!camel_exception_is_set (ex), "%s", camel_exception_get_description (ex));
        camel_test_pull ();
 
-       camel_object_unref (mime_part);
+       g_object_unref (mime_part);
        camel_exception_clear (ex);
 
        camel_test_push ("PGP/MIME verify");
@@ -168,7 +165,7 @@ gint main (gint argc, gchar **argv)
        camel_cipher_validity_free (valid);
        camel_test_pull ();
 
-       camel_object_unref (mps);
+       g_object_unref (mps);
        camel_exception_clear (ex);
 
        mime_part = camel_mime_part_new ();
@@ -186,17 +183,17 @@ gint main (gint argc, gchar **argv)
        camel_test_pull ();
 
        camel_exception_clear (ex);
-       camel_object_unref (mime_part);
+       g_object_unref (mime_part);
 
        camel_test_push ("PGP/MIME decrypt");
        mime_part = camel_multipart_encrypted_decrypt (mpe, ctx, ex);
        check_msg (!camel_exception_is_set (ex), "%s", camel_exception_get_description (ex));
-       camel_object_unref (mime_part);
-       camel_object_unref (mpe);
+       g_object_unref (mime_part);
+       g_object_unref (mpe);
        camel_test_pull ();
 
-       camel_object_unref (CAMEL_OBJECT (ctx));
-       camel_object_unref (CAMEL_OBJECT (session));
+       g_object_unref (CAMEL_OBJECT (ctx));
+       g_object_unref (CAMEL_OBJECT (session));
 
        camel_test_end ();
 
index f5f7972..483767e 100644 (file)
 #include "camel-test.h"
 #include "session.h"
 
-#define CAMEL_PGP_SESSION_TYPE     (camel_pgp_session_get_type ())
-#define CAMEL_PGP_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_PGP_SESSION_TYPE, CamelPgpSession))
-#define CAMEL_PGP_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_PGP_SESSION_TYPE, CamelPgpSessionClass))
-#define CAMEL_PGP_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_PGP_SESSION_TYPE))
+#define CAMEL_TYPE_PGP_SESSION     (camel_pgp_session_get_type ())
+#define CAMEL_PGP_SESSION(obj)     (G_TYPE_CHECK_INSTANCE_CAST((obj), CAMEL_TYPE_PGP_SESSION, CamelPgpSession))
+#define CAMEL_PGP_SESSION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CAMEL_TYPE_PGP_SESSION, CamelPgpSessionClass))
+#define CAMEL_PGP_IS_SESSION(o)    (G_TYPE_CHECK_INSTANCE_TYPE((o), CAMEL_TYPE_PGP_SESSION))
 
 typedef struct _CamelPgpSession {
        CamelSession parent_object;
@@ -52,24 +52,19 @@ static gchar *get_password (CamelSession *session, const gchar *prompt,
                           CamelService *service, const gchar *item,
                           CamelException *ex);
 
-static void
-init (CamelPgpSession *session)
-{
-       ;
-}
+G_DEFINE_TYPE (CamelPgpSession, camel_pgp_session, camel_test_session_get_type ())
 
 static void
-class_init (CamelPgpSessionClass *camel_pgp_session_class)
+camel_pgp_session_class_init (CamelPgpSessionClass *class)
 {
-       CamelSessionClass *camel_session_class =
-               CAMEL_SESSION_CLASS (camel_pgp_session_class);
+       CamelSessionClass *session_class;
 
-       /* virtual method override */
+       session_class = CAMEL_SESSION_CLASS (class);
        camel_session_class->get_password = get_password;
 }
 
-static CamelType
-camel_pgp_session_get_type (void)
+static void
+camel_pgp_session_init (CamelPgpSession *session)
 {
        static CamelType type = CAMEL_INVALID_TYPE;
 
@@ -100,8 +95,7 @@ camel_pgp_session_new (const gchar *path)
 {
        CamelSession *session;
 
-       session = CAMEL_SESSION (camel_object_new (CAMEL_PGP_SESSION_TYPE));
-
+       session = g_object_new (CAMEL_TYPE_PGP_SESSION, NULL);
        camel_session_construct (session, path);
 
        return session;
@@ -114,10 +108,10 @@ gint main (gint argc, gchar **argv)
        CamelException *ex;
        CamelCipherValidity *valid;
        CamelStream *stream1, *stream2;
+       GByteArray *buffer1, *buffer2;
        struct _CamelMimePart *sigpart, *conpart, *encpart, *outpart;
        CamelDataWrapper *dw;
        GPtrArray *recipients;
-       GByteArray *buf;
        gchar *before, *after;
        gint ret;
 
@@ -159,8 +153,8 @@ gint main (gint argc, gchar **argv)
        dw = camel_data_wrapper_new();
        camel_data_wrapper_construct_from_stream(dw, stream1);
        camel_medium_set_content ((CamelMedium *)conpart, dw);
-       camel_object_unref (stream1);
-       camel_object_unref (dw);
+       g_object_unref (stream1);
+       g_object_unref (dw);
 
        sigpart = camel_mime_part_new();
 
@@ -182,8 +176,8 @@ gint main (gint argc, gchar **argv)
        camel_cipher_validity_free (valid);
        camel_test_pull ();
 
-       camel_object_unref (conpart);
-       camel_object_unref (sigpart);
+       g_object_unref (conpart);
+       g_object_unref (sigpart);
 
        stream1 = camel_stream_mem_new ();
        camel_stream_write (stream1, "Hello, I am a test of encryption/decryption.", 44);
@@ -194,8 +188,8 @@ gint main (gint argc, gchar **argv)
        camel_stream_reset(stream1);
        camel_data_wrapper_construct_from_stream(dw, stream1);
        camel_medium_set_content ((CamelMedium *)conpart, dw);
-       camel_object_unref (stream1);
-       camel_object_unref (dw);
+       g_object_unref (stream1);
+       g_object_unref (dw);
 
        encpart = camel_mime_part_new();
 
@@ -203,7 +197,7 @@ gint main (gint argc, gchar **argv)
 
        camel_test_push ("PGP encrypt");
        recipients = g_ptr_array_new ();
-       g_ptr_array_add (recipients, "no.user@no.domain");
+       g_ptr_array_add (recipients, (guint8 *) "no.user@no.domain");
        camel_cipher_encrypt (ctx, "no.user@no.domain", recipients, conpart, encpart, ex);
        check_msg (!camel_exception_is_set (ex), "%s", camel_exception_get_description (ex));
        g_ptr_array_free (recipients, TRUE);
@@ -217,30 +211,30 @@ gint main (gint argc, gchar **argv)
        check_msg (!camel_exception_is_set (ex), "%s", camel_exception_get_description (ex));
        check_msg (valid->encrypt.status == CAMEL_CIPHER_VALIDITY_ENCRYPT_ENCRYPTED, "%s", valid->encrypt.description);
 
-       stream1 = camel_stream_mem_new();
-       stream2 = camel_stream_mem_new();
+       buffer1 = g_byte_array_new ();
+       stream1 = camel_stream_mem_new_with_byte_array (buffer1);
+       buffer2 = g_byte_array_new ();
+       stream2 = camel_stream_mem_new_with_byte_array (buffer2);
 
        camel_data_wrapper_write_to_stream((CamelDataWrapper *)conpart, stream1);
        camel_data_wrapper_write_to_stream((CamelDataWrapper *)outpart, stream2);
 
-       buf = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (stream1));
-       before = g_strndup (buf->data, buf->len);
-       buf = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (stream2));
-       after = g_strndup (buf->data, buf->len);
+       before = g_strndup ((gchar *) buffer1->data, buffer1->len);
+       after = g_strndup ((gchar *) buffer2->data, buffer2->len);
        check_msg (string_equal (before, after), "before = '%s', after = '%s'", before, after);
        g_free (before);
        g_free (after);
 
-       camel_object_unref (stream1);
-       camel_object_unref (stream2);
-       camel_object_unref (conpart);
-       camel_object_unref (encpart);
-       camel_object_unref (outpart);
+       g_object_unref (stream1);
+       g_object_unref (stream2);
+       g_object_unref (conpart);
+       g_object_unref (encpart);
+       g_object_unref (outpart);
 
        camel_test_pull ();
 
-       camel_object_unref (CAMEL_OBJECT (ctx));
-       camel_object_unref (CAMEL_OBJECT (session));
+       g_object_unref (CAMEL_OBJECT (ctx));
+       g_object_unref (CAMEL_OBJECT (session));
 
        camel_test_end ();
 
index 73dc143..c6c7d66 100644 (file)
@@ -7,9 +7,9 @@
 #include "camel-test.h"
 
 #define CAMEL_TEST_SESSION_TYPE     (camel_test_session_get_type ())
-#define CAMEL_TEST_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TEST_SESSION_TYPE, CamelTestSession))
-#define CAMEL_TEST_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TEST_SESSION_TYPE, CamelTestSessionClass))
-#define CAMEL_TEST_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TEST_SESSION_TYPE))
+#define CAMEL_TEST_SESSION(obj)     (G_TYPE_CHECK_INSTANCE_CAST((obj), CAMEL_TEST_SESSION_TYPE, CamelTestSession))
+#define CAMEL_TEST_SESSION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CAMEL_TEST_SESSION_TYPE, CamelTestSessionClass))
+#define CAMEL_TEST_IS_SESSION(o)    (G_TYPE_CHECK_INSTANCE_TYPE((o), CAMEL_TEST_SESSION_TYPE))
 
 typedef struct _CamelTestSession {
        CamelSession parent_object;
@@ -37,26 +37,24 @@ class_init (CamelTestSessionClass *camel_test_session_class)
        CamelSessionClass *camel_session_class =
                CAMEL_SESSION_CLASS (camel_test_session_class);
 
-       /* virtual method override */
        camel_session_class->get_password = get_password;
 }
 
-static CamelType
+static GType
 camel_test_session_get_type (void)
 {
-       static CamelType type = CAMEL_INVALID_TYPE;
+       static GType type = G_TYPE_INVALID;
 
-       if (type == CAMEL_INVALID_TYPE) {
+       if (G_UNLIKELY (type == G_TYPE_INVALID))
                type = camel_type_register (
-                       camel_test_session_get_type (),
+                       CAMEL_TEST_SESSION_TYPE,
                        "CamelTestSession",
                        sizeof (CamelTestSession),
                        sizeof (CamelTestSessionClass),
-                       (CamelObjectClassInitFunc) class_init,
+                       (GClassInitFunc) class_init,
                        NULL,
-                       (CamelObjectInitFunc) init,
+                       (GInstanceInitFunc) init,
                        NULL);
-       }
 
        return type;
 }
@@ -73,8 +71,7 @@ camel_test_session_new (const gchar *path)
 {
        CamelSession *session;
 
-       session = CAMEL_SESSION (camel_object_new (CAMEL_TEST_SESSION_TYPE));
-
+       session = g_object_new (CAMEL_TYPE_TEST_SESSION, NULL);
        camel_session_construct (session, path);
 
        return session;
@@ -127,8 +124,8 @@ gint main (gint argc, gchar **argv)
        camel_cipher_validity_free (valid);
        camel_test_pull ();
 
-       camel_object_unref (CAMEL_OBJECT (stream1));
-       camel_object_unref (CAMEL_OBJECT (stream2));
+       g_object_unref (CAMEL_OBJECT (stream1));
+       g_object_unref (CAMEL_OBJECT (stream2));
 
        stream1 = camel_stream_mem_new ();
        stream2 = camel_stream_mem_new ();
@@ -163,8 +160,8 @@ gint main (gint argc, gchar **argv)
        g_free (after);
        camel_test_pull ();
 
-       camel_object_unref (CAMEL_OBJECT (ctx));
-       camel_object_unref (CAMEL_OBJECT (session));
+       g_object_unref (CAMEL_OBJECT (ctx));
+       g_object_unref (CAMEL_OBJECT (session));
 
        camel_test_end ();
 
index c45cfea..e6e12c9 100644 (file)
@@ -8,7 +8,8 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-gint main(gint argc, gchar **argv)
+gint
+main(gint argc, gchar **argv)
 {
        CamelSeekableStream *ss = NULL;
        gint i;
index 22ab779..5cc16ac 100644 (file)
@@ -8,15 +8,12 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
-gint main(gint argc, gchar **argv)
+gint
+main(gint argc, gchar **argv)
 {
        CamelSeekableStream *ss = NULL;
-       gint i;
-       gint fd = -1;
-       struct stat st;
-       gint size;
-       gchar buffer[1024];
        GByteArray *ba;
+       gint i;
 
        camel_test_init(argc, argv);
 
index 0f48fca..6f52e42 100644 (file)
@@ -29,7 +29,8 @@ struct {
        { 10245, CAMEL_STREAM_UNBOUND },
 };
 
-gint main(gint argc, gchar **argv)
+gint
+main(gint argc, gchar **argv)
 {
        CamelSeekableStream *ss = NULL;
        gint i, j;
index 2b7704a..2e37ee0 100644 (file)
@@ -14,7 +14,7 @@ HTML_DIR = $(datadir)/gtk-doc/html
 SCAN_OPTIONS = --deprecated-guards="CAMEL_DISABLE_DEPRECATED"
 
 # Extra options to pass to gtkdoc-scangobj
-SCANGOBJ_OPTIONS=--type-init-func="camel_init (\".\", 0)"
+SCANGOBJ_OPTIONS =
 
 # Extra options to supply to gtkdoc-mkdb
 MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=camel
@@ -26,8 +26,9 @@ GTKDOC_CFLAGS =               \
        -I$(top_builddir)/camel \
        $(GLIB_CFLAGS)
 
-GTKDOC_LIBS =                                  \
-       $(top_builddir)/camel/libcamel-2.0.la   \
+GTKDOC_LIBS =                                          \
+       $(top_builddir)/camel/libcamel-1.2.la           \
+       $(top_builddir)/camel/libcamel-provider-1.2.la  \
        $(GLIB_LIBS)
 
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
@@ -51,19 +52,11 @@ IGNORE_HFILES =                     \
        camel-net-utils-win32.h         \
        camel-nntp-private.h            \
        camel-nntp-types.h              \
-       camel-private.h                 \
        camel-search-private.h          \
        camel-types.h                   \
-       camel-imapx-exception.h         \
-       camel-imapx-folder.h            \
-       camel-imapx-server.h            \
-       camel-imapx-store.h             \
-       camel-imapx-store-summary.h     \
-       camel-imapx-stream.h            \
-       camel-imapx-summary.h           \
-       camel-imapx-tokenise.h          \
-       camel-imapx-utils.h             \
-       camel-imapx-view-summary.h
+       camel-win32.h                   \
+       providers                       \
+       tests
 
 # This includes the standard gtk-doc make rules, copied by gtkdocize.
 include $(top_srcdir)/gtk-doc.make
index bf0147c..8bfdeba 100644 (file)
@@ -15,9 +15,13 @@ camel_address_remove
 <SUBSECTION Standard>
 CAMEL_ADDRESS
 CAMEL_IS_ADDRESS
+CAMEL_TYPE_ADDRESS
 CAMEL_ADDRESS_CLASS
+CAMEL_IS_ADDRESS_CLASS
+CAMEL_ADDRESS_GET_CLASS
 CamelAddressClass
 <SUBSECTION Private>
+CamelAddressPrivate
 camel_address_get_type
 </SECTION>
 
@@ -54,9 +58,23 @@ camel_key_file_delete
 camel_key_file_write
 camel_key_file_read
 <SUBSECTION Standard>
+CAMEL_BLOCK_FILE
+CAMEL_IS_BLOCK_FILE
+CAMEL_TYPE_BLOCK_FILE
+CAMEL_BLOCK_FILE_CLASS
+CAMEL_IS_BLOCK_FILE_CLASS
+CAMEL_BLOCK_FILE_GET_CLASS
+CAMEL_KEY_FILE
+CAMEL_IS_KEY_FILE
+CAMEL_TYPE_KEY_FILE
+CAMEL_KEY_FILE_CLASS
+CAMEL_IS_KEY_FILE_CLASS
+CAMEL_KEY_FILE_GET_CLASS
 CamelBlockFileClass
 CamelKeyFileClass
 <SUBSECTION Private>
+CamelBlockFilePrivate
+CamelKeyFilePrivate
 camel_block_file_get_type
 camel_key_file_get_type
 </SECTION>
@@ -96,10 +114,13 @@ camel_cert_set_trust
 <SUBSECTION Standard>
 CAMEL_CERTDB
 CAMEL_IS_CERTDB
-CAMEL_CERTDB_TYPE
+CAMEL_TYPE_CERTDB
 CAMEL_CERTDB_CLASS
+CAMEL_IS_CERTDB_CLASS
+CAMEL_CERTDB_GET_CLASS
 CamelCertDBClass
 <SUBSECTION Private>
+CamelCertDBPrivate
 camel_certdb_get_type
 </SECTION>
 
@@ -114,7 +135,7 @@ camel_cipher_validity_sign_t
 camel_cipher_validity_encrypt_t
 camel_cipher_validity_mode_t
 camel_cipher_context_new
-camel_cipher_context_construct
+camel_cipher_context_get_session
 camel_cipher_id_to_hash
 camel_cipher_hash_to_id
 camel_cipher_sign
@@ -139,10 +160,13 @@ camel_cipher_canonical_to_stream
 <SUBSECTION Standard>
 CAMEL_CIPHER_CONTEXT
 CAMEL_IS_CIPHER_CONTEXT
-CAMEL_CIPHER_CONTEXT_TYPE
+CAMEL_TYPE_CIPHER_CONTEXT
 CAMEL_CIPHER_CONTEXT_CLASS
+CAMEL_IS_CIPHER_CONTEXT_CLASS
+CAMEL_CIPHER_CONTEXT_GET_CLASS
 CamelCipherContextClass
 <SUBSECTION Private>
+CamelCipherContextPrivate
 camel_cipher_context_get_type
 </SECTION>
 
@@ -153,19 +177,20 @@ CamelDataCache
 camel_data_cache_new
 camel_data_cache_set_expire_age
 camel_data_cache_set_expire_access
-camel_data_cache_rename
 camel_data_cache_add
 camel_data_cache_get
 camel_data_cache_remove
-camel_data_cache_clear
 camel_data_cache_get_filename
 <SUBSECTION Standard>
 CAMEL_DATA_CACHE
 CAMEL_IS_DATA_CACHE
-CAMEL_DATA_CACHE_TYPE
+CAMEL_TYPE_DATA_CACHE
 CAMEL_DATA_CACHE_CLASS
+CAMEL_IS_DATA_CACHE_CLASS
+CAMEL_DATA_CACHE_GET_CLASS
 CamelDataCacheClass
 <SUBSECTION Private>
+CamelDataCachePrivate
 camel_data_cache_get_type
 </SECTION>
 
@@ -185,10 +210,13 @@ camel_data_wrapper_is_offline
 <SUBSECTION Standard>
 CAMEL_DATA_WRAPPER
 CAMEL_IS_DATA_WRAPPER
-CAMEL_DATA_WRAPPER_TYPE
+CAMEL_TYPE_DATA_WRAPPER
 CAMEL_DATA_WRAPPER_CLASS
+CAMEL_IS_DATA_WRAPPER_CLASS
+CAMEL_DATA_WRAPPER_GET_CLASS
 CamelDataWrapperClass
 <SUBSECTION Private>
+CamelDataWrapperPrivate
 camel_data_wrapper_get_type
 </SECTION>
 
@@ -281,8 +309,10 @@ camel_disco_diary_uidmap_lookup
 <SUBSECTION Standard>
 CAMEL_DISCO_DIARY
 CAMEL_IS_DISCO_DIARY
-CAMEL_DISCO_DIARY_TYPE
+CAMEL_TYPE_DISCO_DIARY
 CAMEL_DISCO_DIARY_CLASS
+CAMEL_IS_DISCO_DIARY_CLASS
+CAMEL_DISCO_DIARY_GET_CLASS
 CamelDiscoDiaryClass
 <SUBSECTION Private>
 camel_disco_diary_get_type
@@ -298,14 +328,38 @@ camel_disco_folder_prepare_for_offline
 <SUBSECTION Standard>
 CAMEL_DISCO_FOLDER
 CAMEL_IS_DISCO_FOLDER
-CAMEL_DISCO_FOLDER_TYPE
+CAMEL_TYPE_DISCO_FOLDER
 CAMEL_DISCO_FOLDER_CLASS
+CAMEL_IS_DISCO_FOLDER_CLASS
+CAMEL_DISCO_FOLDER_GET_CLASS
 CamelDiscoFolderClass
 <SUBSECTION Private>
 camel_disco_folder_get_type
 </SECTION>
 
 <SECTION>
+<FILE>camel-disco-store</FILE>
+<TITLE>CamelDiscoStore</TITLE>
+CamelDiscoStore
+CamelDiscoStoreStatus
+camel_disco_store_status
+camel_disco_store_set_status
+camel_disco_store_can_work_offline
+camel_disco_store_check_online
+camel_disco_store_prepare_for_offline
+<SUBSECTION Standard>
+CAMEL_DISCO_STORE
+CAMEL_IS_DISCO_STORE
+CAMEL_TYPE_DISCO_STORE
+CAMEL_DISCO_STORE_CLASS
+CAMEL_IS_DISCO_STORE_CLASS
+CAMEL_DISCO_STORE_GET_CLASS
+CamelDiscoStoreClass
+<SUBSECTION Private>
+camel_disco_store_get_type
+</SECTION>
+
+<SECTION>
 <FILE>camel-filter-driver</FILE>
 <TITLE>CamelFilterDriver</TITLE>
 CamelFilterDriver
@@ -327,10 +381,13 @@ camel_filter_driver_filter_folder
 <SUBSECTION Standard>
 CAMEL_FILTER_DRIVER
 CAMEL_IS_FILTER_DRIVER
-CAMEL_FILTER_DRIVER_TYPE
+CAMEL_TYPE_FILTER_DRIVER
 CAMEL_FILTER_DRIVER_CLASS
+CAMEL_IS_FILTER_DRIVER_CLASS
+CAMEL_FILTER_DRIVER_GET_CLASS
 CamelFilterDriverClass
 <SUBSECTION Private>
+CamelFilterDriverPrivate
 camel_filter_driver_get_type
 </SECTION>
 
@@ -416,10 +473,13 @@ camel_folder_change_info_recent_uid
 <SUBSECTION Standard>
 CAMEL_FOLDER
 CAMEL_IS_FOLDER
-CAMEL_FOLDER_TYPE
+CAMEL_TYPE_FOLDER
 CAMEL_FOLDER_CLASS
+CAMEL_IS_FOLDER_CLASS
+CAMEL_FOLDER_GET_CLASS
 CamelFolderClass
 <SUBSECTION Private>
+CamelFolderPrivate
 camel_folder_get_type
 </SECTION>
 
@@ -439,10 +499,13 @@ camel_folder_search_free_result
 <SUBSECTION Standard>
 CAMEL_FOLDER_SEARCH
 CAMEL_IS_FOLDER_SEARCH
-CAMEL_FOLDER_SEARCH_TYPE
+CAMEL_TYPE_FOLDER_SEARCH
 CAMEL_FOLDER_SEARCH_CLASS
+CAMEL_IS_FOLDER_SEARCH_CLASS
+CAMEL_FOLDER_SEARCH_GET_CLASS
 CamelFolderSearchClass
 <SUBSECTION Private>
+CamelFolderSearchPrivate
 camel_folder_search_get_type
 </SECTION>
 
@@ -563,10 +626,13 @@ camel_folder_summary_migrate_infos
 <SUBSECTION Standard>
 CAMEL_FOLDER_SUMMARY
 CAMEL_IS_FOLDER_SUMMARY
-CAMEL_FOLDER_SUMMARY_TYPE
+CAMEL_TYPE_FOLDER_SUMMARY
 CAMEL_FOLDER_SUMMARY_CLASS
+CAMEL_IS_FOLDER_SUMMARY_CLASS
+CAMEL_FOLDER_SUMMARY_GET_CLASS
 CamelFolderSummaryClass
 <SUBSECTION Private>
+CamelFolderSummaryPrivate
 camel_folder_summary_get_type
 </SECTION>
 
@@ -579,10 +645,13 @@ camel_gpg_context_set_always_trust
 <SUBSECTION Standard>
 CAMEL_GPG_CONTEXT
 CAMEL_IS_GPG_CONTEXT
-CAMEL_GPG_CONTEXT_TYPE
+CAMEL_TYPE_GPG_CONTEXT
 CAMEL_GPG_CONTEXT_CLASS
+CAMEL_IS_GPG_CONTEXT_CLASS
+CAMEL_GPG_CONTEXT_GET_CLASS
 CamelGpgContextClass
 <SUBSECTION Private>
+CamelGpgContextPrivate
 camel_gpg_context_get_type
 </SECTION>
 
@@ -601,9 +670,13 @@ camel_html_parser_attr_list
 <SUBSECTION Standard>
 CAMEL_HTML_PARSER
 CAMEL_IS_HTML_PARSER
+CAMEL_TYPE_HTML_PARSER
 CAMEL_HTML_PARSER_CLASS
+CAMEL_IS_HTML_PARSER_CLASS
+CAMEL_HTML_PARSER_GET_CLASS
 CamelHTMLParserClass
 <SUBSECTION Private>
+CamelHTMLParserPrivate
 camel_html_parser_get_type
 </SECTION>
 
@@ -621,8 +694,10 @@ camel_http_stream_get_content_type
 <SUBSECTION Standard>
 CAMEL_HTTP_STREAM
 CAMEL_IS_HTTP_STREAM
-CAMEL_HTTP_STREAM_TYPE
+CAMEL_TYPE_HTTP_STREAM
 CAMEL_HTTP_STREAM_CLASS
+CAMEL_IS_HTTP_STREAM_CLASS
+CAMEL_HTTP_STREAM_GET_CLASS
 CamelHttpStreamClass
 <SUBSECTION Private>
 camel_http_stream_get_type
@@ -647,7 +722,6 @@ CAMEL_INDEX_DELETED
 camel_index_new
 camel_index_construct
 camel_index_rename
-camel_index_set_normalise
 camel_index_sync
 camel_index_compress
 camel_index_delete
@@ -662,21 +736,32 @@ camel_index_names
 <SUBSECTION Standard>
 CAMEL_INDEX
 CAMEL_IS_INDEX
-camel_index_get_type
+CAMEL_TYPE_INDEX
 CAMEL_INDEX_CLASS
+CAMEL_IS_INDEX_CLASS
+CAMEL_INDEX_GET_CLASS
 CAMEL_INDEX_NAME
 CAMEL_IS_INDEX_NAME
-camel_index_name_get_type
+CAMEL_TYPE_INDEX_NAME
 CAMEL_INDEX_NAME_CLASS
+CAMEL_IS_INDEX_NAME_CLASS
+CAMEL_INDEX_NAME_GET_CLASS
 CAMEL_INDEX_CURSOR
 CAMEL_IS_INDEX_CURSOR
-camel_index_cursor_get_type
+CAMEL_TYPE_INDEX_CURSOR
 CAMEL_INDEX_CURSOR_CLASS
+CAMEL_IS_INDEX_CURSOR_CLASS
+CAMEL_INDEX_CURSOR_GET_CLASS
 CamelIndexClass
 CamelIndexCursorClass
 CamelIndexNameClass
 <SUBSECTION Private>
+CamelIndexPrivate
+CamelIndexNamePrivate
+CamelIndexCursorPrivate
+camel_index_get_type
 camel_index_name_get_type
+camel_index_cursor_get_type
 </SECTION>
 
 <SECTION>
@@ -693,9 +778,13 @@ camel_internet_address_format_address
 <SUBSECTION Standard>
 CAMEL_INTERNET_ADDRESS
 CAMEL_IS_INTERNET_ADDRESS
+CAMEL_TYPE_INTERNET_ADDRESS
 CAMEL_INTERNET_ADDRESS_CLASS
+CAMEL_IS_INTERNET_ADDRESS_CLASS
+CAMEL_INTERNET_ADDRESS_GET_CLASS
 CamelInternetAddressClass
 <SUBSECTION Private>
+CamelInternetAddressPrivate
 camel_internet_address_get_type
 </SECTION>
 
@@ -710,15 +799,18 @@ camel_medium_remove_header
 camel_medium_get_header
 camel_medium_get_headers
 camel_medium_free_headers
-camel_medium_get_content_object
-camel_medium_set_content_object
+camel_medium_get_content
+camel_medium_set_content
 <SUBSECTION Standard>
 CAMEL_MEDIUM
 CAMEL_IS_MEDIUM
-CAMEL_MEDIUM_TYPE
+CAMEL_TYPE_MEDIUM
 CAMEL_MEDIUM_CLASS
+CAMEL_IS_MEDIUM_CLASS
+CAMEL_MEDIUM_GET_CLASS
 CamelMediumClass
 <SUBSECTION Private>
+CamelMediumPrivate
 camel_medium_get_type
 </SECTION>
 
@@ -728,13 +820,16 @@ camel_medium_get_type
 CamelMimeFilterBasic
 CamelMimeFilterBasicType
 camel_mime_filter_basic_new
-camel_mime_filter_basic_new_type
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_BASIC
 CAMEL_IS_MIME_FILTER_BASIC
+CAMEL_TYPE_MIME_FILTER_BASIC
 CAMEL_MIME_FILTER_BASIC_CLASS
+CAMEL_IS_MIME_FILTER_BASIC_CLASS
+CAMEL_MIME_FILTER_BASIC_GET_CLASS
 CamelMimeFilterBasicClass
 <SUBSECTION Private>
+CamelMimeFilterBasicPrivate
 camel_mime_filter_basic_get_type
 </SECTION>
 
@@ -751,9 +846,13 @@ camel_mime_filter_bestenc_set_flags
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_BESTENC
 CAMEL_IS_MIME_FILTER_BESTENC
+CAMEL_TYPE_MIME_FILTER_BESTENC
 CAMEL_MIME_FILTER_BESTENC_CLASS
+CAMEL_IS_MIME_FILTER_BESTENC_CLASS
+CAMEL_MIME_FILTER_BESTENC_GET_CLASS
 CamelMimeFilterBestencClass
 <SUBSECTION Private>
+CamelMimeFilterBestencPrivate
 camel_mime_filter_bestenc_get_type
 </SECTION>
 
@@ -765,10 +864,13 @@ camel_mime_filter_canon_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_CANON
 CAMEL_IS_MIME_FILTER_CANON
-CAMEL_MIME_FILTER_CANON_TYPE
+CAMEL_TYPE_MIME_FILTER_CANON
 CAMEL_MIME_FILTER_CANON_CLASS
+CAMEL_IS_MIME_FILTER_CANON_CLASS
+CAMEL_MIME_FILTER_CANON_GET_CLASS
 CamelMimeFilterCanonClass
 <SUBSECTION Private>
+CamelMimeFilterCanonPrivate
 camel_mime_filter_canon_get_type
 </SECTION>
 
@@ -777,13 +879,16 @@ camel_mime_filter_canon_get_type
 <TITLE>CamelMimeFilterCharset</TITLE>
 CamelMimeFilterCharset
 camel_mime_filter_charset_new
-camel_mime_filter_charset_new_convert
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_CHARSET
 CAMEL_IS_MIME_FILTER_CHARSET
+CAMEL_TYPE_MIME_FILTER_CHARSET
 CAMEL_MIME_FILTER_CHARSET_CLASS
+CAMEL_IS_MIME_FILTER_CHARSET_CLASS
+CAMEL_MIME_FILTER_CHARSET_GET_CLASS
 CamelMimeFilterCharsetClass
 <SUBSECTION Private>
+CamelMimeFilterCharsetPrivate
 camel_mime_filter_charset_get_type
 </SECTION>
 
@@ -797,10 +902,13 @@ camel_mime_filter_crlf_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_CRLF
 CAMEL_IS_MIME_FILTER_CRLF
-CAMEL_MIME_FILTER_CRLF_TYPE
+CAMEL_TYPE_MIME_FILTER_CRLF
 CAMEL_MIME_FILTER_CRLF_CLASS
+CAMEL_IS_MIME_FILTER_CRLF_CLASS
+CAMEL_MIME_FILTER_CRLF_GET_CLASS
 CamelMimeFilterCRLFClass
 <SUBSECTION Private>
+CamelMimeFilterCRLFPrivate
 camel_mime_filter_crlf_get_type
 </SECTION>
 
@@ -816,8 +924,11 @@ CAMEL_MIME_FILTER_ENRICHED
 CAMEL_IS_MIME_FILTER_ENRICHED
 CAMEL_TYPE_MIME_FILTER_ENRICHED
 CAMEL_MIME_FILTER_ENRICHED_CLASS
+CAMEL_IS_MIME_FILTER_ENRICHED_CLASS
+CAMEL_MIME_FILTER_ENRICHED_GET_CLASS
 CamelMimeFilterEnrichedClass
 <SUBSECTION Private>
+CamelMimeFilterEnrichedPrivate
 camel_mime_filter_enriched_get_type
 </SECTION>
 
@@ -829,9 +940,13 @@ camel_mime_filter_from_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_FROM
 CAMEL_IS_MIME_FILTER_FROM
+CAMEL_TYPE_MIME_FILTER_FROM
 CAMEL_MIME_FILTER_FROM_CLASS
+CAMEL_IS_MIME_FILTER_FROM_CLASS
+CAMEL_MIME_FILTER_FROM_GET_CLASS
 CamelMimeFilterFromClass
 <SUBSECTION Private>
+CamelMimeFilterFromPrivate
 camel_mime_filter_from_get_type
 </SECTION>
 
@@ -850,6 +965,7 @@ CAMEL_IS_MIME_FILTER_GZIP_CLASS
 CAMEL_MIME_FILTER_GZIP_GET_CLASS
 CamelMimeFilterGZipClass
 <SUBSECTION Private>
+CamelMimeFilterGZipPrivate
 camel_mime_filter_gzip_get_type
 </SECTION>
 
@@ -861,9 +977,13 @@ camel_mime_filter_html_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_HTML
 CAMEL_IS_MIME_FILTER_HTML
+CAMEL_TYPE_MIME_FILTER_HTML
 CAMEL_MIME_FILTER_HTML_CLASS
+CAMEL_IS_MIME_FILTER_HTML_CLASS
+CAMEL_MIME_FILTER_HTML_GET_CLASS
 CamelMimeFilterHTMLClass
 <SUBSECTION Private>
+CamelMimeFilterHTMLPrivate
 camel_mime_filter_html_get_type
 </SECTION>
 
@@ -872,15 +992,18 @@ camel_mime_filter_html_get_type
 <TITLE>CamelMimeFilterIndex</TITLE>
 CamelMimeFilterIndex
 camel_mime_filter_index_new
-camel_mime_filter_index_new_index
 camel_mime_filter_index_set_name
 camel_mime_filter_index_set_index
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_INDEX
 CAMEL_IS_MIME_FILTER_INDEX
+CAMEL_TYPE_MIME_FILTER_INDEX
 CAMEL_MIME_FILTER_INDEX_CLASS
+CAMEL_IS_MIME_FILTER_INDEX_CLASS
+CAMEL_MIME_FILTER_INDEX_GET_CLASS
 CamelMimeFilterIndexClass
 <SUBSECTION Private>
+CamelMimeFilterIndexPrivate
 camel_mime_filter_index_get_type
 </SECTION>
 
@@ -892,10 +1015,13 @@ camel_mime_filter_linewrap_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_LINEWRAP
 CAMEL_IS_MIME_FILTER_LINEWRAP
-CAMEL_MIME_FILTER_LINEWRAP_TYPE
+CAMEL_TYPE_MIME_FILTER_LINEWRAP
 CAMEL_MIME_FILTER_LINEWRAP_CLASS
+CAMEL_IS_MIME_FILTER_LINEWRAP_CLASS
+CAMEL_MIME_FILTER_LINEWRAP_GET_CLASS
 CamelMimeFilterLinewrapClass
 <SUBSECTION Private>
+CamelMimeFilterLinewrapPrivate
 camel_mime_filter_linewrap_get_type
 </SECTION>
 
@@ -905,12 +1031,15 @@ camel_mime_filter_linewrap_get_type
 CamelMimeFilterPgp
 camel_mime_filter_pgp_new
 <SUBSECTION Standard>
-CAMEL_MIME_FILTER_PGP_TYPE
 CAMEL_MIME_FILTER_PGP
-CAMEL_MIME_FILTER_PGP_CLASS
 CAMEL_IS_MIME_FILTER_PGP
+CAMEL_TYPE_MIME_FILTER_PGP
+CAMEL_MIME_FILTER_PGP_CLASS
+CAMEL_IS_MIME_FILTER_PGP_CLASS
+CAMEL_MIME_FILTER_PGP_GET_CLASS
 CamelMimeFilterPgpClass
 <SUBSECTION Private>
+CamelMimeFilterPgpPrivate
 camel_mime_filter_pgp_get_type
 </SECTION>
 
@@ -919,14 +1048,16 @@ camel_mime_filter_pgp_get_type
 <TITLE>CamelMimeFilterSave</TITLE>
 CamelMimeFilterSave
 camel_mime_filter_save_new
-camel_mime_filter_save_new_with_stream
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_SAVE
 CAMEL_IS_MIME_FILTER_SAVE
-CAMEL_MIME_FILTER_SAVE_TYPE
+CAMEL_TYPE_MIME_FILTER_SAVE
 CAMEL_MIME_FILTER_SAVE_CLASS
+CAMEL_IS_MIME_FILTER_SAVE_CLASS
+CAMEL_MIME_FILTER_SAVE_GET_CLASS
 CamelMimeFilterSaveClass
 <SUBSECTION Private>
+CamelMimeFilterSavePrivate
 camel_mime_filter_save_get_type
 </SECTION>
 
@@ -949,9 +1080,13 @@ camel_text_to_html
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_TOHTML
 CAMEL_IS_MIME_FILTER_TOHTML
+CAMEL_TYPE_MIME_FILTER_TOHTML
 CAMEL_MIME_FILTER_TOHTML_CLASS
+CAMEL_IS_MIME_FILTER_TOHTML_CLASS
+CAMEL_MIME_FILTER_TOHTML_GET_CLASS
 CamelMimeFilterToHTMLClass
 <SUBSECTION Private>
+CamelMimeFilterToHTMLPrivate
 camel_mime_filter_tohtml_get_type
 </SECTION>
 
@@ -965,9 +1100,13 @@ camel_mime_filter_windows_real_charset
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_WINDOWS
 CAMEL_IS_MIME_FILTER_WINDOWS
+CAMEL_TYPE_MIME_FILTER_WINDOWS
 CAMEL_MIME_FILTER_WINDOWS_CLASS
+CAMEL_IS_MIME_FILTER_WINDOWS_CLASS
+CAMEL_MIME_FILTER_WINDOWS_GET_CLASS
 CamelMimeFilterWindowsClass
 <SUBSECTION Private>
+CamelMimeFilterWindowsPrivate
 camel_mime_filter_windows_get_type
 </SECTION>
 
@@ -1003,6 +1142,7 @@ CAMEL_IS_MIME_FILTER_YENC_CLASS
 CAMEL_MIME_FILTER_YENC_GET_CLASS
 CamelMimeFilterYencClass
 <SUBSECTION Private>
+CamelMimeFilterYencPrivate
 camel_mime_filter_yenc_get_type
 </SECTION>
 
@@ -1019,10 +1159,13 @@ camel_mime_filter_set_size
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER
 CAMEL_IS_MIME_FILTER
-CAMEL_MIME_FILTER_TYPE
+CAMEL_TYPE_MIME_FILTER
 CAMEL_MIME_FILTER_CLASS
+CAMEL_IS_MIME_FILTER_CLASS
+CAMEL_MIME_FILTER_GET_CLASS
 CamelMimeFilterClass
 <SUBSECTION Private>
+CamelMimeFilterPrivate
 camel_mime_filter_get_type
 </SECTION>
 
@@ -1033,10 +1176,14 @@ CamelMimeFilterProgress
 camel_mime_filter_progress_new
 <SUBSECTION Standard>
 CAMEL_MIME_FILTER_PROGRESS
-CAMEL_MIME_FILTER_PROGRESS_CLASS
 CAMEL_IS_MIME_FILTER_PROGRESS
+CAMEL_TYPE_MIME_FILTER_PROGRESS
+CAMEL_MIME_FILTER_PROGRESS_CLASS
+CAMEL_IS_MIME_FILTER_PROGRESS_CLASS
+CAMEL_MIME_FILTER_PROGRESS_GET_CLASS
 CamelMimeFilterProgressClass
 <SUBSECTION Private>
+CamelMimeFilterProgressPrivate
 camel_mime_filter_progress_get_type
 </SECTION>
 
@@ -1077,8 +1224,10 @@ camel_mime_message_dump
 <SUBSECTION Standard>
 CAMEL_MIME_MESSAGE
 CAMEL_IS_MIME_MESSAGE
-CAMEL_MIME_MESSAGE_TYPE
+CAMEL_TYPE_MIME_MESSAGE
 CAMEL_MIME_MESSAGE_CLASS
+CAMEL_IS_MIME_MESSAGE_CLASS
+CAMEL_MIME_MESSAGE_GET_CLASS
 CamelMimeMessageClass
 <SUBSECTION Private>
 camel_mime_message_get_type
@@ -1120,9 +1269,13 @@ camel_mime_parser_tell_start_boundary
 <SUBSECTION Standard>
 CAMEL_MIME_PARSER
 CAMEL_IS_MIME_PARSER
+CAMEL_TYPE_MIME_PARSER
 CAMEL_MIME_PARSER_CLASS
+CAMEL_IS_MIME_PARSER_CLASS
+CAMEL_MIME_PARSER_GET_CLASS
 CamelMimeParserClass
 <SUBSECTION Private>
+CamelMimeParserPrivate
 camel_mime_parser_get_type
 </SECTION>
 
@@ -1140,8 +1293,8 @@ camel_mime_part_set_filename
 camel_mime_part_get_filename
 camel_mime_part_set_content_id
 camel_mime_part_get_content_id
-camel_mime_part_set_content_MD5
-camel_mime_part_get_content_MD5
+camel_mime_part_set_content_md5
+camel_mime_part_get_content_md5
 camel_mime_part_set_content_location
 camel_mime_part_get_content_location
 camel_mime_part_set_encoding
@@ -1158,10 +1311,13 @@ camel_mime_message_build_preview
 <SUBSECTION Standard>
 CAMEL_MIME_PART
 CAMEL_IS_MIME_PART
-CAMEL_MIME_PART_TYPE
+CAMEL_TYPE_MIME_PART
 CAMEL_MIME_PART_CLASS
+CAMEL_IS_MIME_PART_CLASS
+CAMEL_MIME_PART_GET_CLASS
 CamelMimePartClass
 <SUBSECTION Private>
+CamelMimePartPrivate
 camel_mime_part_get_type
 </SECTION>
 
@@ -1189,8 +1345,10 @@ camel_multipart_encrypted_new
 <SUBSECTION Standard>
 CAMEL_MULTIPART_ENCRYPTED
 CAMEL_IS_MULTIPART_ENCRYPTED
-CAMEL_MULTIPART_ENCRYPTED_TYPE
+CAMEL_TYPE_MULTIPART_ENCRYPTED
 CAMEL_MULTIPART_ENCRYPTED_CLASS
+CAMEL_IS_MULTIPART_ENCRYPTED_CLASS
+CAMEL_MULTIPART_ENCRYPTED_GET_CLASS
 CamelMultipartEncryptedClass
 <SUBSECTION Private>
 camel_multipart_encrypted_get_type
@@ -1205,8 +1363,10 @@ camel_multipart_signed_get_content_stream
 <SUBSECTION Standard>
 CAMEL_MULTIPART_SIGNED
 CAMEL_IS_MULTIPART_SIGNED
-CAMEL_MULTIPART_SIGNED_TYPE
+CAMEL_TYPE_MULTIPART_SIGNED
 CAMEL_MULTIPART_SIGNED_CLASS
+CAMEL_IS_MULTIPART_SIGNED_CLASS
+CAMEL_MULTIPART_SIGNED_GET_CLASS
 CamelMultipartSignedClass
 <SUBSECTION Private>
 camel_multipart_signed_get_type
@@ -1231,49 +1391,43 @@ camel_multipart_construct_from_parser
 <SUBSECTION Standard>
 CAMEL_MULTIPART
 CAMEL_IS_MULTIPART
-CAMEL_MULTIPART_TYPE
+CAMEL_TYPE_MULTIPART
 CAMEL_MULTIPART_CLASS
+CAMEL_IS_MULTIPART_CLASS
+CAMEL_MULTIPART_GET_CLASS
 CamelMultipartClass
 <SUBSECTION Private>
 camel_multipart_get_type
 </SECTION>
 
 <SECTION>
+<FILE>camel-nntp-address</FILE>
+<TITLE>CamelNNTPAddress</TITLE>
+CamelNNTPAddress
+camel_nntp_address_new
+camel_nntp_address_add
+camel_nntp_address_get
+<SUBSECTION Standard>
+CAMEL_NNTP_ADDRESS
+CAMEL_IS_NNTP_ADDRESS
+CAMEL_TYPE_NNTP_ADDRESS
+CAMEL_NNTP_ADDRESS_CLASS
+CAMEL_IS_NNTP_ADDRESS_CLASS
+CAMEL_NNTP_ADDRESS_GET_CLASS
+CamelNNTPAddressClass
+<SUBSECTION Private>
+CamelNNTPAddressPrivate
+camel_nntp_address_get_type
+</SECTION>
+
+<SECTION>
 <FILE>camel-object</FILE>
 <TITLE>CamelObject</TITLE>
-CAMEL_OBJECT_TRACK_INSTANCES
-CamelType
 CamelObject
-CAMEL_CHECK_CAST
-CAMEL_CHECK_CLASS_CAST
-CAMEL_CHECK_TYPE
-CAMEL_CHECK_CLASS_TYPE
-camel_object_type
-CAMEL_OBJECT_TYPE
-CAMEL_OBJECT_GET_TYPE
 CamelObjectHookID
-CamelObjectClassInitFunc
-CamelObjectClassFinalizeFunc
-CamelObjectInitFunc
-CamelObjectFinalizeFunc
 CamelObjectEventPrepFunc
 CamelObjectEventHookFunc
-CAMEL_INVALID_TYPE
-CamelObjectFlags
-camel_type_init
-camel_type_register
-camel_type_get_global_classfuncs
-camel_type_to_name
-camel_name_to_type
 camel_object_class_add_event
-camel_object_class_dump_tree
-camel_object_cast
-camel_object_is
-camel_object_class_cast
-camel_object_class_is
-camel_object_new
-camel_object_ref
-camel_object_unref
 camel_object_hook_event
 camel_object_remove_event
 camel_object_unhook_event
@@ -1300,6 +1454,7 @@ camel_object_bag_destroy
 <SUBSECTION Standard>
 CAMEL_OBJECT
 CAMEL_IS_OBJECT
+CAMEL_TYPE_OBJECT
 CAMEL_OBJECT_CLASS
 CAMEL_IS_OBJECT_CLASS
 CAMEL_OBJECT_GET_CLASS
@@ -1309,6 +1464,112 @@ camel_object_get_type
 </SECTION>
 
 <SECTION>
+<FILE>camel-offline-folder</FILE>
+<TITLE>CamelOfflineFolder</TITLE>
+CamelOfflineFolder
+camel_offline_folder_downsync
+<SUBSECTION Standard>
+CAMEL_OFFLINE_FOLDER
+CAMEL_IS_OFFLINE_FOLDER
+CAMEL_TYPE_OFFLINE_FOLDER
+CAMEL_OFFLINE_FOLDER_CLASS
+CAMEL_IS_OFFLINE_FOLDER_CLASS
+CAMEL_OFFLINE_FOLDER_GET_CLASS
+CamelOfflineFolderClass
+<SUBSECTION Private>
+camel_offline_folder_get_type
+</SECTION>
+
+<SECTION>
+<FILE>camel-offline-journal</FILE>
+<TITLE>CamelOfflineJournal</TITLE>
+CamelOfflineJournal
+CamelOfflineJournalEntry
+camel_offline_journal_construct
+camel_offline_journal_set_filename
+camel_offline_journal_write
+camel_offline_journal_replay
+<SUBSECTION Standard>
+CAMEL_OFFLINE_JOURNAL
+CAMEL_IS_OFFLINE_JOURNAL
+CAMEL_TYPE_OFFLINE_JOURNAL
+CAMEL_OFFLINE_JOURNAL_CLASS
+CAMEL_IS_OFFLINE_JOURNAL_CLASS
+CAMEL_OFFLINE_JOURNAL_GET_CLASS
+CamelOfflineJournalClass
+<SUBSECTION Private>
+camel_offline_journal_get_type
+</SECTION>
+
+<SECTION>
+<FILE>camel-offline-store</FILE>
+<TITLE>CamelOfflineStore</TITLE>
+CamelOfflineStore
+camel_offline_store_set_network_state
+camel_offline_store_get_network_state
+camel_offline_store_prepare_for_offline
+<SUBSECTION Standard>
+CAMEL_OFFLINE_STORE
+CAMEL_IS_OFFLINE_STORE
+CAMEL_TYPE_OFFLINE_STORE
+CAMEL_OFFLINE_STORE_CLASS
+CAMEL_IS_OFFLINE_STORE_CLASS
+CAMEL_OFFLINE_STORE_GET_CLASS
+CamelOfflineStoreClass
+<SUBSECTION Private>
+camel_offline_store_get_type
+</SECTION>
+
+<SECTION>
+<FILE>camel-partition-table</FILE>
+<TITLE>CamelPartitionTable</TITLE>
+<TITLE>CamelKeyTable</TITLE>
+camel_hash_t
+CamelPartitionKey
+CamelPartitionKeyBlock
+CamelPartitionMap
+CamelPartitionMapBlock
+CamelPartitionTable
+camel_partition_table_new
+camel_partition_table_sync
+camel_partition_table_add
+camel_partition_table_lookup
+camel_partition_table_remove
+CamelKeyBlock
+CamelKeyRootBlock
+CamelKeyKey
+CAMEL_KEY_TABLE_MAX_KEY
+CamelKeyTable
+camel_key_table_new
+camel_key_table_sync
+camel_key_table_add
+camel_key_table_set_data
+camel_key_table_set_flags
+camel_key_table_lookup
+camel_key_table_next
+<SUBSECTION Standard>
+CAMEL_PARTITION_TABLE
+CAMEL_IS_PARTITION_TABLE
+CAMEL_TYPE_PARTITION_TABLE
+CAMEL_PARTITION_TABLE_CLASS
+CAMEL_IS_PARTITION_TABLE_CLASS
+CAMEL_PARTITION_TABLE_GET_CLASS
+CAMEL_KEY_TABLE
+CAMEL_IS_KEY_TABLE
+CAMEL_TYPE_KEY_TABLE
+CAMEL_KEY_TABLE_CLASS
+CAMEL_IS_KEY_TABLE_CLASS
+CAMEL_KEY_TABLE_GET_CLASS
+CamelPartitionTableClass
+CamelKeyTableClass
+<SUBSECTION Private>
+CamelPartitionTablePrivate
+CamelKeyTablePrivate
+camel_partition_table_get_type
+camel_key_table_get_type
+</SECTION>
+
+<SECTION>
 <FILE>camel-provider</FILE>
 CamelProvider
 CamelProviderType
@@ -1383,8 +1644,10 @@ camel_sasl_anonymous_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_ANONYMOUS
 CAMEL_IS_SASL_ANONYMOUS
-CAMEL_SASL_ANONYMOUS_TYPE
+CAMEL_TYPE_SASL_ANONYMOUS
 CAMEL_SASL_ANONYMOUS_CLASS
+CAMEL_IS_SASL_ANONYMOUS_CLASS
+CAMEL_SASL_ANONYMOUS_GET_CLASS
 CamelSaslAnonymousClass
 <SUBSECTION Private>
 camel_sasl_anonymous_get_type
@@ -1398,10 +1661,13 @@ camel_sasl_cram_md5_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_CRAM_MD5
 CAMEL_IS_SASL_CRAM_MD5
-CAMEL_SASL_CRAM_MD5_TYPE
+CAMEL_TYPE_SASL_CRAM_MD5
 CAMEL_SASL_CRAM_MD5_CLASS
+CAMEL_IS_SASL_CRAM_MD5_CLASS
+CAMEL_SASL_CRAM_MD5_GET_CLASS
 CamelSaslCramMd5Class
 <SUBSECTION Private>
+CamelSaslCramMd5Private
 camel_sasl_cram_md5_get_type
 </SECTION>
 
@@ -1413,10 +1679,13 @@ camel_sasl_digest_md5_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_DIGEST_MD5
 CAMEL_IS_SASL_DIGEST_MD5
-CAMEL_SASL_DIGEST_MD5_TYPE
+CAMEL_TYPE_SASL_DIGEST_MD5
 CAMEL_SASL_DIGEST_MD5_CLASS
+CAMEL_IS_SASL_DIGEST_MD5_CLASS
+CAMEL_SASL_DIGEST_MD5_GET_CLASS
 CamelSaslDigestMd5Class
 <SUBSECTION Private>
+CamelSaslDigestMd5Private
 camel_sasl_digest_md5_get_type
 </SECTION>
 
@@ -1428,10 +1697,13 @@ camel_sasl_gssapi_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_GSSAPI
 CAMEL_IS_SASL_GSSAPI
-CAMEL_SASL_GSSAPI_TYPE
+CAMEL_TYPE_SASL_GSSAPI
 CAMEL_SASL_GSSAPI_CLASS
+CAMEL_IS_SASL_GSSAPI_CLASS
+CAMEL_SASL_GSSAPI_GET_CLASS
 CamelSaslGssapiClass
 <SUBSECTION Private>
+CamelSaslGssapiPrivate
 camel_sasl_gssapi_get_type
 </SECTION>
 
@@ -1443,10 +1715,13 @@ camel_sasl_login_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_LOGIN
 CAMEL_IS_SASL_LOGIN
-CAMEL_SASL_LOGIN_TYPE
+CAMEL_TYPE_SASL_LOGIN
 CAMEL_SASL_LOGIN_CLASS
+CAMEL_IS_SASL_LOGIN_CLASS
+CAMEL_SASL_LOGIN_GET_CLASS
 CamelSaslLoginClass
 <SUBSECTION Private>
+CamelSaslLoginPrivate
 camel_sasl_login_get_type
 </SECTION>
 
@@ -1458,10 +1733,13 @@ camel_sasl_ntlm_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_NTLM
 CAMEL_IS_SASL_NTLM
-CAMEL_SASL_NTLM_TYPE
+CAMEL_TYPE_SASL_NTLM
 CAMEL_SASL_NTLM_CLASS
+CAMEL_IS_SASL_NTLM_CLASS
+CAMEL_SASL_NTLM_GET_CLASS
 CamelSaslNTLMClass
 <SUBSECTION Private>
+CamelSaslNTLMPrivate
 camel_sasl_ntlm_get_type
 </SECTION>
 
@@ -1473,10 +1751,13 @@ camel_sasl_plain_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_PLAIN
 CAMEL_IS_SASL_PLAIN
-CAMEL_SASL_PLAIN_TYPE
+CAMEL_TYPE_SASL_PLAIN
 CAMEL_SASL_PLAIN_CLASS
+CAMEL_IS_SASL_PLAIN_CLASS
+CAMEL_SASL_PLAIN_GET_CLASS
 CamelSaslPlainClass
 <SUBSECTION Private>
+CamelSaslPlainPrivate
 camel_sasl_plain_get_type
 </SECTION>
 
@@ -1488,10 +1769,13 @@ camel_sasl_popb4smtp_authtype
 <SUBSECTION Standard>
 CAMEL_SASL_POPB4SMTP
 CAMEL_IS_SASL_POPB4SMTP
-CAMEL_SASL_POPB4SMTP_TYPE
+CAMEL_TYPE_SASL_POPB4SMTP
 CAMEL_SASL_POPB4SMTP_CLASS
+CAMEL_IS_SASL_POPB4SMTP_CLASS
+CAMEL_SASL_POPB4SMTP_GET_CLASS
 CamelSaslPOPB4SMTPClass
 <SUBSECTION Private>
+CamelSaslPOPB4SMTPPrivate
 camel_sasl_popb4smtp_get_type
 </SECTION>
 
@@ -1501,17 +1785,19 @@ camel_sasl_popb4smtp_get_type
 CamelSasl
 camel_sasl_challenge
 camel_sasl_challenge_base64
-camel_sasl_authenticated
 camel_sasl_new
 camel_sasl_authtype_list
 camel_sasl_authtype
 <SUBSECTION Standard>
 CAMEL_SASL
 CAMEL_IS_SASL
-CAMEL_SASL_TYPE
+CAMEL_TYPE_SASL
 CAMEL_SASL_CLASS
+CAMEL_IS_SASL_CLASS
+CAMEL_SASL_GET_CLASS
 CamelSaslClass
 <SUBSECTION Private>
+CamelSaslPrivate
 camel_sasl_get_type
 </SECTION>
 
@@ -1537,8 +1823,10 @@ camel_seekable_stream_set_bounds
 <SUBSECTION Standard>
 CAMEL_SEEKABLE_STREAM
 CAMEL_IS_SEEKABLE_STREAM
-CAMEL_SEEKABLE_STREAM_TYPE
+CAMEL_TYPE_SEEKABLE_STREAM
 CAMEL_SEEKABLE_STREAM_CLASS
+CAMEL_IS_SEEKABLE_STREAM_CLASS
+CAMEL_SEEKABLE_STREAM_GET_CLASS
 CamelSeekableStreamClass
 <SUBSECTION Private>
 camel_seekable_stream_get_type
@@ -1552,8 +1840,10 @@ camel_seekable_substream_new
 <SUBSECTION Standard>
 CAMEL_SEEKABLE_SUBSTREAM
 CAMEL_IS_SEEKABLE_SUBSTREAM
-CAMEL_SEEKABLE_SUBSTREAM_TYPE
+CAMEL_TYPE_SEEKABLE_SUBSTREAM
 CAMEL_SEEKABLE_SUBSTREAM_CLASS
+CAMEL_IS_SEEKABLE_SUBSTREAM_CLASS
+CAMEL_SEEKABLE_SUBSTREAM_GET_CLASS
 CamelSeekableSubstreamClass
 <SUBSECTION Private>
 camel_seekable_substream_get_type
@@ -1583,10 +1873,13 @@ camel_service_query_auth_types
 <SUBSECTION Standard>
 CAMEL_SERVICE
 CAMEL_IS_SERVICE
-CAMEL_SERVICE_TYPE
+CAMEL_TYPE_SERVICE
 CAMEL_SERVICE_CLASS
+CAMEL_IS_SERVICE_CLASS
+CAMEL_SERVICE_GET_CLASS
 CamelServiceClass
 <SUBSECTION Private>
+CamelServicePrivate
 camel_service_get_type
 </SECTION>
 
@@ -1626,10 +1919,13 @@ camel_session_forward_to
 <SUBSECTION Standard>
 CAMEL_SESSION
 CAMEL_IS_SESSION
-CAMEL_SESSION_TYPE
+CAMEL_TYPE_SESSION
 CAMEL_SESSION_CLASS
+CAMEL_IS_SESSION_CLASS
+CAMEL_SESSION_GET_CLASS
 CamelSessionClass
 <SUBSECTION Private>
+CamelSessionPrivate
 camel_session_get_type
 </SECTION>
 
@@ -1646,10 +1942,13 @@ camel_smime_context_describe_part
 <SUBSECTION Standard>
 CAMEL_SMIME_CONTEXT
 CAMEL_IS_SMIME_CONTEXT
-CAMEL_SMIME_CONTEXT_TYPE
+CAMEL_TYPE_SMIME_CONTEXT
 CAMEL_SMIME_CONTEXT_CLASS
+CAMEL_IS_SMIME_CONTEXT_CLASS
+CAMEL_SMIME_CONTEXT_GET_CLASS
 CamelSMIMEContextClass
 <SUBSECTION Private>
+CamelSMIMEContextPrivate
 camel_smime_context_get_type
 </SECTION>
 
@@ -1691,9 +1990,13 @@ camel_store_info_name
 <SUBSECTION Standard>
 CAMEL_STORE_SUMMARY
 CAMEL_IS_STORE_SUMMARY
+CAMEL_TYPE_STORE_SUMMARY
 CAMEL_STORE_SUMMARY_CLASS
+CAMEL_IS_STORE_SUMMARY_CLASS
+CAMEL_STORE_SUMMARY_GET_CLASS
 CamelStoreSummaryClass
 <SUBSECTION Private>
+CamelStoreSummaryPrivate
 camel_store_summary_get_type
 </SECTION>
 
@@ -1766,10 +2069,13 @@ camel_store_can_refresh_folder
 <SUBSECTION Standard>
 CAMEL_STORE
 CAMEL_IS_STORE
-CAMEL_STORE_TYPE
+CAMEL_TYPE_STORE
 CAMEL_STORE_CLASS
+CAMEL_IS_STORE_CLASS
+CAMEL_STORE_GET_CLASS
 CamelStoreClass
 <SUBSECTION Private>
+CamelStorePrivate
 camel_isubscribe_get_type
 camel_store_get_type
 </SECTION>
@@ -1791,8 +2097,10 @@ camel_stream_write_to_stream
 <SUBSECTION Standard>
 CAMEL_STREAM
 CAMEL_IS_STREAM
-CAMEL_STREAM_TYPE
+CAMEL_TYPE_STREAM
 CAMEL_STREAM_CLASS
+CAMEL_IS_STREAM_CLASS
+CAMEL_STREAM_GET_CLASS
 CamelStreamClass
 <SUBSECTION Private>
 camel_stream_get_type
@@ -1810,10 +2118,13 @@ camel_stream_buffer_read_line
 <SUBSECTION Standard>
 CAMEL_STREAM_BUFFER
 CAMEL_IS_STREAM_BUFFER
-CAMEL_STREAM_BUFFER_TYPE
+CAMEL_TYPE_STREAM_BUFFER
 CAMEL_STREAM_BUFFER_CLASS
+CAMEL_IS_STREAM_BUFFER_CLASS
+CAMEL_STREAM_BUFFER_GET_CLASS
 CamelStreamBufferClass
 <SUBSECTION Private>
+CamelStreamBufferPrivate
 camel_stream_buffer_get_type
 </SECTION>
 
@@ -1821,15 +2132,18 @@ camel_stream_buffer_get_type
 <FILE>camel-stream-filter</FILE>
 <TITLE>CamelStreamFilter</TITLE>
 CamelStreamFilter
-camel_stream_filter_new_with_stream
 camel_stream_filter_add
 camel_stream_filter_remove
 <SUBSECTION Standard>
 CAMEL_STREAM_FILTER
 CAMEL_IS_STREAM_FILTER
+CAMEL_TYPE_STREAM_FILTER
 CAMEL_STREAM_FILTER_CLASS
+CAMEL_IS_STREAM_FILTER_CLASS
+CAMEL_STREAM_FILTER_GET_CLASS
 CamelStreamFilterClass
 <SUBSECTION Private>
+CamelStreamFilterPrivate
 camel_stream_filter_get_type
 </SECTION>
 
@@ -1844,10 +2158,13 @@ camel_stream_fs_new_with_fd_and_bounds
 <SUBSECTION Standard>
 CAMEL_STREAM_FS
 CAMEL_IS_STREAM_FS
-CAMEL_STREAM_FS_TYPE
+CAMEL_TYPE_STREAM_FS
 CAMEL_STREAM_FS_CLASS
+CAMEL_IS_STREAM_FS_CLASS
+CAMEL_STREAM_FS_GET_CLASS
 CamelStreamFsClass
 <SUBSECTION Private>
+CamelStreamFsPrivate
 camel_stream_fs_get_type
 </SECTION>
 
@@ -1864,10 +2181,13 @@ camel_stream_mem_set_buffer
 <SUBSECTION Standard>
 CAMEL_STREAM_MEM
 CAMEL_IS_STREAM_MEM
-CAMEL_STREAM_MEM_TYPE
+CAMEL_TYPE_STREAM_MEM
 CAMEL_STREAM_MEM_CLASS
+CAMEL_IS_STREAM_MEM_CLASS
+CAMEL_STREAM_MEM_GET_CLASS
 CamelStreamMemClass
 <SUBSECTION Private>
+CamelStreamMemPrivate
 camel_stream_mem_get_type
 </SECTION>
 
@@ -1879,7 +2199,10 @@ camel_stream_null_new
 <SUBSECTION Standard>
 CAMEL_STREAM_NULL
 CAMEL_IS_STREAM_NULL
+CAMEL_TYPE_STREAM_NULL
 CAMEL_STREAM_NULL_CLASS
+CAMEL_IS_STREAM_NULL_CLASS
+CAMEL_STREAM_NULL_GET_CLASS
 CamelStreamNullClass
 <SUBSECTION Private>
 camel_stream_null_get_type
@@ -1894,7 +2217,10 @@ camel_stream_process_connect
 <SUBSECTION Standard>
 CAMEL_STREAM_PROCESS
 CAMEL_IS_STREAM_PROCESS
+CAMEL_TYPE_STREAM_PROCESS
 CAMEL_STREAM_PROCESS_CLASS
+CAMEL_IS_STREAM_PROCESS_CLASS
+CAMEL_STREAM_PROCESS_GET_CLASS
 CamelStreamProcessClass
 <SUBSECTION Private>
 camel_stream_process_get_type
@@ -1909,10 +2235,12 @@ camel_stream_vfs_new_with_uri
 camel_stream_vfs_new_with_stream
 camel_stream_vfs_is_writable
 <SUBSECTION Standard>
-CAMEL_STREAM_VFS_TYPE
 CAMEL_STREAM_VFS
-CAMEL_STREAM_VFS_CLASS
 CAMEL_IS_STREAM_VFS
+CAMEL_TYPE_STREAM_VFS
+CAMEL_STREAM_VFS_CLASS
+CAMEL_IS_STREAM_VFS_CLASS
+CAMEL_STREAM_VFS_GET_CLASS
 CamelStreamVFSClass
 <SUBSECTION Private>
 camel_stream_vfs_get_type
@@ -1926,8 +2254,10 @@ camel_tcp_stream_raw_new
 <SUBSECTION Standard>
 CAMEL_TCP_STREAM_RAW
 CAMEL_IS_TCP_STREAM_RAW
-CAMEL_TCP_STREAM_RAW_TYPE
+CAMEL_TYPE_TCP_STREAM_RAW
 CAMEL_TCP_STREAM_RAW_CLASS
+CAMEL_IS_TCP_STREAM_RAW_CLASS
+CAMEL_TCP_STREAM_RAW_GET_CLASS
 CamelTcpStreamRawClass
 <SUBSECTION Private>
 camel_tcp_stream_raw_get_type
@@ -1947,10 +2277,13 @@ camel_tcp_stream_ssl_sockfd
 <SUBSECTION Standard>
 CAMEL_TCP_STREAM_SSL
 CAMEL_IS_TCP_STREAM_SSL
-CAMEL_TCP_STREAM_SSL_TYPE
+CAMEL_TYPE_TCP_STREAM_SSL
 CAMEL_TCP_STREAM_SSL_CLASS
+CAMEL_IS_TCP_STREAM_SSL_CLASS
+CAMEL_TCP_STREAM_SSL_GET_CLASS
 CamelTcpStreamSSLClass
 <SUBSECTION Private>
+CamelTcpStreamSSLPrivate
 camel_tcp_stream_ssl_get_type
 </SECTION>
 
@@ -1969,8 +2302,10 @@ camel_tcp_stream_get_remote_address
 <SUBSECTION Standard>
 CAMEL_TCP_STREAM
 CAMEL_IS_TCP_STREAM
-CAMEL_TCP_STREAM_TYPE
+CAMEL_TYPE_TCP_STREAM
 CAMEL_TCP_STREAM_CLASS
+CAMEL_IS_TCP_STREAM_CLASS
+CAMEL_TCP_STREAM_GET_CLASS
 CamelTcpStreamClass
 <SUBSECTION Private>
 camel_tcp_stream_get_type
@@ -1997,12 +2332,37 @@ camel_text_index_validate
 <SUBSECTION Standard>
 CAMEL_TEXT_INDEX
 CAMEL_IS_TEXT_INDEX
+CAMEL_TYPE_TEXT_INDEX
 CAMEL_TEXT_INDEX_CLASS
+CAMEL_IS_TEXT_INDEX_CLASS
+CAMEL_TEXT_INDEX_GET_CLASS
+CAMEL_TEXT_INDEX_CURSOR
+CAMEL_IS_TEXT_INDEX_CURSOR
+CAMEL_TYPE_TEXT_INDEX_CURSOR
+CAMEL_TEXT_INDEX_CURSOR_CLASS
+CAMEL_IS_TEXT_INDEX_CURSOR_CLASS
+CAMEL_TEXT_INDEX_CURSOR_GET_CLASS
+CAMEL_TEXT_INDEX_KEY_CURSOR
+CAMEL_IS_TEXT_INDEX_KEY_CURSOR
+CAMEL_TYPE_TEXT_INDEX_KEY_CURSOR
+CAMEL_TEXT_INDEX_KEY_CURSOR_CLASS
+CAMEL_IS_TEXT_INDEX_KEY_CURSOR_CLASS
+CAMEL_TEXT_INDEX_KEY_CURSOR_GET_CLASS
+CAMEL_TEXT_INDEX_NAME
+CAMEL_IS_TEXT_INDEX_NAME
+CAMEL_TYPE_TEXT_INDEX_NAME
+CAMEL_TEXT_INDEX_NAME_CLASS
+CAMEL_IS_TEXT_INDEX_NAME_CLASS
+CAMEL_TEXT_INDEX_NAME_GET_CLASS
 CamelTextIndexClass
 CamelTextIndexCursorClass
 CamelTextIndexKeyCursorClass
 CamelTextIndexNameClass
 <SUBSECTION Private>
+CamelTextIndexPrivate
+CamelTextIndexCursorPrivate
+CamelTextIndexKeyCursorPrivate
+CamelTextIndexNamePrivate
 camel_text_index_get_type
 camel_text_index_cursor_get_type
 camel_text_index_key_cursor_get_type
@@ -2017,10 +2377,13 @@ camel_transport_send_to
 <SUBSECTION Standard>
 CAMEL_TRANSPORT
 CAMEL_IS_TRANSPORT
-CAMEL_TRANSPORT_TYPE
+CAMEL_TYPE_TRANSPORT
 CAMEL_TRANSPORT_CLASS
+CAMEL_IS_TRANSPORT_CLASS
+CAMEL_TRANSPORT_GET_CLASS
 CamelTransportClass
 <SUBSECTION Private>
+CamelTransportPrivate
 camel_transport_get_type
 </SECTION>
 
@@ -2053,9 +2416,13 @@ camel_vee_folder_sync_headers
 <SUBSECTION Standard>
 CAMEL_VEE_FOLDER
 CAMEL_IS_VEE_FOLDER
+CAMEL_TYPE_VEE_FOLDER
 CAMEL_VEE_FOLDER_CLASS
+CAMEL_IS_VEE_FOLDER_CLASS
+CAMEL_VEE_FOLDER_GET_CLASS
 CamelVeeFolderClass
 <SUBSECTION Private>
+CamelVeeFolderPrivate
 camel_vee_folder_get_type
 </SECTION>
 
@@ -2069,7 +2436,10 @@ camel_vee_store_new
 <SUBSECTION Standard>
 CAMEL_VEE_STORE
 CAMEL_IS_VEE_STORE
+CAMEL_TYPE_VEE_STORE
 CAMEL_VEE_STORE_CLASS
+CAMEL_IS_VEE_STORE_CLASS
+CAMEL_VEE_STORE_GET_CLASS
 CamelVeeStoreClass
 <SUBSECTION Private>
 camel_vee_store_get_type
@@ -2087,7 +2457,10 @@ camel_vee_summary_load_check_unread_vfolder
 <SUBSECTION Standard>
 CAMEL_VEE_SUMMARY
 CAMEL_IS_VEE_SUMMARY
+CAMEL_TYPE_VEE_SUMMARY
 CAMEL_VEE_SUMMARY_CLASS
+CAMEL_IS_VEE_SUMMARY_CLASS
+CAMEL_VEE_SUMMARY_GET_CLASS
 CamelVeeSummaryClass
 <SUBSECTION Private>
 camel_vee_summary_get_type
@@ -2104,1081 +2477,16 @@ camel_vtrash_folder_new
 <SUBSECTION Standard>
 CAMEL_VTRASH_FOLDER
 CAMEL_IS_VTRASH_FOLDER
+CAMEL_TYPE_VTRASH_FOLDER
 CAMEL_VTRASH_FOLDER_CLASS
+CAMEL_IS_VTRASH_FOLDER_CLASS
+CAMEL_VTRASH_FOLDER_GET_CLASS
 CamelVTrashFolderClass
 <SUBSECTION Private>
 camel_vtrash_folder_get_type
 </SECTION>
 
 <SECTION>
-<FILE>camel-disco-store</FILE>
-<TITLE>CamelDiscoStore</TITLE>
-CamelDiscoStore
-CamelDiscoStoreStatus
-camel_disco_store_status
-camel_disco_store_set_status
-camel_disco_store_can_work_offline
-camel_disco_store_check_online
-camel_disco_store_prepare_for_offline
-<SUBSECTION Standard>
-CAMEL_DISCO_STORE
-CAMEL_IS_DISCO_STORE
-CAMEL_DISCO_STORE_TYPE
-CAMEL_DISCO_STORE_CLASS
-CamelDiscoStoreClass
-<SUBSECTION Private>
-camel_disco_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-offline-journal</FILE>
-<TITLE>CamelOfflineJournal</TITLE>
-CamelOfflineJournal
-CamelOfflineJournalEntry
-camel_offline_journal_construct
-camel_offline_journal_set_filename
-camel_offline_journal_write
-camel_offline_journal_replay
-<SUBSECTION Standard>
-CAMEL_OFFLINE_JOURNAL
-CAMEL_IS_OFFLINE_JOURNAL
-CAMEL_TYPE_OFFLINE_JOURNAL
-CAMEL_OFFLINE_JOURNAL_CLASS
-CAMEL_IS_OFFLINE_JOURNAL_CLASS
-CAMEL_OFFLINE_JOURNAL_GET_CLASS
-CamelOfflineJournalClass
-<SUBSECTION Private>
-camel_offline_journal_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-offline-folder</FILE>
-<TITLE>CamelOfflineFolder</TITLE>
-CamelOfflineFolder
-camel_offline_folder_downsync
-<SUBSECTION Standard>
-CAMEL_OFFLINE_FOLDER
-CAMEL_IS_OFFLINE_FOLDER
-CAMEL_OFFLINE_FOLDER_TYPE
-CAMEL_OFFLINE_FOLDER_CLASS
-CamelOfflineFolderClass
-<SUBSECTION Private>
-camel_offline_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-offline-store</FILE>
-<TITLE>CamelOfflineStore</TITLE>
-CamelOfflineStore
-camel_offline_store_set_network_state
-camel_offline_store_get_network_state
-camel_offline_store_prepare_for_offline
-<SUBSECTION Standard>
-CAMEL_OFFLINE_STORE
-CAMEL_IS_OFFLINE_STORE
-CAMEL_TYPE_OFFLINE_STORE
-CAMEL_OFFLINE_STORE_CLASS
-CAMEL_IS_OFFLINE_STORE_CLASS
-CAMEL_OFFLINE_STORE_GET_CLASS
-CamelOfflineStoreClass
-<SUBSECTION Private>
-camel_offline_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-address</FILE>
-<TITLE>CamelNNTPAddress</TITLE>
-CamelNNTPAddress
-camel_nntp_address_new
-camel_nntp_address_add
-camel_nntp_address_get
-<SUBSECTION Standard>
-CAMEL_NNTP_ADDRESS
-CAMEL_IS_NNTP_ADDRESS
-CAMEL_NNTP_ADDRESS_CLASS
-CamelNNTPAddressClass
-<SUBSECTION Private>
-camel_nntp_address_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-folder</FILE>
-<TITLE>CamelImapFolder</TITLE>
-CamelImapFolder
-camel_imap_folder_new
-camel_imap_folder_selected
-camel_imap_folder_changed
-camel_imap_folder_fetch_data
-imap_append_resyncing
-imap_transfer_resyncing
-imap_expunge_uids_resyncing
-<SUBSECTION Standard>
-CAMEL_IMAP_FOLDER
-CAMEL_IS_IMAP_FOLDER
-CAMEL_IMAP_FOLDER_TYPE
-CAMEL_IMAP_FOLDER_CLASS
-CamelImapFolderClass
-<SUBSECTION Private>
-CamelImapFolderPrivate
-camel_imap_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-journal</FILE>
-<TITLE>CamelImapJournal</TITLE>
-CamelOfflineAction
-CamelIMAPJournalEntry
-CamelIMAPJournal
-camel_imap_journal_new
-camel_imap_journal_log
-camel_imap_journal_uidmap_add
-camel_imap_journal_uidmap_lookup
-camel_imap_journal_close_folders
-<SUBSECTION Standard>
-CAMEL_TYPE_IMAP_JOURNAL
-CAMEL_IMAP_JOURNAL
-CAMEL_IMAP_JOURNAL_CLASS
-CAMEL_IS_IMAP_JOURNAL
-CAMEL_IS_IMAP_JOURNAL_CLASS
-CAMEL_IMAP_JOURNAL_GET_CLASS
-CamelIMAPJournalClass
-<SUBSECTION Private>
-camel_imap_journal_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-message-cache</FILE>
-<TITLE>CamelImapMessageCache</TITLE>
-CamelImapMessageCache
-camel_imap_message_cache_new
-camel_imap_message_cache_set_path
-camel_imap_message_cache_max_uid
-camel_imap_message_cache_insert
-camel_imap_message_cache_insert_stream
-camel_imap_message_cache_insert_wrapper
-camel_imap_message_cache_get
-camel_imap_message_cache_get_filename
-camel_imap_message_cache_remove
-camel_imap_message_cache_clear
-camel_imap_message_cache_copy
-camel_imap_message_cache_delete
-camel_imap_message_cache_filter_cached
-<SUBSECTION Standard>
-CAMEL_IMAP_MESSAGE_CACHE
-CAMEL_IS_IMAP_MESSAGE_CACHE
-CAMEL_IMAP_MESSAGE_CACHE_TYPE
-CAMEL_IMAP_MESSAGE_CACHE_CLASS
-CamelImapMessageCacheClass
-<SUBSECTION Private>
-camel_imap_message_cache_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-search</FILE>
-<TITLE>CamelImapSearch</TITLE>
-CamelImapSearch
-camel_imap_search_new
-<SUBSECTION Standard>
-CAMEL_IMAP_SEARCH
-CAMEL_IS_IMAP_SEARCH
-CAMEL_IMAP_SEARCH_TYPE
-CAMEL_IMAP_SEARCH_CLASS
-CamelImapSearchClass
-<SUBSECTION Private>
-camel_imap_search_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-store-summary</FILE>
-<TITLE>CamelImapStoreSummary</TITLE>
-CamelImapStoreInfo
-CamelImapStoreNamespace
-CamelImapStoreSummary
-camel_imap_store_summary_new
-camel_imap_store_summary_namespace_set_main
-camel_imap_store_summary_namespace_add_secondary
-camel_imap_store_summary_get_main_namespace
-camel_imap_store_summary_namespace_find_path
-camel_imap_store_summary_namespace_find_full
-camel_imap_store_summary_full_to_path
-camel_imap_store_summary_path_to_full
-camel_imap_store_summary_full_name
-camel_imap_store_summary_add_from_full
-camel_imap_store_summary_full_from_path
-camel_imap_store_info_full_name
-<SUBSECTION Standard>
-CAMEL_IMAP_STORE_SUMMARY
-CAMEL_IS_IMAP_STORE_SUMMARY
-CAMEL_IMAP_STORE_SUMMARY_CLASS
-CamelImapStoreSummaryClass
-<SUBSECTION Private>
-camel_imap_store_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-store</FILE>
-<TITLE>CamelImapStore</TITLE>
-CamelImapMsg
-CamelImapStore
-camel_imap_msg_new
-camel_imap_msg_queue
-CAMEL_IMAP_STORE_NAMESPACE
-CAMEL_IMAP_STORE_OVERRIDE_NAMESPACE
-CAMEL_IMAP_STORE_CHECK_ALL
-CAMEL_IMAP_STORE_FILTER_INBOX
-CAMEL_IMAP_STORE_FILTER_JUNK
-CAMEL_IMAP_STORE_FILTER_JUNK_INBOX
-CAMEL_IMAP_STORE_CHECK_LSUB
-CAMEL_IMAP_FOLDER_MARKED
-CAMEL_IMAP_FOLDER_UNMARKED
-CamelImapServerLevel
-IMAP_CAPABILITY_IMAP4
-IMAP_CAPABILITY_IMAP4REV1
-IMAP_CAPABILITY_STATUS
-IMAP_CAPABILITY_NAMESPACE
-IMAP_CAPABILITY_UIDPLUS
-IMAP_CAPABILITY_LITERALPLUS
-IMAP_CAPABILITY_STARTTLS
-IMAP_CAPABILITY_useful_lsub
-IMAP_CAPABILITY_utf8_search
-IMAP_CAPABILITY_XGWEXTENSIONS
-IMAP_CAPABILITY_XGWMOVE
-IMAP_CAPABILITY_LOGINDISABLED
-IMAP_CAPABILITY_QUOTA
-IMAP_PARAM_OVERRIDE_NAMESPACE
-IMAP_PARAM_CHECK_ALL
-IMAP_PARAM_FILTER_INBOX
-IMAP_PARAM_FILTER_JUNK
-IMAP_PARAM_FILTER_JUNK_INBOX
-IMAP_PARAM_SUBSCRIPTIONS
-IMAP_PARAM_CHECK_LSUB
-IMAP_FETCH_ALL_HEADERS
-IMAP_FETCH_MAILING_LIST_HEADERS
-IMAP_FETCH_MINIMAL_HEADERS
-camel_imap_store_connected
-camel_imap_store_readline
-<SUBSECTION Standard>
-CAMEL_IMAP_STORE
-CAMEL_IS_IMAP_STORE
-CAMEL_IMAP_STORE_TYPE
-CAMEL_IMAP_STORE_CLASS
-CamelImapStoreClass
-<SUBSECTION Private>
-camel_imap_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-summary</FILE>
-<TITLE>CamelImapSummary</TITLE>
-CAMEL_IMAP_SERVER_FLAGS
-CamelImapMessageContentInfo
-CamelImapMessageInfo
-CamelImapSummary
-camel_imap_summary_new
-camel_imap_summary_add_offline
-camel_imap_summary_add_offline_uncached
-<SUBSECTION Standard>
-CAMEL_IMAP_SUMMARY
-CAMEL_IS_IMAP_SUMMARY
-CAMEL_IMAP_SUMMARY_CLASS
-CamelImapSummaryClass
-<SUBSECTION Private>
-camel_imap_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-wrapper</FILE>
-<TITLE>CamelImapWrapper</TITLE>
-CamelImapWrapper
-camel_imap_wrapper_new
-<SUBSECTION Standard>
-CAMEL_IMAP_WRAPPER
-CAMEL_IS_IMAP_WRAPPER
-CAMEL_IMAP_WRAPPER_TYPE
-CAMEL_IMAP_WRAPPER_CLASS
-CamelImapWrapperClass
-<SUBSECTION Private>
-camel_imap_wrapper_get_type
-CamelImapWrapperPrivate
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-folder</FILE>
-<TITLE>CamelGroupwiseFolder</TITLE>
-CamelGroupwiseFolder
-camel_gw_folder_new
-gw_update_summary
-<SUBSECTION Standard>
-CAMEL_GROUPWISE_FOLDER
-CAMEL_IS_GROUPWISE_FOLDER
-CAMEL_GROUPWISE_FOLDER_TYPE
-CAMEL_GROUPWISE_FOLDER_CLASS
-CamelGroupwiseFolderClass
-<SUBSECTION Private>
-camel_groupwise_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-store-summary</FILE>
-<TITLE>CamelGroupwiseStoreSummary</TITLE>
-CamelGroupwiseStoreInfo
-CamelGroupwiseStoreNamespace
-CamelGroupwiseStoreSummary
-camel_groupwise_store_summary_new
-camel_groupwise_store_summary_full_name
-camel_groupwise_store_summary_add_from_full
-camel_groupwise_store_summary_full_to_path
-camel_groupwise_store_summary_path_to_full
-camel_groupwise_store_summary_full_from_path
-camel_groupwise_store_summary_namespace_new
-camel_groupwise_store_summary_namespace_find_path
-camel_groupwise_store_summary_namespace_set
-camel_groupwise_store_info_full_name
-<SUBSECTION Standard>
-CAMEL_GW_STORE_SUMMARY
-CAMEL_IS_GW_STORE_SUMMARY
-CAMEL_GW_STORE_SUMMARY_CLASS
-CamelGroupwiseStoreSummaryClass
-<SUBSECTION Private>
-camel_groupwise_store_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-store</FILE>
-<TITLE>CamelGroupwiseStore</TITLE>
-GW_PARAM_FILTER_INBOX
-CamelGroupwiseStore
-CamelGroupwiseStorePrivate
-groupwise_get_name
-camel_groupwise_store_container_id_lookup
-camel_groupwise_store_folder_lookup
-cnc_lookup
-storage_path_lookup
-groupwise_base_url_lookup
-create_junk_folder
-camel_groupwise_store_connected
-gw_store_reload_folder
-groupwise_store_set_current_folder
-<SUBSECTION Standard>
-CAMEL_GROUPWISE_STORE
-CAMEL_IS_GROUPWISE_STORE
-CAMEL_GROUPWISE_STORE_TYPE
-CAMEL_GROUPWISE_STORE_CLASS
-CamelGroupwiseStoreClass
-<SUBSECTION Private>
-camel_groupwise_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-summary</FILE>
-<TITLE>CamelGroupwiseSummary</TITLE>
-CamelGroupwiseSummary
-CamelGroupwiseMessageInfo
-CamelGroupwiseMessageContentInfo
-camel_groupwise_summary_new
-camel_gw_summary_add_offline
-camel_gw_summary_add_offline_uncached
-groupwise_summary_clear
-<SUBSECTION Standard>
-CAMEL_GROUPWISE_SUMMARY
-CAMEL_IS_GROUPWISE_SUMMARY
-CAMEL_GROUPWISE_SUMMARY_CLASS
-CamelGroupwiseSummaryClass
-<SUBSECTION Private>
-camel_groupwise_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-transport</FILE>
-<TITLE>CamelGroupwiseTransport</TITLE>
-CamelGroupwiseTransport
-<SUBSECTION Standard>
-CAMEL_GROUPWISE_TRANSPORT
-CAMEL_IS_GROUPWISE_TRANSPORT
-CAMEL_GROUPWISE_TRANSPORT_TYPE
-CAMEL_GROUPWISE_TRANSPORT_CLASS
-CamelGroupwiseTransportClass
-<SUBSECTION Private>
-camel_groupwise_transport_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-journal</FILE>
-<TITLE>CamelGroupwiseJournal</TITLE>
-CamelGroupwiseJournal
-CamelGroupwiseJournalEntry
-camel_groupwise_journal_new
-camel_groupwise_journal_append
-camel_groupwise_journal_transfer
-<SUBSECTION Standard>
-CAMEL_GROUPWISE_JOURNAL
-CAMEL_IS_GROUPWISE_JOURNAL
-CAMEL_TYPE_GROUPWISE_JOURNAL
-CAMEL_GROUPWISE_JOURNAL_CLASS
-CAMEL_IS_GROUPWISE_JOURNAL_CLASS
-CAMEL_GROUPWISE_JOURNAL_GET_CLASS
-CamelGroupwiseJournalClass
-<SUBSECTION Private>
-camel_groupwise_journal_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-engine</FILE>
-<TITLE>CamelIMAP4Engine</TITLE>
-CamelIMAP4Engine
-camel_imap4_engine_t
-camel_imap4_level_t
-camel_imap4_resp_code_t
-CamelIMAP4RespCode
-CamelIMAP4Namespace
-CamelIMAP4NamespaceList
-CamelIMAP4ReconnectFunc
-camel_imap4_engine_new
-camel_imap4_engine_take_stream
-camel_imap4_engine_disconnect
-camel_imap4_engine_capability
-camel_imap4_engine_namespace
-camel_imap4_engine_select_folder
-camel_imap4_engine_queue
-camel_imap4_engine_prequeue
-camel_imap4_engine_dequeue
-camel_imap4_engine_iterate
-camel_imap4_engine_handle_untagged_1
-camel_imap4_engine_handle_untagged
-camel_imap4_engine_next_token
-camel_imap4_engine_line
-camel_imap4_engine_literal
-camel_imap4_engine_nstring
-camel_imap4_engine_eat_line
-camel_imap4_engine_parse_resp_code
-camel_imap4_resp_code_free
-<SUBSECTION Standard>
-CAMEL_IMAP4_ENGINE
-CAMEL_IS_IMAP4_ENGINE
-CAMEL_TYPE_IMAP4_ENGINE
-CAMEL_IMAP4_ENGINE_CLASS
-CAMEL_IS_IMAP4_ENGINE_CLASS
-CAMEL_IMAP4_ENGINE_GET_CLASS
-CamelIMAP4EngineClass
-<SUBSECTION Private>
-camel_imap4_engine_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-folder</FILE>
-<TITLE>CamelIMAP4Folder</TITLE>
-CamelIMAP4Folder
-camel_imap4_folder_new
-camel_imap4_folder_utf7_name
-<SUBSECTION Standard>
-CAMEL_IMAP4_FOLDER
-CAMEL_IS_IMAP4_FOLDER
-CAMEL_TYPE_IMAP4_FOLDER
-CAMEL_IMAP4_FOLDER_CLASS
-CAMEL_IS_IMAP4_FOLDER_CLASS
-CAMEL_IMAP4_FOLDER_GET_CLASS
-CamelIMAP4FolderClass
-<SUBSECTION Private>
-camel_imap4_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-search</FILE>
-<TITLE>CamelIMAP4Search</TITLE>
-CamelIMAP4Search
-camel_imap4_search_new
-<SUBSECTION Standard>
-CAMEL_IMAP4_SEARCH
-CAMEL_IS_IMAP4_SEARCH
-CAMEL_IMAP4_SEARCH_TYPE
-CAMEL_IMAP4_SEARCH_CLASS
-CamelIMAP4SearchClass
-<SUBSECTION Private>
-camel_imap4_search_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-store-summary</FILE>
-<TITLE>CamelIMAP4StoreSummary</TITLE>
-CamelIMAP4StoreInfo
-CamelIMAP4StoreSummary
-camel_imap4_store_summary_new
-camel_imap4_store_summary_set_capabilities
-camel_imap4_store_summary_set_namespaces
-camel_imap4_store_summary_note_info
-camel_imap4_store_summary_unnote_info
-camel_imap4_store_summary_get_folder_info
-<SUBSECTION Standard>
-CAMEL_IMAP4_STORE_SUMMARY
-CAMEL_IS_IMAP4_STORE_SUMMARY
-CAMEL_IMAP4_STORE_SUMMARY_CLASS
-CamelIMAP4StoreSummaryClass
-<SUBSECTION Private>
-camel_imap4_store_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-store</FILE>
-<TITLE>CamelIMAP4Store</TITLE>
-CamelIMAP4Store
-<SUBSECTION Standard>
-CAMEL_IMAP4_STORE
-CAMEL_IS_IMAP4_STORE
-CAMEL_TYPE_IMAP4_STORE
-CAMEL_IMAP4_STORE_CLASS
-CAMEL_IS_IMAP4_STORE_CLASS
-CAMEL_IMAP4_STORE_GET_CLASS
-CamelIMAP4StoreClass
-<SUBSECTION Private>
-camel_imap4_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-stream</FILE>
-<TITLE>CamelIMAP4Stream</TITLE>
-IMAP4_READ_PRELEN
-IMAP4_READ_BUFLEN
-camel_imap4_token_t
-CamelIMAP4Stream
-camel_imap4_stream_new
-camel_imap4_stream_next_token
-camel_imap4_stream_unget_token
-camel_imap4_stream_line
-camel_imap4_stream_literal
-<SUBSECTION Standard>
-CAMEL_IMAP4_STREAM
-CAMEL_IS_IMAP4_STREAM
-CAMEL_TYPE_IMAP4_STREAM
-CAMEL_IMAP4_STREAM_CLASS
-CamelIMAP4StreamClass
-<SUBSECTION Private>
-camel_imap4_stream_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-summary</FILE>
-<TITLE>CamelIMAP4Summary</TITLE>
-CamelIMAP4Summary
-CamelIMAP4MessageInfo
-CamelIMAP4MessageContentInfo
-CAMEL_IMAP4_MESSAGE_RECENT
-camel_imap4_summary_new
-camel_imap4_summary_set_exists
-camel_imap4_summary_set_recent
-camel_imap4_summary_set_unseen
-camel_imap4_summary_set_uidnext
-camel_imap4_summary_set_uidvalidity
-camel_imap4_summary_expunge
-camel_imap4_summary_flush_updates
-<SUBSECTION Standard>
-CAMEL_IMAP4_SUMMARY
-CAMEL_IS_IMAP4_SUMMARY
-CAMEL_TYPE_IMAP4_SUMMARY
-CAMEL_IMAP4_SUMMARY_CLASS
-CAMEL_IS_IMAP4_SUMMARY_CLASS
-CAMEL_IMAP4_SUMMARY_GET_CLASS
-CamelIMAP4SummaryClass
-<SUBSECTION Private>
-camel_imap4_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-journal</FILE>
-<TITLE>CamelIMAP4Journal</TITLE>
-CamelIMAP4Journal
-CamelIMAP4JournalEntry
-camel_imap4_journal_new
-camel_imap4_journal_readd_failed
-camel_imap4_journal_append
-<SUBSECTION Standard>
-CAMEL_IMAP4_JOURNAL
-CAMEL_IS_IMAP4_JOURNAL
-CAMEL_TYPE_IMAP4_JOURNAL
-CAMEL_IMAP4_JOURNAL_CLASS
-CAMEL_IS_IMAP4_JOURNAL_CLASS
-CAMEL_IMAP4_JOURNAL_GET_CLASS
-CamelIMAP4JournalClass
-<SUBSECTION Private>
-camel_imap4_journal_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-local-folder</FILE>
-<TITLE>CamelLocalFolder</TITLE>
-CamelLocalFolder
-camel_local_folder_construct
-camel_local_folder_lock
-camel_local_folder_unlock
-<SUBSECTION Standard>
-CAMEL_LOCAL_FOLDER
-CAMEL_IS_LOCAL_FOLDER
-CAMEL_LOCAL_FOLDER_TYPE
-CAMEL_LOCAL_FOLDER_CLASS
-CamelLocalFolderClass
-<SUBSECTION Private>
-CamelLocalFolderPrivate
-camel_local_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-local-store</FILE>
-<TITLE>CamelLocalStore</TITLE>
-CamelLocalStore
-camel_local_store_get_toplevel_dir
-camel_local_store_get_full_path
-camel_local_store_get_meta_path
-<SUBSECTION Standard>
-CAMEL_LOCAL_STORE
-CAMEL_IS_LOCAL_STORE
-CAMEL_LOCAL_STORE_TYPE
-CAMEL_LOCAL_STORE_CLASS
-CamelLocalStoreClass
-<SUBSECTION Private>
-camel_local_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-local-summary</FILE>
-<TITLE>CamelLocalSummary</TITLE>
-CamelLocalSummary
-CamelLocalMessageInfo
-camel_local_summary_construct
-camel_local_summary_load
-camel_local_summary_check
-camel_local_summary_sync
-camel_local_summary_add
-camel_local_summary_check_force
-camel_local_summary_encode_x_evolution
-camel_local_summary_decode_x_evolution
-camel_local_summary_write_headers
-<SUBSECTION Standard>
-CAMEL_LOCAL_SUMMARY
-CAMEL_IS_LOCAL_SUMMARY
-CAMEL_LOCAL_SUMMARY_CLASS
-CamelLocalSummaryClass
-<SUBSECTION Private>
-camel_local_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-maildir-folder</FILE>
-<TITLE>CamelMaildirFolder</TITLE>
-CamelMaildirFolder
-camel_maildir_folder_new
-<SUBSECTION Standard>
-CAMEL_MAILDIR_FOLDER
-CAMEL_IS_MAILDIR_FOLDER
-CAMEL_MAILDIR_FOLDER_TYPE
-CAMEL_MAILDIR_FOLDER_CLASS
-CamelMaildirFolderClass
-<SUBSECTION Private>
-camel_maildir_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-maildir-store</FILE>
-<TITLE>CamelMaildirStore</TITLE>
-CamelMaildirStore
-<SUBSECTION Standard>
-CAMEL_MAILDIR_STORE
-CAMEL_IS_MAILDIR_STORE
-CAMEL_MAILDIR_STORE_TYPE
-CAMEL_MAILDIR_STORE_CLASS
-CamelMaildirStoreClass
-<SUBSECTION Private>
-camel_maildir_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-maildir-summary</FILE>
-<TITLE>CamelMaildirSummary</TITLE>
-CamelMaildirSummary
-CamelMaildirMessageContentInfo
-CamelMaildirMessageInfo
-camel_maildir_summary_new
-camel_maildir_summary_info_to_name
-camel_maildir_summary_name_to_info
-camel_maildir_info_filename
-camel_maildir_info_set_filename
-<SUBSECTION Standard>
-CAMEL_MAILDIR_SUMMARY
-CAMEL_IS_MAILDIR_SUMMARY
-CAMEL_MAILDIR_SUMMARY_CLASS
-CamelMaildirSummaryClass
-<SUBSECTION Private>
-camel_maildir_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mbox-folder</FILE>
-<TITLE>CamelMboxFolder</TITLE>
-CamelMboxFolder
-camel_mbox_folder_new
-<SUBSECTION Standard>
-CAMEL_MBOX_FOLDER
-CAMEL_IS_MBOX_FOLDER
-CAMEL_MBOX_FOLDER_TYPE
-CAMEL_MBOX_FOLDER_CLASS
-CamelMboxFolderClass
-<SUBSECTION Private>
-camel_mbox_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mbox-store</FILE>
-<TITLE>CamelMboxStore</TITLE>
-CamelMboxStore
-<SUBSECTION Standard>
-CAMEL_MBOX_STORE
-CAMEL_IS_MBOX_STORE
-CAMEL_MBOX_STORE_TYPE
-CAMEL_MBOX_STORE_CLASS
-CamelMboxStoreClass
-<SUBSECTION Private>
-camel_mbox_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mbox-summary</FILE>
-<TITLE>CamelMboxSummary</TITLE>
-STATUS_PINE
-CamelMboxSummary
-CamelMboxMessageContentInfo
-CamelMboxMessageInfo
-camel_mbox_summary_new
-camel_mbox_summary_xstatus
-camel_mbox_summary_sync_mbox
-<SUBSECTION Standard>
-CAMEL_MBOX_SUMMARY
-CAMEL_IS_MBOX_SUMMARY
-CAMEL_MBOX_SUMMARY_CLASS
-CamelMboxSummaryClass
-<SUBSECTION Private>
-camel_mbox_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mh-folder</FILE>
-<TITLE>CamelMhFolder</TITLE>
-CamelMhFolder
-camel_mh_folder_new
-<SUBSECTION Standard>
-CAMEL_MH_FOLDER
-CAMEL_IS_MH_FOLDER
-CAMEL_MH_FOLDER_TYPE
-CAMEL_MH_FOLDER_CLASS
-CamelMhFolderClass
-<SUBSECTION Private>
-camel_mh_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mh-store</FILE>
-<TITLE>CamelMhStore</TITLE>
-CamelMhStore
-<SUBSECTION Standard>
-CAMEL_MH_STORE
-CAMEL_IS_MH_STORE
-CAMEL_MH_STORE_TYPE
-CAMEL_MH_STORE_CLASS
-CamelMhStoreClass
-<SUBSECTION Private>
-camel_mh_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-mh-summary</FILE>
-<TITLE>CamelMhSummary</TITLE>
-CamelMhSummary
-camel_mh_summary_new
-<SUBSECTION Standard>
-CAMEL_MH_SUMMARY
-CAMEL_IS_MH_SUMMARY
-CAMEL_MH_SUMMARY_CLASS
-CamelMhSummaryClass
-<SUBSECTION Private>
-camel_mh_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-spool-folder</FILE>
-<TITLE>CamelSpoolFolder</TITLE>
-CamelSpoolFolder
-camel_spool_folder_new
-<SUBSECTION Standard>
-CAMEL_SPOOL_FOLDER
-CAMEL_IS_SPOOL_FOLDER
-CAMEL_SPOOL_FOLDER_TYPE
-CAMEL_SPOOL_FOLDER_CLASS
-CamelSpoolFolderClass
-<SUBSECTION Private>
-camel_spool_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-spool-store</FILE>
-<TITLE>CamelSpoolStore</TITLE>
-CamelSpoolStore
-camel_spool_store_t
-<SUBSECTION Standard>
-CAMEL_SPOOL_STORE
-CAMEL_IS_SPOOL_STORE
-CAMEL_SPOOL_STORE_TYPE
-CAMEL_SPOOL_STORE_CLASS
-CamelSpoolStoreClass
-<SUBSECTION Private>
-camel_spool_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-spool-summary</FILE>
-<TITLE>CamelSpoolSummary</TITLE>
-CamelSpoolSummary
-camel_spool_summary_construct
-camel_spool_summary_new
-camel_spool_summary_load
-camel_spool_summary_check
-camel_spool_summary_sync
-camel_spool_summary_add
-camel_spool_summary_encode_x_evolution
-camel_spool_summary_decode_x_evolution
-camel_spool_summary_write_headers
-<SUBSECTION Standard>
-CAMEL_SPOOL_SUMMARY
-CAMEL_IS_SPOOL_SUMMARY
-CAMEL_SPOOL_SUMMARY_CLASS
-CamelSpoolSummaryClass
-<SUBSECTION Private>
-camel_spool_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-folder</FILE>
-<TITLE>CamelNNTPFolder</TITLE>
-CamelNNTPFolder
-camel_nntp_folder_new
-camel_nntp_folder_selected
-<SUBSECTION Standard>
-CAMEL_NNTP_FOLDER
-CAMEL_IS_NNTP_FOLDER
-CAMEL_NNTP_FOLDER_TYPE
-CAMEL_NNTP_FOLDER_CLASS
-CamelNNTPFolderClass
-<SUBSECTION Private>
-CamelNNTPFolderPrivate
-camel_nntp_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-store-summary</FILE>
-<TITLE>CamelNNTPStoreSummary</TITLE>
-CamelNNTPStoreInfo
-CamelNNTPStoreSummary
-NNTP_DATE_SIZE
-camel_nntp_store_summary_new
-camel_nntp_store_info_full_name
-camel_nntp_store_summary_full_to_path
-camel_nntp_store_summary_path_to_full
-camel_nntp_store_summary_dotted_to_full
-camel_nntp_store_summary_full_name
-camel_nntp_store_summary_add_from_full
-camel_nntp_store_summary_full_from_path
-<SUBSECTION Standard>
-CAMEL_NNTP_STORE_SUMMARY
-CAMEL_IS_NNTP_STORE_SUMMARY
-CAMEL_NNTP_STORE_SUMMARY_CLASS
-CamelNNTPStoreSummaryClass
-<SUBSECTION Private>
-camel_nntp_store_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-store</FILE>
-<TITLE>CamelNNTPStore</TITLE>
-CamelNNTPStore
-CAMEL_NNTP_EXT_SEARCH
-CAMEL_NNTP_EXT_SETGET
-CAMEL_NNTP_EXT_OVER
-CAMEL_NNTP_EXT_XPATTEXT
-CAMEL_NNTP_EXT_XACTIVE
-CAMEL_NNTP_EXT_LISTMOTD
-CAMEL_NNTP_EXT_LISTSUBSCR
-CAMEL_NNTP_EXT_LISTPNAMES
-xover_t
-xover_header
-camel_nntp_raw_commandv
-camel_nntp_raw_command
-camel_nntp_raw_command_auth
-camel_nntp_command
-<SUBSECTION Standard>
-CAMEL_NNTP_STORE
-CAMEL_IS_NNTP_STORE
-CAMEL_NNTP_STORE_TYPE
-CAMEL_NNTP_STORE_CLASS
-CamelNNTPStoreClass
-<SUBSECTION Private>
-CamelNNTPStorePrivate
-camel_nntp_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-stream</FILE>
-<TITLE>CamelNNTPStream</TITLE>
-CamelNNTPStream
-camel_nntp_stream_mode_t
-camel_nntp_stream_new
-camel_nntp_stream_set_mode
-camel_nntp_stream_line
-camel_nntp_stream_gets
-camel_nntp_stream_getd
-<SUBSECTION Standard>
-CAMEL_NNTP_STREAM
-CAMEL_IS_NNTP_STREAM
-CAMEL_NNTP_STREAM_CLASS
-CamelNNTPStreamClass
-<SUBSECTION Private>
-camel_nntp_stream_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-summary</FILE>
-<TITLE>CamelNNTPSummary</TITLE>
-CamelNNTPSummary
-camel_nntp_summary_new
-camel_nntp_summary_check
-<SUBSECTION Standard>
-CAMEL_NNTP_SUMMARY
-CAMEL_IS_LOCAL_SUMMARY
-CAMEL_NNTP_SUMMARY_CLASS
-CamelNNTPSummaryClass
-<SUBSECTION Private>
-camel_nntp_summary_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-pop3-engine</FILE>
-<TITLE>CamelPOP3Engine</TITLE>
-CamelPOP3Engine
-CamelPOP3Command
-camel_pop3_engine_t
-camel_pop3_command_t
-CamelPOP3CommandFunc
-camel_pop3_engine_new
-camel_pop3_engine_reget_capabilities
-camel_pop3_engine_command_free
-camel_pop3_engine_iterate
-camel_pop3_engine_command_new
-<SUBSECTION Standard>
-CAMEL_POP3_ENGINE
-CAMEL_IS_POP3_ENGINE
-CAMEL_POP3_ENGINE_CLASS
-CamelPOP3EngineClass
-<SUBSECTION Private>
-camel_pop3_engine_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-pop3-folder</FILE>
-<TITLE>CamelPOP3Folder</TITLE>
-CamelPOP3Folder
-CamelPOP3FolderInfo
-camel_pop3_folder_new
-camel_pop3_delete_old
-<SUBSECTION Standard>
-CAMEL_POP3_FOLDER
-CAMEL_IS_POP3_FOLDER
-CAMEL_POP3_FOLDER_TYPE
-CAMEL_POP3_FOLDER_CLASS
-CamelPOP3FolderClass
-<SUBSECTION Private>
-camel_pop3_folder_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-pop3-store</FILE>
-<TITLE>CamelPOP3Store</TITLE>
-CamelPOP3Store
-camel_pop3_store_expunge
-camel_pop3_command
-camel_pop3_command_get_additional_data
-<SUBSECTION Standard>
-CAMEL_POP3_STORE
-CAMEL_IS_POP3_STORE
-CAMEL_POP3_STORE_TYPE
-CAMEL_POP3_STORE_CLASS
-CamelPOP3StoreClass
-<SUBSECTION Private>
-camel_pop3_store_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-pop3-stream</FILE>
-<TITLE>CamelPOP3Stream</TITLE>
-CamelPOP3Stream
-camel_pop3_stream_mode_t
-camel_pop3_stream_new
-camel_pop3_stream_set_mode
-camel_pop3_stream_line
-camel_pop3_stream_gets
-camel_pop3_stream_getd
-<SUBSECTION Standard>
-CAMEL_POP3_STREAM
-CAMEL_IS_POP3_STREAM
-CAMEL_POP3_STREAM_CLASS
-CamelPOP3StreamClass
-<SUBSECTION Private>
-camel_pop3_stream_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-sendmail-transport</FILE>
-<TITLE>CamelSendmailTransport</TITLE>
-CamelSendmailTransport
-<SUBSECTION Standard>
-CAMEL_SENDMAIL_TRANSPORT
-CAMEL_IS_SENDMAIL_TRANSPORT
-CAMEL_SENDMAIL_TRANSPORT_TYPE
-CAMEL_SENDMAIL_TRANSPORT_CLASS
-CamelSendmailTransportClass
-<SUBSECTION Private>
-camel_sendmail_transport_get_type
-</SECTION>
-
-<SECTION>
-<FILE>camel-smtp-transport</FILE>
-<TITLE>CamelSmtpTransport</TITLE>
-CamelSmtpTransport
-CAMEL_SMTP_TRANSPORT_IS_ESMTP
-CAMEL_SMTP_TRANSPORT_8BITMIME
-CAMEL_SMTP_TRANSPORT_ENHANCEDSTATUSCODES
-CAMEL_SMTP_TRANSPORT_STARTTLS
-CAMEL_SMTP_TRANSPORT_AUTH_EQUAL
-<SUBSECTION Standard>
-CAMEL_SMTP_TRANSPORT
-CAMEL_IS_SMTP_TRANSPORT
-CAMEL_SMTP_TRANSPORT_TYPE
-CAMEL_SMTP_TRANSPORT_CLASS
-CamelSmtpTransportClass
-<SUBSECTION Private>
-camel_smtp_transport_get_type
-</SECTION>
-
-<SECTION>
-<FILE>session</FILE>
-<TITLE>CamelTestSession</TITLE>
-CamelTestSession
-camel_test_session_new
-<SUBSECTION Standard>
-CAMEL_TEST_SESSION
-CAMEL_TEST_IS_SESSION
-CAMEL_TEST_SESSION_TYPE
-CAMEL_TEST_SESSION_CLASS
-CamelTestSessionClass
-<SUBSECTION Private>
-camel_test_session_get_type
-</SECTION>
-
-<SECTION>
 <FILE>camel-arg</FILE>
 CamelArg
 CamelArgV
@@ -3497,8 +2805,6 @@ camel_operation_cancel
 camel_operation_uncancel
 camel_operation_register
 camel_operation_unregister
-camel_operation_cancel_block
-camel_operation_cancel_unblock
 camel_operation_cancel_check
 camel_operation_cancel_fd
 camel_operation_cancel_prfd
@@ -3506,46 +2812,10 @@ camel_operation_registered
 camel_operation_start
 camel_operation_start_transient
 camel_operation_progress
-camel_operation_progress_count
 camel_operation_end
 </SECTION>
 
 <SECTION>
-<FILE>camel-partition-table</FILE>
-<TITLE>CamelPartitionTable</TITLE>
-<TITLE>CamelKeyTable</TITLE>
-camel_hash_t
-CamelPartitionKey
-CamelPartitionKeyBlock
-CamelPartitionMap
-CamelPartitionMapBlock
-CamelPartitionTable
-camel_partition_table_new
-camel_partition_table_sync
-camel_partition_table_add
-camel_partition_table_lookup
-camel_partition_table_remove
-CamelKeyBlock
-CamelKeyRootBlock
-CamelKeyKey
-CAMEL_KEY_TABLE_MAX_KEY
-CamelKeyTable
-camel_key_table_new
-camel_key_table_sync
-camel_key_table_add
-camel_key_table_set_data
-camel_key_table_set_flags
-camel_key_table_lookup
-camel_key_table_next
-<SUBSECTION Standard>
-CamelPartitionTableClass
-CamelKeyTableClass
-<SUBSECTION Private>
-camel_partition_table_get_type
-camel_key_table_get_type
-</SECTION>
-
-<SECTION>
 <FILE>camel-string-utils</FILE>
 camel_strcase_equal
 camel_strcase_hash
@@ -3666,260 +2936,3 @@ camel_getnameinfo
 WIN32_LEAN_AND_MEAN
 </SECTION>
 
-<SECTION>
-<FILE>camel-imap-command</FILE>
-CamelImapResponseType
-CamelImapResponse
-camel_imap_command
-camel_imap_command_continuation
-camel_imap_response_free
-camel_imap_response_free_without_processing
-camel_imap_response_extract
-camel_imap_response_extract_continuation
-camel_imap_command_start
-camel_imap_command_response
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap-utils</FILE>
-imap_next_word
-namespace
-namespaces
-imap_namespaces_destroy
-imap_parse_namespace_response
-imap_parse_list_response
-imap_parse_folder_name
-imap_create_flag_list
-imap_parse_flag_list
-imap_parse_string_generic
-imap_parse_string
-imap_parse_nstring
-imap_parse_astring
-imap_parse_body
-imap_is_atom
-imap_quote_string
-imap_skip_list
-imap_uid_array_to_set
-imap_uid_set_to_array
-imap_uid_array_free
-imap_concat
-imap_namespace_concat
-imap_mailbox_encode
-imap_mailbox_decode
-IMAPPathFindFoldersCallback
-imap_path_to_physical
-imap_path_find_folders
-</SECTION>
-
-<SECTION>
-<FILE>camel-groupwise-utils</FILE>
-X_SEND_OPTIONS
-X_SEND_OPT_PRIORITY
-X_SEND_OPT_SECURITY
-X_REPLY_CONVENIENT
-X_REPLY_WITHIN
-X_EXPIRE_AFTER
-X_DELAY_UNTIL
-X_TRACK_WHEN
-X_AUTODELETE
-X_RETURN_NOTIFY_OPEN
-X_RETURN_NOTIFY_DELETE
-RECEIVED
-SENT
-DRAFT
-PERSONAL
-flags_diff_t
-EPathFindFoldersCallback
-e_path_to_physical
-e_path_find_folders
-e_path_rmdir
-camel_groupwise_util_item_from_message
-do_flags_diff
-gw_concat
-strip_lt_gt
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-command</FILE>
-CamelIMAP4Command
-CamelIMAP4Literal
-CamelIMAP4PlusCallback
-CamelIMAP4UntaggedCallback
-CamelIMAP4CommandReset
-CamelIMAP4CommandPart
-camel_imap4_command_new
-camel_imap4_command_newv
-camel_imap4_command_register_untagged
-camel_imap4_command_ref
-camel_imap4_command_unref
-camel_imap4_command_step
-camel_imap4_command_reset
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-specials</FILE>
-is_atom
-is_ctrl
-is_lwsp
-is_type
-is_qsafe
-is_wild
-camel_imap4_specials_init
-</SECTION>
-
-<SECTION>
-<FILE>camel-imap4-utils</FILE>
-flags_diff_t
-camel_imap4_flags_diff
-camel_imap4_flags_merge
-camel_imap4_merge_flags
-camel_imap4_build_folder_info_tree
-camel_imap4_namespace_clear
-camel_imap4_namespace_list_copy
-camel_imap4_namespace_list_free
-camel_imap4_get_path_delim
-camel_imap4_get_uid_set
-camel_imap4_utils_set_unexpected_token_error
-camel_imap4_parse_flags_list
-CAMEL_IMAP4_FOLDER_MARKED
-CAMEL_IMAP4_FOLDER_UNMARKED
-camel_imap4_list_t
-camel_imap4_untagged_list
-camel_imap4_status_attr_t
-camel_imap4_status_t
-camel_imap4_status_free
-camel_imap4_untagged_status
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-auth</FILE>
-camel_nntp_auth_authenticate
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-grouplist</FILE>
-_CamelNNTPGroupList
-_CamelNNTPGroupListEntry
-camel_nntp_grouplist_fetch
-camel_nntp_grouplist_update
-camel_nntp_grouplist_save
-camel_nntp_grouplist_free
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-newsrc</FILE>
-CamelNNTPNewsrc
-camel_nntp_newsrc_get_highest_article_read
-camel_nntp_newsrc_get_num_articles_read
-camel_nntp_newsrc_mark_article_read
-camel_nntp_newsrc_mark_range_read
-camel_nntp_newsrc_article_is_read
-camel_nntp_newsrc_group_is_subscribed
-camel_nntp_newsrc_subscribe_group
-camel_nntp_newsrc_unsubscribe_group
-camel_nntp_newsrc_get_subscribed_group_names
-camel_nntp_newsrc_get_all_group_names
-camel_nntp_newsrc_free_group_names
-camel_nntp_newsrc_write_to_file
-camel_nntp_newsrc_write
-camel_nntp_newsrc_read_for_server
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-resp-codes</FILE>
-CAMEL_NNTP_OK
-CAMEL_NNTP_ERR
-CAMEL_NNTP_FAIL
-NNTP_GREETING_POSTING_OK
-NNTP_GREETING_NO_POSTING
-NNTP_EXTENSIONS_SUPPORTED
-NNTP_GROUP_SELECTED
-NNTP_LIST_FOLLOWS
-NNTP_ARTICLE_FOLLOWS
-NNTP_HEAD_FOLLOWS
-NNTP_DATA_FOLLOWS
-NNTP_NEW_ARTICLE_LIST_FOLLOWS
-NNTP_NEW_GROUP_LIST_FOLLOWS
-NNTP_NO_SUCH_GROUP
-NNTP_NO_SUCH_ARTICLE
-NNTP_NO_PERMISSION
-NNTP_AUTH_ACCEPTED
-NNTP_AUTH_CONTINUE
-NNTP_AUTH_REQUIRED
-NNTP_AUTH_REJECTED
-NNTP_PROTOCOL_ERROR
-</SECTION>
-
-<SECTION>
-<FILE>camel-nntp-utils</FILE>
-camel_nntp_get_headers
-</SECTION>
-
-<SECTION>
-<FILE>address-data</FILE>
-</SECTION>
-
-<SECTION>
-<FILE>addresses</FILE>
-test_address_compare
-</SECTION>
-
-<SECTION>
-<FILE>camel-test</FILE>
-camel_test_failv
-check
-check_msg
-check_count
-check_unref
-test_free
-push
-pull
-camel_test_init
-camel_test_start
-camel_test_end
-camel_test_push
-camel_test_pull
-camel_test_fail
-camel_test_nonfatal
-camel_test_fatal
-string_equal
-</SECTION>
-
-<SECTION>
-<FILE>folders</FILE>
-test_folder_counts
-test_message_info
-test_folder_message
-test_folder_not_message
-test_folder_basic
-test_folder_message_ops
-</SECTION>
-
-<SECTION>
-<FILE>messages</FILE>
-SET_CONTENT_WAYS
-test_message_create_simple
-test_message_set_content_simple
-test_message_write_file
-test_message_read_file
-test_message_compare_content
-test_message_compare
-test_message_dump_structure
-test_message_compare_header
-test_message_compare_messages
-</SECTION>
-
-<SECTION>
-<FILE>streams</FILE>
-test_stream_seekable_writepart
-test_stream_seekable_readpart
-SEEKABLE_SUBSTREAM_WAYS
-test_seekable_substream_writepart
-test_seekable_substream_readpart
-</SECTION>
-
-<SECTION>
-<FILE>camel-test-provider</FILE>
-camel_test_provider_init
-</SECTION>
-
index e69de29..78e4e53 100644 (file)
@@ -0,0 +1,90 @@
+#include <camel/camel.h>
+
+camel_address_get_type
+camel_block_file_get_type
+camel_key_file_get_type
+camel_certdb_get_type
+camel_cipher_context_get_type
+camel_data_cache_get_type
+camel_data_wrapper_get_type
+camel_disco_diary_get_type
+camel_disco_folder_get_type
+camel_disco_store_get_type
+camel_filter_driver_get_type
+camel_folder_get_type
+camel_folder_search_get_type
+camel_folder_summary_get_type
+camel_gpg_context_get_type
+camel_html_parser_get_type
+camel_http_stream_get_type
+camel_index_cursor_get_type
+camel_index_name_get_type
+camel_index_get_type
+camel_internet_address_get_type
+camel_medium_get_type
+camel_mime_filter_basic_get_type
+camel_mime_filter_bestenc_get_type
+camel_mime_filter_canon_get_type
+camel_mime_filter_charset_get_type
+camel_mime_filter_crlf_get_type
+camel_mime_filter_enriched_get_type
+camel_mime_filter_from_get_type
+camel_mime_filter_gzip_get_type
+camel_mime_filter_get_type
+camel_mime_filter_html_get_type
+camel_mime_filter_index_get_type
+camel_mime_filter_linewrap_get_type
+camel_mime_filter_pgp_get_type
+camel_mime_filter_progress_get_type
+camel_mime_filter_save_get_type
+camel_mime_filter_tohtml_get_type
+camel_mime_filter_windows_get_type
+camel_mime_filter_yenc_get_type
+camel_mime_message_get_type
+camel_mime_parser_get_type
+camel_mime_part_get_type
+camel_multipart_encrypted_get_type
+camel_multipart_get_type
+camel_multipart_signed_get_type
+camel_nntp_address_get_type
+camel_object_get_type
+camel_offline_folder_get_type
+camel_offline_journal_get_type
+camel_offline_store_get_type
+camel_partition_table_get_type
+camel_key_table_get_type
+camel_sasl_anonymous_get_type
+camel_sasl_cram_md5_get_type
+camel_sasl_digest_md5_get_type
+camel_sasl_gssapi_get_type
+camel_sasl_get_type
+camel_sasl_login_get_type
+camel_sasl_ntlm_get_type
+camel_sasl_plain_get_type
+camel_sasl_popb4smtp_get_type
+camel_seekable_stream_get_type
+camel_seekable_substream_get_type
+camel_service_get_type
+camel_session_get_type
+camel_smime_context_get_type
+camel_store_get_type
+camel_store_summary_get_type
+camel_stream_buffer_get_type
+camel_stream_filter_get_type
+camel_stream_fs_get_type
+camel_stream_get_type
+camel_stream_mem_get_type
+camel_stream_null_get_type
+camel_stream_process_get_type
+camel_stream_vfs_get_type
+camel_tcp_stream_get_type
+camel_tcp_stream_raw_get_type
+camel_text_index_cursor_get_type
+camel_text_index_key_cursor_get_type
+camel_text_index_name_get_type
+camel_text_index_get_type
+camel_transport_get_type
+camel_vee_folder_get_type
+camel_vee_store_get_type
+camel_vee_summary_get_type
+camel_vtrash_folder_get_type
index 343963e..f25bbf2 100644 (file)
@@ -25,9 +25,6 @@ CamelAddress
 
 </para>
 
-@parent: 
-@addresses: 
-@priv: 
 
 <!-- ##### FUNCTION camel_address_new ##### -->
 <para>
index 2c7ad17..334dfb8 100644 (file)
@@ -61,19 +61,6 @@ CamelKeyFile
 
 </para>
 
-@parent: 
-@priv: 
-@version: 
-@path: 
-@flags: 
-@fd: 
-@block_size: 
-@root: 
-@root_block: 
-@block_cache_limit: 
-@block_cache_count: 
-@block_cache: 
-@blocks: 
 
 <!-- ##### MACRO CAMEL_BLOCK_FILE_SYNC ##### -->
 <para>
@@ -230,12 +217,6 @@ CamelKeyFile
 
 </para>
 
-@parent: 
-@priv: 
-@fp: 
-@path: 
-@flags: 
-@last: 
 
 <!-- ##### FUNCTION camel_key_file_new ##### -->
 <para>
index 9219fc7..fc345dc 100644 (file)
@@ -25,16 +25,6 @@ CamelCertDB
 
 </para>
 
-@parent: 
-@priv: 
-@filename: 
-@version: 
-@saved_certs: 
-@flags: 
-@cert_size: 
-@cert_chunks: 
-@certs: 
-@cert_hash: 
 
 <!-- ##### ENUM CamelCertTrust ##### -->
 <para>
index 44dcb8f..c0bf9de 100644 (file)
@@ -25,8 +25,11 @@ CamelCipherContext
 
 </para>
 
-@parent: 
-@priv: 
+
+<!-- ##### ARG CamelCipherContext:session ##### -->
+<para>
+
+</para>
 
 <!-- ##### STRUCT CamelCipherValidity ##### -->
 <para>
@@ -101,13 +104,13 @@ CamelCipherContext
 @Returns: 
 
 
-<!-- ##### FUNCTION camel_cipher_context_construct ##### -->
+<!-- ##### FUNCTION camel_cipher_context_get_session ##### -->
 <para>
 
 </para>
 
 @context: 
-@session
+@Returns
 
 
 <!-- ##### FUNCTION camel_cipher_id_to_hash ##### -->
@@ -298,6 +301,34 @@ CamelCipherContext
 @gpointer cert_data: 
 @gpointer cert_data:
 @gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
+@gpointer cert_data:
+@gpointer cert_data: 
 @gpointer cert_data: 
 
 
index 4f4c015..ad3fef1 100644 (file)
@@ -25,8 +25,11 @@ CamelDataCache
 
 </para>
 
-@parent: 
-@priv: 
+
+<!-- ##### ARG CamelDataCache:path ##### -->
+<para>
+
+</para>
 
 <!-- ##### FUNCTION camel_data_cache_new ##### -->
 <para>
index c81bb7f..f48475c 100644 (file)
@@ -25,12 +25,6 @@ CamelDataWrapper
 
 </para>
 
-@parent: 
-@priv: 
-@encoding: 
-@mime_type: 
-@stream: 
-@offline: 
 
 <!-- ##### FUNCTION camel_data_wrapper_new ##### -->
 <para>
index 17328ee..15cccd7 100644 (file)
@@ -25,11 +25,6 @@ CamelDiscoDiary
 
 </para>
 
-@parent: 
-@store: 
-@file: 
-@folders: 
-@uidmap: 
 
 <!-- ##### ENUM CamelDiscoDiaryAction ##### -->
 <para>
index 504e7de..f3cad62 100644 (file)
@@ -25,8 +25,6 @@ CamelDiscoFolder
 
 </para>
 
-@parent: 
-@offline_sync: 
 
 <!-- ##### FUNCTION camel_disco_folder_expunge_uids ##### -->
 <para>
index 7dc0157..5a5787a 100644 (file)
@@ -25,9 +25,6 @@ CamelDiscoStore
 
 </para>
 
-@parent: 
-@status: 
-@diary: 
 
 <!-- ##### ENUM CamelDiscoStoreStatus ##### -->
 <para>
index b429b25..eb03a68 100644 (file)
@@ -25,8 +25,6 @@ CamelFilterDriver
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### USER_FUNCTION CamelFilterGetFolderFunc ##### -->
 <para>
index dacfe08..2b1ce65 100644 (file)
@@ -25,16 +25,6 @@ CamelFolderSearch
 
 </para>
 
-@parent: 
-@priv: 
-@sexp: 
-@last_search: 
-@folder: 
-@summary: 
-@summary_set: 
-@current: 
-@current_message: 
-@body_index: 
 
 <!-- ##### FUNCTION camel_folder_search_new ##### -->
 <para>
index 623666f..542349f 100644 (file)
@@ -25,31 +25,6 @@ CamelFolderSummary
 
 </para>
 
-@parent: 
-@priv: 
-@version: 
-@flags: 
-@nextuid: 
-@time: 
-@saved_count: 
-@unread_count: 
-@deleted_count: 
-@junk_count: 
-@junk_not_deleted_count: 
-@visible_count: 
-@message_info_chunks: 
-@content_info_chunks: 
-@summary_path: 
-@build_content: 
-@uids: 
-@loaded_infos: 
-@folder: 
-@meta_summary: 
-@cache_load_time: 
-@timeout_handle: 
-@collate: 
-@sort_by: 
-@later: 
 
 <!-- ##### STRUCT CamelMessageInfo ##### -->
 <para>
index 4c42fc5..0090695 100644 (file)
@@ -25,16 +25,6 @@ CamelFolder
 
 </para>
 
-@parent: 
-@priv: 
-@name: 
-@full_name: 
-@description: 
-@parent_store: 
-@summary: 
-@folder_flags: 
-@permanent_flags: 
-@later: 
 
 <!-- ##### STRUCT CamelFolderChangeInfo ##### -->
 <para>
index ade6aea..4593441 100644 (file)
@@ -25,8 +25,11 @@ CamelGpgContext
 
 </para>
 
-@parent: 
-@priv: 
+
+<!-- ##### ARG CamelGpgContext:always-trust ##### -->
+<para>
+
+</para>
 
 <!-- ##### FUNCTION camel_gpg_context_new ##### -->
 <para>
index 078c620..e06ac2b 100644 (file)
@@ -25,8 +25,6 @@ CamelHTMLParser
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM camel_html_parser_t ##### -->
 <para>
index 7f99b9a..93b7a6f 100644 (file)
@@ -25,20 +25,6 @@ CamelHttpStream
 
 </para>
 
-@parent: 
-@parser: 
-@content_type: 
-@headers: 
-@method: 
-@session: 
-@url: 
-@user_agent: 
-@proxy: 
-@authrealm: 
-@authpass: 
-@statuscode: 
-@raw: 
-@read: 
 
 <!-- ##### ENUM CamelHttpMethod ##### -->
 <para>
index 1799895..d8ec516 100644 (file)
@@ -67,6 +67,18 @@ CamelImapStore
 @CamelImapStore *store, struct _CamelImapMsg *m:
 
 @CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
 @CamelImapStore *store, struct _CamelImapMsg *m: 
 @size: 
 @Returns: 
index 1aa3816..1a81adc 100644 (file)
@@ -25,14 +25,6 @@ CamelIndex
 
 </para>
 
-@parent: 
-@priv: 
-@path: 
-@version: 
-@flags: 
-@state: 
-@normalize: 
-@normalize_data: 
 
 <!-- ##### USER_FUNCTION CamelIndexNorm ##### -->
 <para>
@@ -50,9 +42,6 @@ CamelIndex
 
 </para>
 
-@parent: 
-@priv: 
-@index: 
 
 <!-- ##### FUNCTION camel_index_cursor_new ##### -->
 <para>
@@ -86,12 +75,6 @@ CamelIndex
 
 </para>
 
-@parent: 
-@priv: 
-@index: 
-@name: 
-@buffer: 
-@words: 
 
 <!-- ##### FUNCTION camel_index_name_new ##### -->
 <para>
index 7aa023a..70dd8b5 100644 (file)
@@ -25,8 +25,6 @@ CamelInternetAddress
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_internet_address_new ##### -->
 <para>
index 886e6bd..7bc1e48 100644 (file)
@@ -25,8 +25,11 @@ CamelMedium
 
 </para>
 
-@parent: 
-@content: 
+
+<!-- ##### ARG CamelMedium:content ##### -->
+<para>
+
+</para>
 
 <!-- ##### STRUCT CamelMediumHeader ##### -->
 <para>
@@ -93,3 +96,21 @@ CamelMedium
 @headers: 
 
 
+<!-- ##### FUNCTION camel_medium_get_content ##### -->
+<para>
+
+</para>
+
+@medium: 
+@Returns: 
+
+
+<!-- ##### FUNCTION camel_medium_set_content ##### -->
+<para>
+
+</para>
+
+@medium: 
+@content: 
+
+
index 8e82673..f382da3 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterBasic
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM CamelMimeFilterBasicType ##### -->
 <para>
index 9d122d7..d758045 100644 (file)
@@ -45,8 +45,6 @@ CamelMimeFilterBestenc
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_bestenc_new ##### -->
 <para>
index 6ab3f99..1f471d1 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterCanon
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_canon_new ##### -->
 <para>
index c6b8395..a757e46 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterCharset
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_charset_new ##### -->
 <para>
index eb5a3bb..abdda64 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterCRLF
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM CamelMimeFilterCRLFDirection ##### -->
 <para>
index e901f8c..8e9edf4 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterEnriched
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### MACRO CAMEL_MIME_FILTER_ENRICHED_IS_RICHTEXT ##### -->
 <para>
index a14ef6c..593dcc4 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterFrom
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_from_new ##### -->
 <para>
index 7b47b86..d0b41f9 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterGZip
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM CamelMimeFilterGZipMode ##### -->
 <para>
index 0ebb339..d8f9061 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterHTML
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_html_new ##### -->
 <para>
index 5a2564f..9332cbe 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterIndex
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_index_new ##### -->
 <para>
index 9511be0..bf1649c 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterLinewrap
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_linewrap_new ##### -->
 <para>
index 71c722e..b66d681 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterPgp
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_pgp_new ##### -->
 <para>
index 45b18b3..ab2d1f1 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterProgress
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_progress_new ##### -->
 <para>
index 40812dd..a285003 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterSave
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_save_new ##### -->
 <para>
index c5a1253..fdbec20 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterToHTML
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### MACRO CAMEL_MIME_FILTER_TOHTML_PRE ##### -->
 <para>
index 6e95293..9894a04 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterWindows
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_mime_filter_windows_new ##### -->
 <para>
index 8ff9221..24922e3 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeFilterYenc
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM CamelMimeFilterYencDirection ##### -->
 <para>
index a421599..ed506eb 100644 (file)
@@ -25,16 +25,6 @@ CamelMimeFilter
 
 </para>
 
-@parent: 
-@priv: 
-@outreal: 
-@outbuf: 
-@outptr: 
-@outsize: 
-@outpre: 
-@backbuf: 
-@backsize: 
-@backlen: 
 
 <!-- ##### FUNCTION camel_mime_filter_new ##### -->
 <para>
index 787d1b7..8b91f07 100644 (file)
@@ -25,16 +25,6 @@ CamelMimeMessage
 
 </para>
 
-@parent: 
-@date: 
-@date_offset: 
-@date_received: 
-@date_received_offset: 
-@subject: 
-@message_id: 
-@reply_to: 
-@from: 
-@recipients: 
 
 <!-- ##### MACRO CAMEL_RECIPIENT_TYPE_TO ##### -->
 <para>
index 00a95ec..0a829bb 100644 (file)
@@ -25,8 +25,6 @@ CamelMimeParser
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM camel_mime_parser_state_t ##### -->
 <para>
index 9a88fd1..4698723 100644 (file)
@@ -25,9 +25,26 @@ CamelMimePart
 
 </para>
 
-@parent: 
-@priv: 
-@headers: 
+
+<!-- ##### ARG CamelMimePart:content-id ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelMimePart:content-md5 ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelMimePart:description ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelMimePart:disposition ##### -->
+<para>
+
+</para>
 
 <!-- ##### FUNCTION camel_mime_part_new ##### -->
 <para>
@@ -119,6 +136,24 @@ CamelMimePart
 @Returns: 
 
 
+<!-- ##### FUNCTION camel_mime_part_set_content_md5 ##### -->
+<para>
+
+</para>
+
+@mime_part: 
+@md5sum: 
+
+
+<!-- ##### FUNCTION camel_mime_part_get_content_md5 ##### -->
+<para>
+
+</para>
+
+@mime_part: 
+@Returns: 
+
+
 <!-- ##### FUNCTION camel_mime_part_set_content_location ##### -->
 <para>
 
index 2c5674b..f8bd0bb 100644 (file)
@@ -25,11 +25,6 @@ CamelMultipartEncrypted
 
 </para>
 
-@parent: 
-@version: 
-@content: 
-@decrypted: 
-@protocol: 
 
 <!-- ##### FUNCTION camel_multipart_encrypted_new ##### -->
 <para>
index 83596da..74c8069 100644 (file)
@@ -25,16 +25,6 @@ CamelMultipartSigned
 
 </para>
 
-@parent: 
-@content: 
-@signature: 
-@contentraw: 
-@protocol: 
-@micalg: 
-@start1: 
-@end1: 
-@start2: 
-@end2: 
 
 <!-- ##### FUNCTION camel_multipart_signed_new ##### -->
 <para>
index 07ffc8a..0e20374 100644 (file)
@@ -25,10 +25,6 @@ CamelMultipart
 
 </para>
 
-@parent: 
-@parts: 
-@preface: 
-@postface: 
 
 <!-- ##### FUNCTION camel_multipart_new ##### -->
 <para>
index 0f16870..919642d 100644 (file)
@@ -25,8 +25,6 @@ CamelNNTPAddress
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_nntp_address_new ##### -->
 <para>
index 6e0ca83..c5c14e1 100644 (file)
@@ -20,83 +20,11 @@ CamelObject
 <!-- ##### SECTION Image ##### -->
 
 
-<!-- ##### MACRO CAMEL_OBJECT_TRACK_INSTANCES ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### TYPEDEF CamelType ##### -->
-<para>
-
-</para>
-
-
 <!-- ##### STRUCT CamelObject ##### -->
 <para>
 
 </para>
 
-@klass: 
-@magic: 
-@hooks: 
-@ref_count: 
-@flags: 
-@next: 
-@prev: 
-
-<!-- ##### MACRO CAMEL_CHECK_CAST ##### -->
-<para>
-
-</para>
-
-@obj: 
-@ctype: 
-@ptype: 
-
-
-<!-- ##### MACRO CAMEL_CHECK_CLASS_CAST ##### -->
-<para>
-
-</para>
-
-@klass: 
-@ctype: 
-@ptype: 
-
-
-<!-- ##### MACRO CAMEL_CHECK_TYPE ##### -->
-<para>
-
-</para>
-
-@obj: 
-@ctype: 
-
-
-<!-- ##### MACRO CAMEL_CHECK_CLASS_TYPE ##### -->
-<para>
-
-</para>
-
-@klass: 
-@ctype: 
-
-
-<!-- ##### VARIABLE camel_object_type ##### -->
-<para>
-
-</para>
-
-
-<!-- ##### MACRO CAMEL_OBJECT_GET_TYPE ##### -->
-<para>
-
-</para>
-
-@o: 
-
 
 <!-- ##### TYPEDEF CamelObjectHookID ##### -->
 <para>
@@ -104,39 +32,6 @@ CamelObject
 </para>
 
 
-<!-- ##### USER_FUNCTION CamelObjectClassInitFunc ##### -->
-<para>
-
-</para>
-
-@Param1: 
-
-
-<!-- ##### USER_FUNCTION CamelObjectClassFinalizeFunc ##### -->
-<para>
-
-</para>
-
-@Param1: 
-
-
-<!-- ##### USER_FUNCTION CamelObjectInitFunc ##### -->
-<para>
-
-</para>
-
-@Param1: 
-@Param2: 
-
-
-<!-- ##### USER_FUNCTION CamelObjectFinalizeFunc ##### -->
-<para>
-
-</para>
-
-@Param1: 
-
-
 <!-- ##### USER_FUNCTION CamelObjectEventPrepFunc ##### -->
 <para>
 
@@ -157,70 +52,6 @@ CamelObject
 @Param3: 
 
 
-<!-- ##### MACRO CAMEL_INVALID_TYPE ##### -->
-<para>
-
-</para>
-
-
-
-<!-- ##### ENUM CamelObjectFlags ##### -->
-<para>
-
-</para>
-
-@CAMEL_OBJECT_DESTROY: 
-
-<!-- ##### FUNCTION camel_type_init ##### -->
-<para>
-
-</para>
-
-@void: 
-
-
-<!-- ##### FUNCTION camel_type_register ##### -->
-<para>
-
-</para>
-
-@parent: 
-@name: 
-@instance_size: 
-@classfuncs_size: 
-@class_init: 
-@class_finalize: 
-@instance_init: 
-@instance_finalize: 
-@Returns: 
-
-
-<!-- ##### MACRO camel_type_get_global_classfuncs ##### -->
-<para>
-
-</para>
-
-@x: 
-
-
-<!-- ##### FUNCTION camel_type_to_name ##### -->
-<para>
-
-</para>
-
-@type: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_name_to_type ##### -->
-<para>
-
-</para>
-
-@name: 
-@Returns: 
-
-
 <!-- ##### FUNCTION camel_object_class_add_event ##### -->
 <para>
 
@@ -231,80 +62,6 @@ CamelObject
 @prep: 
 
 
-<!-- ##### FUNCTION camel_object_class_dump_tree ##### -->
-<para>
-
-</para>
-
-@root: 
-
-
-<!-- ##### FUNCTION camel_object_cast ##### -->
-<para>
-
-</para>
-
-@obj: 
-@ctype: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_is ##### -->
-<para>
-
-</para>
-
-@obj: 
-@ctype: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_class_cast ##### -->
-<para>
-
-</para>
-
-@klass: 
-@ctype: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_class_is ##### -->
-<para>
-
-</para>
-
-@klass: 
-@ctype: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_new ##### -->
-<para>
-
-</para>
-
-@type: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_ref ##### -->
-<para>
-
-</para>
-
-@Param1: 
-@Returns: 
-
-
-<!-- ##### FUNCTION camel_object_unref ##### -->
-<para>
-
-</para>
-
-@Param1: 
-
-
 <!-- ##### FUNCTION camel_object_hook_event ##### -->
 <para>
 
@@ -430,7 +187,7 @@ CamelObject
 
 </para>
 
-@vo
+@object
 @Returns: 
 
 
@@ -439,10 +196,10 @@ CamelObject
 
 </para>
 
-@hash
-@equal
-@keycopy
-@keyfree
+@key_hash_func
+@key_equal_func
+@key_copy_func
+@key_free_func
 @Returns: 
 
 
@@ -483,7 +240,7 @@ CamelObject
 
 @bag: 
 @key: 
-@vo
+@object
 
 
 <!-- ##### FUNCTION camel_object_bag_abort ##### -->
@@ -501,8 +258,8 @@ CamelObject
 </para>
 
 @bag: 
-@o: 
-@newkey: 
+@object
+@new_key: 
 
 
 <!-- ##### FUNCTION camel_object_bag_list ##### -->
@@ -520,7 +277,7 @@ CamelObject
 </para>
 
 @bag: 
-@o: 
+@object
 
 
 <!-- ##### FUNCTION camel_object_bag_destroy ##### -->
index 2847051..d7ddf1b 100644 (file)
@@ -25,8 +25,6 @@ CamelOfflineFolder
 
 </para>
 
-@parent: 
-@sync_offline: 
 
 <!-- ##### FUNCTION camel_offline_folder_downsync ##### -->
 <para>
index 73fa6b4..025e6ce 100644 (file)
@@ -25,10 +25,6 @@ CamelOfflineJournal
 
 </para>
 
-@parent: 
-@folder: 
-@filename: 
-@queue: 
 
 <!-- ##### STRUCT CamelOfflineJournalEntry ##### -->
 <para>
index ab5ae7d..4782f5c 100644 (file)
@@ -25,8 +25,6 @@ CamelOfflineStore
 
 </para>
 
-@parent: 
-@state: 
 
 <!-- ##### FUNCTION camel_offline_store_set_network_state ##### -->
 <para>
index 8bcb7c4..bf8aa2e 100644 (file)
@@ -59,13 +59,6 @@ CamelKeyTable
 
 </para>
 
-@parent: 
-@priv: 
-@blocks: 
-@rootid: 
-@is_key: 
-@is_key_data: 
-@partition: 
 
 <!-- ##### FUNCTION camel_partition_table_new ##### -->
 <para>
@@ -153,12 +146,6 @@ CamelKeyTable
 
 </para>
 
-@parent: 
-@priv: 
-@blocks: 
-@rootid: 
-@root: 
-@root_block: 
 
 <!-- ##### FUNCTION camel_key_table_new ##### -->
 <para>
index 859101f..9c0d359 100644 (file)
@@ -25,9 +25,6 @@ CamelSaslAnonymous
 
 </para>
 
-@parent: 
-@trace_info: 
-@type: 
 
 <!-- ##### ENUM CamelSaslAnonTraceType ##### -->
 <para>
index 42d0108..00b71e9 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslCramMd5
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_cram_md5_authtype ##### -->
 <para>
index fbd3e10..3d7b7e2 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslDigestMd5
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_digest_md5_authtype ##### -->
 <para>
index 5463495..44738cd 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslGssapi
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_gssapi_authtype ##### -->
 <para>
index bf282e4..4cd3fea 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslLogin
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_login_authtype ##### -->
 <para>
index 745cff0..79bab89 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslNTLM
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_ntlm_authtype ##### -->
 <para>
index f63a8e0..9a73f29 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslPlain
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_plain_authtype ##### -->
 <para>
index 393290a..3fe4e62 100644 (file)
@@ -25,8 +25,6 @@ CamelSaslPOPB4SMTP
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### VARIABLE camel_sasl_popb4smtp_authtype ##### -->
 <para>
index 1e260d2..e6050d8 100644 (file)
@@ -25,8 +25,26 @@ CamelSasl
 
 </para>
 
-@parent: 
-@priv: 
+
+<!-- ##### ARG CamelSasl:authenticated ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelSasl:mechanism ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelSasl:service ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG CamelSasl:service-name ##### -->
+<para>
+
+</para>
 
 <!-- ##### FUNCTION camel_sasl_challenge ##### -->
 <para>
index 4bb13db..275e599 100644 (file)
@@ -25,10 +25,6 @@ CamelSeekableStream
 
 </para>
 
-@parent: 
-@position: 
-@bound_start: 
-@bound_end: 
 
 <!-- ##### ENUM CamelStreamSeekPolicy ##### -->
 <para>
index 026babd..6ec9007 100644 (file)
@@ -25,8 +25,6 @@ CamelSeekableSubstream
 
 </para>
 
-@parent: 
-@parent_stream: 
 
 <!-- ##### FUNCTION camel_seekable_substream_new ##### -->
 <para>
index 7deed24..0720ac4 100644 (file)
@@ -25,13 +25,6 @@ CamelService
 
 </para>
 
-@parent: 
-@priv: 
-@session: 
-@provider: 
-@status: 
-@connect_op: 
-@url: 
 
 <!-- ##### MACRO CAMEL_SERVICE_USERNAME ##### -->
 <para>
index 398a968..002c8a6 100644 (file)
@@ -25,13 +25,6 @@ CamelSession
 
 </para>
 
-@parent: 
-@priv: 
-@storage_path: 
-@junk_plugin: 
-@online: 
-@check_junk: 
-@network_state: 
 
 <!-- ##### USER_FUNCTION CamelTimeoutCallback ##### -->
 <para>
index 62819a4..3455994 100644 (file)
@@ -25,8 +25,6 @@ CamelSMIMEContext
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM camel_smime_sign_t ##### -->
 <para>
index 88a67ed..a59e8d8 100644 (file)
@@ -56,18 +56,6 @@ CamelStoreSummary
 
 </para>
 
-@parent: 
-@priv: 
-@version: 
-@flags: 
-@count: 
-@time: 
-@uri_base: 
-@store_info_size: 
-@store_info_chunks: 
-@summary_path: 
-@folders: 
-@folders_path: 
 
 <!-- ##### MACRO CAMEL_STORE_INFO_FOLDER_UNKNOWN ##### -->
 <para>
index fd8e6d9..0ed8d91 100644 (file)
@@ -25,14 +25,6 @@ CamelStore
 
 </para>
 
-@parent: 
-@priv: 
-@folders: 
-@cdb_r: 
-@cdb_w: 
-@flags: 
-@mode: 
-@later: 
 
 <!-- ##### STRUCT CamelFolderInfo ##### -->
 <para>
index eeb1159..7300e9f 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamBuffer
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### ENUM CamelStreamBufferMode ##### -->
 <para>
index 0411de8..4ca78d1 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamFilter
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_stream_filter_add ##### -->
 <para>
index a699445..fc7c111 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamFs
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_stream_fs_new_with_name ##### -->
 <para>
index 951b0f9..cc9b375 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamMem
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_stream_mem_new ##### -->
 <para>
index 57db726..dc62b52 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamNull
 
 </para>
 
-@parent: 
-@written: 
 
 <!-- ##### FUNCTION camel_stream_null_new ##### -->
 <para>
index 66ac3ad..bd9d293 100644 (file)
@@ -25,9 +25,6 @@ CamelStreamProcess
 
 </para>
 
-@parent: 
-@sockfd: 
-@childpid: 
 
 <!-- ##### FUNCTION camel_stream_process_new ##### -->
 <para>
index 300c52a..74a5365 100644 (file)
@@ -25,8 +25,6 @@ CamelStreamVFS
 
 </para>
 
-@parent: 
-@stream: 
 
 <!-- ##### ENUM CamelStreamVFSOpenMethod ##### -->
 <para>
index 35c4b34..84f5063 100644 (file)
@@ -25,8 +25,6 @@ CamelStream
 
 </para>
 
-@parent: 
-@eos: 
 
 <!-- ##### FUNCTION camel_stream_read ##### -->
 <para>
index e232451..7c49c5e 100644 (file)
@@ -25,9 +25,6 @@ CamelTcpStreamRaw
 
 </para>
 
-@parent: 
-@sockfd: 
-@is_nonblocking: 
 
 <!-- ##### FUNCTION camel_tcp_stream_raw_new ##### -->
 <para>
index 092dc7a..ef20ba3 100644 (file)
@@ -25,7 +25,6 @@ CamelTcpStream
 
 </para>
 
-@parent: 
 
 <!-- ##### ENUM CamelSockOpt ##### -->
 <para>
index 52fa04d..ed89d7a 100644 (file)
@@ -35,32 +35,24 @@ CamelTextIndex
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### STRUCT CamelTextIndexCursor ##### -->
 <para>
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### STRUCT CamelTextIndexKeyCursor ##### -->
 <para>
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### STRUCT CamelTextIndexName ##### -->
 <para>
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_text_index_new ##### -->
 <para>
index bb1b27e..79b89e9 100644 (file)
@@ -25,8 +25,6 @@ CamelTransport
 
 </para>
 
-@parent: 
-@priv: 
 
 <!-- ##### FUNCTION camel_transport_send_to ##### -->
 <para>
index 701e47e..0b60cb8 100644 (file)
@@ -1,3 +1,59 @@
+<!-- ##### SECTION ./tmpl/address-data.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/address-data.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/address-data.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/address-data.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/address-data.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/address-data.sgml:Title ##### -->
+address-data
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/addresses.sgml:Title ##### -->
+addresses
+
+
 <!-- ##### SECTION ./tmpl/camel-digest-folder.sgml:Long_Description ##### -->
 <para>
 
@@ -70,2401 +126,7987 @@ CamelDigestStore
 CamelDigestSummary
 
 
-<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Title ##### -->
-camel-groupwise-private
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-folder.sgml:Title ##### -->
+CamelGroupwiseFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Title ##### -->
-camel-imap-private
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-journal.sgml:Title ##### -->
+CamelGroupwiseJournal
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Title ##### -->
-camel-imap-types
+<!-- ##### SECTION ./tmpl/camel-groupwise-private.sgml:Title ##### -->
+camel-groupwise-private
 
 
-<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-local-private.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Title ##### -->
-camel-local-private
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-store-summary.sgml:Title ##### -->
+CamelGroupwiseStoreSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Stability_Level ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:Stability_Level ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Title ##### -->
-camel-md5-utils
+<!-- ##### SECTION ./tmpl/camel-groupwise-store.sgml:Title ##### -->
+CamelGroupwiseStore
 
 
-<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Stability_Level ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:Stability_Level ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Title ##### -->
-camel-mime-part-utils
+<!-- ##### SECTION ./tmpl/camel-groupwise-summary.sgml:Title ##### -->
+CamelGroupwiseSummary
 
 
-<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-news-address.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Stability_Level ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:Stability_Level ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Title ##### -->
-CamelNewsAddress
+<!-- ##### SECTION ./tmpl/camel-groupwise-transport.sgml:Title ##### -->
+CamelGroupwiseTransport
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Title ##### -->
-camel-nntp-private
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-groupwise-utils.sgml:Title ##### -->
+camel-groupwise-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Title ##### -->
-camel-nntp-types
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-process.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-imap-command.sgml:Title ##### -->
+camel-imap-command
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-process.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-process.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-process.sgml:Stability_Level ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:Stability_Level ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-process.sgml:Title ##### -->
-camel-process
+<!-- ##### SECTION ./tmpl/camel-imap-folder.sgml:Title ##### -->
+CamelImapFolder
 
 
-<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-search-private.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Title ##### -->
-camel-search-private
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:Stability_Level ##### -->
 
 
-<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Long_Description ##### -->
+
+<!-- ##### SECTION ./tmpl/camel-imap-journal.sgml:Title ##### -->
+CamelImapJournal
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Stability_Level ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:Stability_Level ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Title ##### -->
-camel-search-sql-sexp.h
+<!-- ##### SECTION ./tmpl/camel-imap-message-cache.sgml:Title ##### -->
+CamelImapMessageCache
 
 
-<!-- ##### SECTION ./tmpl/camel-types.sgml:Long_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-types.sgml:See_Also ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### SECTION ./tmpl/camel-types.sgml:Short_Description ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Short_Description ##### -->
 
 
 
-<!-- ##### SECTION ./tmpl/camel-types.sgml:Title ##### -->
-camel-types
+<!-- ##### SECTION ./tmpl/camel-imap-private.sgml:Title ##### -->
+camel-imap-private
 
 
-<!-- ##### MACRO CAMEL_GROUPWISE_FOLDER_LOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:Image ##### -->
 
-</para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_GROUPWISE_FOLDER_UNLOCK ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_IMAP4_FOLDER_MARKED ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### MACRO CAMEL_IMAP4_FOLDER_UNMARKED ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:Short_Description ##### -->
 
-</para>
 
 
-<!-- ##### MACRO CAMEL_IMAP4_MESSAGE_RECENT ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:Stability_Level ##### -->
 
-</para>
 
 
-<!-- ##### MACRO CAMEL_IMAP_FOLDER_LOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-search.sgml:Title ##### -->
+CamelImapSearch
 
-</para>
 
-@f: 
-@l: 
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:Image ##### -->
 
-<!-- ##### MACRO CAMEL_IMAP_FOLDER_UNLOCK ##### -->
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_IMAP_MESSAGE_RECENT ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:See_Also ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### MACRO CAMEL_IMAP_WRAPPER_LOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:Short_Description ##### -->
 
-</para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_IMAP_WRAPPER_UNLOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:Stability_Level ##### -->
 
-</para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_INTERFACE_TYPE ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store-summary.sgml:Title ##### -->
+CamelImapStoreSummary
 
-</para>
 
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:Image ##### -->
 
-<!-- ##### MACRO CAMEL_LOCAL_FOLDER_LOCK ##### -->
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_LOCAL_FOLDER_UNLOCK ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:See_Also ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_MAKE_CLASS ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:Short_Description ##### -->
 
-</para>
 
-@type: 
-@tname: 
-@parent: 
-@pname: 
 
-<!-- ##### MACRO CAMEL_NNTP_FOLDER_LOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:Stability_Level ##### -->
 
-</para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_NNTP_FOLDER_UNLOCK ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-store.sgml:Title ##### -->
+CamelImapStore
 
-</para>
 
-@f: 
-@l: 
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:Image ##### -->
 
-<!-- ##### MACRO CAMEL_NNTP_STORE_LOCK ##### -->
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_NNTP_STORE_UNLOCK ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:See_Also ##### -->
 <para>
 
 </para>
 
-@f: 
-@l: 
 
-<!-- ##### MACRO CAMEL_OBJECT_TYPE ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:Short_Description ##### -->
 
-</para>
 
 
-<!-- ##### ARG CamelCipherContext:session ##### -->
-<para>
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:Stability_Level ##### -->
 
-</para>
 
 
-<!-- ##### ARG CamelDataCache:path ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-summary.sgml:Title ##### -->
+CamelImapSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Long_Description ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### STRUCT CamelDigestFolder ##### -->
+<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:See_Also ##### -->
 <para>
 
 </para>
 
-@parent: 
+
+<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-types.sgml:Title ##### -->
+camel-imap-types
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-utils.sgml:Title ##### -->
+camel-imap-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap-wrapper.sgml:Title ##### -->
+CamelImapWrapper
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-command.sgml:Title ##### -->
+camel-imap4-command
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-engine.sgml:Title ##### -->
+CamelIMAP4Engine
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-folder.sgml:Title ##### -->
+CamelIMAP4Folder
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-journal.sgml:Title ##### -->
+CamelIMAP4Journal
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-search.sgml:Title ##### -->
+CamelIMAP4Search
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-specials.sgml:Title ##### -->
+camel-imap4-specials
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store-summary.sgml:Title ##### -->
+CamelIMAP4StoreSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-store.sgml:Title ##### -->
+CamelIMAP4Store
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-stream.sgml:Title ##### -->
+CamelIMAP4Stream
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-summary.sgml:Title ##### -->
+CamelIMAP4Summary
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-imap4-utils.sgml:Title ##### -->
+camel-imap4-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-folder.sgml:Title ##### -->
+CamelLocalFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-private.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-private.sgml:Title ##### -->
+camel-local-private
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-store.sgml:Title ##### -->
+CamelLocalStore
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-local-summary.sgml:Title ##### -->
+CamelLocalSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-folder.sgml:Title ##### -->
+CamelMaildirFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-store.sgml:Title ##### -->
+CamelMaildirStore
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-maildir-summary.sgml:Title ##### -->
+CamelMaildirSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-folder.sgml:Title ##### -->
+CamelMboxFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-store.sgml:Title ##### -->
+CamelMboxStore
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mbox-summary.sgml:Title ##### -->
+CamelMboxSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-md5-utils.sgml:Title ##### -->
+camel-md5-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-folder.sgml:Title ##### -->
+CamelMhFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-store.sgml:Title ##### -->
+CamelMhStore
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mh-summary.sgml:Title ##### -->
+CamelMhSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-mime-part-utils.sgml:Title ##### -->
+camel-mime-part-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-news-address.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-news-address.sgml:Title ##### -->
+CamelNewsAddress
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-auth.sgml:Title ##### -->
+camel-nntp-auth
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-folder.sgml:Title ##### -->
+CamelNNTPFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-grouplist.sgml:Title ##### -->
+camel-nntp-grouplist
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-newsrc.sgml:Title ##### -->
+camel-nntp-newsrc
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-private.sgml:Title ##### -->
+camel-nntp-private
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-resp-codes.sgml:Title ##### -->
+camel-nntp-resp-codes
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store-summary.sgml:Title ##### -->
+CamelNNTPStoreSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-store.sgml:Title ##### -->
+CamelNNTPStore
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-stream.sgml:Title ##### -->
+CamelNNTPStream
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-summary.sgml:Title ##### -->
+CamelNNTPSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-types.sgml:Title ##### -->
+camel-nntp-types
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-nntp-utils.sgml:Title ##### -->
+camel-nntp-utils
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-engine.sgml:Title ##### -->
+CamelPOP3Engine
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-folder.sgml:Title ##### -->
+CamelPOP3Folder
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-store.sgml:Title ##### -->
+CamelPOP3Store
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-pop3-stream.sgml:Title ##### -->
+CamelPOP3Stream
+
+
+<!-- ##### SECTION ./tmpl/camel-process.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-process.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-process.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-process.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-process.sgml:Title ##### -->
+camel-process
+
+
+<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-search-private.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-search-private.sgml:Title ##### -->
+camel-search-private
+
+
+<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-search-sql-sexp.h.sgml:Title ##### -->
+camel-search-sql-sexp.h
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-sendmail-transport.sgml:Title ##### -->
+CamelSendmailTransport
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-smtp-transport.sgml:Title ##### -->
+CamelSmtpTransport
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-folder.sgml:Title ##### -->
+CamelSpoolFolder
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-store.sgml:Title ##### -->
+CamelSpoolStore
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-spool-summary.sgml:Title ##### -->
+CamelSpoolSummary
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test-provider.sgml:Title ##### -->
+camel-test-provider
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-test.sgml:Title ##### -->
+camel-test
+
+
+<!-- ##### SECTION ./tmpl/camel-types.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-types.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/camel-types.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/camel-types.sgml:Title ##### -->
+camel-types
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/folders.sgml:Title ##### -->
+folders
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/messages.sgml:Title ##### -->
+messages
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/session.sgml:Title ##### -->
+CamelTestSession
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:Image ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:Long_Description ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:See_Also ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:Short_Description ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:Stability_Level ##### -->
+
+
+
+<!-- ##### SECTION ./tmpl/streams.sgml:Title ##### -->
+streams
+
+
+<!-- ##### MACRO CAMEL_CHECK_CAST ##### -->
+<para>
+
+</para>
+
+@obj: 
+@ctype: 
+@ptype: 
+
+<!-- ##### MACRO CAMEL_CHECK_CLASS_CAST ##### -->
+<para>
+
+</para>
+
+@klass: 
+@ctype: 
+@ptype: 
+
+<!-- ##### MACRO CAMEL_CHECK_CLASS_TYPE ##### -->
+<para>
+
+</para>
+
+@klass: 
+@ctype: 
+
+<!-- ##### MACRO CAMEL_CHECK_TYPE ##### -->
+<para>
+
+</para>
+
+@obj: 
+@ctype: 
+
+<!-- ##### MACRO CAMEL_GROUPWISE_FOLDER_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_GROUPWISE_FOLDER_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_IMAP4_FOLDER_MARKED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP4_FOLDER_UNMARKED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP4_MESSAGE_RECENT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_FOLDER_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_IMAP_FOLDER_MARKED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_FOLDER_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_IMAP_FOLDER_UNMARKED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_MESSAGE_RECENT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_SERVER_FLAGS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_CHECK_ALL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_CHECK_LSUB ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_FILTER_INBOX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_FILTER_JUNK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_FILTER_JUNK_INBOX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_NAMESPACE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_STORE_OVERRIDE_NAMESPACE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_IMAP_WRAPPER_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_IMAP_WRAPPER_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_INTERFACE_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_INVALID_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_LOCAL_FOLDER_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_LOCAL_FOLDER_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_MAKE_CLASS ##### -->
+<para>
+
+</para>
+
+@type: 
+@tname: 
+@parent: 
+@pname: 
+
+<!-- ##### MACRO CAMEL_NNTP_ERR ##### -->
+<para>
+
+</para>
+
+@x: 
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_LISTMOTD ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_LISTPNAMES ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_LISTSUBSCR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_OVER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_SEARCH ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_SETGET ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_XACTIVE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_EXT_XPATTEXT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_NNTP_FAIL ##### -->
+<para>
+
+</para>
+
+@x: 
+
+<!-- ##### MACRO CAMEL_NNTP_FOLDER_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_NNTP_FOLDER_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_NNTP_OK ##### -->
+<para>
+
+</para>
+
+@x: 
+
+<!-- ##### MACRO CAMEL_NNTP_STORE_LOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_NNTP_STORE_UNLOCK ##### -->
+<para>
+
+</para>
+
+@f: 
+@l: 
+
+<!-- ##### MACRO CAMEL_OBJECT_GET_TYPE ##### -->
+<para>
+
+</para>
+
+@o: 
+
+<!-- ##### MACRO CAMEL_OBJECT_TRACK_INSTANCES ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_OBJECT_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_SMTP_TRANSPORT_8BITMIME ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_SMTP_TRANSPORT_AUTH_EQUAL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_SMTP_TRANSPORT_ENHANCEDSTATUSCODES ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_SMTP_TRANSPORT_IS_ESMTP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO CAMEL_SMTP_TRANSPORT_STARTTLS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelDigestFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+
+<!-- ##### STRUCT CamelDigestStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelDigestSummary ##### -->
+<para>
+
+</para>
+
+@parent_object: 
+
+<!-- ##### STRUCT CamelGroupwiseFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+@search: 
+@journal: 
+@cache: 
+@need_rescan: 
+@need_refresh: 
+@read_only: 
+
+<!-- ##### STRUCT CamelGroupwiseJournal ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelGroupwiseJournalEntry ##### -->
+<para>
+
+</para>
+
+@node: 
+@type: 
+@uid: 
+@original_uid: 
+@source_container: 
+
+<!-- ##### STRUCT CamelGroupwiseMessageContentInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelGroupwiseMessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@server_flags: 
+
+<!-- ##### STRUCT CamelGroupwiseStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+@summary: 
+@root_container: 
+@priv: 
+@current_folder: 
+@refresh_stamp: 
+
+<!-- ##### STRUCT CamelGroupwiseStoreInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@full_name: 
+
+<!-- ##### STRUCT CamelGroupwiseStoreNamespace ##### -->
+<para>
+
+</para>
+
+@path: 
+@full_name: 
+@sep: 
+
+<!-- ##### STRUCT CamelGroupwiseStorePrivate ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelGroupwiseStoreSummary ##### -->
+<para>
+
+</para>
+
+@summary: 
+@priv: 
+@version: 
+@capabilities: 
+@namespace: 
+
+<!-- ##### STRUCT CamelGroupwiseSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@time_string: 
+@version: 
+@validity: 
+
+<!-- ##### STRUCT CamelGroupwiseTransport ##### -->
+<para>
+
+</para>
+
+@parent: 
+@connected: 
+
+<!-- ##### STRUCT CamelIMAP4Command ##### -->
+<para>
+
+</para>
+
+@node: 
+@engine: 
+@ref_count: 
+@status: 
+@result: 
+@id: 
+@tag: 
+@resp_codes: 
+@folder: 
+@ex: 
+@parts: 
+@part: 
+@untagged: 
+@plus: 
+@reset: 
+@user_data: 
+
+<!-- ##### STRUCT CamelIMAP4CommandPart ##### -->
+<para>
+
+</para>
+
+@next: 
+@buffer: 
+@buflen: 
+@literal: 
+
+<!-- ##### USER_FUNCTION CamelIMAP4CommandReset ##### -->
+<para>
+
+</para>
+
+@ic: 
+@user_data: 
+
+<!-- ##### STRUCT CamelIMAP4Engine ##### -->
+<para>
+
+</para>
+
+@parent: 
+@reconnect: 
+@reconnecting: 
+@session: 
+@service: 
+@url: 
+@state: 
+@level: 
+@capa: 
+@maxlen: 
+@maxlentype: 
+@namespaces: 
+@authtypes: 
+@istream: 
+@ostream: 
+@tagprefix: 
+@tag: 
+@nextid: 
+@folder: 
+@queue: 
+@current: 
+
+<!-- ##### STRUCT CamelIMAP4Folder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@search: 
+@journal: 
+@cache: 
+@cachedir: 
+@utf7_name: 
+@read_only: 
+@enable_mlist: 
+
+<!-- ##### STRUCT CamelIMAP4Journal ##### -->
+<para>
+
+</para>
+
+@parent: 
+@failed: 
+
+<!-- ##### STRUCT CamelIMAP4JournalEntry ##### -->
+<para>
+
+</para>
+
+@node: 
+@type: 
+
+<!-- ##### STRUCT CamelIMAP4Literal ##### -->
+<para>
+
+</para>
+
+@type: 
+
+<!-- ##### STRUCT CamelIMAP4MessageContentInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelIMAP4MessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@server_flags: 
+
+<!-- ##### STRUCT CamelIMAP4Namespace ##### -->
+<para>
+
+</para>
+
+@next: 
+@path: 
+@sep: 
+
+<!-- ##### STRUCT CamelIMAP4NamespaceList ##### -->
+<para>
+
+</para>
+
+@personal: 
+@other: 
+@shared: 
+
+<!-- ##### USER_FUNCTION CamelIMAP4PlusCallback ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ic: 
+@linebuf: 
+@linelen: 
+@ex: 
+@Returns: 
+
+<!-- ##### USER_FUNCTION CamelIMAP4ReconnectFunc ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+@Returns: 
+
+<!-- ##### STRUCT CamelIMAP4RespCode ##### -->
+<para>
+
+</para>
+
+@code: 
+
+<!-- ##### STRUCT CamelIMAP4Search ##### -->
+<para>
+
+</para>
+
+@parent: 
+@engine: 
+@lastuid: 
+@validity: 
+@cache: 
+@matches: 
+@matches_hash: 
+@matches_count: 
+
+<!-- ##### STRUCT CamelIMAP4Store ##### -->
+<para>
+
+</para>
+
+@parent: 
+@summary: 
+@engine: 
+@storage_path: 
+
+<!-- ##### STRUCT CamelIMAP4StoreInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelIMAP4StoreSummary ##### -->
+<para>
+
+</para>
+
+@summary: 
+@priv: 
+@version: 
+@namespaces: 
+@capa: 
+
+<!-- ##### STRUCT CamelIMAP4Stream ##### -->
+<para>
+
+</para>
+
+@parent: 
+@stream: 
+@disconnected: 
+@have_unget: 
+@mode: 
+@eol: 
+@literal: 
+@realbuf: 
+@inbuf: 
+@inptr: 
+@inend: 
+@tokenbuf: 
+@tokenptr: 
+@tokenleft: 
+@unget: 
+
+<!-- ##### STRUCT CamelIMAP4Summary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@version: 
+@exists: 
+@recent: 
+@unseen: 
+@uidvalidity: 
+@uidvalidity_changed: 
+@update_flags: 
+
+<!-- ##### USER_FUNCTION CamelIMAP4UntaggedCallback ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ic: 
+@index: 
+@token: 
+@ex: 
+@Returns: 
+
+<!-- ##### STRUCT CamelIMAPJournal ##### -->
+<para>
+
+</para>
+
+@parent: 
+@folders: 
+@uidmap: 
+@rp_in_progress: 
+
+<!-- ##### STRUCT CamelIMAPJournalEntry ##### -->
+<para>
+
+</para>
+
+@node: 
+@type: 
+@uids: 
+@append_uid: 
+@dest_folder_name: 
+@move: 
+
+<!-- ##### STRUCT CamelISubscribe ##### -->
+<para>
+
+</para>
+
+@iface: 
+@subscribed: 
+@subscribe: 
+@unsubscribe: 
+
+<!-- ##### STRUCT CamelImapFolder ##### -->
+<para>
+
+</para>
+
+@parent_object: 
+@priv: 
+@search: 
+@cache: 
+@need_rescan: 
+@need_refresh: 
+@read_only: 
+
+<!-- ##### STRUCT CamelImapFolderPrivate ##### -->
+<para>
+
+</para>
+
+@cache_lock: 
+
+<!-- ##### STRUCT CamelImapMessageCache ##### -->
+<para>
+
+</para>
+
+@parent_object: 
+@path: 
+@parts: 
+@cached: 
+@max_uid: 
+
+<!-- ##### STRUCT CamelImapMessageContentInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelImapMessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@server_flags: 
+
+<!-- ##### STRUCT CamelImapMsg ##### -->
+<para>
+
+</para>
+
+@msg: 
+@receive: 
+@free: 
+
+<!-- ##### STRUCT CamelImapResponse ##### -->
+<para>
+
+</para>
+
+@folder: 
+@untagged: 
+@status: 
+
+<!-- ##### ENUM CamelImapResponseType ##### -->
+<para>
+
+</para>
+
+@CAMEL_IMAP_RESPONSE_ERROR: 
+@CAMEL_IMAP_RESPONSE_CONTINUATION: 
+@CAMEL_IMAP_RESPONSE_UNTAGGED: 
+@CAMEL_IMAP_RESPONSE_TAGGED: 
+
+<!-- ##### STRUCT CamelImapSearch ##### -->
+<para>
+
+</para>
+
+@parent: 
+@lastuid: 
+@validity: 
+@cache: 
+@matches_count: 
+@matches: 
+@matches_hash: 
+
+<!-- ##### ENUM CamelImapServerLevel ##### -->
+<para>
+
+</para>
+
+@IMAP_LEVEL_UNKNOWN: 
+@IMAP_LEVEL_IMAP4: 
+@IMAP_LEVEL_IMAP4REV1: 
+
+<!-- ##### STRUCT CamelImapStore ##### -->
+<para>
+
+</para>
+
+@parent_object: 
+@istream: 
+@ostream: 
+@summary: 
+@connected: 
+@preauthed: 
+@tag_prefix: 
+@command: 
+@current_folder: 
+@server_level: 
+@capabilities: 
+@parameters: 
+@braindamaged: 
+@namespace: 
+@dir_sep: 
+@base_url: 
+@storage_path: 
+@authtypes: 
+@renaming: 
+
+<!-- ##### STRUCT CamelImapStoreInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@full_name: 
+
+<!-- ##### STRUCT CamelImapStoreNamespace ##### -->
+<para>
+
+</para>
+
+@path: 
+@full_name: 
+@sep: 
+@next: 
+
+<!-- ##### STRUCT CamelImapStoreSummary ##### -->
+<para>
+
+</para>
+
+@summary: 
+@priv: 
+@version: 
+@capabilities: 
+@namespace: 
+
+<!-- ##### STRUCT CamelImapSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@version: 
+@validity: 
+
+<!-- ##### STRUCT CamelImapWrapper ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+@folder: 
+@uid: 
+@part_spec: 
+@part: 
+
+<!-- ##### STRUCT CamelImapWrapperPrivate ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelInterface ##### -->
+<para>
+
+</para>
+
+@type: 
+
+<!-- ##### STRUCT CamelIterator ##### -->
+<para>
+
+</para>
+
+@klass: 
+
+<!-- ##### STRUCT CamelIteratorVTable ##### -->
+<para>
+
+</para>
+
+@free: 
+@next: 
+@reset: 
+@length: 
+
+<!-- ##### STRUCT CamelLocalFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+@flags: 
+@locked: 
+@locktype: 
+@base_path: 
+@folder_path: 
+@summary_path: 
+@index_path: 
+@index: 
+@search: 
+@changes: 
+
+<!-- ##### STRUCT CamelLocalFolderPrivate ##### -->
+<para>
+
+</para>
+
+@search_lock: 
+
+<!-- ##### STRUCT CamelLocalMessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelLocalStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+@toplevel_dir: 
+
+<!-- ##### STRUCT CamelLocalSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@version: 
+@folder_path: 
+@index: 
+@index_force: 
+@check_force: 
+
+<!-- ##### STRUCT CamelMD5Context ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelMaildirFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelMaildirMessageContentInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelMaildirMessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@filename: 
+
+<!-- ##### STRUCT CamelMaildirStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelMaildirSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+
+<!-- ##### STRUCT CamelMboxFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@lockfd: 
+
+<!-- ##### STRUCT CamelMboxMessageContentInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+
+<!-- ##### STRUCT CamelMboxMessageInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@frompos: 
+
+<!-- ##### STRUCT CamelMboxStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelMboxSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@changes: 
+@version: 
+@folder_size: 
+@xstatus: 
+
+<!-- ##### STRUCT CamelMhFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelMhStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+@flags: 
+
+<!-- ##### STRUCT CamelMhSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+
+<!-- ##### STRUCT CamelMimeFilterChomp ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelNNTPFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+@changes: 
+@storage_path: 
+@search: 
+
+<!-- ##### STRUCT CamelNNTPFolderPrivate ##### -->
+<para>
+
+</para>
+
+@search_lock: 
+@cache_lock: 
+
+<!-- ##### STRUCT CamelNNTPGroupList ##### -->
+<para>
+
+</para>
+
+@store: 
+@time: 
+@group_list: 
+
+<!-- ##### STRUCT CamelNNTPGroupListEntry ##### -->
+<para>
+
+</para>
+
+@group_name: 
+@low: 
+@high: 
+@flags: 
+
+<!-- ##### TYPEDEF CamelNNTPNewsrc ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF CamelNNTPOverField ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelNNTPStore ##### -->
+<para>
+
+</para>
+
+@parent_object: 
+@priv: 
+@extensions: 
+@posting_allowed: 
+@do_short_folder_notation: 
+@folder_hierarchy_relative: 
+@summary: 
+@stream: 
+@mem: 
+@cache: 
+@current_folder: 
+@storage_path: 
+@base_url: 
+@xover: 
+
+<!-- ##### STRUCT CamelNNTPStoreClass ##### -->
+<para>
+
+</para>
+
+@parent_class: 
+
+<!-- ##### STRUCT CamelNNTPStoreInfo ##### -->
+<para>
+
+</para>
+
+@info: 
+@full_name: 
+@first: 
+@last: 
+
+<!-- ##### STRUCT CamelNNTPStorePrivate ##### -->
+<para>
+
+</para>
+
+@dummy: 
+
+<!-- ##### STRUCT CamelNNTPStoreSummary ##### -->
+<para>
+
+</para>
+
+@summary: 
+@priv: 
+@version: 
+@last_newslist: 
+
+<!-- ##### STRUCT CamelNNTPStream ##### -->
+<para>
+
+</para>
+
+@parent: 
+@source: 
+@mode: 
+@state: 
+@buf: 
+@ptr: 
+@end: 
+@linebuf: 
+@lineptr: 
+@lineend: 
+
+<!-- ##### STRUCT CamelNNTPSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+@version: 
+@high: 
+@low: 
+
+<!-- ##### STRUCT CamelNewsAddress ##### -->
+<para>
+
+</para>
+
+@parent: 
+@priv: 
+
+<!-- ##### USER_FUNCTION CamelObjectClassFinalizeFunc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### USER_FUNCTION CamelObjectClassInitFunc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### USER_FUNCTION CamelObjectFinalizeFunc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+
+<!-- ##### ENUM CamelObjectFlags ##### -->
+<para>
+
+</para>
+
+@CAMEL_OBJECT_DESTROY: 
+
+<!-- ##### USER_FUNCTION CamelObjectInitFunc ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@Param2: 
+
+<!-- ##### STRUCT CamelObjectMeta ##### -->
+<para>
+
+</para>
+
+@next: 
+@value: 
+@name: 
+
+<!-- ##### ENUM CamelOfflineAction ##### -->
+<para>
+
+</para>
+
+@CAMEL_IMAP_JOURNAL_ENTRY_EXPUNGE: 
+@CAMEL_IMAP_JOURNAL_ENTRY_APPEND: 
+@CAMEL_IMAP_JOURNAL_ENTRY_TRANSFER: 
+
+<!-- ##### STRUCT CamelPOP3Command ##### -->
+<para>
+
+</para>
+
+@next: 
+@prev: 
+@flags: 
+@state: 
+@func: 
+@func_data: 
+@data_size: 
+@data: 
+
+<!-- ##### USER_FUNCTION CamelPOP3CommandFunc ##### -->
+<para>
+
+</para>
+
+@pe: 
+@stream: 
+@data: 
+
+<!-- ##### STRUCT CamelPOP3Engine ##### -->
+<para>
+
+</para>
+
+@parent: 
+@flags: 
+@state: 
+@auth: 
+@capa: 
+@apop: 
+@line: 
+@linelen: 
+@stream: 
+@sentlen: 
+@active: 
+@queue: 
+@done: 
+@current: 
+
+<!-- ##### STRUCT CamelPOP3Folder ##### -->
+<para>
+
+</para>
+
+@parent: 
+@uids: 
+@uids_uid: 
+@uids_id: 
+
+<!-- ##### STRUCT CamelPOP3FolderInfo ##### -->
+<para>
+
+</para>
+
+@id: 
+@size: 
+@flags: 
+@index: 
+@uid: 
+@err: 
+@cmd: 
+@stream: 
+
+<!-- ##### STRUCT CamelPOP3Store ##### -->
+<para>
+
+</para>
+
+@parent: 
+@engine: 
+@cache: 
+@delete_after: 
+
+<!-- ##### STRUCT CamelPOP3Stream ##### -->
+<para>
+
+</para>
+
+@parent: 
+@source: 
+@mode: 
+@state: 
+@buf: 
+@ptr: 
+@end: 
+@linebuf: 
+@lineptr: 
+@lineend: 
+
+<!-- ##### STRUCT CamelSendmailTransport ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelSimpleDataWrapper ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelSmtpTransport ##### -->
+<para>
+
+</para>
+
+@parent: 
+@istream: 
+@ostream: 
+@flags: 
+@connected: 
+@localaddr: 
+@localaddrlen: 
+@authtypes: 
+
+<!-- ##### STRUCT CamelSpoolFolder ##### -->
+<para>
+
+</para>
+
+@parent: 
 @priv: 
+@lockid: 
+
+<!-- ##### STRUCT CamelSpoolStore ##### -->
+<para>
+
+</para>
+
+@parent: 
+@type: 
+
+<!-- ##### STRUCT CamelSpoolSummary ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### STRUCT CamelStreamDataWrapper ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT CamelTestSession ##### -->
+<para>
+
+</para>
+
+@parent: 
+
+<!-- ##### TYPEDEF CamelType ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO DRAFT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### USER_FUNCTION EPathFindFoldersCallback ##### -->
+<para>
+
+</para>
+
+@physical_path: 
+@path: 
+@user_data: 
+@Returns: 
+
+<!-- ##### MACRO GW_PARAM_FILTER_INBOX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP4_READ_BUFLEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP4_READ_PRELEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### USER_FUNCTION IMAPPathFindFoldersCallback ##### -->
+<para>
+
+</para>
+
+@physical_path: 
+@path: 
+@user_data: 
+@Returns: 
+
+<!-- ##### MACRO IMAP_CAPABILITY_IMAP4 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_IMAP4REV1 ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_LITERALPLUS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_LOGINDISABLED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_NAMESPACE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_QUOTA ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_STARTTLS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_STATUS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_UIDPLUS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_XGWEXTENSIONS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_XGWMOVE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_useful_lsub ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_CAPABILITY_utf8_search ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_FETCH_ALL_HEADERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_FETCH_MAILING_LIST_HEADERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_FETCH_MINIMAL_HEADERS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_CHECK_ALL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_CHECK_LSUB ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_FILTER_INBOX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_FILTER_JUNK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_FILTER_JUNK_INBOX ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_OVERRIDE_NAMESPACE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO IMAP_PARAM_SUBSCRIPTIONS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NI_MAXHOST ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NI_MAXSERV ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_ARTICLE_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_AUTH_ACCEPTED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_AUTH_CONTINUE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_AUTH_REJECTED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_AUTH_REQUIRED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_DATA_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_DATE_SIZE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_EXTENSIONS_SUPPORTED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_GREETING_NO_POSTING ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_GREETING_POSTING_OK ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_GROUP_SELECTED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_HEAD_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_LIST_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_NEW_ARTICLE_LIST_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_NEW_GROUP_LIST_FOLLOWS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_NO_PERMISSION ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_NO_SUCH_ARTICLE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_NO_SUCH_GROUP ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO NNTP_PROTOCOL_ERROR ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO PERSONAL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO RECEIVED ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SEEKABLE_SUBSTREAM_WAYS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SENT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO SET_CONTENT_WAYS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO STATUS_PINE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_AUTODELETE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_DELAY_UNTIL ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_EXPIRE_AFTER ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_REPLY_CONVENIENT ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_REPLY_WITHIN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_RETURN_NOTIFY_DELETE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_RETURN_NOTIFY_OPEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_SEND_OPTIONS ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_SEND_OPT_PRIORITY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_SEND_OPT_SECURITY ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO X_TRACK_WHEN ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF _CamelNNTPGroupList ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF _CamelNNTPGroupListEntry ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION add_recipients ##### -->
+<para>
+
+</para>
+
+@recipient_list: 
+@recipients: 
+@recipient_type: 
+@Returns: 
+
+<!-- ##### STRUCT addrinfo ##### -->
+<para>
+
+</para>
+
+@ai_flags: 
+@ai_family: 
+@ai_socktype: 
+@ai_protocol: 
+@ai_addrlen: 
+@ai_addr: 
+@ai_canonname: 
+@ai_next: 
+
+<!-- ##### FUNCTION camel_base64_decode_simple ##### -->
+<para>
+
+</para>
+
+@data: 
+@len: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_base64_decode_step ##### -->
+<para>
+
+</para>
+
+@in: 
+@len: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_base64_encode_close ##### -->
+<para>
+
+</para>
+
+@in: 
+@inlen: 
+@break_lines: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_base64_encode_simple ##### -->
+<para>
+
+</para>
+
+@data: 
+@len: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_base64_encode_step ##### -->
+<para>
+
+</para>
+
+@in: 
+@inlen: 
+@break_lines: 
+@out: 
+@state: 
+@save: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_block_file_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_cipher_context_construct ##### -->
+<para>
+
+</para>
+
+@context: 
+@session: 
+
+<!-- ##### FUNCTION camel_data_cache_clear ##### -->
+<para>
+
+</para>
+
+@cache: 
+@path: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_data_cache_rename ##### -->
+<para>
+
+</para>
+
+@cache: 
+@old: 
+@new: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_digest_folder_new ##### -->
+<para>
+
+</para>
+
+@parent_store: 
+@message: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_digest_store_new ##### -->
+<para>
+
+</para>
+
+@url: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_digest_summary_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_file_util_decode_size_t ##### -->
+<para>
+
+</para>
+
+@in: 
+@dest: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_file_util_encode_size_t ##### -->
+<para>
+
+</para>
+
+@out: 
+@value: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_filter_driver_expand_option ##### -->
+<para>
+
+</para>
+
+@d: 
+@s: 
+@action: 
+@op: 
+
+<!-- ##### FUNCTION camel_filter_driver_rule_count ##### -->
+<para>
+
+</para>
+
+@d: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_filter_driver_rule_get ##### -->
+<para>
+
+</para>
+
+@d: 
+@n: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_folder_summary_array_free ##### -->
+<para>
+
+</para>
+
+@summary: 
+@array: 
+
+<!-- ##### FUNCTION camel_groupwise_journal_append ##### -->
+<para>
+
+</para>
+
+@journal: 
+@message: 
+@mi: 
+@appended_uid: 
+@ex: 
+
+<!-- ##### FUNCTION camel_groupwise_journal_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@filename: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_journal_transfer ##### -->
+<para>
+
+</para>
+
+@journal: 
+@source_folder: 
+@message: 
+@mi: 
+@orginal_uid: 
+@transferred_uid: 
+@ex: 
+
+<!-- ##### FUNCTION camel_groupwise_store_connected ##### -->
+<para>
+
+</para>
+
+@store: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_container_id_lookup ##### -->
+<para>
+
+</para>
+
+@gw_store: 
+@folder_name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_folder_lookup ##### -->
+<para>
+
+</para>
+
+@gw_store: 
+@container_id: 
+@Returns: 
+
+<!-- ##### MACRO camel_groupwise_store_info_full_name ##### -->
+<para>
+
+</para>
+
+@s: 
+@i: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_add_from_full ##### -->
+<para>
+
+</para>
+
+@s: 
+@full: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_full_from_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_full_name ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_full_to_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_namespace_find_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_namespace_new ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_namespace_set ##### -->
+<para>
+
+</para>
+
+@s: 
+@ns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_new ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_store_summary_path_to_full ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_summary_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@filename: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_groupwise_util_item_from_message ##### -->
+<para>
+
+</para>
+
+@cnc: 
+@message: 
+@from: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_gw_folder_new ##### -->
+<para>
+
+</para>
+
+@store: 
+@folder_dir: 
+@folder_name: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_gw_summary_add_offline ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uid: 
+@messgae: 
+@info: 
+
+<!-- ##### FUNCTION camel_gw_summary_add_offline_uncached ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uid: 
+@info: 
+
+<!-- ##### FUNCTION camel_imap4_build_folder_info_tree ##### -->
+<para>
+
+</para>
+
+@array: 
+@top: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_command_new ##### -->
+<para>
+
+</para>
+
+@engine: 
+@folder: 
+@format: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_command_newv ##### -->
+<para>
+
+</para>
+
+@engine: 
+@folder: 
+@format: 
+@args: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_command_ref ##### -->
+<para>
+
+</para>
+
+@ic: 
+
+<!-- ##### FUNCTION camel_imap4_command_register_untagged ##### -->
+<para>
+
+</para>
+
+@ic: 
+@atom: 
+@untagged: 
+
+<!-- ##### FUNCTION camel_imap4_command_reset ##### -->
+<para>
+
+</para>
+
+@ic: 
+
+<!-- ##### FUNCTION camel_imap4_command_step ##### -->
+<para>
+
+</para>
+
+@ic: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_command_unref ##### -->
+<para>
+
+</para>
+
+@ic: 
+
+<!-- ##### FUNCTION camel_imap4_engine_capability ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_dequeue ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ic: 
+
+<!-- ##### FUNCTION camel_imap4_engine_disconnect ##### -->
+<para>
+
+</para>
+
+@engine: 
+
+<!-- ##### FUNCTION camel_imap4_engine_eat_line ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_handle_untagged ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+
+<!-- ##### FUNCTION camel_imap4_engine_handle_untagged_1 ##### -->
+<para>
+
+</para>
+
+@engine: 
+@token: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_iterate ##### -->
+<para>
+
+</para>
+
+@engine: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_line ##### -->
+<para>
+
+</para>
+
+@engine: 
+@line: 
+@len: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_literal ##### -->
+<para>
+
+</para>
+
+@engine: 
+@literal: 
+@len: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_namespace ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_new ##### -->
+<para>
+
+</para>
+
+@service: 
+@reconnect: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_next_token ##### -->
+<para>
+
+</para>
+
+@engine: 
+@token: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_nstring ##### -->
+<para>
+
+</para>
+
+@engine: 
+@nstring: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_parse_resp_code ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_prequeue ##### -->
+<para>
+
+</para>
+
+@engine: 
+@folder: 
+@format: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_queue ##### -->
+<para>
+
+</para>
+
+@engine: 
+@folder: 
+@format: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_engine_select_folder ##### -->
+<para>
+
+</para>
+
+@engine: 
+@folder: 
+@ex: 
+@Returns: 
+
+<!-- ##### ENUM camel_imap4_engine_t ##### -->
+<para>
+
+</para>
+
+@CAMEL_IMAP4_ENGINE_DISCONNECTED: 
+@CAMEL_IMAP4_ENGINE_CONNECTED: 
+@CAMEL_IMAP4_ENGINE_PREAUTH: 
+@CAMEL_IMAP4_ENGINE_AUTHENTICATED: 
+@CAMEL_IMAP4_ENGINE_SELECTED: 
+
+<!-- ##### FUNCTION camel_imap4_engine_take_stream ##### -->
+<para>
+
+</para>
+
+@engine: 
+@stream: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_flags_diff ##### -->
+<para>
+
+</para>
+
+@diff: 
+@old: 
+@new: 
+
+<!-- ##### FUNCTION camel_imap4_flags_merge ##### -->
+<para>
+
+</para>
+
+@diff: 
+@flags: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_folder_new ##### -->
+<para>
+
+</para>
+
+@store: 
+@full_name: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_folder_utf7_name ##### -->
+<para>
+
+</para>
+
+@folder: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_get_path_delim ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_get_uid_set ##### -->
+<para>
+
+</para>
+
+@engine: 
+@summary: 
+@infos: 
+@cur: 
+@linelen: 
+@set: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_journal_append ##### -->
+<para>
+
+</para>
+
+@journal: 
+@message: 
+@mi: 
+@appended_uid: 
+@ex: 
+
+<!-- ##### FUNCTION camel_imap4_journal_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@filename: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_journal_readd_failed ##### -->
+<para>
+
+</para>
+
+@journal: 
+
+<!-- ##### ENUM camel_imap4_level_t ##### -->
+<para>
+
+</para>
+
+@CAMEL_IMAP4_LEVEL_UNKNOWN: 
+@CAMEL_IMAP4_LEVEL_IMAP4: 
+@CAMEL_IMAP4_LEVEL_IMAP4REV1: 
+
+<!-- ##### STRUCT camel_imap4_list_t ##### -->
+<para>
+
+</para>
+
+@flags: 
+@delim: 
+@name: 
+
+<!-- ##### FUNCTION camel_imap4_merge_flags ##### -->
+<para>
+
+</para>
+
+@original: 
+@local: 
+@server: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_namespace_clear ##### -->
+<para>
+
+</para>
+
+@ns: 
+
+<!-- ##### FUNCTION camel_imap4_namespace_list_copy ##### -->
+<para>
+
+</para>
+
+@nsl: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_namespace_list_free ##### -->
+<para>
+
+</para>
+
+@nsl: 
+
+<!-- ##### FUNCTION camel_imap4_parse_flags_list ##### -->
+<para>
+
+</para>
+
+@engine: 
+@flags: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_resp_code_free ##### -->
+<para>
+
+</para>
+
+@rcode: 
+
+<!-- ##### ENUM camel_imap4_resp_code_t ##### -->
+<para>
+
+</para>
+
+@CAMEL_IMAP4_RESP_CODE_ALERT: 
+@CAMEL_IMAP4_RESP_CODE_BADCHARSET: 
+@CAMEL_IMAP4_RESP_CODE_CAPABILITY: 
+@CAMEL_IMAP4_RESP_CODE_PARSE: 
+@CAMEL_IMAP4_RESP_CODE_PERM_FLAGS: 
+@CAMEL_IMAP4_RESP_CODE_READONLY: 
+@CAMEL_IMAP4_RESP_CODE_READWRITE: 
+@CAMEL_IMAP4_RESP_CODE_TRYCREATE: 
+@CAMEL_IMAP4_RESP_CODE_UIDNEXT: 
+@CAMEL_IMAP4_RESP_CODE_UIDVALIDITY: 
+@CAMEL_IMAP4_RESP_CODE_UNSEEN: 
+@CAMEL_IMAP4_RESP_CODE_NEWNAME: 
+@CAMEL_IMAP4_RESP_CODE_APPENDUID: 
+@CAMEL_IMAP4_RESP_CODE_COPYUID: 
+@CAMEL_IMAP4_RESP_CODE_UNKNOWN: 
+
+<!-- ##### FUNCTION camel_imap4_search_new ##### -->
+<para>
+
+</para>
+
+@engine: 
+@cachedir: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_specials_init ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### STRUCT camel_imap4_status_attr_t ##### -->
+<para>
+
+</para>
+
+@next: 
+@type: 
+@value: 
+
+<!-- ##### FUNCTION camel_imap4_status_free ##### -->
+<para>
+
+</para>
+
+@status: 
+
+<!-- ##### STRUCT camel_imap4_status_t ##### -->
+<para>
+
+</para>
+
+@attr_list: 
+@mailbox: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_get_folder_info ##### -->
+<para>
+
+</para>
+
+@s: 
+@top: 
+@flags: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_new ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_note_info ##### -->
+<para>
+
+</para>
+
+@s: 
+@fi: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_set_capabilities ##### -->
+<para>
+
+</para>
+
+@s: 
+@capa: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_set_namespaces ##### -->
+<para>
+
+</para>
+
+@s: 
+@ns: 
+
+<!-- ##### FUNCTION camel_imap4_store_summary_unnote_info ##### -->
+<para>
+
+</para>
+
+@s: 
+@fi: 
+
+<!-- ##### FUNCTION camel_imap4_stream_line ##### -->
+<para>
+
+</para>
+
+@stream: 
+@line: 
+@len: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_stream_literal ##### -->
+<para>
+
+</para>
+
+@stream: 
+@literal: 
+@len: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_stream_new ##### -->
+<para>
+
+</para>
+
+@stream: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_stream_next_token ##### -->
+<para>
+
+</para>
+
+@stream: 
+@token: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_stream_unget_token ##### -->
+<para>
+
+</para>
+
+@stream: 
+@token: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_summary_expunge ##### -->
+<para>
+
+</para>
+
+@summary: 
+@seqid: 
+
+<!-- ##### FUNCTION camel_imap4_summary_flush_updates ##### -->
+<para>
+
+</para>
+
+@summary: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_summary_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_summary_set_exists ##### -->
+<para>
+
+</para>
+
+@summary: 
+@exists: 
+
+<!-- ##### FUNCTION camel_imap4_summary_set_recent ##### -->
+<para>
+
+</para>
+
+@summary: 
+@recent: 
+
+<!-- ##### FUNCTION camel_imap4_summary_set_uidnext ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uidnext: 
+
+<!-- ##### FUNCTION camel_imap4_summary_set_uidvalidity ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uidvalidity: 
+
+<!-- ##### FUNCTION camel_imap4_summary_set_unseen ##### -->
+<para>
+
+</para>
+
+@summary: 
+@unseen: 
+
+<!-- ##### STRUCT camel_imap4_token_t ##### -->
+<para>
+
+</para>
+
+@token: 
+
+<!-- ##### FUNCTION camel_imap4_untagged_list ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ic: 
+@index: 
+@token: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_untagged_status ##### -->
+<para>
+
+</para>
+
+@engine: 
+@ic: 
+@index: 
+@token: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap4_utils_set_unexpected_token_error ##### -->
+<para>
+
+</para>
+
+@ex: 
+@engine: 
+@token: 
+
+<!-- ##### FUNCTION camel_imap_command ##### -->
+<para>
+
+</para>
+
+@store: 
+@folder: 
+@ex: 
+@fmt: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_command_continuation ##### -->
+<para>
+
+</para>
+
+@store: 
+@cmd: 
+@cmdlen: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_command_response ##### -->
+<para>
+
+</para>
+
+@store: 
+@response: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_command_start ##### -->
+<para>
+
+</para>
+
+@store: 
+@folder: 
+@ex: 
+@fmt: 
+@Varargs: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_folder_changed ##### -->
+<para>
+
+</para>
+
+@folder: 
+@exists: 
+@expunged: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_folder_fetch_data ##### -->
+<para>
+
+</para>
+
+@imap_folder: 
+@uid: 
+@section_text: 
+@cache_only: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_folder_new ##### -->
+<para>
+
+</para>
+
+@parent: 
+@folder_name: 
+@folder_dir: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_folder_selected ##### -->
+<para>
+
+</para>
+
+@folder: 
+@response: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_journal_close_folders ##### -->
+<para>
+
+</para>
+
+@journal: 
+
+<!-- ##### FUNCTION camel_imap_journal_log ##### -->
+<para>
+
+</para>
+
+@journal: 
+@action: 
+@Varargs: 
+
+<!-- ##### FUNCTION camel_imap_journal_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@filename: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_journal_uidmap_add ##### -->
+<para>
+
+</para>
+
+@journal: 
+@old_uid: 
+@n_uid: 
+
+<!-- ##### FUNCTION camel_imap_journal_uidmap_lookup ##### -->
+<para>
+
+</para>
+
+@journal: 
+@uid: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_clear ##### -->
+<para>
+
+</para>
+
+@cache: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_copy ##### -->
+<para>
+
+</para>
+
+@source: 
+@source_uid: 
+@dest: 
+@dest_uid: 
+@ex: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_delete ##### -->
+<para>
+
+</para>
+
+@path: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_filter_cached ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@uids: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_get ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+@part_spec: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_get_filename ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+@part_spec: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_insert ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+@part_spec: 
+@data: 
+@len: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_insert_stream ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+@part_spec: 
+@data_stream: 
+@ex: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_insert_wrapper ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+@part_spec: 
+@wrapper: 
+@ex: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_max_uid ##### -->
+<para>
+
+</para>
+
+@cache: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_new ##### -->
+<para>
+
+</para>
+
+@path: 
+@summary: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_remove ##### -->
+<para>
+
+</para>
+
+@cache: 
+@uid: 
+
+<!-- ##### FUNCTION camel_imap_message_cache_set_path ##### -->
+<para>
+
+</para>
+
+@cache: 
+@path: 
+
+<!-- ##### FUNCTION camel_imap_msg_new ##### -->
+<para>
+
+</para>
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@CamelImapStore *store, struct _CamelImapMsg *m: 
+@CamelImapStore *store, struct _CamelImapMsg *m:
+
+@size: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_msg_queue ##### -->
+<para>
+
+</para>
+
+@store: 
+@msg: 
+
+<!-- ##### FUNCTION camel_imap_response_extract ##### -->
+<para>
+
+</para>
+
+@store: 
+@response: 
+@type: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_response_extract_continuation ##### -->
+<para>
+
+</para>
+
+@store: 
+@response: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_response_free ##### -->
+<para>
+
+</para>
+
+@store: 
+@response: 
+
+<!-- ##### FUNCTION camel_imap_response_free_without_processing ##### -->
+<para>
+
+</para>
+
+@store: 
+@response: 
+
+<!-- ##### FUNCTION camel_imap_search_new ##### -->
+<para>
+
+</para>
+
+@cachedir: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_connected ##### -->
+<para>
+
+</para>
+
+@store: 
+@ex: 
+@Returns: 
+
+<!-- ##### MACRO camel_imap_store_info_full_name ##### -->
+<para>
+
+</para>
+
+@s: 
+@i: 
+
+<!-- ##### FUNCTION camel_imap_store_readline ##### -->
+<para>
+
+</para>
+
+@store: 
+@dest: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_add_from_full ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_full_from_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_full_name ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_full_to_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_get_main_namespace ##### -->
+<para>
+
+</para>
+
+@s: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_add_secondary ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_find_full ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_find_path ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_new ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_set ##### -->
+<para>
+
+</para>
+
+@s: 
+@ns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_namespace_set_main ##### -->
+<para>
+
+</para>
+
+@s: 
+@full_name: 
+@dir_sep: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_new ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_store_summary_path_to_full ##### -->
+<para>
+
+</para>
+
+@s: 
+@path: 
+@dir_sep: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_summary_add_offline ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uid: 
+@message: 
+@info: 
+
+<!-- ##### FUNCTION camel_imap_summary_add_offline_uncached ##### -->
+<para>
+
+</para>
+
+@summary: 
+@uid: 
+@info: 
+
+<!-- ##### FUNCTION camel_imap_summary_new ##### -->
+<para>
+
+</para>
+
+@folder: 
+@filename: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_imap_wrapper_new ##### -->
+<para>
+
+</para>
+
+@imap_folder: 
+@type: 
+@encoding: 
+@uid: 
+@part_spec: 
+@part: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_index_name_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_index_set_normalise ##### -->
+<para>
+
+</para>
+
+@idx: 
+@func: 
+@data: 
+
+<!-- ##### FUNCTION camel_interface_cast ##### -->
+<para>
+
+</para>
+
+@klass: 
+@ctype: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_interface_is ##### -->
+<para>
+
+</para>
+
+@k: 
+@ctype: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_interface_register ##### -->
+<para>
+
+</para>
+
+@parent: 
+@name: 
+@classfuncs_size: 
+@class_init: 
+@class_finalize: 
+@Returns: 
+
+<!-- ##### VARIABLE camel_interface_type ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### FUNCTION camel_isubscribe_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_isubscribe_subscribe ##### -->
+<para>
+
+</para>
+
+@store: 
+@folder_name: 
+@ex: 
+
+<!-- ##### FUNCTION camel_isubscribe_subscribed ##### -->
+<para>
+
+</para>
+
+@store: 
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_isubscribe_unsubscribe ##### -->
+<para>
+
+</para>
+
+@store: 
+@folder_name: 
+@ex: 
+
+<!-- ##### FUNCTION camel_iterator_free ##### -->
+<para>
+
+</para>
+
+@it: 
+
+<!-- ##### FUNCTION camel_iterator_length ##### -->
+<para>
+
+</para>
+
+@it: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_iterator_new ##### -->
+<para>
+
+</para>
+
+@klass: 
+@size: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_iterator_next ##### -->
+<para>
+
+</para>
+
+@it: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_iterator_reset ##### -->
+<para>
+
+</para>
+
+@it: 
+
+<!-- ##### FUNCTION camel_key_file_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_key_table_get_type ##### -->
+<para>
+
+</para>
+
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_folder_construct ##### -->
+<para>
+
+</para>
+
+@lf: 
+@parent_store: 
+@full_name: 
+@flags: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_folder_lock ##### -->
+<para>
+
+</para>
+
+@lf: 
+@type: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_folder_unlock ##### -->
+<para>
+
+</para>
+
+@lf: 
+@Returns: 
+
+<!-- ##### MACRO camel_local_store_get_full_path ##### -->
+<para>
+
+</para>
+
+@ls: 
+@name: 
+
+<!-- ##### MACRO camel_local_store_get_meta_path ##### -->
+<para>
+
+</para>
+
+@ls: 
+@name: 
+@ext: 
+
+<!-- ##### FUNCTION camel_local_store_get_toplevel_dir ##### -->
+<para>
+
+</para>
+
+@store: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_summary_add ##### -->
+<para>
+
+</para>
+
+@cls: 
+@msg: 
+@info: 
+@Param4: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_summary_check ##### -->
+<para>
+
+</para>
+
+@cls: 
+@Param2: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_summary_check_force ##### -->
+<para>
+
+</para>
+
+@cls: 
+
+<!-- ##### FUNCTION camel_local_summary_construct ##### -->
+<para>
+
+</para>
+
+@new: 
+@filename: 
+@local_name: 
+@index: 
+
+<!-- ##### FUNCTION camel_local_summary_decode_x_evolution ##### -->
+<para>
+
+</para>
+
+@cls: 
+@xev: 
+@info: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_summary_encode_x_evolution ##### -->
+<para>
+
+</para>
+
+@cls: 
+@info: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_local_summary_load ##### -->
+<para>
+
+</para>
+
+@cls: 
+@forceindex: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelDigestStore ##### -->
+<!-- ##### FUNCTION camel_local_summary_sync ##### -->
 <para>
 
 </para>
 
-@parent: 
+@cls: 
+@expunge: 
+@Param3: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelDigestSummary ##### -->
+<!-- ##### FUNCTION camel_local_summary_write_headers ##### -->
 <para>
 
 </para>
 
-@parent_object: 
+@fd: 
+@header: 
+@xevline: 
+@status: 
+@xstatus: 
+@Returns: 
 
-<!-- ##### ARG CamelGpgContext:always-trust ##### -->
+<!-- ##### FUNCTION camel_maildir_folder_new ##### -->
 <para>
 
 </para>
 
+@parent_store: 
+@full_name: 
+@flags: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Command ##### -->
+<!-- ##### MACRO camel_maildir_info_filename ##### -->
+<para>
+
+</para>
+
+@x: 
+
+<!-- ##### MACRO camel_maildir_info_set_filename ##### -->
+<para>
+
+</para>
+
+@x: 
+@s: 
+
+<!-- ##### FUNCTION camel_maildir_summary_info_to_name ##### -->
+<para>
+
+</para>
+
+@info: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_maildir_summary_name_to_info ##### -->
+<para>
+
+</para>
+
+@info: 
+@name: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_maildir_summary_new ##### -->
 <para>
 
 </para>
 
-@node: 
-@engine: 
-@ref_count: 
-@status: 
-@result: 
-@id: 
-@tag: 
-@resp_codes: 
 @folder: 
+@filename: 
+@maildirdir: 
+@index: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_mbox_folder_new ##### -->
+<para>
+
+</para>
+
+@parent_store: 
+@full_name: 
+@flags: 
 @ex: 
-@parts: 
-@part: 
-@untagged: 
-@plus: 
-@reset: 
-@user_data: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4CommandPart ##### -->
+<!-- ##### FUNCTION camel_mbox_summary_new ##### -->
 <para>
 
 </para>
 
-@next: 
-@buffer: 
-@buflen: 
-@literal: 
+@Param1: 
+@filename: 
+@mbox_name: 
+@index: 
+@Returns: 
 
-<!-- ##### USER_FUNCTION CamelIMAP4CommandReset ##### -->
+<!-- ##### FUNCTION camel_mbox_summary_sync_mbox ##### -->
 <para>
 
 </para>
 
-@ic: 
-@user_data: 
+@cls: 
+@flags: 
+@changeinfo: 
+@fd: 
+@fdout: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Engine ##### -->
+<!-- ##### FUNCTION camel_mbox_summary_xstatus ##### -->
 <para>
 
 </para>
 
-@parent: 
-@reconnect: 
-@reconnecting: 
-@session: 
-@service: 
-@url: 
+@mbs: 
 @state: 
-@level: 
-@capa: 
-@maxlen: 
-@maxlentype: 
-@namespaces: 
-@authtypes: 
-@istream: 
-@ostream: 
-@tagprefix: 
-@tag: 
-@nextid: 
-@folder: 
-@queue: 
-@current: 
 
-<!-- ##### STRUCT CamelIMAP4Folder ##### -->
+<!-- ##### FUNCTION camel_md5_final ##### -->
 <para>
 
 </para>
 
-@parent: 
-@search: 
-@journal: 
-@cache: 
-@cachedir: 
-@utf7_name: 
-@read_only: 
-@enable_mlist: 
+@ctx: 
+@digest: 
 
-<!-- ##### STRUCT CamelIMAP4Journal ##### -->
+<!-- ##### FUNCTION camel_md5_get_digest ##### -->
 <para>
 
 </para>
 
-@parent: 
-@failed: 
+@buffer: 
+@buffer_size: 
+@digest: 
 
-<!-- ##### STRUCT CamelIMAP4JournalEntry ##### -->
+<!-- ##### FUNCTION camel_md5_get_digest_from_file ##### -->
 <para>
 
 </para>
 
-@node: 
-@type
+@filename: 
+@digest
 
-<!-- ##### STRUCT CamelIMAP4Literal ##### -->
+<!-- ##### FUNCTION camel_md5_init ##### -->
+<para>
+
+</para>
+
+@ctx: 
+
+<!-- ##### FUNCTION camel_md5_update ##### -->
+<para>
+
+</para>
+
+@ctx: 
+@buf: 
+@len: 
+
+<!-- ##### FUNCTION camel_medium_get_content_object ##### -->
+<para>
+
+</para>
+
+@medium: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_medium_set_content_object ##### -->
+<para>
+
+</para>
+
+@medium: 
+@content: 
+
+<!-- ##### FUNCTION camel_mh_folder_new ##### -->
+<para>
+
+</para>
+
+@parent_store: 
+@full_name: 
+@flags: 
+@ex: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_mh_summary_new ##### -->
+<para>
+
+</para>
+
+@Param1: 
+@filename: 
+@mhdir: 
+@index: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_mime_filter_basic_new_type ##### -->
 <para>
 
 </para>
 
 @type: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4MessageContentInfo ##### -->
+<!-- ##### FUNCTION camel_mime_filter_charset_new_convert ##### -->
 <para>
 
 </para>
 
-@info: 
+@from_charset: 
+@to_charset: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4MessageInfo ##### -->
+<!-- ##### FUNCTION camel_mime_filter_index_new_index ##### -->
 <para>
 
 </para>
 
-@info
-@server_flags: 
+@index
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Namespace ##### -->
+<!-- ##### FUNCTION camel_mime_filter_save_new_with_stream ##### -->
+<para>
+
+</para>
+
+@stream: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_mime_part_get_content_MD5 ##### -->
+<para>
+
+</para>
+
+@mime_part: 
+@Returns: 
+
+<!-- ##### FUNCTION camel_mime_part_set_content_MD5 ##### -->
+<para>
+
+</para>
+
+@mime_part: 
+@md5sum: 
+
+<!-- ##### FUNCTION camel_mkdir ##### -->
 <para>
 
 </para>
 
-@next: 
 @path: 
-@sep: 
+@mode: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4NamespaceList ##### -->
+<!-- ##### FUNCTION camel_name_to_type ##### -->
 <para>
 
 </para>
 
-@personal: 
-@other: 
-@shared: 
+@name: 
+@Returns: 
 
-<!-- ##### USER_FUNCTION CamelIMAP4PlusCallback ##### -->
+<!-- ##### FUNCTION camel_news_address_new ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ic: 
-@linebuf: 
-@linelen: 
-@ex: 
 @Returns: 
 
-<!-- ##### USER_FUNCTION CamelIMAP4ReconnectFunc ##### -->
+<!-- ##### FUNCTION camel_nntp_auth_authenticate ##### -->
 <para>
 
 </para>
 
-@engine: 
+@store: 
 @ex: 
 @Returns: 
 
-<!-- ##### STRUCT CamelIMAP4RespCode ##### -->
+<!-- ##### FUNCTION camel_nntp_command ##### -->
 <para>
 
 </para>
 
-@code: 
+@store: 
+@ex: 
+@folder: 
+@line: 
+@fmt: 
+@Varargs: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Search ##### -->
+<!-- ##### FUNCTION camel_nntp_folder_new ##### -->
 <para>
 
 </para>
 
 @parent: 
-@engine: 
-@lastuid: 
-@validity: 
-@cache: 
-@matches: 
-@matches_hash: 
-@matches_count: 
+@folder_name: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Store ##### -->
+<!-- ##### FUNCTION camel_nntp_folder_selected ##### -->
 <para>
 
 </para>
 
-@parent
-@summary
-@engine
-@storage_path
+@folder
+@line
+@ex
+@Returns
 
-<!-- ##### STRUCT CamelIMAP4StoreInfo ##### -->
+<!-- ##### FUNCTION camel_nntp_get_headers ##### -->
 <para>
 
 </para>
 
-@info: 
+@store: 
+@nntp_folder: 
+@ex: 
 
-<!-- ##### STRUCT CamelIMAP4StoreSummary ##### -->
+<!-- ##### FUNCTION camel_nntp_grouplist_fetch ##### -->
 <para>
 
 </para>
 
-@summary: 
-@priv: 
-@version: 
-@namespaces: 
-@capa: 
+@store: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIMAP4Stream ##### -->
+<!-- ##### FUNCTION camel_nntp_grouplist_free ##### -->
 <para>
 
 </para>
 
-@parent: 
-@stream: 
-@disconnected: 
-@have_unget: 
-@mode: 
-@eol: 
-@literal: 
-@realbuf: 
-@inbuf: 
-@inptr: 
-@inend: 
-@tokenbuf: 
-@tokenptr: 
-@tokenleft: 
-@unget: 
+@group_list: 
 
-<!-- ##### STRUCT CamelIMAP4Summary ##### -->
+<!-- ##### FUNCTION camel_nntp_grouplist_save ##### -->
 <para>
 
 </para>
 
-@parent: 
-@version: 
-@exists: 
-@recent: 
-@unseen: 
-@uidvalidity: 
-@uidvalidity_changed: 
-@update_flags: 
+@group_list: 
+@ex: 
 
-<!-- ##### USER_FUNCTION CamelIMAP4UntaggedCallback ##### -->
+<!-- ##### FUNCTION camel_nntp_grouplist_update ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ic: 
-@index: 
-@token: 
+@group_list: 
 @ex: 
 @Returns: 
 
-<!-- ##### STRUCT CamelISubscribe ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_article_is_read ##### -->
 <para>
 
 </para>
 
-@iface
-@subscribed
-@subscribe
-@unsubscribe
+@newsrc
+@group_name
+@num
+@Returns
 
-<!-- ##### STRUCT CamelImapFolderPrivate ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_free_group_names ##### -->
 <para>
 
 </para>
 
-@cache_lock: 
+@newsrc: 
+@group_names: 
 
-<!-- ##### STRUCT CamelImapWrapperPrivate ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_get_all_group_names ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@Returns: 
 
-<!-- ##### STRUCT CamelInterface ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_get_highest_article_read ##### -->
 <para>
 
 </para>
 
-@type: 
+@newsrc: 
+@group_name: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIterator ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_get_num_articles_read ##### -->
 <para>
 
 </para>
 
-@klass: 
+@newsrc: 
+@group_name: 
+@Returns: 
 
-<!-- ##### STRUCT CamelIteratorVTable ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_get_subscribed_group_names ##### -->
 <para>
 
 </para>
 
-@free: 
-@next: 
-@reset: 
-@length: 
+@newsrc: 
+@Returns: 
 
-<!-- ##### STRUCT CamelLocalFolderPrivate ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_group_is_subscribed ##### -->
 <para>
 
 </para>
 
-@search_lock: 
+@newsrc: 
+@group_name: 
+@Returns: 
 
-<!-- ##### STRUCT CamelMD5Context ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_mark_article_read ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@group_name: 
+@num: 
 
-<!-- ##### ARG CamelMedium:content ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_mark_range_read ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@group_name: 
+@low: 
+@high: 
 
-<!-- ##### STRUCT CamelMimeFilterChomp ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_read_for_server ##### -->
 <para>
 
 </para>
 
+@server: 
+@Returns: 
 
-<!-- ##### ARG CamelMimePart:content-id ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_subscribe_group ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@group_name: 
 
-<!-- ##### ARG CamelMimePart:content-md5 ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_unsubscribe_group ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@group_name: 
 
-<!-- ##### ARG CamelMimePart:description ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_write ##### -->
 <para>
 
 </para>
 
+@newsrc: 
 
-<!-- ##### ARG CamelMimePart:disposition ##### -->
+<!-- ##### FUNCTION camel_nntp_newsrc_write_to_file ##### -->
 <para>
 
 </para>
 
+@newsrc: 
+@fp: 
 
-<!-- ##### STRUCT CamelNNTPFolderPrivate ##### -->
+<!-- ##### FUNCTION camel_nntp_raw_command ##### -->
 <para>
 
 </para>
 
-@search_lock: 
-@cache_lock: 
+@store: 
+@ex: 
+@line: 
+@fmt: 
+@Varargs: 
+@Returns: 
 
-<!-- ##### STRUCT CamelNNTPGroupList ##### -->
+<!-- ##### FUNCTION camel_nntp_raw_command_auth ##### -->
 <para>
 
 </para>
 
 @store: 
-@time: 
-@group_list: 
+@ex: 
+@line: 
+@fmt: 
+@Varargs: 
+@Returns: 
 
-<!-- ##### STRUCT CamelNNTPGroupListEntry ##### -->
+<!-- ##### FUNCTION camel_nntp_raw_commandv ##### -->
 <para>
 
 </para>
 
-@group_name: 
-@low: 
-@high: 
-@flags: 
+@store: 
+@ex: 
+@line: 
+@fmt: 
+@ap: 
+@Returns: 
 
-<!-- ##### TYPEDEF CamelNNTPOverField ##### -->
+<!-- ##### MACRO camel_nntp_store_info_full_name ##### -->
 <para>
 
 </para>
 
+@s: 
+@i: 
 
-<!-- ##### STRUCT CamelNNTPStoreClass ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_add_from_full ##### -->
 <para>
 
 </para>
 
-@parent_class: 
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
 
-<!-- ##### STRUCT CamelNNTPStorePrivate ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_dotted_to_full ##### -->
 <para>
 
 </para>
 
-@dummy: 
+@s: 
+@dotted: 
+@dir_sep: 
+@Returns: 
 
-<!-- ##### STRUCT CamelNewsAddress ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_full_from_path ##### -->
 <para>
 
 </para>
 
-@parent: 
-@priv: 
+@s: 
+@path: 
+@Returns: 
 
-<!-- ##### STRUCT CamelObjectMeta ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_full_name ##### -->
 <para>
 
 </para>
 
-@next
-@value: 
-@name
+@s
+@full_name: 
+@Returns
 
-<!-- ##### ARG CamelSasl:authenticated ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_full_to_path ##### -->
 <para>
 
 </para>
 
+@s: 
+@full_name: 
+@dir_sep: 
+@Returns: 
 
-<!-- ##### ARG CamelSasl:mechanism ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_new ##### -->
 <para>
 
 </para>
 
+@void: 
+@Returns: 
 
-<!-- ##### ARG CamelSasl:service ##### -->
+<!-- ##### FUNCTION camel_nntp_store_summary_path_to_full ##### -->
 <para>
 
 </para>
 
+@s: 
+@path: 
+@dir_sep: 
+@Returns: 
 
-<!-- ##### ARG CamelSasl:service-name ##### -->
+<!-- ##### FUNCTION camel_nntp_stream_getd ##### -->
 <para>
 
 </para>
 
+@is: 
+@start: 
+@len: 
+@Returns: 
 
-<!-- ##### STRUCT CamelSimpleDataWrapper ##### -->
+<!-- ##### FUNCTION camel_nntp_stream_gets ##### -->
 <para>
 
 </para>
 
+@is: 
+@start: 
+@len: 
+@Returns: 
 
-<!-- ##### STRUCT CamelStreamDataWrapper ##### -->
+<!-- ##### FUNCTION camel_nntp_stream_line ##### -->
 <para>
 
 </para>
 
+@is: 
+@data: 
+@len: 
+@Returns: 
 
-<!-- ##### MACRO IMAP4_READ_BUFLEN ##### -->
+<!-- ##### ENUM camel_nntp_stream_mode_t ##### -->
 <para>
 
 </para>
 
+@CAMEL_NNTP_STREAM_LINE: 
+@CAMEL_NNTP_STREAM_DATA: 
+@CAMEL_NNTP_STREAM_EOD: 
 
-<!-- ##### MACRO IMAP4_READ_PRELEN ##### -->
+<!-- ##### FUNCTION camel_nntp_stream_new ##### -->
 <para>
 
 </para>
 
+@source: 
+@Returns: 
 
-<!-- ##### MACRO NI_MAXHOST ##### -->
+<!-- ##### FUNCTION camel_nntp_stream_set_mode ##### -->
 <para>
 
 </para>
 
+@is: 
+@mode: 
 
-<!-- ##### MACRO NI_MAXSERV ##### -->
+<!-- ##### FUNCTION camel_nntp_summary_check ##### -->
 <para>
 
 </para>
 
+@cns: 
+@store: 
+@line: 
+@changes: 
+@ex: 
+@Returns: 
 
-<!-- ##### FUNCTION add_recipients ##### -->
+<!-- ##### FUNCTION camel_nntp_summary_new ##### -->
 <para>
 
 </para>
 
-@recipient_list: 
-@recipients: 
-@recipient_type: 
+@folder: 
+@path: 
 @Returns: 
 
-<!-- ##### STRUCT addrinfo ##### -->
+<!-- ##### FUNCTION camel_object_cast ##### -->
 <para>
 
 </para>
 
-@ai_flags: 
-@ai_family: 
-@ai_socktype: 
-@ai_protocol: 
-@ai_addrlen: 
-@ai_addr: 
-@ai_canonname: 
-@ai_next: 
+@obj: 
+@ctype: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_base64_decode_simple ##### -->
+<!-- ##### FUNCTION camel_object_class_add_interface ##### -->
 <para>
 
 </para>
 
-@data: 
-@len: 
-@Returns: 
+@klass: 
+@itype: 
 
-<!-- ##### FUNCTION camel_base64_decode_step ##### -->
+<!-- ##### FUNCTION camel_object_class_cast ##### -->
 <para>
 
 </para>
 
-@in: 
-@len: 
-@out: 
-@state: 
-@save: 
+@klass: 
+@ctype: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_base64_encode_close ##### -->
+<!-- ##### FUNCTION camel_object_class_dump_tree ##### -->
 <para>
 
 </para>
 
-@in: 
-@inlen: 
-@break_lines: 
-@out: 
-@state: 
-@save: 
-@Returns: 
+@root: 
 
-<!-- ##### FUNCTION camel_base64_encode_simple ##### -->
+<!-- ##### FUNCTION camel_object_class_is ##### -->
 <para>
 
 </para>
 
-@data
-@len
+@klass
+@ctype
 @Returns: 
 
-<!-- ##### FUNCTION camel_base64_encode_step ##### -->
+<!-- ##### FUNCTION camel_object_get_int ##### -->
 <para>
 
 </para>
 
-@in: 
-@inlen: 
-@break_lines: 
-@out: 
-@state: 
-@save: 
+@vo: 
+@ex: 
+@tag: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_block_file_get_type ##### -->
+<!-- ##### FUNCTION camel_object_get_interface ##### -->
 <para>
 
 </para>
 
+@vo: 
+@itype: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_data_cache_clear ##### -->
+<!-- ##### FUNCTION camel_object_get_ptr ##### -->
 <para>
 
 </para>
 
-@cache: 
-@path: 
+@vo: 
 @ex: 
+@tag: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_data_cache_rename ##### -->
+<!-- ##### FUNCTION camel_object_is ##### -->
 <para>
 
 </para>
 
-@cache: 
-@old: 
-@new: 
-@ex: 
+@obj: 
+@ctype: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_digest_folder_new ##### -->
+<!-- ##### FUNCTION camel_object_meta_get ##### -->
 <para>
 
 </para>
 
-@parent_store
-@message: 
+@vo
+@name: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_digest_store_new ##### -->
+<!-- ##### FUNCTION camel_object_meta_set ##### -->
 <para>
 
 </para>
 
-@url: 
+@vo: 
+@name: 
+@value: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_digest_summary_new ##### -->
+<!-- ##### FUNCTION camel_object_new ##### -->
 <para>
 
 </para>
 
+@type: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_file_util_decode_size_t ##### -->
+<!-- ##### FUNCTION camel_object_new_name ##### -->
 <para>
 
 </para>
 
-@in: 
-@dest: 
+@name: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_file_util_encode_size_t ##### -->
+<!-- ##### FUNCTION camel_object_ref ##### -->
 <para>
 
 </para>
 
-@out: 
-@value: 
+@Param1: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_filter_driver_expand_option ##### -->
+<!-- ##### VARIABLE camel_object_type ##### -->
 <para>
 
 </para>
 
-@d: 
-@s: 
-@action: 
-@op: 
 
-<!-- ##### FUNCTION camel_filter_driver_rule_count ##### -->
+<!-- ##### FUNCTION camel_object_unref ##### -->
 <para>
 
 </para>
 
-@d: 
-@Returns: 
+@Param1: 
 
-<!-- ##### FUNCTION camel_filter_driver_rule_get ##### -->
+<!-- ##### FUNCTION camel_operation_cancel_block ##### -->
 <para>
 
 </para>
 
-@d: 
-@n: 
-@Returns: 
+@cc: 
 
-<!-- ##### FUNCTION camel_folder_summary_array_free ##### -->
+<!-- ##### FUNCTION camel_operation_cancel_unblock ##### -->
 <para>
 
 </para>
 
-@summary: 
-@array: 
+@cc: 
 
-<!-- ##### FUNCTION camel_imap4_build_folder_info_tree ##### -->
+<!-- ##### FUNCTION camel_operation_progress_count ##### -->
 <para>
 
 </para>
 
-@array: 
-@top: 
-@Returns: 
+@cc: 
+@sofar: 
 
-<!-- ##### FUNCTION camel_imap4_command_new ##### -->
+<!-- ##### FUNCTION camel_partition_table_get_type ##### -->
 <para>
 
 </para>
 
-@engine: 
-@folder: 
-@format: 
-@Varargs: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_command_newv ##### -->
+<!-- ##### FUNCTION camel_pop3_command ##### -->
 <para>
 
 </para>
 
-@engine: 
-@folder: 
-@format: 
-@args: 
+@store: 
+@ret: 
+@ex: 
+@fmt: 
+@Varargs: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_command_ref ##### -->
+<!-- ##### FUNCTION camel_pop3_command_get_additional_data ##### -->
 <para>
 
 </para>
 
-@ic: 
+@store: 
+@total: 
+@ex: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_command_register_untagged ##### -->
+<!-- ##### ENUM camel_pop3_command_t ##### -->
 <para>
 
 </para>
 
-@ic: 
-@atom: 
-@untagged: 
+@CAMEL_POP3_COMMAND_IDLE: 
+@CAMEL_POP3_COMMAND_DISPATCHED: 
+@CAMEL_POP3_COMMAND_OK: 
+@CAMEL_POP3_COMMAND_DATA: 
+@CAMEL_POP3_COMMAND_ERR: 
 
-<!-- ##### FUNCTION camel_imap4_command_reset ##### -->
+<!-- ##### FUNCTION camel_pop3_delete_old ##### -->
 <para>
 
 </para>
 
-@ic: 
+@folder: 
+@days_to_delete: 
+@ex: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_command_step ##### -->
+<!-- ##### FUNCTION camel_pop3_engine_command_free ##### -->
 <para>
 
 </para>
 
-@ic
-@Returns
+@pe
+@pc
 
-<!-- ##### FUNCTION camel_imap4_command_unref ##### -->
+<!-- ##### FUNCTION camel_pop3_engine_command_new ##### -->
 <para>
 
 </para>
 
-@ic: 
+@pe: 
+@flags: 
+@func: 
+@data: 
+@fmt: 
+@Varargs: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_capability ##### -->
+<!-- ##### FUNCTION camel_pop3_engine_iterate ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ex
+@pe: 
+@pc
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_dequeue ##### -->
+<!-- ##### FUNCTION camel_pop3_engine_new ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ic: 
+@source: 
+@flags: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_disconnect ##### -->
+<!-- ##### FUNCTION camel_pop3_engine_reget_capabilities ##### -->
 <para>
 
 </para>
 
 @engine: 
 
-<!-- ##### FUNCTION camel_imap4_engine_eat_line ##### -->
+<!-- ##### ENUM camel_pop3_engine_t ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ex: 
-@Returns: 
+@CAMEL_POP3_ENGINE_DISCONNECT: 
+@CAMEL_POP3_ENGINE_AUTH: 
+@CAMEL_POP3_ENGINE_TRANSACTION: 
+@CAMEL_POP3_ENGINE_UPDATE: 
 
-<!-- ##### FUNCTION camel_imap4_engine_handle_untagged ##### -->
+<!-- ##### FUNCTION camel_pop3_folder_new ##### -->
 <para>
 
 </para>
 
-@engine
+@parent
 @ex: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_handle_untagged_1 ##### -->
+<!-- ##### FUNCTION camel_pop3_store_expunge ##### -->
 <para>
 
 </para>
 
-@engine: 
-@token: 
+@store: 
 @ex: 
-@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_iterate ##### -->
+<!-- ##### FUNCTION camel_pop3_stream_getd ##### -->
 <para>
 
 </para>
 
-@engine: 
+@is: 
+@start: 
+@len: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_line ##### -->
+<!-- ##### FUNCTION camel_pop3_stream_gets ##### -->
 <para>
 
 </para>
 
-@engine
-@line
+@is
+@start
 @len: 
-@ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_literal ##### -->
+<!-- ##### FUNCTION camel_pop3_stream_line ##### -->
 <para>
 
 </para>
 
-@engine
-@literal
+@is
+@data
 @len: 
-@ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_namespace ##### -->
+<!-- ##### ENUM camel_pop3_stream_mode_t ##### -->
 <para>
 
 </para>
 
-@engine
-@ex
-@Returns
+@CAMEL_POP3_STREAM_LINE
+@CAMEL_POP3_STREAM_DATA
+@CAMEL_POP3_STREAM_EOD
 
-<!-- ##### FUNCTION camel_imap4_engine_new ##### -->
+<!-- ##### FUNCTION camel_pop3_stream_new ##### -->
 <para>
 
 </para>
 
-@service: 
-@reconnect: 
+@source: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_next_token ##### -->
+<!-- ##### FUNCTION camel_pop3_stream_set_mode ##### -->
 <para>
 
 </para>
 
-@engine: 
-@token: 
-@ex: 
-@Returns: 
+@is: 
+@mode: 
 
-<!-- ##### FUNCTION camel_imap4_engine_nstring ##### -->
+<!-- ##### FUNCTION camel_process_fork ##### -->
 <para>
 
 </para>
 
-@engine: 
-@nstring: 
+@path: 
+@argv: 
+@infd: 
+@outfd: 
+@errfd: 
 @ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_parse_resp_code ##### -->
+<!-- ##### FUNCTION camel_process_wait ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ex: 
+@pid: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_prequeue ##### -->
+<!-- ##### FUNCTION camel_sasl_authenticated ##### -->
 <para>
 
 </para>
 
-@engine: 
-@folder: 
-@format: 
-@Varargs: 
+@sasl: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_queue ##### -->
+<!-- ##### FUNCTION camel_search_build_match_regex ##### -->
 <para>
 
 </para>
 
-@engine: 
-@folder: 
-@format: 
-@Varargs: 
+@pattern: 
+@type: 
+@argc: 
+@argv: 
+@ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_engine_select_folder ##### -->
+<!-- ##### FUNCTION camel_search_camel_header_soundex ##### -->
 <para>
 
 </para>
 
-@engine: 
-@folder: 
-@ex: 
+@header: 
+@match: 
 @Returns: 
 
-<!-- ##### ENUM camel_imap4_engine_t ##### -->
+<!-- ##### ENUM camel_search_flags_t ##### -->
 <para>
 
 </para>
 
-@CAMEL_IMAP4_ENGINE_DISCONNECTED
-@CAMEL_IMAP4_ENGINE_CONNECTED: 
-@CAMEL_IMAP4_ENGINE_PREAUTH
-@CAMEL_IMAP4_ENGINE_AUTHENTICATED
-@CAMEL_IMAP4_ENGINE_SELECTED
+@CAMEL_SEARCH_MATCH_START
+@CAMEL_SEARCH_MATCH_END: 
+@CAMEL_SEARCH_MATCH_REGEX
+@CAMEL_SEARCH_MATCH_ICASE
+@CAMEL_SEARCH_MATCH_NEWLINE
 
-<!-- ##### FUNCTION camel_imap4_engine_take_stream ##### -->
+<!-- ##### FUNCTION camel_search_header_match ##### -->
 <para>
 
 </para>
 
-@engine: 
-@stream: 
-@ex: 
+@value: 
+@match: 
+@how: 
+@type: 
+@default_charset: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_flags_diff ##### -->
+<!-- ##### ENUM camel_search_match_t ##### -->
 <para>
 
 </para>
 
-@diff: 
-@old: 
-@new: 
+@CAMEL_SEARCH_MATCH_EXACT: 
+@CAMEL_SEARCH_MATCH_CONTAINS: 
+@CAMEL_SEARCH_MATCH_STARTS: 
+@CAMEL_SEARCH_MATCH_ENDS: 
+@CAMEL_SEARCH_MATCH_SOUNDEX: 
 
-<!-- ##### FUNCTION camel_imap4_flags_merge ##### -->
+<!-- ##### FUNCTION camel_search_message_body_contains ##### -->
 <para>
 
 </para>
 
-@diff
-@flags
+@object
+@pattern
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_folder_new ##### -->
+<!-- ##### ENUM camel_search_t ##### -->
 <para>
 
 </para>
 
-@store: 
-@full_name: 
-@ex: 
-@Returns: 
+@CAMEL_SEARCH_TYPE_ASIS: 
+@CAMEL_SEARCH_TYPE_ENCODED: 
+@CAMEL_SEARCH_TYPE_ADDRESS: 
+@CAMEL_SEARCH_TYPE_ADDRESS_ENCODED: 
+@CAMEL_SEARCH_TYPE_MLIST: 
 
-<!-- ##### FUNCTION camel_imap4_folder_utf7_name ##### -->
+<!-- ##### STRUCT camel_search_word ##### -->
 <para>
 
 </para>
 
-@folder
-@Returns
+@type
+@word
 
-<!-- ##### FUNCTION camel_imap4_get_path_delim ##### -->
+<!-- ##### ENUM camel_search_word_t ##### -->
 <para>
 
 </para>
 
-@s
-@full_name
-@Returns
+@CAMEL_SEARCH_WORD_SIMPLE
+@CAMEL_SEARCH_WORD_COMPLEX
+@CAMEL_SEARCH_WORD_8BIT
 
-<!-- ##### FUNCTION camel_imap4_get_uid_set ##### -->
+<!-- ##### STRUCT camel_search_words ##### -->
 <para>
 
 </para>
 
-@engine: 
-@summary: 
-@infos: 
-@cur: 
-@linelen: 
-@set: 
-@Returns: 
+@len: 
+@type: 
+@words: 
 
-<!-- ##### FUNCTION camel_imap4_journal_append ##### -->
+<!-- ##### FUNCTION camel_spool_folder_new ##### -->
 <para>
 
 </para>
 
-@journal: 
-@message: 
-@mi: 
-@appended_uid: 
+@parent_store: 
+@full_name: 
+@flags: 
 @ex: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_journal_new ##### -->
+<!-- ##### ENUM camel_spool_store_t ##### -->
 <para>
 
 </para>
 
-@folder: 
-@filename: 
-@Returns: 
+@CAMEL_SPOOL_STORE_MBOX: 
+@CAMEL_SPOOL_STORE_ELM: 
 
-<!-- ##### FUNCTION camel_imap4_journal_readd_failed ##### -->
+<!-- ##### FUNCTION camel_spool_summary_add ##### -->
 <para>
 
 </para>
 
-@journal: 
+@cls: 
+@msg: 
+@info: 
+@Param4: 
+@ex: 
+@Returns: 
 
-<!-- ##### ENUM camel_imap4_level_t ##### -->
+<!-- ##### FUNCTION camel_spool_summary_check ##### -->
 <para>
 
 </para>
 
-@CAMEL_IMAP4_LEVEL_UNKNOWN: 
-@CAMEL_IMAP4_LEVEL_IMAP4: 
-@CAMEL_IMAP4_LEVEL_IMAP4REV1: 
+@cls: 
+@Param2: 
+@ex: 
+@Returns: 
 
-<!-- ##### STRUCT camel_imap4_list_t ##### -->
+<!-- ##### FUNCTION camel_spool_summary_construct ##### -->
 <para>
 
 </para>
 
-@flags: 
-@delim: 
-@name: 
+@new: 
+@filename: 
+@spool_name: 
+@index: 
 
-<!-- ##### FUNCTION camel_imap4_merge_flags ##### -->
+<!-- ##### FUNCTION camel_spool_summary_decode_x_evolution ##### -->
 <para>
 
 </para>
 
-@original
-@local
-@server
+@cls
+@xev
+@info
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_namespace_clear ##### -->
+<!-- ##### FUNCTION camel_spool_summary_encode_x_evolution ##### -->
 <para>
 
 </para>
 
-@ns: 
+@cls: 
+@info: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_namespace_list_copy ##### -->
+<!-- ##### FUNCTION camel_spool_summary_load ##### -->
 <para>
 
 </para>
 
-@nsl: 
+@cls: 
+@forceindex: 
+@ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_namespace_list_free ##### -->
+<!-- ##### FUNCTION camel_spool_summary_new ##### -->
 <para>
 
 </para>
 
-@nsl: 
+@Param1: 
+@filename: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_parse_flags_list ##### -->
+<!-- ##### FUNCTION camel_spool_summary_sync ##### -->
 <para>
 
 </para>
 
-@engine: 
-@flags: 
+@cls: 
+@expunge: 
+@Param3: 
 @ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_resp_code_free ##### -->
+<!-- ##### FUNCTION camel_spool_summary_write_headers ##### -->
 <para>
 
 </para>
 
-@rcode: 
+@fd: 
+@header: 
+@xevline: 
+@Returns: 
 
-<!-- ##### ENUM camel_imap4_resp_code_t ##### -->
+<!-- ##### FUNCTION camel_stream_filter_new_with_stream ##### -->
 <para>
 
 </para>
 
-@CAMEL_IMAP4_RESP_CODE_ALERT: 
-@CAMEL_IMAP4_RESP_CODE_BADCHARSET: 
-@CAMEL_IMAP4_RESP_CODE_CAPABILITY: 
-@CAMEL_IMAP4_RESP_CODE_PARSE: 
-@CAMEL_IMAP4_RESP_CODE_PERM_FLAGS: 
-@CAMEL_IMAP4_RESP_CODE_READONLY: 
-@CAMEL_IMAP4_RESP_CODE_READWRITE: 
-@CAMEL_IMAP4_RESP_CODE_TRYCREATE: 
-@CAMEL_IMAP4_RESP_CODE_UIDNEXT: 
-@CAMEL_IMAP4_RESP_CODE_UIDVALIDITY: 
-@CAMEL_IMAP4_RESP_CODE_UNSEEN: 
-@CAMEL_IMAP4_RESP_CODE_NEWNAME: 
-@CAMEL_IMAP4_RESP_CODE_APPENDUID: 
-@CAMEL_IMAP4_RESP_CODE_COPYUID: 
-@CAMEL_IMAP4_RESP_CODE_UNKNOWN: 
+@stream: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_search_new ##### -->
+<!-- ##### FUNCTION camel_stream_vfs_new_with_handle ##### -->
 <para>
 
 </para>
 
-@engine: 
-@cachedir: 
+@handle: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_specials_init ##### -->
+<!-- ##### FUNCTION camel_test_end ##### -->
 <para>
 
 </para>
 
+@void: 
 
-<!-- ##### STRUCT camel_imap4_status_attr_t ##### -->
+<!-- ##### FUNCTION camel_test_fail ##### -->
 <para>
 
 </para>
 
-@next: 
-@type: 
-@value: 
+@why: 
+@Varargs: 
 
-<!-- ##### FUNCTION camel_imap4_status_free ##### -->
+<!-- ##### FUNCTION camel_test_failv ##### -->
 <para>
 
 </para>
 
-@status: 
+@why: 
+@ap: 
 
-<!-- ##### STRUCT camel_imap4_status_t ##### -->
+<!-- ##### FUNCTION camel_test_fatal ##### -->
 <para>
 
 </para>
 
-@attr_list: 
-@mailbox: 
+@void: 
 
-<!-- ##### FUNCTION camel_imap4_store_summary_get_folder_info ##### -->
+<!-- ##### FUNCTION camel_test_init ##### -->
 <para>
 
 </para>
 
-@s: 
-@top: 
-@flags: 
-@Returns: 
+@argc: 
+@argv: 
 
-<!-- ##### FUNCTION camel_imap4_store_summary_new ##### -->
+<!-- ##### FUNCTION camel_test_nonfatal ##### -->
 <para>
 
 </para>
 
-@Returns: 
+@why: 
+@Varargs: 
 
-<!-- ##### FUNCTION camel_imap4_store_summary_note_info ##### -->
+<!-- ##### FUNCTION camel_test_provider_init ##### -->
 <para>
 
 </para>
 
-@s
-@fi
+@argc
+@argv
 
-<!-- ##### FUNCTION camel_imap4_store_summary_set_capabilities ##### -->
+<!-- ##### FUNCTION camel_test_pull ##### -->
 <para>
 
 </para>
 
-@s: 
-@capa: 
+@void: 
 
-<!-- ##### FUNCTION camel_imap4_store_summary_set_namespaces ##### -->
+<!-- ##### FUNCTION camel_test_push ##### -->
 <para>
 
 </para>
 
-@s
-@ns: 
+@what
+@Varargs: 
 
-<!-- ##### FUNCTION camel_imap4_store_summary_unnote_info ##### -->
+<!-- ##### FUNCTION camel_test_session_new ##### -->
 <para>
 
 </para>
 
-@s
-@fi
+@path
+@Returns
 
-<!-- ##### FUNCTION camel_imap4_stream_line ##### -->
+<!-- ##### FUNCTION camel_test_start ##### -->
 <para>
 
 </para>
 
-@stream: 
-@line: 
-@len: 
-@Returns: 
+@what: 
 
-<!-- ##### FUNCTION camel_imap4_stream_literal ##### -->
+<!-- ##### FUNCTION camel_text_index_get_type ##### -->
 <para>
 
 </para>
 
-@stream: 
-@literal: 
-@len: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_stream_new ##### -->
+<!-- ##### FUNCTION camel_text_index_key_cursor_get_type ##### -->
 <para>
 
 </para>
 
-@stream: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_stream_next_token ##### -->
+<!-- ##### FUNCTION camel_text_index_name_get_type ##### -->
 <para>
 
 </para>
 
-@stream: 
-@token: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_stream_unget_token ##### -->
+<!-- ##### MACRO camel_type_get_global_classfuncs ##### -->
 <para>
 
 </para>
 
-@stream: 
-@token: 
-@Returns: 
+@x: 
 
-<!-- ##### FUNCTION camel_imap4_summary_expunge ##### -->
+<!-- ##### FUNCTION camel_type_init ##### -->
 <para>
 
 </para>
 
-@summary: 
-@seqid: 
+@void: 
 
-<!-- ##### FUNCTION camel_imap4_summary_flush_updates ##### -->
+<!-- ##### FUNCTION camel_type_register ##### -->
 <para>
 
 </para>
 
-@summary: 
-@ex: 
+@parent: 
+@name: 
+@instance_size: 
+@classfuncs_size: 
+@class_init: 
+@class_finalize: 
+@instance_init: 
+@instance_finalize: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_summary_new ##### -->
+<!-- ##### FUNCTION camel_type_to_name ##### -->
 <para>
 
 </para>
 
-@folder
+@type
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_summary_set_exists ##### -->
+<!-- ##### FUNCTION camel_ustrstrcase ##### -->
 <para>
 
 </para>
 
-@summary: 
-@exists: 
+@haystack: 
+@needle: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_imap4_summary_set_recent ##### -->
+<!-- ##### VARIABLE camel_verbose_debug ##### -->
 <para>
 
 </para>
 
-@summary: 
-@recent: 
 
-<!-- ##### FUNCTION camel_imap4_summary_set_uidnext ##### -->
+<!-- ##### MACRO check ##### -->
 <para>
 
 </para>
 
-@summary: 
-@uidnext: 
+@x: 
 
-<!-- ##### FUNCTION camel_imap4_summary_set_uidvalidity ##### -->
+<!-- ##### MACRO check_count ##### -->
 <para>
 
 </para>
 
-@summary
-@uidvalidity
+@object
+@expected
 
-<!-- ##### FUNCTION camel_imap4_summary_set_unseen ##### -->
+<!-- ##### MACRO check_msg ##### -->
 <para>
 
 </para>
 
-@summary: 
-@unseen: 
+@x: 
+@y: 
+@z...: 
 
-<!-- ##### STRUCT camel_imap4_token_t ##### -->
+<!-- ##### MACRO check_unref ##### -->
 <para>
 
 </para>
 
-@token: 
+@object: 
+@expected: 
 
-<!-- ##### FUNCTION camel_imap4_untagged_list ##### -->
+<!-- ##### FUNCTION cnc_lookup ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ic: 
-@index: 
-@token: 
-@ex: 
+@priv: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_untagged_status ##### -->
+<!-- ##### FUNCTION create_junk_folder ##### -->
 <para>
 
 </para>
 
-@engine: 
-@ic: 
-@index: 
-@token: 
-@ex: 
+@store: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap4_utils_set_unexpected_token_error ##### -->
+<!-- ##### FUNCTION do_flags_diff ##### -->
 <para>
 
 </para>
 
-@ex
-@engine
-@token
+@diff
+@old
+@_new
 
-<!-- ##### FUNCTION camel_imap_store_summary_namespace_new ##### -->
+<!-- ##### FUNCTION e_path_find_folders ##### -->
 <para>
 
 </para>
 
-@s
-@full_name
-@dir_sep
+@prefix
+@callback
+@data
 @Returns: 
 
-<!-- ##### FUNCTION camel_imap_store_summary_namespace_set ##### -->
+<!-- ##### FUNCTION e_path_rmdir ##### -->
 <para>
 
 </para>
 
-@s: 
-@ns: 
+@prefix: 
+@vpath: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_index_name_get_type ##### -->
+<!-- ##### FUNCTION e_path_to_physical ##### -->
 <para>
 
 </para>
 
+@prefix: 
+@vpath: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_index_set_normalise ##### -->
+<!-- ##### STRUCT flags_diff_t ##### -->
 <para>
 
 </para>
 
-@idx: 
-@func: 
-@data: 
+@changed: 
+@bits: 
 
-<!-- ##### FUNCTION camel_interface_cast ##### -->
+<!-- ##### FUNCTION groupwise_base_url_lookup ##### -->
 <para>
 
 </para>
 
-@klass: 
-@ctype: 
+@priv: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_interface_is ##### -->
+<!-- ##### FUNCTION groupwise_get_name ##### -->
 <para>
 
 </para>
 
-@k
-@ctype
+@service
+@brief
 @Returns: 
 
-<!-- ##### FUNCTION camel_interface_register ##### -->
+<!-- ##### FUNCTION groupwise_refresh_folder ##### -->
 <para>
 
 </para>
 
-@parent: 
-@name: 
-@classfuncs_size: 
-@class_init: 
-@class_finalize: 
-@Returns: 
+@folder: 
+@ex: 
 
-<!-- ##### VARIABLE camel_interface_type ##### -->
+<!-- ##### FUNCTION groupwise_store_set_current_folder ##### -->
 <para>
 
 </para>
 
+@groupwise_store: 
+@folder: 
 
-<!-- ##### FUNCTION camel_isubscribe_get_type ##### -->
+<!-- ##### FUNCTION groupwise_summary_clear ##### -->
 <para>
 
 </para>
 
+@summary: 
+@uncache: 
+
+<!-- ##### FUNCTION gw_concat ##### -->
+<para>
+
+</para>
+
+@prefix: 
+@suffix: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_isubscribe_subscribe ##### -->
+<!-- ##### FUNCTION gw_get_path ##### -->
 <para>
 
 </para>
 
-@store: 
+@gw_store: 
 @folder_name: 
-@ex
+@Returns
 
-<!-- ##### FUNCTION camel_isubscribe_subscribed ##### -->
+<!-- ##### FUNCTION gw_store_reload_folder ##### -->
 <para>
 
 </para>
 
 @store: 
-@name: 
-@Returns: 
+@folder: 
+@flags: 
+@ex: 
 
-<!-- ##### FUNCTION camel_isubscribe_unsubscribe ##### -->
+<!-- ##### FUNCTION gw_update_summary ##### -->
 <para>
 
 </para>
 
-@store
-@folder_name
+@folder
+@item_list
 @ex: 
 
-<!-- ##### FUNCTION camel_iterator_free ##### -->
+<!-- ##### FUNCTION imap_append_resyncing ##### -->
 <para>
 
 </para>
 
-@it: 
+@folder: 
+@message: 
+@info: 
+@appended_uid: 
+@ex: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_iterator_length ##### -->
+<!-- ##### FUNCTION imap_concat ##### -->
 <para>
 
 </para>
 
-@it: 
+@imap_store: 
+@prefix: 
+@suffix: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_iterator_new ##### -->
+<!-- ##### FUNCTION imap_create_flag_list ##### -->
 <para>
 
 </para>
 
-@klass: 
-@size: 
+@flags: 
+@info: 
+@permanent_flags: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_iterator_next ##### -->
+<!-- ##### FUNCTION imap_expunge_uids_resyncing ##### -->
 <para>
 
 </para>
 
-@it: 
+@folder: 
+@uids: 
 @ex: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_iterator_reset ##### -->
+<!-- ##### FUNCTION imap_is_atom ##### -->
 <para>
 
 </para>
 
-@it: 
+@in: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_key_file_get_type ##### -->
+<!-- ##### FUNCTION imap_mailbox_decode ##### -->
 <para>
 
 </para>
 
+@in: 
+@inlen: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_key_table_get_type ##### -->
+<!-- ##### FUNCTION imap_mailbox_encode ##### -->
 <para>
 
 </para>
 
+@in: 
+@inlen: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_md5_final ##### -->
+<!-- ##### FUNCTION imap_namespace_concat ##### -->
 <para>
 
 </para>
 
-@ctx: 
-@digest: 
+@store: 
+@name: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_md5_get_digest ##### -->
+<!-- ##### FUNCTION imap_namespaces_destroy ##### -->
 <para>
 
 </para>
 
-@buffer: 
-@buffer_size: 
-@digest: 
+@namespaces: 
 
-<!-- ##### FUNCTION camel_md5_get_digest_from_file ##### -->
+<!-- ##### FUNCTION imap_next_word ##### -->
 <para>
 
 </para>
 
-@filename
-@digest
+@buf
+@Returns
 
-<!-- ##### FUNCTION camel_md5_init ##### -->
+<!-- ##### MACRO imap_parse_astring ##### -->
 <para>
 
 </para>
 
-@ctx: 
+@str_p: 
+@len_p: 
 
-<!-- ##### FUNCTION camel_md5_update ##### -->
+<!-- ##### FUNCTION imap_parse_body ##### -->
 <para>
 
 </para>
 
-@ctx
-@buf
-@len
+@body_p
+@folder
+@ci
 
-<!-- ##### FUNCTION camel_medium_get_content_object ##### -->
+<!-- ##### FUNCTION imap_parse_flag_list ##### -->
 <para>
 
 </para>
 
-@medium: 
+@flag_list_p: 
+@flags_out: 
+@custom_flags_out: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_medium_set_content_object ##### -->
+<!-- ##### FUNCTION imap_parse_folder_name ##### -->
 <para>
 
 </para>
 
-@medium: 
-@content: 
+@store: 
+@folder_name: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_mime_filter_basic_new_type ##### -->
+<!-- ##### FUNCTION imap_parse_list_response ##### -->
 <para>
 
 </para>
 
-@type: 
+@store: 
+@buf: 
+@flags: 
+@sep: 
+@folder: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_mime_filter_charset_new_convert ##### -->
+<!-- ##### FUNCTION imap_parse_namespace_response ##### -->
 <para>
 
 </para>
 
-@from_charset: 
-@to_charset: 
+@response: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_mime_filter_index_new_index ##### -->
+<!-- ##### MACRO imap_parse_nstring ##### -->
 <para>
 
 </para>
 
-@index
-@Returns
+@str_p
+@len_p
 
-<!-- ##### FUNCTION camel_mime_filter_save_new_with_stream ##### -->
+<!-- ##### MACRO imap_parse_string ##### -->
 <para>
 
 </para>
 
-@stream
-@Returns
+@str_p
+@len_p
 
-<!-- ##### FUNCTION camel_mime_part_get_content_MD5 ##### -->
+<!-- ##### FUNCTION imap_parse_string_generic ##### -->
 <para>
 
 </para>
 
-@mime_part: 
+@str_p: 
+@len: 
+@type: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_mime_part_set_content_MD5 ##### -->
+<!-- ##### FUNCTION imap_path_find_folders ##### -->
 <para>
 
 </para>
 
-@mime_part: 
-@md5sum: 
+@prefix: 
+@callback: 
+@data: 
+@Returns: 
 
-<!-- ##### FUNCTION camel_mkdir ##### -->
+<!-- ##### FUNCTION imap_path_to_physical ##### -->
 <para>
 
 </para>
 
-@path
-@mode
+@prefix
+@vpath
 @Returns: 
 
-<!-- ##### FUNCTION camel_news_address_new ##### -->
+<!-- ##### FUNCTION imap_quote_string ##### -->
 <para>
 
 </para>
 
+@str: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_object_class_add_interface ##### -->
+<!-- ##### FUNCTION imap_skip_list ##### -->
 <para>
 
 </para>
 
-@klass: 
-@itype: 
+@str_p: 
 
-<!-- ##### FUNCTION camel_object_get_int ##### -->
+<!-- ##### FUNCTION imap_transfer_resyncing ##### -->
 <para>
 
 </para>
 
-@vo: 
+@source: 
+@uids: 
+@dest: 
+@transferred_uids: 
+@delete_originals: 
 @ex: 
-@tag: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_object_get_interface ##### -->
+<!-- ##### FUNCTION imap_uid_array_free ##### -->
 <para>
 
 </para>
 
-@vo: 
-@itype: 
-@Returns: 
+@arr: 
 
-<!-- ##### FUNCTION camel_object_get_ptr ##### -->
+<!-- ##### FUNCTION imap_uid_array_to_set ##### -->
 <para>
 
 </para>
 
-@vo: 
-@ex: 
-@tag: 
+@summary: 
+@uids: 
+@uid: 
+@maxlen: 
+@lastuid: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_object_meta_get ##### -->
+<!-- ##### FUNCTION imap_uid_set_to_array ##### -->
 <para>
 
 </para>
 
-@vo
-@name
+@summary
+@uids
 @Returns: 
 
-<!-- ##### FUNCTION camel_object_meta_set ##### -->
+<!-- ##### MACRO is_atom ##### -->
 <para>
 
 </para>
 
-@vo: 
-@name: 
-@value: 
-@Returns: 
+@x: 
 
-<!-- ##### FUNCTION camel_object_new_name ##### -->
+<!-- ##### MACRO is_ctrl ##### -->
 <para>
 
 </para>
 
-@name: 
-@Returns: 
+@x: 
 
-<!-- ##### FUNCTION camel_operation_cancel_block ##### -->
+<!-- ##### MACRO is_lwsp ##### -->
 <para>
 
 </para>
 
-@cc
+@x
 
-<!-- ##### FUNCTION camel_operation_cancel_unblock ##### -->
+<!-- ##### MACRO is_qsafe ##### -->
 <para>
 
 </para>
 
-@cc
+@x
 
-<!-- ##### FUNCTION camel_operation_progress_count ##### -->
+<!-- ##### MACRO is_type ##### -->
 <para>
 
 </para>
 
-@cc
-@sofar
+@x
+@t
 
-<!-- ##### FUNCTION camel_partition_table_get_type ##### -->
+<!-- ##### MACRO is_wild ##### -->
 <para>
 
 </para>
 
-@Returns
+@x
 
-<!-- ##### FUNCTION camel_process_fork ##### -->
+<!-- ##### STRUCT namespace ##### -->
 <para>
 
 </para>
 
-@path: 
-@argv: 
-@infd: 
-@outfd: 
-@errfd: 
-@ex: 
-@Returns: 
+@next: 
+@prefix: 
+@delim: 
 
-<!-- ##### FUNCTION camel_process_wait ##### -->
+<!-- ##### STRUCT namespaces ##### -->
 <para>
 
 </para>
 
-@pid: 
-@Returns: 
+@personal: 
+@other: 
+@shared: 
 
-<!-- ##### FUNCTION camel_sasl_authenticated ##### -->
+<!-- ##### MACRO pull ##### -->
 <para>
 
 </para>
 
-@sasl: 
-@Returns: 
 
-<!-- ##### FUNCTION camel_search_build_match_regex ##### -->
+<!-- ##### MACRO push ##### -->
 <para>
 
 </para>
 
-@pattern: 
-@type: 
-@argc: 
-@argv: 
-@ex: 
+
+<!-- ##### FUNCTION storage_path_lookup ##### -->
+<para>
+
+</para>
+
+@priv: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_search_camel_header_soundex ##### -->
+<!-- ##### FUNCTION string_equal ##### -->
 <para>
 
 </para>
 
-@header
-@match
+@a
+@b
 @Returns: 
 
-<!-- ##### ENUM camel_search_flags_t ##### -->
+<!-- ##### FUNCTION strip_lt_gt ##### -->
 <para>
 
 </para>
 
-@CAMEL_SEARCH_MATCH_START: 
-@CAMEL_SEARCH_MATCH_END: 
-@CAMEL_SEARCH_MATCH_REGEX: 
-@CAMEL_SEARCH_MATCH_ICASE: 
-@CAMEL_SEARCH_MATCH_NEWLINE: 
+@string: 
+@s_offset: 
+@e_offset: 
 
-<!-- ##### FUNCTION camel_search_header_match ##### -->
+<!-- ##### FUNCTION test_address_compare ##### -->
 <para>
 
 </para>
 
-@value: 
-@match: 
-@how: 
-@type: 
-@default_charset: 
-@Returns: 
+@addr: 
+@addr2: 
 
-<!-- ##### ENUM camel_search_match_t ##### -->
+<!-- ##### FUNCTION test_folder_basic ##### -->
 <para>
 
 </para>
 
-@CAMEL_SEARCH_MATCH_EXACT: 
-@CAMEL_SEARCH_MATCH_CONTAINS: 
-@CAMEL_SEARCH_MATCH_STARTS: 
-@CAMEL_SEARCH_MATCH_ENDS: 
-@CAMEL_SEARCH_MATCH_SOUNDEX: 
+@session: 
+@storename: 
+@local: 
+@spool: 
 
-<!-- ##### FUNCTION camel_search_message_body_contains ##### -->
+<!-- ##### FUNCTION test_folder_counts ##### -->
 <para>
 
 </para>
 
-@object
-@pattern
-@Returns
+@folder
+@total
+@unread
 
-<!-- ##### ENUM camel_search_t ##### -->
+<!-- ##### FUNCTION test_folder_message ##### -->
 <para>
 
 </para>
 
-@CAMEL_SEARCH_TYPE_ASIS: 
-@CAMEL_SEARCH_TYPE_ENCODED: 
-@CAMEL_SEARCH_TYPE_ADDRESS: 
-@CAMEL_SEARCH_TYPE_ADDRESS_ENCODED: 
-@CAMEL_SEARCH_TYPE_MLIST: 
+@folder: 
+@uid: 
 
-<!-- ##### STRUCT camel_search_word ##### -->
+<!-- ##### FUNCTION test_folder_message_ops ##### -->
 <para>
 
 </para>
 
-@type: 
-@word: 
+@session: 
+@storename: 
+@local: 
+@foldername: 
 
-<!-- ##### ENUM camel_search_word_t ##### -->
+<!-- ##### FUNCTION test_folder_not_message ##### -->
 <para>
 
 </para>
 
-@CAMEL_SEARCH_WORD_SIMPLE: 
-@CAMEL_SEARCH_WORD_COMPLEX: 
-@CAMEL_SEARCH_WORD_8BIT: 
+@folder: 
+@uid: 
 
-<!-- ##### STRUCT camel_search_words ##### -->
+<!-- ##### MACRO test_free ##### -->
 <para>
 
 </para>
 
-@len: 
-@type: 
-@words: 
+@mem: 
 
-<!-- ##### FUNCTION camel_stream_filter_new_with_stream ##### -->
+<!-- ##### FUNCTION test_message_compare ##### -->
 <para>
 
 </para>
 
-@stream
+@msg
 @Returns: 
 
-<!-- ##### FUNCTION camel_stream_vfs_new_with_handle ##### -->
+<!-- ##### FUNCTION test_message_compare_content ##### -->
 <para>
 
 </para>
 
-@handle: 
+@dw: 
+@text: 
+@len: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_text_index_get_type ##### -->
+<!-- ##### FUNCTION test_message_compare_header ##### -->
 <para>
 
 </para>
 
+@m1: 
+@m2: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_text_index_key_cursor_get_type ##### -->
+<!-- ##### FUNCTION test_message_compare_messages ##### -->
 <para>
 
 </para>
 
+@m1: 
+@m2: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_text_index_name_get_type ##### -->
+<!-- ##### FUNCTION test_message_create_simple ##### -->
 <para>
 
 </para>
 
+@void: 
 @Returns: 
 
-<!-- ##### FUNCTION camel_ustrstrcase ##### -->
+<!-- ##### FUNCTION test_message_dump_structure ##### -->
 <para>
 
 </para>
 
-@haystack: 
-@needle: 
-@Returns: 
+@m: 
 
-<!-- ##### VARIABLE camel_verbose_debug ##### -->
+<!-- ##### FUNCTION test_message_info ##### -->
 <para>
 
 </para>
 
+@msg: 
+@info: 
 
-<!-- ##### FUNCTION groupwise_refresh_folder ##### -->
+<!-- ##### FUNCTION test_message_read_file ##### -->
 <para>
 
 </para>
 
-@folder
-@ex
+@name
+@Returns
 
-<!-- ##### FUNCTION gw_get_path ##### -->
+<!-- ##### FUNCTION test_message_set_content_simple ##### -->
 <para>
 
 </para>
 
-@gw_store: 
-@folder_name: 
+@part: 
+@how: 
+@type: 
+@text: 
+@len: 
+
+<!-- ##### FUNCTION test_message_write_file ##### -->
+<para>
+
+</para>
+
+@msg: 
+@name: 
 @Returns: 
 
-<!-- ##### MACRO is_atom ##### -->
+<!-- ##### FUNCTION test_seekable_substream_readpart ##### -->
 <para>
 
 </para>
 
-@x
+@s
 
-<!-- ##### MACRO is_ctrl ##### -->
+<!-- ##### FUNCTION test_seekable_substream_writepart ##### -->
 <para>
 
 </para>
 
-@x: 
+@s: 
+@type: 
 
-<!-- ##### MACRO is_lwsp ##### -->
+<!-- ##### FUNCTION test_stream_seekable_readpart ##### -->
 <para>
 
 </para>
 
-@x
+@s
 
-<!-- ##### MACRO is_qsafe ##### -->
+<!-- ##### FUNCTION test_stream_seekable_writepart ##### -->
 <para>
 
 </para>
 
-@x
+@s
 
-<!-- ##### MACRO is_type ##### -->
+<!-- ##### STRUCT xover_header ##### -->
 <para>
 
 </para>
 
-@x: 
-@t: 
+@next: 
+@name: 
+@skip: 
+@type: 
 
-<!-- ##### MACRO is_wild ##### -->
+<!-- ##### ENUM xover_t ##### -->
 <para>
 
 </para>
 
-@x: 
+@XOVER_STRING: 
+@XOVER_MSGID: 
+@XOVER_SIZE: 
 
index 925e257..78d43b0 100644 (file)
@@ -25,16 +25,6 @@ CamelVeeFolder
 
 </para>
 
-@parent: 
-@priv: 
-@expression: 
-@flags: 
-@changes: 
-@search: 
-@parent_vee_store: 
-@hashes: 
-@loaded: 
-@deleted: 
 
 <!-- ##### MACRO CAMEL_UNMATCHED_NAME ##### -->
 <para>
index 5863249..75f0f8a 100644 (file)
@@ -25,9 +25,6 @@ CamelVeeStore
 
 </para>
 
-@parent: 
-@folder_unmatched: 
-@unmatched_uids: 
 
 <!-- ##### MACRO CAMEL_STORE_VEE_FOLDER_AUTO ##### -->
 <para>
index 958a7b7..67fc2ee 100644 (file)
@@ -25,9 +25,6 @@ CamelVeeSummary
 
 </para>
 
-@summary: 
-@force_counts: 
-@fake_visible_count: 
 
 <!-- ##### STRUCT CamelVeeMessageInfo ##### -->
 <para>
index e509f3f..6093afe 100644 (file)
@@ -39,9 +39,6 @@ CamelVTrashFolder
 
 </para>
 
-@parent: 
-@type: 
-@bit: 
 
 <!-- ##### ENUM camel_vtrash_folder_t ##### -->
 <para>