[balsa/wip/gtk4: 171/351] address-book: Declare it derivable



commit 7f82f32ffb77e4165a0c483b14e359d937424948
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Tue Feb 13 18:35:24 2018 -0500

    address-book: Declare it derivable
    
    Use G_DECLARE_DERIVABLE_TYPE for LibBalsaAddressBook, take all members
    private, and provide getters and setters.

 libbalsa/address-book-extern.c |    4 +-
 libbalsa/address-book-ldif.c   |    2 +-
 libbalsa/address-book-text.c   |    4 +-
 libbalsa/address-book-vcard.c  |    2 +-
 libbalsa/address-book.c        |  200 ++++++++++++++++++++++++++++------------
 libbalsa/address-book.h        |   48 +++++-----
 libbalsa/address-view.c        |    3 +-
 src/ab-main.c                  |   46 ++++++----
 src/ab-window.c                |   15 ++-
 src/address-book-config.c      |   46 ++++++----
 src/pref-manager.c             |   14 ++-
 src/save-restore.c             |   24 +++--
 src/store-address.c            |   11 ++-
 13 files changed, 267 insertions(+), 152 deletions(-)
---
diff --git a/libbalsa/address-book-extern.c b/libbalsa/address-book-extern.c
index 2b4d025..da6c8b7 100644
--- a/libbalsa/address-book-extern.c
+++ b/libbalsa/address-book-extern.c
@@ -185,7 +185,7 @@ libbalsa_address_book_externq_new(const gchar * name, const gchar * load,
                                       NULL));
     ab = LIBBALSA_ADDRESS_BOOK(abvc);
 
-    ab->name = g_strdup(name);
+    libbalsa_address_book_set_name(ab, name);
     abvc->load = g_strdup(load);
     abvc->save = g_strdup(save);
 
@@ -382,7 +382,7 @@ libbalsa_address_book_externq_alias_complete(LibBalsaAddressBook * ab,
 
     ex = LIBBALSA_ADDRESS_BOOK_EXTERN(ab);
 
-    if ( !ab->expand_aliases )
+    if (!libbalsa_address_book_get_expand_aliases(ab))
        return NULL;
 
     if(!parse_externq_file(ex, (gchar *)prefix, lbe_expand_cb, &res))
diff --git a/libbalsa/address-book-ldif.c b/libbalsa/address-book-ldif.c
index 5cd451b..17a73c6 100644
--- a/libbalsa/address-book-ldif.c
+++ b/libbalsa/address-book-ldif.c
@@ -97,7 +97,7 @@ libbalsa_address_book_ldif_new(const gchar * name, const gchar * path)
                                     NULL));
     ab = LIBBALSA_ADDRESS_BOOK(ab_ldif);
 
-    ab->name = g_strdup(name);
+    libbalsa_address_book_set_name(ab, name);
     LIBBALSA_ADDRESS_BOOK_TEXT(ab)->path = g_strdup(path);
 
     return ab;
diff --git a/libbalsa/address-book-text.c b/libbalsa/address-book-text.c
index 7f1948d..fac0206 100644
--- a/libbalsa/address-book-text.c
+++ b/libbalsa/address-book-text.c
@@ -337,7 +337,7 @@ lbab_text_load_file(LibBalsaAddressBookText * ab_text, FILE * stream)
             continue;
 
         if (address->address_list->next
-            && LIBBALSA_ADDRESS_BOOK(ab_text)->dist_list_mode) {
+            && libbalsa_address_book_get_dist_list_mode(LIBBALSA_ADDRESS_BOOK(ab_text))) {
             /* Create a group address. */
             InternetAddress *ia =
                 internet_address_group_new(address->full_name);
@@ -695,7 +695,7 @@ libbalsa_address_book_text_alias_complete(LibBalsaAddressBook * ab,
     GList *list;
     GList *res = NULL;
 
-    if (ab->expand_aliases == FALSE)
+    if (!libbalsa_address_book_get_expand_aliases(ab))
         return NULL;
 
     stream = fopen(ab_text->path, "r");
diff --git a/libbalsa/address-book-vcard.c b/libbalsa/address-book-vcard.c
index 2a20c1a..d20edf5 100644
--- a/libbalsa/address-book-vcard.c
+++ b/libbalsa/address-book-vcard.c
@@ -105,7 +105,7 @@ libbalsa_address_book_vcard_new(const gchar * name, const gchar * path)
                                      NULL));
     ab = LIBBALSA_ADDRESS_BOOK(abvc);
 
-    ab->name = g_strdup(name);
+    libbalsa_address_book_set_name(ab, name);
     LIBBALSA_ADDRESS_BOOK_TEXT(ab)->path = g_strdup(path);
 
     return ab;
