Commit 3f0a2779ace926ff3b37760c8b1a33dd706abc18

Authored by Perry Werneck
1 parent 34dc0b37

Fixing gtk/glib warnings

Fixing performance issues in session file.
@@ -265,7 +265,7 @@ run: \ @@ -265,7 +265,7 @@ run: \
265 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@ \ 265 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@ \
266 gschemas.compiled 266 gschemas.compiled
267 267
268 - @LD_LIBRARY_PATH=$(BINDBG) \ 268 + @G_DEBUG=fatal-warnings \
269 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@ 269 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@
270 270
271 mem-check: \ 271 mem-check: \
src/objects/actions/lib3270/pakey.c
@@ -100,14 +100,15 @@ @@ -100,14 +100,15 @@
100 } 100 }
101 101
102 void Lib3270PaAction_init(Lib3270PaAction *object) { 102 void Lib3270PaAction_init(Lib3270PaAction *object) {
103 - pw3270Action * action = PW3270_ACTION(object);  
104 -  
105 - action->activate = activate;  
106 - action->name = "pakey";  
107 } 103 }
108 104
109 105
110 GAction * pw3270_action_new_pakey(void) { 106 GAction * pw3270_action_new_pakey(void) {
111 - return G_ACTION(g_object_new(PW3270_TYPE_PAKEY_ACTION, NULL)); 107 + pw3270Action * action = PW3270_ACTION(g_object_new(PW3270_TYPE_PAKEY_ACTION, NULL));
  108 +
  109 + action->activate = activate;
  110 + action->name = "pakey";
  111 +
  112 + return G_ACTION(action);
112 } 113 }
113 114
src/objects/actions/lib3270/pfkey.c
@@ -100,14 +100,16 @@ @@ -100,14 +100,16 @@
100 } 100 }
101 101
102 void Lib3270PfAction_init(Lib3270PfAction *action) { 102 void Lib3270PfAction_init(Lib3270PfAction *action) {
103 -  
104 - action->parent.activate = activate;  
105 - action->parent.name = "pfkey";  
106 -  
107 } 103 }
108 104
109 GAction * pw3270_action_new_pfkey(void) { 105 GAction * pw3270_action_new_pfkey(void) {
110 - return G_ACTION(g_object_new(PW3270_TYPE_PFKEY_ACTION, NULL)); 106 +
  107 + pw3270Action * action = PW3270_ACTION(g_object_new(PW3270_TYPE_PFKEY_ACTION, NULL));
  108 +
  109 + action->activate = activate;
  110 + action->name = "pfkey";
  111 +
  112 + return G_ACTION(action);
111 } 113 }
112 114
113 115
src/objects/actions/window.c
@@ -83,6 +83,7 @@ @@ -83,6 +83,7 @@
83 }; 83 };
84 84
85 for(ix = 0; ix < G_N_ELEMENTS(actions); ix++) { 85 for(ix = 0; ix < G_N_ELEMENTS(actions); ix++) {
  86 + debug("Creating action %u (%s)", (unsigned int) ix, g_action_get_name(actions[ix]));
86 g_action_map_add_action(map,actions[ix]); 87 g_action_map_add_action(map,actions[ix]);
87 } 88 }
88 } 89 }
src/objects/application/actions/window.c
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 56
57 } 57 }
58 58
59 - void pw3270_application_new_tab_activated(GSimpleAction G_GNUC_UNUSED(* action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) { 59 + void pw3270_application_new_tab_activated(GSimpleAction G_GNUC_UNUSED(*action), GVariant G_GNUC_UNUSED(*parameter), gpointer application) {
60 60
61 debug("%s",__FUNCTION__); 61 debug("%s",__FUNCTION__);
62 pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), NULL); 62 pw3270_terminal_new(GTK_WIDGET(gtk_application_get_active_window(GTK_APPLICATION(application))), NULL);
src/objects/window/terminal.c
@@ -33,6 +33,13 @@ @@ -33,6 +33,13 @@
33 #include <v3270/settings.h> 33 #include <v3270/settings.h>
34 #include <v3270/actions.h> 34 #include <v3270/actions.h>
35 35
  36 + struct SessionDescriptor
  37 + {
  38 + gboolean changed; ///< @brief Save file?
  39 + GKeyFile * key_file;
  40 + gchar filename[1];
  41 + };
  42 +
36 static void session_changed(GtkWidget *terminal, GtkWidget *label) { 43 static void session_changed(GtkWidget *terminal, GtkWidget *label) {
37 44
38 gtk_label_set_text(GTK_LABEL(label),v3270_get_session_name(terminal)); 45 gtk_label_set_text(GTK_LABEL(label),v3270_get_session_name(terminal));
@@ -89,8 +96,37 @@ @@ -89,8 +96,37 @@
89 return FALSE; 96 return FALSE;
90 } 97 }
91 98
  99 + static void check_for_session_changed(GtkWidget *terminal) {
  100 +
  101 + struct SessionDescriptor * session = (struct SessionDescriptor *) g_object_get_data(G_OBJECT(terminal),"session-descriptor");
  102 +
  103 + if(session->changed) {
  104 +
  105 + session->changed = FALSE;
  106 +
  107 + GError * error = NULL;
  108 + g_key_file_save_to_file(session->key_file,session->filename,&error);
  109 +
  110 + if(error) {
  111 +
  112 + g_warning("Can't save \"%s\": %s",session->filename,error->message);
  113 + g_error_free(error);
  114 +
  115 + } else {
  116 +
  117 + g_message("Session was saved to %s",session->filename);
  118 +
  119 + }
  120 +
  121 + }
  122 +
  123 + }
  124 +
  125 +
92 static void on_terminal_destroy(GtkWidget *terminal, GtkWindow * window) { 126 static void on_terminal_destroy(GtkWidget *terminal, GtkWindow * window) {
93 127
  128 + check_for_session_changed(terminal);
  129 +
94 if(gtk_window_get_default_widget(window) != terminal) { 130 if(gtk_window_get_default_widget(window) != terminal) {
95 return; 131 return;
96 } 132 }
@@ -116,12 +152,6 @@ @@ -116,12 +152,6 @@
116 152
117 } 153 }
118 154
119 -  
120 - static gboolean bg_auto_connect(GtkWidget *terminal) {  
121 - v3270_reconnect(terminal);  
122 - return FALSE;  
123 - }  
124 -  
125 static void disconnected(GtkWidget *terminal, GtkWindow * window) { 155 static void disconnected(GtkWidget *terminal, GtkWindow * window) {
126 156
127 debug("%s",__FUNCTION__); 157 debug("%s",__FUNCTION__);
@@ -205,85 +235,84 @@ @@ -205,85 +235,84 @@
205 235
206 // Setup session. 236 // Setup session.
207 237
208 - H3270 * hSession = v3270_get_session(terminal);  
209 -  
210 - if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_CONNECT_ON_STARTUP))  
211 - g_idle_add((GSourceFunc) bg_auto_connect, terminal); 238 +// H3270 * hSession = v3270_get_session(terminal);
212 239
213 return page; 240 return page;
214 241
215 } 242 }
216 243
217 - static void save_settings(GtkWidget *terminal, const gchar *filename) {  
218 -  
219 - GError *error = NULL;  
220 - GKeyFile * key_file = g_key_file_new();  
221 -  
222 - g_key_file_load_from_file(key_file,filename,G_KEY_FILE_NONE,&error);  
223 -  
224 - if(error) {  
225 -  
226 - g_warning("Can't load \"%s\": %s",filename,error->message);  
227 - g_error_free(error);  
228 - return;  
229 -  
230 - } 244 + static void save_settings(GtkWidget *terminal, struct SessionDescriptor * session) {
231 245
232 - v3270_to_key_file(terminal,key_file,"terminal");  
233 - v3270_accelerator_map_to_key_file(terminal, key_file, "accelerators"); 246 + debug("************************************* %s",__FUNCTION__);
  247 + v3270_to_key_file(terminal,session->key_file,"terminal");
  248 + v3270_accelerator_map_to_key_file(terminal, session->key_file, "accelerators");
234 249
235 - g_key_file_save_to_file(key_file,filename,&error); 250 + session->changed = TRUE;
236 251
237 - if(error) { 252 + }
238 253
239 - g_warning("Can't save \"%s\": %s",filename,error->message);  
240 - g_error_free(error); 254 + static void toggle_changed(G_GNUC_UNUSED v3270 *widget, G_GNUC_UNUSED LIB3270_TOGGLE_ID toggle_id, gboolean toggle_state, const gchar *toggle_name, struct SessionDescriptor * session) {
  255 + debug("%s(%s)=%s",__FUNCTION__,toggle_name,toggle_state ? "ON" : "OFF");
  256 + g_key_file_set_boolean(session->key_file,"terminal",toggle_name,toggle_state);
  257 + session->changed = TRUE;
  258 + }
241 259
242 - } else { 260 + static void close_settings(struct SessionDescriptor * session) {
243 261
244 - g_message("Session properties save to %s",filename);  
245 - } 262 + if(session->key_file) {
246 263
247 - g_key_file_free(key_file); 264 + if(session->changed) {
  265 + g_message("Saving file %s",session->filename);
  266 + g_key_file_save_to_file(session->key_file,session->filename,NULL);
  267 + } else {
  268 + g_message("Closing file %s",session->filename);
  269 + }
248 270
  271 + g_key_file_free(session->key_file);
  272 + session->key_file = NULL;
  273 + }
249 274
  275 + g_free(session);
250 } 276 }
251 277
252 -  
253 GtkWidget * pw3270_terminal_new(GtkWidget *widget, const gchar *session_file) { 278 GtkWidget * pw3270_terminal_new(GtkWidget *widget, const gchar *session_file) {
254 279
  280 + struct SessionDescriptor * descriptor;
  281 +
255 g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(widget),NULL); 282 g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(widget),NULL);
256 283
257 pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget); 284 pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget);
258 GtkWidget * terminal = v3270_new(); 285 GtkWidget * terminal = v3270_new();
259 286
260 - gchar * filename;  
261 -  
262 if(session_file) { 287 if(session_file) {
263 288
264 // Use the supplied session file 289 // Use the supplied session file
265 - filename = g_strdup(session_file); 290 + descriptor = g_malloc0(sizeof(struct SessionDescriptor) + strlen(session_file));
  291 + strcpy(descriptor->filename,session_file);
266 292
267 } else { 293 } else {
268 294
269 // No session file, use the default one. 295 // No session file, use the default one.
270 - filename = g_build_filename(g_get_user_config_dir(),G_STRINGIFY(PRODUCT_NAME) ".conf",NULL); 296 + g_autofree gchar * filename = g_build_filename(g_get_user_config_dir(),G_STRINGIFY(PRODUCT_NAME) ".conf",NULL);
  297 +
  298 + descriptor = g_malloc0(sizeof(struct SessionDescriptor) + strlen(filename));
  299 + strcpy(descriptor->filename,filename);
271 300
272 } 301 }
273 302
274 // Setup session file; 303 // Setup session file;
275 GError *error = NULL; 304 GError *error = NULL;
276 - g_object_set_data_full(G_OBJECT(terminal),"session-file-name",filename,g_free); 305 + g_object_set_data_full(G_OBJECT(terminal),"session-descriptor",descriptor,(GDestroyNotify) close_settings);
277 306
278 - GKeyFile * key_file = g_key_file_new(); 307 + descriptor->key_file = g_key_file_new();
279 308
280 - if(g_file_test(filename,G_FILE_TEST_IS_REGULAR)) { 309 + if(g_file_test(descriptor->filename,G_FILE_TEST_IS_REGULAR)) {
281 310
282 // Found session file, open it. 311 // Found session file, open it.
283 - if(!g_key_file_load_from_file(key_file,filename,G_KEY_FILE_NONE,&error)) {  
284 - g_warning("Can't load \"%s\"",filename); 312 + if(!g_key_file_load_from_file(descriptor->key_file,descriptor->filename,G_KEY_FILE_NONE,&error)) {
  313 + g_warning("Can't load \"%s\"",descriptor->filename);
285 } else { 314 } else {
286 - g_message("Loading session properties from %s",filename); 315 + g_message("Loading session properties from %s",descriptor->filename);
287 } 316 }
288 317
289 } else { 318 } else {
@@ -291,7 +320,7 @@ @@ -291,7 +320,7 @@
291 // No session file, load the defaults (if available). 320 // No session file, load the defaults (if available).
292 lib3270_autoptr(char) default_settings = lib3270_build_data_filename("defaults.conf",NULL); 321 lib3270_autoptr(char) default_settings = lib3270_build_data_filename("defaults.conf",NULL);
293 if(g_file_test(default_settings,G_FILE_TEST_IS_REGULAR)) { 322 if(g_file_test(default_settings,G_FILE_TEST_IS_REGULAR)) {
294 - if(!g_key_file_load_from_file(key_file,default_settings,G_KEY_FILE_NONE,&error)) { 323 + if(!g_key_file_load_from_file(descriptor->key_file,default_settings,G_KEY_FILE_NONE,&error)) {
295 g_warning("Can't load \"%s\"",default_settings); 324 g_warning("Can't load \"%s\"",default_settings);
296 } else { 325 } else {
297 g_message("Loading session properties from %s",default_settings); 326 g_message("Loading session properties from %s",default_settings);
@@ -310,17 +339,16 @@ @@ -310,17 +339,16 @@
310 339
311 } else { 340 } else {
312 341
313 - v3270_load_key_file(terminal,key_file,NULL);  
314 - v3270_accelerator_map_load_key_file(terminal,key_file,NULL); 342 + v3270_load_key_file(terminal,descriptor->key_file,NULL);
  343 + v3270_accelerator_map_load_key_file(terminal,descriptor->key_file,NULL);
315 344
316 } 345 }
317 346
318 - g_key_file_free(key_file);  
319 -  
320 append_terminal_page(window,terminal); 347 append_terminal_page(window,terminal);
321 348
322 // Setup signals. 349 // Setup signals.
323 - g_signal_connect(G_OBJECT(terminal),"save-settings",G_CALLBACK(save_settings),filename); 350 + g_signal_connect(G_OBJECT(terminal),"save-settings",G_CALLBACK(save_settings),descriptor);
  351 + g_signal_connect(G_OBJECT(terminal),"toggle_changed",G_CALLBACK(toggle_changed),descriptor);
324 352
325 return terminal; 353 return terminal;
326 354
src/pw3270/window.c
@@ -306,9 +306,6 @@ static GtkWidget * trace_window = NULL; @@ -306,9 +306,6 @@ static GtkWidget * trace_window = NULL;
306 306
307 v3270_set_scaled_fonts(GTK_PW3270(widget)->terminal,get_boolean_from_config("terminal","sfonts",FALSE)); 307 v3270_set_scaled_fonts(GTK_PW3270(widget)->terminal,get_boolean_from_config("terminal","sfonts",FALSE));
308 308
309 - if(pw3270_get_toggle(widget,LIB3270_TOGGLE_CONNECT_ON_STARTUP))  
310 - g_idle_add((GSourceFunc) bg_auto_connect, widget);  
311 -  
312 return widget; 309 return widget;
313 } 310 }
314 311