[balsa/wip/gtk4: 1/351] First cut at porting to Gtk version 4



commit 85baf0023b1ad3fc153c683c7bfbdc319c836e5e
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Tue Oct 3 18:00:35 2017 -0400

    First cut at porting to Gtk version 4

 libbalsa/address-view.c                  |   37 ++++-----
 libbalsa/address.c                       |    9 +-
 libbalsa/html.c                          |   15 ++--
 libbalsa/identity.c                      |   39 ++++-----
 libbalsa/libbalsa-progress.c             |   14 ++--
 libbalsa/libbalsa.c                      |   22 ++++--
 libbalsa/smtp-server.c                   |   11 ++-
 libbalsa/source-viewer.c                 |    9 +-
 libinit_balsa/assistant_init.c           |    2 +-
 libinit_balsa/assistant_page_defclient.c |   36 +++++----
 libinit_balsa/assistant_page_directory.c |    7 +-
 libinit_balsa/assistant_page_user.c      |    5 +-
 meson.build                              |    2 +-
 meson_options.txt                        |    2 +-
 src/ab-main.c                            |   45 +++++-----
 src/ab-window.c                          |   35 ++++----
 src/address-book-config.c                |   31 ++++----
 src/balsa-app.c                          |    2 +-
 src/balsa-cite-bar.c                     |   55 ++++++------
 src/balsa-index.c                        |   52 +++++-------
 src/balsa-mblist.c                       |   61 +++++--------
 src/balsa-message.c                      |   98 ++++++++++------------
 src/balsa-mime-widget-callbacks.c        |   19 +++--
 src/balsa-mime-widget-callbacks.h        |    4 +-
 src/balsa-mime-widget-image.c            |   15 ++--
 src/balsa-mime-widget-message.c          |   47 +++++------
 src/balsa-mime-widget-text.c             |   71 ++++++++++------
 src/balsa-mime-widget.c                  |   26 +++---
 src/filter-edit-callbacks.c              |   37 +++++---
 src/filter-edit-dialog.c                 |   72 ++++++++--------
 src/filter-export-dialog.c               |    8 +-
 src/filter-run-dialog.c                  |   25 ++++--
 src/folder-conf.c                        |   28 ++++---
 src/information-dialog.c                 |    8 +-
 src/mailbox-conf.c                       |   21 ++---
 src/main-window.c                        |  136 ++++++++++++++++-------------
 src/message-window.c                     |    7 +-
 src/pref-manager.c                       |   17 ++--
 src/print-gtk.c                          |   56 +++++++------
 src/sendmsg-window.c                     |  121 +++++++++++++++------------
 src/spell-check.c                        |    9 +-
 src/store-address.c                      |   21 +++--
 src/toolbar-factory.c                    |   22 +----
 src/toolbar-prefs.c                      |   55 ++++++------
 44 files changed, 725 insertions(+), 689 deletions(-)
---
diff --git a/libbalsa/address-view.c b/libbalsa/address-view.c
index c16a30a..4b7b5be 100644
--- a/libbalsa/address-view.c
+++ b/libbalsa/address-view.c
@@ -592,12 +592,13 @@ lbav_entry_changed_cb(GtkEntry * entry, LibBalsaAddressView * address_view)
  */
 static gboolean
 lbav_key_pressed_cb(GtkEntry * entry,
-                    GdkEventKey * event,
+                    GdkEvent * event,
                     LibBalsaAddressView * address_view)
 {
     GtkEntryCompletion *completion;
+    guint keyval;
 
-    if (event->keyval != GDK_KEY_Escape)
+    if (!gdk_event_get_keyval(event, &keyval) || keyval != GDK_KEY_Escape)
         return FALSE;
 
     if (address_view->last_was_escape) {
@@ -946,26 +947,20 @@ lbav_selection_changed_cb(GtkTreeSelection * selection,
 {
     GdkEvent *event = gtk_get_current_event();
 
-    if (event) {
-        if (event->type == GDK_BUTTON_PRESS) {
-            GdkEventButton *event_button = (GdkEventButton *) event;
-            GtkTreeView *tree_view = (GtkTreeView *) address_view;
+    if (event != NULL) {
+        gdouble x_win, y_win;
 
-            if (event_button->window ==
-                gtk_tree_view_get_bin_window(tree_view)) {
-                gint x, y;
-                GtkTreePath *path;
-                GtkTreeViewColumn *column;
-
-                gtk_tree_view_convert_widget_to_bin_window_coords
-                    (tree_view, (gint) event_button->x,
-                     (gint) event_button->y, &x, &y);
-
-                if (gtk_tree_view_get_path_at_pos
-                    (tree_view, x, y, &path, &column, NULL, NULL)) {
-                    gtk_tree_view_row_activated(tree_view, path, column);
-                    gtk_tree_path_free(path);
-                }
+        if (gdk_event_get_event_type(event) == GDK_BUTTON_PRESS &&
+            gdk_event_get_coords(event, &x_win, &y_win)) {
+            GtkTreeView *tree_view = (GtkTreeView *) address_view;
+            gint x, y;
+            GtkTreePath *path;
+            GtkTreeViewColumn *column;
+
+            gtk_tree_view_convert_widget_to_bin_window_coords(tree_view, x_win, y_win, &x, &y);
+            if (gtk_tree_view_get_path_at_pos (tree_view, x, y, &path, &column, NULL, NULL)) {
+                gtk_tree_view_row_activated(tree_view, path, column);
+                gtk_tree_path_free(path);
             }
         }
         gdk_event_free(event);
diff --git a/libbalsa/address.c b/libbalsa/address.c
index d1a7e25..17ba386 100644
--- a/libbalsa/address.c
+++ b/libbalsa/address.c
@@ -964,7 +964,7 @@ libbalsa_address_get_edit_widget(const 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);
-    gtk_container_set_border_width(GTK_CONTAINER(grid), HIG_PADDING);
+    g_object_set(G_OBJECT(grid), "margin", HIG_PADDING, NULL);
 
     for (cnt = 0; cnt < NUM_FIELDS; cnt++) {
         if (!labels[cnt])
@@ -972,12 +972,12 @@ libbalsa_address_get_edit_widget(const LibBalsaAddress *address,
        label = gtk_label_new_with_mnemonic(_(labels[cnt]));
        gtk_widget_set_halign(label, GTK_ALIGN_END);
         if (cnt == EMAIL_ADDRESS) {
-            GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+            GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
             GtkWidget *but = gtk_button_new_with_mnemonic(_("A_dd"));
             entries[cnt] = lba_address_list_widget(changed_cb,
                                                    changed_data);
-            gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 1);
-            gtk_box_pack_start(GTK_BOX(box), but,   FALSE, FALSE, 1);
+            gtk_box_pack_start(GTK_BOX(box), label);
+            gtk_box_pack_start(GTK_BOX(box), but);
             lhs = box;
             g_signal_connect(but, "clicked", G_CALLBACK(add_row),
                              entries[cnt]);
@@ -1025,6 +1025,7 @@ libbalsa_address_get_edit_widget(const LibBalsaAddress *address,
         g_signal_connect_swapped(G_OBJECT(model), "row-deleted",
                                  changed_cb, changed_data);
     }
+
     return grid;
 }
 
diff --git a/libbalsa/html.c b/libbalsa/html.c
index 353d017..6936b48 100644
--- a/libbalsa/html.c
+++ b/libbalsa/html.c
@@ -144,13 +144,9 @@ html2text(gchar ** text, gsize len)
 /* WebKitContextMenuItem uses GtkAction, which is deprecated.
  * We don't use it, but it breaks the git-tree build, so we just mangle
  * it: */
-#if defined(GTK_DISABLE_DEPRECATED)
 #define GtkAction GAction
 #include <webkit2/webkit2.h>
 #undef GtkAction
-#else  /* defined(GTK_DISABLE_DEPRECATED) */
-#include <webkit2/webkit2.h>
-#endif /* defined(GTK_DISABLE_DEPRECATED) */
 
 typedef struct {
     LibBalsaMessageBody  *body;
@@ -638,12 +634,13 @@ libbalsa_html_new(LibBalsaMessageBody * body,
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     g_object_set_data(G_OBJECT(vbox), "libbalsa-html-web-view", web_view);
-    gtk_box_pack_end(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(widget, TRUE);
+    gtk_box_pack_end(GTK_BOX(vbox), widget);
 
     /* Simple check for possible resource requests: */
     if (g_regex_match_simple(src_regex, text, G_REGEX_CASELESS, 0)) {
         info->info_bar = lbh_info_bar(info);
-        gtk_box_pack_start(GTK_BOX(vbox), info->info_bar, FALSE, FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox), info->info_bar);
         d(g_print("%s shows info_bar\n", __func__));
     }
 
@@ -1088,8 +1085,7 @@ lbh_show_info_bar(LibBalsaWebKitInfo * info)
                                      GTK_RESPONSE_OK,
                                      _("_Close"), GTK_RESPONSE_CLOSE,
                                      NULL);
-    gtk_box_pack_start(GTK_BOX(info->vbox), info_bar_widget,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(info->vbox), info_bar_widget);
 
     info_bar = GTK_INFO_BAR(info_bar_widget);
 
@@ -1269,7 +1265,8 @@ libbalsa_html_new(LibBalsaMessageBody * body,
     info->vbox = vbox     = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
     widget = webkit_web_view_new();
-    gtk_box_pack_end(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(widget, TRUE);
+    gtk_box_pack_end(GTK_BOX(vbox), widget);
 
     info->web_view = web_view = WEBKIT_WEB_VIEW(widget);
     g_object_set_data(G_OBJECT(vbox), "libbalsa-html-web-view", web_view);
diff --git a/libbalsa/identity.c b/libbalsa/identity.c
index f8783d7..99181bf 100644
--- a/libbalsa/identity.c
+++ b/libbalsa/identity.c
@@ -490,13 +490,14 @@ libbalsa_identity_select_dialog(GtkWindow * parent,
     identity_list_update_real(GTK_TREE_VIEW(tree), identities, initial_id);
 
     frame = gtk_frame_new(NULL);
-    gtk_box_pack_start(GTK_BOX
-                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       frame, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(frame, TRUE);
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
+                       frame);
+
+    g_object_set(G_OBJECT(tree), "margin", padding, NULL);
     gtk_container_add(GTK_CONTAINER(frame), tree);
-    gtk_container_set_border_width(GTK_CONTAINER(frame), padding);
 
-    gtk_widget_show_all(dialog);
+    gtk_widget_show(dialog);
     gtk_widget_grab_focus(tree);
 }
 
@@ -734,8 +735,6 @@ libbalsa_identity_config_frame(GList** identities,
     GtkWidget* config_frame = gtk_frame_new(NULL);
     GtkWidget *tree;
 
-    gtk_container_set_border_width(GTK_CONTAINER(config_frame), 0);
-
     tree = libbalsa_identity_tree(G_CALLBACK(toggle_cb), dialog,
                                   _("Default"));
     g_signal_connect(tree, "row-activated",
@@ -745,6 +744,7 @@ libbalsa_identity_config_frame(GList** identities,
     g_object_set_data(G_OBJECT(tree), "callback", cb);
     g_object_set_data(G_OBJECT(tree), "cb-data",  data);
 
+    g_object_set(G_OBJECT(tree), "margin", 0, NULL); /* Seriously? */
     gtk_container_add(GTK_CONTAINER(config_frame), tree);
 
     identity_list_update(GTK_TREE_VIEW(tree));
@@ -903,7 +903,7 @@ new_ident_cb(GtkTreeView * tree, GObject * dialog)
  * Helper: append a notebook page containing a table
  */
 static GtkWidget*
-append_ident_notebook_page(GtkNotebook *notebook,
+append_ident_notebook_page(GtkNotebook * notebook,
                           const gchar * tab_label,
                            const gchar * footnote)
 {
@@ -912,14 +912,14 @@ append_ident_notebook_page(GtkNotebook *notebook,
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     grid = libbalsa_create_grid();
-    gtk_container_set_border_width(GTK_CONTAINER(grid), padding);
-    gtk_box_pack_start(GTK_BOX(vbox), grid, FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(grid), "margin", padding, NULL);
+    gtk_box_pack_start(GTK_BOX(vbox), grid);
     if (footnote) {
        GtkWidget *label;
 
        label = gtk_label_new(footnote);
        gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-        gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+        gtk_box_pack_start(GTK_BOX(vbox), label);
     }
     gtk_notebook_append_page(notebook, vbox, gtk_label_new(tab_label));
 
@@ -1306,7 +1306,7 @@ md_face_path_changed(const gchar * filename, gboolean active,
     gtk_container_foreach(GTK_CONTAINER(face_box),
                           (GtkCallback) gtk_widget_destroy, NULL);
     gtk_container_add(GTK_CONTAINER(face_box), image);
-    gtk_widget_show_all(face_box);
+    gtk_widget_show(face_box);
 
     g_free(content);
 }
@@ -1693,7 +1693,7 @@ delete_ident_cb(GtkTreeView * tree, GtkWidget * dialog)
                      G_CALLBACK(delete_ident_response), di);
     g_object_weak_ref(G_OBJECT(confirm), (GWeakNotify) g_free, di);
     gtk_widget_set_sensitive(dialog, FALSE);
-    gtk_widget_show_all(confirm);
+    gtk_widget_show(confirm);
 }
 
 static void
@@ -1791,11 +1791,9 @@ libbalsa_identity_config_dialog(GtkWindow *parent, GList **identities,
                                     IDENTITY_RESPONSE_CLOSE);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, padding);
-    gtk_box_pack_start(GTK_BOX
-                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       hbox, TRUE, TRUE, 0);
-
-    gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), hbox);
+    gtk_box_pack_start(GTK_BOX(hbox), frame);
 
     smtp_server_list = g_new(GSList *, 1);
     *smtp_server_list = g_slist_copy(smtp_servers);
@@ -1806,14 +1804,15 @@ libbalsa_identity_config_dialog(GtkWindow *parent, GList **identities,
                      (GWeakNotify) lbi_free_smtp_server_list,
                      smtp_server_list);
 
-    gtk_box_pack_start(GTK_BOX(hbox), display_frame, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(display_frame, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), display_frame);
 
     select = gtk_tree_view_get_selection(tree);
     g_signal_connect(select, "changed",
                      G_CALLBACK(config_frame_button_select_cb), dialog);
     config_dialog_select(select, GTK_DIALOG(dialog));
 
-    gtk_widget_show_all(dialog);
+    gtk_widget_show(dialog);
     gtk_widget_grab_focus(GTK_WIDGET(tree));
 }
 
diff --git a/libbalsa/libbalsa-progress.c b/libbalsa/libbalsa-progress.c
index a7034e7..691a769 100644
--- a/libbalsa/libbalsa-progress.c
+++ b/libbalsa/libbalsa-progress.c
@@ -68,7 +68,7 @@ libbalsa_progress_dialog_ensure(GtkWidget   **progress_dialog,
         hints.min_height = 1;
         hints.max_width = PROGRESS_DIALOG_WIDTH;
         hints.max_height = -1;
-        gtk_window_set_geometry_hints(GTK_WINDOW(*progress_dialog), NULL, &hints, GDK_HINT_MIN_SIZE + 
GDK_HINT_MAX_SIZE);
+        gdk_window_set_geometry_hints(gtk_widget_get_window(*progress_dialog), &hints, GDK_HINT_MIN_SIZE + 
GDK_HINT_MAX_SIZE);
         gtk_window_set_resizable(GTK_WINDOW(*progress_dialog), FALSE);
         g_signal_connect(G_OBJECT(*progress_dialog), "response", G_CALLBACK(progress_dialog_response_cb), 
NULL);
         g_signal_connect(G_OBJECT(*progress_dialog), "destroy", G_CALLBACK(progress_dialog_destroy_cb), 
progress_dialog);
@@ -76,7 +76,7 @@ libbalsa_progress_dialog_ensure(GtkWidget   **progress_dialog,
        content_box = gtk_dialog_get_content_area(GTK_DIALOG(*progress_dialog));
        gtk_box_set_spacing(GTK_BOX(content_box), 6);
 
-        gtk_widget_show_all(*progress_dialog);
+        gtk_widget_show(*progress_dialog);
     } else {
        content_box = gtk_dialog_get_content_area(GTK_DIALOG(*progress_dialog));
     }
@@ -89,8 +89,8 @@ libbalsa_progress_dialog_ensure(GtkWidget   **progress_dialog,
     } else {
        progress_widget = create_progress_widget(progress_id, progress_id);
        gtk_revealer_set_reveal_child(GTK_REVEALER(progress_widget), TRUE);
-       gtk_box_pack_start(GTK_BOX(content_box), progress_widget, FALSE, FALSE, 0);
-       gtk_widget_show_all(progress_widget);
+       gtk_box_pack_start(GTK_BOX(content_box), progress_widget);
+       gtk_widget_show(progress_widget);
     }
 
        g_mutex_unlock(&progress_mutex);
@@ -217,16 +217,16 @@ create_progress_widget(const gchar *progress_id,
        gtk_container_add(GTK_CONTAINER(result), box);
 
        label = gtk_label_new(title);
-       gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(box), label);
 
        label = gtk_label_new(" ");
        gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
        g_object_set_data(G_OBJECT(result), "label", label);
-       gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(box), label);
 
        progress = gtk_progress_bar_new();
        g_object_set_data(G_OBJECT(result), "progress", progress);
-       gtk_box_pack_start(GTK_BOX(box), progress, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(box), progress);
 
        return result;
 }
diff --git a/libbalsa/libbalsa.c b/libbalsa/libbalsa.c
index 9cac38c..a841b80 100644
--- a/libbalsa/libbalsa.c
+++ b/libbalsa/libbalsa.c
@@ -515,6 +515,7 @@ ask_cert_real(void *data)
     int der_len;
     GcrCertificate *gcr_cert;
     GtkWidget *label;
+    GtkBox *vbox;
 
     dialog = gtk_dialog_new_with_buttons(_("SSL/TLS certificate"),
                                          NULL, /* FIXME: NULL parent */
@@ -539,11 +540,13 @@ ask_cert_real(void *data)
     label = gtk_label_new(str->str);
     g_string_free(str, TRUE);
     gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
-    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       label, FALSE, FALSE, 1);
+    vbox = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog)));
+    gtk_box_set_spacing(vbox, 1);
+    gtk_box_pack_start(vbox, label);
     gtk_widget_show(label);
-    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       cert_widget, TRUE, TRUE, 1);
+
+    gtk_widget_set_vexpand(cert_widget, TRUE);
+    gtk_box_pack_start(vbox, cert_widget);
     gtk_widget_show(cert_widget);
 
     switch(gtk_dialog_run(GTK_DIALOG(dialog))) {
@@ -576,6 +579,7 @@ ask_cert_real(void *data)
     char *name = NULL, *c, *valid_from, *valid_until;
     GtkWidget* dialog, *label;
     unsigned i;
+    GtkBox *vbox;
 
     GString* str = g_string_new("");
 
@@ -633,9 +637,13 @@ ask_cert_real(void *data)
     label = gtk_label_new(str->str);
     g_string_free(str, TRUE);
     gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
-    gtk_box_pack_start(GTK_BOX
-                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       label, TRUE, TRUE, 1);
+
+    vbox = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog)));
+    gtk_box_set_spacing(vbox, 1);
+
+    gtk_widget_set_vexpand(label, TRUE);
+    gtk_box_pack_start(vbox, label);
+
     gtk_widget_show(label);
 
     switch(gtk_dialog_run(GTK_DIALOG(dialog))) {
diff --git a/libbalsa/smtp-server.c b/libbalsa/smtp-server.c
index 3157ca2..ddb520b 100644
--- a/libbalsa/smtp-server.c
+++ b/libbalsa/smtp-server.c
@@ -491,7 +491,7 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     /* notebook page with basic options */
     grid = libbalsa_create_grid();
     row = 0;
-    gtk_container_set_border_width(GTK_CONTAINER(grid), HIG_PADDING);
+    g_object_set(G_OBJECT(grid), "margin", HIG_PADDING, NULL);
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), grid,
                              gtk_label_new_with_mnemonic(_("_Basic")));
 
@@ -543,7 +543,7 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     /* notebook page with advanced options */
     grid = libbalsa_create_grid();
     row = 0;
-    gtk_container_set_border_width(GTK_CONTAINER(grid), HIG_PADDING);
+    g_object_set(G_OBJECT(grid), "margin", HIG_PADDING, NULL);
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), grid,
                              gtk_label_new_with_mnemonic(_("_Advanced")));
 
@@ -575,9 +575,10 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
     gtk_grid_attach(GTK_GRID(grid), sdi->split_button, 0, ++row, 1, 1);
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
     sdi->big_message = gtk_spin_button_new_with_range(0.1, 100, 0.1);
-    gtk_box_pack_start(GTK_BOX(hbox), sdi->big_message, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(sdi->big_message, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), sdi->big_message);
     label = gtk_label_new(_("MB"));
-    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(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. */
@@ -593,5 +594,5 @@ libbalsa_smtp_server_dialog(LibBalsaSmtpServer * smtp_server,
 
     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 208005f..6b84ac5 100644
--- a/libbalsa/source-viewer.c
+++ b/libbalsa/source-viewer.c
@@ -217,7 +217,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) ,
@@ -259,10 +259,11 @@ libbalsa_show_message_source(GtkApplication  * application,
 #if HAVE_MACOSX_DESKTOP
     libbalsa_macosx_menu(window, GTK_MENU_SHELL(menu_bar));
 #else
-    gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, TRUE, 1);
+    gtk_box_pack_start(GTK_BOX(vbox), menu_bar);
 #endif
 
-    gtk_box_pack_start(GTK_BOX(vbox), interior, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(interior, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), interior);
     gtk_container_add(GTK_CONTAINER(window), vbox);
 
     lsvi = g_new(LibBalsaSourceViewerInfo, 1);
@@ -278,7 +279,7 @@ libbalsa_show_message_source(GtkApplication  * application,
     g_signal_connect(window, "size-allocate",
                      G_CALLBACK(lsv_size_allocate_cb), lsvi);
 
-    gtk_widget_show_all(window);
+    gtk_widget_show(window);
 
     escape_action =
         g_action_map_lookup_action(G_ACTION_MAP(window), "lsv-escape");
diff --git a/libinit_balsa/assistant_init.c b/libinit_balsa/assistant_init.c
index e96c520..6e0f8e0 100644
--- a/libinit_balsa/assistant_init.c
+++ b/libinit_balsa/assistant_init.c
@@ -137,7 +137,7 @@ balsa_init_begin(void)
     gtk_window_set_title(GTK_WINDOW(assistant), _("Configure Balsa"));
 
     balsa_initdruid(GTK_ASSISTANT(assistant));
-    gtk_widget_show_all(assistant);
+    gtk_widget_show(assistant);
 
     gtk_main();
 
diff --git a/libinit_balsa/assistant_page_defclient.c b/libinit_balsa/assistant_page_defclient.c
index a72c966..adc6e56 100644
--- a/libinit_balsa/assistant_page_defclient.c
+++ b/libinit_balsa/assistant_page_defclient.c
@@ -43,29 +43,35 @@ balsa_druid_page_defclient_init(BalsaDruidPageDefclient * defclient,
                                 GtkWidget * page,
                                 GtkAssistant * druid)
 {
-    GtkLabel *label;
+    GtkWidget *label;
     GtkWidget *yes, *no;
 
     defclient->default_client = 1;
     balsa_app.default_client = defclient->default_client;
 
-    label =
-        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);
+    label = gtk_label_new(_("Use Balsa as default email client?"));
+    gtk_label_set_justify((GtkLabel *) label, GTK_JUSTIFY_CENTER);
+    gtk_label_set_line_wrap((GtkLabel *) 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"));    
+    no  = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(yes),
+                                                         _("_No"));
 
-    g_signal_connect(G_OBJECT(yes), "toggled",
-                       G_CALLBACK(balsa_druid_page_defclient_toggle),
-                       defclient);
+    g_signal_connect(yes, "toggled",
+                     G_CALLBACK(balsa_druid_page_defclient_toggle),
+                     defclient);
 
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(label), TRUE, TRUE, 8);
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(yes),   TRUE, TRUE, 2);
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(no),    TRUE, TRUE, 2);
+    gtk_widget_set_margin_top(label, 8);
+    gtk_widget_set_vexpand(label, TRUE);
+    gtk_box_pack_start((GtkBox *) page, label);
+
+    gtk_widget_set_margin_top(yes, 2);
+    gtk_widget_set_vexpand(yes, TRUE);
+    gtk_box_pack_start((GtkBox *) page, yes);
+
+    gtk_widget_set_margin_top(no, 2);
+    gtk_widget_set_vexpand(no, TRUE);
+    gtk_box_pack_start((GtkBox *) page, no);
 
     return;
 }