diff --git a/libbalsa/address-book.c b/libbalsa/address-book.c
index 7daf350..5408649 100644
--- a/libbalsa/address-book.c
+++ b/libbalsa/address-book.c
@@ -29,8 +29,6 @@
 #include "libbalsa-marshal.h"
 #include "libbalsa-conf.h"
 
-static GObjectClass *parent_class = NULL;
-
 static void libbalsa_address_book_class_init(LibBalsaAddressBookClass *
                                             klass);
 static void libbalsa_address_book_init(LibBalsaAddressBook * ab);
@@ -43,39 +41,25 @@ static void libbalsa_address_book_real_load_config(LibBalsaAddressBook *
                                                   ab,
                                                   const gchar * group);
 
-GType libbalsa_address_book_get_type(void)
-{
-    static GType address_book_type = 0;
-
-    if (!address_book_type) {
-       static const GTypeInfo address_book_info = {
-           sizeof(LibBalsaAddressBookClass),
-            NULL,               /* base_init */
-            NULL,               /* base_finalize */
-           (GClassInitFunc) libbalsa_address_book_class_init,
-            NULL,               /* class_finalize */
-            NULL,               /* class_data */
-           sizeof(LibBalsaAddressBook),
-            0,                  /* n_preallocs */
-           (GInstanceInitFunc) libbalsa_address_book_init
-       };
-
-       address_book_type =
-           g_type_register_static(G_TYPE_OBJECT,
-                                   "LibBalsaAddressBook",
-                                   &address_book_info, 0);
-    }
+typedef struct {
+    /* The gnome_config prefix where we save this address book */
+    gchar *config_prefix;
+    gchar *name;
+    gchar *ext_op_code;    /* extra description for last operation */
+    gboolean is_expensive; /* is lookup to the address book expensive? 
+                             e.g. LDAP address book */
+    gboolean expand_aliases;
 
-    return address_book_type;
-}
+    gboolean dist_list_mode;
+} LibBalsaAddressBookPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE(LibBalsaAddressBook, libbalsa_address_book, G_TYPE_OBJECT)
 
 static void
 libbalsa_address_book_class_init(LibBalsaAddressBookClass * klass)
 {
     GObjectClass *object_class;
 
-    parent_class = g_type_class_peek_parent(klass);
-
     object_class = G_OBJECT_CLASS(klass);
 
     klass->load = NULL;
@@ -92,25 +76,26 @@ libbalsa_address_book_class_init(LibBalsaAddressBookClass * klass)
 static void
 libbalsa_address_book_init(LibBalsaAddressBook * ab)
 {
-    ab->config_prefix = NULL;
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    priv->config_prefix = NULL;
 
-    ab->name = NULL;
-    ab->expand_aliases = TRUE;
-    ab->dist_list_mode = FALSE;
-    ab->is_expensive   = FALSE;
+    priv->name = NULL;
+    priv->expand_aliases = TRUE;
+    priv->dist_list_mode = FALSE;
+    priv->is_expensive   = FALSE;
 }
 
 static void
 libbalsa_address_book_finalize(GObject * object)
 {
-    LibBalsaAddressBook *ab;
+    LibBalsaAddressBook *ab = LIBBALSA_ADDRESS_BOOK(object);
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
 
-    ab = LIBBALSA_ADDRESS_BOOK(object);
+    g_free(priv->config_prefix);
+    g_free(priv->name);
 
-    g_free(ab->config_prefix);
-    g_free(ab->name);
-
-    G_OBJECT_CLASS(parent_class)->finalize(object);
+    G_OBJECT_CLASS(libbalsa_address_book_parent_class)->finalize(object);
 }
 
 LibBalsaAddressBook *
@@ -208,9 +193,11 @@ libbalsa_address_book_modify_address(LibBalsaAddressBook * ab,
 void
 libbalsa_address_book_set_status(LibBalsaAddressBook * ab, gchar *str)
 {
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
     g_return_if_fail(ab);
-    g_free(ab->ext_op_code);
-    ab->ext_op_code = str;
+    g_free(priv->ext_op_code);
+    priv->ext_op_code = str;
 }
 
 void
@@ -232,6 +219,8 @@ void
 libbalsa_address_book_load_config(LibBalsaAddressBook * ab,
                                  const gchar * group)
 {
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
     g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK(ab));
     g_assert(LIBBALSA_ADDRESS_BOOK_GET_CLASS(ab) != NULL);
 
@@ -239,8 +228,8 @@ libbalsa_address_book_load_config(LibBalsaAddressBook * ab,
     LIBBALSA_ADDRESS_BOOK_GET_CLASS(ab)->load_config(ab, group);
     libbalsa_conf_pop_group();
 
-    if (ab->is_expensive < 0)
-        ab->is_expensive = FALSE;
+    if (priv->is_expensive < 0)
+        priv->is_expensive = FALSE;
 }
 
 GList *
@@ -257,7 +246,10 @@ libbalsa_address_book_alias_complete(LibBalsaAddressBook * ab,
 gboolean libbalsa_address_is_dist_list(const LibBalsaAddressBook *ab,
                                       const LibBalsaAddress *address)
 {
-    return (ab->dist_list_mode && g_list_length(address->address_list)>1);
+    LibBalsaAddressBookPrivate *priv =
+        libbalsa_address_book_get_instance_private((LibBalsaAddressBook *) ab);
+
+    return (priv->dist_list_mode && g_list_length(address->address_list)>1);
 }
 
 
@@ -266,52 +258,57 @@ static void
 libbalsa_address_book_real_save_config(LibBalsaAddressBook * ab,
                                       const gchar * group)
 {
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
     g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK(ab));
     g_assert(LIBBALSA_ADDRESS_BOOK_GET_CLASS(ab) != NULL);
 
     libbalsa_conf_set_string("Type", g_type_name(G_OBJECT_TYPE(ab)));
-    libbalsa_conf_set_string("Name", ab->name);
-    libbalsa_conf_set_bool("ExpandAliases", ab->expand_aliases);
-    libbalsa_conf_set_bool("IsExpensive", ab->is_expensive);
-    libbalsa_conf_set_bool("DistListMode", ab->dist_list_mode);
+    libbalsa_conf_set_string("Name", priv->name);
+    libbalsa_conf_set_bool("ExpandAliases", priv->expand_aliases);
+    libbalsa_conf_set_bool("IsExpensive", priv->is_expensive);
+    libbalsa_conf_set_bool("DistListMode", priv->dist_list_mode);
 
-    g_free(ab->config_prefix);
-    ab->config_prefix = g_strdup(group);
+    g_free(priv->config_prefix);
+    priv->config_prefix = g_strdup(group);
 }
 
 static void
 libbalsa_address_book_real_load_config(LibBalsaAddressBook * ab,
                                       const gchar * group)
 {
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
     gboolean def;
 
     g_return_if_fail(LIBBALSA_IS_ADDRESS_BOOK(ab));
 
-    g_free(ab->config_prefix);
-    ab->config_prefix = g_strdup(group);
+    g_free(priv->config_prefix);
+    priv->config_prefix = g_strdup(group);
 
-    ab->expand_aliases = libbalsa_conf_get_bool("ExpandAliases=false");
+    priv->expand_aliases = libbalsa_conf_get_bool("ExpandAliases=false");
 
-    ab->is_expensive =
+    priv->is_expensive =
         libbalsa_conf_get_bool_with_default("IsExpensive", &def);
     if (def)
         /* Default will be supplied by the backend, or in
          * libbalsa_address_book_load_config. */
-        ab->is_expensive = -1;
+        priv->is_expensive = -1;
 
-    ab->dist_list_mode = libbalsa_conf_get_bool("DistListMode=false");
+    priv->dist_list_mode = libbalsa_conf_get_bool("DistListMode=false");
 
-    g_free(ab->name);
-    ab->name = libbalsa_conf_get_string("Name=Address Book");
+    g_free(priv->name);
+    priv->name = libbalsa_conf_get_string("Name=Address Book");
 }
 
 const gchar*
 libbalsa_address_book_strerror(LibBalsaAddressBook * ab, LibBalsaABErr err)
 {
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
     const gchar *s;
+
     g_return_val_if_fail(ab, NULL);
-    if(ab->ext_op_code)
-       return ab->ext_op_code;
+    if(priv->ext_op_code)
+       return priv->ext_op_code;
 
     switch(err) {
     case LBABERR_OK:             s= _("No error"); break;
@@ -328,4 +325,87 @@ libbalsa_address_book_strerror(LibBalsaAddressBook * ab, LibBalsaABErr err)
     return s;
 }
 
+/*
+ * Getters
+ */
+
+gboolean
+libbalsa_address_book_get_dist_list_mode(LibBalsaAddressBook * ab)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    return priv->dist_list_mode;
+}
+
+gboolean
+libbalsa_address_book_get_expand_aliases(LibBalsaAddressBook * ab)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    return priv->expand_aliases;
+}
+
+gboolean
+libbalsa_address_book_get_is_expensive(LibBalsaAddressBook * ab)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    return priv->is_expensive;
+}
+
+const gchar *
+libbalsa_address_book_get_name(LibBalsaAddressBook * ab)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
 
