Commit efed03ba2eee58b0d22f1d41f083ab3b523a8efe
1 parent
004109bc
Exists in
master
and in
5 other branches
Reforma do sistema de actions aparentemente ok, teste por memory leaks saiu com 0
Showing
5 changed files
with
21 additions
and
144 deletions
Show diff stats
Makefile.in
@@ -82,6 +82,13 @@ $(BINDIR)/Debug/lib/@DLLPREFIX@3270@DLLEXT@: src/lib3270/* src/include/lib3270/* | @@ -82,6 +82,13 @@ $(BINDIR)/Debug/lib/@DLLPREFIX@3270@DLLEXT@: src/lib3270/* src/include/lib3270/* | ||
82 | run: $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT) | 82 | run: $(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT) |
83 | @PATH="$(BINDIR)/Debug/lib:$(PATH)" "$(BINDIR)/Debug/$(PACKAGE_TARNAME)$(EXEEXT)" | 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 | #---[ Targets ]---------------------------------------------------------------- | 92 | #---[ Targets ]---------------------------------------------------------------- |
86 | 93 | ||
87 | tgz: $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz | 94 | tgz: $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz |
src/gtk/actions.c
@@ -39,7 +39,6 @@ | @@ -39,7 +39,6 @@ | ||
39 | 39 | ||
40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
41 | 41 | ||
42 | -/* | ||
43 | static void lib3270_action(GtkAction *action, GtkWidget *widget) | 42 | static void lib3270_action(GtkAction *action, GtkWidget *widget) |
44 | { | 43 | { |
45 | int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call"); | 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,7 +82,7 @@ static void paste_action(GtkAction *action, GtkWidget *widget) | ||
83 | v3270_paste_clipboard(GTK_V3270(widget)); | 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 | #undef DECLARE_LIB3270_ACTION | 87 | #undef DECLARE_LIB3270_ACTION |
89 | #undef DECLARE_LIB3270_CLEAR_SELECTION_ACTION | 88 | #undef DECLARE_LIB3270_CLEAR_SELECTION_ACTION |
@@ -150,7 +149,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, | @@ -150,7 +149,7 @@ void ui_connect_action(GtkAction *action, GtkWidget *widget, const gchar *name, | ||
150 | // Not-found, disable action | 149 | // Not-found, disable action |
151 | gtk_action_set_sensitive(action,FALSE); | 150 | gtk_action_set_sensitive(action,FALSE); |
152 | } | 151 | } |
153 | -*/ | 152 | + |
154 | 153 | ||
155 | static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | 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,29 +160,6 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | ||
161 | lib3270_set_toggle(GTK_V3270(widget)->host,toggle,gtk_toggle_action_get_active(action)); | 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 | static void selection_move_action(GtkAction *action, GtkWidget *widget) | 163 | static void selection_move_action(GtkAction *action, GtkWidget *widget) |
188 | { | 164 | { |
189 | trace("Action %s activated on widget %p dir=%d",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"direction")); | 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,7 +173,7 @@ static void cursor_move_action(GtkAction *action, GtkWidget *widget) | ||
197 | lib3270_move_cursor(GTK_V3270(widget)->host,(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); | 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 | int f; | 178 | int f; |
203 | 179 | ||
@@ -219,14 +195,13 @@ void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar | @@ -219,14 +195,13 @@ void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar | ||
219 | } | 195 | } |
220 | else | 196 | else |
221 | { | 197 | { |
222 | - *error = g_error_new( g_quark_from_static_string(PACKAGE_NAME), | 198 | + *error = g_error_new( ERROR_DOMAIN, |
223 | ENOENT, | 199 | ENOENT, |
224 | _( "Unexpected target \"%s\""), | 200 | _( "Unexpected target \"%s\""), |
225 | target); | 201 | target); |
226 | } | 202 | } |
227 | 203 | ||
228 | } | 204 | } |
229 | -*/ | ||
230 | 205 | ||
231 | static void action_pfkey(GtkAction *action, GtkWidget *widget) | 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,52 +229,6 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget) | ||
254 | lib3270_set_toggle(GTK_V3270(widget)->host,id,0); | 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 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) | 232 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) |
304 | { | 233 | { |
305 | static const gchar *actionname[ACTION_COUNT] = { "pastenext", | 234 | static const gchar *actionname[ACTION_COUNT] = { "pastenext", |
@@ -439,6 +368,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | @@ -439,6 +368,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | ||
439 | { | 368 | { |
440 | case ACTION_TYPE_DEFAULT: | 369 | case ACTION_TYPE_DEFAULT: |
441 | action = gtk_action_new(nm,NULL,NULL,NULL); | 370 | action = gtk_action_new(nm,NULL,NULL,NULL); |
371 | + connect_standard_action(action,widget,nm); | ||
442 | break; | 372 | break; |
443 | 373 | ||
444 | case ACTION_TYPE_TOGGLE: | 374 | case ACTION_TYPE_TOGGLE: |
@@ -451,6 +381,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | @@ -451,6 +381,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | ||
451 | 381 | ||
452 | case ACTION_TYPE_MOVE: | 382 | case ACTION_TYPE_MOVE: |
453 | action = gtk_action_new(nm,NULL,NULL,NULL); | 383 | action = gtk_action_new(nm,NULL,NULL,NULL); |
384 | + connect_move_action(action,widget,attr,flags,error); | ||
454 | break; | 385 | break; |
455 | 386 | ||
456 | case ACTION_TYPE_PFKEY: | 387 | case ACTION_TYPE_PFKEY: |
@@ -489,7 +420,6 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | @@ -489,7 +420,6 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash | ||
489 | } | 420 | } |
490 | 421 | ||
491 | g_hash_table_insert(hash,nm,action); | 422 | g_hash_table_insert(hash,nm,action); |
492 | - g_free(nm); | ||
493 | 423 | ||
494 | return action; | 424 | return action; |
495 | } | 425 | } |
src/include/lib3270/action_table.h
@@ -78,6 +78,7 @@ | @@ -78,6 +78,7 @@ | ||
78 | 78 | ||
79 | DECLARE_LIB3270_ACTION( attn ) | 79 | DECLARE_LIB3270_ACTION( attn ) |
80 | DECLARE_LIB3270_ACTION( break ) | 80 | DECLARE_LIB3270_ACTION( break ) |
81 | + DECLARE_LIB3270_ACTION( pastenext ) | ||
81 | 82 | ||
82 | DECLARE_LIB3270_ACTION( deleteword ) | 83 | DECLARE_LIB3270_ACTION( deleteword ) |
83 | DECLARE_LIB3270_ACTION( deletefield ) | 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,23 +277,23 @@ LIB3270_EXPORT int lib3270_paste(H3270 *h, const unsigned char *str) | ||
277 | return 0; | 277 | return 0; |
278 | } | 278 | } |
279 | 279 | ||
280 | -LIB3270_EXPORT int lib3270_pastenext(H3270 *h) | 280 | +LIB3270_ACTION(pastenext) |
281 | { | 281 | { |
282 | char * ptr; | 282 | char * ptr; |
283 | int rc; | 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 | return 0; | 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 | free(ptr); | 298 | free(ptr); |
299 | return rc; | 299 | return rc; |
valgrind.suppression
@@ -1,61 +0,0 @@ | @@ -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 | -} |