Commit 3f0a2779ace926ff3b37760c8b1a33dd706abc18

Authored by Perry Werneck
1 parent 34dc0b37

Fixing gtk/glib warnings

Fixing performance issues in session file.
Makefile.in
... ... @@ -265,7 +265,7 @@ run: \
265 265 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@ \
266 266 gschemas.compiled
267 267  
268   - @LD_LIBRARY_PATH=$(BINDBG) \
  268 + @G_DEBUG=fatal-warnings \
269 269 $(BINDBG)/$(PACKAGE_NAME)@EXEEXT@
270 270  
271 271 mem-check: \
... ...
src/objects/actions/lib3270/pakey.c
... ... @@ -100,14 +100,15 @@
100 100 }
101 101  
102 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 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 100 }
101 101  
102 102 void Lib3270PfAction_init(Lib3270PfAction *action) {
103   -
104   - action->parent.activate = activate;
105   - action->parent.name = "pfkey";
106   -
107 103 }
108 104  
109 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 83 };
84 84  
85 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 87 g_action_map_add_action(map,actions[ix]);
87 88 }
88 89 }
... ...
src/objects/application/actions/window.c
... ... @@ -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 61 debug("%s",__FUNCTION__);
62 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 33 #include <v3270/settings.h>
34 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 43 static void session_changed(GtkWidget *terminal, GtkWidget *label) {
37 44  
38 45 gtk_label_set_text(GTK_LABEL(label),v3270_get_session_name(terminal));
... ... @@ -89,8 +96,37 @@
89 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 126 static void on_terminal_destroy(GtkWidget *terminal, GtkWindow * window) {
93 127  
  128 + check_for_session_changed(terminal);
  129 +
94 130 if(gtk_window_get_default_widget(window) != terminal) {
95 131 return;
96 132 }
... ... @@ -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 155 static void disconnected(GtkWidget *terminal, GtkWindow * window) {
126 156  
127 157 debug("%s",__FUNCTION__);
... ... @@ -205,85 +235,84 @@
205 235  
206 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 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 278 GtkWidget * pw3270_terminal_new(GtkWidget *widget, const gchar *session_file) {
254 279  
  280 + struct SessionDescriptor * descriptor;
  281 +
255 282 g_return_val_if_fail(PW3270_IS_APPLICATION_WINDOW(widget),NULL);
256 283  
257 284 pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget);
258 285 GtkWidget * terminal = v3270_new();
259 286  
260   - gchar * filename;
261   -
262 287 if(session_file) {
263 288  
264 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 293 } else {
268 294  
269 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 303 // Setup session file;
275 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 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 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 318 } else {
... ... @@ -291,7 +320,7 @@
291 320 // No session file, load the defaults (if available).
292 321 lib3270_autoptr(char) default_settings = lib3270_build_data_filename("defaults.conf",NULL);
293 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 324 g_warning("Can't load \"%s\"",default_settings);
296 325 } else {
297 326 g_message("Loading session properties from %s",default_settings);
... ... @@ -310,17 +339,16 @@
310 339  
311 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 347 append_terminal_page(window,terminal);
321 348  
322 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 353 return terminal;
326 354  
... ...
src/pw3270/window.c
... ... @@ -306,9 +306,6 @@ static GtkWidget * trace_window = NULL;
306 306  
307 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 309 return widget;
313 310 }
314 311  
... ...