[balsa/gtk4: 214/314] Various: Build with gtk4




commit e1492a1937e841fc69993cd4e5156d398581b707
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Sat Oct 10 15:35:03 2020 -0400

    Various: Build with gtk4
    
    libbalsa/address.c
    libbalsa/identity.c
    libbalsa/libbalsa-gpgme-cb.c
    libbalsa/libbalsa-gpgme-widgets.c
    libbalsa/server-config.c
    libbalsa/server-config.h
    libbalsa/smtp-server.c
    libbalsa/source-viewer.c
    libbalsa/x509-cert-widget.c
    libinit_balsa/assistant_page_defclient.c
    libinit_balsa/assistant_page_directory.c
    src/address-book-config.c
    src/balsa-mime-widget-message.c
    src/filter-edit-callbacks.c
    src/filter-edit-dialog.c
    src/folder-conf.c
    src/mailbox-conf.c
    src/pref-manager.c
    src/sendmsg-window.c

 libbalsa/address.c                       |   5 +-
 libbalsa/identity.c                      |   7 +-
 libbalsa/libbalsa-gpgme-cb.c             |  13 +-
 libbalsa/libbalsa-gpgme-widgets.c        |   7 +-
 libbalsa/server-config.c                 |  68 ++++++---
 libbalsa/server-config.h                 |   7 +-
 libbalsa/smtp-server.c                   |  61 ++++----
 libbalsa/source-viewer.c                 |  32 ++---
 libbalsa/x509-cert-widget.c              |   8 +-
 libinit_balsa/assistant_page_defclient.c |  14 +-
 libinit_balsa/assistant_page_directory.c |  23 +--
 src/address-book-config.c                | 240 ++++++++++++++++++++-----------
 src/balsa-mime-widget-message.c          |   9 +-
 src/filter-edit-callbacks.c              |  24 +++-
 src/filter-edit-dialog.c                 |  19 ++-
 src/folder-conf.c                        |   7 +-
 src/mailbox-conf.c                       |   5 +-
 src/pref-manager.c                       |  15 +-
 src/sendmsg-window.c                     |  14 +-
 19 files changed, 391 insertions(+), 187 deletions(-)
