Commit efed03ba2eee58b0d22f1d41f083ab3b523a8efe

Authored by perry.werneck@gmail.com
1 parent 004109bc

Reforma do sistema de actions aparentemente ok, teste por memory leaks saiu com 0

Makefile.in
... ... @@ -82,6 +82,13 @@ $(BINDIR)/Debug/lib/@DLLPREFIX@3270@DLLEXT@: src/lib3270/* src/include/lib3270/*
82 82 run: $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)
83 83 @PATH="$(BINDIR)/Debug/lib:$(PATH)" "$(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)"
84 84  
  85 +memchk: $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)
  86 +ifeq ($(VALGRIND),no)
  87 + @PATH="$(BINDIR)/Debug/lib:$(PATH)" "$(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)"
  88 +else
  89 + @PATH="$(BINDIR)/Debug/lib:$(PATH)" G_DEBUG=gc-friendly G_SLICE=always-malloc \$(VALGRIND) --leak-check=full --suppressions=src/gtk/valgrind.suppression --gen-suppressions=all $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)
  90 +endif
  91 +
85 92 #---[ Targets ]----------------------------------------------------------------
86 93  
87 94 tgz: $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz
... ...
src/gtk/actions.c
... ... @@ -39,7 +39,6 @@
39 39  
40 40 /*--[ Implement ]------------------------------------------------------------------------------------*/
41 41  
42   -/*
43 42 static void lib3270_action(GtkAction *action, GtkWidget *widget)
44 43 {
45 44 int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call");
... ... @@ -83,7 +82,7 @@ static void paste_action(GtkAction *action, GtkWidget *widget)
83 82 v3270_paste_clipboard(GTK_V3270(widget));
84 83 }
85 84  
86   -void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id)
  85 +static void connect_standard_action(GtkAction *action, GtkWidget *widget, const gchar *name)
87 86 {
88 87 #undef DECLARE_LIB3270_ACTION
89 88 #undef DECLARE_LIB3270_CLEAR_SELECTION_ACTION
... ... @@ -150,7 +149,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name,
150 149 // Not-found, disable action
151 150 gtk_action_set_sensitive(action,FALSE);
152 151 }
153   -*/
  152 +
154 153  
155 154 static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget)
156 155 {
... ... @@ -161,29 +160,6 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget)
161 160 lib3270_set_toggle(GTK_V3270(widget)->host,toggle,gtk_toggle_action_get_active(action));
162 161 }
163 162  
164   -/*
165   -void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, const gchar *id)
166   -{
167   - LIB3270_TOGGLE toggle = lib3270_get_toggle_id(id);
168   -
169   - if(toggle != -1)
170   - {
171   - GtkAction **list = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions");
172   - list[toggle] = action;
173   - g_object_set_data(G_OBJECT(action),"toggle_id",(gpointer) toggle);
174   - gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action),(lib3270_get_toggle(GTK_V3270(widget)->host,toggle) != 0));
175   - g_signal_connect(action,"toggled",G_CALLBACK(lib3270_toggle_action),widget);
176   - return;
177   - }
178   -
179   - trace("Action %s with toggle %s on widget %p",gtk_action_get_name(action),id,widget);
180   -
181   - // Not found, disable action
182   - gtk_action_set_sensitive(action,FALSE);
183   -}
184   -*/
185   -
186   -/*
187 163 static void selection_move_action(GtkAction *action, GtkWidget *widget)
188 164 {
189 165 trace("Action %s activated on widget %p dir=%d",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"direction"));
... ... @@ -197,7 +173,7 @@ static void cursor_move_action(GtkAction *action, GtkWidget *widget)
197 173 lib3270_move_cursor(GTK_V3270(widget)->host,(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) );
198 174 }
199 175  
200   -void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar *target, unsigned short flags, GError **error)
  176 +static void connect_move_action(GtkAction *action, GtkWidget *widget, const gchar *target, unsigned short flags, GError **error)
201 177 {
202 178 int f;
203 179  
... ... @@ -219,14 +195,13 @@ void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar
219 195 }
220 196 else
221 197 {
222   - *error = g_error_new( g_quark_from_static_string(PACKAGE_NAME),
  198 + *error = g_error_new( ERROR_DOMAIN,
223 199 ENOENT,
224 200 _( "Unexpected target \"%s\""),
225 201 target);
226 202 }
227 203  
228 204 }
229   -*/
230 205  
231 206 static void action_pfkey(GtkAction *action, GtkWidget *widget)
232 207 {
... ... @@ -254,52 +229,6 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget)
254 229 lib3270_set_toggle(GTK_V3270(widget)->host,id,0);
255 230 }
256 231  
257   -/*
258   -
259   -static void action_reselect(GtkAction *action, GtkWidget *widget)
260   -{
261   - lib3270_reselect(GTK_V3270(widget)->host);
262   -}
263   -
264   -static void action_unfullscreen(GtkAction *action, GtkWidget *widget)
265   -{
266   - lib3270_set_toggle(GTK_V3270(widget)->host,LIB3270_TOGGLE_FULL_SCREEN,0);
267   -}
268   -
269   -static void action_pastnext(GtkAction *action, GtkWidget *widget)
270   -{
271   - lib3270_pastenext(GTK_V3270(widget)->host);
272   -}
273   -
274   -void ui_connect_index_action(GtkAction *action, GtkWidget *widget, int ix, GtkAction **lst)
275   -{
276   -// trace("action(%d): %p",ix,action);
277   -
278   - switch(ix)
279   - {
280   - case ACTION_PASTENEXT:
281   - g_signal_connect(action,"activate",G_CALLBACK(action_pastnext),widget);
282   - break;
283   -
284   - case ACTION_FULLSCREEN:
285   - g_signal_connect(action,"activate",G_CALLBACK(action_fullscreen),widget);
286   - break;
287   -
288   - case ACTION_UNFULLSCREEN:
289   - g_signal_connect(action,"activate",G_CALLBACK(action_unfullscreen),widget);
290   - break;
291   -
292   - case ACTION_RESELECT:
293   - g_signal_connect(action,"activate",G_CALLBACK(action_reselect),widget);
294   - break;
295   -
296   - default:
297   - g_warning("Action \"%s\" has unexpected id %d",gtk_action_get_name(action),ix);
298   - gtk_action_set_sensitive(action,FALSE);
299   - }
300   - }
301   -*/
302   -
303 232 GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error)
304 233 {
305 234 static const gchar *actionname[ACTION_COUNT] = { "pastenext",
... ... @@ -439,6 +368,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
439 368 {
440 369 case ACTION_TYPE_DEFAULT:
441 370 action = gtk_action_new(nm,NULL,NULL,NULL);
  371 + connect_standard_action(action,widget,nm);
442 372 break;
443 373  
444 374 case ACTION_TYPE_TOGGLE:
... ... @@ -451,6 +381,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
451 381  
452 382 case ACTION_TYPE_MOVE:
453 383 action = gtk_action_new(nm,NULL,NULL,NULL);
  384 + connect_move_action(action,widget,attr,flags,error);
454 385 break;
455 386  
456 387 case ACTION_TYPE_PFKEY:
... ... @@ -489,7 +420,6 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
489 420 }
490 421  
491 422 g_hash_table_insert(hash,nm,action);
492   - g_free(nm);
493 423  
494 424 return action;
495 425 }
... ...
src/include/lib3270/action_table.h
... ... @@ -78,6 +78,7 @@
78 78  
79 79 DECLARE_LIB3270_ACTION( attn )
80 80 DECLARE_LIB3270_ACTION( break )
  81 + DECLARE_LIB3270_ACTION( pastenext )
81 82  
82 83 DECLARE_LIB3270_ACTION( deleteword )
83 84 DECLARE_LIB3270_ACTION( deletefield )
... ...
src/lib3270/paste.c
... ... @@ -277,23 +277,23 @@ LIB3270_EXPORT int lib3270_paste(H3270 *h, const unsigned char *str)
277 277 return 0;
278 278 }
279 279  
280   -LIB3270_EXPORT int lib3270_pastenext(H3270 *h)
  280 +LIB3270_ACTION(pastenext)
