From 530cd02edf04a3df85a1b40f476f2b2d54793e4e Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 3 Nov 2024 15:07:03 +0100
Subject: Take into account widgets provided by panels for the title bar.

---
 src/gtkext/panel-int.h |  7 +++++++
 src/gtkext/panel.c     | 26 ++++++++++++++++++++++++++
 src/gtkext/panel.h     |  3 +++
 src/gui/window.c       | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 68 insertions(+)

diff --git a/src/gtkext/panel-int.h b/src/gtkext/panel-int.h
index 593e5b4..07ade20 100644
--- a/src/gtkext/panel-int.h
+++ b/src/gtkext/panel-int.h
@@ -30,6 +30,11 @@
 
 
 
+/* Fournit les composants adaptés pour la barre de titre. */
+typedef GListStore * (* get_tiled_panel_widgets_cb) (GtkTiledPanel *, bool);
+
+
+
 /* Elément réactif pour panneaux de l'éditeur (instance) */
 struct _GtkTiledPanel
 {
@@ -42,6 +47,8 @@ struct _GtkTiledPanelClass
 {
     GtkBoxClass parent;                     /* A laisser en premier        */
 
+    get_tiled_panel_widgets_cb get_widgets; /* Récupération de composants  */
+
 };
 
 
diff --git a/src/gtkext/panel.c b/src/gtkext/panel.c
index daaa3cf..de55917 100644
--- a/src/gtkext/panel.c
+++ b/src/gtkext/panel.c
@@ -134,8 +134,34 @@ static void gtk_tiled_panel_finalize(GtkTiledPanel *panel)
 }
 
 
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : panel = panneau graphique à consulter.                       *
+*                left  = indication quant au côté ciblé.                      *
+*                                                                             *
+*  Description : Fournit les composants adaptés pour la barre de titre.       *
+*                                                                             *
+*  Retour      : Liste de Composants GTK mis en place.                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
 
+GListStore *gtk_tiled_panel_get_title_widgets(GtkTiledPanel *panel, bool left)
+{
+    GListStore *result;                     /* Composant(s) à retourner    */
+    GtkTiledPanelClass *class;              /* Classe à actionner          */
+
+    class = GTK_TILED_PANEL_GET_CLASS(panel);
+
+    if (class->get_widgets != NULL)
+        result = class->get_widgets(panel, left);
+    else
+        result = NULL;
+
+    return result;
 
+}
 
 
 
diff --git a/src/gtkext/panel.h b/src/gtkext/panel.h
index 407cb06..d2259ef 100644
--- a/src/gtkext/panel.h
+++ b/src/gtkext/panel.h
@@ -38,6 +38,9 @@
 DECLARE_GTYPE(GtkTiledPanel, gtk_tiled_panel, GTK, TILED_PANEL);
 
 
+/* Fournit les composants adaptés pour la barre de titre. */
+GListStore *gtk_tiled_panel_get_title_widgets(GtkTiledPanel *, bool);
+
 
 
 
diff --git a/src/gui/window.c b/src/gui/window.c
index 193f1bf..2680c89 100644
--- a/src/gui/window.c
+++ b/src/gui/window.c
@@ -295,8 +295,40 @@ static void gtk_framework_window_activate_about(GSimpleAction *action, GVariant
 
 void gtk_framework_window_add(GtkFrameworkWindow *window, /* __steal */GtkTiledPanel *panel)
 {
+    GtkWidget *bar;                         /* Barre de titre              */
+    GListStore *list;                       /* Liste éventuelle à intégrer */
+    guint count;                            /* Nombre d'élements présents  */
+    guint i;                                /* Boucle de parcours          */
+    GtkWidget *widget;                      /* Composant à intégrer        */
+
     gtk_stack_add_child(window->grid, GTK_WIDGET(panel));
 
     gtk_stack_set_visible_child(window->grid, GTK_WIDGET(panel));
 
+
+
+    bar = gtk_window_get_titlebar(GTK_WINDOW(window));
+
+    if (bar == NULL) ////////// REMME
+    {
+        bar = gtk_header_bar_new();
+        gtk_window_set_titlebar(GTK_WINDOW(window), bar);
+    } /////////////////////////////
+
+    list = gtk_tiled_panel_get_title_widgets(panel, false);
+
+    if (list != NULL)
+    {
+        count = g_list_model_get_n_items(G_LIST_MODEL(list));
+
+        for (i = 0; i < count; i++)
+        {
+            widget = GTK_WIDGET(g_list_model_get_item(G_LIST_MODEL(list), i));
+            gtk_header_bar_pack_end(GTK_HEADER_BAR(bar), widget);
+        }
+
+        unref_object(list);
+
+    }
+
 }
-- 
cgit v0.11.2-87-g4458