---
diff --git a/libbalsa/address.c b/libbalsa/address.c
index b7da172c7..7029a56c3 100644
--- a/libbalsa/address.c
+++ b/libbalsa/address.c
@@ -973,7 +973,10 @@ libbalsa_address_get_edit_widget(LibBalsaAddress *address,
 #define HIG_PADDING 6
     gtk_grid_set_row_spacing(GTK_GRID(grid), HIG_PADDING);
     gtk_grid_set_column_spacing(GTK_GRID(grid), HIG_PADDING);
-    g_object_set(grid, "margin", HIG_PADDING, NULL);
+    gtk_widget_set_margin_top(grid, HIG_PADDING);
+    gtk_widget_set_margin_bottom(grid, HIG_PADDING);
+    gtk_widget_set_margin_start(grid, HIG_PADDING);
+    gtk_widget_set_margin_end(grid, HIG_PADDING);
 
     for (cnt = 0; cnt < NUM_FIELDS; cnt++) {
         if (!labels[cnt])
diff --git a/libbalsa/identity.c b/libbalsa/identity.c
index 7094abdcd..5767e53ff 100644
--- a/libbalsa/identity.c
+++ b/libbalsa/identity.c
@@ -811,7 +811,12 @@ append_ident_notebook_page(GtkNotebook *notebook,
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     grid = libbalsa_create_grid();
-    g_object_set(grid, "margin", padding, NULL);
+
+    gtk_widget_set_margin_top(grid, padding);
+    gtk_widget_set_margin_bottom(grid, padding);
+    gtk_widget_set_margin_start(grid, padding);
+    gtk_widget_set_margin_end(grid, padding);
+
     gtk_box_append(GTK_BOX(vbox), grid);
     gtk_notebook_append_page(notebook, vbox, gtk_label_new(tab_label));
 
diff --git a/libbalsa/libbalsa-gpgme-cb.c b/libbalsa/libbalsa-gpgme-cb.c
index 5fbb6d5b7..d214b764a 100644
--- a/libbalsa/libbalsa-gpgme-cb.c
+++ b/libbalsa/libbalsa-gpgme-cb.c
@@ -218,7 +218,11 @@ select_key_idle(gpointer user_data)
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
     gtk_widget_set_vexpand (vbox, TRUE);
     gtk_box_append(GTK_BOX(content_area), vbox);
-    g_object_set(vbox, "margin", 12, NULL);
+
+    gtk_widget_set_margin_top(vbox, 12);
+    gtk_widget_set_margin_bottom(vbox, 12);
+    gtk_widget_set_margin_start(vbox, 12);
+    gtk_widget_set_margin_end(vbox, 12);
 
     switch (data->mode) {
        case LB_SELECT_PRIVATE_KEY:
@@ -494,7 +498,12 @@ get_passphrase_idle(gpointer data)
 #endif
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
-    g_object_set(hbox, "margin", 12, NULL);
+
+    gtk_widget_set_margin_top(hbox, 12);
+    gtk_widget_set_margin_bottom(hbox, 12);
+    gtk_widget_set_margin_start(hbox, 12);
+    gtk_widget_set_margin_end(hbox, 12);
+
     gtk_box_append(GTK_BOX(content_area), hbox);
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
diff --git a/libbalsa/libbalsa-gpgme-widgets.c b/libbalsa/libbalsa-gpgme-widgets.c
index b04b43120..720ce6f3b 100644
--- a/libbalsa/libbalsa-gpgme-widgets.c
+++ b/libbalsa/libbalsa-gpgme-widgets.c
@@ -412,7 +412,12 @@ libbalsa_key_dialog(GtkWindow            *parent,
        content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
 
        hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
-       g_object_set(hbox, "margin", 6, NULL);
+
+    gtk_widget_set_margin_top(hbox, 6);
+    gtk_widget_set_margin_bottom(hbox, 6);
+    gtk_widget_set_margin_start(hbox, 6);
+    gtk_widget_set_margin_end(hbox, 6);
+
         gtk_widget_set_vexpand(hbox, TRUE);
         gtk_widget_set_valign(hbox, GTK_ALIGN_FILL);
        gtk_box_append(GTK_BOX(content_area), hbox);
diff --git a/libbalsa/server-config.c b/libbalsa/server-config.c
index 37360213d..22a84e9f9 100644
--- a/libbalsa/server-config.c
+++ b/libbalsa/server-config.c
@@ -28,7 +28,9 @@
 
 
 struct _LibBalsaServerCfg {
-        GtkNotebook parent;
+        GObject parent;
+
+        GtkWidget *notebook;
 
        /* "Basic" notebook page */
        GtkWidget *basic_grid;                  /* grid */
@@ -53,7 +55,7 @@ struct _LibBalsaServerCfg {
 };
 
 
-G_DEFINE_TYPE(LibBalsaServerCfg, libbalsa_server_cfg, GTK_TYPE_NOTEBOOK)
+G_DEFINE_TYPE(LibBalsaServerCfg, libbalsa_server_cfg, G_TYPE_OBJECT);
 
 
 static GtkWidget *server_cfg_add_entry(GtkWidget *grid, guint row, const gchar *label, const gchar *value, 
GCallback callback,
@@ -99,8 +101,12 @@ libbalsa_server_cfg_new(LibBalsaServer *server, const gchar *name)
     server_cfg->basic_grid = libbalsa_create_grid();
     server_cfg->basic_rows = 0U;
 
-    gtk_container_set_border_width(GTK_CONTAINER(server_cfg->basic_grid), HIG_PADDING);
-    gtk_notebook_append_page(GTK_NOTEBOOK(server_cfg), server_cfg->basic_grid, 
gtk_label_new_with_mnemonic(_("_Basic")));
+    gtk_widget_set_margin_top(server_cfg->basic_grid, HIG_PADDING);
+    gtk_widget_set_margin_bottom(server_cfg->basic_grid, HIG_PADDING);
+    gtk_widget_set_margin_start(server_cfg->basic_grid, HIG_PADDING);
+    gtk_widget_set_margin_end(server_cfg->basic_grid, HIG_PADDING);
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(server_cfg->notebook), server_cfg->basic_grid, 
gtk_label_new_with_mnemonic(_("_Basic")));
 
     /* server descriptive name */
     server_cfg->name = server_cfg_add_entry(server_cfg->basic_grid, server_cfg->basic_rows++, 
_("_Descriptive Name:"), name,
@@ -142,8 +148,13 @@ libbalsa_server_cfg_new(LibBalsaServer *server, const gchar *name)
     /* notebook page with advanced options */
     server_cfg->advanced_grid = libbalsa_create_grid();
     server_cfg->advanced_rows = 0U;
-    gtk_container_set_border_width(GTK_CONTAINER(server_cfg->advanced_grid), HIG_PADDING);
-    gtk_notebook_append_page(GTK_NOTEBOOK(server_cfg), server_cfg->advanced_grid, 
gtk_label_new_with_mnemonic(_("_Advanced")));
+
+    gtk_widget_set_margin_top(server_cfg->advanced_grid, HIG_PADDING);
+    gtk_widget_set_margin_bottom(server_cfg->advanced_grid, HIG_PADDING);
+    gtk_widget_set_margin_start(server_cfg->advanced_grid, HIG_PADDING);
+    gtk_widget_set_margin_end(server_cfg->advanced_grid, HIG_PADDING);
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(server_cfg->notebook), server_cfg->advanced_grid, 
gtk_label_new_with_mnemonic(_("_Advanced")));
 
     /* client certificate and passphrase */
     server_cfg->require_cert = server_cfg_add_check(server_cfg->advanced_grid, server_cfg->advanced_rows++, 
_("Server _requires client certificate"),
@@ -154,7 +165,9 @@ libbalsa_server_cfg_new(LibBalsaServer *server, const gchar *name)
 
     cert_file = libbalsa_server_get_cert_file(server);
     if (cert_file != NULL) {
-        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(server_cfg->cert_file), cert_file);
+        GFile *file = g_file_new_for_path(cert_file);
+        gtk_file_chooser_set_file(GTK_FILE_CHOOSER(server_cfg->cert_file), file, NULL);
+        g_object_unref(file);
     }
     g_signal_connect(server_cfg->cert_file, "file-set", G_CALLBACK(on_server_cfg_changed), server_cfg);
 
@@ -259,7 +272,7 @@ const gchar *
 libbalsa_server_cfg_get_name(LibBalsaServerCfg *server_cfg)
 {
        g_return_val_if_fail(LIBBALSA_IS_SERVER_CFG(server_cfg), FALSE);
-       return gtk_entry_get_text(GTK_ENTRY(server_cfg->name));
+       return gtk_editable_get_text(GTK_EDITABLE(server_cfg->name));
 }
 
 
@@ -267,6 +280,7 @@ libbalsa_server_cfg_get_name(LibBalsaServerCfg *server_cfg)
 void
 libbalsa_server_cfg_assign_server(LibBalsaServerCfg *server_cfg, LibBalsaServer *server)
 {
+    GFile *file;
         gchar *cert_file;
 
        g_return_if_fail(LIBBALSA_IS_SERVER_CFG(server_cfg) && LIBBALSA_IS_SERVER(server));
@@ -274,7 +288,7 @@ libbalsa_server_cfg_assign_server(LibBalsaServerCfg *server_cfg, LibBalsaServer
 
        /* host, post and security */
     libbalsa_server_set_security(server, (NetClientCryptMode) 
(gtk_combo_box_get_active(GTK_COMBO_BOX(server_cfg->security)) + 1));
-    libbalsa_server_set_host(server, gtk_entry_get_text(GTK_ENTRY(server_cfg->host_port)), 
libbalsa_server_get_security(server));
+    libbalsa_server_set_host(server, gtk_editable_get_text(GTK_EDITABLE(server_cfg->host_port)), 
libbalsa_server_get_security(server));
 
     /* authentication stuff */
     if (server_cfg->require_auth != NULL) {
@@ -282,18 +296,21 @@ libbalsa_server_cfg_assign_server(LibBalsaServerCfg *server_cfg, LibBalsaServer
     } else {
         libbalsa_server_set_try_anonymous(server, FALSE);
     }
-    libbalsa_server_set_username(server, gtk_entry_get_text(GTK_ENTRY(server_cfg->username)));
-    libbalsa_server_set_password(server, gtk_entry_get_text(GTK_ENTRY(server_cfg->password)), FALSE);
+    libbalsa_server_set_username(server, gtk_editable_get_text(GTK_EDITABLE(server_cfg->username)));
+    libbalsa_server_set_password(server, gtk_editable_get_text(GTK_EDITABLE(server_cfg->password)), FALSE);
     libbalsa_server_set_remember_password(server, 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_cfg->remember_pass)));
 
     /* client certificate */
     libbalsa_server_set_client_cert(server, 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_cfg->require_cert)));
 
-    cert_file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(server_cfg->cert_file));
+    file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(server_cfg->cert_file));
+    cert_file = g_file_get_path(file);
+    g_object_unref(file);
+
     libbalsa_server_set_cert_file(server, cert_file);
     g_free(cert_file);
 
-    libbalsa_server_set_password(server, gtk_entry_get_text(GTK_ENTRY(server_cfg->cert_pass)), TRUE);
+    libbalsa_server_set_password(server, gtk_editable_get_text(GTK_EDITABLE(server_cfg->cert_pass)), TRUE);
     libbalsa_server_set_remember_cert_passphrase(server, 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(server_cfg->remember_cert_pass)));
 }
 
@@ -309,7 +326,7 @@ libbalsa_server_cfg_class_init(LibBalsaServerCfgClass *klass)
 static void
 libbalsa_server_cfg_init(LibBalsaServerCfg *self)
 {
-    /* Nothing to do */
+    self->notebook = gtk_notebook_new();
 }
 
 
@@ -321,7 +338,7 @@ server_cfg_add_entry(GtkWidget *grid, guint row, const gchar *label, const gchar
        new_entry = gtk_entry_new();
     server_cfg_add_widget(grid, row, label, new_entry);
     if (value != NULL) {
-        gtk_entry_set_text(GTK_ENTRY(new_entry), value);
+        gtk_editable_set_text(GTK_EDITABLE(new_entry), value);
     }
     if (callback != NULL) {
         g_signal_connect(new_entry, "changed", callback, cb_data);
@@ -387,8 +404,8 @@ on_server_cfg_changed(GtkWidget *widget, LibBalsaServerCfg *server_cfg)
        gboolean sensitive;
 
        /* valid configuration only if a name and a host have been given */
-       server_cfg->cfg_valid = (*gtk_entry_get_text(GTK_ENTRY(server_cfg->name)) != '\0') &&
-               (*gtk_entry_get_text(GTK_ENTRY(server_cfg->host_port)) != '\0');
+       server_cfg->cfg_valid = (*gtk_editable_get_text(GTK_EDITABLE(server_cfg->name)) != '\0') &&
+               (*gtk_editable_get_text(GTK_EDITABLE(server_cfg->host_port)) != '\0');
 
        /* user name/password only if authentication is required */
        if (server_cfg->require_auth != NULL) {
@@ -401,7 +418,7 @@ on_server_cfg_changed(GtkWidget *widget, LibBalsaServerCfg *server_cfg)
        gtk_widget_set_sensitive(server_cfg->remember_pass, sensitive);
 
        /* invalid configuration if authentication is required, but no user name given */
-       if (sensitive && (*gtk_entry_get_text(GTK_ENTRY(server_cfg->username)) == '\0')) {
+       if (sensitive && (*gtk_editable_get_text(GTK_EDITABLE(server_cfg->username)) == '\0')) {
                server_cfg->cfg_valid = FALSE;
        }
 
@@ -418,7 +435,12 @@ on_server_cfg_changed(GtkWidget *widget, LibBalsaServerCfg *server_cfg)
 
        /* invalid configuration if a certificate is required, but no file name given */
        if (sensitive) {
-               gchar *cert_file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(server_cfg->cert_file));
+            GFile *file;
+               gchar *cert_file;
+
+                file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(server_cfg->cert_file));
+                cert_file = g_file_get_path(file);
+                g_object_unref(file);
 
                if ((cert_file == NULL) || (cert_file[0] == '\0')) {
                        server_cfg->cfg_valid = FALSE;
@@ -428,3 +450,11 @@ on_server_cfg_changed(GtkWidget *widget, LibBalsaServerCfg *server_cfg)
 
        g_signal_emit(server_cfg, changed_sig, 0);
 }
+
+GtkWidget *
+libbalsa_server_cfg_get_notebook(LibBalsaServerCfg *server_cfg)
+{
+    g_return_val_if_fail(LIBBALSA_IS_SERVER_CFG(server_cfg), NULL);
+
+    return server_cfg->notebook;
+}
diff --git a/libbalsa/server-config.h b/libbalsa/server-config.h
index 3983001ed..73d5fc4fd 100644
--- a/libbalsa/server-config.h
+++ b/libbalsa/server-config.h
@@ -37,7 +37,7 @@ G_DECLARE_FINAL_TYPE(LibBalsaServerCfg,
                      libbalsa_server_cfg,
                      LIBBALSA,
                      SERVER_CFG,
-                     GtkNotebook)
+                     GObject)
 
 
 /** @brief Create a new server configuration widget
@@ -124,5 +124,10 @@ const gchar *libbalsa_server_cfg_get_name(LibBalsaServerCfg *server_cfg);
 void libbalsa_server_cfg_assign_server(LibBalsaServerCfg *server_cfg,
                                                                           LibBalsaServer    *server);
 
+/** @brief Get the server configuration's GtkNotebook
+ * @param server_cfg server configuration widget
+ */
+GtkWidget * libbalsa_server_cfg_get_notebook(LibBalsaServerCfg *server_cfg);
+
 
 #endif /* LIBBALSA_SERVER_CONFIG_H_ */
diff --git a/libbalsa/smtp-server.c b/libbalsa/smtp-server.c
index d1f3c1461..5d9dfa80b 100644
--- a/libbalsa/smtp-server.c
+++ b/libbalsa/smtp-server.c
@@ -205,7 +205,7 @@ struct smtp_server_dialog_info {
     gchar *old_name;
     LibBalsaSmtpServerUpdate update;
     GtkWidget *dialog;
-    LibBalsaServerCfg *notebook;
+    LibBalsaServerCfg *server_cfg;
     GtkWidget *split_button;
     GtkWidget *big_message;
 };
@@ -215,8 +215,8 @@ static void
 smtp_server_destroy_notify(struct smtp_server_dialog_info *sdi)
 {
     g_free(sdi->old_name);
-    if (sdi->dialog)
-        gtk_widget_destroy(sdi->dialog);
+    if (sdi->dialog != NULL)
+        gtk_window_destroy(GTK_WINDOW(sdi->dialog));
     g_free(sdi);
 }
 
@@ -229,28 +229,36 @@ smtp_server_weak_notify(struct smtp_server_dialog_info *sdi, GObject *dialog)
                       LIBBALSA_SMTP_SERVER_DIALOG_KEY, NULL);
 }
 
+static void
+smtp_server_help_finish(GObject      *source_object,
+                        GAsyncResult *result,
+                        gpointer      user_data)
+{
+    GtkWindow *parent = user_data;
+    GError *error = NULL;
+
+    if (!gtk_show_uri_full_finish(parent, result, &error)) {
+        libbalsa_information(LIBBALSA_INFORMATION_WARNING,
+                             _("Error displaying server help: %s\n"), error->message);
+        g_error_free(error);
+    }
+}
+
 static void
 smtp_server_response(GtkDialog * dialog, gint response,
                      struct smtp_server_dialog_info *sdi)
 {
     LibBalsaServer *server = LIBBALSA_SERVER(sdi->smtp_server);
-    GError *error = NULL;
 
     switch (response) {
     case GTK_RESPONSE_HELP:
-        gtk_show_uri_on_window(GTK_WINDOW(dialog),
-                               "help:balsa/preferences-mail-options#smtp-server-config",
-                               gtk_get_current_event_time(), &error);
-        if (error) {
-            libbalsa_information(LIBBALSA_INFORMATION_WARNING,
-                                 _("Error displaying server help: %s\n"),
-                                 error->message);
-            g_error_free(error);
-        }
+        gtk_show_uri_full(GTK_WINDOW(dialog),
+                          "help:balsa/preferences-mail-options#smtp-server-config",
+                          GDK_CURRENT_TIME, NULL, smtp_server_help_finish, dialog);
         return;
     case GTK_RESPONSE_OK:
-        libbalsa_smtp_server_set_name(sdi->smtp_server, libbalsa_server_cfg_get_name(sdi->notebook));
-        libbalsa_server_cfg_assign_server(sdi->notebook, server);
+        libbalsa_smtp_server_set_name(sdi->smtp_server, libbalsa_server_cfg_get_name(sdi->server_cfg));
+        libbalsa_server_cfg_assign_server(sdi->server_cfg, server);
         if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sdi->split_button))) {
             /* big_message is stored in kB, but the widget is in MB. */
                sdi->smtp_server->big_message =
@@ -270,7 +278,7 @@ smtp_server_response(GtkDialog * dialog, gint response,
     sdi->update(sdi->smtp_server, response, sdi->old_name);
     g_object_unref(server);
 
-    gtk_widget_destroy(GTK_WIDGET(dialog));
+    gtk_window_destroy(GTK_WINDOW(dialog));
 }
 
 static void
@@ -278,7 +286,7 @@ smtp_server_changed(GtkWidget G_GNUC_UNUSED *widget,
                     struct smtp_server_dialog_info *sdi)
 {
        gboolean sensitive;
-       gboolean enable_ok = libbalsa_server_cfg_valid(sdi->notebook);
+       gboolean enable_ok = libbalsa_server_cfg_valid(sdi->server_cfg);
 
        /* split big messages */
        if ((sdi->big_message != NULL) && (sdi->split_button != NULL)) {
@@ -301,13 +309,13 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     GtkWidget *dialog;
     GtkWidget *content_area;
     GtkWidget *label, *hbox;
+    GtkWidget *notebook;
 
     /* Show only one dialog at a time. */
     sdi = g_object_get_data(G_OBJECT(smtp_server),
                             LIBBALSA_SMTP_SERVER_DIALOG_KEY);
     if (sdi != NULL) {
-        gtk_window_present_with_time(GTK_WINDOW(sdi->dialog),
-                                     gtk_get_current_event_time());
+        gtk_window_present_with_time(GTK_WINDOW(sdi->dialog), GDK_CURRENT_TIME);
         return;
     }
 
@@ -341,8 +349,9 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
                                       FALSE);
 
-    sdi->notebook = libbalsa_server_cfg_new(server, smtp_server->name);
-    gtk_container_add(GTK_CONTAINER(content_area), GTK_WIDGET(sdi->notebook));
+    sdi->server_cfg = libbalsa_server_cfg_new(server, smtp_server->name);
+    notebook = libbalsa_server_cfg_get_notebook(sdi->server_cfg);
+    gtk_box_append(GTK_BOX(content_area), notebook);
 
 #define HIG_PADDING 12
 
@@ -352,9 +361,9 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     sdi->big_message = gtk_spin_button_new_with_range(0.1, 100, 0.1);
     gtk_widget_set_hexpand(sdi->big_message, TRUE);
     gtk_widget_set_halign(sdi->big_message, GTK_ALIGN_FILL);
-    gtk_container_add(GTK_CONTAINER(hbox), sdi->big_message);
+    gtk_box_append(GTK_BOX(hbox), sdi->big_message);
     label = gtk_label_new(_("MB"));
-    gtk_container_add(GTK_CONTAINER(hbox), label);
+    gtk_box_append(GTK_BOX(hbox), label);
     if (smtp_server->big_message > 0) {
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sdi->split_button), TRUE);
         /* The widget is in MB, but big_message is stored in kB. */
@@ -364,12 +373,12 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sdi->split_button), FALSE);
         gtk_spin_button_set_value(GTK_SPIN_BUTTON(sdi->big_message), 1);
     }