@@ -99,7 +105,7 @@ balsa_druid_page_defclient(GtkAssistant *druid)
 }
 
 static void
-balsa_druid_page_defclient_toggle(GtkWidget * page, 
+balsa_druid_page_defclient_toggle(GtkWidget * page,
                                   BalsaDruidPageDefclient * defclient)
 {
     defclient->default_client = ! (defclient->default_client);
diff --git a/libinit_balsa/assistant_page_directory.c b/libinit_balsa/assistant_page_directory.c
index 473a3fc..94cc9f0 100644
--- a/libinit_balsa/assistant_page_directory.c
+++ b/libinit_balsa/assistant_page_directory.c
@@ -295,11 +295,10 @@ balsa_druid_page_directory_init(BalsaDruidPageDirectory * dir,
         g_free(preset);
     }
 
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(grid), FALSE, TRUE,
-                       0);
-    gtk_widget_show_all(GTK_WIDGET(grid));
+    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(grid));
+    gtk_widget_show(GTK_WIDGET(grid));
 
-    gtk_box_pack_end(GTK_BOX(page), verify_button(dir), FALSE, FALSE, 0);
+    gtk_box_pack_end(GTK_BOX(page), verify_button(dir));
 
     g_signal_connect(G_OBJECT(druid), "prepare",
                      G_CALLBACK(balsa_druid_page_directory_prepare),
diff --git a/libinit_balsa/assistant_page_user.c b/libinit_balsa/assistant_page_user.c
index 6e44420..7c0a1ca 100644
--- a/libinit_balsa/assistant_page_user.c
+++ b/libinit_balsa/assistant_page_user.c
@@ -87,7 +87,7 @@ balsa_druid_page_user_init(BalsaDruidPageUser * user,
     user->ed4.master = &(user->emaster);
     label = GTK_LABEL(gtk_label_new(_(header2)));
     gtk_label_set_line_wrap(label, TRUE);
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(label), FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(label));
 
     grid = GTK_GRID(gtk_grid_new());
     gtk_grid_set_row_spacing(grid, 2);
@@ -150,7 +150,8 @@ balsa_druid_page_user_init(BalsaDruidPageUser * user,
                                &(user->ed4), druid, page,
                                &(user->localmaildir));
     g_free(preset);
-    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(grid), FALSE, FALSE, 3);
+    gtk_widget_set_margin_top(GTK_WIDGET(grid), 3);
+    gtk_box_pack_start(GTK_BOX(page), GTK_WIDGET(grid));
 
     user->need_set = FALSE;
 }
diff --git a/meson.build b/meson.build
index fda7022..fc3f8f0 100644
--- a/meson.build
+++ b/meson.build
@@ -127,7 +127,7 @@ conf.set('TOOLKIT_CATEGORIES', TOOLKIT_CATEGORIES)
 
 # Dependencies for balsa and balsa_ab:
 glib_dep    = dependency('glib-2.0', version : '>= 2.40.0')
-gtk_dep     = dependency('gtk+-3.0', version : '>= 3.10.0')
+gtk_dep     = dependency('gtk+-4.0')
 gmime_dep   = dependency('gmime-2.6')
 gio_dep     = dependency('gio-2.0')
 gthread_dep = dependency('gthread-2.0')
diff --git a/meson_options.txt b/meson_options.txt
index 2bbd1ce..5b01c3e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -35,7 +35,7 @@ option('gss',
 
 option('html-widget',
   type        : 'combo',
-  choices     : ['webkit2', 'webkit', 'gtkhtml4'],
+  choices     : ['webkit2', 'webkit', 'gtkhtml4', 'none'],
   value       : 'webkit2',
   description : 'select the HTML renderer (default webkit2)')
 
diff --git a/src/ab-main.c b/src/ab-main.c
index a7814d6..13da698 100644
--- a/src/ab-main.c
+++ b/src/ab-main.c
@@ -493,8 +493,7 @@ entry_new_activated(GSimpleAction * action,
     selection = gtk_tree_view_get_selection(GTK_TREE_VIEW
                                             (contacts_app.entry_list));
     gtk_tree_selection_unselect_all(selection);
-    gtk_widget_grab_focus(gtk_container_get_focus_child
-                          (GTK_CONTAINER(contacts_app.edit_widget)));
+    gtk_widget_grab_focus(contacts_app.edit_widget);
 }
 
 static LibBalsaABErr
@@ -613,7 +612,7 @@ static void
 ab_set_edit_widget(LibBalsaAddress * address, gboolean can_remove)
 {
     libbalsa_address_set_edit_entries(address, contacts_app.entries);
-    gtk_widget_show_all(contacts_app.edit_widget);
+    gtk_widget_show(contacts_app.edit_widget);
     gtk_widget_set_sensitive(contacts_app.apply_button, FALSE);
     gtk_widget_set_sensitive(contacts_app.remove_button, can_remove);
     gtk_widget_set_sensitive(contacts_app.cancel_button, TRUE);
@@ -879,23 +878,24 @@ bab_filter_entry_changed(GtkWidget *entry, GtkWidget *button)
 static GtkWidget*
 bab_get_filter_box(void)
 {
-    GtkWidget *search_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
+    GtkWidget *search_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
     GtkWidget *find_label, *find_entry, *button;
 
     gtk_widget_show(search_hbox);
     find_label = gtk_label_new_with_mnemonic(_("F_ilter:"));
     gtk_widget_show(find_label);
-    gtk_box_pack_start(GTK_BOX(search_hbox), find_label, FALSE, FALSE, 1);
+    gtk_box_pack_start(GTK_BOX(search_hbox), find_label);
     find_entry = gtk_entry_new();
     gtk_widget_show(find_entry);
-    gtk_box_pack_start(GTK_BOX(search_hbox), find_entry, TRUE, TRUE, 1);
+    gtk_widget_set_hexpand(find_entry, TRUE);
+    gtk_box_pack_start(GTK_BOX(search_hbox), find_entry);
     gtk_widget_show(search_hbox);
     gtk_label_set_mnemonic_widget(GTK_LABEL(find_label), find_entry);
     button = gtk_button_new();
     gtk_container_add(GTK_CONTAINER(button),
                       gtk_image_new_from_icon_name("gtk-ok",
                                                    GTK_ICON_SIZE_BUTTON));
-    gtk_box_pack_start(GTK_BOX(search_hbox), button, FALSE, FALSE, 1);
+    gtk_box_pack_start(GTK_BOX(search_hbox), button);
 
     g_signal_connect(G_OBJECT(find_entry), "activate",
                      G_CALLBACK(bab_filter_entry_activate),
@@ -909,11 +909,15 @@ bab_get_filter_box(void)
     return search_hbox;
 }
 static gboolean
-ew_key_pressed(GtkEntry * entry, GdkEventKey * event, struct ABMainWindow *abmw)
+ew_key_pressed(GtkEntry * entry, GdkEvent * event, struct ABMainWindow *abmw)
 {
-    if (event->keyval != GDK_KEY_Escape)
+    guint keyval;
+
+    if (!(gdk_event_get_keyval(event, &keyval) && keyval == GDK_KEY_Escape))
        return FALSE;
+
     gtk_button_clicked(GTK_BUTTON(abmw->cancel_button));
+
     return TRUE;
 }
 
@@ -933,24 +937,24 @@ bab_window_new(GtkApplication * application)
     gtk_window_set_title(GTK_WINDOW(wnd), "Contacts");
 
     /* main vbox */
-    main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
+    main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
     gtk_container_add(GTK_CONTAINER(wnd), main_vbox);
 
     contacts_app.notebook = gtk_notebook_new();
-    gtk_box_pack_start(GTK_BOX(main_vbox),
-                      contacts_app.notebook, TRUE, TRUE, 1);
+    gtk_widget_set_hexpand(contacts_app.notebook, TRUE);
+    gtk_box_pack_start(GTK_BOX(main_vbox), contacts_app.notebook);
 
     browse_widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
 
     /* Entry widget for finding an address */
-    gtk_box_pack_start(GTK_BOX(browse_widget),
-                       bab_get_filter_box(), FALSE, FALSE, 1);
+    gtk_box_pack_start(GTK_BOX(browse_widget), bab_get_filter_box());
 
     scroll = gtk_scrolled_window_new(NULL, NULL);
     gtk_widget_show(scroll);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_box_pack_start(GTK_BOX(browse_widget), scroll, TRUE, TRUE, 1);
+    gtk_widget_set_hexpand(scroll, TRUE);
+    gtk_box_pack_start(GTK_BOX(browse_widget), scroll);
 
     contacts_app.entry_list = bab_window_list_new();
     gtk_container_add(GTK_CONTAINER(scroll), contacts_app.entry_list);
@@ -963,11 +967,8 @@ bab_window_new(GtkApplication * application)
         libbalsa_address_get_edit_widget(NULL, contacts_app.entries,
                                          G_CALLBACK(address_changed_cb),
                                          &contacts_app);
-    gtk_box_pack_start(GTK_BOX(edit_widget), contacts_app.edit_widget,
-                       FALSE, FALSE, 1);
-    gtk_box_pack_start(GTK_BOX(edit_widget),
-                       bab_get_edit_button_box(&contacts_app),
-                       FALSE, FALSE, 1);
+    gtk_box_pack_start(GTK_BOX(edit_widget), contacts_app.edit_widget);
+    gtk_box_pack_start(GTK_BOX(edit_widget), bab_get_edit_button_box(&contacts_app));
 
     gtk_notebook_append_page(GTK_NOTEBOOK(contacts_app.notebook), edit_widget,
                             gtk_label_new(_("Edit")));
@@ -980,7 +981,7 @@ bab_window_new(GtkApplication * application)
                     G_CALLBACK(ew_key_pressed), &contacts_app);
     gtk_window_set_default_size(GTK_WINDOW(wnd), 500, 400);
 
-    gtk_widget_show_all(wnd);
+    gtk_widget_show(wnd);
     return wnd;
 }
 
@@ -1112,7 +1113,7 @@ main(int argc, char *argv[])
 
     /* session management */
 
-    gtk_widget_show_all(ab_window);
+    gtk_widget_show(ab_window);
     gtk_widget_hide(contacts_app.edit_widget);
 
     gtk_main();
diff --git a/src/ab-window.c b/src/ab-window.c
index 5beb702..7d76fe3 100644
--- a/src/ab-window.c
+++ b/src/ab-window.c
@@ -229,13 +229,13 @@ static void
 balsa_ab_window_init(BalsaAbWindow *ab)
 {
     GtkWidget *find_label,
-       *vbox,
        *w,
        *grid,
        *hbox,
        *box2,
        *scrolled_window,
        *frame;
+    GtkBox *vbox;
 
     ab->current_address_book = NULL;
 
@@ -245,13 +245,13 @@ balsa_ab_window_init(BalsaAbWindow *ab)
     g_signal_connect(G_OBJECT(ab), "response",
                     G_CALLBACK(balsa_ab_window_response_cb), NULL);
 
-    vbox = gtk_dialog_get_content_area(GTK_DIALOG(ab));
+    vbox = (GtkBox *) gtk_dialog_get_content_area(GTK_DIALOG(ab));
 
     gtk_window_set_role(GTK_WINDOW(ab), "addressbook");
 
     /* hig defaults */
-    gtk_container_set_border_width(GTK_CONTAINER(ab), 6);
-    gtk_box_set_spacing(GTK_BOX(vbox), 12);
+    g_object_set(G_OBJECT(vbox), "margin", 6, NULL);
+    gtk_box_set_spacing(vbox, 12);
 
 
     /* The main address list */
@@ -279,13 +279,14 @@ balsa_ab_window_init(BalsaAbWindow *ab)
        /* More than one address book. */
        gtk_widget_show(ab->combo_box);
 
-    gtk_box_pack_start(GTK_BOX(vbox), ab->combo_box, FALSE, FALSE, 0);
+    gtk_box_pack_start(vbox, ab->combo_box);
 
     /* layout grid */
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
-    gtk_box_pack_start(GTK_BOX(vbox), grid, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(grid, TRUE);
+    gtk_box_pack_start(vbox, grid);
     gtk_widget_show(grid);
 
     /* -- grid column 1 -- */
@@ -302,8 +303,9 @@ balsa_ab_window_init(BalsaAbWindow *ab)
     /* Pack the find stuff into the grid */
     box2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
     gtk_grid_attach(GTK_GRID(grid), box2, 0, 0, 1, 1);
-    gtk_box_pack_start(GTK_BOX(box2), find_label, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(box2), ab->filter_entry, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(box2), find_label);
+    gtk_widget_set_hexpand(ab->filter_entry, TRUE);
+    gtk_box_pack_start(GTK_BOX(box2), ab->filter_entry);
     gtk_widget_show(GTK_WIDGET(box2));
 
 
@@ -347,7 +349,8 @@ balsa_ab_window_init(BalsaAbWindow *ab)
 
     w = gtk_button_new_from_icon_name("go-next-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
-    gtk_box_pack_start(GTK_BOX(ab->arrow_box), w, TRUE, FALSE, 0);
+    gtk_widget_set_hexpand(w, TRUE);
+    gtk_box_pack_start(GTK_BOX(ab->arrow_box), w);
     gtk_widget_show(w);
     g_signal_connect(G_OBJECT(w), "clicked",
                     G_CALLBACK(balsa_ab_window_move_to_recipient_list),
@@ -355,7 +358,8 @@ balsa_ab_window_init(BalsaAbWindow *ab)
 
     w = gtk_button_new_from_icon_name("go-previous-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
-    gtk_box_pack_start(GTK_BOX(ab->arrow_box), w, TRUE, FALSE, 0);
+    gtk_widget_set_hexpand(w, TRUE);
+    gtk_box_pack_start(GTK_BOX(ab->arrow_box), w);
     gtk_widget_show(w);
     g_signal_connect(G_OBJECT(w), "clicked",
                     G_CALLBACK(balsa_ab_window_remove_from_recipient_list),
@@ -400,15 +404,14 @@ balsa_ab_window_init(BalsaAbWindow *ab)
            ab->current_address_book->dist_list_mode);
 
     /* Pack them into a box  */
-    box2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
+    box2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
     gtk_box_set_homogeneous(GTK_BOX(box2), TRUE);
     gtk_container_add(GTK_CONTAINER(frame), box2);
-    gtk_box_pack_start(GTK_BOX(box2), ab->single_address_mode_radio,
-                      FALSE, FALSE, 1);
-    gtk_box_pack_start(GTK_BOX(box2), ab->dist_address_mode_radio,
-                      FALSE, FALSE, 1);
+    gtk_box_pack_start(GTK_BOX(box2), ab->single_address_mode_radio);
+    gtk_box_pack_start(GTK_BOX(box2), ab->dist_address_mode_radio);
     gtk_widget_show(box2);
-    gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 1);
+    gtk_widget_set_margin_top(frame, 1);
+    gtk_box_pack_start(vbox, frame);
 
     gtk_widget_grab_focus(ab->filter_entry);
 }
diff --git a/src/address-book-config.c b/src/address-book-config.c
index 2fdbd25..82680a5 100644
--- a/src/address-book-config.c
+++ b/src/address-book-config.c
@@ -125,7 +125,7 @@ balsa_address_book_config_new(LibBalsaAddressBook * address_book,
     if (address_book)
        gtk_widget_grab_focus(abc->name_entry);
 
-    gtk_widget_show_all(GTK_WIDGET(abc->window));
+    gtk_widget_show(GTK_WIDGET(abc->window));
 }
 
 void
@@ -141,7 +141,7 @@ balsa_address_book_config_new_from_type(GType type,
     abc->type = type;
     abc->window = create_dialog_from_type(abc);
 
-    gtk_widget_show_all(GTK_WIDGET(abc->window));
+    gtk_widget_show(GTK_WIDGET(abc->window));
 }
 
 static void
@@ -345,10 +345,8 @@ create_generic_dialog(AddressBookConfig * abc, const gchar * type)
 #if HAVE_MACOSX_DESKTOP
     libbalsa_macosx_menu_for_parent(dialog, abc->parent);
 #endif
-    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
-    gtk_container_set_border_width(GTK_CONTAINER
-                                   (gtk_dialog_get_content_area
-                                    (GTK_DIALOG(dialog))), 12);
+    g_object_set(G_OBJECT(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
+                 "margin", 5, NULL);
     g_signal_connect(G_OBJECT(dialog), "response",
                      G_CALLBACK(edit_book_response), abc);
 
@@ -419,7 +417,7 @@ create_externq_dialog(AddressBookConfig * abc)
 
     ab = (LibBalsaAddressBookExtern*)abc->address_book; /* may be NULL */
     grid = libbalsa_create_grid();
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 5);
+    g_object_set(G_OBJECT(grid), "margin", 5, NULL);
 
     /* mailbox name */
 
@@ -466,6 +464,7 @@ create_externq_dialog(AddressBookConfig * abc)
     }
 
     dialog = create_generic_dialog(abc, "Extern");
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_container_add(GTK_CONTAINER
                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
                       grid);
@@ -533,6 +532,7 @@ create_ldap_dialog(AddressBookConfig * abc)
     g_free(host);
     
     dialog = create_generic_dialog(abc, "LDAP");
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_container_add(GTK_CONTAINER
                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
                       grid);
@@ -550,7 +550,7 @@ create_gpe_dialog(AddressBookConfig * abc)
     LibBalsaAddressBook* ab;
     GtkWidget* label;
 
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 5);
+    g_object_set(G_OBJECT(grid), "margin", 5, NULL);
 
     ab = (LibBalsaAddressBook*)abc->address_book; /* may be NULL */
 
@@ -564,6 +564,7 @@ create_gpe_dialog(AddressBookConfig * abc)
     add_radio_buttons(grid, 1, abc);
 
     dialog = create_generic_dialog(abc, "GPE");
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_container_add(GTK_CONTAINER
                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
                       grid);
@@ -860,7 +861,7 @@ add_vcard_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_VCARD;
     abc->window = create_vcard_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 
 static void
@@ -868,7 +869,7 @@ add_externq_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_EXTERN;
     abc->window = create_externq_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 
 static void
@@ -876,7 +877,7 @@ add_ldif_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_LDIF;
     abc->window = create_ldif_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 
 #ifdef ENABLE_LDAP
@@ -885,7 +886,7 @@ add_ldap_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_LDAP;
     abc->window = create_ldap_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 #endif /* ENABLE_LDAP */
 
@@ -895,7 +896,7 @@ add_gpe_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_GPE;
     abc->window = create_gpe_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 #endif /* HAVE_SQLITE */
 
@@ -905,7 +906,7 @@ add_rubrica_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_RUBRICA;
     abc->window = create_rubrica_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 #endif /* HAVE_SQLITE */
 
@@ -915,7 +916,7 @@ add_osmo_cb(GtkWidget * widget, AddressBookConfig * abc)
 {
     abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_OSMO;
     abc->window = create_osmo_dialog(abc);
-    gtk_widget_show_all(abc->window);
+    gtk_widget_show(abc->window);
 }
 #endif /* HAVE_OSMO */
 
diff --git a/src/balsa-app.c b/src/balsa-app.c
index 9f9782a..b30d182 100644
--- a/src/balsa-app.c
+++ b/src/balsa-app.c
@@ -103,7 +103,7 @@ ask_password_real(LibBalsaServer * server, LibBalsaMailbox * mbox)
     if(server->remember_passwd)
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rememb), TRUE);
 
