From 0921aee91a646bd2c0c2cf772baecab3d84dae02 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 3 Jun 2020 07:29:39 -0300 Subject: [PATCH] Saving keypad visibility in session file. --- src/include/pw3270.h | 1 + src/objects/window/terminal.c | 14 ++++++++++++++ src/objects/window/window.c | 30 ++++++++++++++++++++++++++---- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/include/pw3270.h b/src/include/pw3270.h index 5c02c43..7645b9a 100644 --- a/src/include/pw3270.h +++ b/src/include/pw3270.h @@ -70,6 +70,7 @@ const gchar * v3270_get_session_filename(GtkWidget *widget); void v3270_set_session_filename(GtkWidget *widget, const gchar *filename); + GKeyFile * v3270_get_session_keyfile(GtkWidget *widget); /// @brief Check if the terminal has a customized session file. gboolean v3270_allow_custom_settings(GtkWidget *widget); diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c index 35cd1ae..e534c0b 100644 --- a/src/objects/window/terminal.c +++ b/src/objects/window/terminal.c @@ -82,6 +82,7 @@ v3270_to_key_file(terminal,session->key_file,"terminal"); v3270_accelerator_map_to_key_file(terminal, session->key_file, "accelerators"); + /* GtkWidget * window = gtk_widget_get_toplevel(terminal); if(PW3270_IS_APPLICATION_WINDOW(window) && pw3270_application_window_get_active_terminal(window) == terminal) { @@ -102,6 +103,7 @@ } } + */ g_key_file_save_to_file(session->key_file,session->filename,NULL); @@ -218,6 +220,18 @@ } + GKeyFile * v3270_get_session_keyfile(GtkWidget *widget) { + + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); + + const struct SessionDescriptor * descriptor = (const struct SessionDescriptor *) g_object_get_data(G_OBJECT(widget),"session-descriptor"); + + if(descriptor) + return descriptor->key_file; + + return NULL; + } + GtkWidget * pw3270_terminal_new(const gchar *session_file) { GtkWidget * terminal = v3270_new(); diff --git a/src/objects/window/window.c b/src/objects/window/window.c index ff3fc59..fb92b90 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -33,6 +33,7 @@ #include #include #include + #include static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); @@ -184,12 +185,33 @@ } - static void keypad_hide(GtkWidget *keypad, GObject * model) { + static void save_keypad_state(GtkWidget *keypad, GtkWidget *window, gboolean visible) { + + GtkWidget * terminal = pw3270_application_window_get_active_terminal(window); + if(!terminal) + return; + + GKeyFile * keyfile = v3270_get_session_keyfile(terminal); + if(!terminal) + return; + + g_key_file_set_boolean( + keyfile, + "keypads", + gtk_widget_get_name(keypad), + visible + ); + + v3270_emit_save_settings(terminal); } - static void keypad_show(GtkWidget *keypad, GObject * model) { + static void keypad_hide(GtkWidget *keypad, GtkWidget *window) { + save_keypad_state(keypad,window,FALSE); + } + static void keypad_show(GtkWidget *keypad, GtkWidget *window) { + save_keypad_state(keypad,window,TRUE); } static GtkWidget * setup_keypad(pw3270ApplicationWindow *window, GObject * model) { @@ -206,8 +228,8 @@ gtk_widget_set_name(widget,name); - g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model); - g_signal_connect(widget,"show",G_CALLBACK(keypad_show),model); + g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),window); + g_signal_connect(widget,"show",G_CALLBACK(keypad_show),window); g_autofree gchar * action_name = g_strconcat("keypad.",name,NULL); -- libgit2 0.21.2