Commit 666e3234205dac81b7d2d655f85f995ec1a62ea1

Authored by Perry Werneck
1 parent 367599ab

Saving keypad states.

src/include/pw3270/window.h
... ... @@ -82,6 +82,9 @@
82 82 /// @brief Get window settings.
83 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 88 G_END_DECLS
86 89  
87 90  
... ...
src/main/placeholders.c
... ... @@ -110,7 +110,7 @@
110 110  
111 111 placeholder = gtk_builder_get_object(builder, placeholders[ix]);
112 112  
113   - if(placeholder) {
  113 + if(placeholder && G_IS_MENU(placeholder)) {
114 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 65 GtkNotebook * notebook;
66 66 GtkToolbar * toolbar;
67 67  
  68 + GList * keypads; ///< @brief Keypads.
  69 +
68 70 struct {
69 71 int width; ///< @brief Window width.
70 72 int height; ///< @brief Window height.
... ...
src/objects/window/terminal.c
... ... @@ -82,6 +82,27 @@
82 82 v3270_to_key_file(terminal,session->key_file,"terminal");
83 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 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 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 78 GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->destroy(widget);
74 79  
75 80 }
... ... @@ -191,10 +196,20 @@
191 196  
192 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 209 g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model);
195 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 214 GPropertyAction * action =
200 215 g_property_action_new(
... ... @@ -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 + }
... ...