-    gtk_widget_show_all(content_area);
+    gtk_widget_show(content_area);
     gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
     gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
     gtk_widget_grab_focus (entry);
diff --git a/src/balsa-cite-bar.c b/src/balsa-cite-bar.c
index 77e33cb..65d3be2 100644
--- a/src/balsa-cite-bar.c
+++ b/src/balsa-cite-bar.c
@@ -35,14 +35,15 @@ struct _BalsaCiteBarClass {
     GtkWidgetClass parent_class;
 };
 
-static void balsa_cite_bar_get_preferred_width (GtkWidget * widget,
-                                                gint      * minimum_width,
-                                                gint      * natural_width);
-static void balsa_cite_bar_get_preferred_height(GtkWidget * widget,
-                                                gint      * minimum_height,
-                                                gint      * natural_height);
-static gboolean balsa_cite_bar_draw            (GtkWidget * widget,
-                                                cairo_t   * cr);
+static void balsa_cite_bar_measure  (GtkWidget    * widget,
+                                     GtkOrientation orientation,
+                                     gint           for_size,
+                                     gint         * minimum,
+                                     gint         * natural,
+                                     gint         * minimum_baseline,
+                                     gint         * natural_baseline);
+static gboolean balsa_cite_bar_draw (GtkWidget    * widget,
+                                     cairo_t      * cr);
 
 G_DEFINE_TYPE(BalsaCiteBar, balsa_cite_bar, GTK_TYPE_WIDGET)
 
@@ -57,9 +58,8 @@ balsa_cite_bar_class_init(BalsaCiteBarClass * class)
 
     parent_class = g_type_class_peek_parent(class);
 
-    widget_class->get_preferred_width  = balsa_cite_bar_get_preferred_width;
-    widget_class->get_preferred_height = balsa_cite_bar_get_preferred_height;
-    widget_class->draw                 = balsa_cite_bar_draw;
+    widget_class->measure = balsa_cite_bar_measure;
+    widget_class->draw    = balsa_cite_bar_draw;
 }
 
 static void
@@ -100,27 +100,26 @@ balsa_cite_bar_resize(BalsaCiteBar * cite_bar, gint height)
 }
 
 static void
-balsa_cite_bar_get_preferred_width(GtkWidget * widget,
-                                   gint      * minimum_width,
-                                   gint      * natural_width)
+balsa_cite_bar_measure(GtkWidget    * widget,
+                       GtkOrientation orientation,
+                       gint           for_size,
+                       gint         * minimum,
+                       gint         * natural,
+                       gint         * minimum_baseline,
+                       gint         * natural_baseline)
 {
     BalsaCiteBar *cite_bar;
 
     cite_bar = BALSA_CITE_BAR(widget);
-    *minimum_width = *natural_width =
-        cite_bar->bars * (cite_bar->width + cite_bar->space) -
-        cite_bar->space;
-}
 
-static void
-balsa_cite_bar_get_preferred_height(GtkWidget * widget,
-                                    gint      * minimum_height,
-                                    gint      * natural_height)
-{
-    BalsaCiteBar *cite_bar;
-
-    cite_bar = BALSA_CITE_BAR(widget);
-    *minimum_height = *natural_height = cite_bar->height;
+    if (orientation == GTK_ORIENTATION_HORIZONTAL) {
+        *minimum = *natural =
+            cite_bar->bars * (cite_bar->width + cite_bar->space) -
+            cite_bar->space;
+    } else {
+        *minimum = *natural = cite_bar->height;
+    }
+    *minimum_baseline = *natural_baseline = 0;
 }
 
 static gboolean
@@ -132,7 +131,7 @@ balsa_cite_bar_draw(GtkWidget * widget, cairo_t * cr)
     int n, x;
 
     context = gtk_widget_get_style_context(widget);
-    gtk_style_context_get_color(context, GTK_STATE_FLAG_NORMAL, &rgba);
+    gtk_style_context_get_color(context, &rgba);
     gdk_cairo_set_source_rgba(cr, &rgba);
 
     cite_bar = BALSA_CITE_BAR(widget);
