[balsa/gtk3] Port BalsaMessage from GtkNotebook to GtkStack



commit 4754f794c43f59a08c291bf5607ac763f371eb02
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Wed Feb 11 17:43:04 2015 -0500

    Port BalsaMessage from GtkNotebook to GtkStack
    
        * src/balsa-message.c (balsa_message_get_type): BalsaMessage now
        subclasses GtkBox instead of GtkNotebook.
        * src/balsa-message.h: ditto.

 ChangeLog           |    8 +++++
 src/balsa-message.c |   84 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/balsa-message.h |   11 +++++++
 3 files changed, 103 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 942c342..d860490 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-02-11  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       Port BalsaMessage from GtkNotebook to GtkStack
+
+       * src/balsa-message.c (balsa_message_get_type): BalsaMessage now
+       subclasses GtkBox instead of GtkNotebook.
+       * src/balsa-message.h: ditto.
+
 2015-02-10  Peter Bloomfield  <pbloomfield bellsouth net>
 
        Deprecation cleanup
diff --git a/src/balsa-message.c b/src/balsa-message.c
index c6487ec..892c516 100644
--- a/src/balsa-message.c
+++ b/src/balsa-message.c
@@ -218,7 +218,11 @@ balsa_message_get_type()
         };
 
         balsa_message_type =
+#ifndef BALSA_USE_GTK_STACK
             g_type_register_static(GTK_TYPE_NOTEBOOK, "BalsaMessage",
+#else /* BALSA_USE_GTK_STACK */
+            g_type_register_static(GTK_TYPE_BOX, "BalsaMessage",
+#endif /* BALSA_USE_GTK_STACK */
                                    &balsa_message_info, 0);
     }
 
@@ -680,20 +684,41 @@ bm_disable_find_entry(BalsaMessage * bm)
 static void
 balsa_message_init(BalsaMessage * bm)
 {
+#ifdef BALSA_USE_GTK_STACK
+    GtkStack  *stack;
+#endif /* BALSA_USE_GTK_STACK */
     GtkWidget *vbox;
     GtkWidget *scroll;
+#ifndef BALSA_USE_GTK_STACK
     GtkWidget *label;
+#endif /* ! BALSA_USE_GTK_STACK */
     GtkWidget **buttons;
     GtkTreeStore *model;
     GtkCellRenderer *renderer;
     GtkTreeSelection *selection;
 
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_border(GTK_NOTEBOOK(bm), FALSE);
+#else /* BALSA_USE_GTK_STACK */
+    bm->switcher = gtk_stack_switcher_new();
+    gtk_box_pack_start(GTK_BOX(bm), bm->switcher, FALSE, FALSE, 0);
+
+    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);
+#endif /* BALSA_USE_GTK_STACK */
 
     /* Box to hold the scrolled window and the find bar */
     vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+#ifndef BALSA_USE_GTK_STACK
     label = gtk_label_new(_("Content"));
     gtk_notebook_append_page(GTK_NOTEBOOK(bm), vbox, label);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_add_titled(stack, vbox, "content", _("Content"));
+#endif /* BALSA_USE_GTK_STACK */
 
     /* scrolled window for the contents */
     bm->scroll = scroll = gtk_scrolled_window_new(NULL, NULL);
@@ -784,10 +809,16 @@ balsa_message_init(BalsaMessage * bm)
        (GTK_TREE_VIEW (bm->treeview), gtk_tree_view_get_column
         (GTK_TREE_VIEW (bm->treeview), MIME_ICON_COLUMN - 1));
 
+#ifndef BALSA_USE_GTK_STACK
     label = gtk_label_new(_("Message parts"));
     gtk_notebook_append_page(GTK_NOTEBOOK(bm), scroll, label);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_add_titled(stack, scroll, "parts", _("Message parts"));
+#endif /* BALSA_USE_GTK_STACK */
     gtk_container_add(GTK_CONTAINER(scroll), bm->treeview);
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), FALSE);
+#endif /* ! BALSA_USE_GTK_STACK */
 
     bm->current_part = NULL;
     bm->message = NULL;
@@ -845,7 +876,13 @@ balsa_message_new(void)
 {
     BalsaMessage *bm;
 
+#ifndef BALSA_USE_GTK_STACK
     bm = g_object_new(BALSA_TYPE_MESSAGE, NULL);
+#else /* BALSA_USE_GTK_STACK */
+    bm = g_object_new(BALSA_TYPE_MESSAGE,
+                      "orientation", GTK_ORIENTATION_VERTICAL,
+                      NULL);
+#endif /* BALSA_USE_GTK_STACK */
 
     return GTK_WIDGET(bm);
 }