+    return priv->name;
+}
+
+const gchar *
+libbalsa_address_book_get_config_prefix(LibBalsaAddressBook * ab)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    return priv->config_prefix;
+}
+
+/*
+ * Setters
+ */
+
+void
+libbalsa_address_book_set_dist_list_mode(LibBalsaAddressBook * ab,
+                                         gboolean              dist_list_mode)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    priv->dist_list_mode = dist_list_mode;
+}
+
+void
+libbalsa_address_book_set_expand_aliases(LibBalsaAddressBook * ab,
+                                         gboolean              expand_aliases)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    priv->expand_aliases = expand_aliases;
+}
+
+void
+libbalsa_address_book_set_is_expensive(LibBalsaAddressBook * ab,
+                                       gboolean              is_expensive)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    priv->is_expensive = is_expensive;
+}
+
+void
+libbalsa_address_book_set_name(LibBalsaAddressBook * ab,
+                               const gchar         * name)
+{
+    LibBalsaAddressBookPrivate *priv = libbalsa_address_book_get_instance_private(ab);
+
+    g_free(priv->name);
+    priv->name = g_strdup(name);
+}
diff --git a/libbalsa/address-book.h b/libbalsa/address-book.h
index b48e541..cf9c966 100644
--- a/libbalsa/address-book.h
+++ b/libbalsa/address-book.h
@@ -23,14 +23,9 @@
 
 #include "address.h"
 