diff --git a/src/balsa-index.c b/src/balsa-index.c
index 07a4505..41b6996 100644
--- a/src/balsa-index.c
+++ b/src/balsa-index.c
@@ -82,7 +82,7 @@ static void bndx_mailbox_changed_cb(LibBalsaMailbox * mailbox,
 static void bndx_selection_changed(GtkTreeSelection * selection,
                                    BalsaIndex * index);
 static gboolean bndx_button_event_press_cb(GtkWidget * tree_view,
-                                           GdkEventButton * event,
+                                           GdkEvent * event,
                                            gpointer data);
 static void bndx_row_activated(GtkTreeView * tree_view, GtkTreePath * path,
                                GtkTreeViewColumn * column,
@@ -118,7 +118,7 @@ static void bndx_drag_cb(GtkWidget* widget,
 
 /* Popup menu */
 static GtkWidget* bndx_popup_menu_create(BalsaIndex * index);
-static void bndx_do_popup(BalsaIndex * index, GdkEventButton * event);
+static void bndx_do_popup(BalsaIndex * index, GdkEvent * event);
 static GtkWidget *create_stock_menu_item(GtkWidget * menu,
                                          const gchar * label,
                                          GCallback cb, gpointer data);
@@ -277,20 +277,16 @@ static gint
 bndx_string_width(const gchar * text)
 {
     GtkWidget *label;
-    GtkWidget *window;
-    GtkAllocation allocation;
+    gint natural_width;
 
     label = gtk_label_new(NULL);
     gtk_label_set_markup((GtkLabel *) label, text);
+    gtk_widget_measure(label, GTK_ORIENTATION_HORIZONTAL,
+                       300, NULL, &natural_width, NULL, NULL);
+    g_object_ref_sink(label);
+    g_object_unref(label);
 
-    window = gtk_offscreen_window_new();
-    gtk_container_add(GTK_CONTAINER(window), label);
-    gtk_widget_show_all(window);
-
-    gtk_widget_get_allocation(window, &allocation);
-    gtk_widget_destroy(window);
-
-    return allocation.width;
+    return natural_width;
 }
 
 /* BalsaIndex instance init method; no tree store is set on the tree
@@ -460,7 +456,7 @@ bndx_instance_init(BalsaIndex * index)
                      G_CALLBACK(bndx_drag_cb), NULL);
 
     balsa_index_set_column_widths(index);
-    gtk_widget_show_all (GTK_WIDGET(index));
+    gtk_widget_show (GTK_WIDGET(index));
 }
 
 /*
@@ -606,16 +602,17 @@ bndx_selection_changed(GtkTreeSelection * selection, BalsaIndex * index)
 }
 
 static gboolean
-bndx_button_event_press_cb(GtkWidget * widget, GdkEventButton * event,
+bndx_button_event_press_cb(GtkWidget * widget, GdkEvent * event,
                            gpointer data)
 {
     GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
     GtkTreePath *path;
     BalsaIndex *index = BALSA_INDEX(widget);
+    gdouble x_win, y_win;
 
     g_return_val_if_fail(event, FALSE);
     if (!gdk_event_triggers_context_menu((GdkEvent *) event)
-        || event->window != gtk_tree_view_get_bin_window(tree_view))
+        || !gdk_event_get_coords(event, &x_win, &y_win))
         return FALSE;
 
     /* pop up the context menu:
@@ -623,7 +620,7 @@ bndx_button_event_press_cb(GtkWidget * widget, GdkEventButton * event,
      *   the selection;
      * - if it isn't, select it (cancelling any previous selection)
      * - then create and show the menu */
-    if (gtk_tree_view_get_path_at_pos(tree_view, event->x, event->y,
+    if (gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win, (gint) y_win,
                                       &path, NULL, NULL, NULL)) {
         GtkTreeSelection *selection =
             gtk_tree_view_get_selection(tree_view);
@@ -1912,7 +1909,7 @@ bndx_popup_position_func(GtkMenu * menu, gint * x, gint * y,
 #endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
 
 static void
-bndx_do_popup(BalsaIndex * index, GdkEventButton * event)
+bndx_do_popup(BalsaIndex * index, GdkEvent * event)
 {
     GtkWidget *menu = index->popup_menu;
     GtkWidget *submenu;
@@ -1965,24 +1962,15 @@ bndx_do_popup(BalsaIndex * index, GdkEventButton * event)
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(index->move_to_item),
                               submenu);
 
-    gtk_widget_show_all(menu);
+    gtk_widget_show(menu);
 
-#if GTK_CHECK_VERSION(3, 22, 0)
-    if (event)
-        gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *) event);
-    else
+    if (event != NULL) {
+        gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
+    } else {
         gtk_menu_popup_at_widget(GTK_MENU(menu), GTK_WIDGET(index),
                                  GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER,
                                  NULL);
-#else                           /*GTK_CHECK_VERSION(3, 22, 0) */
-    if (event)
-        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
-                       event->button, event->time);
-    else
-        gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                       bndx_popup_position_func, index,
-                       0, gtk_get_current_event_time());
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
+    }
 }
 
 static GtkWidget *
@@ -2652,9 +2640,9 @@ balsa_index_pipe(BalsaIndex * index)
     libbalsa_macosx_menu_for_parent(dialog, GTK_WINDOW(balsa_app.main_window));
 #endif
     gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
-    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
 
     vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+    g_object_set(G_OBJECT(vbox), "margin", 5, NULL);
     gtk_box_set_spacing(GTK_BOX(vbox), HIG_PADDING);
     gtk_container_add(GTK_CONTAINER(vbox), label =
                       gtk_label_new(_("Specify the program to run:")));
diff --git a/src/balsa-mblist.c b/src/balsa-mblist.c
index 95f009f..fae7a9d 100644
--- a/src/balsa-mblist.c
+++ b/src/balsa-mblist.c
@@ -109,7 +109,7 @@ static gint bmbl_row_compare(GtkTreeModel * model,
                              GtkTreeIter * iter1,
                              GtkTreeIter * iter2, gpointer data);
 static gboolean bmbl_button_press_cb(GtkWidget * widget,
-                                     GdkEventButton * event,
+                                     GdkEvent * event,
                                      gpointer data);
 static void bmbl_column_resize(GtkWidget * widget,
                                GtkAllocation * allocation, gpointer data);
@@ -135,7 +135,7 @@ static gboolean bmbl_store_redraw_mbnode(GtkTreeIter * iter,
 static void bmbl_node_style(GtkTreeModel * model, GtkTreeIter * iter);
 static gint bmbl_core_mailbox(LibBalsaMailbox * mailbox);
 static void bmbl_do_popup(GtkTreeView * tree_view, GtkTreePath * path,
-                          GdkEventButton * event);
+                          GdkEvent * event);
 static void bmbl_expand_to_row(BalsaMBList * mblist, GtkTreePath * path);
 /* end of prototypes */
 
@@ -682,17 +682,18 @@ bmbl_row_compare(GtkTreeModel * model, GtkTreeIter * iter1,
    (clicking on folders is passed to GtkTreeView and may trigger expand events
 */
 static gboolean
-bmbl_button_press_cb(GtkWidget * widget, GdkEventButton * event,
+bmbl_button_press_cb(GtkWidget * widget, GdkEvent * event,
                      gpointer data)
 {
     GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
     GtkTreePath *path;
+    gdouble x_win, y_win;
 
     if (!gdk_event_triggers_context_menu((GdkEvent *) event)
-        || event->window != gtk_tree_view_get_bin_window(tree_view))
+        || !gdk_event_get_coords(event, &x_win, &y_win))
         return FALSE;
 
-    if (!gtk_tree_view_get_path_at_pos(tree_view, event->x, event->y,
+    if (!gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win, (gint) y_win,
                                        &path, NULL, NULL, NULL))
         path = NULL;
     bmbl_do_popup(tree_view, path, event);
@@ -722,13 +723,9 @@ bmbl_popup_menu(GtkWidget * widget)
  */
 static void
 bmbl_do_popup(GtkTreeView * tree_view, GtkTreePath * path,
-              GdkEventButton * event)
+              GdkEvent * event)
 {
     BalsaMailboxNode *mbnode = NULL;
-#if !GTK_CHECK_VERSION(3, 22, 0)
-    gint event_button;
-    guint event_time;
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
     GtkWidget *menu;
 
     if (path) {
@@ -740,30 +737,16 @@ bmbl_do_popup(GtkTreeView * tree_view, GtkTreePath * path,
         gtk_tree_path_free(path);
     }
 
-#if !GTK_CHECK_VERSION(3, 22, 0)
-    if (event) {
-        event_button = event->button;
-        event_time = event->time;
-    } else {
-        event_button = 0;
-        event_time = gtk_get_current_event_time();
-    }
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
 
     menu = balsa_mailbox_node_get_context_menu(mbnode);
     g_object_ref(menu);
     g_object_ref_sink(menu);
-#if GTK_CHECK_VERSION(3, 22, 0)
     if (event)
-        gtk_menu_popup_at_pointer(GTK_MENU(menu), (GdkEvent *) event);
+        gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
     else
         gtk_menu_popup_at_widget(GTK_MENU(menu), GTK_WIDGET(tree_view),
                                  GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER,
                                  NULL);
-#else                           /*GTK_CHECK_VERSION(3, 22, 0) */
-    gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
-                  event_button, event_time);
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
     g_object_unref(menu);
 
     if (mbnode)
@@ -885,6 +868,8 @@ bmbl_select_mailbox(GtkTreeSelection * selection, gpointer data)
     GtkTreeModel *model =
         gtk_tree_view_get_model(tree_view);
     GtkTreePath *path;
+    guint button;
+    gdouble x_win, y_win;
 
     if (!event) {
        GtkTreeIter iter;
@@ -906,18 +891,17 @@ bmbl_select_mailbox(GtkTreeSelection * selection, gpointer data)
        g_signal_handlers_unblock_by_func(selection, bmbl_select_mailbox, NULL);
         return;
     }
-    if (event->type != GDK_BUTTON_PRESS
+    if (gdk_event_get_event_type(event) != GDK_BUTTON_PRESS
             /* keyboard navigation */
-        || event->button.button != 1
+        || !(gdk_event_get_button(event, &button) && button == 1)
             /* soft select */
-        || event->button.window != gtk_tree_view_get_bin_window(tree_view)
-            /* click on a different widget */ ) {
+        || !gdk_event_get_coords(event, &x_win, &y_win)) {
         gdk_event_free(event);
         return;
     }
 
-    if (!gtk_tree_view_get_path_at_pos(tree_view, event->button.x,
-                                       event->button.y, &path,
+    if (!gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win,
+                                       (gint) y_win, &path,
                                        NULL, NULL, NULL)) {
         /* GtkTreeView selects the first node in the tree when the
          * widget first gets the focus, whether it's a keyboard event or
@@ -1772,7 +1756,7 @@ bmbl_mru_menu(GtkWindow * window, GList ** url_list,
                           G_CALLBACK(bmbl_mru_show_tree), mru,
                           (GClosureNotify) g_free, (GConnectFlags) 0);
 
-    gtk_widget_show_all(menu);
+    gtk_widget_show(menu);
 
     return menu;
 }
@@ -1880,7 +1864,7 @@ bmbl_mru_show_tree(GtkWidget * widget, gpointer data)
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
     gtk_container_add(GTK_CONTAINER(scroll), mblist);
-    gtk_widget_show_all(scroll);
+    gtk_widget_show(scroll);
 
     dialog =
         gtk_dialog_new_with_buttons(_("Choose destination folder"),
@@ -1892,9 +1876,10 @@ bmbl_mru_show_tree(GtkWidget * widget, gpointer data)
 #if HAVE_MACOSX_DESKTOP
     libbalsa_macosx_menu_for_parent(dialog, mru->window);
 #endif
+    gtk_widget_set_vexpand(scroll, TRUE);
     gtk_box_pack_start(GTK_BOX
                       (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                      scroll, TRUE, TRUE, 0);
+                      scroll);
 
     g_signal_connect(dialog, "size-allocate",
                      G_CALLBACK(bmbl_mru_size_allocate_cb), NULL);
@@ -1922,6 +1907,7 @@ bmbl_mru_selected_cb(GtkTreeSelection * selection, gpointer data)
     GdkEvent *event;
     GtkTreeView *tree_view;
     GtkTreePath *path;
+    gdouble x_win, y_win;
 
     if (!data)
         return;
@@ -1931,9 +1917,10 @@ bmbl_mru_selected_cb(GtkTreeSelection * selection, gpointer data)
         return;
 
     tree_view = gtk_tree_selection_get_tree_view(selection);
-    if (event->type != GDK_BUTTON_PRESS ||
-        !gtk_tree_view_get_path_at_pos(tree_view, event->button.x,
-                                       event->button.y, &path,
+    if (gdk_event_get_event_type(event) != GDK_BUTTON_PRESS ||
+        !gdk_event_get_coords(event, &x_win, &y_win) ||
+        !gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win,
+                                       (gint) y_win, &path,
                                        NULL, NULL, NULL)) {
         gtk_tree_selection_unselect_all(selection);
         gdk_event_free(event);
diff --git a/src/balsa-message.c b/src/balsa-message.c
index d557ff3..975d62e 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -126,7 +126,7 @@ static void select_part(BalsaMessage * bm, BalsaPartInfo *info);
 static void tree_activate_row_cb(GtkTreeView *treeview, GtkTreePath *arg1,
                                  GtkTreeViewColumn *arg2, gpointer user_data);
 static gboolean tree_menu_popup_key_cb(GtkWidget *widget, gpointer user_data);
-static gboolean tree_button_press_cb(GtkWidget * widget, GdkEventButton * event,
+static gboolean tree_button_press_cb(GtkWidget * widget, GdkEvent * event,
                                      gpointer data);
 
 static void part_info_init(BalsaMessage * bm, BalsaPartInfo * info);
@@ -605,12 +605,11 @@ bm_find_bar_new(BalsaMessage * bm)
     gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Find:")),
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Find:")));
     bm->find_entry = gtk_entry_new();
     g_signal_connect(bm->find_entry, "changed",
                      G_CALLBACK(bm_find_entry_changed_cb), bm);
-    gtk_box_pack_start(GTK_BOX(hbox), bm->find_entry, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), bm->find_entry);
 
     tool_item = gtk_tool_item_new();
     gtk_container_add(GTK_CONTAINER(tool_item), hbox);
@@ -644,19 +643,25 @@ bm_find_bar_new(BalsaMessage * bm)
 static void bm_disable_find_entry(BalsaMessage * bm);
 
 static gboolean
-bm_find_pass_to_entry(BalsaMessage * bm, GdkEventKey * event)
+bm_find_pass_to_entry(BalsaMessage * bm, GdkEvent * event)
 {
     gboolean res = TRUE;
+    guint keyval;
+    GdkModifierType state;
 
-    switch (event->keyval) {
+    if (!gdk_event_get_keyval(event, &keyval) ||
+        !gdk_event_get_state(event, &state))
+        return FALSE;
+
+    switch (keyval) {
     case GDK_KEY_Escape:
     case GDK_KEY_Return:
     case GDK_KEY_KP_Enter:
         bm_disable_find_entry(bm);
         return res;
     case GDK_KEY_g:
-        if ((event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ==
-            GDK_CONTROL_MASK && gtk_widget_get_sensitive(bm->find_next)) {
+        if ((state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) == GDK_CONTROL_MASK &&
+            gtk_widget_get_sensitive(bm->find_next)) {
             bm_find_again(bm, bm->find_forward);
             return res;
         }
@@ -697,14 +702,15 @@ balsa_message_init(BalsaMessage * bm)
     GtkTreeSelection *selection;
 
     bm->switcher = gtk_stack_switcher_new();
-    gtk_box_pack_start(GTK_BOX(bm), bm->switcher, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(bm), bm->switcher);
 
     bm->stack = gtk_stack_new();
     stack = GTK_STACK(bm->stack);
     gtk_stack_set_transition_type(stack,
                                   GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
     gtk_stack_switcher_set_stack(GTK_STACK_SWITCHER(bm->switcher), stack);
-    gtk_box_pack_start(GTK_BOX(bm), bm->stack, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(bm->stack, TRUE);
+    gtk_box_pack_start(GTK_BOX(bm), bm->stack);
 
     /* Box to hold the scrolled window and the find bar */
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
@@ -717,7 +723,8 @@ balsa_message_init(BalsaMessage * bm)
                                    GTK_POLICY_AUTOMATIC);
     g_signal_connect(scroll, "key_press_event",
                     G_CALLBACK(balsa_mime_widget_key_press_event), bm);
-    gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(scroll, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), scroll);
 #if !GTK_CHECK_VERSION(3, 15, 0)
     g_signal_connect_after(bm, "style-updated",
                           G_CALLBACK(bm_on_set_style), bm);
@@ -806,11 +813,11 @@ balsa_message_init(BalsaMessage * bm)
     bm->wrap_text = balsa_app.browse_wrap;
     bm->shown_headers = balsa_app.shown_headers;
 
-    gtk_widget_show_all(GTK_WIDGET(bm));
+    gtk_widget_show(GTK_WIDGET(bm));
 
     /* Find-in-message toolbar that is hidden by default. */
     bm->find_bar = bm_find_bar_new(bm);
-    gtk_box_pack_start(GTK_BOX(vbox), bm->find_bar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), bm->find_bar);
 }
 
 static void
@@ -936,7 +943,7 @@ collect_selected_info(GtkTreeModel * model, GtkTreePath * path,
 }
 
 static void
-tree_mult_selection_popup(BalsaMessage * bm, GdkEventButton * event,
+tree_mult_selection_popup(BalsaMessage * bm, GdkEvent * event,
                           GtkTreeSelection * selection)
 {
     gint selected;
@@ -960,23 +967,14 @@ tree_mult_selection_popup(BalsaMessage * bm, GdkEventButton * event,
     if (selected == 1) {
         BalsaPartInfo *info = BALSA_PART_INFO(bm->save_all_list->data);
         if (info->popup_menu) {
-#if GTK_CHECK_VERSION(3, 22, 0)
-            if (event)
-                gtk_menu_popup_at_pointer(GTK_MENU(info->popup_menu),
-                                          (GdkEvent *) event);
-            else
+            if (event != NULL) {
+                gtk_menu_popup_at_pointer(GTK_MENU(info->popup_menu), event);
+            } else {
                 gtk_menu_popup_at_widget(GTK_MENU(info->popup_menu),
                                          GTK_WIDGET(bm),
                                          GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER,
                                          NULL);
-#else                           /*GTK_CHECK_VERSION(3, 22, 0) */
-            if (event)
-                gtk_menu_popup(GTK_MENU(info->popup_menu), NULL, NULL, NULL,
-                               NULL, event->button, event->time);
-            else
-                gtk_menu_popup(GTK_MENU(info->popup_menu), NULL, NULL, NULL,
-                               NULL, 0, gtk_get_current_event_time());
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
+            }
         }
         g_list_free(bm->save_all_list);
         bm->save_all_list = NULL;
@@ -1031,17 +1029,15 @@ tree_menu_popup_key_cb(GtkWidget *widget, gpointer user_data)
 }
 
 static gboolean
-tree_button_press_cb(GtkWidget * widget, GdkEventButton * event,
-                     gpointer data)
+tree_button_press_cb(GtkWidget * widget, GdkEvent * event, gpointer data)
 {
     BalsaMessage * bm = (BalsaMessage *)data;
     GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
     GtkTreePath *path;
+    gdouble x_win, y_win;
 
-    g_return_val_if_fail(bm, FALSE);
-    g_return_val_if_fail(event, FALSE);
-    if (!gdk_event_triggers_context_menu((GdkEvent *) event)
-        || event->window != gtk_tree_view_get_bin_window(tree_view))
+    if (!gdk_event_triggers_context_menu(event) ||
+        !gdk_event_get_coords(event, &x_win, &y_win))
         return FALSE;
 
     /* If the part which received the click is already selected, don't change
@@ -1050,7 +1046,7 @@ tree_button_press_cb(GtkWidget * widget, GdkEventButton * event,
      * If the receiving part is not selected, select (only) this part and pop
      * up its menu.
      */
-    if (gtk_tree_view_get_path_at_pos(tree_view, event->x, event->y,
+    if (gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win, (gint) y_win,
                                       &path, NULL, NULL, NULL)) {
         GtkTreeIter iter;
         GtkTreeSelection * selection =
@@ -1066,15 +1062,9 @@ tree_button_press_cb(GtkWidget * widget, GdkEventButton * event,
                                      FALSE);
             if (gtk_tree_model_get_iter (model, &iter, path)) {
                 gtk_tree_model_get(model, &iter, PART_INFO_COLUMN, &info, -1);
-                if (info) {
-                    if (info->popup_menu) {
-#if GTK_CHECK_VERSION(3, 22, 0)
-                        gtk_menu_popup_at_pointer(GTK_MENU(info->popup_menu),
-                                                  (GdkEvent *) event);
-#else                           /*GTK_CHECK_VERSION(3, 22, 0) */
-                        gtk_menu_popup(GTK_MENU(info->popup_menu), NULL, NULL,
-                                       NULL, NULL, event->button, event->time);
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
+                if (info != NULL) {
+                    if (info->popup_menu != NULL) {
+                        gtk_menu_popup_at_pointer(GTK_MENU(info->popup_menu), event);
                     }
                     g_object_unref(info);
                 }
@@ -1286,7 +1276,7 @@ balsa_message_set_displayed_headers(BalsaMessage * bmessage,
              balsa_message_set_embedded_hdr, bmessage);
        if (bm_header_widget_att_button(bmessage)) {
            if (bmessage->info_count > 1)
-               gtk_widget_show_all
+               gtk_widget_show
                    (GTK_WIDGET(bm_header_widget_att_button(bmessage)));
            else
                gtk_widget_hide
@@ -1593,8 +1583,8 @@ display_face(BalsaMessage * bm)
         return;
     }
 
-    gtk_box_pack_start(GTK_BOX(face_box), image, FALSE, FALSE, 0);
-    gtk_widget_show_all(face_box);
+    gtk_box_pack_start(GTK_BOX(face_box), image);
+    gtk_widget_show(face_box);
 }
 
 static void
@@ -1607,8 +1597,8 @@ display_content(BalsaMessage * bm)
     g_object_ref_sink(bm->parts_popup);
     display_parts(bm, bm->message->body_list, NULL, NULL);
     if (bm->info_count > 1) {
-       gtk_widget_show_all(bm->parts_popup);
-       gtk_widget_show_all
+       gtk_widget_show(bm->parts_popup);
+       gtk_widget_show
            (GTK_WIDGET(bm_header_widget_att_button(bm)));
     } else
        gtk_widget_hide
@@ -1688,7 +1678,7 @@ part_create_menu (BalsaPartInfo* info)
         gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
     }
 
-    gtk_widget_show_all (info->popup_menu);
+    gtk_widget_show (info->popup_menu);
     g_free (content_type);
 }
 
@@ -2227,8 +2217,10 @@ add_part(BalsaMessage * bm, BalsaPartInfo * info, GtkWidget * container)
     if (info->mime_widget == NULL)
        part_info_init(bm, info);
 
-    if ((widget = info->mime_widget->widget))
-        gtk_box_pack_start(GTK_BOX(container), widget, TRUE, TRUE, 0);
+    if ((widget = info->mime_widget->widget)) {
+        gtk_widget_set_vexpand(widget, TRUE);
+        gtk_box_pack_start(GTK_BOX(container), widget);
+    }
 
     body =
         add_multipart(bm, info->body,
@@ -2467,7 +2459,7 @@ handle_mdn_request(GtkWindow *parent, LibBalsaMessage *message)
         reply_to =
             internet_address_list_to_string (message->headers->dispnotify_to,
                                             FALSE);
-        gtk_widget_show_all (create_mdn_dialog (parent, sender, reply_to, mdn,
+        gtk_widget_show (create_mdn_dialog (parent, sender, reply_to, mdn,
                                                 mdn_ident));
         g_free (reply_to);
         g_free (sender);
@@ -3304,7 +3296,7 @@ balsa_message_find_in_message(BalsaMessage * bm)
 
         bm_find_set_status(bm, BM_FIND_STATUS_INIT);
 
-        gtk_widget_show_all(bm->find_bar);
+        gtk_widget_show(bm->find_bar);
         if (gtk_widget_get_window(bm->find_entry))
             gtk_widget_grab_focus(bm->find_entry);
     }
diff --git a/src/balsa-mime-widget-callbacks.c b/src/balsa-mime-widget-callbacks.c
index efa1e25..0500b94 100644
--- a/src/balsa-mime-widget-callbacks.c
+++ b/src/balsa-mime-widget-callbacks.c
@@ -193,12 +193,19 @@ scroll_change(GtkAdjustment * adj, gint diff, BalsaMessage * bm)
     gtk_adjustment_set_value(adj, MIN(value, upper));
 }
 
-gint
-balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
+gboolean
+balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
                                  BalsaMessage * bm)
 {
     GtkAdjustment *adj;
     int page_adjust;
+    guint keyval;
+    GdkModifierType state;
+
+    if (!gdk_event_get_keyval(event, &keyval) ||
+        !gdk_event_get_state(event, &state)) {
+        return FALSE;
+    }
 
     adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW
                                               (bm->scroll));
@@ -207,7 +214,7 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
         (gtk_adjustment_get_page_size(adj) * balsa_app.pgdown_percent) /
         100 : gtk_adjustment_get_page_increment(adj);
 
-    switch (event->keyval) {
+    switch (keyval) {
     case GDK_KEY_Up:
         scroll_change(adj, -gtk_adjustment_get_step_increment(adj), NULL);
         break;
@@ -221,19 +228,19 @@ balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
         scroll_change(adj, page_adjust, NULL);
         break;
     case GDK_KEY_Home:
-        if (event->state & GDK_CONTROL_MASK)
+        if (state & GDK_CONTROL_MASK)
             scroll_change(adj, -gtk_adjustment_get_value(adj), NULL);
         else
             return FALSE;
         break;
     case GDK_KEY_End:
-        if (event->state & GDK_CONTROL_MASK)
+        if (state & GDK_CONTROL_MASK)
             scroll_change(adj, gtk_adjustment_get_upper(adj), NULL);
         else
             return FALSE;
         break;
     case GDK_KEY_F10:
-        if (event->state & GDK_SHIFT_MASK) {
+        if (state & GDK_SHIFT_MASK) {
            GtkWidget *current_widget = balsa_message_current_part_widget(bm);
 
            if (current_widget) {
diff --git a/src/balsa-mime-widget-callbacks.h b/src/balsa-mime-widget-callbacks.h
index c6abc8d..a54ab5a 100644
--- a/src/balsa-mime-widget-callbacks.h
+++ b/src/balsa-mime-widget-callbacks.h
@@ -30,8 +30,8 @@ G_BEGIN_DECLS
 void balsa_mime_widget_ctx_menu_cb(GtkWidget * menu_item, LibBalsaMessageBody * mime_body);
 void balsa_mime_widget_ctx_menu_save(GtkWidget * parent_widget,
                                      LibBalsaMessageBody * mime_body);
-gint balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEventKey * event,
-                                      BalsaMessage * bm);
+gboolean balsa_mime_widget_key_press_event(GtkWidget * widget, GdkEvent * event,
+                                           BalsaMessage * bm);
 gint balsa_mime_widget_limit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
 gint balsa_mime_widget_unlimit_focus(GtkWidget * widget, GdkEventFocus * event, BalsaMessage * bm);
 
diff --git a/src/balsa-mime-widget-image.c b/src/balsa-mime-widget-image.c
index 47834a6..0749270 100644
--- a/src/balsa-mime-widget-image.c
+++ b/src/balsa-mime-widget-image.c
@@ -126,26 +126,23 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
     mwi = g_object_new(BALSA_TYPE_MIME_WIDGET_IMAGE, NULL);
     mw = (BalsaMimeWidget *) mwi;
 
+#ifdef WE_STILL_NEED_AN_EVENT_BOX
     mw->widget = gtk_event_box_new();
+#endif
     g_signal_connect(G_OBJECT(mw->widget), "button-press-event",
                      G_CALLBACK(balsa_image_button_press_cb), data);
 
-#if !GTK_CHECK_VERSION(3, 15, 0)
-    mwi->context =
-        gtk_widget_get_style_context(GTK_WIDGET(bm->scroll));
-    bmwi_context_changed_cb(mwi->context, mw);
-    mwi->context_changed_handler_id =
-        g_signal_connect(mwi->context, "changed",
-                         G_CALLBACK(bmwi_context_changed_cb), mw);
-#endif
-
     image = gtk_image_new_from_icon_name("image-missing",
                                          GTK_ICON_SIZE_BUTTON);
     g_object_set_data(G_OBJECT(image), "orig-width",
                      GINT_TO_POINTER(gdk_pixbuf_get_width(pixbuf)));
     g_object_set_data(G_OBJECT(image), "mime-body", mime_body);
     g_object_unref(pixbuf);
+#ifdef WE_STILL_NEED_AN_EVENT_BOX
     gtk_container_add(GTK_CONTAINER(mw->widget), image);
+#else
+    mw->widget = image;
+#endif
 
     return mw;
 }
diff --git a/src/balsa-mime-widget-message.c b/src/balsa-mime-widget-message.c
index 9a023d8..48ab48b 100644
--- a/src/balsa-mime-widget-message.c
+++ b/src/balsa-mime-widget-message.c
@@ -130,12 +130,11 @@ balsa_mime_widget_new_message(BalsaMessage * bm,
        mw->widget = gtk_frame_new(NULL);
 
        mw->container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
-       gtk_container_set_border_width(GTK_CONTAINER(mw->container),
-                                      BMW_MESSAGE_PADDING);
+       g_object_set(G_OBJECT(mw->container), "margin", BMW_MESSAGE_PADDING, NULL);
        gtk_container_add(GTK_CONTAINER(mw->widget), mw->container);
 
         mw->header_widget = emb_hdrs = bm_header_widget_new(bm, NULL);
-       gtk_box_pack_start(GTK_BOX(mw->container), emb_hdrs, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(mw->container), emb_hdrs);
 
         bmw_message_set_headers(bm, mw, mime_body,
                                 bm->shown_headers == HEADERS_ALL);
@@ -227,18 +226,16 @@ bmw_message_extbody_url(LibBalsaMessageBody * mime_body,
 
     /* now create & return the widget... */
     mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
-    
+
     mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
-    gtk_container_set_border_width(GTK_CONTAINER(mw->widget),
-                                  BMW_CONTAINER_BORDER);
+    g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
 
-    gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str), FALSE,
-                      FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str));
     g_string_free(msg, TRUE);
 
     button = gtk_button_new_with_label(url);
-    gtk_box_pack_start(GTK_BOX(mw->widget), button, FALSE, FALSE,
-                      BMW_BUTTON_PACK_SPACE);
+    gtk_widget_set_margin_top(button, BMW_BUTTON_PACK_SPACE);
+    gtk_box_pack_start(GTK_BOX(mw->widget), button);
     g_object_set_data_full(G_OBJECT(button), "call_url", url,
                           (GDestroyNotify) g_free);
     g_signal_connect(G_OBJECT(button), "clicked",
@@ -276,18 +273,16 @@ bmw_message_extbody_mail(LibBalsaMessageBody * mime_body)
     mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
     
     mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
-    gtk_container_set_border_width(GTK_CONTAINER(mw->widget),
-                                  BMW_CONTAINER_BORDER);
+    g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
 
-    gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str), FALSE,
-                      FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg->str));
     g_string_free(msg, TRUE);
 
     button =
        gtk_button_new_with_mnemonic(_
                                     ("Se_nd message to obtain this part"));
-    gtk_box_pack_start(GTK_BOX(mw->widget), button, FALSE, FALSE,
-                      BMW_BUTTON_PACK_SPACE);
+    gtk_widget_set_margin_top(button, BMW_BUTTON_PACK_SPACE);
+    gtk_box_pack_start(GTK_BOX(mw->widget), button);
     g_signal_connect(G_OBJECT(button), "clicked",
                     G_CALLBACK(extbody_send_mail), (gpointer) mime_body);
 
@@ -402,14 +397,16 @@ balsa_mime_widget_new_message_tl(BalsaMessage * bm,
     mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
 
     mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
-    gtk_container_set_border_width(GTK_CONTAINER(mw->widget), BMW_MESSAGE_PADDING);
+    g_object_set(G_OBJECT(mw->widget), "margin", BMW_MESSAGE_PADDING, NULL);
 
     mw->header_widget = headers = bm_header_widget_new(bm, tl_buttons);
-    gtk_box_pack_start(GTK_BOX(mw->widget), headers, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(mw->widget), headers);
 
     mw->container = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_MESSAGE_PADDING);
-    gtk_box_pack_start(GTK_BOX(mw->widget), mw->container, TRUE, TRUE,
-                      BMW_CONTAINER_BORDER - BMW_MESSAGE_PADDING);
+    gtk_widget_set_vexpand(mw->container, TRUE);
+    gtk_widget_set_margin_top(mw->container,
+                              BMW_CONTAINER_BORDER - BMW_MESSAGE_PADDING);
+    gtk_box_pack_start(GTK_BOX(mw->widget), mw->container);
 
     return mw;
 }
@@ -455,7 +452,7 @@ bm_header_extend_popup(GtkWidget * widget, GtkMenu * menu, gpointer arg)
                               G_CALLBACK(balsa_message_copy_part), arg);
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
                               submenu);
-    gtk_widget_show_all(submenu);
+    gtk_widget_show(submenu);
 }
 
 static GtkWidget *
@@ -486,12 +483,12 @@ bm_header_widget_new(BalsaMessage * bm, GtkWidget * const * buttons)
 #ifdef GTK_INFO_BAR_WRAPPING_IS_BROKEN
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     gtk_container_add(GTK_CONTAINER(hbox), grid);
-    gtk_container_set_border_width(GTK_CONTAINER(hbox), 6);
+    g_object_set(G_OBJECT(hbox), "margin", 6, NULL);
 
     action_area = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
     gtk_button_box_set_layout(GTK_BUTTON_BOX(action_area),
                               GTK_BUTTONBOX_START);
-    gtk_box_pack_end(GTK_BOX(hbox), action_area, FALSE, TRUE, 0);
+    gtk_box_pack_end(GTK_BOX(hbox), action_area);
 #else                           /* GTK_INFO_BAR_WRAPPING_IS_BROKEN */
     info_bar_widget = gtk_info_bar_new();
     info_bar = GTK_INFO_BAR(info_bar_widget);
@@ -584,7 +581,7 @@ add_header_gchar(GtkGrid * grid, const gchar * header, const gchar * label,
     }
 
     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);
 
     lab = gtk_label_new(label);
@@ -644,7 +641,7 @@ add_header_gchar(GtkGrid * grid, const gchar * header, const gchar * label,
         hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
         gtk_container_add(GTK_CONTAINER(hbox), value_label);
         gtk_container_add(GTK_CONTAINER(hbox), expander);
-        gtk_widget_show_all(hbox);
+        gtk_widget_show(hbox);
         gtk_grid_attach_next_to(grid, hbox, lab, GTK_POS_RIGHT, 1, 1);
     }
 
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index a4f6d78..2fa8d87 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -91,13 +91,13 @@ static GdkCursor *url_cursor_normal = NULL;
 static GdkCursor *url_cursor_over_url = NULL;
 
 
-static gboolean store_button_coords(GtkWidget * widget, GdkEventButton * event, gpointer data);
-static gboolean check_over_url(GtkWidget * widget, GdkEventMotion * event, GList * url_list);
+static gboolean store_button_coords(GtkWidget * widget, GdkEvent * event, gpointer data);
+static gboolean check_over_url(GtkWidget * widget, GdkEvent * event, GList * url_list);
 static void pointer_over_url(GtkWidget * widget, message_url_t * url, gboolean set);
 static void prepare_url_offsets(GtkTextBuffer * buffer, GList * url_list);
 static void url_found_cb(GtkTextBuffer * buffer, GtkTextIter * iter,
                          const gchar * buf, guint len, gpointer data);
-static gboolean check_call_url(GtkWidget * widget, GdkEventButton * event, GList * url_list);
+static gboolean check_call_url(GtkWidget * widget, GdkEvent * event, GList * url_list);
 static message_url_t * find_url(GtkWidget * widget, gint x, gint y, GList * url_list);
 static void handle_url(const gchar* url);
 static void free_url_list(GList * url_list);
@@ -312,7 +312,7 @@ bm_modify_font_from_string(GtkWidget * widget, const char *font)
     css = libbalsa_font_string_to_css(font, BALSA_MESSAGE_TEXT_HEADER);
 
     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(widget) ,
@@ -519,7 +519,7 @@ text_view_url_popup(GtkTextView *textview, GtkMenu *menu)
                       G_CALLBACK (url_send_cb), (gpointer)url);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
 
-    gtk_widget_show_all(GTK_WIDGET(menu));
+    gtk_widget_show(GTK_WIDGET(menu));
 
     return TRUE;
 }
@@ -564,20 +564,29 @@ text_view_populate_popup(GtkTextView *textview, GtkMenu *menu,
        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
     }
 
-    gtk_widget_show_all(GTK_WIDGET(menu));
+    gtk_widget_show(GTK_WIDGET(menu));
 }
 
 
 /* -- URL related stuff -- */
 
 static gboolean
-store_button_coords(GtkWidget * widget, GdkEventButton * event,
+store_button_coords(GtkWidget * widget, GdkEvent * event,
                     gpointer data)
 {
-    if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
-        stored_x = event->x;
-        stored_y = event->y;
-        stored_mask = event->state;
+    guint button;
+
+    if (gdk_event_get_event_type(event) == GDK_BUTTON_PRESS &&
+        gdk_event_get_button(event, &button) && button == 1) {
+        gdouble x_win, y_win;
+        GdkModifierType state;
+
+        if (gdk_event_get_coords(event, &x_win, &y_win) &&
+            gdk_event_get_state(event, &state)) {
+            stored_x = (gint) x_win;
+            stored_y = (gint) y_win;
+            stored_mask = state;
+        }
 
         /* compare only shift, ctrl, and mod1-mod5 */
         stored_mask &= STORED_MASK_BITS;
@@ -587,20 +596,22 @@ store_button_coords(GtkWidget * widget, GdkEventButton * event,
 
 /* check if we are over an url and change the cursor in this case */
 static gboolean
-check_over_url(GtkWidget * widget, GdkEventMotion * event,
+check_over_url(GtkWidget * widget, GdkEvent * event,
                GList * url_list)
 {
     static gboolean was_over_url = FALSE;
     static message_url_t *current_url = NULL;
     GdkWindow *window;
-    message_url_t *url;
+    message_url_t *url = NULL;
 
     window = gtk_text_view_get_window(GTK_TEXT_VIEW(widget),
                                       GTK_TEXT_WINDOW_TEXT);
-    if (event->type == GDK_LEAVE_NOTIFY)
-        url = NULL;
-    else {
-        url = find_url(widget, (gint) event->x, (gint) event->y, url_list);
+    if (gdk_event_get_event_type(event) != GDK_LEAVE_NOTIFY) {
+        gdouble x_win, y_win;
+
+        if (gdk_event_get_coords(event, &x_win, &y_win)) {
+            url = find_url(widget, (gint) x_win, (gint) y_win, url_list);
+        }
     }
 
     if (url) {
@@ -709,22 +720,28 @@ url_found_cb(GtkTextBuffer * buffer, GtkTextIter * iter,
 /* if the mouse button was released over an URL, and the mouse hasn't
  * moved since the button was pressed, try to call the URL */
 static gboolean
-check_call_url(GtkWidget * widget, GdkEventButton * event,
-               GList * url_list)
+check_call_url(GtkWidget * widget, GdkEvent * event, GList * url_list)
 {
+    guint button;
+    gdouble x_win, y_win;
+    GdkModifierType state;
     gint x, y;
     message_url_t *url;
 
-    if (event->type != GDK_BUTTON_RELEASE || event->button != 1)
+    if (gdk_event_get_event_type(event) != GDK_BUTTON_RELEASE ||
+        !gdk_event_get_button(event, &button) || button != 1 ||
+        !gdk_event_get_coords(event, &x_win, &y_win) ||
+        !gdk_event_get_state(event, &state)) {
         return FALSE;
+    }
 
-    x = event->x;
-    y = event->y;
+    x = (gint) x_win;
+    y = (gint) y_win;
     /* 2-pixel motion tolerance */
     if (abs(x - stored_x) <= 2 && abs(y - stored_y) <= 2
-        && (event->state & STORED_MASK_BITS) == stored_mask) {
+        && (state & STORED_MASK_BITS) == stored_mask) {
         url = find_url(widget, x, y, url_list);
-        if (url)
+        if (url != NULL)
             handle_url(url->url);
     }
     return FALSE;
@@ -963,7 +980,7 @@ draw_cite_bar_real(cite_bar_t * bar, cite_bar_draw_mode_t * draw_mode)
         g_free(color);
 
         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(bar->bar) ,
@@ -1113,7 +1130,7 @@ balsa_gtk_html_popup(GtkWidget * html, BalsaMessage * bm)
     menu = gtk_menu_new();
     bmwt_populate_popup_menu(bm, html, GTK_MENU(menu));
 
-    gtk_widget_show_all(menu);
+    gtk_widget_show(menu);
 
     /* In WebKit2, the context menu signal is asynchronous, so the
      * GdkEvent is no longer current; instead it is preserved and passed
@@ -1164,7 +1181,7 @@ bmwt_populate_popup_cb(GtkWidget * widget, GtkMenu * menu, gpointer data)
     gtk_container_foreach(GTK_CONTAINER(menu),
                           (GtkCallback) gtk_widget_destroy, NULL);
     bmwt_populate_popup_menu(bm, html, menu);
-    gtk_widget_show_all(GTK_WIDGET(menu));
+    gtk_widget_show(GTK_WIDGET(menu));
 }
 
 static BalsaMimeWidget *
diff --git a/src/balsa-mime-widget.c b/src/balsa-mime-widget.c
index 3a82032..2fcfc28 100644
--- a/src/balsa-mime-widget.c
+++ b/src/balsa-mime-widget.c
@@ -191,7 +191,7 @@ balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpoint
                                 G_CALLBACK(vadj_change_cb), mw->widget);
             }
 
-            gtk_widget_show_all(mw->widget);
+            gtk_widget_show(mw->widget);
        }
     }
     g_free(content_type);
@@ -234,13 +234,11 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
     mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL);
 
     mw->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, BMW_VBOX_SPACE);
-    gtk_container_set_border_width(GTK_CONTAINER(mw->widget),
-                                  BMW_CONTAINER_BORDER);
+    g_object_set(G_OBJECT(mw->widget), "margin", BMW_CONTAINER_BORDER, NULL);
 
     if (mime_body->filename) {
        msg = g_strdup_printf(_("File name: %s"), mime_body->filename);
-       gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg), FALSE,
-                          FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(mw->widget), gtk_label_new(msg));
        g_free(msg);
     }
 
@@ -294,28 +292,30 @@ balsa_mime_widget_new_unknown(BalsaMessage * bm,
     msg_label = gtk_label_new(msg);
     g_free(msg);
     gtk_label_set_ellipsize(GTK_LABEL(msg_label), PANGO_ELLIPSIZE_END);
-    gtk_box_pack_start(GTK_BOX(mw->widget), msg_label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(mw->widget), msg_label);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, BMW_HBOX_SPACE);
     gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE);
     if ((button = libbalsa_vfs_mime_button(mime_body, use_content_type,
                                            G_CALLBACK(balsa_mime_widget_ctx_menu_cb),
-                                           (gpointer) mime_body)))
-       gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
-    else
+                                           (gpointer) mime_body))) {
+        gtk_widget_set_hexpand(button, TRUE);
+       gtk_box_pack_start(GTK_BOX(hbox), button);
+    } else {
        gtk_box_pack_start(GTK_BOX(mw->widget),
                           gtk_label_new(_("No open or view action "
-                                          "defined for this content type")),
-                          FALSE, FALSE, 0);
+                                          "defined for this content type")));
+    }
     g_free(use_content_type);
 
     button = gtk_button_new_with_mnemonic(_("S_ave part"));
-    gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(button, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), button);
     g_signal_connect(G_OBJECT(button), "clicked",
                     G_CALLBACK(balsa_mime_widget_ctx_menu_save),
                     (gpointer) mime_body);
 
-    gtk_box_pack_start(GTK_BOX(mw->widget), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(mw->widget), hbox);
 
     return mw;
 }
diff --git a/src/filter-edit-callbacks.c b/src/filter-edit-callbacks.c
index e6162c8..2b93287 100644
--- a/src/filter-edit-callbacks.c
+++ b/src/filter-edit-callbacks.c
@@ -1013,7 +1013,8 @@ build_type_notebook()
 
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
     g_object_set(box, "margin", 5, NULL);
-    gtk_box_pack_start(GTK_BOX(box), grid, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(grid, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), grid);
 
     fe_type_simple_label = 
        gtk_label_new_with_mnemonic(_("One of the specified f_ields contains"));
@@ -1043,7 +1044,8 @@ build_type_notebook()
 
 #if REGULAR_EXPRESSION_FILTERING_IS_IMPLEMENTED
     page = gtk_table_new(5, 6, FALSE);
-    gtk_box_pack_start(GTK_BOX(box), page, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(page, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), page);
 
     fe_type_regex_label = 
         gtk_label_new_with_mnemonic(_("_One of the regular expressions matches"));
@@ -1075,15 +1077,18 @@ build_type_notebook()
                      0, 5, 4, 5,
                      GTK_FILL | GTK_SHRINK | GTK_EXPAND, GTK_SHRINK, 2, 2);
     button = gtk_button_new_with_mnemonic(_("A_dd"));
-    gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(button, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), button);
     g_signal_connect(G_OBJECT(button), "clicked",
                      G_CALLBACK(fe_add_pressed), NULL);
     fe_regex_remove_button = gtk_button_new_with_mnemonic(_("_Remove"));
-    gtk_box_pack_start(GTK_BOX(box), fe_regex_remove_button, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(fe_regex_remove_button, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), fe_regex_remove_button);
     g_signal_connect(G_OBJECT(fe_regex_remove_button), "clicked",
                      G_CALLBACK(fe_remove_pressed), NULL);
     button = gtk_button_new_with_mnemonic(_("One _Matches/None Matches"));
-    gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(button, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), button);
     g_signal_connect(G_OBJECT(button), "clicked",
                      G_CALLBACK(fe_negate_condition), NULL);
 
@@ -1095,7 +1100,8 @@ build_type_notebook()
 #else                   /* REGULAR_EXPRESSION_FILTERING_IS_IMPLEMENTED */
     msg = _("Filtering using regular expressions is not yet implemented.");
     label = gtk_label_new(msg);
-    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(label, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), label);
 #endif                  /* REGULAR_EXPRESSION_FILTERING_IS_IMPLEMENTED */
 
     /* The date page of the notebook */
@@ -1182,20 +1188,23 @@ void build_condition_dialog(GtkWidget * condition_dialog)
      * conditions of the filter */
     box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
     label = gtk_label_new_with_mnemonic(_("Search T_ype:"));
-    gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5);
-    fe_search_option_menu = 
+    gtk_box_pack_start(GTK_BOX(box), label);
+    fe_search_option_menu =
         fe_build_option_menu(fe_search_type, ELEMENTS(fe_search_type),
                              G_CALLBACK(fe_typesmenu_cb), field_frame);
-    gtk_box_pack_start(GTK_BOX(box), fe_search_option_menu, FALSE, FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(box), fe_search_option_menu);
     gtk_label_set_mnemonic_widget(GTK_LABEL(label), fe_search_option_menu);
 
     content_box =
         GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(condition_dialog)));
-    gtk_box_pack_start(content_box, box, FALSE, FALSE, 2);
-    gtk_box_pack_start(content_box, field_frame, FALSE, FALSE, 2);
+    gtk_widget_set_margin_top(box, 2);
+    gtk_box_pack_start(content_box, box);
+    gtk_widget_set_margin_top(field_frame, 2);
+    gtk_box_pack_start(content_box, field_frame);
 
     build_type_notebook();
-    gtk_box_pack_start(content_box, fe_type_notebook, FALSE, FALSE, 2);
+    gtk_widget_set_margin_top(fe_type_notebook, 2);
+    gtk_box_pack_start(content_box, fe_type_notebook);
 }
 
 /*
@@ -1264,7 +1273,7 @@ fe_edit_condition(GtkWidget * throwaway,gpointer is_new_cnd)
     g_free(title);
     /* We fire the dialog box */
     gtk_widget_set_sensitive(fe_window, FALSE);
-    gtk_widget_show_all(condition_dialog);
+    gtk_widget_show(condition_dialog);
     if (cnd) fill_condition_widgets(cnd);
     else clear_condition_widgets();
 }
@@ -1536,7 +1545,7 @@ fe_action_selected(GtkWidget * widget, gpointer data)
         (FilterActionType) fe_combo_box_get_value(widget);
     if (type == FILTER_COLOR) {
         gtk_widget_hide(fe_mailboxes);
-        gtk_widget_show_all(fe_color_buttons);
+        gtk_widget_show(fe_color_buttons);
     } else {
         gtk_widget_hide(fe_color_buttons);
         gtk_widget_show(fe_mailboxes);
diff --git a/src/filter-edit-dialog.c b/src/filter-edit-dialog.c
index b36835f..a22dd71 100644
--- a/src/filter-edit-dialog.c
+++ b/src/filter-edit-dialog.c
@@ -5,14 +5,14 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option) 
+ * the Free Software Foundation; either version 2, or (at your option)
  * any later version.
- *  
+ *
  * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of 
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *  
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
@@ -211,14 +211,15 @@ build_left_side(void)
 
     gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(fe_filters_list));
 
-    gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 2);
+    gtk_widget_set_vexpand(sw, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), sw);
 
     /* new and delete buttons */
     bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
     gtk_box_set_spacing(GTK_BOX(bbox), 2);
     gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
 
-    gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 2);
+    gtk_box_pack_start(GTK_BOX(vbox), bbox);
 
     /* new button */
     /* Translators: button "New" filter */
@@ -283,8 +284,7 @@ build_match_page()
                                                NULL, NULL);
     g_signal_connect(fe_op_codes_option_menu, "changed",
                      G_CALLBACK(fe_action_changed), NULL);
-    gtk_box_pack_start(GTK_BOX(box), fe_op_codes_option_menu, FALSE, FALSE,
-                      2);
+    gtk_box_pack_start(GTK_BOX(box), fe_op_codes_option_menu);
 
     /* list of conditions defining how this filter matches */
 
@@ -385,12 +385,12 @@ build_action_page(GtkWindow * window)
     frame = gtk_frame_new(_("Notification:"));
     gtk_frame_set_label_align(GTK_FRAME(frame), GTK_POS_LEFT, GTK_POS_TOP);
     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
-    gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0);
-    gtk_container_set_border_width(GTK_CONTAINER(frame), 3);
+    gtk_box_pack_start(GTK_BOX(page), frame);
 
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 5);
+    g_object_set(G_OBJECT(grid), "margin", 3, NULL);
     gtk_container_add(GTK_CONTAINER(frame), grid);
 
     /* Notification buttons */
