diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2025-05-22 02:20:56 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2025-05-22 02:20:56 (GMT) |
commit | 8ef19378427c1b2d88f72817ff2870445bf674d3 (patch) | |
tree | 6595eb8ecc101ad65b9dff54e207f72bad00c035 | |
parent | 7ca9cee6632d1122984d8095115756877ee70f5f (diff) |
Allow simple messages in the status bar.
-rw-r--r-- | src/gtkext/statusstack-int.h | 6 | ||||
-rw-r--r-- | src/gtkext/statusstack.c | 78 | ||||
-rw-r--r-- | src/gtkext/statusstack.h | 8 | ||||
-rw-r--r-- | src/gtkext/statusstack.ui | 9 |
4 files changed, 98 insertions, 3 deletions
diff --git a/src/gtkext/statusstack-int.h b/src/gtkext/statusstack-int.h index df9db35..721b982 100644 --- a/src/gtkext/statusstack-int.h +++ b/src/gtkext/statusstack-int.h @@ -50,6 +50,12 @@ struct _GtkStatusStack GSourceFunc def_source; /* Appel en fin d'activité */ + /* Message simple par défaut */ + + GtkLabel *def_label; /* Afficheur de message */ + + char *msg; /* Contenu associé */ + /* Navigation */ GtkLabel *nav_segment; /* Désignation du segment */ diff --git a/src/gtkext/statusstack.c b/src/gtkext/statusstack.c index 492d888..fb65ddd 100644 --- a/src/gtkext/statusstack.c +++ b/src/gtkext/statusstack.c @@ -87,6 +87,14 @@ static void gtk_status_stack_get_property(GObject *, guint, GValue *, GParamSpec +/* ----------------------- MISE EN AVANT DES MESSAGES SIMPLES ----------------------- */ + + +/* S'assure de l'affichage à jour de la partie "default". */ +static gboolean gtk_status_stack_show_simple_message(gpointer); + + + /* -------------------- STATUT DES INFORMATIONS DE DESASSEMBLAGE -------------------- */ @@ -217,6 +225,8 @@ static void gtk_status_stack_class_init(GtkStatusStackClass *class) gtk_widget_class_bind_template_child(widget, GtkStatusStack, main); + gtk_widget_class_bind_template_child(widget, GtkStatusStack, def_label); + gtk_widget_class_bind_template_child(widget, GtkStatusStack, nav_segment); gtk_widget_class_bind_template_child(widget, GtkStatusStack, nav_phys); gtk_widget_class_bind_template_child(widget, GtkStatusStack, nav_virt); @@ -256,6 +266,8 @@ static void gtk_status_stack_init(GtkStatusStack *stack) stack->def_source = NULL; + stack->msg = NULL; + stack->nav_info = calloc(1, sizeof(navigation_info_t)); init_navigation_info(stack->nav_info); @@ -324,6 +336,9 @@ static void gtk_status_stack_dispose(GtkStatusStack *stack) static void gtk_status_stack_finalize(GtkStatusStack *stack) { + if (stack->msg != NULL) + free(stack->msg); + fini_navigation_info(stack->nav_info); free(stack->nav_info); @@ -614,6 +629,69 @@ static void gtk_status_stack_get_property(GObject *object, guint prop_id, GValue /* ---------------------------------------------------------------------------------- */ +/* MISE EN AVANT DES MESSAGES SIMPLES */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +* * +* Paramètres : stack = barre de statut à actualiser. * +* msg = simple message à faire paraître. * +* * +* Description : Inscrit un message simple dans la barre de statut. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_status_stack_display_message(GtkStatusStack *stack, const char *msg) +{ + if (stack->msg != NULL) + free(stack->msg); + + if (msg != NULL) + stack->msg = strdup(msg); + else + stack->msg = NULL; + + gtk_status_stack_show_simple_message(stack); + +} + + +/****************************************************************************** +* * +* Paramètres : data = pile de statuts à manipuler. * +* * +* Description : S'assure de l'affichage à jour de la partie "default". * +* * +* Retour : G_SOURCE_REMOVE pour une exécution unique. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static gboolean gtk_status_stack_show_simple_message(gpointer data) +{ + GtkStatusStack *stack; /* Version spécialisée */ + + stack = GTK_STATUS_STACK(data); + + stack->def_source = gtk_status_stack_show_simple_message; + + gtk_label_set_text(stack->def_label, stack->msg != NULL ? stack->msg : ""); + + gtk_stack_set_visible_child_name(stack->main, "default"); + + return G_SOURCE_REMOVE; + +} + + + +/* ---------------------------------------------------------------------------------- */ /* STATUT DES INFORMATIONS DE DESASSEMBLAGE */ /* ---------------------------------------------------------------------------------- */ diff --git a/src/gtkext/statusstack.h b/src/gtkext/statusstack.h index 66ad6db..4995596 100644 --- a/src/gtkext/statusstack.h +++ b/src/gtkext/statusstack.h @@ -49,6 +49,14 @@ void gtk_status_stack_reset(GtkStatusStack *); +/* ----------------------- MISE EN AVANT DES MESSAGES SIMPLES ----------------------- */ + + +/* Inscrit un message simple dans la barre de statut. */ +void gtk_status_stack_display_message(GtkStatusStack *, const char *); + + + /* -------------------- STATUT DES INFORMATIONS DE DESASSEMBLAGE -------------------- */ diff --git a/src/gtkext/statusstack.ui b/src/gtkext/statusstack.ui index 2a6e256..0b7cd6d 100644 --- a/src/gtkext/statusstack.ui +++ b/src/gtkext/statusstack.ui @@ -12,16 +12,19 @@ <!-- Vide par défaut --> <child> - <object class="GtkStackPage" id="stack"> + <object class="GtkStackPage"> <property name="name">default</property> <property name="child"> - <object class="GtkLabel"> + <object class="GtkLabel" id="def_label"> <property name="hexpand">true</property> <property name="halign">fill</property> - <property name="valign">center</property> + <property name="valign">baseline</property> <property name="xalign">0</property> <property name="label"></property> + <style> + <class name="dim-label"/> + </style> </object> </property> |