-#define LIBBALSA_TYPE_ADDRESS_BOOK                     (libbalsa_address_book_get_type())
-#define LIBBALSA_ADDRESS_BOOK(obj)                     (G_TYPE_CHECK_INSTANCE_CAST (obj, 
LIBBALSA_TYPE_ADDRESS_BOOK, LibBalsaAddressBook))
-#define LIBBALSA_ADDRESS_BOOK_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST (klass, 
LIBBALSA_TYPE_ADDRESS_BOOK, LibBalsaAddressBookClass))
-#define LIBBALSA_IS_ADDRESS_BOOK(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE (obj, 
LIBBALSA_TYPE_ADDRESS_BOOK))
-#define LIBBALSA_IS_ADDRESS_BOOK_CLASS(klass)          (G_TYPE_CHECK_CLASS_TYPE (klass, 
LIBBALSA_TYPE_ADDRESS_BOOK))
-#define LIBBALSA_ADDRESS_BOOK_GET_CLASS(obj) \
-    (G_TYPE_INSTANCE_GET_CLASS ((obj), LIBBALSA_TYPE_ADDRESS_BOOK, \
-                               LibBalsaAddressBookClass))
+#define LIBBALSA_TYPE_ADDRESS_BOOK (libbalsa_address_book_get_type())
+G_DECLARE_DERIVABLE_TYPE(LibBalsaAddressBook, libbalsa_address_book,
+                         LIBBALSA, ADDRESS_BOOK, GObject)
 
 typedef enum {
     LBABERR_OK = 0,
@@ -49,20 +44,6 @@ typedef LibBalsaABErr (*LibBalsaAddressBookLoadFunc)(LibBalsaAddressBook *ab,
                                                      LibBalsaAddress *address,
                                                      gpointer closure);
 
-struct _LibBalsaAddressBook {
-    GObject parent;
-
-    /* The gnome_config prefix where we save this address book */
-    gchar *config_prefix;
-    gchar *name;
-    gchar *ext_op_code;    /* extra description for last operation */
-    gboolean is_expensive; /* is lookup to the address book expensive? 
-                             e.g. LDAP address book */
-    gboolean expand_aliases;
-
-    gboolean dist_list_mode;
-};
-
 struct _LibBalsaAddressBookClass {
     GObjectClass parent;
 
@@ -93,8 +74,6 @@ struct _LibBalsaAddressBookClass {
     GList* (*alias_complete) (LibBalsaAddressBook * ab, const gchar *prefix);
 };
 
-GType libbalsa_address_book_get_type(void);
-
 LibBalsaAddressBook *libbalsa_address_book_new_from_config(const gchar *
                                                           prefix);
 
@@ -142,5 +121,26 @@ GList *libbalsa_address_book_alias_complete(LibBalsaAddressBook * ab,
 gboolean libbalsa_address_is_dist_list(const LibBalsaAddressBook *ab,
                                       const LibBalsaAddress *address);
 
+/*
+ * Getters
+ */
+gboolean      libbalsa_address_book_get_dist_list_mode(LibBalsaAddressBook * ab);
+gboolean      libbalsa_address_book_get_expand_aliases(LibBalsaAddressBook * ab);
+gboolean      libbalsa_address_book_get_is_expensive  (LibBalsaAddressBook * ab);
+const gchar * libbalsa_address_book_get_name          (LibBalsaAddressBook * ab);
+const gchar * libbalsa_address_book_get_config_prefix (LibBalsaAddressBook * ab);
+
+/*
+ * Setters
+ */
+void libbalsa_address_book_set_dist_list_mode(LibBalsaAddressBook * ab,
+                                              gboolean              dist_list_mode);
+void libbalsa_address_book_set_expand_aliases(LibBalsaAddressBook * ab,
+                                              gboolean              expand_aliases);
+void libbalsa_address_book_set_is_expensive  (LibBalsaAddressBook * ab,
+                                              gboolean              is_expensive);
+void libbalsa_address_book_set_name          (LibBalsaAddressBook * ab,
+                                              const gchar         * name);
+
 #endif
 
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index fb384f2..10d121d 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -308,7 +308,8 @@ lbav_get_matching_addresses(LibBalsaAddressView * address_view,
 
         ab = LIBBALSA_ADDRESS_BOOK(list->data);
         if (type == LIBBALSA_ADDRESS_VIEW_MATCH_FAST
-            && (!ab->expand_aliases || ab->is_expensive))
+            && (!libbalsa_address_book_get_expand_aliases(ab) ||
+                libbalsa_address_book_get_is_expensive(ab)))
             continue;
 
         match =
diff --git a/src/ab-main.c b/src/ab-main.c
index ea4441c..43d0372 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -176,8 +176,10 @@ bab_set_address_book(LibBalsaAddressBook * ab,
          libbalsa_address_book_load(ab, filter,
                                     (LibBalsaAddressBookLoadFunc)
                                     bab_load_cb, model)) != LBABERR_OK) {
-        printf("error loading address book from %s: %d\n", ab->name,
-               ab_err);
+        const gchar *name = libbalsa_address_book_get_name(ab);
+        const gchar *desc = libbalsa_address_book_strerror(ab, ab_err);
+
+        printf("error loading address book from %s: %s (%d)\n", name, desc, ab_err);
     }
 
     return TRUE;
@@ -187,6 +189,7 @@ static void
 bab_window_set_title(LibBalsaAddressBook * address_book)
 {
     const gchar *type = "";
+    const gchar *name;
     gchar *title;
 
     if (LIBBALSA_IS_ADDRESS_BOOK_VCARD(address_book))
@@ -208,8 +211,8 @@ bab_window_set_title(LibBalsaAddressBook * address_book)
         type = "Rubrica";
 #endif /* HAVE_RUBRICA */
 
-    title =
-        g_strconcat(type, _(" address book: "), address_book->name, NULL);
+    name = libbalsa_address_book_get_name(address_book);
+    title = g_strconcat(type, _(" address book: "), name, NULL);
     gtk_window_set_title(contacts_app.window, title);
     g_free(title);
 }
@@ -221,16 +224,18 @@ address_book_change_state(GSimpleAction * action,
 {
     const gchar *value;
     GList *l;
-    LibBalsaAddressBook *address_book;
+    LibBalsaAddressBook *address_book = NULL;
 
     value = g_variant_get_string(state, NULL);
-    for (l = contacts_app.address_book_list; l; l = l->next) {
+    for (l = contacts_app.address_book_list; l != NULL; l = l->next) {
         address_book = l->data;
-        if (address_book && strcmp(value, address_book->name) == 0)
+        if (address_book != NULL
+            && strcmp(value,
+                      libbalsa_address_book_get_name(address_book)) == 0)
             break;
     }
 
-    if (!l || !(address_book = l->data))
+    if (address_book == NULL)
         return;
 
     ab_clear_edit_widget();
@@ -269,15 +274,16 @@ set_address_book_menu_items(void)
     g_string_append(string, "<section>");
     for (l = contacts_app.address_book_list; l; l = l->next) {
         LibBalsaAddressBook *address_book = l->data;
+        const gchar *name;
 
         if (!address_book)
             continue;
+        name = libbalsa_address_book_get_name(address_book);
 
         g_string_append(string, "<item>");
 
         g_string_append(string, "<attribute name='label'>");
-        g_string_append_printf(string, "_%d:%s", ++pos,
-                               address_book->name);
+        g_string_append_printf(string, "_%d:%s", ++pos, name);
         g_string_append(string, "</attribute>");
 
         g_string_append(string, "<attribute name='action'>");
@@ -285,7 +291,7 @@ set_address_book_menu_items(void)
         g_string_append(string, "</attribute>");
 
         g_string_append(string, "<attribute name='target'>");
-        g_string_append(string, address_book->name);
+        g_string_append(string, name);
         g_string_append(string, "</attribute>");
 
         g_string_append(string, "<attribute name='accel'>");
@@ -338,6 +344,7 @@ get_unused_group(const gchar * prefix)
 static void
 address_book_change(LibBalsaAddressBook * address_book, gboolean append)
 {
+    const gchar *config_prefix;
     gchar *group;
 
     if (append)
@@ -347,8 +354,9 @@ address_book_change(LibBalsaAddressBook * address_book, gboolean append)
     set_address_book_menu_items();
     bab_window_set_title(address_book);
 
-    group = address_book->config_prefix ?
-        g_strdup(address_book->config_prefix) :
+    config_prefix = libbalsa_address_book_get_config_prefix(address_book);
+    group = config_prefix != NULL ?
+        g_strdup(config_prefix) :
         get_unused_group(ADDRESS_BOOK_SECTION_PREFIX);
     libbalsa_address_book_save_config(address_book, group);
     g_free(group);
@@ -442,15 +450,17 @@ file_delete_activated(GSimpleAction * action,
                       gpointer        user_data)
 {
     LibBalsaAddressBook *address_book;
+    const gchar *config_prefix;
     GList *list;
 
     if ((address_book = contacts_app.address_book) == NULL
         || contacts_app.address_book_list->next == NULL)
         return;
 
-    if (address_book->config_prefix) {
-        libbalsa_conf_remove_group(address_book->config_prefix);
-        libbalsa_conf_private_remove_group(address_book->config_prefix);
+    config_prefix = libbalsa_address_book_get_config_prefix(address_book);
+    if (config_prefix != NULL) {
+        libbalsa_conf_remove_group(config_prefix);
+        libbalsa_conf_private_remove_group(config_prefix);
         libbalsa_conf_queue_sync();
     }
 
@@ -1039,10 +1049,12 @@ bab_set_intial_address_book(LibBalsaAddressBook * ab,
                             GtkWidget           * window)
 {
     GAction *action;
+    const gchar *name;
 
     action =
         g_action_map_lookup_action(G_ACTION_MAP(window), "address-book");
-    g_action_change_state(action, g_variant_new_string(ab->name));
+    name = libbalsa_address_book_get_name(ab);
+    g_action_change_state(action, g_variant_new_string(name));
 }
 
 GtkDialogFlags
diff --git a/src/ab-window.c b/src/ab-window.c
index f2b81ea..a095c47 100644
--- a/src/ab-window.c
+++ b/src/ab-window.c
@@ -214,7 +214,7 @@ balsa_ab_window_load_books(BalsaAbWindow * ab)
         LibBalsaAddressBook *address_book = ab_list->data;
 
         gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ab->combo_box),
-                                  address_book->name);
+                                  libbalsa_address_book_get_name(address_book));
 
         if (ab->current_address_book == NULL)
             ab->current_address_book = address_book;
@@ -409,7 +409,7 @@ balsa_ab_window_init(BalsaAbWindow *ab)
     if(ab->current_address_book)
        gtk_toggle_button_set_active(
            GTK_TOGGLE_BUTTON(ab->dist_address_mode_radio),
-           ab->current_address_book->dist_list_mode);
+           libbalsa_address_book_get_dist_list_mode(ab->current_address_book));
 
     /* Pack them into a box  */
     box2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
@@ -709,7 +709,8 @@ balsa_ab_window_set_title(BalsaAbWindow *ab)
 #endif
 
     title =
-        g_strconcat(type, _(" address book: "), address_book->name, NULL);
+        g_strconcat(type, _(" address book: "),
+                    libbalsa_address_book_get_name(address_book), NULL);
     gtk_window_set_title(GTK_WINDOW(ab), title);
     g_free(title);
 }
@@ -733,12 +734,14 @@ balsa_ab_window_load(BalsaAbWindow *ab)
                                      (LibBalsaAddressBookLoadFunc)
                                      balsa_ab_window_load_cb, ab);
     if (err != LBABERR_OK && err != LBABERR_CANNOT_READ) {
+       const gchar *name =
+            libbalsa_address_book_get_name(ab->current_address_book);
        const gchar *desc =
            libbalsa_address_book_strerror(ab->current_address_book, err);
         balsa_information_parented(GTK_WINDOW(ab),
                                   LIBBALSA_INFORMATION_ERROR,
                                   _("Error opening address book ā€œ%sā€:\n%s"),
-                                  ab->current_address_book->name, desc);
+                                  name, desc);
     }
     balsa_ab_window_set_title(ab);
 }
@@ -866,7 +869,7 @@ balsa_ab_window_dist_mode_toggled(GtkWidget * w, BalsaAbWindow *ab)
     active = gtk_toggle_button_get_active
        (GTK_TOGGLE_BUTTON(ab->single_address_mode_radio));
 
-    ab->current_address_book->dist_list_mode = !active;
+    libbalsa_address_book_set_dist_list_mode(ab->current_address_book, !active);
 
     balsa_ab_window_load(ab);
 }