-    libbalsa_server_cfg_add_row(sdi->notebook, FALSE, sdi->split_button, hbox);
-    g_signal_connect(sdi->notebook, "changed", G_CALLBACK(smtp_server_changed), sdi);
+    libbalsa_server_cfg_add_row(sdi->server_cfg, FALSE, sdi->split_button, hbox);
+    g_signal_connect(sdi->server_cfg, "changed", G_CALLBACK(smtp_server_changed), sdi);
     g_signal_connect(sdi->split_button, "toggled", G_CALLBACK(smtp_server_changed), sdi);
     g_signal_connect(sdi->big_message, "changed", G_CALLBACK(smtp_server_changed), sdi);
 
     smtp_server_changed(NULL, sdi);
 
-    gtk_widget_show_all(dialog);
+    gtk_widget_show(dialog);
 }
diff --git a/libbalsa/source-viewer.c b/libbalsa/source-viewer.c
index 834317adf..3ec306821 100644
--- a/libbalsa/source-viewer.c
+++ b/libbalsa/source-viewer.c
@@ -55,16 +55,12 @@ lsv_copy_activated(GSimpleAction * action,
                    GVariant      * parameter,
                    gpointer        user_data)
 {
-    LibBalsaSourceViewerInfo *lsvi =
-        g_object_get_data(G_OBJECT(user_data), "lsvi");
+    LibBalsaSourceViewerInfo *lsvi = g_object_get_data(G_OBJECT(user_data), "lsvi");
     GtkTextView *text = GTK_TEXT_VIEW(lsvi->text);
     GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
-    GdkDisplay *display;
-    GtkClipboard *clipboard;
-
-    display = gtk_widget_get_display(GTK_WIDGET(text));
-    clipboard = gtk_clipboard_get_for_display(display, GDK_NONE);
+    GdkClipboard *clipboard;
 
+    clipboard = gtk_widget_get_clipboard(GTK_WIDGET(text));
     gtk_text_buffer_copy_clipboard(buffer, clipboard);
 }
 
