summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2024-05-05 21:28:18 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2024-05-05 21:28:18 (GMT)
commitae2563772fb8c3e3ffb2a980e5c2663da06e31a2 (patch)
treee331de814772420e91957988974bde50883d8a18
parent279191e1e01875b65237d0a1bc38dbc729f262fa (diff)
Save and restore the application state from global settings.
-rw-r--r--.gitignore3
-rw-r--r--configure.ac3
-rw-r--r--src/Makefile.am2
-rw-r--r--src/framework.c19
-rw-r--r--src/schemas/Makefile.am5
-rw-r--r--src/schemas/re.chrysalide.framework.gschema.xml19
-rw-r--r--tools/maint/gsettings.inc8
7 files changed, 57 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index 23045d5..d43ca32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,6 +76,9 @@ tools/d2c/d2c
tools/fuzzing/rost/fast-rost
tools/yara2rost/yara2rost
+# Schemas
+src/schemas/gschemas.compiled
+src/schemas/*.valid
# Misc
plugins/python/androperms/androperms.db
diff --git a/configure.ac b/configure.ac
index 25077fe..790ff74 100644
--- a/configure.ac
+++ b/configure.ac
@@ -369,6 +369,8 @@ else
libgobj_version='-'
fi
+GLIB_GSETTINGS
+
PKG_CHECK_MODULES(LIBGTHREAD,gthread-2.0 >= 2.66.8,[libgthread_found=yes],[libgthread_found=no])
if test "$libgthread_found" = "yes"; then
@@ -808,6 +810,7 @@ AC_CONFIG_FILES([Makefile
src/gui/tb/Makefile
src/mangling/Makefile
src/plugins/Makefile
+ src/schemas/Makefile
tools/Makefile
tools/d2c/Makefile
tools/d2c/args/Makefile
diff --git a/src/Makefile.am b/src/Makefile.am
index c4227b8..a1912b0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -145,4 +145,4 @@ rost_LDFLAGS = $(LIBGOBJ_LIBS) -L.libs -lchrysacore
# glibext doit être traité en premier, à cause des marshals GLib
-SUBDIRS = core glibext $(GTKEXT_SUBDIR) analysis arch format common debug $(GUI_SUBDIR) mangling plugins
+SUBDIRS = core glibext $(GTKEXT_SUBDIR) analysis arch format common debug $(GUI_SUBDIR) mangling plugins schemas
diff --git a/src/framework.c b/src/framework.c
index 47e93a0..dfd0bfa 100644
--- a/src/framework.c
+++ b/src/framework.c
@@ -38,6 +38,8 @@ struct _GtkChrysalideFramework
{
GtkApplication parent; /* A laisser en premier */
+ GSettings *settings; /* Paramètres globaux */
+
GtkApplicationWindow *main_window; /* Fenêtre principale */
};
@@ -125,6 +127,8 @@ static void gtk_chrysalide_framework_class_init(GtkChrysalideFrameworkClass *kla
static void gtk_chrysalide_framework_init(GtkChrysalideFramework *app)
{
+ app->settings = NULL;
+
app->main_window = NULL;
}
@@ -144,6 +148,8 @@ static void gtk_chrysalide_framework_init(GtkChrysalideFramework *app)
static void gtk_chrysalide_framework_dispose(GtkChrysalideFramework *app)
{
+ g_clear_object(&app->settings);
+
g_clear_object(&app->main_window);
G_OBJECT_CLASS(gtk_chrysalide_framework_parent_class)->dispose(G_OBJECT(app));
@@ -217,17 +223,28 @@ GtkChrysalideFramework *gtk_chrysalide_framework_new(void)
static void gtk_chrysalide_framework_activate(GApplication *app)
{
GtkChrysalideFramework *real_app; /* Version réelle de l'instance*/
+ GSettings *settings; /* Paramètres globaux */
GtkWindow *window; /* Fenêtre mise en place */
real_app = GTK_CHRYSALIDE_FRAMEWORK(app);
+ /* Paramètres globaux */
+
+ settings = g_settings_new("re.chrysalide.framework.mainapp");
+ real_app->settings = settings;
+
+ /* Fenêtre principale */
+
window = GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(app)));
real_app->main_window = GTK_APPLICATION_WINDOW(window);
g_object_ref(G_OBJECT(window));
+ g_settings_bind(settings, "window-width", G_OBJECT(window), "default-width", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind(settings, "window-height", G_OBJECT(window), "default-height", G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind(settings, "window-maximized", G_OBJECT(window), "maximized", G_SETTINGS_BIND_DEFAULT);
+
gtk_window_set_title(window, "Chrysalide");
- gtk_window_set_default_size(window, 400, 300);
gtk_window_present(window);
}
diff --git a/src/schemas/Makefile.am b/src/schemas/Makefile.am
new file mode 100644
index 0000000..a67aa0b
--- /dev/null
+++ b/src/schemas/Makefile.am
@@ -0,0 +1,5 @@
+
+gsettings_SCHEMAS = \
+ re.chrysalide.framework.gschema.xml
+
+@GSETTINGS_RULES@
diff --git a/src/schemas/re.chrysalide.framework.gschema.xml b/src/schemas/re.chrysalide.framework.gschema.xml
new file mode 100644
index 0000000..4a16f12
--- /dev/null
+++ b/src/schemas/re.chrysalide.framework.gschema.xml
@@ -0,0 +1,19 @@
+<schemalist gettext-domain="chrysalide">
+
+ <schema id="re.chrysalide.framework" path="/re/chrysalide/framework/">
+ <child schema="re.chrysalide.framework.mainapp" name="mainapp"/>
+ </schema>
+
+ <schema id="re.chrysalide.framework.mainapp" path="/re/chrysalide/framework/mainapp/">
+ <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>
+
+</schemalist>
diff --git a/tools/maint/gsettings.inc b/tools/maint/gsettings.inc
new file mode 100644
index 0000000..40941b4
--- /dev/null
+++ b/tools/maint/gsettings.inc
@@ -0,0 +1,8 @@
+
+# Produce and export schemas needed by GSettings
+
+# source tools/maint/gsettings.inc
+
+glib-compile-schemas src/schemas/
+
+export GSETTINGS_SCHEMA_DIR=$PWD/src/schemas