@@ -905,7 +942,11 @@ tree_activate_row_cb(GtkTreeView *treeview, GtkTreePath *arg1,
         }
     }
 
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
     select_part(bm, info);
     if (info)
         g_object_unref(info);
@@ -1105,8 +1146,13 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
     }
 
     if (mailbox == NULL || msgno == 0) {
+#ifndef BALSA_USE_GTK_STACK
         gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), FALSE);
         gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+        gtk_widget_hide(bm->switcher);
+        gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
         return TRUE;
     }
 
@@ -1160,11 +1206,26 @@ balsa_message_set(BalsaMessage * bm, LibBalsaMailbox * mailbox, guint msgno)
 #if defined(ENABLE_TOUCH_UI)
     /* hide tabs so that they do not confuse keyboard navigation.
      * This could probably be a configuration option. */
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), FALSE);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_widget_hide(bm->switcher);
+#endif /* BALSA_USE_GTK_STACK */
 #else
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), bm->info_count > 1);
+#else /* BALSA_USE_GTK_STACK */
+    if (bm->info_count > 1)
+        gtk_widget_show(bm->switcher);
+    else
+        gtk_widget_hide(bm->switcher);
+#endif /* BALSA_USE_GTK_STACK */
 #endif /* ENABLE_TOUCH_UI */
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
 
     /*
      * At this point we check if (a) a message was new (its not new
@@ -1322,7 +1383,11 @@ atattchments_menu_cb(GtkWidget * widget, BalsaPartInfo *info)
     g_return_if_fail(bm);
     g_return_if_fail(info);
 
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
     select_part(bm, info);
 }
 
@@ -1349,7 +1414,11 @@ toggle_all_inline_cb(GtkCheckMenuItem * item, BalsaPartInfo *info)
 
     bm->force_inline = gtk_check_menu_item_get_active(item);
 
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
     select_part(bm, info);
 }
 
@@ -3218,11 +3287,26 @@ message_recheck_crypto_cb(GtkWidget * button, BalsaMessage * bm)
 #if defined(ENABLE_TOUCH_UI)
     /* hide tabs so that they do not confuse keyboard navigation.
      * This could probably be a configuration option. */
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), FALSE);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_widget_hide(bm->switcher);
+#endif /* BALSA_USE_GTK_STACK */
 #else
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(bm), bm->info_count > 1);
+#else /* BALSA_USE_GTK_STACK */
+    if (bm->info_count > 1)
+        gtk_widget_show(bm->switcher);
+    else
+        gtk_widget_hide(bm->switcher);
+#endif /* BALSA_USE_GTK_STACK */
 #endif /* ENABLE_TOUCH_UI */
+#ifndef BALSA_USE_GTK_STACK
     gtk_notebook_set_current_page(GTK_NOTEBOOK(bm), 0);
+#else /* BALSA_USE_GTK_STACK */
+    gtk_stack_set_visible_child_name(GTK_STACK(bm->stack), "content");
+#endif /* BALSA_USE_GTK_STACK */
 
     if (!gtk_tree_model_get_iter_first (gtk_tree_view_get_model(GTK_TREE_VIEW(bm->treeview)),
                                         &iter)) {
diff --git a/src/balsa-message.h b/src/balsa-message.h
index 80b65a2..51a0a87 100644
--- a/src/balsa-message.h
+++ b/src/balsa-message.h
@@ -29,6 +29,10 @@
 #include "libbalsa.h"
 #include "balsa-app.h"
 
+#if GTK_CHECK_VERSION(3, 10, 0)
+#define BALSA_USE_GTK_STACK
+#endif                          /* GTK_CHECK_VERSION(3, 10, 0) */
+
 #ifdef __cplusplus
 extern "C" {
 #endif                         /* __cplusplus */
@@ -54,7 +58,14 @@ typedef enum {
 } BalsaMessageFocusState;
 
 struct _BalsaMessage {
+#ifndef BALSA_USE_GTK_STACK
        GtkNotebook parent;
+#else /* BALSA_USE_GTK_STACK */
+        GtkBox parent;
+
+        GtkWidget *stack;
+        GtkWidget *switcher;
+#endif /* BALSA_USE_GTK_STACK */
 
         /* Top-level MIME widget */
         BalsaMimeWidget *bm_widget;


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