[balsa/wip/gtk4: 251/351] mailbox remote: Declare it derivable
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 251/351] mailbox remote: Declare it derivable
- Date: Wed, 23 May 2018 21:38:04 +0000 (UTC)
commit ac83fff82211623d9a4ed011ffe060474af2e2cd
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Mar 26 11:33:37 2018 -0400
mailbox remote: Declare it derivable
Use G_DECLARE_DERIVABLE_TYPE for LibBalsaMailboxRemote, make it private,
add set_server, and a macro wrapper for get_server to avoid casts.
libbalsa/mailbox_imap.c | 28 +++++++++------
libbalsa/mailbox_pop3.c | 17 +---------
libbalsa/mailbox_remote.c | 83 +++++++++++++++++++++++++++------------------
libbalsa/mailbox_remote.h | 37 ++++++-------------
4 files changed, 79 insertions(+), 86 deletions(-)
---
diff --git a/libbalsa/mailbox_imap.c b/libbalsa/mailbox_imap.c
index d76946c..cf02d07 100644
--- a/libbalsa/mailbox_imap.c
+++ b/libbalsa/mailbox_imap.c
@@ -310,15 +310,16 @@ static void
libbalsa_mailbox_imap_dispose(GObject * object)
{
LibBalsaMailboxRemote *remote;
+ LibBalsaServer *server;
LibBalsaMailboxImap *mailbox;
remote = LIBBALSA_MAILBOX_REMOTE(object);
- if (remote->server != NULL) {
- g_signal_handlers_disconnect_matched(remote->server,
+ server = libbalsa_mailbox_remote_get_server(remote);
+ if (server != NULL) {
+ g_signal_handlers_disconnect_matched(server,
G_SIGNAL_MATCH_DATA, 0,
(GQuark) 0, NULL, NULL,
remote);
- g_clear_object(&remote->server);
}
mailbox = LIBBALSA_MAILBOX_IMAP(object);
@@ -472,7 +473,7 @@ get_cache_dir(gboolean is_persistent)
static gchar*
get_header_cache_path(LibBalsaMailboxImap *mimap)
{
- LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE(mimap)->server;
+ LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mimap);
gchar *cache_dir = get_cache_dir(TRUE); /* FIXME */
gchar *header_file = g_strdup_printf("%s@%s-%s-%u-headers2",
libbalsa_server_get_username(s), libbalsa_server_get_host(s),
@@ -491,7 +492,7 @@ static gchar**
get_cache_name_pair(LibBalsaMailboxImap* mailbox, const gchar *type,
ImapUID uid)
{
- LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE(mailbox)->server;
+ LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox);
LibBalsaImapServer *is = LIBBALSA_IMAP_SERVER(s);
gboolean is_persistent = libbalsa_imap_server_has_persistent_cache(is);
gchar **res = g_malloc(3*sizeof(gchar*));
@@ -1169,7 +1170,7 @@ free_messages_info(LibBalsaMailboxImap * mbox)
static void
libbalsa_mailbox_imap_close(LibBalsaMailbox * mailbox, gboolean expunge)
{
- LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE(mailbox)->server;
+ LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox);
LibBalsaImapServer *is = LIBBALSA_IMAP_SERVER(s);
gboolean is_persistent = libbalsa_imap_server_has_persistent_cache(is);
LibBalsaMailboxImap *mbox = LIBBALSA_MAILBOX_IMAP(mailbox);
@@ -1674,6 +1675,7 @@ libbalsa_mailbox_imap_load_config(LibBalsaMailbox * mailbox,
{
LibBalsaMailboxImap *mimap;
LibBalsaMailboxRemote *remote;
+ LibBalsaServer *server;
g_return_if_fail(LIBBALSA_IS_MAILBOX_IMAP(mailbox));
@@ -1690,12 +1692,14 @@ libbalsa_mailbox_imap_load_config(LibBalsaMailbox * mailbox,
}
remote = LIBBALSA_MAILBOX_REMOTE(mailbox);
- remote->server = LIBBALSA_SERVER(libbalsa_imap_server_new_from_config());
+ server = LIBBALSA_SERVER(libbalsa_imap_server_new_from_config());
- g_signal_connect(G_OBJECT(remote->server), "config-changed",
+ g_signal_connect(G_OBJECT(server), "config-changed",
G_CALLBACK(server_host_settings_changed_cb),
(gpointer) mailbox);
+ libbalsa_mailbox_remote_set_server(remote, server);
+
if (LIBBALSA_MAILBOX_CLASS(parent_class)->load_config)
LIBBALSA_MAILBOX_CLASS(parent_class)->load_config(mailbox, prefix);
@@ -3006,7 +3010,7 @@ libbalsa_mailbox_imap_add_messages(LibBalsaMailbox * mailbox,
if(!imap_sequence_empty(&uid_sequence) &&
g_list_length(macd.outfiles) == imap_sequence_length(&uid_sequence)) {
/* Hurray, server returned UID data on appended messages! */
- LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE(mailbox)->server;
+ LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox);
LibBalsaImapServer *is = LIBBALSA_IMAP_SERVER(s);
gboolean is_persistent = libbalsa_imap_server_has_persistent_cache(is);
struct append_to_cache_data atcd;
@@ -3326,8 +3330,8 @@ libbalsa_mailbox_imap_messages_copy(LibBalsaMailbox * mailbox,
LibBalsaMailbox * dest, GError **err)
{
if (LIBBALSA_IS_MAILBOX_IMAP(dest) &&
- LIBBALSA_MAILBOX_REMOTE(dest)->server ==
- LIBBALSA_MAILBOX_REMOTE(mailbox)->server) {
+ LIBBALSA_MAILBOX_REMOTE_GET_SERVER(dest) ==
+ LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox)) {
gboolean ret;
LibBalsaMailboxImap *mimap = LIBBALSA_MAILBOX_IMAP(mailbox);
ImapMboxHandle *handle = LIBBALSA_MAILBOX_IMAP(mailbox)->handle;
@@ -3359,7 +3363,7 @@ libbalsa_mailbox_imap_messages_copy(LibBalsaMailbox * mailbox,
} else if(!imap_sequence_empty(&uid_sequence)) {
/* Copy cache files. */
GDir *dir;
- LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE(mailbox)->server;
+ LibBalsaServer *s = LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox);
LibBalsaImapServer *is = LIBBALSA_IMAP_SERVER(s);
LibBalsaMailboxImap *dst_imap = LIBBALSA_MAILBOX_IMAP(dest);
gboolean is_persistent =
diff --git a/libbalsa/mailbox_pop3.c b/libbalsa/mailbox_pop3.c
index d5230ab..730a817 100644
--- a/libbalsa/mailbox_pop3.c
+++ b/libbalsa/mailbox_pop3.c
@@ -48,7 +48,6 @@ struct _LibBalsaMailboxPop3Class {
void (*config_changed) (LibBalsaMailboxPop3* mailbox_pop3);
};
-static void libbalsa_mailbox_pop3_dispose(GObject * object);
static void libbalsa_mailbox_pop3_class_init(LibBalsaMailboxPop3Class *
klass);
static void libbalsa_mailbox_pop3_init(LibBalsaMailboxPop3 * mailbox_pop3);
@@ -96,16 +95,12 @@ libbalsa_mailbox_pop3_get_type(void)
static void
libbalsa_mailbox_pop3_class_init(LibBalsaMailboxPop3Class * klass)
{
- GObjectClass *object_class;
LibBalsaMailboxClass *libbalsa_mailbox_class;
- object_class = G_OBJECT_CLASS(klass);
libbalsa_mailbox_class = LIBBALSA_MAILBOX_CLASS(klass);
parent_class = g_type_class_peek_parent(klass);
- object_class->dispose = libbalsa_mailbox_pop3_dispose;
-
libbalsa_mailbox_class->open_mailbox = libbalsa_mailbox_pop3_open;
libbalsa_mailbox_class->check = libbalsa_mailbox_pop3_check;
@@ -128,17 +123,7 @@ libbalsa_mailbox_pop3_init(LibBalsaMailboxPop3 * mailbox_pop3)
mailbox_pop3->filter = FALSE;
mailbox_pop3->filter_cmd = NULL;
remote = LIBBALSA_MAILBOX_REMOTE(mailbox_pop3);
- remote->server = libbalsa_server_new();
-}
-
-static void
-libbalsa_mailbox_pop3_dispose(GObject * object)
-{
- LibBalsaMailboxRemote *remote = LIBBALSA_MAILBOX_REMOTE(object);
-
- g_clear_object(&remote->server);
-
- G_OBJECT_CLASS(parent_class)->dispose(object);
+ libbalsa_mailbox_remote_set_server(remote, libbalsa_server_new());
}
LibBalsaMailboxPop3*
diff --git a/libbalsa/mailbox_remote.c b/libbalsa/mailbox_remote.c
index 815c003..8dbdd3f 100644
--- a/libbalsa/mailbox_remote.c
+++ b/libbalsa/mailbox_remote.c
@@ -28,52 +28,52 @@
static void libbalsa_mailbox_remote_class_init(LibBalsaMailboxRemoteClass *
klass);
static void libbalsa_mailbox_remote_init(LibBalsaMailboxRemote * mailbox);
+static void libbalsa_mailbox_remote_dispose(GObject * object);
static void libbalsa_mailbox_remote_test_can_reach(LibBalsaMailbox * mailbox,
LibBalsaCanReachCallback * cb,
gpointer cb_data);
-GType
-libbalsa_mailbox_remote_get_type(void)
-{
- static GType mailbox_type = 0;
-
- if (!mailbox_type) {
- static const GTypeInfo mailbox_info = {
- sizeof(LibBalsaMailboxClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) libbalsa_mailbox_remote_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(LibBalsaMailbox),
- 0, /* n_preallocs */
- (GInstanceInitFunc) libbalsa_mailbox_remote_init
- };
-
- mailbox_type =
- g_type_register_static(LIBBALSA_TYPE_MAILBOX,
- "LibBalsaMailboxRemote",
- &mailbox_info, 0);
- }
-
- return mailbox_type;
-}
+typedef struct _LibBalsaMailboxRemotePrivate LibBalsaMailboxRemotePrivate;
+struct _LibBalsaMailboxRemotePrivate {
+ LibBalsaServer *server;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(LibBalsaMailboxRemote,
+ libbalsa_mailbox_remote,
+ LIBBALSA_TYPE_MAILBOX)
static void
libbalsa_mailbox_remote_class_init(LibBalsaMailboxRemoteClass * klass)
{
+ GObjectClass *object_class;
LibBalsaMailboxClass *libbalsa_mailbox_class;
+ object_class = G_OBJECT_CLASS(klass);
libbalsa_mailbox_class = LIBBALSA_MAILBOX_CLASS(klass);
+ object_class->dispose = libbalsa_mailbox_remote_dispose;
+
libbalsa_mailbox_class->test_can_reach =
libbalsa_mailbox_remote_test_can_reach;
}
static void
-libbalsa_mailbox_remote_init(LibBalsaMailboxRemote * mailbox)
+libbalsa_mailbox_remote_init(LibBalsaMailboxRemote * remote)
+{
+ LibBalsaMailboxRemotePrivate *priv =
+ libbalsa_mailbox_remote_get_instance_private(remote);
+
+ priv->server = NULL;
+}
+
+static void
+libbalsa_mailbox_remote_dispose(GObject * object)
{
- mailbox->server = NULL;
+ LibBalsaMailboxRemote *remote = (LibBalsaMailboxRemote *) object;
+ LibBalsaMailboxRemotePrivate *priv =
+ libbalsa_mailbox_remote_get_instance_private(remote);
+
+ g_clear_object(&priv->server);
}
/* Test whether a mailbox is reachable */
@@ -83,14 +83,31 @@ libbalsa_mailbox_remote_test_can_reach(LibBalsaMailbox * mailbox,
LibBalsaCanReachCallback * cb,
gpointer cb_data)
{
- libbalsa_server_test_can_reach_full(LIBBALSA_MAILBOX_REMOTE(mailbox)->server,
+ LibBalsaMailboxRemote *remote = (LibBalsaMailboxRemote *) mailbox;
+ LibBalsaMailboxRemotePrivate *priv =
+ libbalsa_mailbox_remote_get_instance_private(remote);
+
+ libbalsa_server_test_can_reach_full(priv->server,
cb, cb_data, (GObject *) mailbox);
}
-/* Public method */
+/* Public methods */
+
+LibBalsaServer *
+libbalsa_mailbox_remote_get_server(LibBalsaMailboxRemote *remote)
+{
+ LibBalsaMailboxRemotePrivate *priv =
+ libbalsa_mailbox_remote_get_instance_private(remote);
+
+ return priv->server;
+}
-void
-libbalsa_mailbox_remote_set_server(LibBalsaMailboxRemote *m, LibBalsaServer *s)
+void
+libbalsa_mailbox_remote_set_server(LibBalsaMailboxRemote *remote,
+ LibBalsaServer *server)
{
- g_set_object(&m->server, s);
+ LibBalsaMailboxRemotePrivate *priv =
+ libbalsa_mailbox_remote_get_instance_private(remote);
+
+ g_set_object(&priv->server, server);
}
diff --git a/libbalsa/mailbox_remote.h b/libbalsa/mailbox_remote.h
index 38749e9..a165d50 100644
--- a/libbalsa/mailbox_remote.h
+++ b/libbalsa/mailbox_remote.h
@@ -33,37 +33,24 @@
all mailboxes.... which arguably we might want eventually,
and claim that a directory is a "server", but until then...
*/
-#define LIBBALSA_TYPE_MAILBOX_REMOTE \
- (libbalsa_mailbox_remote_get_type())
-#define LIBBALSA_MAILBOX_REMOTE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIBBALSA_TYPE_MAILBOX_REMOTE, \
- LibBalsaMailboxRemote))
-#define LIBBALSA_MAILBOX_REMOTE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), LIBBALSA_TYPE_MAILBOX, \
- LibBalsaMailboxRemoteClass))
-#define LIBBALSA_IS_MAILBOX_REMOTE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIBBALSA_TYPE_MAILBOX_REMOTE))
-#define LIBBALSA_IS_MAILBOX_REMOTE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), LIBBALSA_TYPE_MAILBOX_REMOTE))
+#define LIBBALSA_TYPE_MAILBOX_REMOTE libbalsa_mailbox_remote_get_type()
-#define LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox) \
- ((LibBalsaServer *) LIBBALSA_MAILBOX_REMOTE(mailbox)->server)
-
-typedef struct _LibBalsaMailboxRemoteClass LibBalsaMailboxRemoteClass;
-
-struct _LibBalsaMailboxRemote {
- LibBalsaMailbox mailbox;
-
- LibBalsaServer *server;
-};
+G_DECLARE_DERIVABLE_TYPE(LibBalsaMailboxRemote,
+ libbalsa_mailbox_remote,
+ LIBBALSA,
+ MAILBOX_REMOTE,
+ LibBalsaMailbox)
struct _LibBalsaMailboxRemoteClass {
LibBalsaMailboxClass parent_class;
};
-GType libbalsa_mailbox_remote_get_type(void);
+LibBalsaServer *libbalsa_mailbox_remote_get_server(LibBalsaMailboxRemote *remote);
+/* Macro to avoid casts: */
+#define LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox) \
+ libbalsa_mailbox_remote_get_server(LIBBALSA_MAILBOX_REMOTE(mailbox))
-void libbalsa_mailbox_remote_set_server(LibBalsaMailboxRemote* m,
- LibBalsaServer* s);
+void libbalsa_mailbox_remote_set_server(LibBalsaMailboxRemote *remote,
+ LibBalsaServer *server);
#endif /* __LIBBALSA_MAILBOX_REMOTE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]