Commit 5abb8018c3c526ea3b646308213b98c1ebec5868

Authored by perry.werneck@gmail.com
1 parent bf50c2f2

Corrigindo problemas na implementação de "actions" em plugins

pw3270.cbp
... ... @@ -432,6 +432,7 @@
432 432 <Unit filename="ui/10functions.xml" />
433 433 <Unit filename="ui/10keypad.xml" />
434 434 <Unit filename="ui/99debug.xml" />
  435 + <Unit filename="ui/rexx.xml" />
435 436 <Unit filename="updateChangeLog.sh" />
436 437 <Extensions>
437 438 <code_completion />
... ...
src/include/pw3270/plugin.h
... ... @@ -40,15 +40,19 @@
40 40 extern "C" {
41 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 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 56 LIB3270_EXPORT int pw3270_setup_plugin_action(GtkAction *action, GtkWidget *widget, const gchar *name);
53 57  
54 58 #ifdef __cplusplus
... ...
src/plugins/dbus3270/main.c
... ... @@ -51,7 +51,7 @@
51 51  
52 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 57 GError * error = NULL;
... ... @@ -143,7 +143,7 @@
143 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 148 if(service_name)
149 149 {
... ...
src/plugins/rx3270/pluginmain.cc
... ... @@ -30,6 +30,7 @@
30 30 #include "rx3270.h"
31 31 #include <string.h>
32 32 #include <pw3270/plugin.h>
  33 + #include <pw3270/v3270.h>
33 34 #include <lib3270/actions.h>
34 35 #include <lib3270/log.h>
35 36  
... ... @@ -198,3 +199,16 @@
198 199 {
199 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 414 gtk_settings_set_string_property(settings,"gtk-menu-bar-accel","Menu","");
415 415 }
416 416  
  417 + pw3270_init_plugins();
417 418 toplevel = pw3270_new(host,systype,syscolors);
418 419 pw3270_set_session_name(toplevel,session_name);
419 420  
... ... @@ -441,7 +442,6 @@ int main(int argc, char *argv[])
441 442 }
442 443  
443 444  
444   -
445 445 toplevel_setup(GTK_WINDOW(toplevel));
446 446  
447 447 if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN))
... ... @@ -449,7 +449,7 @@ int main(int argc, char *argv[])
449 449 else
450 450 pw3270_restore_window(toplevel,"toplevel");
451 451  
452   - pw3270_init_plugins(toplevel);
  452 + pw3270_start_plugins(toplevel);
453 453 gtk_window_present(GTK_WINDOW(toplevel));
454 454  
455 455 #ifdef HAVE_GTKMAC
... ... @@ -458,7 +458,8 @@ int main(int argc, char *argv[])
458 458  
459 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 39  
40 40 /*--[ Implement ]------------------------------------------------------------------------------------*/
41 41  
42   - static void load(const gchar *path, GtkWidget *widget)
  42 + static void load(const gchar *path)
43 43 {
44 44 GDir * dir;
45 45 const gchar * name;
... ... @@ -85,11 +85,11 @@
85 85 }
86 86 else
87 87 {
88   - int (*init)(GtkWidget *);
  88 + int (*init)();
89 89  
90 90 if(g_module_symbol(handle, "pw3270_plugin_init", (gpointer) &init))
91 91 {
92   - if(init(widget))
  92 + if(init())
93 93 {
94 94 // Plugin init fails
95 95 g_module_close(handle);
... ... @@ -104,7 +104,6 @@
104 104 else
105 105 {
106 106 // No plugin init warn and save it anyway
107   - g_warning("No pw3270_plugin_init() method in %s",filename);
108 107 lst = g_list_append(lst,handle);
109 108 }
110 109 }
... ... @@ -121,7 +120,7 @@
121 120  
122 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 124 GList *l = g_list_first(lst);
126 125 int f;
127 126  
... ... @@ -131,22 +130,15 @@
131 130  
132 131 for(f=0;f<nPlugin && l;f++)
133 132 {
134   - void (*start)(GtkWidget *);
135   -
136 133 hPlugin[f] = (GModule *) l->data;
137   -
138 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 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 143 #if defined( DEBUG )
152 144  
... ... @@ -165,12 +157,12 @@
165 157 if(!g_file_test(path,G_FILE_TEST_IS_DIR))
166 158 {
167 159 g_free(path);
168   - path = pw3270_build_filename(widget,"plugins",NULL);
  160 + path = pw3270_build_filename(NULL,"plugins",NULL);
169 161 trace("%s using [%s]",__FUNCTION__,path);
170 162 }
171 163 }
172 164  
173   - load(path,widget);
  165 + load(path);
174 166  
175 167 g_free(path);
176 168 g_free(dir);
... ... @@ -203,29 +195,48 @@
203 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 216 for(f=0;f<nPlugin;f++)
216 217 {
217   - void (*stop)(GtkWidget *);
  218 + int (*stop)(GtkWidget *);
218 219  
219 220 if(g_module_symbol(hPlugin[f], "pw3270_plugin_stop", (gpointer) &stop))
220 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 234 for(f=0;f<nPlugin;f++)
224 235 {
225   - void (*deinit)(GtkWidget *);
  236 + void (*deinit)(void);
226 237  
227 238 if(g_module_symbol(hPlugin[f], "pw3270_plugin_deinit", (gpointer) &deinit))
228   - deinit(widget);
  239 + deinit();
229 240  
230 241 g_module_close(hPlugin[f]);
231 242 }
... ... @@ -240,17 +251,21 @@
240 251 int f;
241 252 gchar * fname;
242 253  
  254 + trace("%s hPlugin=%p",__FUNCTION__,hPlugin);
243 255 if(!hPlugin)
244 256 return ENOENT;
245 257  
246 258 // Search for plugin setup calls
247 259 fname = g_strdup_printf("pw3270_setup_action_%s",name);
  260 + trace("Searching for \"%s\"",fname);
  261 +
248 262 for(f=0;f<nPlugin;f++)
249 263 {
250 264 int (*setup)(GtkAction *action, GtkWidget *widget);
251 265  
252 266 if(g_module_symbol(hPlugin[f], fname, (gpointer) &setup))
253 267 {
  268 + trace("%s=%p",fname,setup);
254 269 g_free(fname);
255 270 return setup(action,widget);
256 271 }
... ... @@ -259,12 +274,15 @@
259 274  
260 275 // Search for activation callbacks
261 276 fname = g_strdup_printf("pw3270_action_%s_activated",name);
  277 + trace("Searching for \"%s\"",fname);
  278 +
262 279 for(f=0;f<nPlugin;f++)
263 280 {
264 281 void (*call)(GtkAction *action, GtkWidget *widget);
265 282  
266 283 if(g_module_symbol(hPlugin[f], fname, (gpointer) &call))
267 284 {
  285 + trace("%s=%p",fname,call);
268 286 g_signal_connect(action,"activate",G_CALLBACK(call),widget);
269 287 g_free(fname);
270 288 return 0;
... ...
ui/rexx.xml 0 → 100644
... ... @@ -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 +
... ...