@@ -198,7 +194,7 @@ libbalsa_show_message_source(GtkApplication  * application,
     css = libbalsa_font_string_to_css(font, BALSA_SOURCE_VIEWER);
 
     css_provider = gtk_css_provider_new();
-    gtk_css_provider_load_from_data(css_provider, css, -1, NULL);
+    gtk_css_provider_load_from_data(css_provider, css, -1);
     g_free(css);
 
     gtk_style_context_add_provider(gtk_widget_get_style_context(text) ,
@@ -209,15 +205,14 @@ libbalsa_show_message_source(GtkApplication  * application,
     gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE);
     gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD_CHAR);
 
-    interior = gtk_scrolled_window_new(NULL, NULL);
+    interior = gtk_scrolled_window_new();
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(interior),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_ALWAYS);
-    gtk_container_add(GTK_CONTAINER(interior), GTK_WIDGET(text));
+    gtk_box_append(GTK_BOX(interior), GTK_WIDGET(text));
 
     window = gtk_application_window_new(application);
     gtk_window_set_title(GTK_WINDOW(window), _("Message Source"));
-    gtk_window_set_role(GTK_WINDOW(window), "message-source");
     geometry_manager_attach(GTK_WINDOW(window), "SourceView");
 
     menu_bar = libbalsa_window_get_menu_bar(GTK_APPLICATION_WINDOW(window),
@@ -238,14 +233,19 @@ libbalsa_show_message_source(GtkApplication  * application,
 #else
     gtk_widget_set_margin_top(menu_bar, 1);
     gtk_widget_set_margin_bottom(menu_bar, 1);
-    gtk_container_add(GTK_CONTAINER(vbox), menu_bar);
+    gtk_box_append(GTK_BOX(vbox), menu_bar);
 #endif
 
     gtk_widget_set_vexpand(interior, TRUE);
     gtk_widget_set_valign(interior, GTK_ALIGN_FILL);
-    g_object_set(interior, "margin", 2, NULL);
-    gtk_container_add(GTK_CONTAINER(vbox), interior);
-    gtk_container_add(GTK_CONTAINER(window), vbox);
+
+    gtk_widget_set_margin_top(interior, 2);
+    gtk_widget_set_margin_bottom(interior, 2);
+    gtk_widget_set_margin_start(interior, 2);
+    gtk_widget_set_margin_end(interior, 2);
+
+    gtk_box_append(GTK_BOX(vbox), interior);
+    gtk_box_append(GTK_BOX(window), vbox);
 
     lsvi = g_new(LibBalsaSourceViewerInfo, 1);
     lsvi->msg = g_object_ref(msg);
@@ -255,7 +255,7 @@ libbalsa_show_message_source(GtkApplication  * application,
     g_object_set_data_full(G_OBJECT(window), "lsvi", lsvi,
                            (GDestroyNotify) lsv_window_destroy_notify);
 
-    gtk_widget_show_all(window);
+    gtk_widget_show(window);
 
     escape_action = g_action_map_lookup_action(G_ACTION_MAP(window), "escape");
     lsv_escape_change_state(G_SIMPLE_ACTION(escape_action),
diff --git a/libbalsa/x509-cert-widget.c b/libbalsa/x509-cert-widget.c
index c4653586e..a65d593e4 100644
--- a/libbalsa/x509-cert-widget.c
+++ b/libbalsa/x509-cert-widget.c
@@ -162,16 +162,16 @@ create_chain_widget(GList *cert_list)
        gboolean is_root;
 
        vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-       scrolledwin = gtk_scrolled_window_new(NULL, NULL);
+       scrolledwin = gtk_scrolled_window_new();
         gtk_widget_set_vexpand(scrolledwin, TRUE);
         gtk_widget_set_valign(scrolledwin, GTK_ALIGN_FILL);
         gtk_widget_set_margin_top(scrolledwin, 6U);
         gtk_widget_set_margin_bottom(scrolledwin, 6U);
-        gtk_container_add(GTK_CONTAINER(vbox), scrolledwin);
+        gtk_box_append(GTK_BOX(vbox), scrolledwin);
 
        store = gtk_tree_store_new(CERT_COLUMNS, G_TYPE_STRING, GTK_TYPE_WIDGET);
        tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-       gtk_container_add(GTK_CONTAINER(scrolledwin), tree_view);
+       gtk_box_append(GTK_BOX(scrolledwin), tree_view);
        renderer = gtk_cell_renderer_text_new();
        column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", CERT_NAME_COLUMN, NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
@@ -185,7 +185,7 @@ create_chain_widget(GList *cert_list)
         gtk_widget_set_valign(stack, GTK_ALIGN_FILL);
         gtk_widget_set_margin_top(stack, 6U);
         gtk_widget_set_margin_bottom(stack, 6U);
-       gtk_container_add(GTK_CONTAINER(vbox), stack);
+       gtk_box_append(GTK_BOX(vbox), stack);
        g_signal_connect(tree_view, "row-activated", G_CALLBACK(cert_selected_cb), stack);
 
        is_root = TRUE;
diff --git a/libinit_balsa/assistant_page_defclient.c b/libinit_balsa/assistant_page_defclient.c
index 0ee710d71..0de20ab38 100644
--- a/libinit_balsa/assistant_page_defclient.c
+++ b/libinit_balsa/assistant_page_defclient.c
@@ -54,11 +54,11 @@ balsa_druid_page_defclient_init(BalsaDruidPageDefclient * defclient,
         GTK_LABEL(gtk_label_new
                   (_("Use Balsa as default email client?")));
     gtk_label_set_justify(label, GTK_JUSTIFY_CENTER);
-    gtk_label_set_line_wrap(label, TRUE);
+    gtk_label_set_wrap(label, TRUE);
 
-    yes = gtk_radio_button_new_with_mnemonic(NULL, _("_Yes"));
-    no = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(yes),
-                                                         _("_No"));
+    yes = gtk_toggle_button_new_with_mnemonic(_("_Yes"));
+    no  = gtk_toggle_button_new_with_mnemonic(_("_No"));
+    gtk_toggle_button_set_group(GTK_TOGGLE_BUTTON(no), GTK_TOGGLE_BUTTON(yes));
 
     g_signal_connect(yes, "toggled",
                        G_CALLBACK(balsa_druid_page_defclient_toggle),
@@ -69,21 +69,21 @@ balsa_druid_page_defclient_init(BalsaDruidPageDefclient * defclient,
     gtk_widget_set_valign(widget, GTK_ALIGN_FILL);
     gtk_widget_set_margin_top(widget, 8);
     gtk_widget_set_margin_bottom(widget, 8);
-    gtk_container_add(GTK_CONTAINER(page), widget);
+    gtk_box_append(GTK_BOX(page), widget);
 
     widget = GTK_WIDGET(yes);
     gtk_widget_set_vexpand(widget, TRUE);
     gtk_widget_set_valign(widget, GTK_ALIGN_FILL);
     gtk_widget_set_margin_top(widget, 2);
     gtk_widget_set_margin_bottom(widget, 2);
-    gtk_container_add(GTK_CONTAINER(page), widget);
+    gtk_box_append(GTK_BOX(page), widget);
 
     widget = GTK_WIDGET(no);
     gtk_widget_set_vexpand(widget, TRUE);
     gtk_widget_set_valign(widget, GTK_ALIGN_FILL);
     gtk_widget_set_margin_top(widget, 2);
     gtk_widget_set_margin_bottom(widget, 2);
-    gtk_container_add(GTK_CONTAINER(page), widget);
+    gtk_box_append(GTK_BOX(page), widget);
 
     return;
 }
diff --git a/libinit_balsa/assistant_page_directory.c b/libinit_balsa/assistant_page_directory.c
index c7e148dda..aa5e00f60 100644
--- a/libinit_balsa/assistant_page_directory.c
+++ b/libinit_balsa/assistant_page_directory.c
@@ -180,7 +180,7 @@ verify_mailbox_entry(GtkWidget * entry, const gchar * name,
     if (!*verify)
         return;
 
-    text = gtk_entry_get_text(GTK_ENTRY(entry));
+    text = gtk_editable_get_text(GTK_EDITABLE(entry));
     error = NULL;
     unconditional_mailbox(text, name, mailbox, &error);
 
@@ -195,8 +195,10 @@ verify_mailbox_entry(GtkWidget * entry, const gchar * name,
                                    _("Problem verifying path ā€œ%sā€:\n%s"),
                                    text, error);
         g_free(error);
-        gtk_dialog_run(GTK_DIALOG(dlg));
-        gtk_widget_destroy(dlg);
+
+        g_signal_connect(dlg, "response", G_CALLBACK(gtk_window_destroy), NULL);
+        gtk_widget_show(dlg);
+
         *verify = FALSE;
     }
 }
@@ -264,7 +266,7 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
                                    "These will be created if necessary."));
     label = GTK_LABEL(label_widget);
     gtk_label_set_justify(label, GTK_JUSTIFY_RIGHT);
-    gtk_label_set_line_wrap(label, TRUE);
+    gtk_label_set_wrap(label, TRUE);
     gtk_widget_set_hexpand(label_widget, TRUE);
     gtk_widget_set_vexpand(label_widget, TRUE);
 
@@ -303,10 +305,9 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
 
     gtk_widget_set_vexpand(GTK_WIDGET(grid), TRUE);
     gtk_widget_set_valign(GTK_WIDGET(grid), GTK_ALIGN_FILL);
-    gtk_container_add(GTK_CONTAINER(page), GTK_WIDGET(grid));
-    gtk_widget_show_all(GTK_WIDGET(grid));
+    gtk_box_append(GTK_BOX(page), GTK_WIDGET(grid));
 
-    gtk_container_add(GTK_CONTAINER(page), verify_button(dir));
+    gtk_box_append(GTK_BOX(page), verify_button(dir));
 
     g_signal_connect(druid, "prepare",
                      G_CALLBACK(balsa_druid_page_directory_prepare),
@@ -360,22 +361,22 @@ balsa_druid_page_directory_prepare(GtkAssistant * druid,
     if (!dir->paths_locked) {
         buf = g_build_filename(balsa_app.local_mail_directory, "outbox",
                                NULL);
-        gtk_entry_set_text(GTK_ENTRY(dir->outbox), buf);
+        gtk_editable_set_text(GTK_EDITABLE(dir->outbox), buf);
         g_free(buf);
 
         buf = g_build_filename(balsa_app.local_mail_directory, "sentbox",
                                NULL);
-        gtk_entry_set_text(GTK_ENTRY(dir->sentbox), buf);
+        gtk_editable_set_text(GTK_EDITABLE(dir->sentbox), buf);
         g_free(buf);
 
         buf = g_build_filename(balsa_app.local_mail_directory, "draftbox",
                                NULL);
-        gtk_entry_set_text(GTK_ENTRY(dir->draftbox), buf);
+        gtk_editable_set_text(GTK_EDITABLE(dir->draftbox), buf);
         g_free(buf);
 
         buf = g_build_filename(balsa_app.local_mail_directory, "trash",
                                NULL);
-        gtk_entry_set_text(GTK_ENTRY(dir->trash), buf);
+        gtk_editable_set_text(GTK_EDITABLE(dir->trash), buf);
         g_free(buf);
     }
 
diff --git a/src/address-book-config.c b/src/address-book-config.c
index 685fee9f0..459525037 100644
--- a/src/address-book-config.c
+++ b/src/address-book-config.c
@@ -63,6 +63,9 @@ struct _AddressBookConfig {
     LibBalsaAddressBook *address_book;
     BalsaAddressBookCallback *callback;
     GtkWindow* parent;
+
+    GtkWidget *dialog;
+    int response_id;
 };
 
 static GtkWidget *create_dialog_from_type(AddressBookConfig * abc);
@@ -143,30 +146,48 @@ balsa_address_book_config_new_from_type(GType type,
     abc->window = create_dialog_from_type(abc);
     g_object_weak_ref(G_OBJECT(abc->window), (GWeakNotify) g_free, abc);
 
-    gtk_widget_show_all(GTK_WIDGET(abc->window));
+    gtk_widget_show(GTK_WIDGET(abc->window));
 }
 
-static void
-edit_book_response(GtkWidget * dialog, gint response,
-                   AddressBookConfig * abc)
+static void *
+edit_book_thread(gpointer user_data)
 {
-    switch (response) {
-    case GTK_RESPONSE_HELP:
-        help_button_cb(abc);
-        return;
+    AddressBookConfig *abc = user_data;
+
+    switch (abc->response) {
     case GTK_RESPONSE_APPLY:
         if (handle_close(abc))
             break;
         else
-            return;
+            return NULL;
     default:
         break;
     }
 
-    if (abc->address_book)
+    if (abc->address_book != NULL)
         g_object_set_data(G_OBJECT(abc->address_book), "balsa-abc", NULL);
 
-    gtk_widget_destroy(dialog);
+    gidle_add((GSourceFunc) gtk_window_destroy, abc->dialog);
+
+    return NULL;
+}
+
+static void
+edit_book_response(GtkWidget * dialog, gint response,
+                   AddressBookConfig * abc)
+{
+    GThread *thread;
+
+    if (response == GTK_RESPONSE_HELP) {
+        help_button_cb(abc);
+        return;
+    }
+
+    abc->dialog = dialog;
+    abc->response = response;
+
+    thread = g_thread_new("edit-book-thread", edit_book_thread, abc);
+    g_thread_unref(thread);
 }
 
 /* Radio buttons */
@@ -259,10 +280,14 @@ create_local_dialog(AddressBookConfig * abc, const gchar * type)
     if (ab) {
         LibBalsaAddressBookText *abt = (LibBalsaAddressBookText *) ab;
         const gchar *path = libbalsa_address_book_text_get_path(abt);
+        GFile *file;
         gchar *folder;
         gchar *utf8name;
 
-        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), path);
+        file = g_file_new_for_path(path);
+        gtk_file_chooser_set_file(GTK_FILE_CHOOSER(dialog), file, NULL);
+        g_object_unref(file);
+
         /* Name entry will be blank unless we set it. */
         folder = g_path_get_basename(path);
         utf8name = g_filename_to_utf8(folder, -1, NULL, NULL, NULL);
@@ -399,7 +424,7 @@ create_osmo_dialog(AddressBookConfig *abc)
 
     grid = libbalsa_create_grid();
     content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-    gtk_container_add(GTK_CONTAINER(content_area), grid);
+    gtk_box_append(GTK_BOX(content_area), grid);
     label = libbalsa_create_grid_label(_("A_ddress Book Name:"), grid, 0);
     gtk_size_group_add_widget(size_group, label);
     abc->name_entry =
@@ -462,18 +487,20 @@ create_externq_dialog(AddressBookConfig * abc)
     add_radio_buttons(grid, 3, abc);
 
     if (ab_externq != NULL) {
-        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER
-                                      (abc->ab_specific.externq.load),
-                                      libbalsa_address_book_externq_get_load(ab_externq));
-        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER
-                                      (abc->ab_specific.externq.save),
-                                      libbalsa_address_book_externq_get_save(ab_externq));
+        GFile *file;
+
+        file = g_file_new_for_path(libbalsa_address_book_externq_get_load(ab_externq));
+        gtk_file_chooser_set_file(GTK_FILE_CHOOSER(GTK_FILE_CHOOSER(abc->ab_specific.externq.load)), file, 
NULL);
+        g_object_unref(file);
+
+        file = g_file_new_for_path(libbalsa_address_book_externq_get_save(ab_externq));
+        gtk_file_chooser_set_file(GTK_FILE_CHOOSER(GTK_FILE_CHOOSER(abc->ab_specific.externq.save)), file, 
NULL);
+        g_object_unref(file);
     }
 
     dialog = create_generic_dialog(abc, "Extern");
-    gtk_container_add(GTK_CONTAINER
-                      (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                      grid);
+    gtk_box_append(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), grid);
+
     return dialog;
 }
 
@@ -520,7 +547,7 @@ create_ldap_dialog(AddressBookConfig * abc)
     abc->ab_specific.ldap.passwd = 
        libbalsa_create_grid_entry(grid, NULL, NULL, 4, 
                     ab ? libbalsa_address_book_ldap_get_passwd(ab) : "", label);
-    gtk_entry_set_visibility(GTK_ENTRY(abc->ab_specific.ldap.passwd), FALSE);
+    gtk_editable_set_visibility(GTK_EDITABLE(abc->ab_specific.ldap.passwd), FALSE);
 
     label = libbalsa_create_grid_label(_("_User Address Book DN"), grid, 5);
     abc->ab_specific.ldap.book_dn = 
@@ -540,7 +567,7 @@ create_ldap_dialog(AddressBookConfig * abc)
     g_free(host);
     
     dialog = create_generic_dialog(abc, "LDAP");
-    gtk_container_add(GTK_CONTAINER
+    gtk_box_append(GTK_BOX
                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
                       grid);
     return dialog;
@@ -573,9 +600,7 @@ create_gpe_dialog(AddressBookConfig * abc)
     add_radio_buttons(grid, 1, abc);
 
     dialog = create_generic_dialog(abc, "GPE");
-    gtk_container_add(GTK_CONTAINER
-                      (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                      grid);
+    gtk_box_append(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), grid);
     return dialog;
 }
 #endif
@@ -589,22 +614,29 @@ create_rubrica_dialog(AddressBookConfig * abc)
 #endif
 
 static void
-help_button_cb(AddressBookConfig * abc)
+help_button_finish(GObject      *source_object,
+                   GAsyncResult *result,
+                   gpointer      user_data)
 {
-    GError *err = NULL;
-
-    gtk_show_uri_on_window(GTK_WINDOW(abc->window),
-                           "help:balsa/preferences-address-books",
-                           gtk_get_current_event_time(), &err);
-
-    if (err) {
-        libbalsa_information(LIBBALSA_INFORMATION_WARNING,
-                             _("Error displaying help: %s\n"),
-                             err->message);
-        g_error_free(err);
+    GtkWindow *parent = user_data;
+    GError *error = NULL;
+
+    if (!gtk_show_uri_full_finish(parent, result, &error)) {
+       libbalsa_information(LIBBALSA_INFORMATION_WARNING,
+                             _("Error displaying help: %s"),
+                             error->message);
+        g_error_free(error);
     }
 }
 
+static void
+help_button_cb(AddressBookConfig * abc)
+{
+    gtk_show_uri_full(GTK_WINDOW(abc->window),
+                      "help:balsa/preferences-address-books",
+                      GDK_CURRENT_TIME, NULL, help_button_finish, abc->window);
+}
+
 
 enum {
     ADDRESS_BOOK_CONFIG_PATH_FILE,
@@ -623,7 +655,18 @@ enum {
 static gboolean
 chooser_bad_path(GtkFileChooser * chooser, GtkWindow * window, gint type)
 {
-    return bad_path(gtk_file_chooser_get_filename(chooser), window, type);
+    GFile *file;
+    char *path;
+    gboolean bad;
+
+    file = gtk_file_chooser_get_file(chooser);
+    path = g_file_get_path(file);
+    g_object_unref(file);
+
+    bad = bad_path(path, window, type);
+    g_free(path);
+
+    return bad;
 }
 
 static gboolean
@@ -691,42 +734,61 @@ static gboolean
 create_book(AddressBookConfig * abc)
 {
     LibBalsaAddressBook *address_book = NULL;
-    const gchar *name = gtk_entry_get_text(GTK_ENTRY(abc->name_entry));
+    const gchar *name = gtk_editable_get_text(GTK_EDITABLE(abc->name_entry));
 
     if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_VCARD) {
-        gchar *path =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(abc->window));
-        if (path != NULL)
+        GFile *file;
+        gchar *path;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->window));
+        path = g_file_get_path(file);
+        g_object_unref(file);
+
+        if (path != NULL) {
             address_book = libbalsa_address_book_vcard_new(name, path);
-        g_free(path);
+            g_free(path);
+        }
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_EXTERNQ) {
-#define GET_FILENAME(chooser) \
-  gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser))
-        gchar *load = GET_FILENAME(abc->ab_specific.externq.load);
-        gchar *save = GET_FILENAME(abc->ab_specific.externq.save);
+        GFile *file;
+        gchar *load;
+        gchar *save;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->ab_specific.externq.load));
+        load = g_file_get_path(file);
+        g_object_unref(file);
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->ab_specific.externq.save));
+        save = g_file_get_path(file);
+        g_object_unref(file);
+
         if (load != NULL && save != NULL)
