Commit 666e3234205dac81b7d2d655f85f995ec1a62ea1

Authored by Perry Werneck
1 parent 367599ab

Saving keypad states.

src/include/pw3270/window.h
@@ -82,6 +82,9 @@ @@ -82,6 +82,9 @@
82 /// @brief Get window settings. 82 /// @brief Get window settings.
83 GSettings * pw3270_application_window_settings_new(void); 83 GSettings * pw3270_application_window_settings_new(void);
84 84
  85 + /// @brief Get window keypads.
  86 + GList * pw3270_application_window_get_keypads(GtkWidget *window);
  87 +
85 G_END_DECLS 88 G_END_DECLS
86 89
87 90
src/main/placeholders.c
@@ -110,7 +110,7 @@ @@ -110,7 +110,7 @@
110 110
111 placeholder = gtk_builder_get_object(builder, placeholders[ix]); 111 placeholder = gtk_builder_get_object(builder, placeholders[ix]);
112 112
113 - if(placeholder) { 113 + if(placeholder && G_IS_MENU(placeholder)) {
114 g_menu_append_item(G_MENU(placeholder), g_menu_item_new_submenu(_("Keypads"),G_MENU_MODEL(keypad_menu))); 114 g_menu_append_item(G_MENU(placeholder), g_menu_item_new_submenu(_("Keypads"),G_MENU_MODEL(keypad_menu)));
115 } 115 }
116 116
src/objects/window/private.h
@@ -65,6 +65,8 @@ @@ -65,6 +65,8 @@
65 GtkNotebook * notebook; 65 GtkNotebook * notebook;
66 GtkToolbar * toolbar; 66 GtkToolbar * toolbar;
67 67
  68 + GList * keypads; ///< @brief Keypads.
  69 +
68 struct { 70 struct {
69 int width; ///< @brief Window width. 71 int width; ///< @brief Window width.
70 int height; ///< @brief Window height. 72 int height; ///< @brief Window height.
src/objects/window/terminal.c
@@ -82,6 +82,27 @@ @@ -82,6 +82,27 @@
82 v3270_to_key_file(terminal,session->key_file,"terminal"); 82 v3270_to_key_file(terminal,session->key_file,"terminal");
83 v3270_accelerator_map_to_key_file(terminal, session->key_file, "accelerators"); 83 v3270_accelerator_map_to_key_file(terminal, session->key_file, "accelerators");
84 84
  85 + GtkWidget * window = gtk_widget_get_toplevel(terminal);
  86 +
  87 + if(PW3270_IS_APPLICATION_WINDOW(window) && pw3270_application_window_get_active_terminal(window) == terminal) {
  88 +
  89 + debug("%s on active terminal, saving window settings",__FUNCTION__);
  90 + GList * keypad = pw3270_application_window_get_keypads(window);
  91 +
  92 + while(keypad) {
  93 +
  94 + g_key_file_set_boolean(
  95 + session->key_file,
  96 + "keypads",
  97 + gtk_widget_get_name(GTK_WIDGET(keypad->data)),
  98 + gtk_widget_get_visible(GTK_WIDGET(keypad->data))
  99 + );
  100 + keypad = g_list_next(keypad);
  101 +
  102 + }
  103 +
  104 + }
  105 +
85 g_key_file_save_to_file(session->key_file,session->filename,NULL); 106 g_key_file_save_to_file(session->key_file,session->filename,NULL);
86 107
87 } 108 }
src/objects/window/window.c
@@ -70,6 +70,11 @@ @@ -70,6 +70,11 @@
70 g_settings_set_boolean(settings, "is-fullscreen", window->state.is_fullscreen); 70 g_settings_set_boolean(settings, "is-fullscreen", window->state.is_fullscreen);
71 } 71 }
72 72
  73 + if(window->keypads) {
  74 + g_list_free(window->keypads);
  75 + window->keypads = NULL;
  76 + }
  77 +
73 GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->destroy(widget); 78 GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->destroy(widget);
74 79
75 } 80 }
@@ -191,10 +196,20 @@ @@ -191,10 +196,20 @@
191 196
192 GtkWidget * widget = pw3270_keypad_get_from_model(model); 197 GtkWidget * widget = pw3270_keypad_get_from_model(model);
193 198
  199 + if(!widget) {
  200 + return NULL;
  201 + }
  202 +
  203 + window->keypads = g_list_prepend(window->keypads,widget);
  204 +
  205 + const gchar * name = pw3270_keypad_model_get_name(model);
  206 +
  207 + gtk_widget_set_name(widget,name);
  208 +
194 g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model); 209 g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model);
195 g_signal_connect(widget,"show",G_CALLBACK(keypad_show),model); 210 g_signal_connect(widget,"show",G_CALLBACK(keypad_show),model);
196 211
197 - g_autofree gchar * action_name = g_strconcat("keypad.",pw3270_keypad_model_get_name(model),NULL); 212 + g_autofree gchar * action_name = g_strconcat("keypad.",name,NULL);
198 213
199 GPropertyAction * action = 214 GPropertyAction * action =
200 g_property_action_new( 215 g_property_action_new(
@@ -751,3 +766,9 @@ @@ -751,3 +766,9 @@
751 766
752 } 767 }
753 768
  769 + GList * pw3270_application_window_get_keypads(GtkWidget *window) {
  770 +
  771 + g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(window),NULL);
  772 + return PW3270_APPLICATION_WINDOW(window)->keypads;
  773 +
  774 + }