281 281 {
282 282 char * ptr;
283 283 int rc;
284 284  
285   - CHECK_SESSION_HANDLE(h);
  285 + CHECK_SESSION_HANDLE(hSession);
286 286  
287   - if(!(lib3270_connected(h) && h->paste_buffer))
  287 + if(!(lib3270_connected(hSession) && hSession->paste_buffer))
288 288 {
289   - lib3270_ring_bell(h);
  289 + lib3270_ring_bell(hSession);
290 290 return 0;
291 291 }
292 292  
293   - ptr = h->paste_buffer;
294   - h->paste_buffer = NULL;
  293 + ptr = hSession->paste_buffer;
  294 + hSession->paste_buffer = NULL;
295 295  
296   - rc = lib3270_paste(h,(unsigned char *) ptr);
  296 + rc = lib3270_paste(hSession,(unsigned char *) ptr);
297 297  
298 298 free(ptr);
299 299 return rc;
... ...
valgrind.suppression
... ... @@ -1,61 +0,0 @@
1   -{
2   - libfontconfig.so.Addr4
3   - Memcheck:Addr4
4   - obj:/usr/lib/libfontconfig.so.*
5   -}
6   -
7   -{
8   - libfontconfig.so.malloc
9   - Memcheck:Leak
10   - fun:malloc
11   - obj:/usr/lib/libfontconfig.so.*
12   -}
13   -
14   -{
15   - libglib-calloc
16   - Memcheck:Leak
17   - fun:calloc
18   - obj:/usr/lib/libglib-*
19   -}
20   -
21   -{
22   - g_type_register_fundamental
23   - Memcheck:Leak
24   - ...
25   - fun:g_type_register_fundamental
26   -}
27   -
28   -{
29   - g_vfs_get_file_for_path
30   - Memcheck:Leak
31   - ...
32   - fun:g_vfs_get_file_for_path
33   -}
34   -
35   -{
36   - g_type_register_static
37   - Memcheck:Leak
38   - ...
39   - fun:g_type_register_static
40   -}
41   -
42   -{
43   - libxcb.so.malloc
44   - Memcheck:Leak
45   - ...
46   - obj:/usr/lib/libxcb.so.*
47   -}
48   -
49   -{
50   - gtk_module_init
51   - Memcheck:Leak
52   - ...
53   - obj:/usr/lib/libgtk-*
54   -}
55   -
56   -{
57   - g_type_create_instance
58   - Memcheck:Leak
59   - ...
60   - obj:/usr/lib/libgobject-*
61   -}