-            address_book =
-                libbalsa_address_book_externq_new(name, load, save);
+            address_book = libbalsa_address_book_externq_new(name, load, save);
         g_free(load);
         g_free(save);
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDIF) {
-        gchar *path =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(abc->window));
-        if (path != NULL)
+        GFile *file;
+        gchar *path;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->window));
+        path = g_file_get_path(file);
+        g_object_unref(file);
+
+        if (path != NULL) {
             address_book = libbalsa_address_book_ldif_new(name, path);
-        g_free(path);
+            g_free(path);
+        }
 #ifdef ENABLE_LDAP
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDAP) {
         const gchar *host =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.host));
         const gchar *base_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.base_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.base_dn));
         const gchar *bind_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.bind_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.bind_dn));
         const gchar *passwd =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.passwd));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.passwd));
         const gchar *book_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.book_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.book_dn));
         gboolean enable_tls =
             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
                                          (abc->ab_specific.ldap.enable_tls));
@@ -742,11 +804,17 @@ create_book(AddressBookConfig * abc)
 #endif
 #ifdef HAVE_RUBRICA
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_RUBRICA) {
-        gchar *path =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(abc->window));
-        if (path != NULL)
+        GFile *file;
+        gchar *path;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->window));
+        path = g_file_get_path(file);
+        g_object_unref(file);
+
+        if (path != NULL) {
             address_book = libbalsa_address_book_rubrica_new(name, path);
-        g_free(path);
+            g_free(path);
+        }
 #endif
 #ifdef HAVE_OSMO
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_OSMO) {
@@ -772,7 +840,7 @@ modify_book(AddressBookConfig * abc)
     LibBalsaAddressBook *address_book = abc->address_book;
 
     libbalsa_address_book_set_name(address_book,
-        gtk_entry_get_text(GTK_ENTRY(abc->name_entry)));
+        gtk_editable_get_text(GTK_EDITABLE(abc->name_entry)));
 
     if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_VCARD
         || abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDIF
@@ -780,21 +848,31 @@ modify_book(AddressBookConfig * abc)
         || abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_RUBRICA
 #endif /* HAVE_RUBRICA */
         ) {
-        LibBalsaAddressBookText *ab_text =
-            LIBBALSA_ADDRESS_BOOK_TEXT(address_book);
-        gchar *path =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(abc->window));
+        LibBalsaAddressBookText *ab_text = LIBBALSA_ADDRESS_BOOK_TEXT(address_book);
+        GFile *file;
+        gchar *path;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->window));
+        path = g_file_get_path(file);
+        g_object_unref(file);
 
-        if (path != NULL)
+        if (path != NULL) {
             libbalsa_address_book_text_set_path(ab_text, path);
+            g_free(path);
+        }
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_EXTERNQ) {
         LibBalsaAddressBookExternq *ab_externq;
-        gchar *load =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER
-                                           (abc->ab_specific.externq.load));
-        gchar *save =
-            gtk_file_chooser_get_filename(GTK_FILE_CHOOSER
-                                           (abc->ab_specific.externq.save));
+        GFile *file;
+        gchar *load;
+        gchar *save;
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->ab_specific.externq.load));
+        load = g_file_get_path(file);
+        g_object_unref(file);
+
+        file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(abc->ab_specific.externq.save));
+        save = g_file_get_path(file);
+        g_object_unref(file);
 
         ab_externq = LIBBALSA_ADDRESS_BOOK_EXTERNQ(address_book);
         if (load) {
@@ -809,15 +887,15 @@ modify_book(AddressBookConfig * abc)
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_LDAP) {
         LibBalsaAddressBookLdap *ldap;
         const gchar *host =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.host));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.host));
         const gchar *base_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.base_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.base_dn));
         const gchar *bind_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.bind_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.bind_dn));
         const gchar *passwd =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.passwd));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.passwd));
         const gchar *book_dn =