@@ -422,7 +422,7 @@ build_action_page(GtkWindow * window)
     gtk_grid_attach(GTK_GRID(grid), fe_popup_button, 0, 1, 1, 1);
     fe_popup_entry = gtk_entry_new();
     gtk_widget_set_hexpand(fe_popup_entry, TRUE);
-    gtk_entry_set_max_length(GTK_ENTRY(fe_popup_entry), 
+    gtk_entry_set_max_length(GTK_ENTRY(fe_popup_entry),
                              FILTER_EDIT_ENTRY_MAX_LENGTH);
     gtk_grid_attach(GTK_GRID(grid), fe_popup_entry, 1, 1, 1, 1);
     /* fe_popup_entry is initially sensitive, so to be consistent
@@ -437,18 +437,18 @@ build_action_page(GtkWindow * window)
     frame = gtk_frame_new(_("Action to perform:"));
     gtk_frame_set_label_align(GTK_FRAME(frame), GTK_POS_LEFT, GTK_POS_TOP);
     gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
-    gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), frame);
 
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
     gtk_box_set_homogeneous(GTK_BOX(box), TRUE);
-    gtk_container_set_border_width(GTK_CONTAINER(frame), 3);
+    g_object_set(G_OBJECT(box), "margin", 3, NULL);
     gtk_container_add(GTK_CONTAINER(frame), box);
 
     fe_action_option_menu =
         fe_build_option_menu(fe_actions, ELEMENTS(fe_actions),
                              G_CALLBACK(fe_action_selected), NULL);
-    gtk_box_pack_start(GTK_BOX(box), fe_action_option_menu,
-                       TRUE, FALSE, 1);
+    gtk_widget_set_vexpand(fe_action_option_menu, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), fe_action_option_menu);
 
     /* FIXME : we use the global mru folder list, perhaps we should use
        our own. We'll see this later, for now let's make something usable
@@ -459,10 +459,12 @@ build_action_page(GtkWindow * window)
                                                &balsa_app.folder_mru);
     g_signal_connect(G_OBJECT(fe_mailboxes), "changed",
                      G_CALLBACK(fe_action_changed), NULL);
-    gtk_box_pack_start(GTK_BOX(box), fe_mailboxes, TRUE, FALSE, 1);
+    gtk_widget_set_vexpand(fe_mailboxes, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), fe_mailboxes);
 
     fe_color_buttons = fe_make_color_buttons();
-    gtk_box_pack_start(GTK_BOX(box), fe_color_buttons, TRUE, FALSE, 1);
+    gtk_widget_set_vexpand(fe_color_buttons, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), fe_color_buttons);
     return page;
 }                              /* end build_action_page() */
 
@@ -484,7 +486,8 @@ build_right_side(GtkWindow * window)
     /* the main notebook */
     notebook = gtk_notebook_new();
     gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
-    gtk_box_pack_start(GTK_BOX(rightside), notebook, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(notebook, TRUE);
+    gtk_box_pack_start(GTK_BOX(rightside), notebook);
 
     page = build_match_page();
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
@@ -495,7 +498,7 @@ build_right_side(GtkWindow * window)
 
     /* button box */
     bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(rightside), bbox, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(rightside), bbox);
 
     fe_apply_button = gtk_button_new_with_mnemonic(_("_Apply"));
     g_signal_connect(G_OBJECT(fe_apply_button), "clicked",
@@ -561,7 +564,7 @@ filters_edit_dialog(GtkWindow * parent)
        gtk_window_present(GTK_WINDOW(fe_window));
        return;
     }
-    
+
     fe_already_open=TRUE;
 
     piece = build_left_side();
@@ -585,26 +588,25 @@ filters_edit_dialog(GtkWindow * parent)
 
     /* main hbox */
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, FILTER_EDIT_PADDING);
-    gtk_box_pack_start(GTK_BOX
-                       (gtk_dialog_get_content_area(GTK_DIALOG(fe_window))),
-                       hbox, TRUE, TRUE, FILTER_EDIT_PADDING);
-    gtk_box_pack_start(GTK_BOX(hbox), piece, FALSE, FALSE,
-                       FILTER_EDIT_PADDING);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(fe_window))), hbox);
+    gtk_widget_set_margin_top(piece, FILTER_EDIT_PADDING);
+    gtk_box_pack_start(GTK_BOX(hbox), piece);
 
     gtk_box_pack_start(GTK_BOX(hbox),
-                       gtk_separator_new(GTK_ORIENTATION_VERTICAL),
-                       FALSE, FALSE, 0);
+                       gtk_separator_new(GTK_ORIENTATION_VERTICAL));
 
     fe_right_page = build_right_side(GTK_WINDOW(fe_window));
     gtk_widget_set_sensitive(fe_right_page, FALSE);
-    gtk_box_pack_start(GTK_BOX(hbox), fe_right_page, TRUE, TRUE,
-                       FILTER_EDIT_PADDING);
+    gtk_widget_set_hexpand(fe_right_page, TRUE);
+    gtk_widget_set_margin_top(fe_right_page, FILTER_EDIT_PADDING);
+    gtk_box_pack_start(GTK_BOX(hbox), fe_right_page);
 
     fe_user_headers_list = NULL;
 
     /* Populate the list of filters */
     model = gtk_tree_view_get_model(fe_filters_list);
-    for(filter_list=balsa_app.filters; 
+    for(filter_list=balsa_app.filters;
         filter_list; filter_list=g_slist_next(filter_list)) {
 
        fil=(LibBalsaFilter*)filter_list->data;
@@ -640,11 +642,11 @@ filters_edit_dialog(GtkWindow * parent)
        fe_collect_user_headers(fil->condition);
 
        cpfil->action=fil->action;
-       if (fil->action_string) 
-            cpfil->action_string=g_strdup(fil->action_string); 
+       if (fil->action_string)
+            cpfil->action_string=g_strdup(fil->action_string);
 
         gtk_list_store_append(GTK_LIST_STORE(model), &iter);
-        gtk_list_store_set(GTK_LIST_STORE(model), &iter, 
+        gtk_list_store_set(GTK_LIST_STORE(model), &iter,
                            0, cpfil->name, 1, cpfil, -1);
     }
 
@@ -654,7 +656,7 @@ filters_edit_dialog(GtkWindow * parent)
        return;
     }
 
-    gtk_widget_show_all(GTK_WIDGET(fe_window));
+    gtk_widget_show(GTK_WIDGET(fe_window));
     if (gtk_tree_model_get_iter_first(model, &iter)) {
         GtkTreeSelection *selection =
             gtk_tree_view_get_selection(fe_filters_list);
diff --git a/src/filter-export-dialog.c b/src/filter-export-dialog.c
index 807b309..68191bd 100644
--- a/src/filter-export-dialog.c
+++ b/src/filter-export-dialog.c
@@ -91,9 +91,9 @@ filters_export_dialog(GtkWindow * parent)
                                  NULL, TRUE);
 
     gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(list));
-    gtk_box_pack_start(GTK_BOX
-                       (gtk_dialog_get_content_area(GTK_DIALOG(fex_window))),
-                       sw, TRUE, TRUE, 2);
+    gtk_widget_set_vexpand(sw, TRUE);
+    gtk_widget_set_margin_top(sw, 2);
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(fex_window))), sw);
 
     /* Populate the list of filters */
 
@@ -116,5 +116,5 @@ filters_export_dialog(GtkWindow * parent)
     g_signal_connect(G_OBJECT(fex_window), "destroy",
                     G_CALLBACK(fex_destroy_window_cb), NULL);
 
-    gtk_widget_show_all(GTK_WIDGET(fex_window));
+    gtk_widget_show(GTK_WIDGET(fex_window));
 }
diff --git a/src/filter-run-dialog.c b/src/filter-run-dialog.c
index c862af6..7e097a2 100644
--- a/src/filter-run-dialog.c
+++ b/src/filter-run-dialog.c
@@ -324,11 +324,12 @@ void balsa_filter_run_dialog_init(BalsaFilterRunDialog * p)
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
 
-    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(p))),
-                      hbox, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(p))), hbox);
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
 
     p->available_filters =
         libbalsa_filter_list_new(TRUE, _("Name"), GTK_SELECTION_MULTIPLE,
@@ -346,13 +347,14 @@ void balsa_filter_run_dialog_init(BalsaFilterRunDialog * p)
                                   GTK_POLICY_AUTOMATIC);
 
     gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(p->available_filters));
-    gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(sw, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), sw);
 
     /* To keep a consistent look, make a button box for a single button. */
     bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
     gtk_box_set_spacing(GTK_BOX(bbox), 2);
     gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
-    gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 2);
+    gtk_box_pack_start(GTK_BOX(vbox), bbox);
 
     /* "Apply selected" button */
     p->apply_selected_button = button =
@@ -388,11 +390,13 @@ void balsa_filter_run_dialog_init(BalsaFilterRunDialog * p)
                              G_CALLBACK(fr_remove_pressed), G_OBJECT(p));
     gtk_container_add(GTK_CONTAINER(bbox), button);
 
