diff --git a/src/pw3270/common.h b/src/pw3270/common.h index 705a9c2..501bc66 100644 --- a/src/pw3270/common.h +++ b/src/pw3270/common.h @@ -60,7 +60,8 @@ LIB3270_EXPORT void pw3270_session_config_load(const gchar *filename); LIB3270_EXPORT void pw3270_session_config_save(); LIB3270_EXPORT void pw3270_session_config_free(void); - LIB3270_EXPORT GKeyFile * pw3270_session_config_get(gboolean create); + LIB3270_EXPORT GKeyFile * pw3270_session_config_get(gboolean create); + LIB3270_EXPORT void pw3270_session_save_terminal(GtkWidget *terminal); gchar * get_string_from_config(const gchar *group, const gchar *key, const gchar *def); gboolean get_boolean_from_config(const gchar *group, const gchar *key, gboolean def); @@ -79,11 +80,10 @@ void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd); #ifdef ENABLE_WINDOWS_REGISTRY - gboolean get_registry_handle(const gchar *group, HKEY *hKey, REGSAM samDesired); + gboolean pw3270_win32_registry_open(const gchar *group, HKEY *hKey, REGSAM samDesired); + void pw3270_win32_registry_foreach(HKEY parent, const gchar *name,void (*cbk)(const gchar *key, const gchar *val, gpointer *user_data), gpointer *user_data); + HKEY get_application_registry(REGSAM samDesired); - void registry_foreach(HKEY parent, const gchar *name,void (*cbk)(const gchar *key, const gchar *val, gpointer *user_data), gpointer *user_data); - void registry_set_double(HKEY hKey, const gchar *key, gdouble value); - gboolean registry_get_double(HKEY hKey, const gchar *key, gdouble *value); #endif // ENABLE_WINDOWS_REGISTRY diff --git a/src/pw3270/linux/config.c b/src/pw3270/linux/config.c index fc79b64..5a320e0 100644 --- a/src/pw3270/linux/config.c +++ b/src/pw3270/linux/config.c @@ -435,3 +435,15 @@ void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget } +void pw3270_session_save_terminal(GtkWidget *terminal) +{ + GKeyFile * keyfile = pw3270_session_config_get(TRUE); + + debug("%s keyfile=%p",__FUNCTION__,keyfile); + if(keyfile) + { + v3270_to_key_file(widget, keyfile, "terminal"); + pw3270_session_config_save(); + } + +} diff --git a/src/pw3270/window.c b/src/pw3270/window.c index 0885052..c7ec944 100644 --- a/src/pw3270/window.c +++ b/src/pw3270/window.c @@ -407,7 +407,6 @@ static GtkWidget * trace_window = NULL; GKeyFile * keyfile = pw3270_session_config_get(FALSE); - debug("%s keyfile=%p",__FUNCTION__,keyfile); if(keyfile) { v3270_to_key_file(widget, keyfile, "terminal"); @@ -418,7 +417,7 @@ static GtkWidget * trace_window = NULL; { HKEY hKey; - if(get_registry_handle(NULL, &hKey, KEY_SET_VALUE)) + if(pw3270_win32_registry_open(NULL, &hKey, KEY_SET_VALUE)) { v3270_to_registry(widget, hKey, "terminal"); RegCloseKey(hKey); @@ -872,7 +871,7 @@ static GtkWidget * trace_window = NULL; g_signal_connect(widget->terminal,"field_clicked",G_CALLBACK(field_clicked),widget); g_signal_connect(widget->terminal,"toggle_changed",G_CALLBACK(toggle_changed),widget); g_signal_connect(widget->terminal,"session_changed",G_CALLBACK(session_changed),widget); - g_signal_connect(widget->terminal,"save_settings",G_CALLBACK(save_terminal_settings),widget); + g_signal_connect(widget->terminal,"save_settings",G_CALLBACK(pw3270_session_save_terminal),NULL); //g_signal_connect(widget->terminal,"print",G_CALLBACK(print_all),widget); diff --git a/src/pw3270/windows/config.c b/src/pw3270/windows/config.c index cf7f30a..6fb769d 100644 --- a/src/pw3270/windows/config.c +++ b/src/pw3270/windows/config.c @@ -24,51 +24,36 @@ * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) - * licinio@bb.com.br (Licínio Luis Branco) - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) * */ -#ifdef _WIN32 - #include -#endif // _WIN32 + #include #include "../pw3270/private.h" - #include "common.h" + #include "../common.h" #include #include + #include -#ifdef _WIN32 + #ifndef KEY_WOW64_64KEY + #define KEY_WOW64_64KEY 0x0100 + #endif // KEY_WOW64_64KEY - #include - - #ifndef KEY_WOW64_64KEY - #define KEY_WOW64_64KEY 0x0100 - #endif // KEY_WOW64_64KEY - - #ifndef KEY_WOW64_32KEY - #define KEY_WOW64_32KEY 0x0200 - #endif // KEY_WOW64_64KEY - -#endif // _WIN32 + #ifndef KEY_WOW64_32KEY + #define KEY_WOW64_32KEY 0x0200 + #endif // KEY_WOW64_64KEY /*--[ Globals ]--------------------------------------------------------------------------------------*/ -#ifdef ENABLE_WINDOWS_REGISTRY - - static const gchar * registry_path = "SOFTWARE"; - -#else + static GKeyFile * keyfile = NULL; + static gchar * keyfilename = NULL; + static const HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE }; - static GKeyFile * program_config = NULL; - -#endif // ENABLE_WINDOWS_REGISTRY + #define WINDOWS_REGISTRY_PATH "software" /*--[ Implement ]------------------------------------------------------------------------------------*/ -#ifdef ENABLE_WINDOWS_REGISTRY - enum REG_KEY { REG_KEY_USER, @@ -76,53 +61,46 @@ REG_KEY_INEXISTENT }; - static enum REG_KEY registry_query(const gchar *group, const gchar *key, HKEY *hKey) + /// @brief Open registry for read-only access. + static enum REG_KEY search_for_registry_key(const gchar *group, const gchar *key, HKEY *hKey) { - static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE }; - gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,g_get_application_name(),group); - int f; + g_autofree gchar * path = g_strdup_printf("%s\\%s\\%s",WINDOWS_REGISTRY_PATH,g_get_application_name(),group); + size_t ix; - for(f=0;fmessage); + g_message( _( "Can't save session settings: %s" ), error->message); g_error_free(error); } } - g_key_file_free(program_config); - program_config = NULL; +} -#endif // ENABLE_WINDOWS_REGISTRY +void pw3270_session_config_free(void) +{ + if(keyfile) + { + pw3270_session_config_save(); + g_key_file_free(keyfile); + keyfile = NULL; + } } gchar * build_data_filename(const gchar *first_element, ...) @@ -648,52 +405,6 @@ gchar * filename_from_va(const gchar *first_element, va_list args) g_autofree gchar * suffix = g_string_free(result, FALSE); -#if defined( ENABLE_WINDOWS_REGISTRY ) - for(p=0;p