-            gtk_entry_get_text(GTK_ENTRY(abc->ab_specific.ldap.book_dn));
+            gtk_editable_get_text(GTK_EDITABLE(abc->ab_specific.ldap.book_dn));
         gboolean enable_tls =
             gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON
                                          (abc->ab_specific.ldap.enable_tls));
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 16389be8d..8ca067f4f 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -159,8 +159,13 @@ balsa_mime_widget_new_message(BalsaMessage * bm,
 
         gtk_widget_set_valign(header_widget, GTK_ALIGN_START);
         gtk_widget_set_vexpand(header_widget, FALSE);
-        g_object_set(header_widget, "margin", 5, NULL);
-       gtk_container_add(GTK_CONTAINER(widget), header_widget);
+
+        gtk_widget_set_margin_top(header_widget, 5);
+        gtk_widget_set_margin_bottom(header_widget, 5);
+        gtk_widget_set_margin_start(header_widget, 5);
+        gtk_widget_set_margin_end(header_widget, 5);
+
+       gtk_frame_set_child(GTK_FRAME(widget), header_widget);
        bmw_message_set_headers(bm, mw, mime_body, TRUE);
     }
 
diff --git a/src/filter-edit-callbacks.c b/src/filter-edit-callbacks.c
index 285d5776d..6ec4c1782 100644
--- a/src/filter-edit-callbacks.c
+++ b/src/filter-edit-callbacks.c
@@ -1003,7 +1003,12 @@ build_type_notebook()
     gtk_grid_set_column_spacing(GTK_GRID(grid), 5);
 
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-    g_object_set(box, "margin", 5, NULL);
+
+    gtk_widget_set_margin_top(box, 5);
+    gtk_widget_set_margin_bottom(box, 5);
+    gtk_widget_set_margin_start(box, 5);
+    gtk_widget_set_margin_end(box, 5);
+
     gtk_widget_set_vexpand(grid, TRUE);
     gtk_widget_set_valign(grid, GTK_ALIGN_FILL);
     gtk_box_append(GTK_BOX(box), grid);
@@ -1030,7 +1035,10 @@ build_type_notebook()
 
     /* The regex page of the type notebook */
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
-    g_object_set(box, "margin", 5, NULL);
+    gtk_widget_set_margin_top(box, 5);
+    gtk_widget_set_margin_bottom(box, 5);
+    gtk_widget_set_margin_start(box, 5);
+    gtk_widget_set_margin_end(box, 5);
 
     gtk_notebook_append_page(GTK_NOTEBOOK(fe_type_notebook), box, NULL);
 
@@ -1109,7 +1117,11 @@ build_type_notebook()
     page = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(page), 5);
     gtk_grid_set_column_spacing(GTK_GRID(page), 5);
-    g_object_set(page, "margin", 5, NULL);
+
+    gtk_widget_set_margin_top(page, 5);
+    gtk_widget_set_margin_bottom(page, 5);
+    gtk_widget_set_margin_start(page, 5);
+    gtk_widget_set_margin_end(page, 5);
 
     gtk_notebook_append_page(GTK_NOTEBOOK(fe_type_notebook), page, NULL);
 
@@ -1141,7 +1153,11 @@ build_type_notebook()
     gtk_widget_set_vexpand(page, TRUE);
     gtk_grid_set_row_spacing(GTK_GRID(page), 5);
     gtk_grid_set_column_spacing(GTK_GRID(page), 5);
-    g_object_set(page, "margin", 5, NULL);
+
+    gtk_widget_set_margin_top(page, 5);
+    gtk_widget_set_margin_bottom(page, 5);
+    gtk_widget_set_margin_start(page, 5);
+    gtk_widget_set_margin_end(page, 5);
 
     gtk_notebook_append_page(GTK_NOTEBOOK(fe_type_notebook), page, NULL);
     fe_type_flag_label =
diff --git a/src/filter-edit-dialog.c b/src/filter-edit-dialog.c
index 71df631b6..d5fc3ebce 100644
--- a/src/filter-edit-dialog.c
+++ b/src/filter-edit-dialog.c
@@ -251,7 +251,11 @@ build_match_page()
     page = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(page), 5);
     gtk_grid_set_column_spacing(GTK_GRID(page), 5);
-    g_object_set(page, "margin", 5, NULL);
+
+    gtk_widget_set_margin_top(page, 5);
+    gtk_widget_set_margin_bottom(page, 5);
+    gtk_widget_set_margin_start(page, 5);
+    gtk_widget_set_margin_end(page, 5);
 
     /* The name entry */
 
