Commit 5abb8018c3c526ea3b646308213b98c1ebec5868

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

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

@@ -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;
ui/rexx.xml 0 → 100644
@@ -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 +