From 384cba185a99ea30d3c1f13a151679a123f74acc Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 20 Aug 2018 23:49:12 +0200
Subject: Hidden the main toolbar when it gets useless.

---
 src/gui/editor.c      | 45 +++++++++++++++++++++++++++++++++++++++++++++
 src/gui/tb/portions.c | 13 +++++++++++--
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/src/gui/editor.c b/src/gui/editor.c
index b4e13b0..e5a16d1 100644
--- a/src/gui/editor.c
+++ b/src/gui/editor.c
@@ -92,6 +92,9 @@ static gboolean on_key_event(GtkWidget *, GdkEventKey *, GObject *);
 /* ------------------------ INTEGRATION DE LA BARRE D'OUTILS ------------------------ */
 
 
+/* Suit les évolutions d'affichage dans la barre d'outils. */
+static void on_toolbar_item_visibility_change(GtkWidget *, GtkToolbar *);
+
 /* Construit la barre d'outils de l'éditeur. */
 static GtkWidget *build_editor_toolbar(GObject *);
 
@@ -565,6 +568,40 @@ static gboolean on_key_event(GtkWidget *widget, GdkEventKey *event, GObject *ref
 
 /******************************************************************************
 *                                                                             *
+*  Paramètres  : widget  = composant graphique dont l'affichage a basculé.    *
+*                toolbar = barre d'outils à mettre à jour.                    *
+*                                                                             *
+*  Description : Suit les évolutions d'affichage dans la barre d'outils.      *
+*                                                                             *
+*  Retour      : -                                                            *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static void on_toolbar_item_visibility_change(GtkWidget *widget, GtkToolbar *toolbar)
+{
+    bool show;                              /* Impose un affichage         */
+
+    show = false;
+
+    void visit_all_tb_items(GtkWidget *w, gpointer unused)
+    {
+        show |= gtk_widget_get_visible(w);
+    }
+
+    gtk_container_foreach(GTK_CONTAINER(toolbar), visit_all_tb_items, NULL);
+
+    if (show)
+        gtk_widget_show(GTK_WIDGET(toolbar));
+    else
+        gtk_widget_hide(GTK_WIDGET(toolbar));
+
+}
+
+
+/******************************************************************************
+*                                                                             *
 *  Paramètres  : ref = espace de référencement global.                        *
 *                                                                             *
 *  Description : Construit la barre d'outils de l'éditeur.                    *
@@ -587,6 +624,14 @@ static GtkWidget *build_editor_toolbar(GObject *ref)
     item = create_portions_tb_item(ref);
     register_editor_item(item);
 
+    void track_tb_items_visibility(GtkWidget *widget, gpointer unused)
+    {
+        g_signal_connect(widget, "hide", G_CALLBACK(on_toolbar_item_visibility_change), result);
+        g_signal_connect(widget, "show", G_CALLBACK(on_toolbar_item_visibility_change), result);
+    }
+
+    gtk_container_foreach(GTK_CONTAINER(result), track_tb_items_visibility, NULL);
+
     return result;
 
 }
diff --git a/src/gui/tb/portions.c b/src/gui/tb/portions.c
index 202cd43..a8eb606 100644
--- a/src/gui/tb/portions.c
+++ b/src/gui/tb/portions.c
@@ -221,6 +221,7 @@ GEditorItem *create_portions_tb_item(GObject *ref)
 static void change_portions_tbitem_current_content(GEditorItem *item, GLoadedContent *old, GLoadedContent *new)
 {
     GLoadedBinary *binary;                  /* Autre version de l'instance */
+    GtkWidget *widget;                      /* Elément graphique principal */
     GtkBinaryStrip *strip;                  /* Bande pour binaire          */
 
     if (G_IS_LOADED_BINARY(new))
@@ -228,9 +229,17 @@ static void change_portions_tbitem_current_content(GEditorItem *item, GLoadedCon
     else
         binary = NULL;
 
-    strip = GTK_BINARY_STRIP(g_object_get_data(G_OBJECT(item->widget), "strip"));
+    widget = g_editor_item_get_widget(item);
 
-    gtk_binary_strip_attach(strip, binary);
+    strip = GTK_BINARY_STRIP(g_object_get_data(G_OBJECT(widget), "strip"));
+
+    if (binary != NULL)
+    {
+        gtk_binary_strip_attach(strip, binary);
+        gtk_widget_show(GTK_WIDGET(widget));
+    }
+    else
+        gtk_widget_hide(GTK_WIDGET(widget));
 
 }
 
-- 
cgit v0.11.2-87-g4458