@@ -887,7 +890,7 @@ balsa_ab_window_menu_changed(GtkWidget * widget, BalsaAbWindow *ab)
 
     g_signal_handler_block(G_OBJECT(ab->single_address_mode_radio),
                           ab->toggle_handler_id);
-    if ( ab->current_address_book->dist_list_mode )
+    if (libbalsa_address_book_get_dist_list_mode(ab->current_address_book))
        gtk_toggle_button_set_active(
            GTK_TOGGLE_BUTTON(ab->dist_address_mode_radio), TRUE);
     else
diff --git a/src/address-book-config.c b/src/address-book-config.c
index 67aedb0..a132265 100644
--- a/src/address-book-config.c
+++ b/src/address-book-config.c
@@ -200,9 +200,9 @@ add_radio_buttons(GtkWidget * grid, gint row, AddressBookConfig * abc)
 
     button = abc->as_i_type;
     if (abc->address_book) {
-        if (!abc->address_book->expand_aliases)
+        if (!libbalsa_address_book_get_expand_aliases(abc->address_book))
             button = abc->never;
-        else if (abc->address_book->is_expensive)
+        else if (libbalsa_address_book_get_is_expensive(abc->address_book))
             button = abc->on_request;
     }
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
@@ -224,7 +224,7 @@ create_local_dialog(AddressBookConfig * abc, const gchar * type)
     if (ab) {
         title = g_strdup_printf(_("Modify %s Address Book"), type);
         action = _("_Apply");
-        name = ab->name;
+        name = libbalsa_address_book_get_name(ab);
     } else {
         title = g_strdup_printf(_("Add %s Address Book"), type);
         action = _("_Add");
@@ -422,8 +422,10 @@ create_externq_dialog(AddressBookConfig * abc)
     /* mailbox name */
 
     label = libbalsa_create_grid_label(_("A_ddress Book Name:"), grid, 0);
-    abc->name_entry = libbalsa_create_grid_entry(grid, NULL, NULL, 0, 
-                                  ab ? abc->address_book->name : NULL, 
+    abc->name_entry = libbalsa_create_grid_entry(grid, NULL, NULL, 0,
+                                  ab != NULL
+                                   ? libbalsa_address_book_get_name(abc->address_book)
+                                   : NULL,
                                   label);
 
     label = gtk_label_new(_("Load program location:"));
@@ -489,8 +491,10 @@ create_ldap_dialog(AddressBookConfig * abc)
     /* mailbox name */
 
     label = libbalsa_create_grid_label(_("A_ddress Book Name:"), grid, 0);
-    abc->name_entry = libbalsa_create_grid_entry(grid, NULL, NULL, 0, 
-                                  ab ? abc->address_book->name : name, 
+    abc->name_entry = libbalsa_create_grid_entry(grid, NULL, NULL, 0,
+                                  ab != NULL
+                                   ? libbalsa_address_book_get_name(abc->address_book)
+                                   : NULL,
                                   label);
 
     label = libbalsa_create_grid_label(_("_Host Name"), grid, 1);
@@ -747,11 +751,15 @@ create_book(AddressBookConfig * abc)
     } else
         g_assert_not_reached();
 
-    if (address_book) {
-        address_book->expand_aliases =
-            !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->never));
-        address_book->is_expensive =
-            gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->on_request));
+    if (address_book != NULL) {
+        gboolean active;
+
+        active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->never));
+        libbalsa_address_book_set_expand_aliases(address_book, !active);
+
+        active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->on_request));
+        libbalsa_address_book_set_is_expensive(address_book, active);
+
         abc->callback(address_book, TRUE);
     }
 
