From fae87c18af47669b5e576a13a787ff587b3a5b13 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 9 Dec 2019 17:10:05 -0300 Subject: [PATCH] Fixing delayed saving of customized session file. --- src/pw3270/linux/config.c | 3 --- src/pw3270/linux/settings.c | 2 ++ src/pw3270/private.h | 2 +- src/pw3270/window.c | 31 +++++++++++++++++++++++++++++-- src/pw3270/windows/settings.c | 3 ++- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/pw3270/linux/config.c b/src/pw3270/linux/config.c index 14416a9..fc79b64 100644 --- a/src/pw3270/linux/config.c +++ b/src/pw3270/linux/config.c @@ -279,10 +279,7 @@ void pw3270_session_config_save() if(keyfilename) { g_message( _("Saving %s"), keyfilename); - g_file_set_contents(keyfilename,text,-1,&error); - g_free(keyfilename); - keyfilename = 0; } else { diff --git a/src/pw3270/linux/settings.c b/src/pw3270/linux/settings.c index d51e2ab..66ae988 100644 --- a/src/pw3270/linux/settings.c +++ b/src/pw3270/linux/settings.c @@ -34,6 +34,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ +/* void load_terminal_settings(GtkWidget *widget) { GError *error = NULL; @@ -103,3 +104,4 @@ } +*/ diff --git a/src/pw3270/private.h b/src/pw3270/private.h index 5932c2b..d8994b0 100644 --- a/src/pw3270/private.h +++ b/src/pw3270/private.h @@ -100,7 +100,7 @@ // Settings /// @brief Load terminal settings from system and session files. - G_GNUC_INTERNAL void load_terminal_settings(GtkWidget *widget); +// G_GNUC_INTERNAL void load_terminal_settings(GtkWidget *widget); #endif // PRIVATE_H_INCLUDED diff --git a/src/pw3270/window.c b/src/pw3270/window.c index d73f04b..0885052 100644 --- a/src/pw3270/window.c +++ b/src/pw3270/window.c @@ -404,10 +404,10 @@ static GtkWidget * trace_window = NULL; static void save_terminal_settings(GtkWidget *widget, GtkWidget *window) { - debug("%s",__FUNCTION__); GKeyFile * keyfile = pw3270_session_config_get(FALSE); + debug("%s keyfile=%p",__FUNCTION__,keyfile); if(keyfile) { v3270_to_key_file(widget, keyfile, "terminal"); @@ -777,7 +777,34 @@ static GtkWidget * trace_window = NULL; host = v3270_get_session(widget->terminal); // Load terminal settings before connecting the signals. - load_terminal_settings(widget->terminal); + { + GKeyFile * keyfile = pw3270_session_config_get(FALSE); + + if(keyfile) + { + v3270_load_key_file(widget->terminal,keyfile,"terminal"); + } +#ifdef _WIN32 + else + { + static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE }; + g_autofree gchar * path = g_strdup_printf("SOFTWARE\\%s",g_get_application_name()); + + size_t ix; + + for(ix=0;ix < G_N_ELEMENTS(predefined); ix++) + { + HKEY hKey; + if(RegOpenKeyEx(predefined[ix],path,0,KEY_READ,&hKey) == ERROR_SUCCESS) + { + v3270_load_registry(widget->terminal,hKey,"terminal"); + RegCloseKey(hKey); + } + } + } +#endif // _WIN32 + + } g_object_set_data_full(G_OBJECT(widget->terminal),"toggle_actions",g_new0(GtkAction *,LIB3270_TOGGLE_COUNT),g_free); g_object_set_data_full(G_OBJECT(widget->terminal),"named_actions",(gpointer) action, (GDestroyNotify) g_free); diff --git a/src/pw3270/windows/settings.c b/src/pw3270/windows/settings.c index d8e2353..f8641ac 100644 --- a/src/pw3270/windows/settings.c +++ b/src/pw3270/windows/settings.c @@ -34,6 +34,7 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ +/* void load_terminal_settings(GtkWidget *widget) { static HKEY predefined[] = { HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER }; @@ -53,4 +54,4 @@ } - +*/ -- libgit2 0.21.2