-    gtk_box_pack_start(GTK_BOX(hbox),bbox, FALSE, FALSE, 6);
+    gtk_widget_set_margin_start(bbox, 4);
+    gtk_box_pack_start(GTK_BOX(hbox), bbox);
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
 
-    gtk_box_pack_start(GTK_BOX(hbox),vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
 
     sw = gtk_scrolled_window_new(NULL, NULL);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
@@ -409,14 +413,15 @@ void balsa_filter_run_dialog_init(BalsaFilterRunDialog * p)
 
     gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(p->selected_filters));
 
-    gtk_box_pack_start(GTK_BOX(vbox),sw, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(sw, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), sw);
 
     /* up down arrow buttons */
     bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
     gtk_box_set_spacing(GTK_BOX(bbox), 2);
     gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
 
-    gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 2);
+    gtk_box_pack_start(GTK_BOX(vbox), bbox);
 
     /* up button */
     p->move_up_button = button =
@@ -508,5 +513,5 @@ filters_run_dialog(LibBalsaMailbox * mbox,
     gtk_window_set_default_size(GTK_WINDOW(p),500,250);
     fr_dialogs_opened=g_list_prepend(fr_dialogs_opened,p);
 
-    gtk_widget_show_all(p);
+    gtk_widget_show(p);
 }
diff --git a/src/folder-conf.c b/src/folder-conf.c
index 262742a..16e0c99 100644
--- a/src/folder-conf.c
+++ b/src/folder-conf.c
@@ -325,10 +325,11 @@ folder_conf_imap_node(BalsaMailboxNode *mn)
     }
 
     notebook = gtk_notebook_new();
+    gtk_widget_set_vexpand(notebook, TRUE);
     gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(fcw->dialog)),
-                       notebook, TRUE, TRUE, 0);
+                       notebook);
     grid = libbalsa_create_grid();
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 12);
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), grid,
                              gtk_label_new_with_mnemonic(_("_Basic")));
     advanced = balsa_server_conf_get_advanced_widget(&fcw->bsc, s, 3);
@@ -421,7 +422,7 @@ folder_conf_imap_node(BalsaMailboxNode *mn)
         libbalsa_create_grid_entry(grid, NULL, NULL, r++,
                                    mn ? mn->dir : NULL, label);
 
-    gtk_widget_show_all(GTK_WIDGET(fcw->dialog));
+    gtk_widget_show(GTK_WIDGET(fcw->dialog));
 
     validate_folder(NULL, fcw);
     gtk_widget_grab_focus(fcw->folder_name);
@@ -433,7 +434,7 @@ folder_conf_imap_node(BalsaMailboxNode *mn)
 
     g_signal_connect(G_OBJECT(fcw->dialog), "response",
                      G_CALLBACK(folder_conf_response), fcw);
-    gtk_widget_show_all(GTK_WIDGET(fcw->dialog));
+    gtk_widget_show(GTK_WIDGET(fcw->dialog));
 }
 
 /* folder_conf_imap_sub_node:
@@ -575,9 +576,10 @@ browse_button_cb(GtkWidget * widget, SubfolderDialogData * sdd)
 #endif
     
     scroll = gtk_scrolled_window_new(NULL, NULL);
+    gtk_widget_set_vexpand(scroll, TRUE);
     gtk_box_pack_start(GTK_BOX
                        (gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
-                       scroll, TRUE, TRUE, 0);
+                       scroll);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_ALWAYS);
@@ -613,7 +615,7 @@ browse_button_cb(GtkWidget * widget, SubfolderDialogData * sdd)
 
     g_signal_connect(G_OBJECT(dialog), "response",
                      G_CALLBACK(browse_button_response), bbd);
-    gtk_widget_show_all(GTK_WIDGET(dialog));
+    gtk_widget_show(GTK_WIDGET(dialog));
 }
 
 static gboolean
@@ -825,15 +827,16 @@ folder_conf_imap_sub_node(BalsaMailboxNode * mn)
     grid = libbalsa_create_grid();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 12);
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     if (mn)
         content = grid;
     else {
         content = gtk_frame_new(_("Create subfolder"));
         gtk_container_add(GTK_CONTAINER(content), grid);
     }
+    gtk_widget_set_vexpand(content, TRUE);
     gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(sdd->dialog)),
-                       content, TRUE, TRUE, 0);
+                       content);
  
     row = 0;
     /* INPUT FIELD CREATION */
@@ -862,9 +865,10 @@ folder_conf_imap_sub_node(BalsaMailboxNode * mn)
                     G_CALLBACK(browse_button_cb), (gpointer) sdd);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
+    gtk_widget_set_hexpand(sdd->parent_folder, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), sdd->parent_folder);
+    gtk_box_pack_start(GTK_BOX(hbox), button);
     gtk_widget_set_hexpand(hbox, TRUE);
-    gtk_box_pack_start(GTK_BOX(hbox), sdd->parent_folder, TRUE, TRUE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
     gtk_grid_attach(GTK_GRID(grid), hbox, 1, row, 1, 1);
 
     if (!mn)
@@ -978,7 +982,7 @@ folder_conf_imap_sub_node(BalsaMailboxNode * mn)
                                          G_CALLBACK(set_ok_sensitive));
     }
 
-    gtk_widget_show_all(GTK_WIDGET(sdd->dialog));
+    gtk_widget_show(GTK_WIDGET(sdd->dialog));
 
     gtk_widget_grab_focus(sdd->folder_name);
 
@@ -986,7 +990,7 @@ folder_conf_imap_sub_node(BalsaMailboxNode * mn)
                      G_CALLBACK(folder_conf_response), sdd);
     gtk_dialog_set_response_sensitive(GTK_DIALOG(sdd->dialog),
                                       GTK_RESPONSE_OK, FALSE);
-    gtk_widget_show_all(GTK_WIDGET(sdd->dialog));
+    gtk_widget_show(GTK_WIDGET(sdd->dialog));
 }
 
 void
diff --git a/src/information-dialog.c b/src/information-dialog.c
index 06af13d..a2327cb 100644
--- a/src/information-dialog.c
+++ b/src/information-dialog.c
@@ -256,11 +256,13 @@ balsa_information_list(GtkWindow *parent, LibBalsaInformationType type,
                                       (scrolled_window),
                                       GTK_POLICY_AUTOMATIC,
                                       GTK_POLICY_AUTOMATIC);
+        gtk_widget_set_vexpand(scrolled_window, TRUE);
+        gtk_widget_set_margin_top(scrolled_window, 1); /* Seriously? */
         gtk_box_pack_start(GTK_BOX
                            (gtk_dialog_get_content_area
                             (GTK_DIALOG(information_dialog))),
-                           scrolled_window, TRUE, TRUE, 1);
-       gtk_container_set_border_width(GTK_CONTAINER(scrolled_window), 6);
+                           scrolled_window);
+       g_object_set(G_OBJECT(scrolled_window), "margin", 6, NULL);
        gtk_widget_show(scrolled_window);
 
        /* The list itself */
@@ -271,7 +273,7 @@ balsa_information_list(GtkWindow *parent, LibBalsaInformationType type,
                          G_CALLBACK(balsa_information_list_response_cb),
                          information_list);
 
-       gtk_widget_show_all(information_dialog);
+       gtk_widget_show(information_dialog);
     }
 
     buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(information_list));
diff --git a/src/mailbox-conf.c b/src/mailbox-conf.c
index 6cb3a87..f014f57 100644
--- a/src/mailbox-conf.c
+++ b/src/mailbox-conf.c
@@ -215,9 +215,8 @@ balsa_server_conf_get_advanced_widget(BalsaServerConf *bsc, LibBalsaServer *s,
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
     bsc->grid = GTK_GRID(libbalsa_create_grid());
-    gtk_container_set_border_width(GTK_CONTAINER(bsc->grid), 12);
-    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(bsc->grid),
-                       FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(bsc->grid), "margin", 12, NULL);
+    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(bsc->grid));
 
     bsc->used_rows = 0;
 
@@ -239,7 +238,7 @@ balsa_server_conf_get_advanced_widget(BalsaServerConf *bsc, LibBalsaServer *s,
 
     g_signal_connect(G_OBJECT (bsc->use_ssl), "toggled",
                      G_CALLBACK (bsc_ssl_toggled_cb), bsc);
-    gtk_widget_show_all(GTK_WIDGET(bsc->grid));
+    gtk_widget_show(GTK_WIDGET(bsc->grid));
     bsc->used_rows = 2;
     gtk_widget_set_sensitive(bsc->tls_option, !use_ssl);
 
@@ -255,8 +254,8 @@ balsa_server_conf_get_advanced_widget_new(BalsaServerConf *bsc)
     box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
     bsc->grid = GTK_GRID(libbalsa_create_grid());
-    gtk_container_set_border_width(GTK_CONTAINER(bsc->grid), 12);
-    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(bsc->grid), FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(bsc->grid), "margin", 12, NULL);
+    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(bsc->grid));
 
     bsc->used_rows = 0U;
 
@@ -627,7 +626,7 @@ run_mailbox_conf(BalsaMailboxNode* mbnode, GType mailbox_type,
 
     g_signal_connect(G_OBJECT(mcw->window), "response", 
                      G_CALLBACK(conf_response_cb), mcw);
-    gtk_widget_show_all(GTK_WIDGET(mcw->window));
+    gtk_widget_show(GTK_WIDGET(mcw->window));
 
     return GTK_WIDGET(mcw->window);
 }
@@ -1273,7 +1272,7 @@ create_pop_mailbox_dialog(MailboxConfWindow *mcw)
 
     notebook = gtk_notebook_new();
     grid = libbalsa_create_grid();
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 12);
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), grid,
                              gtk_label_new_with_mnemonic(_("_Basic")));
     row = 0;
@@ -1335,7 +1334,7 @@ create_pop_mailbox_dialog(MailboxConfWindow *mcw)
     /* toggle for enabling pipeling */
     mcw->mb_data.pop3.enable_pipe = balsa_server_conf_add_checkbox(&mcw->mb_data.pop3.bsc, _("Overlap 
commands"));
 
-    gtk_widget_show_all(notebook);
+    gtk_widget_show(notebook);
     gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
     gtk_widget_grab_focus(mcw->mailbox_name);
 
@@ -1383,7 +1382,7 @@ create_imap_mailbox_dialog(MailboxConfWindow *mcw)
 
     notebook = gtk_notebook_new();
     grid = libbalsa_create_grid();
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 12);
+    g_object_set(G_OBJECT(grid), "margin", 12, NULL);
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), grid,
                              gtk_label_new_with_mnemonic(_("_Basic")));
 
@@ -1452,7 +1451,7 @@ create_imap_mailbox_dialog(MailboxConfWindow *mcw)
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced,
                              gtk_label_new_with_mnemonic(_("_Advanced")));
 
-    gtk_widget_show_all(notebook);
+    gtk_widget_show(notebook);
     gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
     gtk_widget_grab_focus(mcw->mailbox_name? 
                           mcw->mailbox_name : mcw->mb_data.imap.bsc.server);
diff --git a/src/main-window.c b/src/main-window.c
index 8586fea..d47c279 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -471,8 +471,7 @@ bw_create_index_widget(BalsaWindow *bw)
     bw->sos_bar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 
     bw->filter_choice = gtk_combo_box_text_new();
-    gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->filter_choice,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->filter_choice);
     for(i=0; i<ELEMENTS(view_filters); i++)
         gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(bw->filter_choice),
                                        i, view_filters[i].str);
@@ -485,11 +484,11 @@ bw_create_index_widget(BalsaWindow *bw)
                      G_CALLBACK(bw_enable_filter), bw);
     g_signal_connect(G_OBJECT(bw->sos_entry), "focus_out_event",
                      G_CALLBACK(bw_disable_filter), bw);
-    gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->sos_entry, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(bw->sos_entry, TRUE);
+    gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->sos_entry);
     gtk_widget_show(bw->sos_entry);
-    gtk_box_pack_start(GTK_BOX(bw->sos_bar),
-                       button = gtk_button_new(),
-                       FALSE, FALSE, 0);
+    button = gtk_button_new();
+    gtk_box_pack_start(GTK_BOX(bw->sos_bar), button);
     gtk_container_add(GTK_CONTAINER(button),
                       gtk_image_new_from_icon_name("gtk-ok",
                                                     GTK_ICON_SIZE_BUTTON));
@@ -504,11 +503,12 @@ bw_create_index_widget(BalsaWindow *bw)
                              button);
     g_signal_connect(G_OBJECT(bw->filter_choice), "changed",
                      G_CALLBACK(bw_filter_entry_changed), button);
-    gtk_widget_show_all(button);
+    gtk_widget_show(button);
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
     gtk_widget_show(bw->sos_bar);
-    gtk_box_pack_start(GTK_BOX(vbox), bw->sos_bar, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), bw->notebook, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), bw->sos_bar);
+    gtk_widget_set_vexpand(bw->notebook, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), bw->notebook);
 
     focusable_widgets = g_list_append(NULL, bw->notebook);
     gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focusable_widgets);
@@ -534,8 +534,8 @@ bw_set_panes(BalsaWindow * window)
             gtk_container_remove(GTK_CONTAINER(window->vbox),
                                  window->content);
         window->content = window->paned_master;
-        gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
-                           TRUE, TRUE, 0);
+        gtk_widget_set_vexpand(window->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(window->vbox), window->content);
        gtk_paned_pack1(GTK_PANED(window->paned_slave),
                        bw_frame(window->mblist), TRUE, TRUE);
         gtk_paned_pack2(GTK_PANED(window->paned_slave),
@@ -553,8 +553,8 @@ bw_set_panes(BalsaWindow * window)
             gtk_container_remove(GTK_CONTAINER(window->vbox),
                                  window->content);
         window->content = window->paned_master;
-        gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
-                           TRUE, TRUE, 0);
+        gtk_widget_set_vexpand(window->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(window->vbox), window->content);
        gtk_paned_pack1(GTK_PANED(window->paned_master),
                         bw_frame(window->mblist), TRUE, TRUE);
         gtk_paned_pack2(GTK_PANED(window->paned_master), window->paned_slave,
@@ -573,8 +573,8 @@ bw_set_panes(BalsaWindow * window)
             gtk_container_remove(GTK_CONTAINER(window->vbox),
                                  window->content);
         window->content = window->paned_master;
-        gtk_box_pack_start(GTK_BOX(window->vbox), window->content,
-                           TRUE, TRUE, 0);
+        gtk_widget_set_vexpand(window->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(window->vbox), window->content);
        gtk_paned_pack1(GTK_PANED(window->paned_master),
                         bw_frame(window->mblist), TRUE, TRUE);
         gtk_paned_pack2(GTK_PANED(window->paned_master), window->paned_slave,
@@ -1004,16 +1004,20 @@ quit_activated(GSimpleAction * action,
                gpointer        user_data)
 {
     GtkWindow *window = GTK_WINDOW(user_data);
-    GdkEventAny e = { GDK_DELETE, NULL, 0 };
+    GdkEvent *event;
 
-    e.window = gtk_widget_get_window(GTK_WIDGET(window));
     libbalsa_information_parented(window,
                                   LIBBALSA_INFORMATION_MESSAGE,
                                   _("Balsa closes files and connections."
                                     " Please wait…"));
     while(gtk_events_pending())
         gtk_main_iteration_do(FALSE);
-    gdk_event_put((GdkEvent*)&e);
+
+    event = gtk_get_current_event();
+    g_signal_emit_by_name(window, "delete-event", event);
+    if (event != NULL) {
+        gdk_event_free(event);
+    }
 }
 
 static void
@@ -2215,25 +2219,24 @@ balsa_window_new()
     model = balsa_window_get_toolbar_model();
 
     window->toolbar = balsa_toolbar_new(model, G_ACTION_MAP(window));
-    gtk_box_pack_start(GTK_BOX(window->vbox), window->toolbar,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(window->vbox), window->toolbar);
 
     window->bottom_bar = hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-    gtk_box_pack_end(GTK_BOX(window->vbox), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_end(GTK_BOX(window->vbox), hbox);
 
     window->progress_bar = gtk_progress_bar_new();
     gtk_widget_set_valign(window->progress_bar, GTK_ALIGN_CENTER);
     gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(window->progress_bar),
                                     0.01);
-    gtk_box_pack_start(GTK_BOX(hbox), window->progress_bar, FALSE, FALSE,
-                       0);
+    gtk_box_pack_start(GTK_BOX(hbox), window->progress_bar);
 
     window->statusbar = gtk_statusbar_new();
     g_signal_connect(window, "notify::is-maximized",
                      G_CALLBACK(bw_notify_is_maximized_cb),
                      window->statusbar);
-    gtk_box_pack_start(GTK_BOX(hbox), window->statusbar, TRUE, TRUE, 0);
-    gtk_widget_show_all(hbox);
+    gtk_widget_set_hexpand(window->statusbar, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), window->statusbar);
+    gtk_widget_show(hbox);
 
 #if 0
     gnome_app_install_appbar_menu_hints(GNOME_APPBAR(balsa_app.appbar),
@@ -2756,13 +2759,12 @@ bw_notebook_label_new(BalsaMailboxNode * mbnode)
 
     /* Try to make text not bold: */
     css_provider = gtk_css_provider_new();
-    if (!gtk_css_provider_load_from_data(css_provider,
-                                         "#balsa-notebook-tab-label"
-                                         "{"
-                                           "font-weight:normal;"
-                                         "}",
-                                         -1, NULL))
-        g_print("Could not load label CSS data.\n");
+    gtk_css_provider_load_from_data(css_provider,
+                                    "#balsa-notebook-tab-label"
+                                    "{"
+                                      "font-weight:normal;"
+                                    "}",
+                                    -1);
 
     gtk_style_context_add_provider(gtk_widget_get_style_context(lab) ,
                                    GTK_STYLE_PROVIDER(css_provider),
@@ -2773,7 +2775,8 @@ bw_notebook_label_new(BalsaMailboxNode * mbnode)
                             libbalsa_mailbox_get_unread(mbnode->mailbox) > 0);
     g_signal_connect_object(mbnode->mailbox, "changed",
                             G_CALLBACK(bw_mailbox_changed), lab, 0);
-    gtk_box_pack_start(GTK_BOX(box), lab, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(lab, TRUE);
+    gtk_box_pack_start(GTK_BOX(box), lab);
 
     but = gtk_button_new();
 #if GTK_CHECK_VERSION(3, 19, 0)
@@ -2792,9 +2795,9 @@ bw_notebook_label_new(BalsaMailboxNode * mbnode)
     close_pix = gtk_image_new_from_icon_name("window-close-symbolic",
                                              GTK_ICON_SIZE_MENU);
     gtk_container_add(GTK_CONTAINER(but), close_pix);
-    gtk_box_pack_start(GTK_BOX(box), but, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(box), but);
 
-    gtk_widget_show_all(box);
+    gtk_widget_show(box);
 
     gtk_widget_set_tooltip_text(box, mbnode->mailbox->url);
     return box;
@@ -3283,18 +3286,15 @@ ensure_check_mail_dialog(BalsaWindow * window)
     content_box =
         GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(progress_dialog)));
     progress_dialog_source = gtk_label_new(_("Checking Mail…"));
-    gtk_box_pack_start(content_box, progress_dialog_source,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(content_box, progress_dialog_source);
 
     progress_dialog_message = gtk_label_new("");
-    gtk_box_pack_start(content_box, progress_dialog_message,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(content_box, progress_dialog_message);
 
     progress_dialog_bar = gtk_progress_bar_new();
-    gtk_box_pack_start(content_box, progress_dialog_bar,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(content_box, progress_dialog_bar);
     gtk_window_set_default_size(GTK_WINDOW(progress_dialog), 250, 100);
-    gtk_widget_show_all(progress_dialog);
+    gtk_widget_show(progress_dialog);
 }
 
 /*
@@ -3544,7 +3544,7 @@ mail_progress_notify_cb(GIOChannel * source, GIOCondition condition,
                 gtk_label_set_text(GTK_LABEL(progress_dialog_source),
                                    threadmessage->message_string);
                 gtk_label_set_text(GTK_LABEL(progress_dialog_message), "");
-                gtk_widget_show_all(progress_dialog);
+                gtk_widget_show(progress_dialog);
             } else
                 gtk_statusbar_push(statusbar, context_id,
                                    threadmessage->message_string);
@@ -3553,7 +3553,7 @@ mail_progress_notify_cb(GIOChannel * source, GIOCondition condition,
             if (progress_dialog) {
                 gtk_label_set_text(GTK_LABEL(progress_dialog_message),
                                    threadmessage->message_string);
-                gtk_widget_show_all(progress_dialog);
+                gtk_widget_show(progress_dialog);
             } else
                 gtk_statusbar_push(statusbar, context_id,
                                    threadmessage->message_string);
@@ -3712,7 +3712,7 @@ bw_display_new_mail_notification(int num_new, int has_new)
             g_signal_connect(G_OBJECT(dlg), "response",
                     G_CALLBACK(gtk_widget_destroy), NULL);
             g_object_add_weak_pointer(G_OBJECT(dlg), (gpointer) & dlg);
-            gtk_widget_show_all(GTK_WIDGET(dlg));
+            gtk_widget_show(GTK_WIDGET(dlg));
         }
     }
 
@@ -3747,7 +3747,7 @@ bw_display_new_mail_notification(int num_new, int has_new)
         g_signal_connect(G_OBJECT(dlg), "response",
                          G_CALLBACK(gtk_widget_destroy), NULL);
         g_object_add_weak_pointer(G_OBJECT(dlg), (gpointer) & dlg);
-        gtk_widget_show_all(GTK_WIDGET(dlg));
+        gtk_widget_show(GTK_WIDGET(dlg));
     }
 
     msg = bw_get_new_message_notification_string(num_new, num_total);
@@ -3923,7 +3923,7 @@ bw_find_real(BalsaWindow * window, BalsaIndex * bindex, gboolean again)
        page=gtk_grid_new();
         gtk_grid_set_row_spacing(GTK_GRID(page), 2);
         gtk_grid_set_column_spacing(GTK_GRID(page), 2);
-       gtk_container_set_border_width(GTK_CONTAINER(page), 6);
+       g_object_set(G_OBJECT(page), "margin", 6, NULL);
        w = gtk_label_new_with_mnemonic(_("_Search for:"));
         gtk_widget_set_hexpand(w, TRUE);
        gtk_grid_attach(GTK_GRID(page), w, 0, 0, 1, 1);
@@ -3932,7 +3932,8 @@ bw_find_real(BalsaWindow * window, BalsaIndex * bindex, gboolean again)
         gtk_widget_set_hexpand(search_entry, TRUE);
        gtk_grid_attach(GTK_GRID(page),search_entry,1, 0, 1, 1);
        gtk_label_set_mnemonic_widget(GTK_LABEL(w), search_entry);
-       gtk_box_pack_start(GTK_BOX(vbox), page, FALSE, FALSE, 2);
+        gtk_widget_set_margin_top(page, 2);
+       gtk_box_pack_start(GTK_BOX(vbox), page);
 
        /* builds the toggle buttons to specify fields concerned by
          * the search. */
@@ -3941,8 +3942,8 @@ bw_find_real(BalsaWindow * window, BalsaIndex * bindex, gboolean again)
        gtk_frame_set_label_align(GTK_FRAME(frame),
                                  GTK_POS_LEFT, GTK_POS_TOP);
        gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
-       gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
-       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 2);
+        gtk_widget_set_margin_top(frame, 2);
+       gtk_box_pack_start(GTK_BOX(vbox), frame);
 
        grid = gtk_grid_new();
         gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE);
@@ -3951,61 +3952,74 @@ bw_find_real(BalsaWindow * window, BalsaIndex * bindex, gboolean again)
        matching_from    = bw_add_check_button(grid, _("_From:"),   1, 1);
         matching_subject = bw_add_check_button(grid, _("S_ubject"), 2, 0);
        matching_cc      = bw_add_check_button(grid, _("_CC:"),     2, 1);
+       g_object_set(G_OBJECT(grid), "margin", 6, NULL);
        gtk_container_add(GTK_CONTAINER(frame), grid);
 
        /* Frame with Apply and Clear buttons */
        frame = gtk_frame_new(_("Show only matching messages"));
        gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
-       gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
-       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 2);
+        gtk_widget_set_margin_top(frame, 2);
+       gtk_box_pack_start(GTK_BOX(vbox), frame);
 
        /* Button box */
        box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
