Commit 5abb8018c3c526ea3b646308213b98c1ebec5868
1 parent
bf50c2f2
Exists in
master
and in
5 other branches
Corrigindo problemas na implementação de "actions" em plugins
Showing
7 changed files
with
113 additions
and
34 deletions
Show diff stats
pw3270.cbp
@@ -432,6 +432,7 @@ | @@ -432,6 +432,7 @@ | ||
432 | <Unit filename="ui/10functions.xml" /> | 432 | <Unit filename="ui/10functions.xml" /> |
433 | <Unit filename="ui/10keypad.xml" /> | 433 | <Unit filename="ui/10keypad.xml" /> |
434 | <Unit filename="ui/99debug.xml" /> | 434 | <Unit filename="ui/99debug.xml" /> |
435 | + <Unit filename="ui/rexx.xml" /> | ||
435 | <Unit filename="updateChangeLog.sh" /> | 436 | <Unit filename="updateChangeLog.sh" /> |
436 | <Extensions> | 437 | <Extensions> |
437 | <code_completion /> | 438 | <code_completion /> |
src/include/pw3270/plugin.h
@@ -40,15 +40,19 @@ | @@ -40,15 +40,19 @@ | ||
40 | extern "C" { | 40 | extern "C" { |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | - LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window); | ||
44 | - LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window); | 43 | + LIB3270_EXPORT int pw3270_plugin_init(void); |
44 | + LIB3270_EXPORT int pw3270_plugin_deinit(void); | ||
45 | 45 | ||
46 | - LIB3270_EXPORT void pw3270_plugin_start(GtkWidget *window); | ||
47 | - LIB3270_EXPORT void pw3270_plugin_stop(GtkWidget *window); | 46 | + LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window); |
47 | + LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window); | ||
48 | 48 | ||
49 | // plugins | 49 | // plugins |
50 | - LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget); | ||
51 | - LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget); | 50 | + LIB3270_EXPORT void pw3270_init_plugins(void); |
51 | + LIB3270_EXPORT void pw3270_deinit_plugins(void); | ||
52 | + | ||
53 | + LIB3270_EXPORT void pw3270_start_plugins(GtkWidget *widget); | ||
54 | + LIB3270_EXPORT void pw3270_stop_plugins(GtkWidget *widget); | ||
55 | + | ||
52 | LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name); | 56 | LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name); |
53 | 57 | ||
54 | #ifdef __cplusplus | 58 | #ifdef __cplusplus |
src/plugins/dbus3270/main.c
@@ -51,7 +51,7 @@ | @@ -51,7 +51,7 @@ | ||
51 | 51 | ||
52 | /*---[ Implement ]-------------------------------------------------------------------------------*/ | 52 | /*---[ Implement ]-------------------------------------------------------------------------------*/ |
53 | 53 | ||
54 | - LIB3270_EXPORT int pw3270_plugin_init(GtkWidget *window) | 54 | + LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) |
55 | { | 55 | { |
56 | 56 | ||
57 | GError * error = NULL; | 57 | GError * error = NULL; |
@@ -143,7 +143,7 @@ | @@ -143,7 +143,7 @@ | ||
143 | return 0; | 143 | return 0; |
144 | } | 144 | } |
145 | 145 | ||
146 | - LIB3270_EXPORT int pw3270_plugin_deinit(GtkWidget *window) | 146 | + LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window) |
147 | { | 147 | { |
148 | if(service_name) | 148 | if(service_name) |
149 | { | 149 | { |
src/plugins/rx3270/pluginmain.cc
@@ -30,6 +30,7 @@ | @@ -30,6 +30,7 @@ | ||
30 | #include "rx3270.h" | 30 | #include "rx3270.h" |
31 | #include <string.h> | 31 | #include <string.h> |
32 | #include <pw3270/plugin.h> | 32 | #include <pw3270/plugin.h> |
33 | + #include <pw3270/v3270.h> | ||
33 | #include <lib3270/actions.h> | 34 | #include <lib3270/actions.h> |
34 | #include <lib3270/log.h> | 35 | #include <lib3270/log.h> |
35 | 36 | ||
@@ -198,3 +199,16 @@ | @@ -198,3 +199,16 @@ | ||
198 | { | 199 | { |
199 | return lib3270_get_text(hSession,baddr,len); | 200 | return lib3270_get_text(hSession,baddr,len); |
200 | } | 201 | } |
202 | + | ||
203 | +extern "C" | ||
204 | +{ | ||
205 | + | ||
206 | + LIB3270_EXPORT void pw3270_action_rexx_activated(GtkAction *action, GtkWidget *widget) | ||
207 | + { | ||
208 | + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget); | ||
209 | + | ||
210 | + | ||
211 | + | ||
212 | + } | ||
213 | + | ||
214 | +} |
src/pw3270/main.c
@@ -414,6 +414,7 @@ int main(int argc, char *argv[]) | @@ -414,6 +414,7 @@ int main(int argc, char *argv[]) | ||
414 | gtk_settings_set_string_property(settings,"gtk-menu-bar-accel","Menu",""); | 414 | gtk_settings_set_string_property(settings,"gtk-menu-bar-accel","Menu",""); |
415 | } | 415 | } |
416 | 416 | ||
417 | + pw3270_init_plugins(); | ||
417 | toplevel = pw3270_new(host,systype,syscolors); | 418 | toplevel = pw3270_new(host,systype,syscolors); |
418 | pw3270_set_session_name(toplevel,session_name); | 419 | pw3270_set_session_name(toplevel,session_name); |
419 | 420 | ||
@@ -441,7 +442,6 @@ int main(int argc, char *argv[]) | @@ -441,7 +442,6 @@ int main(int argc, char *argv[]) | ||
441 | } | 442 | } |
442 | 443 | ||
443 | 444 | ||
444 | - | ||
445 | toplevel_setup(GTK_WINDOW(toplevel)); | 445 | toplevel_setup(GTK_WINDOW(toplevel)); |
446 | 446 | ||
447 | if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN)) | 447 | if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN)) |
@@ -449,7 +449,7 @@ int main(int argc, char *argv[]) | @@ -449,7 +449,7 @@ int main(int argc, char *argv[]) | ||
449 | else | 449 | else |
450 | pw3270_restore_window(toplevel,"toplevel"); | 450 | pw3270_restore_window(toplevel,"toplevel"); |
451 | 451 | ||
452 | - pw3270_init_plugins(toplevel); | 452 | + pw3270_start_plugins(toplevel); |
453 | gtk_window_present(GTK_WINDOW(toplevel)); | 453 | gtk_window_present(GTK_WINDOW(toplevel)); |
454 | 454 | ||
455 | #ifdef HAVE_GTKMAC | 455 | #ifdef HAVE_GTKMAC |
@@ -458,7 +458,8 @@ int main(int argc, char *argv[]) | @@ -458,7 +458,8 @@ int main(int argc, char *argv[]) | ||
458 | 458 | ||
459 | gtk_main(); | 459 | gtk_main(); |
460 | 460 | ||
461 | - pw3270_deinit_plugins(toplevel); | 461 | + pw3270_stop_plugins(toplevel); |
462 | + pw3270_deinit_plugins(); | ||
462 | 463 | ||
463 | } | 464 | } |
464 | 465 |
src/pw3270/plugin.c
@@ -39,7 +39,7 @@ | @@ -39,7 +39,7 @@ | ||
39 | 39 | ||
40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 40 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
41 | 41 | ||
42 | - static void load(const gchar *path, GtkWidget *widget) | 42 | + static void load(const gchar *path) |
43 | { | 43 | { |
44 | GDir * dir; | 44 | GDir * dir; |
45 | const gchar * name; | 45 | const gchar * name; |
@@ -85,11 +85,11 @@ | @@ -85,11 +85,11 @@ | ||
85 | } | 85 | } |
86 | else | 86 | else |
87 | { | 87 | { |
88 | - int (*init)(GtkWidget *); | 88 | + int (*init)(); |
89 | 89 | ||
90 | if(g_module_symbol(handle, "pw3270_plugin_init", (gpointer) &init)) | 90 | if(g_module_symbol(handle, "pw3270_plugin_init", (gpointer) &init)) |
91 | { | 91 | { |
92 | - if(init(widget)) | 92 | + if(init()) |
93 | { | 93 | { |
94 | // Plugin init fails | 94 | // Plugin init fails |
95 | g_module_close(handle); | 95 | g_module_close(handle); |
@@ -104,7 +104,6 @@ | @@ -104,7 +104,6 @@ | ||
104 | else | 104 | else |
105 | { | 105 | { |
106 | // No plugin init warn and save it anyway | 106 | // No plugin init warn and save it anyway |
107 | - g_warning("No pw3270_plugin_init() method in %s",filename); | ||
108 | lst = g_list_append(lst,handle); | 107 | lst = g_list_append(lst,handle); |
109 | } | 108 | } |
110 | } | 109 | } |
@@ -121,7 +120,7 @@ | @@ -121,7 +120,7 @@ | ||
121 | 120 | ||
122 | if(lst) | 121 | if(lst) |
123 | { | 122 | { |
124 | - // At least one plugin was loaded, save handle, start it | 123 | + // At least one plugin was loaded, save handle |
125 | GList *l = g_list_first(lst); | 124 | GList *l = g_list_first(lst); |
126 | int f; | 125 | int f; |
127 | 126 | ||
@@ -131,22 +130,15 @@ | @@ -131,22 +130,15 @@ | ||
131 | 130 | ||
132 | for(f=0;f<nPlugin && l;f++) | 131 | for(f=0;f<nPlugin && l;f++) |
133 | { | 132 | { |
134 | - void (*start)(GtkWidget *); | ||
135 | - | ||
136 | hPlugin[f] = (GModule *) l->data; | 133 | hPlugin[f] = (GModule *) l->data; |
137 | - | ||
138 | l = g_list_next(l); | 134 | l = g_list_next(l); |
139 | - | ||
140 | - if(g_module_symbol(hPlugin[f], "pw3270_plugin_start", (gpointer) &start)) | ||
141 | - start(widget); | ||
142 | } | 135 | } |
143 | - | ||
144 | g_list_free(lst); | 136 | g_list_free(lst); |
145 | } | 137 | } |
146 | 138 | ||
147 | } | 139 | } |
148 | 140 | ||
149 | - LIB3270_EXPORT void pw3270_init_plugins(GtkWidget *widget) | 141 | + LIB3270_EXPORT void pw3270_init_plugins(void) |
150 | { | 142 | { |
151 | #if defined( DEBUG ) | 143 | #if defined( DEBUG ) |
152 | 144 | ||
@@ -165,12 +157,12 @@ | @@ -165,12 +157,12 @@ | ||
165 | if(!g_file_test(path,G_FILE_TEST_IS_DIR)) | 157 | if(!g_file_test(path,G_FILE_TEST_IS_DIR)) |
166 | { | 158 | { |
167 | g_free(path); | 159 | g_free(path); |
168 | - path = pw3270_build_filename(widget,"plugins",NULL); | 160 | + path = pw3270_build_filename(NULL,"plugins",NULL); |
169 | trace("%s using [%s]",__FUNCTION__,path); | 161 | trace("%s using [%s]",__FUNCTION__,path); |
170 | } | 162 | } |
171 | } | 163 | } |
172 | 164 | ||
173 | - load(path,widget); | 165 | + load(path); |
174 | 166 | ||
175 | g_free(path); | 167 | g_free(path); |
176 | g_free(dir); | 168 | g_free(dir); |
@@ -203,29 +195,48 @@ | @@ -203,29 +195,48 @@ | ||
203 | #endif | 195 | #endif |
204 | } | 196 | } |
205 | 197 | ||
206 | - LIB3270_EXPORT void pw3270_deinit_plugins(GtkWidget *widget) | 198 | + LIB3270_EXPORT void pw3270_start_plugins(GtkWidget *widget) |
207 | { | 199 | { |
208 | - int f; | 200 | + int f; |
209 | 201 | ||
210 | - if(!hPlugin) | ||
211 | - return; | 202 | + for(f=0;f<nPlugin;f++) |
203 | + { | ||
204 | + int (*start)(GtkWidget *); | ||
212 | 205 | ||
213 | - trace("Unloading %d plugin(s)",nPlugin); | 206 | + if(g_module_symbol(hPlugin[f], "pw3270_plugin_start", (gpointer) &start)) |
207 | + start(widget); | ||
208 | + } | ||
209 | + | ||
210 | + } | ||
211 | + | ||
212 | + LIB3270_EXPORT void pw3270_stop_plugins(GtkWidget *widget) | ||
213 | + { | ||
214 | + int f; | ||
214 | 215 | ||
215 | for(f=0;f<nPlugin;f++) | 216 | for(f=0;f<nPlugin;f++) |
216 | { | 217 | { |
217 | - void (*stop)(GtkWidget *); | 218 | + int (*stop)(GtkWidget *); |
218 | 219 | ||
219 | if(g_module_symbol(hPlugin[f], "pw3270_plugin_stop", (gpointer) &stop)) | 220 | if(g_module_symbol(hPlugin[f], "pw3270_plugin_stop", (gpointer) &stop)) |
220 | stop(widget); | 221 | stop(widget); |
221 | } | 222 | } |
222 | 223 | ||
224 | + } | ||
225 | + | ||
226 | + LIB3270_EXPORT void pw3270_deinit_plugins(void) | ||
227 | + { | ||
228 | + int f; | ||
229 | + | ||
230 | + if(!hPlugin) | ||
231 | + return; | ||
232 | + | ||
233 | + trace("Unloading %d plugin(s)",nPlugin); | ||
223 | for(f=0;f<nPlugin;f++) | 234 | for(f=0;f<nPlugin;f++) |
224 | { | 235 | { |
225 | - void (*deinit)(GtkWidget *); | 236 | + void (*deinit)(void); |
226 | 237 | ||
227 | if(g_module_symbol(hPlugin[f], "pw3270_plugin_deinit", (gpointer) &deinit)) | 238 | if(g_module_symbol(hPlugin[f], "pw3270_plugin_deinit", (gpointer) &deinit)) |
228 | - deinit(widget); | 239 | + deinit(); |
229 | 240 | ||
230 | g_module_close(hPlugin[f]); | 241 | g_module_close(hPlugin[f]); |
231 | } | 242 | } |
@@ -240,17 +251,21 @@ | @@ -240,17 +251,21 @@ | ||
240 | int f; | 251 | int f; |
241 | gchar * fname; | 252 | gchar * fname; |
242 | 253 | ||
254 | + trace("%s hPlugin=%p",__FUNCTION__,hPlugin); | ||
243 | if(!hPlugin) | 255 | if(!hPlugin) |
244 | return ENOENT; | 256 | return ENOENT; |
245 | 257 | ||
246 | // Search for plugin setup calls | 258 | // Search for plugin setup calls |
247 | fname = g_strdup_printf("pw3270_setup_action_%s",name); | 259 | fname = g_strdup_printf("pw3270_setup_action_%s",name); |
260 | + trace("Searching for \"%s\"",fname); | ||
261 | + | ||
248 | for(f=0;f<nPlugin;f++) | 262 | for(f=0;f<nPlugin;f++) |
249 | { | 263 | { |
250 | int (*setup)(GtkAction *action, GtkWidget *widget); | 264 | int (*setup)(GtkAction *action, GtkWidget *widget); |
251 | 265 | ||
252 | if(g_module_symbol(hPlugin[f], fname, (gpointer) &setup)) | 266 | if(g_module_symbol(hPlugin[f], fname, (gpointer) &setup)) |
253 | { | 267 | { |
268 | + trace("%s=%p",fname,setup); | ||
254 | g_free(fname); | 269 | g_free(fname); |
255 | return setup(action,widget); | 270 | return setup(action,widget); |
256 | } | 271 | } |
@@ -259,12 +274,15 @@ | @@ -259,12 +274,15 @@ | ||
259 | 274 | ||
260 | // Search for activation callbacks | 275 | // Search for activation callbacks |
261 | fname = g_strdup_printf("pw3270_action_%s_activated",name); | 276 | fname = g_strdup_printf("pw3270_action_%s_activated",name); |
277 | + trace("Searching for \"%s\"",fname); | ||
278 | + | ||
262 | for(f=0;f<nPlugin;f++) | 279 | for(f=0;f<nPlugin;f++) |
263 | { | 280 | { |
264 | void (*call)(GtkAction *action, GtkWidget *widget); | 281 | void (*call)(GtkAction *action, GtkWidget *widget); |
265 | 282 | ||
266 | if(g_module_symbol(hPlugin[f], fname, (gpointer) &call)) | 283 | if(g_module_symbol(hPlugin[f], fname, (gpointer) &call)) |
267 | { | 284 | { |
285 | + trace("%s=%p",fname,call); | ||
268 | g_signal_connect(action,"activate",G_CALLBACK(call),widget); | 286 | g_signal_connect(action,"activate",G_CALLBACK(call),widget); |
269 | g_free(fname); | 287 | g_free(fname); |
270 | return 0; | 288 | return 0; |
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
1 | +<!----------------------------------------------------------------------------- | ||
2 | + | ||
3 | + "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
4 | + (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
5 | + aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
6 | + | ||
7 | + Copyright (C) <2008> <Banco do Brasil S.A.> | ||
8 | + | ||
9 | + Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
10 | + os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
11 | + Free Software Foundation. | ||
12 | + | ||
13 | + Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
14 | + GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
15 | + A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
16 | + obter mais detalhes. | ||
17 | + | ||
18 | + Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
19 | + programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | ||
20 | + Place, Suite 330, Boston, MA, 02111-1307, USA | ||
21 | + | ||
22 | + Contatos: | ||
23 | + | ||
24 | + perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
25 | + erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
26 | + licinio@bb.com.br (Licínio Luis Branco) | ||
27 | + kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
28 | + | ||
29 | +------------------------------------------------------------------------------> | ||
30 | + | ||
31 | +<ui> | ||
32 | + <menubar name='topmenu' topmenu='yes'> | ||
33 | + <menu name='FileMenu' label='_File' /> | ||
34 | + <menu name='EditMenu' label='_Edit' /> | ||
35 | + <menu name='View' label='_View' /> | ||
36 | + <menu name='ScriptsMenu' label='Scripts' visible='yes' > | ||
37 | + <menuitem action='rexx' label='External Rexx script'/> | ||
38 | + </menu> | ||
39 | + </menubar> | ||
40 | +</ui> | ||
41 | + |