@@ -383,7 +387,11 @@ build_action_page(GtkWindow * window)
     frame = gtk_frame_new(_("Notification:"));
     gtk_frame_set_label_align(GTK_FRAME(frame), 0.0);
     gtk_box_append(GTK_BOX(page), frame);
-    g_object_set(frame, "margin", 3, NULL);
+
+    gtk_widget_set_margin_top(frame, 3);
+    gtk_widget_set_margin_bottom(frame, 3);
+    gtk_widget_set_margin_start(frame, 3);
+    gtk_widget_set_margin_end(frame, 3);
 
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
@@ -437,7 +445,12 @@ build_action_page(GtkWindow * window)
 
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
     gtk_box_set_homogeneous(GTK_BOX(box), TRUE);
-    g_object_set(frame, "margin", 3, NULL);
+
+    gtk_widget_set_margin_top(frame, 3);
+    gtk_widget_set_margin_bottom(frame, 3);
+    gtk_widget_set_margin_start(frame, 3);
+    gtk_widget_set_margin_end(frame, 3);
+
     gtk_frame_set_child(GTK_FRAME(frame), box);
 
     fe_action_option_menu =
diff --git a/src/folder-conf.c b/src/folder-conf.c
index 285d05386..93beabcf0 100644
--- a/src/folder-conf.c
+++ b/src/folder-conf.c
@@ -445,6 +445,7 @@ folder_conf_imap_node(BalsaMailboxNode *mn)
     GtkWidget *box;
     GtkWidget *button;
     GtkWidget *content_area;
+    GtkWidget *notebook;
 
     /* Allow only one dialog per mailbox node, and one with mn == NULL
      * for creating a new folder. */
@@ -492,10 +493,12 @@ folder_conf_imap_node(BalsaMailboxNode *mn)
     }
 
     folder_data->server_cfg = libbalsa_server_cfg_new(folder_data->server, (mn != NULL) ? 
balsa_mailbox_node_get_name(mn) : NULL);
-    content_area = gtk_dialog_get_content_area(GTK_DIALOG(folder_data->common_data.dialog));
-    gtk_container_add(GTK_CONTAINER(content_area), GTK_WIDGET(folder_data->server_cfg));
     g_signal_connect(folder_data->server_cfg, "changed", G_CALLBACK(validate_folder), folder_data);
 
+    content_area = gtk_dialog_get_content_area(GTK_DIALOG(folder_data->common_data.dialog));
+    notebook = libbalsa_server_cfg_get_notebook(folder_data->server_cfg);
+    gtk_box_append(GTK_BOX(content_area), notebook);
+
     /* additional basic settings - subscription management */
     box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
 
diff --git a/src/mailbox-conf.c b/src/mailbox-conf.c
index c0cd54035..7350a9fc2 100644
--- a/src/mailbox-conf.c
+++ b/src/mailbox-conf.c
@@ -781,6 +781,7 @@ static GtkWidget *
 create_pop_mailbox_dialog(MailboxConfWindow *mcw)
 {
     GtkWidget *content_area;
+    GtkWidget *notebook;
        LibBalsaMailbox *mailbox = mcw->mailbox;
     LibBalsaMailboxPOP3 *mailbox_pop3 = LIBBALSA_MAILBOX_POP3(mailbox);
 
@@ -798,9 +799,11 @@ create_pop_mailbox_dialog(MailboxConfWindow *mcw)
     mcw->mb_data.pop3.server_cfg =
         libbalsa_server_cfg_new(LIBBALSA_MAILBOX_REMOTE_GET_SERVER(mailbox),
                                 libbalsa_mailbox_get_name(mailbox));
-    gtk_container_add(GTK_CONTAINER(content_area), GTK_WIDGET(mcw->mb_data.pop3.server_cfg));
     g_signal_connect(mcw->mb_data.pop3.server_cfg, "changed", G_CALLBACK(check_for_blank_fields), mcw);
 
+    notebook = libbalsa_server_cfg_get_notebook(mcw->mb_data.pop3.server_cfg);
+    gtk_box_append(GTK_BOX(content_area), notebook);
+
     /* toggle for deletion from server */
     mcw->mb_data.pop3.delete_from_server = libbalsa_server_cfg_add_check(mcw->mb_data.pop3.server_cfg, TRUE,
        _("_Delete messages from server after download"), 
libbalsa_mailbox_pop3_get_delete_from_server(mailbox_pop3), NULL, NULL);
diff --git a/src/pref-manager.c b/src/pref-manager.c
index 47107072c..59804f779 100644
--- a/src/pref-manager.c
+++ b/src/pref-manager.c
@@ -1228,7 +1228,11 @@ pm_grid_new(void)
     gtk_grid_set_column_spacing((GtkGrid *) grid, COL_SPACING);
     gtk_grid_set_row_spacing((GtkGrid *) grid, ROW_SPACING);
     pm_grid_set_next_row(grid, 0);
-    g_object_set(grid, "margin", BORDER_WIDTH, NULL);
+
+    gtk_widget_set_margin_top(grid, BORDER_WIDTH);
+    gtk_widget_set_margin_bottom(grid, BORDER_WIDTH);
+    gtk_widget_set_margin_start(grid, BORDER_WIDTH);
+    gtk_widget_set_margin_end(grid, BORDER_WIDTH);
 
     return grid;
 }
@@ -3332,8 +3336,13 @@ open_preferences_manager(GtkWidget * widget, gpointer data)
                                GTK_TYPE_WIDGET  /* PM_CHILD_COL    */
             );
     pui->view = view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-    g_object_set(view, "margin", BORDER_WIDTH, NULL);
-    gtk_container_add(GTK_CONTAINER(hbox), view);
+
+    gtk_widget_set_margin_top(view, BORDER_WIDTH);
+    gtk_widget_set_margin_bottom(view, BORDER_WIDTH);
+    gtk_widget_set_margin_start(view, BORDER_WIDTH);
+    gtk_widget_set_margin_end(view, BORDER_WIDTH);
+
+    gtk_box_append(GTK_BOX(hbox), view);
     gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
 
     renderer = gtk_cell_renderer_text_new();
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index a01d4fc67..564ceeded 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -2249,7 +2249,12 @@ create_email_or_string_entry(BalsaSendmsg * bsmsg,
     arr[0] = gtk_label_new_with_mnemonic(label);
     gtk_label_set_mnemonic_widget(GTK_LABEL(arr[0]), mnemonic_widget);
     gtk_widget_set_halign(arr[0], GTK_ALIGN_START);
-    g_object_set(arr[0], "margin", GNOME_PAD_SMALL, NULL);
+
+    gtk_widget_set_margin_top(arr[0], GNOME_PAD_SMALL);
+    gtk_widget_set_margin_bottom(arr[0], GNOME_PAD_SMALL);
+    gtk_widget_set_margin_start(arr[0], GNOME_PAD_SMALL);
+    gtk_widget_set_margin_end(arr[0], GNOME_PAD_SMALL);
+
     gtk_grid_attach(GTK_GRID(grid), arr[0], 0, y_pos, 1, 1);
 
     if (!balsa_app.use_system_fonts) {
@@ -2587,7 +2592,12 @@ sw_attachment_list(BalsaSendmsg *bsmsg)
     /* Attachment list */
     label = gtk_label_new_with_mnemonic(_("_Attachments:"));
     gtk_widget_set_halign(label, GTK_ALIGN_START);
-    g_object_set(label, "margin", GNOME_PAD_SMALL, NULL);
+
+    gtk_widget_set_margin_top(label, GNOME_PAD_SMALL);
+    gtk_widget_set_margin_bottom(label, GNOME_PAD_SMALL);
+    gtk_widget_set_margin_start(label, GNOME_PAD_SMALL);
+    gtk_widget_set_margin_end(label, GNOME_PAD_SMALL);
+
     gtk_grid_attach(GTK_GRID(grid), label, 0, 0, 1, 1);
 
     sw = gtk_scrolled_window_new(NULL, NULL);


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