-       gtk_container_set_border_width(GTK_CONTAINER(box), 6);
+
        button = gtk_button_new_with_mnemonic(_("_Apply"));
        g_signal_connect(G_OBJECT(button), "clicked",
                         G_CALLBACK(bw_find_button_clicked),
                         GINT_TO_POINTER(FIND_RESPONSE_FILTER));
+       g_object_set(G_OBJECT(button), "margin", 6, NULL);
        gtk_container_add(GTK_CONTAINER(box), button);
+
        button = gtk_button_new_with_mnemonic(_("_Clear"));
        g_signal_connect(G_OBJECT(button), "clicked",
                         G_CALLBACK(bw_find_button_clicked),
                         GINT_TO_POINTER(FIND_RESPONSE_RESET));
+       g_object_set(G_OBJECT(button), "margin", 6, NULL);
        gtk_container_add(GTK_CONTAINER(box), button);
+
+       g_object_set(G_OBJECT(box), "margin", 6, NULL);
        gtk_container_add(GTK_CONTAINER(frame), box);
 
        /* Frame with OK button */
        frame = gtk_frame_new(_("Open next matching message"));
        gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
-       gtk_container_set_border_width(GTK_CONTAINER(frame), 6);
-       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 2);
+        gtk_widget_set_margin_top(frame, 2);
+       gtk_box_pack_start(GTK_BOX(vbox), frame);
 
        /* Reverse and Wrap checkboxes */
        box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+       g_object_set(G_OBJECT(box), "margin", 6, NULL);
        gtk_container_add(GTK_CONTAINER(frame), box);
+
        w = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
         gtk_box_set_homogeneous(GTK_BOX(w), TRUE);
-       gtk_container_set_border_width(GTK_CONTAINER(w), 6);
        reverse_button =
             gtk_check_button_new_with_mnemonic(_("_Reverse search"));
-       gtk_box_pack_start(GTK_BOX(w), reverse_button, TRUE, TRUE, 0);
+       g_object_set(G_OBJECT(reverse_button), "margin", 6, NULL);
+        gtk_widget_set_vexpand(reverse_button, TRUE);
+       gtk_box_pack_start(GTK_BOX(w), reverse_button);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(reverse_button),
                                      reverse);
        wrap_button =
             gtk_check_button_new_with_mnemonic(_("_Wrap around"));
-       gtk_box_pack_start(GTK_BOX(w), wrap_button, TRUE, TRUE, 0);
+       g_object_set(G_OBJECT(wrap_button), "margin", 6, NULL);
+        gtk_widget_set_vexpand(wrap_button, TRUE);
+       gtk_box_pack_start(GTK_BOX(w), wrap_button);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wrap_button),
                                      wrap);
-       gtk_box_pack_start(GTK_BOX(box), w, TRUE, TRUE, 0);
+        gtk_widget_set_hexpand(w, TRUE);
+       gtk_box_pack_start(GTK_BOX(box), w);
 
        button = gtk_button_new_with_mnemonic(_("_OK"));
        g_signal_connect(G_OBJECT(button), "clicked",
                         G_CALLBACK(bw_find_button_clicked),
                         GINT_TO_POINTER(GTK_RESPONSE_OK));
         gtk_widget_set_valign(button, GTK_ALIGN_CENTER);
-       gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+        gtk_widget_set_hexpand(button, TRUE);
+       gtk_box_pack_start(GTK_BOX(box), button);
 
-       gtk_widget_show_all(vbox);
+       gtk_widget_show(vbox);
 
        if (cnd->match.string.string)
            gtk_entry_set_text(GTK_ENTRY(search_entry),
diff --git a/src/message-window.c b/src/message-window.c
index 5dba3dd..1c2fec8 100644
--- a/src/message-window.c
+++ b/src/message-window.c
@@ -852,7 +852,7 @@ message_window_new(LibBalsaMailbox * mailbox, guint msgno)
 #if HAVE_MACOSX_DESKTOP
     libbalsa_macosx_menu(window, GTK_MENU_SHELL(menubar));
 #else
-    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), menubar);
 #endif
 
     mw->headers_shown = balsa_app.shown_headers;
@@ -861,7 +861,7 @@ message_window_new(LibBalsaMailbox * mailbox, guint msgno)
     model = message_window_get_toolbar_model();
 
     mw->toolbar = balsa_toolbar_new(model, G_ACTION_MAP(window));
-    gtk_box_pack_start(GTK_BOX(vbox), mw->toolbar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), mw->toolbar);
 
     gtk_window_set_role(GTK_WINDOW(window), "message");
 
@@ -895,7 +895,8 @@ message_window_new(LibBalsaMailbox * mailbox, guint msgno)
        mw_disable_trash(mw);
     mw->bmessage = balsa_message_new();
     
-    gtk_box_pack_start(GTK_BOX(vbox), mw->bmessage, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(mw->bmessage, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), mw->bmessage);
     gtk_widget_show(vbox);
 
     g_signal_connect(mw->bmessage, "select-part",
diff --git a/src/pref-manager.c b/src/pref-manager.c
index a90be2c..471d834 100644
--- a/src/pref-manager.c
+++ b/src/pref-manager.c
@@ -1003,7 +1003,7 @@ add_button_to_box(const gchar * label, GCallback cb, gpointer cb_data,
 {
     GtkWidget *button = gtk_button_new_with_mnemonic(label);
     g_signal_connect_swapped(button, "clicked", cb, cb_data);
-    gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(box), button);
 
     return button;
 }
@@ -1647,7 +1647,7 @@ address_book_set_default_cb(GtkTreeView * tree_view)
 static void
 add_menu_cb(GtkWidget * menu, GtkWidget * widget)
 {
-    gtk_widget_show_all(menu);
+    gtk_widget_show(menu);
 #if GTK_CHECK_VERSION(3, 22, 0)
     gtk_menu_popup_at_widget(GTK_MENU(menu), GTK_WIDGET(widget),
                              GDK_GRAVITY_NORTH_WEST, GDK_GRAVITY_NORTH_WEST,
@@ -2152,22 +2152,19 @@ pm_grid_add_checking_group(GtkWidget * grid_widget)
 
     label = gtk_label_new(_("When mail arrives:"));
     gtk_widget_set_halign(label, GTK_ALIGN_START);
-    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), label);
 
     pui->notify_new_mail_dialog =
         gtk_check_button_new_with_label(_("Display message"));
-    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_dialog,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_dialog);
 
     pui->notify_new_mail_sound =
         gtk_check_button_new_with_label(_("Play sound"));
-    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_sound,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_sound);
 
     pui->notify_new_mail_icon =
         gtk_check_button_new_with_label(_("Show icon"));
-    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_icon,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), pui->notify_new_mail_icon);
 
     pm_grid_attach(grid, hbox, 1, ++row, 3, 1);
 
@@ -3545,7 +3542,7 @@ open_preferences_manager(GtkWidget * widget, gpointer data)
     g_signal_connect(G_OBJECT(property_box), "response",
                      G_CALLBACK(response_cb), NULL);
 
-    gtk_widget_show_all(GTK_WIDGET(property_box));
+    gtk_widget_show(GTK_WIDGET(property_box));
 
 }                               /* open_preferences_manager */
 
diff --git a/src/print-gtk.c b/src/print-gtk.c
index ed0a96c..317be86 100644
--- a/src/print-gtk.c
+++ b/src/print-gtk.c
@@ -497,10 +497,10 @@ message_prefs_widget(GtkPrintOperation * operation,
     gtk_print_operation_set_custom_tab_label(operation, _("Message"));
 
     page = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
-    gtk_container_set_border_width(GTK_CONTAINER(page), 12);
 
     group = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-    gtk_box_pack_start(GTK_BOX(page), group, FALSE, TRUE, 0);
+    g_object_set(G_OBJECT(group), "margin", 12, NULL);
+    gtk_box_pack_start(GTK_BOX(page), group);
 
     label = gtk_label_new(NULL);
     markup = g_strdup_printf("<b>%s</b>", _("Fonts"));
@@ -508,20 +508,22 @@ message_prefs_widget(GtkPrintOperation * operation,
     g_free(markup);
     gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
     gtk_widget_set_halign(label, GTK_ALIGN_START);
-    gtk_box_pack_start(GTK_BOX(group), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(group), label);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-    gtk_box_pack_start(GTK_BOX(group), hbox, TRUE, TRUE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "),
-                      FALSE, FALSE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(group), hbox);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "));
+
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
 
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 6);
 
-    gtk_box_pack_start(GTK_BOX(vbox), grid, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), grid);
 
     print_prefs->header_font =
        add_font_button(_("_Header Font:"), balsa_app.print_header_font,
@@ -534,7 +536,7 @@ message_prefs_widget(GtkPrintOperation * operation,
                        GTK_GRID(grid), 2);
 
     group = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-    gtk_box_pack_start(GTK_BOX(page), group, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(page), group);
 
     label = gtk_label_new(NULL);
     markup = g_strdup_printf("<b>%s</b>", _("Highlighting"));
@@ -542,22 +544,23 @@ message_prefs_widget(GtkPrintOperation * operation,
     g_free(markup);
     gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
     gtk_widget_set_halign(label, GTK_ALIGN_START);
-    gtk_box_pack_start(GTK_BOX(group), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(group), label);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-    gtk_box_pack_start(GTK_BOX(group), hbox, TRUE, TRUE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "),
-                      FALSE, FALSE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(group), hbox);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "));
+
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
 
     print_prefs->highlight_cited =
        gtk_check_button_new_with_mnemonic(_("Highlight _cited text"));
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
                                 (print_prefs->highlight_cited),
                                 balsa_app.print_highlight_cited);
-    gtk_box_pack_start(GTK_BOX(vbox), print_prefs->highlight_cited, FALSE,
-                      TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), print_prefs->highlight_cited);
 
     print_prefs->highlight_phrases =
        gtk_check_button_new_with_mnemonic(_
@@ -565,11 +568,10 @@ message_prefs_widget(GtkPrintOperation * operation,
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
                                 (print_prefs->highlight_phrases),
                                 balsa_app.print_highlight_phrases);
-    gtk_box_pack_start(GTK_BOX(vbox), print_prefs->highlight_phrases,
-                      FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), print_prefs->highlight_phrases);
 
     group = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-    gtk_box_pack_start(GTK_BOX(page), group, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(page), group);
 
     label = gtk_label_new(NULL);
     markup = g_strdup_printf("<b>%s</b>", _("Margins"));
@@ -577,20 +579,22 @@ message_prefs_widget(GtkPrintOperation * operation,
     g_free(markup);
     gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
     gtk_widget_set_halign(label, GTK_ALIGN_START);
-    gtk_box_pack_start(GTK_BOX(group), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(group), label);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-    gtk_box_pack_start(GTK_BOX(group), hbox, TRUE, TRUE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "),
-                      FALSE, FALSE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(group), hbox);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("    "));
+
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
 
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 6);
 
-    gtk_box_pack_start(GTK_BOX(vbox), grid, FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), grid);
 
     pg_setup = gtk_print_operation_get_default_page_setup(operation);
     print_prefs->margin_top =
@@ -630,7 +634,7 @@ message_prefs_widget(GtkPrintOperation * operation,
                     "value-changed", G_CALLBACK(check_margins),
                     gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(print_prefs->margin_left)));
 
-    gtk_widget_show_all(page);
+    gtk_widget_show(page);
 
     return page;
 }
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 6573dea..7c84270 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -457,7 +457,7 @@ address_book_cb(LibBalsaAddressView * address_view,
                            (GDestroyNotify) gtk_tree_row_reference_free);
     g_object_set_data(G_OBJECT(bsmsg->window),
                       BALSA_SENDMSG_ADDRESS_BOOK_KEY, ab);
-    gtk_widget_show_all(ab);
+    gtk_widget_show(ab);
 }
 
 /* Callback for the "response" signal for the address book dialog. */
@@ -1520,7 +1520,7 @@ show_attachment_widget(BalsaSendmsg *bsmsg)
         g_object_unref(child);
 
         child = sw_attachment_list(bsmsg);
-        gtk_widget_show_all(child);
+        gtk_widget_show(child);
         gtk_paned_add2(inner_paned, child);
         gtk_paned_set_position(inner_paned, position);
 
@@ -1568,8 +1568,10 @@ sw_get_user_codeset(BalsaSendmsg * bsmsg, gboolean * change_type,
 
     g_free(msg);
     content_box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog)));
-    gtk_box_pack_start(content_box, info, FALSE, TRUE, 5);
-    gtk_box_pack_start(content_box, charset_button, TRUE, TRUE, 5);
+    gtk_box_set_spacing(content_box, 5);
+    gtk_box_pack_start(content_box, info);
+    gtk_widget_set_vexpand(charset_button, TRUE);
+    gtk_box_pack_start(content_box, charset_button);
     gtk_widget_show(info);
     gtk_widget_show(charset_button);
     gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
@@ -1579,8 +1581,10 @@ sw_get_user_codeset(BalsaSendmsg * bsmsg, gboolean * change_type,
         GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
         combo_box = gtk_combo_box_text_new();
 
-        gtk_box_pack_start(content_box, hbox, TRUE, TRUE, 5);
-        gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+        gtk_widget_set_vexpand(hbox, TRUE);
+        gtk_box_pack_start(content_box, hbox);
+        gtk_widget_set_hexpand(label, TRUE);
+        gtk_box_pack_start(GTK_BOX(hbox), label);
         gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box),
                                        mime_type);
         gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box),
@@ -1589,8 +1593,9 @@ sw_get_user_codeset(BalsaSendmsg * bsmsg, gboolean * change_type,
         g_signal_connect(G_OBJECT(combo_box), "changed",
                          G_CALLBACK(sw_charset_combo_box_changed),
                          charset_button);
-        gtk_box_pack_start(GTK_BOX(hbox), combo_box, TRUE, TRUE, 0);
-        gtk_widget_show_all(hbox);
+        gtk_widget_set_hexpand(combo_box, TRUE);
+        gtk_box_pack_start(GTK_BOX(hbox), combo_box);
+        gtk_widget_show(hbox);
     }
 
     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
@@ -1862,7 +1867,7 @@ add_attachment(BalsaSendmsg * bsmsg, const gchar *filename,
                                               content_type,
                                               G_CALLBACK(attachment_menu_vfs_cb),
                                               (gpointer)attach_data);
-    gtk_widget_show_all(attach_data->popup_menu);
+    gtk_widget_show(attach_data->popup_menu);
 
     /* append to the list store */
     content_desc =libbalsa_vfs_content_description(content_type);
@@ -1939,7 +1944,7 @@ add_urlref_attachment(BalsaSendmsg * bsmsg, gchar *url)
                     (gpointer)attach_data);
     gtk_menu_shell_append(GTK_MENU_SHELL(attach_data->popup_menu),
                          menu_item);
-    gtk_widget_show_all(attach_data->popup_menu);
+    gtk_widget_show(attach_data->popup_menu);
 
     /* append to the list store */
     gtk_list_store_set(GTK_LIST_STORE(model), &iter,
@@ -2314,7 +2319,7 @@ create_email_or_string_entry(BalsaSendmsg * bsmsg,
                                           BALSA_COMPOSE_ENTRY);
 
         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(arr[1]) ,
@@ -2440,18 +2445,19 @@ create_from_entry(GtkWidget * grid, BalsaSendmsg * bsmsg)
 }
 
 static gboolean
-attachment_button_press_cb(GtkWidget * widget, GdkEventButton * event,
+attachment_button_press_cb(GtkWidget * widget, GdkEvent * event,
                           gpointer data)
 {
     GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
     GtkTreePath *path;
+    gdouble x_win, y_win;
 
     g_return_val_if_fail(event, FALSE);
-    if (!gdk_event_triggers_context_menu((GdkEvent *) event)
-        || event->window != gtk_tree_view_get_bin_window(tree_view))
+    if (!gdk_event_triggers_context_menu(event)
+        || !gdk_event_get_coords(event, &x_win, &y_win))
         return FALSE;
 
-    if (gtk_tree_view_get_path_at_pos(tree_view, event->x, event->y,
+    if (gtk_tree_view_get_path_at_pos(tree_view, (gint) x_win, (gint) y_win,
                                       &path, NULL, NULL, NULL)) {
         GtkTreeIter iter;
         GtkTreeSelection * selection =
@@ -2560,7 +2566,7 @@ create_info_pane(BalsaSendmsg * bsmsg)
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 6);
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 6);
+    g_object_set(G_OBJECT(grid), "margin", 6, NULL);
 
     /* From: */
     create_from_entry(grid, bsmsg);
@@ -2616,7 +2622,7 @@ create_info_pane(BalsaSendmsg * bsmsg)
     create_email_or_string_entry(bsmsg, grid, _("F_CC:"), ++row,
                                  bsmsg->fcc);
 
-    gtk_widget_show_all(grid);
+    gtk_widget_show(grid);
     return grid;
 }
 
@@ -2636,7 +2642,7 @@ sw_attachment_list(BalsaSendmsg *bsmsg)
     grid = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(grid), 6);
     gtk_grid_set_column_spacing(GTK_GRID(grid), 6);
-    gtk_container_set_border_width(GTK_CONTAINER(grid), 6);
+    g_object_set(G_OBJECT(grid), "margin", 6, NULL);
 
     /* Attachment list */
     label = gtk_label_new_with_mnemonic(_("_Attachments:"));
@@ -2885,7 +2891,7 @@ create_text_area(BalsaSendmsg * bsmsg)
                                           BALSA_COMPOSE_ENTRY);
 
         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_widget_set_name(bsmsg->text, BALSA_COMPOSE_ENTRY);
@@ -2932,7 +2938,7 @@ create_text_area(BalsaSendmsg * bsmsg)
                      drop_types, ELEMENTS(drop_types),
                      GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
 
-    gtk_widget_show_all(scroll);
+    gtk_widget_show(scroll);
 
     return scroll;
 }
@@ -3350,14 +3356,16 @@ quote_parts_select_dlg(GtkTreeStore *tree_store, GtkWindow * parent)
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 
-    gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), label);
+    gtk_box_pack_start(GTK_BOX(hbox), image);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), vbox);
+
     content_box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog)));
-    gtk_box_pack_start(content_box, hbox, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start(content_box, hbox);
 
-    gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
-    gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
+    g_object_set(G_OBJECT(hbox), "margin", 5, NULL);
     gtk_box_set_spacing(content_box, 14);
 
     /* scrolled window for the tree view */
@@ -3365,7 +3373,9 @@ quote_parts_select_dlg(GtkTreeStore *tree_store, GtkWindow * parent)
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
-    gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0);
+    g_object_set(G_OBJECT(scroll), "margin", 5, NULL);
+    gtk_widget_set_hexpand(scroll, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), scroll);
 
     /* add the tree view */
     tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store));
@@ -3389,7 +3399,7 @@ quote_parts_select_dlg(GtkTreeStore *tree_store, GtkWindow * parent)
 
     /* add, show & run */
     gtk_container_add(GTK_CONTAINER(scroll), tree_view);
