From 530cd02edf04a3df85a1b40f476f2b2d54793e4e Mon Sep 17 00:00:00 2001 From: Cyrille Bagard 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