summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2025-02-10 22:45:51 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2025-02-10 22:45:51 (GMT)
commitfd2f458abac21ceefa55468e1cb072ed16224a8e (patch)
treec2e9560d21659c4771d31723fa891b7c7dfbe2ee /src
parent607cd5420f847618d4cad66e7e168b6955ab4b6a (diff)
Track secret storage lock updates in the status bar.
Diffstat (limited to 'src')
-rw-r--r--src/glibext/secstorage-int.h4
-rw-r--r--src/glibext/secstorage.c10
-rw-r--r--src/gtkext/Makefile.am8
-rw-r--r--src/gtkext/gresource.xml5
-rw-r--r--src/gtkext/statusstack-int.h4
-rw-r--r--src/gtkext/statusstack.c56
-rw-r--r--src/gtkext/statusstack.ui15
-rw-r--r--src/schemas/re.chrysalide.framework.gschema.xml38
8 files changed, 124 insertions, 16 deletions
diff --git a/src/glibext/secstorage-int.h b/src/glibext/secstorage-int.h
index 310fbbc..bbac133 100644
--- a/src/glibext/secstorage-int.h
+++ b/src/glibext/secstorage-int.h
@@ -45,6 +45,10 @@ struct _GSecretStorageClass
{
GObjectClass parent; /* A laisser en premier */
+ /* Signaux */
+
+ void (* lock_update) (GSecretStorage *);
+
};
diff --git a/src/glibext/secstorage.c b/src/glibext/secstorage.c
index 84fc10c..ed2e4e6 100644
--- a/src/glibext/secstorage.c
+++ b/src/glibext/secstorage.c
@@ -111,6 +111,14 @@ static void g_secret_storage_class_init(GSecretStorageClass *klass)
object->dispose = g_secret_storage_dispose;
object->finalize = g_secret_storage_finalize;
+ g_signal_new("lock-update",
+ G_TYPE_SECRET_STORAGE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(GSecretStorageClass, lock_update),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
}
@@ -237,7 +245,7 @@ bool g_secret_storage_create(GSecretStorage *storage, GSettings *settings)
storage->settings = settings;
}
else
- result = false; // TODO
+ storage->settings = g_settings_new("re.chrysalide.framework.secstorage");
return result;
diff --git a/src/gtkext/Makefile.am b/src/gtkext/Makefile.am
index 4590aa6..cf1f057 100644
--- a/src/gtkext/Makefile.am
+++ b/src/gtkext/Makefile.am
@@ -26,10 +26,16 @@ libgtkext_la_LIBADD = \
libgtkext_la_CFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
+IMG_PATH = ../../data/images
+
RES_FILES = \
hexview.css \
hexview.ui \
- statusstack.ui
+ statusstack.ui \
+ $(IMG_PATH)/nolock-symbolic.svg \
+ $(IMG_PATH)/locked-symbolic.svg \
+ $(IMG_PATH)/unlocked-symbolic.svg \
+ tweak.ui
libgtkext4_la_SOURCES = \
area-int.h \
diff --git a/src/gtkext/gresource.xml b/src/gtkext/gresource.xml
index 3bfd8c5..6de48f6 100644
--- a/src/gtkext/gresource.xml
+++ b/src/gtkext/gresource.xml
@@ -5,4 +5,9 @@
<file compressed="true">hexview.ui</file>
<file compressed="true">statusstack.ui</file>
</gresource>
+ <gresource prefix="/re/chrysalide/framework/gui/icons/scalable/actions">
+ <file compressed="true" alias="nolock-symbolic.svg">../../data/images/nolock-symbolic.svg</file>
+ <file compressed="true" alias="locked-symbolic.svg">../../data/images/locked-symbolic.svg</file>
+ <file compressed="true" alias="unlocked-symbolic.svg">../../data/images/unlocked-symbolic.svg</file>
+ </gresource>
</gresources>
diff --git a/src/gtkext/statusstack-int.h b/src/gtkext/statusstack-int.h
index facc5af..2a9e99e 100644
--- a/src/gtkext/statusstack-int.h
+++ b/src/gtkext/statusstack-int.h
@@ -26,6 +26,7 @@
#include "statusstack.h"
+#include "../glibext/secstorage.h"
@@ -70,6 +71,9 @@ struct _GtkStatusStack
/* Tronc commun */
+ GSecretStorage *storage; /* Stockage des secrets */
+ GtkToggleButton *lock_update; /* Activation des accès */
+
GtkLabel *net_recv_speed; /* Débit en réception */
GtkLabel *net_send_speed; /* Débit en émission */
diff --git a/src/gtkext/statusstack.c b/src/gtkext/statusstack.c
index 0d8ef62..1b558ba 100644
--- a/src/gtkext/statusstack.c
+++ b/src/gtkext/statusstack.c
@@ -53,6 +53,9 @@ static void gtk_status_stack_dispose(GtkStatusStack *);
/* Procède à la libération totale de la mémoire. */
static void gtk_status_stack_finalize(GtkStatusStack *);
+/* Note le changement de verrouillage du stockage sécurisé. */
+static void gtk_status_stack_on_secret_storage_lock_update(GSecretStorage *, GtkStatusStack *);
+
/* Met à jour dans la barre les débits réseau observés. */
static gboolean gtk_status_stack_update_network_stats(GtkStatusStack *);
@@ -190,6 +193,8 @@ static void gtk_status_stack_class_init(GtkStatusStackClass *class)
gtk_widget_class_bind_template_child(widget, GtkStatusStack, activity_message);
gtk_widget_class_bind_template_child(widget, GtkStatusStack, activity_progress);
+ gtk_widget_class_bind_template_child(widget, GtkStatusStack, lock_update);
+
gtk_widget_class_bind_template_child(widget, GtkStatusStack, net_recv_speed);
gtk_widget_class_bind_template_child(widget, GtkStatusStack, net_send_speed);
@@ -220,6 +225,17 @@ static void gtk_status_stack_init(GtkStatusStack *stack)
stack->activity_info = calloc(1, sizeof(activity_info_t));
init_activity_info(stack->activity_info);
+ /* Suivi des évolutions relatives au stockage sécurisé */
+
+ stack->storage = get_secret_storage();
+
+ g_signal_connect(stack->storage, "lock-update",
+ G_CALLBACK(gtk_status_stack_on_secret_storage_lock_update), stack);
+
+ gtk_status_stack_on_secret_storage_lock_update(stack->storage, stack);
+
+ /* Suivi des débits de connexion */
+
stack->next_index = 0;
stack->network_update_tag = g_timeout_add(NETWORK_UPDATE_INTERVAL,
@@ -242,6 +258,12 @@ static void gtk_status_stack_init(GtkStatusStack *stack)
static void gtk_status_stack_dispose(GtkStatusStack *stack)
{
+ if (stack->storage != NULL)
+ g_signal_handlers_disconnect_by_func(stack->storage,
+ gtk_status_stack_on_secret_storage_lock_update, stack);
+
+ g_clear_object(&stack->storage);
+
g_source_remove(stack->network_update_tag);
gtk_widget_dispose_template(GTK_WIDGET(stack), GTK_TYPE_STATUS_STACK);
@@ -322,6 +344,40 @@ void gtk_status_stack_reset(GtkStatusStack *stack)
/******************************************************************************
* *
+* Paramètres : storage = gardien des secrets impliqué. *
+ window = fenêtre dont la barre de statut est à actualiser. *
+* *
+* Description : Note le changement de verrouillage du stockage sécurisé. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void gtk_status_stack_on_secret_storage_lock_update(GSecretStorage *storage, GtkStatusStack *stack)
+{
+ if (!g_secret_storage_has_key(stack->storage))
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(stack->lock_update), false);
+ gtk_button_set_icon_name(GTK_BUTTON(stack->lock_update), "nolock-symbolic");
+ }
+ else
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(stack->lock_update), true);
+
+ if (g_secret_storage_is_locked(stack->storage))
+ gtk_button_set_icon_name(GTK_BUTTON(stack->lock_update), "locked-symbolic");
+ else
+ gtk_button_set_icon_name(GTK_BUTTON(stack->lock_update), "unlocked-symbolic");
+
+ }
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : stack = barre de statut à actualiser. *
* *
* Description : Met à jour dans la barre les débits réseau observés. *
diff --git a/src/gtkext/statusstack.ui b/src/gtkext/statusstack.ui
index 422f95d..8469e6e 100644
--- a/src/gtkext/statusstack.ui
+++ b/src/gtkext/statusstack.ui
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="GtkStatusStack" parent="GtkBox">
@@ -148,6 +149,20 @@
</child>
<child>
+ <object class="GtkToggleButton" id="lock_update">
+ <property name="sensitive">false</property>
+ <property name="has-frame">false</property>
+ <property name="icon-name">nolock-symbolic</property>
+ </object>
+ </child>
+
+ <child>
+ <object class="GtkSeparator">
+ <property name="orientation">vertical</property>
+ </object>
+ </child>
+
+ <child>
<object class="GtkImage">
<property name="margin-start">8</property>
<property name="icon-name">pan-down-symbolic</property>
diff --git a/src/schemas/re.chrysalide.framework.gschema.xml b/src/schemas/re.chrysalide.framework.gschema.xml
index e8331ff..87088f7 100644
--- a/src/schemas/re.chrysalide.framework.gschema.xml
+++ b/src/schemas/re.chrysalide.framework.gschema.xml
@@ -1,19 +1,29 @@
<schemalist gettext-domain="chrysalide">
- <schema id="re.chrysalide.framework" path="/re/chrysalide/framework/">
- <child schema="re.chrysalide.framework.gui" name="gui"/>
- </schema>
+ <schema id="re.chrysalide.framework" path="/re/chrysalide/framework/">
+ <child schema="re.chrysalide.framework.gui" name="gui"/>
+ <child schema="re.chrysalide.framework.secstorage" name="secstorage"/>
+ </schema>
- <schema id="re.chrysalide.framework.gui" path="/re/chrysalide/framework/gui/">
- <key name="window-width" type="i">
- <default>600</default>
- </key>
- <key name="window-height" type="i">
- <default>400</default>
- </key>
- <key name="window-maximized" type="b">
- <default>false</default>
- </key>
- </schema>
+ <schema id="re.chrysalide.framework.gui" path="/re/chrysalide/framework/gui/">
+ <key name="window-width" type="i">
+ <default>600</default>
+ </key>
+ <key name="window-height" type="i">
+ <default>400</default>
+ </key>
+ <key name="window-maximized" type="b">
+ <default>false</default>
+ </key>
+ </schema>
+
+ <schema id="re.chrysalide.framework.secstorage" path="/re/chrysalide/framework/secstorage/">
+ <key name="salt" type="ay">
+ <default>[]</default>
+ </key>
+ <key name="master" type="ay">
+ <default>[]</default>
+ </key>
+ </schema>
</schemalist>