-    gtk_widget_show_all(hbox);
+    gtk_widget_show(hbox);
     result = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK;
     gtk_widget_destroy(dialog);
     return result;
@@ -4532,8 +4542,8 @@ sendmsg_window_set_field(BalsaSendmsg * bsmsg, const gchar * key,
 #endif
     if(g_ascii_strcasecmp(key, "subject") == 0) {
         append_comma_separated(GTK_EDITABLE(bsmsg->subject[1]), val);
-        gtk_widget_show_all(bsmsg->subject[0]);
-        gtk_widget_show_all(bsmsg->subject[1]);
+        gtk_widget_show(bsmsg->subject[0]);
+        gtk_widget_show(bsmsg->subject[1]);
         return;
     }
 
@@ -4562,7 +4572,7 @@ sendmsg_window_set_field(BalsaSendmsg * bsmsg, const gchar * key,
                               "balsa-sendmsg-window-url-bcc", dialog);
             g_signal_connect(G_OBJECT(dialog), "response",
                              G_CALLBACK(gtk_widget_destroy), NULL);
-            gtk_widget_show_all(dialog);
+            gtk_widget_show(dialog);
         }
     }
     else if(g_ascii_strcasecmp(key, "replyto") == 0) {
@@ -4984,51 +4994,54 @@ subject_not_empty(BalsaSendmsg * bsmsg)
                                     _("_Cancel"), GTK_RESPONSE_CANCEL,
                                     _("_Send"),   GTK_RESPONSE_OK,
                                     NULL);
-    gtk_container_set_border_width (GTK_CONTAINER (no_subj_dialog), 6);
     gtk_window_set_resizable (GTK_WINDOW (no_subj_dialog), FALSE);
     gtk_window_set_type_hint (GTK_WINDOW (no_subj_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
 
     dialog_vbox = gtk_dialog_get_content_area(GTK_DIALOG(no_subj_dialog));
+    g_object_set(G_OBJECT(dialog_vbox), "margin", 6, NULL);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
-    gtk_box_pack_start (GTK_BOX (dialog_vbox), hbox, TRUE, TRUE, 0);
-    gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
+    gtk_widget_set_vexpand(hbox, TRUE);
+    gtk_box_pack_start (GTK_BOX (dialog_vbox), hbox);
+    g_object_set(G_OBJECT(hbox), "margin", 6, NULL);
 
     image = gtk_image_new_from_icon_name("dialog-question",
                                          GTK_ICON_SIZE_DIALOG);
-    gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (hbox), image);
     gtk_widget_set_valign(image, GTK_ALIGN_START);
 
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-    gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(vbox, TRUE);
+    gtk_box_pack_start (GTK_BOX (hbox), vbox);
 
     text_str = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s",
                               _("You did not specify a subject for this message"),
                               _("If you would like to provide one, enter it below."));
     label = gtk_label_new (text_str);
     g_free(text_str);
-    gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), label);
     gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
     gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
     gtk_widget_set_halign(label, GTK_ALIGN_START);
     gtk_widget_set_valign(label, GTK_ALIGN_START);
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), hbox);
 
     label = gtk_label_new (_("Subject:"));
-    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (hbox), label);
 
     subj_entry = gtk_entry_new ();
     gtk_entry_set_text(GTK_ENTRY(subj_entry), _("(no subject)"));
-    gtk_box_pack_start (GTK_BOX (hbox), subj_entry, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(subj_entry, TRUE);
+    gtk_box_pack_start (GTK_BOX (hbox), subj_entry);
     gtk_entry_set_activates_default (GTK_ENTRY (subj_entry), TRUE);
     gtk_dialog_set_default_response(GTK_DIALOG (no_subj_dialog),
                                     GTK_RESPONSE_OK);
 
     gtk_widget_grab_focus (subj_entry);
     gtk_editable_select_region(GTK_EDITABLE(subj_entry), 0, -1);
-    gtk_widget_show_all(dialog_vbox);
+    gtk_widget_show(dialog_vbox);
 
     response = gtk_dialog_run(GTK_DIALOG(no_subj_dialog));
 
@@ -5118,10 +5131,10 @@ check_suggest_encryption(BalsaSendmsg * bsmsg)
        gtk_container_add(GTK_CONTAINER(button), hbox);
        image = gtk_image_new_from_icon_name(balsa_icon_id(BALSA_PIXMAP_GPG_ENCRYPT),
                                              GTK_ICON_SIZE_BUTTON);
-       gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(hbox), image);
        label = gtk_label_new_with_mnemonic(_("Send _encrypted"));
-       gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-       gtk_widget_show_all(button);
+       gtk_box_pack_start(GTK_BOX(hbox), label);
+       gtk_widget_show(button);
 
        button = gtk_button_new();
        gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button, GTK_RESPONSE_NO);
@@ -5133,10 +5146,10 @@ check_suggest_encryption(BalsaSendmsg * bsmsg)
        gtk_container_add(GTK_CONTAINER(button), hbox);
        image = gtk_image_new_from_icon_name(balsa_icon_id(BALSA_PIXMAP_SEND),
                                              GTK_ICON_SIZE_BUTTON);
-       gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(hbox), image);
        label = gtk_label_new_with_mnemonic(_("Send _unencrypted"));
-       gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-       gtk_widget_show_all(button);
+       gtk_box_pack_start(GTK_BOX(hbox), label);
+       gtk_widget_show(button);
 
        button = gtk_button_new_with_mnemonic(_("_Cancel"));
        gtk_widget_show(button);
@@ -5847,8 +5860,8 @@ sw_entry_helper(GSimpleAction      * action,
                 GtkWidget    * entry[])
 {
     if (g_variant_get_boolean(state)) {
-        gtk_widget_show_all(entry[0]);
-        gtk_widget_show_all(entry[1]);
+        gtk_widget_show(entry[0]);
+        gtk_widget_show(entry[1]);
         gtk_widget_grab_focus(entry[1]);
     } else {
         gtk_widget_hide(entry[0]);
@@ -6602,7 +6615,7 @@ sendmsg_window_new()
     gtk_window_set_role(GTK_WINDOW(window), "compose");
 
     gtk_container_add(GTK_CONTAINER(window), main_box);
-    gtk_widget_show_all(window);
+    gtk_widget_show(window);
 
     bsmsg->type = SEND_NORMAL;
     bsmsg->is_continue = FALSE;
@@ -6649,12 +6662,11 @@ sendmsg_window_new()
 #if HAVE_MACOSX_DESKTOP
     libbalsa_macosx_menu(window, GTK_MENU_SHELL(menubar));
 #else
-    gtk_box_pack_start(GTK_BOX(main_box), menubar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(main_box), menubar);
 #endif
 
     bsmsg->toolbar = balsa_toolbar_new(model, G_ACTION_MAP(window));
-    gtk_box_pack_start(GTK_BOX(main_box), bsmsg->toolbar,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(main_box), bsmsg->toolbar);
 
     bsmsg->flow = !balsa_app.wordwrap;
     sw_action_set_enabled(bsmsg, "reflow", bsmsg->flow);
@@ -6685,7 +6697,8 @@ sendmsg_window_new()
     /* Paned window for the addresses at the top, and the content at the
      * bottom: */
     bsmsg->paned = paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(main_box), paned, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(paned, TRUE);
+    gtk_box_pack_start(GTK_BOX(main_box), paned);
     gtk_widget_show(paned);
 
     /* create the top portion with the to, from, etc in it */
diff --git a/src/spell-check.c b/src/spell-check.c
index 037099c..3c1a5cc 100644
--- a/src/spell-check.c
+++ b/src/spell-check.c
@@ -300,13 +300,14 @@ balsa_spell_check_init(BalsaSpellCheck * spell_check)
     gtk_container_add((GtkContainer *) spell_check, box_widget);
 
     box = (GtkBox *) box_widget;
-    gtk_box_pack_start(box, widget, FALSE, FALSE, 0);
+    gtk_box_pack_start(box, widget);
 
     sw = gtk_scrolled_window_new(NULL, NULL);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
                                   GTK_POLICY_AUTOMATIC,
                                   GTK_POLICY_AUTOMATIC);
-    gtk_box_pack_start(box, sw, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(sw, TRUE);
+    gtk_box_pack_start(box, sw);
 
     /* setup suggestion list */
     store = gtk_list_store_new(1, G_TYPE_STRING);
@@ -330,7 +331,7 @@ balsa_spell_check_init(BalsaSpellCheck * spell_check)
 
     /* setup buttons to perform actions */
     widget = gtk_grid_new();
-    gtk_box_pack_start(box, widget, FALSE, FALSE, 0);
+    gtk_box_pack_start(box, widget);
 
     grid = GTK_GRID(widget);
     gtk_grid_set_row_spacing(grid, BALSA_SPELL_CHECK_PADDING);
@@ -624,7 +625,7 @@ balsa_spell_check_start(BalsaSpellCheck * spell_check)
 
     /* start the check */
     if (!balsa_spell_check_next(spell_check))
-        gtk_widget_show_all(GTK_WIDGET(spell_check));
+        gtk_widget_show(GTK_WIDGET(spell_check));
 }
 
 /* balsa_spell_check_next ()
diff --git a/src/store-address.c b/src/store-address.c
index 5efd9ae..85f9091 100644
--- a/src/store-address.c
+++ b/src/store-address.c
@@ -133,7 +133,7 @@ balsa_store_address(const LibBalsaAddress *address)
 
     g_signal_connect(G_OBJECT(info->dialog), "response",
                      G_CALLBACK(store_address_response), info);
-    gtk_widget_show_all(GTK_WIDGET(info->dialog));
+    gtk_widget_show(GTK_WIDGET(info->dialog));
 }
 
 /* Weak notify that a message was deleted; remove it from our list. */
@@ -221,13 +221,14 @@ store_address_dialog(StoreAddressInfo * info)
     if (balsa_app.address_book_list && balsa_app.address_book_list->next) {
         /* User has more than one address book, so show the options */
         frame = store_address_book_frame(info);
-        gtk_widget_show_all(frame);
-        gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+        gtk_widget_show(frame);
+        gtk_box_pack_start(GTK_BOX(vbox), frame);
     }
 
     frame = store_address_note_frame(info);
-    gtk_widget_show_all(frame);
-    gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
+    gtk_widget_show(frame);
+    gtk_widget_set_vexpand(frame, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), frame);
 
     return dialog;
 }
@@ -286,9 +287,8 @@ store_address_book_frame(StoreAddressInfo * info)
     GList *ab_list;
 
     hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
-    gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
-    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Address Book:")),
-                       FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(hbox), "margin", 4, NULL);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Address Book:")));
 
     combo_box = gtk_combo_box_text_new();
     g_signal_connect(combo_box, "changed",
@@ -313,7 +313,8 @@ store_address_book_frame(StoreAddressInfo * info)
     }
     gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), default_ab_offset);
 
-    gtk_box_pack_start(GTK_BOX(hbox), combo_box, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(combo_box, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), combo_box);
 
     return hbox;
 }
@@ -328,7 +329,7 @@ store_address_note_frame(StoreAddressInfo *info)
 
     info->notebook = gtk_notebook_new();
     gtk_notebook_set_scrollable(GTK_NOTEBOOK(info->notebook), TRUE);
-    gtk_container_set_border_width(GTK_CONTAINER(info->notebook), 4);
+    g_object_set(G_OBJECT(info->notebook), "margin", 4, NULL);
 
     for (list = info->message_list; list; list = list->next) {
         message = LIBBALSA_MESSAGE(list->data);
diff --git a/src/toolbar-factory.c b/src/toolbar-factory.c
index f044d4a..e14ca2b 100644
--- a/src/toolbar-factory.c
+++ b/src/toolbar-factory.c
@@ -578,7 +578,7 @@ tm_populate(GtkWidget * toolbar, BalsaToolbarModel * model)
                           model->style != (GtkToolbarStyle) (-1) ?
                           model->style : tm_default_style());
 
-    gtk_widget_show_all(toolbar);
+    gtk_widget_show(toolbar);
 }
 
 /* Update a real toolbar when the model has changed.
@@ -695,9 +695,6 @@ tm_popup_context_menu_cb(GtkWidget    * toolbar,
                          toolbar_info * info)
 {
     GtkWidget *menu;
-#if !GTK_CHECK_VERSION(3, 22, 0)
-    int event_time;
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
     guint i;
     GSList *group = NULL;
     GtkToolbarStyle default_style;
@@ -788,12 +785,11 @@ tm_popup_context_menu_cb(GtkWidget    * toolbar,
                           GINT_TO_POINTER(info->model->type));
     }
 
-    gtk_widget_show_all(menu);
+    gtk_widget_show(menu);
     gtk_menu_attach_to_widget(GTK_MENU(menu), toolbar, NULL);
 
     event = gtk_get_current_event();
-#if GTK_CHECK_VERSION(3, 22, 0)
-    if (event != NULL && event->type == GDK_BUTTON_PRESS) {
+    if (event != NULL && gdk_event_get_event_type(event) == GDK_BUTTON_PRESS) {
         gtk_menu_popup_at_pointer(GTK_MENU(menu), event);
     } else {
         gtk_menu_popup_at_widget(GTK_MENU(menu),
@@ -802,16 +798,6 @@ tm_popup_context_menu_cb(GtkWidget    * toolbar,
                                  GDK_GRAVITY_SOUTH,
                                  NULL);
     }
-#else                           /*GTK_CHECK_VERSION(3, 22, 0) */
-    event_time = gtk_get_current_event_time();
-
-    if (button >= 0)
-        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button,
-                       event_time);
-    else
-        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, tm_popup_position_func,
-                       toolbar, button, event_time);
-#endif                          /*GTK_CHECK_VERSION(3, 22, 0) */
 
     if (event != NULL)
         gdk_event_free(event);
@@ -842,7 +828,7 @@ GtkWidget *balsa_toolbar_new(BalsaToolbarModel * model,
     g_signal_connect(toolbar, "popup-context-menu",
                      G_CALLBACK(tm_popup_context_menu_cb), info);
 
-    gtk_widget_show_all(toolbar);
+    gtk_widget_show(toolbar);
 
     return toolbar;
 }
diff --git a/src/toolbar-prefs.c b/src/toolbar-prefs.c
index 26721cb..c4db7cf 100644
--- a/src/toolbar-prefs.c
+++ b/src/toolbar-prefs.c
@@ -151,7 +151,8 @@ customize_dialog_cb(GtkWidget * widget, gpointer data)
     notebook = gtk_notebook_new();
     content_area =
         gtk_dialog_get_content_area(GTK_DIALOG(customize_widget));
-    gtk_box_pack_start(GTK_BOX(content_area), notebook, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(notebook, TRUE);
+    gtk_box_pack_start(GTK_BOX(content_area), notebook);
 
     gtk_window_set_role(GTK_WINDOW(customize_widget), "customize");
     gtk_window_set_default_size(GTK_WINDOW(customize_widget), 600, 440);
@@ -192,11 +193,10 @@ customize_dialog_cb(GtkWidget * widget, gpointer data)
                              gtk_label_new(_("Message window")));
 
     option_frame = gtk_frame_new(_("Toolbar options"));
-    gtk_container_set_border_width(GTK_CONTAINER(option_frame), 6);
-    gtk_box_pack_start(GTK_BOX(content_area), option_frame, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(content_area), option_frame);
 
     option_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-    gtk_container_set_border_width(GTK_CONTAINER(option_box), 6);
+    g_object_set(G_OBJECT(option_box), "margin", 6, NULL);
     gtk_container_add(GTK_CONTAINER(option_frame), option_box);
 
     wrap_button =
@@ -205,9 +205,10 @@ customize_dialog_cb(GtkWidget * widget, gpointer data)
                                  balsa_app.toolbar_wrap_button_text);
     g_signal_connect(G_OBJECT(wrap_button), "toggled",
                      G_CALLBACK(wrap_toggled_cb), notebook);
-    gtk_box_pack_start(GTK_BOX(option_box), wrap_button, FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(wrap_button), "margin", 6, NULL);
+    gtk_box_pack_start(GTK_BOX(option_box), wrap_button);
 
-    gtk_widget_show_all(customize_widget);
+    gtk_widget_show(customize_widget);
 
     /* Now that the pages are shown, we can switch to the page
      * corresponding to the toolbar that the user clicked on. */
@@ -420,12 +421,11 @@ create_toolbar_page(BalsaToolbarModel * model, GActionMap * map)
 
     /* Preview display */
     toolbar_frame=gtk_frame_new(_("Preview"));
-    gtk_container_set_border_width(GTK_CONTAINER(toolbar_frame), 5);
-    gtk_box_pack_start(GTK_BOX(outer_box), toolbar_frame, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(outer_box), toolbar_frame);
 
     toolbar_ctlbox=gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
+    g_object_set(G_OBJECT(toolbar_ctlbox), "margin", 5, NULL);
     gtk_container_add(GTK_CONTAINER(toolbar_frame), toolbar_ctlbox);
-    gtk_container_set_border_width(GTK_CONTAINER(toolbar_ctlbox), 5);
 
     /* The preview is an actual, fully functional toolbar */
     page->toolbar = balsa_toolbar_new(model, map);
@@ -437,15 +437,17 @@ create_toolbar_page(BalsaToolbarModel * model, GActionMap * map)
                                   GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_NEVER);
 
-    gtk_box_pack_start(GTK_BOX(toolbar_ctlbox), toolbar_scroll,
-                       TRUE, TRUE, 0);
+    g_object_set(G_OBJECT(toolbar_scroll), "margin", 5, NULL);
+    gtk_widget_set_vexpand(toolbar_scroll, TRUE);
+    gtk_box_pack_start(GTK_BOX(toolbar_ctlbox), toolbar_scroll);
 
     gtk_container_add(GTK_CONTAINER(toolbar_scroll), page->toolbar);
 
     /* Button box */
     button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
     gtk_box_set_spacing(GTK_BOX(button_box), 5);
-    gtk_box_pack_start(GTK_BOX(toolbar_ctlbox), button_box, FALSE, FALSE, 0);
+    g_object_set(G_OBJECT(button_box), "margin", 5, NULL);
+    gtk_box_pack_start(GTK_BOX(toolbar_ctlbox), button_box);
 
     /* Standard button */
     page->standard_button =
@@ -460,9 +462,10 @@ create_toolbar_page(BalsaToolbarModel * model, GActionMap * map)
 
     /* Box for lower half of window */
     lower_ctlbox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
-    gtk_container_set_border_width(GTK_CONTAINER(lower_ctlbox), 5);
+    g_object_set(G_OBJECT(lower_ctlbox), "margin", 5, NULL);
 
-    gtk_box_pack_start(GTK_BOX(outer_box), lower_ctlbox, TRUE, TRUE, 0);
+    gtk_widget_set_vexpand(lower_ctlbox, TRUE);
+    gtk_box_pack_start(GTK_BOX(outer_box), lower_ctlbox);
 
     /* A list to show the available items */
     list_scroll=gtk_scrolled_window_new(NULL, NULL);
@@ -473,8 +476,8 @@ create_toolbar_page(BalsaToolbarModel * model, GActionMap * map)
     list_frame=gtk_frame_new(_("Available buttons"));
     page->available = tp_list_new();
 
-    gtk_box_pack_start(GTK_BOX(lower_ctlbox), list_frame,
-                      TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(list_frame, TRUE);
+    gtk_box_pack_start(GTK_BOX(lower_ctlbox), list_frame);
     gtk_container_add(GTK_CONTAINER(list_frame), list_scroll);
     gtk_container_add(GTK_CONTAINER(list_scroll), page->available);
 
@@ -497,46 +500,44 @@ create_toolbar_page(BalsaToolbarModel * model, GActionMap * map)
 
     button_box=gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
-    gtk_box_pack_start(GTK_BOX(lower_ctlbox), center_button_box,
-                      FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(lower_ctlbox), center_button_box);
 
-    gtk_box_pack_start(GTK_BOX(center_button_box), button_box,
-                      FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(center_button_box), button_box);
 
     page->back_button =
         gtk_button_new_from_icon_name("go-up-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text(page->back_button,
                                 _("Move selected item up"));
-    gtk_box_pack_start(GTK_BOX(button_box), page->back_button, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(button_box), page->back_button);
 
     move_button_box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-    gtk_box_pack_start(GTK_BOX(button_box), move_button_box, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(button_box), move_button_box);
 
     page->remove_button =
         gtk_button_new_from_icon_name("go-previous-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text(page->remove_button,
                                 _("Remove selected item from toolbar"));
-    gtk_box_pack_start(GTK_BOX(move_button_box), page->remove_button,
-                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(move_button_box), page->remove_button);
 
     page->add_button =
         gtk_button_new_from_icon_name("go-next-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text(page->add_button,
                                 _("Add selected item to toolbar"));
-    gtk_box_pack_start(GTK_BOX(move_button_box), page->add_button, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(move_button_box), page->add_button);
 
     page->forward_button =
         gtk_button_new_from_icon_name("go-down-symbolic",
                                       GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text(page->forward_button,
                                 _("Move selected item down"));
-    gtk_box_pack_start(GTK_BOX(button_box), page->forward_button, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(button_box), page->forward_button);
 
     /* Pack destination list */
-    gtk_box_pack_start(GTK_BOX(lower_ctlbox), destination_frame, TRUE, TRUE, 0);
+    gtk_widget_set_hexpand(destination_frame, TRUE);
+    gtk_box_pack_start(GTK_BOX(lower_ctlbox), destination_frame);
     gtk_container_add(GTK_CONTAINER(destination_frame), destination_scroll);
     gtk_container_add(GTK_CONTAINER(destination_scroll), page->current);
 


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