[balsa/wip/gtk4: 325/351] main-window: Declare it derivable



commit 4f44520a0e2f7f217b6f1dcd3586f08ad8a17d97
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Tue May 1 21:49:28 2018 -0400

    main-window: Declare it derivable
    
    …with a private structure, and a getter for the statusbar.

 src/balsa-mime-widget-text.c |   24 +-
 src/information-dialog.c     |    6 +-
 src/mailbox-node.c           |    2 +-
 src/main-window.c            |  649 +++++++++++++++++++++++++-----------------
 src/main-window.h            |   62 +---
 5 files changed, 415 insertions(+), 328 deletions(-)
---
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index 3468595..0189ed4 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -811,14 +811,17 @@ find_url(BalsaMimeWidgetText * mwt, gint x, gint y)
 static gboolean
 statusbar_pop(gpointer data)
 {
-    if (BALSA_IS_WINDOW(balsa_app.main_window)
-        && GTK_IS_STATUSBAR(balsa_app.main_window->statusbar)) {
+    if (BALSA_IS_WINDOW(balsa_app.main_window)) {
         GtkStatusbar *statusbar;
-        guint context_id;
 
-        statusbar = (GtkStatusbar *) balsa_app.main_window->statusbar;
-        context_id = gtk_statusbar_get_context_id(statusbar, "BalsaMimeWidget message");
-        gtk_statusbar_pop(statusbar, context_id);
+        statusbar = balsa_window_get_statusbar(balsa_app.main_window);
+        if (GTK_IS_STATUSBAR(statusbar)) {
+            guint context_id;
+
+            context_id = gtk_statusbar_get_context_id(statusbar,
+                                                      "BalsaMimeWidget message");
+            gtk_statusbar_pop(statusbar, context_id);
+        }
     }
 
     return FALSE;
@@ -839,7 +842,7 @@ handle_url(const gchar * url)
         gchar *notice = g_strdup_printf(_("Calling URL %s…"), url);
         GError *err = NULL;
 
-        statusbar = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+        statusbar = balsa_window_get_statusbar(balsa_app.main_window);
         context_id =
             gtk_statusbar_get_context_id(statusbar,
                                          "BalsaMimeWidget message");
@@ -1033,14 +1036,15 @@ bm_widget_on_url(const gchar *url)
     GtkStatusbar *statusbar;
     guint context_id;
 
-    statusbar = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+    statusbar = balsa_window_get_statusbar(balsa_app.main_window);
     context_id = gtk_statusbar_get_context_id(statusbar, "BalsaMimeWidget URL");
 
-    if( url ) {
+    if (url != NULL) {
         gtk_statusbar_push(statusbar, context_id, url);
         SCHEDULE_BAR_REFRESH();
-    } else 
+    } else {
         gtk_statusbar_pop(statusbar, context_id);
+    }
 }
 
 #ifdef HAVE_HTML_WIDGET
diff --git a/src/information-dialog.c b/src/information-dialog.c
index 8b30950..4afd981 100644
--- a/src/information-dialog.c
+++ b/src/information-dialog.c
@@ -290,7 +290,7 @@ balsa_information_list(GtkWindow *parent, LibBalsaInformationType type,
         GtkStatusbar *statusbar;
         guint context_id;
 
-        statusbar = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+        statusbar = balsa_window_get_statusbar(balsa_app.main_window);
         context_id = gtk_statusbar_get_context_id(statusbar, "Information list");
         gtk_statusbar_pop(statusbar, context_id);
 
@@ -309,7 +309,7 @@ status_bar_refresh(gpointer data)
         GtkStatusbar *statusbar;
         guint context_id;
 
-        statusbar = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+        statusbar = balsa_window_get_statusbar(balsa_app.main_window);
         context_id = gtk_statusbar_get_context_id(statusbar, "Information bar");
         gtk_statusbar_pop(statusbar, context_id);
     }
@@ -330,7 +330,7 @@ balsa_information_bar(GtkWindow *parent, LibBalsaInformationType type,
     if (!balsa_app.main_window)
         return;
 
-    statusbar = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+    statusbar = balsa_window_get_statusbar(balsa_app.main_window);
     context_id = gtk_statusbar_get_context_id(statusbar, "Information bar");
 
     /* First clear any current message. */
diff --git a/src/mailbox-node.c b/src/mailbox-node.c
index 3eae091..e57a239 100644
--- a/src/mailbox-node.c
+++ b/src/mailbox-node.c
@@ -488,7 +488,7 @@ imap_dir_cb(BalsaMailboxNode *mb)
     if (!balsa_app.main_window)
         return;
 
-    statusbar  = GTK_STATUSBAR(balsa_app.main_window->statusbar);
+    statusbar = balsa_window_get_statusbar(balsa_app.main_window);
     context_id = gtk_statusbar_get_context_id(statusbar, "MailboxNode imap");
 
     if (restore_children_from_cache(mb))
diff --git a/src/main-window.c b/src/main-window.c
index 015a034..cd724b6 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -187,7 +187,46 @@ static void bw_reset_filter(BalsaWindow * bw);
    proponents of GNOME2 dumbify approach (OK, I am bit unfair here).
 */
 
-G_DEFINE_TYPE (BalsaWindow, balsa_window, GTK_TYPE_APPLICATION_WINDOW)
+typedef struct _BalsaWindowPrivate BalsaWindowPrivate;
+
+struct _BalsaWindowPrivate {
+    GtkApplicationWindow window;
+
+    GtkWidget *toolbar;
+    GtkWidget *sos_bar;
+    GtkWidget *bottom_bar;
+    GtkWidget *progress_bar;
+    GtkWidget *statusbar;
+    GtkWidget *mblist;
+    GtkWidget *sos_entry;       /* SenderOrSubject filter entry */
+    GtkWidget *notebook;
+    GtkWidget *preview;                /* message is child */
+    GtkWidget *paned_master;
+    GtkWidget *paned_slave;
+    GtkWidget *current_index;
+    GtkWidget *filter_choice;
+    GtkWidget *vbox;
+    GtkWidget *content;
+
+    guint set_message_id;
+
+    /* Progress bar stuff: */
+    BalsaWindowProgress progress_type;
+    guint activity_handler;
+    guint activity_counter;
+    GSList *activity_messages;
+
+#ifdef HAVE_NOTIFY
+    NotifyNotification *new_mail_note;
+#endif                         /* HAVE_NOTIFY */
+
+    /* Support GNetworkMonitor: */
+    gboolean network_available;
+    time_t last_check_time;
+    guint network_changed_source_id;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(BalsaWindow, balsa_window, GTK_TYPE_APPLICATION_WINDOW)
 
 static guint window_signals[LAST_SIGNAL] = { 0 };
 
@@ -238,16 +277,17 @@ bw_network_changed_cb(GNetworkMonitor * monitor,
                       gboolean          available,
                       gpointer          user_data)
 {
-    BalsaWindow *window = user_data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    if (window->network_available != available) {
-        window->network_available = available;
+    if (priv->network_available != available) {
+        priv->network_available = available;
         print_network_status(available);
     }
 
-    if (window->network_changed_source_id == 0) {
+    if (priv->network_changed_source_id == 0) {
         /* Wait 2 seconds or so to let the network stabilize */
-        window->network_changed_source_id =
+        priv->network_changed_source_id =
             g_timeout_add_seconds(2, bw_change_connection_status_idle, window);
     }
 }
@@ -255,15 +295,16 @@ bw_network_changed_cb(GNetworkMonitor * monitor,
 static void
 balsa_window_init(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GNetworkMonitor *monitor;
 
     monitor = g_network_monitor_get_default();
-    window->network_available =
+    priv->network_available =
         g_network_monitor_get_network_available(monitor);
-    print_network_status(window->network_available);
+    print_network_status(priv->network_available);
     g_signal_connect(monitor, "network-changed",
                      G_CALLBACK(bw_network_changed_cb), window);
-    window->last_check_time = 0;
+    priv->last_check_time = 0;
 }
 
 static gboolean
@@ -313,9 +354,9 @@ bw_frame(GtkWidget * widget)
    actually insert the 'c' character in the entry. */
 
 static void
-bw_check_filter(GtkWidget *widget, GParamSpec *pspec, gpointer data)
+bw_check_filter(GtkWidget *widget, GParamSpec *pspec, gpointer user_data)
 {
-    BalsaWindow *window = data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
 
     libbalsa_window_block_accels((GtkApplicationWindow *) window,
                                  gtk_widget_has_focus(widget));
@@ -340,11 +381,12 @@ bw_set_view_filter(BalsaWindow * bw, gint filter_no, GtkWidget * entry)
 static void
 bw_filter_entry_activate(GtkWidget * entry, GtkWidget * button)
 {
-    BalsaWindow *bw = balsa_app.main_window;
+    BalsaWindow *window = balsa_app.main_window;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     int filter_no =
-        gtk_combo_box_get_active(GTK_COMBO_BOX(bw->filter_choice));
+        gtk_combo_box_get_active(GTK_COMBO_BOX(priv->filter_choice));
 
-    bw_set_view_filter(bw, filter_no, entry);
+    bw_set_view_filter(window, filter_no, entry);
     gtk_widget_set_sensitive(button, FALSE);
 }
 
@@ -446,6 +488,7 @@ static gboolean view_filters_translated = FALSE;
 static GtkWidget*
 bw_create_index_widget(BalsaWindow *bw)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(bw);
     GtkWidget *vbox, *button;
     unsigned i;
     GList *focusable_widgets;
@@ -456,40 +499,40 @@ bw_create_index_widget(BalsaWindow *bw)
         view_filters_translated = TRUE;
     }
 
-    bw->sos_bar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+    priv->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);
+    priv->filter_choice = gtk_combo_box_text_new();
+    gtk_box_pack_start(GTK_BOX(priv->sos_bar), priv->filter_choice);
     for(i=0; i<G_N_ELEMENTS(view_filters); i++)
-        gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(bw->filter_choice),
+        gtk_combo_box_text_insert_text(GTK_COMBO_BOX_TEXT(priv->filter_choice),
                                        i, view_filters[i].str);
-    gtk_combo_box_set_active(GTK_COMBO_BOX(bw->filter_choice), 0);
-    bw->sos_entry = gtk_entry_new();
-    /* gtk_label_set_mnemonic_widget(GTK_LABEL(bw->filter_choice),
-       bw->sos_entry); */
-    g_signal_connect(G_OBJECT(bw->sos_entry), "notify::has-focus",
+    gtk_combo_box_set_active(GTK_COMBO_BOX(priv->filter_choice), 0);
+    priv->sos_entry = gtk_entry_new();
+    /* gtk_label_set_mnemonic_widget(GTK_LABEL(priv->filter_choice),
+       priv->sos_entry); */
+    g_signal_connect(G_OBJECT(priv->sos_entry), "notify::has-focus",
                      G_CALLBACK(bw_check_filter), bw);
-    gtk_widget_set_hexpand(bw->sos_entry, TRUE);
-    gtk_box_pack_start(GTK_BOX(bw->sos_bar), bw->sos_entry);
+    gtk_widget_set_hexpand(priv->sos_entry, TRUE);
+    gtk_box_pack_start(GTK_BOX(priv->sos_bar), priv->sos_entry);
     button = gtk_button_new_from_icon_name("gtk-ok");
-    gtk_box_pack_start(GTK_BOX(bw->sos_bar), button);
-    g_signal_connect(G_OBJECT(bw->sos_entry), "activate",
+    gtk_box_pack_start(GTK_BOX(priv->sos_bar), button);
+    g_signal_connect(G_OBJECT(priv->sos_entry), "activate",
                      G_CALLBACK(bw_filter_entry_activate),
                      button);
     g_signal_connect_swapped(G_OBJECT(button), "clicked",
                              G_CALLBACK(bw_filter_entry_activate),
-                             bw->sos_entry);
-    g_signal_connect(G_OBJECT(bw->sos_entry), "changed",
+                             priv->sos_entry);
+    g_signal_connect(G_OBJECT(priv->sos_entry), "changed",
                              G_CALLBACK(bw_filter_entry_changed),
                              button);
-    g_signal_connect(G_OBJECT(bw->filter_choice), "changed",
+    g_signal_connect(G_OBJECT(priv->filter_choice), "changed",
                      G_CALLBACK(bw_filter_entry_changed), button);
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 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);
+    gtk_box_pack_start(GTK_BOX(vbox), priv->sos_bar);
+    gtk_widget_set_vexpand(priv->notebook, TRUE);
+    gtk_box_pack_start(GTK_BOX(vbox), priv->notebook);
 
-    focusable_widgets = g_list_append(NULL, bw->notebook);
+    focusable_widgets = g_list_append(NULL, priv->notebook);
     gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focusable_widgets);
     g_list_free(focusable_widgets);
 
@@ -501,67 +544,68 @@ bw_create_index_widget(BalsaWindow *bw)
 static void
 bw_set_panes(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *index_widget = bw_create_index_widget(window);
     GtkWidget *bindex;
     BalsaIndexWidthPreference width_preference;
 
     switch (balsa_app.layout_type) {
     case LAYOUT_WIDE_MSG:
-       window->paned_master = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-       window->paned_slave  = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-        if (window->content)
-            gtk_container_remove(GTK_CONTAINER(window->vbox),
-                                 window->content);
-        window->content = window->paned_master;
-        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),
+       priv->paned_master = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+       priv->paned_slave  = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+        if (priv->content)
+            gtk_container_remove(GTK_CONTAINER(priv->vbox),
+                                 priv->content);
+        priv->content = priv->paned_master;
+        gtk_widget_set_vexpand(priv->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(priv->vbox), priv->content);
+       gtk_paned_pack1(GTK_PANED(priv->paned_slave),
+                       bw_frame(priv->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(priv->paned_slave),
                        bw_frame(index_widget), TRUE, TRUE);
-        gtk_paned_pack1(GTK_PANED(window->paned_master),
-                       window->paned_slave, TRUE, TRUE);
-       gtk_paned_pack2(GTK_PANED(window->paned_master),
-                       bw_frame(window->preview), TRUE, TRUE);
+        gtk_paned_pack1(GTK_PANED(priv->paned_master),
+                       priv->paned_slave, TRUE, TRUE);
+       gtk_paned_pack2(GTK_PANED(priv->paned_master),
+                       bw_frame(priv->preview), TRUE, TRUE);
         width_preference = BALSA_INDEX_WIDE;
        break;
     case LAYOUT_WIDE_SCREEN:
-       window->paned_master = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-       window->paned_slave  = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-        if (window->content)
-            gtk_container_remove(GTK_CONTAINER(window->vbox),
-                                 window->content);
-        window->content = window->paned_master;
-        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,
+       priv->paned_master = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+       priv->paned_slave  = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+        if (priv->content)
+            gtk_container_remove(GTK_CONTAINER(priv->vbox),
+                                 priv->content);
+        priv->content = priv->paned_master;
+        gtk_widget_set_vexpand(priv->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(priv->vbox), priv->content);
+       gtk_paned_pack1(GTK_PANED(priv->paned_master),
+                        bw_frame(priv->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(priv->paned_master), priv->paned_slave,
                         TRUE, TRUE);
-        gtk_paned_pack1(GTK_PANED(window->paned_slave),
+        gtk_paned_pack1(GTK_PANED(priv->paned_slave),
                         bw_frame(index_widget), TRUE, FALSE);
-       gtk_paned_pack2(GTK_PANED(window->paned_slave),
-                        bw_frame(window->preview), TRUE, TRUE);
+       gtk_paned_pack2(GTK_PANED(priv->paned_slave),
+                        bw_frame(priv->preview), TRUE, TRUE);
         width_preference = BALSA_INDEX_NARROW;
        break;
     case LAYOUT_DEFAULT:
     default:
-       window->paned_master = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-       window->paned_slave  = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-        if (window->content)
-            gtk_container_remove(GTK_CONTAINER(window->vbox),
-                                 window->content);
-        window->content = window->paned_master;
-        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,
+       priv->paned_master = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+       priv->paned_slave  = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+        if (priv->content)
+            gtk_container_remove(GTK_CONTAINER(priv->vbox),
+                                 priv->content);
+        priv->content = priv->paned_master;
+        gtk_widget_set_vexpand(priv->content, TRUE);
+        gtk_box_pack_start(GTK_BOX(priv->vbox), priv->content);
+       gtk_paned_pack1(GTK_PANED(priv->paned_master),
+                        bw_frame(priv->mblist), TRUE, TRUE);
+        gtk_paned_pack2(GTK_PANED(priv->paned_master), priv->paned_slave,
                         TRUE, TRUE);
-        gtk_paned_pack1(GTK_PANED(window->paned_slave),
+        gtk_paned_pack1(GTK_PANED(priv->paned_slave),
                         bw_frame(index_widget), TRUE, TRUE);
-       gtk_paned_pack2(GTK_PANED(window->paned_slave),
-                        bw_frame(window->preview), TRUE, TRUE);
+       gtk_paned_pack2(GTK_PANED(priv->paned_slave),
+                        bw_frame(priv->preview), TRUE, TRUE);
         width_preference = BALSA_INDEX_WIDE;
     }
     if ( (bindex=balsa_window_find_current_index(window)) != NULL)
@@ -649,9 +693,10 @@ bw_is_active_notify(GObject * gobject, GParamSpec * pspec,
     if (gtk_window_is_active(gtk_window)) {
 #ifdef HAVE_NOTIFY
         BalsaWindow *window = BALSA_WINDOW(gobject);
+        BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-        if (window->new_mail_note)
-            notify_notification_close(window->new_mail_note, NULL);
+        if (priv->new_mail_note)
+            notify_notification_close(priv->new_mail_note, NULL);
 #endif                          /* HAVE_NOTIFY */
         gtk_window_set_urgency_hint(gtk_window, FALSE);
     }
@@ -745,12 +790,13 @@ bw_action_set_enabled(BalsaWindow * window,
                       const gchar * action_name,
                       gboolean      enabled)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GAction *action;
 
     g_assert(window != NULL);
 
     /* Is the window being destroyed? */
-    if (window->preview == NULL)
+    if (priv->preview == NULL)
         return;
 
     action = bw_get_action(window, action_name);
@@ -1159,9 +1205,10 @@ find_in_message_activated(GSimpleAction * action,
                           gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     if (balsa_app.previewpane)
-        balsa_message_find_in_message(BALSA_MESSAGE(window->preview));
+        balsa_message_find_in_message(BALSA_MESSAGE(priv->preview));
 }
 
 static void
@@ -1211,7 +1258,8 @@ zoom_in_activated(GSimpleAction * action,
                   gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
-    GtkWidget *bm = window->preview;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+    GtkWidget *bm = priv->preview;
 
     balsa_message_zoom(BALSA_MESSAGE(bm), 1);
 }
@@ -1222,7 +1270,8 @@ zoom_out_activated(GSimpleAction * action,
                    gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
-    GtkWidget *bm = window->preview;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+    GtkWidget *bm = priv->preview;
 
     balsa_message_zoom(BALSA_MESSAGE(bm), -1);
 }
@@ -1233,7 +1282,8 @@ zoom_normal_activated(GSimpleAction * action,
                       gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
-    GtkWidget *bm = window->preview;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+    GtkWidget *bm = priv->preview;
 
     balsa_message_zoom(BALSA_MESSAGE(bm), 0);
 }
@@ -1291,13 +1341,14 @@ reset_filter_activated(GSimpleAction * action,
                        gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *index;
 
     /* do it by resetting the sos filder */
-    gtk_entry_set_text(GTK_ENTRY(window->sos_entry), "");
+    gtk_entry_set_text(GTK_ENTRY(priv->sos_entry), "");
     index = balsa_window_find_current_index(window);
     bw_set_view_filter(window, BALSA_INDEX(index)->filter_no,
-                       window->sos_entry);
+                       priv->sos_entry);
 }
 
 static void
@@ -1486,8 +1537,9 @@ next_part_activated(GSimpleAction * action,
                     gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    balsa_message_next_part(BALSA_MESSAGE(window->preview));
+    balsa_message_next_part(BALSA_MESSAGE(priv->preview));
 }
 
 static void
@@ -1496,8 +1548,9 @@ previous_part_activated(GSimpleAction * action,
                         gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    balsa_message_previous_part(BALSA_MESSAGE(window->preview));
+    balsa_message_previous_part(BALSA_MESSAGE(priv->preview));
 }
 
 static void
@@ -1506,8 +1559,9 @@ save_part_activated(GSimpleAction * action,
                     gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    balsa_message_save_current_part(BALSA_MESSAGE(window->preview));
+    balsa_message_save_current_part(BALSA_MESSAGE(priv->preview));
 }
 
 static void
@@ -1542,8 +1596,9 @@ copy_message_activated(GSimpleAction * action,
                        gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    if (balsa_message_grab_focus(BALSA_MESSAGE(window->preview)))
+    if (balsa_message_grab_focus(BALSA_MESSAGE(priv->preview)))
         copy_activated(action, parameter, user_data);
 }
 
@@ -1553,8 +1608,9 @@ select_text_activated(GSimpleAction * action,
                        gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    if (balsa_message_grab_focus(BALSA_MESSAGE(window->preview)))
+    if (balsa_message_grab_focus(BALSA_MESSAGE(priv->preview)))
        balsa_window_select_all(user_data);
 }
 
@@ -1651,9 +1707,10 @@ show_mailbox_tabs_change_state(GSimpleAction * action,
                                gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     balsa_app.show_notebook_tabs = g_variant_get_boolean(state);
-    gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),
+    gtk_notebook_set_show_tabs(GTK_NOTEBOOK(priv->notebook),
                                balsa_app.show_notebook_tabs);
     g_simple_action_set_state(action, state);
 }
@@ -1664,9 +1721,10 @@ show_toolbar_change_state(GSimpleAction * action,
                           gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     bw_show_or_hide_widget(action, state, &balsa_app.show_main_toolbar,
-                           window->toolbar);
+                           priv->toolbar);
 }
 
 static void
@@ -1675,9 +1733,10 @@ show_statusbar_change_state(GSimpleAction * action,
                             gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     bw_show_or_hide_widget(action, state, &balsa_app.show_statusbar,
-                           window->bottom_bar);
+                           priv->bottom_bar);
 }
 
 static void
@@ -1686,9 +1745,10 @@ show_sos_bar_change_state(GSimpleAction * action,
                           gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     bw_show_or_hide_widget(action, state, &balsa_app.show_sos_bar,
-                           window->sos_bar);
+                           priv->sos_bar);
 }
 
 static void
@@ -1697,10 +1757,11 @@ wrap_change_state(GSimpleAction * action,
                   gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     balsa_app.browse_wrap = g_variant_get_boolean(state);
 
-    balsa_message_set_wrap(BALSA_MESSAGE(window->preview),
+    balsa_message_set_wrap(BALSA_MESSAGE(priv->preview),
                            balsa_app.browse_wrap);
     refresh_preferences_manager();
 
@@ -1717,10 +1778,11 @@ show_all_headers_change_state(GSimpleAction * action,
                               gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     balsa_app.show_all_headers = g_variant_get_boolean(state);
 
-    balsa_message_set_displayed_headers(BALSA_MESSAGE(window->preview),
+    balsa_message_set_displayed_headers(BALSA_MESSAGE(priv->preview),
                                         balsa_app.show_all_headers ?
                                         HEADERS_ALL :
                                         balsa_app.shown_headers);
@@ -1826,6 +1888,7 @@ header_change_state(GSimpleAction * action,
                     gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     const gchar *value;
     ShownHeaders sh;
 
@@ -1844,7 +1907,7 @@ header_change_state(GSimpleAction * action,
 
     balsa_app.shown_headers = sh;
     bw_reset_show_all_headers(window);
-    balsa_message_set_displayed_headers(BALSA_MESSAGE(window->preview),
+    balsa_message_set_displayed_headers(BALSA_MESSAGE(priv->preview),
                                         sh);
 
     g_simple_action_set_state(action, state);
@@ -2028,6 +2091,7 @@ balsa_window_add_action_entries(GActionMap * action_map)
 static void
 bw_set_menus(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkBuilder *builder;
     gchar *ui_file;
     GError *err = NULL;
@@ -2061,7 +2125,7 @@ bw_set_menus(BalsaWindow * window)
 #if HAVE_MACOSX_DESKTOP
             libbalsa_macosx_menu(window, GTK_MENU_SHELL(menubar));
 #else
-            gtk_box_pack_start(GTK_BOX(window->vbox), menubar);
+            gtk_box_pack_start(GTK_BOX(priv->vbox), menubar);
 #endif
         }
 #endif /* SET_MENUBAR_SETS_A_VISIBLE_MENUBAR */
@@ -2096,9 +2160,10 @@ bw_alt_n_cb(GtkAccelGroup * accel_group,
             GdkModifierType modifier,
             gpointer        user_data)
 {
-    BalsaWindow *window = user_data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    gtk_notebook_set_current_page(GTK_NOTEBOOK(window->notebook),
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->notebook),
                                   keyval - GDK_KEY_1);
 }
 
@@ -2186,6 +2251,7 @@ GtkWidget *
 balsa_window_new()
 {
     BalsaWindow *window;
+    BalsaWindowPrivate *priv;
     BalsaToolbarModel *model;
     GtkWidget *hbox;
     static const gchar *const header_targets[] =
@@ -2204,14 +2270,15 @@ balsa_window_new()
     window = g_object_new(BALSA_TYPE_WINDOW,
                           "application", balsa_app.application,
                           NULL);
+    priv = balsa_window_get_instance_private(window);
 
     /* Set up the GMenu structures */
 
     /* Set up <alt>n key bindings */
     bw_set_alt_bindings(window);
 
-    window->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-    gtk_container_add(GTK_CONTAINER(window), window->vbox);
+    priv->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+    gtk_container_add(GTK_CONTAINER(window), priv->vbox);
 
     bw_set_menus(window);
 
@@ -2220,24 +2287,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);
+    priv->toolbar = balsa_toolbar_new(model, G_ACTION_MAP(window));
+    gtk_box_pack_start(GTK_BOX(priv->vbox), priv->toolbar);
 
-    window->bottom_bar = hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-    gtk_box_pack_end(GTK_BOX(window->vbox), hbox);
+    priv->bottom_bar = hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+    gtk_box_pack_end(GTK_BOX(priv->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_widget_set_size_request(window->progress_bar, balsa_app.mblist_width, -1);
-    gtk_box_pack_start(GTK_BOX(hbox), window->progress_bar);
+    priv->progress_bar = gtk_progress_bar_new();
+    gtk_widget_set_valign(priv->progress_bar, GTK_ALIGN_CENTER);
+    gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(priv->progress_bar), 0.01);
+    gtk_widget_set_size_request(priv->progress_bar, balsa_app.mblist_width, -1);
+    gtk_box_pack_start(GTK_BOX(hbox), priv->progress_bar);
 
-    window->statusbar = gtk_statusbar_new();
+    priv->statusbar = gtk_statusbar_new();
     g_signal_connect(window, "notify::is-maximized",
                      G_CALLBACK(bw_notify_is_maximized_cb),
-                     window->statusbar);
-    gtk_widget_set_hexpand(window->statusbar, TRUE);
-    gtk_box_pack_start(GTK_BOX(hbox), window->statusbar);
+                     priv->statusbar);
+    gtk_widget_set_hexpand(priv->statusbar, TRUE);
+    gtk_box_pack_start(GTK_BOX(hbox), priv->statusbar);
 
     gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
     gtk_window_set_default_size(GTK_WINDOW(window), balsa_app.mw_width,
@@ -2245,32 +2312,32 @@ balsa_window_new()
     if (balsa_app.mw_maximized)
         gtk_window_maximize(GTK_WINDOW(window));
 
-    window->notebook = gtk_notebook_new();
-    gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),
+    priv->notebook = gtk_notebook_new();
+    gtk_notebook_set_show_tabs(GTK_NOTEBOOK(priv->notebook),
                                balsa_app.show_notebook_tabs);
-    gtk_notebook_set_show_border (GTK_NOTEBOOK(window->notebook), FALSE);
-    gtk_notebook_set_scrollable (GTK_NOTEBOOK (window->notebook), TRUE);
-    g_signal_connect(G_OBJECT(window->notebook), "switch_page",
+    gtk_notebook_set_show_border (GTK_NOTEBOOK(priv->notebook), FALSE);
+    gtk_notebook_set_scrollable (GTK_NOTEBOOK (priv->notebook), TRUE);
+    g_signal_connect(G_OBJECT(priv->notebook), "switch_page",
                      G_CALLBACK(bw_notebook_switch_page_cb), window);
 
     formats = gdk_content_formats_new(notebook_drop_types, NUM_DROP_TYPES);
-    gtk_drag_dest_set (GTK_WIDGET (window->notebook), GTK_DEST_DEFAULT_ALL,
+    gtk_drag_dest_set (GTK_WIDGET (priv->notebook), GTK_DEST_DEFAULT_ALL,
                        formats,
                        GDK_ACTION_DEFAULT | GDK_ACTION_COPY | GDK_ACTION_MOVE);
     gdk_content_formats_unref(formats);
 
-    g_signal_connect(G_OBJECT (window->notebook), "drag-data-received",
+    g_signal_connect(G_OBJECT (priv->notebook), "drag-data-received",
                      G_CALLBACK (bw_notebook_drag_received_cb), NULL);
-    g_signal_connect(G_OBJECT (window->notebook), "drag-motion",
+    g_signal_connect(G_OBJECT (priv->notebook), "drag-motion",
                      G_CALLBACK (bw_notebook_drag_motion_cb), NULL);
-    balsa_app.notebook = window->notebook;
-    g_object_add_weak_pointer(G_OBJECT(window->notebook),
+    balsa_app.notebook = priv->notebook;
+    g_object_add_weak_pointer(G_OBJECT(priv->notebook),
                              (gpointer) &balsa_app.notebook);
 
-    window->preview = balsa_message_new();
-    gtk_widget_hide(window->preview);
+    priv->preview = balsa_message_new();
+    gtk_widget_hide(priv->preview);
 
-    g_signal_connect(G_OBJECT(window->preview), "select-part",
+    g_signal_connect(G_OBJECT(priv->preview), "select-part",
                      G_CALLBACK(bw_select_part_cb), window);
 
     /* XXX */
@@ -2278,11 +2345,11 @@ balsa_window_new()
 
     g_object_get(G_OBJECT(balsa_app.mblist), "hadjustment", &hadj,
                  "vadjustment", &vadj, NULL);
-    window->mblist = gtk_scrolled_window_new(hadj, vadj);
+    priv->mblist = gtk_scrolled_window_new(hadj, vadj);
 
-    gtk_container_add(GTK_CONTAINER(window->mblist),
+    gtk_container_add(GTK_CONTAINER(priv->mblist),
                       GTK_WIDGET(balsa_app.mblist));
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(window->mblist),
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(priv->mblist),
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     g_signal_connect_swapped(balsa_app.mblist, "has-unread-mailbox",
                             G_CALLBACK(bw_enable_next_unread), window);
@@ -2295,19 +2362,19 @@ balsa_window_new()
                           balsa_app.show_mblist);
 
     if (balsa_app.show_mblist) {
-        gtk_paned_set_position(GTK_PANED(window->paned_master),
+        gtk_paned_set_position(GTK_PANED(priv->paned_master),
                                balsa_app.mblist_width);
     } else {
-        gtk_paned_set_position(GTK_PANED(window->paned_master), 0);
+        gtk_paned_set_position(GTK_PANED(priv->paned_master), 0);
     }
 
     /*PKGW: do it this way, without the usizes. */
     if (balsa_app.previewpane)
-        gtk_paned_set_position(GTK_PANED(window->paned_slave),
+        gtk_paned_set_position(GTK_PANED(priv->paned_slave),
                                balsa_app.notebook_height);
     else
         /* Set it to something really high */
-        gtk_paned_set_position(GTK_PANED(window->paned_slave), G_MAXINT);
+        gtk_paned_set_position(GTK_PANED(priv->paned_slave), G_MAXINT);
 
     /* set the toolbar style */
     balsa_window_refresh(window);
@@ -2368,18 +2435,20 @@ balsa_window_new()
 gboolean
 balsa_window_fix_paned(BalsaWindow *window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
     if (balsa_app.show_mblist) {
-        gtk_paned_set_position(GTK_PANED(window->paned_master),
+        gtk_paned_set_position(GTK_PANED(priv->paned_master),
                                balsa_app.mblist_width);
     }
     if (balsa_app.previewpane) {
-        gtk_paned_set_position(GTK_PANED(window->paned_slave),
+        gtk_paned_set_position(GTK_PANED(priv->paned_slave),
                                balsa_app.notebook_height);
     }
 
-    g_signal_connect(window->paned_master, "notify::position",
+    g_signal_connect(priv->paned_master, "notify::position",
                      G_CALLBACK(bw_master_position_cb), NULL);
-    g_signal_connect(window->paned_slave, "notify::position",
+    g_signal_connect(priv->paned_slave, "notify::position",
                      G_CALLBACK(bw_slave_position_cb), NULL);
 
     return FALSE;
@@ -2469,12 +2538,13 @@ bw_enable_mailbox_menus(BalsaWindow * window, BalsaIndex * index)
 void
 balsa_window_update_book_menus(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     gboolean has_books = balsa_app.address_book_list != NULL;
 
     bw_action_set_enabled(window, "address-book",  has_books);
     bw_action_set_enabled(window, "store-address", has_books &&
-                          window->current_index &&
-                          BALSA_INDEX(window->current_index)->current_msgno);
+                          priv->current_index &&
+                          BALSA_INDEX(priv->current_index)->current_msgno);
 }
 
 /*
@@ -2484,8 +2554,9 @@ balsa_window_update_book_menus(BalsaWindow * window)
 static void
 bw_enable_message_menus(BalsaWindow * window, guint msgno)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     gboolean enable, enable_mod, enable_store;
-    BalsaIndex *bindex = BALSA_INDEX(window->current_index);
+    BalsaIndex *bindex = BALSA_INDEX(priv->current_index);
 
     enable = (msgno != 0 && bindex != NULL);
     bw_actions_set_enabled(window, current_message_actions,
@@ -2616,7 +2687,8 @@ balsa_window_enable_continue(BalsaWindow * window)
 static void
 bw_enable_part_menu_items(BalsaWindow * window)
 {
-    BalsaMessage *msg = window ? BALSA_MESSAGE(window->preview) : NULL;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+    BalsaMessage *msg = window ? BALSA_MESSAGE(priv->preview) : NULL;
 
     bw_action_set_enabled(window, "next-part",
                           balsa_message_has_next_part(msg));
@@ -2802,6 +2874,7 @@ bw_real_open_mbnode_idle_cb(BalsaWindowRealOpenMbnodeInfo * info)
     BalsaIndex       *index   = info->index;
     BalsaMailboxNode *mbnode  = info->mbnode;
     BalsaWindow      *window  = info->window;
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     LibBalsaMailbox  *mailbox = mbnode->mailbox;
     GtkWidget        *label;
     GtkWidget        *scroll;
@@ -2842,14 +2915,14 @@ bw_real_open_mbnode_idle_cb(BalsaWindowRealOpenMbnodeInfo * info)
                                    GTK_POLICY_AUTOMATIC,
                                    GTK_POLICY_AUTOMATIC);
     gtk_container_add(GTK_CONTAINER(scroll), GTK_WIDGET(index));
-    page_num = gtk_notebook_append_page(GTK_NOTEBOOK(window->notebook),
+    page_num = gtk_notebook_append_page(GTK_NOTEBOOK(priv->notebook),
                                         scroll, label);
-    gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(window->notebook),
+    gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(priv->notebook),
                                      scroll, TRUE);
 
     if (info->set_current)
         /* change the page to the newly selected notebook item */
-        gtk_notebook_set_current_page(GTK_NOTEBOOK(window->notebook),
+        gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->notebook),
                                       page_num);
 
     bw_register_open_mailbox(mailbox);
@@ -2973,6 +3046,7 @@ static void
 balsa_window_real_close_mbnode(BalsaWindow * window,
                                BalsaMailboxNode * mbnode)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *index = NULL;
     gint i;
     LibBalsaMailbox **mailbox;
@@ -2982,7 +3056,7 @@ balsa_window_real_close_mbnode(BalsaWindow * window,
     i = balsa_find_notebook_page_num(mbnode->mailbox);
 
     if (i != -1) {
-        gtk_notebook_remove_page(GTK_NOTEBOOK(window->notebook), i);
+        gtk_notebook_remove_page(GTK_NOTEBOOK(priv->notebook), i);
         bw_unregister_open_mailbox(mbnode->mailbox);
 
         /* If this is the last notebook page clear the message preview
@@ -2996,7 +3070,7 @@ balsa_window_real_close_mbnode(BalsaWindow * window,
             gtk_window_set_title(GTK_WINDOW(window), "Balsa");
             bw_idle_replace(window, NULL);
 
-            statusbar = GTK_STATUSBAR(window->statusbar);
+            statusbar = GTK_STATUSBAR(priv->statusbar);
             context_id = gtk_statusbar_get_context_id(statusbar, "BalsaWindow mailbox");
             gtk_statusbar_pop(statusbar, context_id);
             gtk_statusbar_push(statusbar, context_id, "Mailbox closed");
@@ -3004,11 +3078,11 @@ balsa_window_real_close_mbnode(BalsaWindow * window,
             /* Disable menus */
             bw_enable_mailbox_menus(window, NULL);
             bw_enable_message_menus(window, 0);
-           if (window->current_index)
-               g_object_remove_weak_pointer(G_OBJECT(window->current_index),
+           if (priv->current_index)
+               g_object_remove_weak_pointer(G_OBJECT(priv->current_index),
                                             (gpointer)
-                                            &window->current_index);
-            window->current_index = NULL;
+                                            &priv->current_index);
+            priv->current_index = NULL;
 
             /* Just in case... */
             g_object_set_data(G_OBJECT(window), BALSA_INDEX_GRAB_FOCUS, NULL);
@@ -3078,15 +3152,15 @@ bw_close_mailbox_on_timer(BalsaWindow * window)
 static void
 balsa_window_dispose(GObject * object)
 {
-    BalsaWindow *window;
+    BalsaWindow *window = BALSA_WINDOW(object);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    window = BALSA_WINDOW(object);
     bw_idle_remove(window);
     /* The preview window seems to get finalized without notification;
      * we no longer need it, so we just drop our pointer: */
-    window->preview = NULL;
+    priv->preview = NULL;
 
-    libbalsa_clear_source_id(&window->network_changed_source_id);
+    libbalsa_clear_source_id(&priv->network_changed_source_id);
 
     balsa_unregister_pixmaps();
 
@@ -3100,6 +3174,7 @@ balsa_window_dispose(GObject * object)
 void
 balsa_window_refresh(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *index;
     BalsaIndex *bindex;
 
@@ -3116,12 +3191,12 @@ balsa_window_refresh(BalsaWindow * window)
     }
     if (balsa_app.previewpane) {
         bw_idle_replace(window, bindex);
-       gtk_paned_set_position(GTK_PANED(window->paned_slave),
+       gtk_paned_set_position(GTK_PANED(priv->paned_slave),
                                 balsa_app.notebook_height);
     } else {
        /* Set the height to something really big (those new hi-res
           screens and all :) */
-       gtk_paned_set_position(GTK_PANED(window->paned_slave), G_MAXINT);
+       gtk_paned_set_position(GTK_PANED(priv->paned_slave), G_MAXINT);
     }
 }
 
@@ -3203,10 +3278,13 @@ bw_check_mailbox_done(bw_pop_mbox_t *bw_pop_mbox)
 static void
 bw_check_mailbox_list(struct check_messages_thread_info *info, GList *mailbox_list)
 {
-       GList *check_mbx = NULL;
+    GList *check_mbx = NULL;
 
-    if ((info->window != NULL) && !info->window->network_available) {
-        return;
+    if (info->window != NULL) {
+        BalsaWindowPrivate *priv = balsa_window_get_instance_private(info->window);
+
+        if (!priv->network_available)
+            return;
     }
 
     for ( ; mailbox_list; mailbox_list = mailbox_list->next) {
@@ -3385,9 +3463,13 @@ bw_mailbox_check(LibBalsaMailbox * mailbox, struct check_messages_thread_info *i
 
     g_debug("checking mailbox %s", libbalsa_mailbox_get_name(mailbox));
     if (LIBBALSA_IS_MAILBOX_IMAP(mailbox)) {
-       if ((info->window != NULL) && !info->window->network_available) {
-               return;
-       }
+       if (info->window != NULL) {
+            BalsaWindowPrivate *priv =
+                balsa_window_get_instance_private(info->window);
+
+            if (!priv->network_available)
+                return;
+        }
 
        if (info->with_progress_dialog) {
                libbalsa_progress_dialog_update(&progress_dialog, _("Mailboxes"), FALSE, INFINITY,
@@ -3443,11 +3525,13 @@ bw_check_messages_thread(struct check_messages_thread_info *info)
 
     g_atomic_int_inc(&checking_mail);
 
-    if (info->window) {
+    if (info->window != NULL) {
+        BalsaWindowPrivate *priv = balsa_window_get_instance_private(info->window);
+
         g_idle_add((GSourceFunc) bw_check_messages_thread_idle_cb,
                    g_object_ref(info->window));
-        if (info->window->network_available)
-            time(&info->window->last_check_time);
+        if (priv->network_available)
+            time(&priv->last_check_time);
         g_object_unref(info->window);
     }
 
@@ -3480,6 +3564,8 @@ static void
 bw_display_new_mail_notification(int num_new, int has_new)
 {
     GtkWindow *window = GTK_WINDOW(balsa_app.main_window);
+    BalsaWindowPrivate *priv =
+        balsa_window_get_instance_private(balsa_app.main_window);
     static GtkWidget *dlg = NULL;
     static gint num_total = 0;
     gchar *msg = NULL;
@@ -3502,27 +3588,24 @@ bw_display_new_mail_notification(int num_new, int has_new)
         if (gtk_window_is_active(window))
             return;
 
-        if (balsa_app.main_window->new_mail_note) {
+        if (priv->new_mail_note) {
             /* the user didn't acknowledge the last info, so we'll
              * accumulate the count */
             num_total += num_new;
         } else {
             num_total = num_new;
 #if HAVE_NOTIFY >=7
-            balsa_app.main_window->new_mail_note =
+            priv->new_mail_note =
                 notify_notification_new("Balsa", NULL, NULL);
-            notify_notification_set_hint(balsa_app.main_window->
-                                         new_mail_note, "desktop-entry",
+            notify_notification_set_hint(priv-> new_mail_note, "desktop-entry",
                                          g_variant_new_string("balsa"));
 #else
-            balsa_app.main_window->new_mail_note =
+            priv->new_mail_note =
                 notify_notification_new("Balsa", NULL, NULL, NULL);
 #endif
-            g_object_add_weak_pointer(G_OBJECT(balsa_app.main_window->
-                                               new_mail_note),
-                                      (gpointer) & balsa_app.main_window->
-                                      new_mail_note);
-            g_signal_connect(balsa_app.main_window->new_mail_note,
+            g_object_add_weak_pointer(G_OBJECT(priv-> new_mail_note),
+                                      (gpointer) & priv-> new_mail_note);
+            g_signal_connect(priv->new_mail_note,
                              "closed", G_CALLBACK(g_object_unref), NULL);
         }
     } else {
@@ -3550,14 +3633,12 @@ bw_display_new_mail_notification(int num_new, int has_new)
     }
 
     msg = bw_get_new_message_notification_string(num_new, num_total);
-    if (balsa_app.main_window->new_mail_note) {
-        notify_notification_update(balsa_app.main_window->new_mail_note,
+    if (priv->new_mail_note != NULL) {
+        notify_notification_update(priv->new_mail_note,
                                    "Balsa", msg, "dialog-information");
         /* 30 seconds: */
-        notify_notification_set_timeout(balsa_app.main_window->
-                                        new_mail_note, 30000);
-        notify_notification_show(balsa_app.main_window->new_mail_note,
-                                 NULL);
+        notify_notification_set_timeout(priv->new_mail_note, 30000);
+        notify_notification_show(priv->new_mail_note, NULL);
     } else
         gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dlg), msg);
 #else
@@ -3636,10 +3717,11 @@ bw_change_connection_status_can_reach_cb(GObject * object,
                                          gboolean  can_reach,
                                          gpointer  user_data)
 {
-    BalsaWindow *window = user_data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
     if (can_reach &&
-        difftime(time(NULL), window->last_check_time) >
+        difftime(time(NULL), priv->last_check_time) >
         balsa_app.check_mail_timer * 60) {
         /* Check the mail now, and reset the timer */
         bw_check_new_messages(window);
@@ -3651,17 +3733,18 @@ bw_change_connection_status_can_reach_cb(GObject * object,
 static gboolean
 bw_change_connection_status_idle(gpointer user_data)
 {
-    BalsaWindow *window = user_data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     BalsaMailboxNode *mbnode;
     LibBalsaMailbox *mailbox;
 
-    window->network_changed_source_id = 0;
+    priv->network_changed_source_id = 0;
 
     gtk_tree_model_foreach(GTK_TREE_MODEL(balsa_app.mblist_tree_store),
                            (GtkTreeModelForeachFunc)
                            mw_mbox_change_connection_status, NULL);
 
-    if (!window->network_available)
+    if (!priv->network_available)
         return FALSE;
 
     /* GLib timeouts are now triggered by g_get_monotonic_time(),
@@ -3685,9 +3768,11 @@ bw_change_connection_status_idle(gpointer user_data)
 GtkWidget *
 balsa_window_find_current_index(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
     g_return_val_if_fail(window != NULL, NULL);
 
-    return window->current_index;
+    return priv->current_index;
 }
 
 static GtkToggleButton*
@@ -3965,6 +4050,7 @@ bw_mailbox_tab_close_cb(GtkWidget * widget, gpointer data)
 static LibBalsaCondition*
 bw_get_view_filter(BalsaWindow *window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     LibBalsaCondition *filter, *flag_filter;
     gint i;
 
@@ -3972,9 +4058,9 @@ bw_get_view_filter(BalsaWindow *window)
 
     /* add string filter on top of that */
 
-    i = gtk_combo_box_get_active(GTK_COMBO_BOX(window->filter_choice));
+    i = gtk_combo_box_get_active(GTK_COMBO_BOX(priv->filter_choice));
     if (i >= 0) {
-        const gchar *str = gtk_entry_get_text(GTK_ENTRY(window->sos_entry));
+        const gchar *str = gtk_entry_get_text(GTK_ENTRY(priv->sos_entry));
         g_assert(((guint) i) < G_N_ELEMENTS(view_filters));
         filter = view_filters[i].filter(str);
     } else filter = NULL;
@@ -4027,13 +4113,14 @@ bw_hide_changed_set_view_filter(BalsaWindow * window)
 }
 
 static void
-bw_reset_filter(BalsaWindow * bw)
+bw_reset_filter(BalsaWindow * window)
 {
-    BalsaIndex *bindex = BALSA_INDEX(balsa_window_find_current_index(bw));
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+    BalsaIndex *bindex = BALSA_INDEX(balsa_window_find_current_index(window));
 
     /* do it by resetting the sos filder */
-    gtk_entry_set_text(GTK_ENTRY(bw->sos_entry), "");
-    bw_set_view_filter(bw, bindex->filter_no, bw->sos_entry);
+    gtk_entry_set_text(GTK_ENTRY(priv->sos_entry), "");
+    bw_set_view_filter(window, bindex->filter_no, priv->sos_entry);
 }
 
 /* empty_trash:
@@ -4077,21 +4164,22 @@ empty_trash(BalsaWindow * window)
 }
 
 static void
-bw_show_mbtree(BalsaWindow * bw)
+bw_show_mbtree(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *parent;
 
-    parent = gtk_widget_get_ancestor(bw->mblist, GTK_TYPE_PANED);
+    parent = gtk_widget_get_ancestor(priv->mblist, GTK_TYPE_PANED);
     while (gtk_orientable_get_orientation(GTK_ORIENTABLE(parent)) !=
            GTK_ORIENTATION_HORIZONTAL) {
         parent = gtk_widget_get_ancestor(parent, GTK_TYPE_PANED);
     }
 
     if (balsa_app.show_mblist) {
-        gtk_widget_show(bw->mblist);
+        gtk_widget_show(priv->mblist);
         gtk_paned_set_position(GTK_PANED(parent), balsa_app.mblist_width);
     } else {
-        gtk_widget_hide(bw->mblist);
+        gtk_widget_hide(priv->mblist);
         gtk_paned_set_position(GTK_PANED(parent), 0);
     }
 }
@@ -4099,28 +4187,29 @@ bw_show_mbtree(BalsaWindow * bw)
 void
 balsa_change_window_layout(BalsaWindow *window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
 
-    g_object_ref(window->notebook);
-    g_object_ref(window->mblist);
-    g_object_ref(window->preview);
+    g_object_ref(priv->notebook);
+    g_object_ref(priv->mblist);
+    g_object_ref(priv->preview);
 
     gtk_container_remove(GTK_CONTAINER
-                         (gtk_widget_get_parent(window->notebook)),
-                         window->notebook);
+                         (gtk_widget_get_parent(priv->notebook)),
+                         priv->notebook);
     gtk_container_remove(GTK_CONTAINER
-                         (gtk_widget_get_parent(window->mblist)),
-                         window->mblist);
+                         (gtk_widget_get_parent(priv->mblist)),
+                         priv->mblist);
     gtk_container_remove(GTK_CONTAINER
-                         (gtk_widget_get_parent(window->preview)),
-                         window->preview);
+                         (gtk_widget_get_parent(priv->preview)),
+                         priv->preview);
 
     bw_set_panes(window);
 
-    g_object_unref(window->notebook);
-    g_object_unref(window->mblist);
-    g_object_unref(window->preview);
+    g_object_unref(priv->notebook);
+    g_object_unref(priv->mblist);
+    g_object_unref(priv->preview);
 
-    gtk_paned_set_position(GTK_PANED(window->paned_master),
+    gtk_paned_set_position(GTK_PANED(priv->paned_master),
                            balsa_app.show_mblist ?
                            balsa_app.mblist_width : 0);
 }
@@ -4153,17 +4242,18 @@ bw_notebook_switch_page_cb(GtkWidget * notebook,
                         gpointer data)
 {
     BalsaWindow *window = BALSA_WINDOW(data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GtkWidget *page;
     BalsaIndex *index;
     LibBalsaMailbox *mailbox;
     gchar *title;
 
-    if (window->current_index) {
-       g_object_remove_weak_pointer(G_OBJECT(window->current_index),
-                                    (gpointer) &window->current_index);
+    if (priv->current_index) {
+       g_object_remove_weak_pointer(G_OBJECT(priv->current_index),
+                                    (gpointer) &priv->current_index);
        /* Note when this mailbox was hidden, for use in auto-closing. */
-       time(&BALSA_INDEX(window->current_index)->mailbox_node->last_use);
-        window->current_index = NULL;
+       time(&BALSA_INDEX(priv->current_index)->mailbox_node->last_use);
+        priv->current_index = NULL;
     }
 
     if (!balsa_app.mblist_tree_store)
@@ -4173,9 +4263,9 @@ bw_notebook_switch_page_cb(GtkWidget * notebook,
     page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page_num);
     index = BALSA_INDEX(gtk_bin_get_child(GTK_BIN(page)));
 
-    window->current_index = GTK_WIDGET(index);
+    priv->current_index = GTK_WIDGET(index);
     g_object_add_weak_pointer(G_OBJECT(index),
-                             (gpointer) &window->current_index);
+                             (gpointer) &priv->current_index);
     /* Note when this mailbox was exposed, for use in auto-expunge. */
     time(&index->mailbox_node->last_use);
 
@@ -4198,9 +4288,9 @@ bw_notebook_switch_page_cb(GtkWidget * notebook,
     bw_enable_message_menus(window, index->current_msgno);
     bw_enable_mailbox_menus(window, index);
 
-    gtk_entry_set_text(GTK_ENTRY(window->sos_entry),
+    gtk_entry_set_text(GTK_ENTRY(priv->sos_entry),
                        index->filter_string ? index->filter_string : "");
-    gtk_combo_box_set_active(GTK_COMBO_BOX(window->filter_choice),
+    gtk_combo_box_set_active(GTK_COMBO_BOX(priv->filter_choice),
                              index->filter_no);
 
     balsa_mblist_focus_mailbox(balsa_app.mblist, mailbox);
@@ -4215,21 +4305,22 @@ bw_notebook_switch_page_cb(GtkWidget * notebook,
 }
 
 static void
-bw_index_changed_cb(GtkWidget * widget, gpointer data)
+bw_index_changed_cb(GtkWidget * widget, gpointer user_data)
 {
-    BalsaWindow *window = data;
+    BalsaWindow *window = BALSA_WINDOW(user_data);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     BalsaIndex *index;
     guint current_msgno;
 
-    if (widget != window->current_index)
+    if (widget != priv->current_index)
         return;
 
     index = BALSA_INDEX(widget);
     bw_enable_message_menus(window, index->current_msgno);
     bw_enable_mailbox_menus(window, index);
 
-    current_msgno = BALSA_MESSAGE(window->preview)->message ?
-        libbalsa_message_get_msgno(BALSA_MESSAGE(window->preview)->message) : 0;
+    current_msgno = BALSA_MESSAGE(priv->preview)->message ?
+        libbalsa_message_get_msgno(BALSA_MESSAGE(priv->preview)->message) : 0;
 
     if (current_msgno != index->current_msgno)
         bw_idle_replace(window, index);
@@ -4238,13 +4329,15 @@ bw_index_changed_cb(GtkWidget * widget, gpointer data)
 static void
 bw_idle_replace(BalsaWindow * window, BalsaIndex * bindex)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
     if (balsa_app.previewpane) {
         bw_idle_remove(window);
         /* Skip if the window is being destroyed: */
-        if (window->preview != NULL) {
-            window->set_message_id = g_idle_add((GSourceFunc) bw_idle_cb, window);
-            if (BALSA_MESSAGE(window->preview)->message != NULL)
-                gtk_widget_hide(window->preview);
+        if (priv->preview != NULL) {
+            priv->set_message_id = g_idle_add((GSourceFunc) bw_idle_cb, window);
+            if (BALSA_MESSAGE(priv->preview)->message != NULL)
+                gtk_widget_hide(priv->preview);
         }
     }
 }
@@ -4252,7 +4345,9 @@ bw_idle_replace(BalsaWindow * window, BalsaIndex * bindex)
 static void
 bw_idle_remove(BalsaWindow * window)
 {
-    libbalsa_clear_source_id(&window->set_message_id);
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
+    libbalsa_clear_source_id(&priv->set_message_id);
 }
 
 
@@ -4261,9 +4356,10 @@ static volatile gboolean bw_idle_cb_active = FALSE;
 static gboolean
 bw_idle_cb(BalsaWindow * window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     BalsaIndex *index;
 
-    if (window->set_message_id == 0) {
+    if (priv->set_message_id == 0) {
         return FALSE;
     }
     if (bw_idle_cb_active) {
@@ -4271,15 +4367,15 @@ bw_idle_cb(BalsaWindow * window)
     }
     bw_idle_cb_active = TRUE;
 
-    window->set_message_id = 0;
+    priv->set_message_id = 0;
 
-    index = (BalsaIndex *) window->current_index;
+    index = (BalsaIndex *) priv->current_index;
     if (index)
-        balsa_message_set(BALSA_MESSAGE(window->preview),
+        balsa_message_set(BALSA_MESSAGE(priv->preview),
                           index->mailbox_node->mailbox,
                           index->current_msgno);
     else
-        balsa_message_set(BALSA_MESSAGE(window->preview), NULL, 0);
+        balsa_message_set(BALSA_MESSAGE(priv->preview), NULL, 0);
 
     index = g_object_get_data(G_OBJECT(window), BALSA_INDEX_GRAB_FOCUS);
     if (index) {
@@ -4425,9 +4521,12 @@ static gboolean bw_notebook_drag_motion_cb(GtkWidget * widget,
 static gint
 bw_progress_timeout(BalsaWindow ** window)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(*window);
+
     if (balsa_app.show_statusbar
-        && *window && (*window)->progress_type == BALSA_PROGRESS_ACTIVITY)
-        gtk_progress_bar_pulse(GTK_PROGRESS_BAR((*window)->progress_bar));
+        && *window != NULL
+        && priv->progress_type == BALSA_PROGRESS_ACTIVITY)
+        gtk_progress_bar_pulse(GTK_PROGRESS_BAR(priv->progress_bar));
 
     /* return true so it continues to be called */
     return *window != NULL;
@@ -4444,6 +4543,7 @@ bw_progress_timeout(BalsaWindow ** window)
 void
 balsa_window_increase_activity(BalsaWindow * window, const gchar * message)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     static BalsaWindow *window_save = NULL;
 
     if (!window_save) {
@@ -4452,22 +4552,22 @@ balsa_window_increase_activity(BalsaWindow * window, const gchar * message)
                                   (gpointer) &window_save);
     }
 
-    if (!window->activity_handler)
+    if (!priv->activity_handler)
         /* add a timeout to make the activity bar move */
-        window->activity_handler =
+        priv->activity_handler =
             g_timeout_add(50, (GSourceFunc) bw_progress_timeout,
                           &window_save);
 
     /* increment the reference counter */
-    ++window->activity_counter;
-    if (window->progress_type == BALSA_PROGRESS_NONE)
-        window->progress_type = BALSA_PROGRESS_ACTIVITY;
+    ++priv->activity_counter;
+    if (priv->progress_type == BALSA_PROGRESS_NONE)
+        priv->progress_type = BALSA_PROGRESS_ACTIVITY;
 
-    if (window->progress_type == BALSA_PROGRESS_ACTIVITY)
-        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(window->progress_bar),
+    if (priv->progress_type == BALSA_PROGRESS_ACTIVITY)
+        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(priv->progress_bar),
                                   message);
-    window->activity_messages =
-        g_slist_prepend(window->activity_messages, g_strdup(message));
+    priv->activity_messages =
+        g_slist_prepend(priv->activity_messages, g_strdup(message));
 }
 
 
@@ -4480,27 +4580,28 @@ balsa_window_increase_activity(BalsaWindow * window, const gchar * message)
 void
 balsa_window_decrease_activity(BalsaWindow * window, const gchar * message)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     GSList *link;
     GtkProgressBar *progress_bar;
 
-    link = g_slist_find_custom(window->activity_messages, message,
+    link = g_slist_find_custom(priv->activity_messages, message,
                                (GCompareFunc) strcmp);
     g_free(link->data);
-    window->activity_messages =
-        g_slist_delete_link(window->activity_messages, link);
+    priv->activity_messages =
+        g_slist_delete_link(priv->activity_messages, link);
 
-    progress_bar = GTK_PROGRESS_BAR(window->progress_bar);
-    if (window->progress_type == BALSA_PROGRESS_ACTIVITY)
+    progress_bar = GTK_PROGRESS_BAR(priv->progress_bar);
+    if (priv->progress_type == BALSA_PROGRESS_ACTIVITY)
         gtk_progress_bar_set_text(progress_bar,
-                                  window->activity_messages ?
-                                  window->activity_messages->data : NULL);
+                                  priv->activity_messages ?
+                                  priv->activity_messages->data : NULL);
 
     /* decrement the counter if positive */
-    if (window->activity_counter > 0 && --window->activity_counter == 0) {
+    if (priv->activity_counter > 0 && --priv->activity_counter == 0) {
         /* clear the bar and make it available for others to use */
-        libbalsa_clear_source_id(&window->activity_handler);
-        if (window->progress_type == BALSA_PROGRESS_ACTIVITY) {
-            window->progress_type = BALSA_PROGRESS_NONE;
+        libbalsa_clear_source_id(&priv->activity_handler);
+        if (priv->progress_type == BALSA_PROGRESS_ACTIVITY) {
+            priv->progress_type = BALSA_PROGRESS_NONE;
             gtk_progress_bar_set_fraction(progress_bar, 0);
         }
     }
@@ -4542,20 +4643,21 @@ bw_setup_progress_idle_cb(BalsaWindowSetupProgressInfo * info)
 gboolean
 balsa_window_setup_progress(BalsaWindow * window, const gchar * text)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     BalsaWindowSetupProgressInfo *info;
 
     if (text) {
         /* make sure the progress bar is currently unused */
-        if (window->progress_type == BALSA_PROGRESS_INCREMENT)
+        if (priv->progress_type == BALSA_PROGRESS_INCREMENT)
             return FALSE;
-        window->progress_type = BALSA_PROGRESS_INCREMENT;
+        priv->progress_type = BALSA_PROGRESS_INCREMENT;
     } else
-        window->progress_type = BALSA_PROGRESS_NONE;
+        priv->progress_type = BALSA_PROGRESS_NONE;
 
     /* Update the display in an idle callback, in case we were called in
      * a sub-thread.*/
     info = g_new(BalsaWindowSetupProgressInfo, 1);
-    info->progress_bar = GTK_PROGRESS_BAR(g_object_ref(window->progress_bar));
+    info->progress_bar = GTK_PROGRESS_BAR(g_object_ref(priv->progress_bar));
     info->text = g_strdup(text);
     g_idle_add((GSourceFunc) bw_setup_progress_idle_cb, info);
 
@@ -4577,11 +4679,13 @@ void
 balsa_window_increment_progress(BalsaWindow * window, gdouble fraction,
                                 gboolean flush)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
     /* make sure the progress bar is being incremented */
-    if (window->progress_type != BALSA_PROGRESS_INCREMENT)
+    if (priv->progress_type != BALSA_PROGRESS_INCREMENT)
         return;
 
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(window->progress_bar),
+    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(priv->progress_bar),
                                   fraction);
 
     if (flush)
@@ -4664,6 +4768,7 @@ balsa_window_select_all(GtkWindow * window)
 void
 balsa_window_set_statusbar(BalsaWindow * window, LibBalsaMailbox * mailbox)
 {
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
     gint total_messages = libbalsa_mailbox_total_messages(mailbox);
     gint unread_messages = libbalsa_mailbox_get_unread_messages(mailbox);
     gint hidden_messages;
@@ -4701,7 +4806,7 @@ balsa_window_set_statusbar(BalsaWindow * window, LibBalsaMailbox * mailbox)
                                    hidden_messages);
     }
 
-    statusbar = GTK_STATUSBAR(window->statusbar);
+    statusbar = GTK_STATUSBAR(priv->statusbar);
     context_id =
         gtk_statusbar_get_context_id(statusbar, "BalsaMBList message");
     gtk_statusbar_pop(statusbar, context_id);
@@ -4766,3 +4871,15 @@ balsa_window_next_unread(BalsaWindow * window)
                           BALSA_INDEX_VIEW_ON_OPEN, GINT_TO_POINTER(TRUE));
     return TRUE;
 }
+
+/*
+ * Getter
+ */
+
+GtkStatusbar *
+balsa_window_get_statusbar(BalsaWindow * window)
+{
+    BalsaWindowPrivate *priv = balsa_window_get_instance_private(window);
+
+    return (GtkStatusbar *) priv->statusbar;
+}
diff --git a/src/main-window.h b/src/main-window.h
index 0b5fd0d..6b6d150 100644
--- a/src/main-window.h
+++ b/src/main-window.h
@@ -33,17 +33,14 @@
 #include "mailbox-node.h"
 #include "toolbar-factory.h"
 
-#define BALSA_TYPE_WINDOW                     (balsa_window_get_type ())
-#define BALSA_WINDOW(obj)                     (G_TYPE_CHECK_INSTANCE_CAST (obj, BALSA_TYPE_WINDOW, 
BalsaWindow))
-#define BALSA_WINDOW_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST (klass, BALSA_TYPE_WINDOW, 
BalsaWindowClass))
-#define BALSA_IS_WINDOW(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE (obj, BALSA_TYPE_WINDOW))
-#define BALSA_IS_WINDOW_CLASS(klass)          (G_TYPE_CHECK_CLASS_TYPE (klass, BALSA_TYPE_WINDOW))
-#define BALSA_WINDOW_GET_CLASS(window)                       \
-    (G_TYPE_INSTANCE_GET_CLASS ((window), BALSA_TYPE_WINDOW, \
-                               BalsaWindowClass))
-
-typedef struct _BalsaWindow BalsaWindow;
-typedef struct _BalsaWindowClass BalsaWindowClass;
+#define BALSA_TYPE_WINDOW balsa_window_get_type()
+
+G_DECLARE_DERIVABLE_TYPE(BalsaWindow,
+                         balsa_window,
+                         BALSA,
+                         WINDOW,
+                         GtkApplicationWindow)
+
 typedef enum {
     BALSA_PROGRESS_NONE = 0,
     BALSA_PROGRESS_ACTIVITY,
@@ -51,43 +48,6 @@ typedef enum {
 } BalsaWindowProgress;
 
 
-struct _BalsaWindow {
-    GtkApplicationWindow window;
-
-    GtkWidget *toolbar;
-    GtkWidget *sos_bar;
-    GtkWidget *bottom_bar;
-    GtkWidget *progress_bar;
-    GtkWidget *statusbar;
-    GtkWidget *mblist;
-    GtkWidget *sos_entry;       /* SenderOrSubject filter entry */
-    GtkWidget *notebook;
-    GtkWidget *preview;                /* message is child */
-    GtkWidget *paned_master;
-    GtkWidget *paned_slave;
-    GtkWidget *current_index;
-    GtkWidget *filter_choice;
-    GtkWidget *vbox;
-    GtkWidget *content;
-
-    guint set_message_id;
-
-    /* Progress bar stuff: */
-    BalsaWindowProgress progress_type;
-    guint activity_handler;
-    guint activity_counter;
-    GSList *activity_messages;
-
-#ifdef HAVE_NOTIFY
-    NotifyNotification *new_mail_note;
-#endif                         /* HAVE_NOTIFY */
-
-    /* Support GNetworkMonitor: */
-    gboolean network_available;
-    time_t last_check_time;
-    guint network_changed_source_id;
-};
-
 struct _BalsaWindowClass {
     GtkApplicationWindowClass parent_class;
 
@@ -156,6 +116,12 @@ void balsa_window_decrease_activity(BalsaWindow * window,
 void balsa_window_set_statusbar(BalsaWindow     * window,
                                 LibBalsaMailbox * mailbox);
 
+/*
+ * Getter
+ */
+
+GtkStatusbar * balsa_window_get_statusbar(BalsaWindow * window);
+
 #if defined(__FILE__) && defined(__LINE__)
 # ifdef __FUNCTION__
 #  define BALSA_DEBUG_MSG(message)  if (balsa_app.debug)  fprintf(stderr, "[%lu] %12s | %4d | %30s: %s\n", 
(unsigned long) time(NULL), __FILE__, __LINE__, __FUNCTION__, message)


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