From 0af119d4e3b2ca45bc8e51500cb3b4b9e83652ad Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 27 Nov 2019 17:10:17 -0300 Subject: [PATCH] Saving accelerators to keyfile. --- src/include/v3270/actions.h | 6 ++++++ src/terminal/keyboard/accelerator.c | 7 +++++++ src/terminal/keyboard/init.c | 11 ----------- src/terminal/keyboard/keyfile.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/testprogram/testprogram.c | 5 ++++- v3270.cbp | 3 +++ 6 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 src/terminal/keyboard/keyfile.c diff --git a/src/include/v3270/actions.h b/src/include/v3270/actions.h index 8eb4070..4dd9583 100644 --- a/src/include/v3270/actions.h +++ b/src/include/v3270/actions.h @@ -59,12 +59,18 @@ LIB3270_EXPORT void v3270_accelerator_map_foreach(GtkWidget *widget,void (*call)(const V3270Accelerator * accel, const char *keys, gpointer ptr), gpointer ptr); + LIB3270_EXPORT void v3270_accelerator_map_to_key_file(GtkWidget *widget, GKeyFile *key_file, const gchar *group_name); + LIB3270_EXPORT const V3270Accelerator * v3270_get_accelerator(GtkWidget *widget, guint keyval, GdkModifierType state); LIB3270_EXPORT void v3270_accelerator_activate(const V3270Accelerator * accel, GtkWidget *terminal); LIB3270_EXPORT gboolean v3270_accelerator_compare(const V3270Accelerator * accel, const guint keyval, const GdkModifierType mods); LIB3270_EXPORT const gchar * v3270_accelerator_get_name(const V3270Accelerator * accel); LIB3270_EXPORT const gchar * v3270_accelerator_get_description(const V3270Accelerator * accel); + /// @brief Converts the accelerator into a string which can be used to represent the accelerator to the user. + /// @return A newly-allocated string representing the accelerator. + LIB3270_EXPORT gchar * v3270_accelerator_get_label(const V3270Accelerator * accel); + G_END_DECLS #endif // V3270_ACTIONS_H_INCLUDED diff --git a/src/terminal/keyboard/accelerator.c b/src/terminal/keyboard/accelerator.c index 05c66e2..34fc87e 100644 --- a/src/terminal/keyboard/accelerator.c +++ b/src/terminal/keyboard/accelerator.c @@ -142,6 +142,8 @@ g_autofree gchar * keyname = gtk_accelerator_name(accel->key,accel->mods); g_string_append(str,keyname); + + } accelerator = g_slist_next(accelerator); @@ -154,3 +156,8 @@ g_string_free(str,FALSE); } + + LIB3270_EXPORT gchar * v3270_accelerator_get_label(const V3270Accelerator * accel) + { + return gtk_accelerator_get_label(accel->key,accel->mods); + } diff --git a/src/terminal/keyboard/init.c b/src/terminal/keyboard/init.c index be64285..6ca44c0 100644 --- a/src/terminal/keyboard/init.c +++ b/src/terminal/keyboard/init.c @@ -96,13 +96,6 @@ } -#ifdef DEBUG - void show_accelerator(const V3270Accelerator * accel, const char *keys, gpointer ptr) - { - debug("%s=%s",v3270_accelerator_get_name(accel),keys); - } -#endif // DEBUG - void v3270_init_accelerators(v3270 *widget) { size_t ix; @@ -165,10 +158,6 @@ v3270_accelerator_map_sort(widget); -#ifdef DEBUG - v3270_accelerator_map_foreach(widget,show_accelerator,NULL); -#endif // DEBUG - } diff --git a/src/terminal/keyboard/keyfile.c b/src/terminal/keyboard/keyfile.c new file mode 100644 index 0000000..71b36f8 --- /dev/null +++ b/src/terminal/keyboard/keyfile.c @@ -0,0 +1,68 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como properties.c e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + #include + #include + #include "private.h" + + //#include + + struct Args + { + GKeyFile * key_file; + const gchar * group_name; + }; + +/*--[ Implement ]------------------------------------------------------------------------------------*/ + + static void save_accelerator(const V3270Accelerator * accel, const char *keys, gpointer ptr) + { + const gchar * key = v3270_accelerator_get_name(accel); + if(!key) + return; + + debug("%s=%s",v3270_accelerator_get_name(accel),keys); + + g_key_file_set_string( + ((struct Args *) ptr)->key_file, + ((struct Args *) ptr)->group_name, + key, + keys + ); + + } + + void v3270_accelerator_map_to_key_file(GtkWidget *widget, GKeyFile *key_file, const gchar *group_name) + { + struct Args args = { key_file, group_name }; + + g_key_file_remove_group(key_file,group_name,NULL); + v3270_accelerator_map_foreach(GTK_WIDGET(widget),save_accelerator,&args); + + } diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index ccf6b47..39eebf4 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -106,14 +106,17 @@ debug("%s: Saving settings for windows %p",__FUNCTION__,window); GKeyFile * key_file = get_key_file(); + v3270_to_key_file(terminal,key_file,"terminal"); + v3270_accelerator_map_to_key_file(terminal, key_file, "accelerators"); + g_key_file_save_to_file(key_file,"terminal.conf",NULL); g_key_file_free(key_file); } -#endif // _WIN32 +#endif // _WIN32 static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { diff --git a/v3270.cbp b/v3270.cbp index 30822fc..8027aed 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -274,6 +274,9 @@ + +