@@ -762,10 +770,10 @@ static void
 modify_book(AddressBookConfig * abc)
 {
     LibBalsaAddressBook *address_book = abc->address_book;
+    gboolean active;
 
-    g_free(address_book->name);
-    address_book->name =
-        g_strdup(gtk_entry_get_text(GTK_ENTRY(abc->name_entry)));
+    libbalsa_address_book_set_name(address_book,
+                                   gtk_entry_get_text(GTK_ENTRY(abc->name_entry)));
 
     if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_VCARD
         || abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDIF
@@ -838,10 +846,10 @@ modify_book(AddressBookConfig * abc)
     } else
         g_assert_not_reached();
 
-    address_book->expand_aliases =
-        !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->never));
-    address_book->is_expensive =
-        gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->on_request));
+    active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->never));
+    libbalsa_address_book_set_expand_aliases(address_book, !active);
+    active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(abc->on_request));
+    libbalsa_address_book_set_is_expensive(address_book, active);
 
     abc->callback(address_book, FALSE);
 }
diff --git a/src/pref-manager.c b/src/pref-manager.c
index 2b696fb..71aa2e6 100644
--- a/src/pref-manager.c
+++ b/src/pref-manager.c
@@ -893,6 +893,9 @@ update_address_books(void)
     gtk_list_store_clear(GTK_LIST_STORE(model));
 
     while (list) {
+        const gchar *address_book_name;
+        gboolean expand;
+
         address_book = LIBBALSA_ADDRESS_BOOK(list->data);
 
         g_assert(address_book != NULL);
@@ -922,17 +925,20 @@ update_address_books(void)
         else
             type = _("Unknown");
 
+        address_book_name = libbalsa_address_book_get_name(address_book);
         if (address_book == balsa_app.default_address_book) {
-            name = g_strdup_printf(_("%s (default)"), address_book->name);
+            name = g_strdup_printf(_("%s (default)"), address_book_name);
         } else {
-            name = g_strdup(address_book->name);
+            name = g_strdup(address_book_name);
         }
+
+        expand = libbalsa_address_book_get_expand_aliases(address_book)
+            && !libbalsa_address_book_get_is_expensive(address_book);
         gtk_list_store_append(GTK_LIST_STORE(model), &iter);
         gtk_list_store_set(GTK_LIST_STORE(model), &iter,
                            AB_TYPE_COLUMN, type,
                            AB_NAME_COLUMN, name,
-                           AB_XPND_COLUMN, (address_book->expand_aliases
-                                            && !address_book->is_expensive),
+                           AB_XPND_COLUMN, expand,
                            AB_DATA_COLUMN, address_book, -1);
 
         g_free(name);
diff --git a/src/save-restore.c b/src/save-restore.c
index 97e0a25..cd96ce0 100644
--- a/src/save-restore.c
+++ b/src/save-restore.c
@@ -75,11 +75,6 @@ static void config_filters_load(void);
     g_strdup(LIBBALSA_MAILBOX(mbox)->config_prefix) : \
     config_get_unused_group(MAILBOX_SECTION_PREFIX)
 
-#define address_book_section_path(ab) \
-    LIBBALSA_ADDRESS_BOOK(ab)->config_prefix ? \
-    g_strdup(LIBBALSA_ADDRESS_BOOK(ab)->config_prefix) : \
-    config_get_unused_group(ADDRESS_BOOK_SECTION_PREFIX)
-
 gint config_load(void)
 {
     return config_global_load();
@@ -238,9 +233,13 @@ config_mailbox_set_as_special(LibBalsaMailbox * mailbox, specialType which)
 void
 config_address_book_save(LibBalsaAddressBook * ab)
 {
+    const gchar *config_prefix;
     gchar *group;
 
-    group = address_book_section_path(ab);
+    config_prefix = libbalsa_address_book_get_config_prefix(ab);
+    group = config_prefix != NULL ?
+        g_strdup(config_prefix) :
+        config_get_unused_group(ADDRESS_BOOK_SECTION_PREFIX);
 
     libbalsa_address_book_save_config(ab, group);
 
@@ -252,9 +251,12 @@ config_address_book_save(LibBalsaAddressBook * ab)
 void
 config_address_book_delete(LibBalsaAddressBook * ab)
 {
-    if (ab->config_prefix) {
-       libbalsa_conf_remove_group(ab->config_prefix);
-       libbalsa_conf_private_remove_group(ab->config_prefix);
+    const gchar *config_prefix;
+
+    config_prefix = libbalsa_address_book_get_config_prefix(ab);
+    if (config_prefix != NULL) {
+       libbalsa_conf_remove_group(config_prefix);
+       libbalsa_conf_private_remove_group(config_prefix);
        libbalsa_conf_queue_sync();
     }
 }
@@ -1436,8 +1438,8 @@ config_save(void)
 
     if (balsa_app.default_address_book)
         libbalsa_conf_set_string("DefaultAddressBook",
-                                 balsa_app.default_address_book->
-                                 config_prefix);
+                                 libbalsa_address_book_get_config_prefix
+                                 (balsa_app.default_address_book));
     else
        libbalsa_conf_clean_key("DefaultAddressBook");
 
diff --git a/src/store-address.c b/src/store-address.c
index 6616cea..8e0bf1f 100644
--- a/src/store-address.c
+++ b/src/store-address.c
@@ -300,13 +300,14 @@ store_address_book_frame(StoreAddressInfo * info)
          ab_list != NULL;
          off++, ab_list = ab_list->next) {
         LibBalsaAddressBook *address_book;
+        const gchar *name;
 
         address_book = LIBBALSA_ADDRESS_BOOK(ab_list->data);
         if (info->current_address_book == NULL)
             info->current_address_book = address_book;
 
-        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box),
-                                       address_book->name);
+        name = libbalsa_address_book_get_name(address_book);
+        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), name);
         if (address_book == balsa_app.default_address_book)
             default_ab_offset = off;
     }
@@ -450,11 +451,13 @@ store_address_add_list(StoreAddressInfo    * info,
 
     for (i = 0; i < internet_address_list_length(list); i++) {
         InternetAddress *ia = internet_address_list_get_address(list, i);
+        gboolean dist_list_mode =
+            libbalsa_address_book_get_dist_list_mode(info->current_address_book);
 
         if (INTERNET_ADDRESS_IS_MAILBOX(ia)) {
             store_address_add_address(info, label, ia, NULL);
-        } else if (info->current_address_book->dist_list_mode) {
-            store_address_add_address(info, label, ia, ia);
+        } else if (dist_list_mode) {
+                store_address_add_address(info, label, ia, ia);
         } else {
             InternetAddressList *members =
                 INTERNET_ADDRESS_GROUP(ia)->members;


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