Commit a69872eaaa3ad0759d0e5648abb215daa04086f4

Authored by perry.werneck@gmail.com
1 parent 137bb9df

Reimplementando plugin java

src/java/main.cc
... ... @@ -34,11 +34,6 @@
34 34  
35 35 namespace PW3270_NAMESPACE {
36 36  
37   - void java::set_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)) {
38   - trace("%s(%p)",__FUNCTION__,factory);
39   - session::set_plugin(factory);
40   - }
41   -
42 37 jfieldID java::getHandleField(JNIEnv *env, jobject obj) {
43 38 jclass c = env->GetObjectClass(obj);
44 39 // J is the type signature for long:
... ...
src/java/plugin.cc
... ... @@ -325,12 +325,76 @@
325 325  
326 326 /*---[ Implement ]----------------------------------------------------------------------------------*/
327 327  
  328 +namespace PW3270_NAMESPACE {
  329 +
  330 + void java::lock() {
  331 +#if GTK_CHECK_VERSION(2,32,0)
  332 + g_mutex_lock(&mutex);
  333 +#else
  334 + g_static_mutex_lock(&mutex);
  335 +#endif // GTK_CHECK_VERSION
  336 + }
  337 +
  338 + void java::unlock() {
  339 +#if GTK_CHECK_VERSION(2,32,0)
  340 + g_mutex_unlock(&mutex);
  341 +#else
  342 + g_static_mutex_unlock(&mutex);
  343 +#endif // GTK_CHECK_VERSION
  344 + }
  345 +
  346 + bool java::trylock() {
  347 +#if GTK_CHECK_VERSION(2,32,0)
  348 + return g_mutex_trylock(&mutex);
  349 +#else
  350 + return g_static_mutex_trylock(&mutex);
  351 +#endif // GTK_CHECK_VERSION
  352 + }
  353 +
  354 +}
  355 +
  356 +using namespace PW3270_NAMESPACE;
  357 +
328 358 extern "C" {
329 359  
330   - PW3270_NAMESPACE::session * factory(const char *name) {
  360 + static PW3270_NAMESPACE::session * factory(const char *name) {
331 361 debug("---> %s",__FUNCTION__);
332 362 return new plugin(lib3270_get_default_session_handle());
333 363 }
334 364  
  365 + LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window) {
  366 +
  367 + trace("JAVA: %s",__FUNCTION__);
  368 +
  369 + #if GTK_CHECK_VERSION(2,32,0)
  370 + g_mutex_init(&mutex);
  371 + #endif // GTK_CHECK_VERSION
  372 +
  373 + session::set_plugin(factory);
  374 +
  375 + return 0;
  376 + }
  377 +
  378 + LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window) {
  379 +
  380 + java::lock();
  381 +
  382 + if(java::jvm) {
  383 + java::jvm->DestroyJavaVM();
  384 + java::jvm = NULL;
  385 + }
  386 +
  387 + java::unlock();
  388 +
  389 + #if GTK_CHECK_VERSION(2,32,0)
  390 + g_mutex_clear(&mutex);
  391 + #endif // GTK_CHECK_VERSION
  392 +
  393 + trace("JAVA: %s",__FUNCTION__);
  394 +
  395 + return 0;
  396 + }
  397 +
  398 +
335 399 }
336 400  
... ...
src/java/private.h
... ... @@ -52,8 +52,6 @@
52 52 extern JavaVM * jvm;
53 53 extern JNIEnv * env;
54 54  
55   - void set_factory(PW3270_NAMESPACE::session * (*factory)(const char *name));
56   -
57 55 PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj);
58 56 jfieldID getHandleField(JNIEnv *env, jobject obj);
59 57  
... ... @@ -75,12 +73,6 @@
75 73  
76 74 }
77 75  
78   - extern "C" {
79   -
80   - LIB3270_EXPORT void set_java_session_factory(PW3270_NAMESPACE::session * (*factory)(const char *name));
81   - extern PW3270_NAMESPACE::session * factory(const char *name);
82   -
83   - }
84 76  
85 77  
86 78  
... ...
src/java/startstop.cc
... ... @@ -58,16 +58,6 @@
58 58 #include <pw3270/class.h>
59 59 #include <pw3270/trace.h>
60 60  
61   -/*--[ Globals ]--------------------------------------------------------------------------------------*/
62   -
63   -#if GTK_CHECK_VERSION(2,32,0)
64   - static GMutex mutex;
65   -
66   -#else
67   - static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
68   -
69   -#endif // GTK_CHECK_VERSION
70   -
71 61 /*---[ Implement ]----------------------------------------------------------------------------------*/
72 62  
73 63 using namespace PW3270_NAMESPACE::java;
... ... @@ -112,118 +102,60 @@ extern &quot;C&quot; {
112 102 return 0;
113 103 }
114 104  
115   - }
116   -
117   - LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window)
118   - {
119   - trace("JAVA: %s",__FUNCTION__);
120   -#if GTK_CHECK_VERSION(2,32,0)
121   - g_mutex_init(&mutex);
122   -#endif // GTK_CHECK_VERSION
123   -
124   - set_factory(factory);
125   -
126   - return 0;
127   - }
128   -
129   - LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window)
130   - {
131   - lock();
  105 + LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget) {
132 106  
133   - if(jvm) {
134   - jvm->DestroyJavaVM();
135   - jvm = NULL;
136   - }
  107 + gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");
137 108  
138   - unlock();
139   -
140   -#if GTK_CHECK_VERSION(2,32,0)
141   - g_mutex_clear(&mutex);
142   -#endif // GTK_CHECK_VERSION
143   - trace("JAVA: %s",__FUNCTION__);
144   -
145   -
146   -
147   - return 0;
148   - }
149   -
150   - LIB3270_EXPORT void pw3270_action_java_activated(GtkAction *action, GtkWidget *widget)
151   - {
152   - gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");
153   -
154   - lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);
155   -
156   - if(filename)
157   - {
158   - // Has filename, call it directly
159   - call(widget,filename);
160   - }
161   - else
162   - {
163   - // No filename, ask user
164   - static const struct _list
165   - {
166   - const gchar *name;
167   - const gchar *pattern;
168   - } list[] =
169   - {
170   - { N_( "Java class file" ), "*.class" }
171   - };
172   -
173   - GtkFileFilter * filter[G_N_ELEMENTS(list)+1];
174   - unsigned int f;
175   -
176   - memset(filter,0,sizeof(filter));
177   -
178   - for(f=0;f<G_N_ELEMENTS(list);f++)
179   - {
180   - filter[f] = gtk_file_filter_new();
181   - gtk_file_filter_set_name(filter[f],gettext(list[f].name));
182   - gtk_file_filter_add_pattern(filter[f],list[f].pattern);
183   - }
184   -
185   - filename = pw3270_get_filename(widget,"java","script",filter,_( "Select script to run" ));
  109 + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);
186 110  
187 111 if(filename)
188 112 {
  113 + // Has filename, call it directly
189 114 call(widget,filename);
190   - g_free(filename);
191 115 }
  116 + else
  117 + {
  118 + // No filename, ask user
  119 + static const struct _list
  120 + {
  121 + const gchar *name;
  122 + const gchar *pattern;
  123 + } list[] =
  124 + {
  125 + { N_( "Java class file" ), "*.class" }
  126 + };
  127 +
  128 + GtkFileFilter * filter[G_N_ELEMENTS(list)+1];
  129 + unsigned int f;
  130 +
  131 + memset(filter,0,sizeof(filter));
  132 +
  133 + for(f=0;f<G_N_ELEMENTS(list);f++)
  134 + {
  135 + filter[f] = gtk_file_filter_new();
  136 + gtk_file_filter_set_name(filter[f],gettext(list[f].name));
  137 + gtk_file_filter_add_pattern(filter[f],list[f].pattern);
  138 + }
  139 +
  140 + filename = pw3270_get_filename(widget,"java","script",filter,_( "Select script to run" ));
  141 +
  142 + if(filename)
  143 + {
  144 + call(widget,filename);
  145 + g_free(filename);
  146 + }
192 147  
  148 + }
193 149  
194 150 }
195   -
196 151 }
197 152  
  153 +
198 154 namespace PW3270_NAMESPACE {
199 155  
200 156 JavaVM * java::jvm = NULL;
201 157 JNIEnv * java::env = NULL;
202 158  
203   - void java::lock() {
204   -#if GTK_CHECK_VERSION(2,32,0)
205   - g_mutex_lock(&mutex);
206   -#else
207   - g_static_mutex_lock(&mutex);
208   -#endif // GTK_CHECK_VERSION
209   - }
210   -
211   - void java::unlock() {
212   -#if GTK_CHECK_VERSION(2,32,0)
213   - g_mutex_unlock(&mutex);
214   -#else
215   - g_static_mutex_unlock(&mutex);
216   -#endif // GTK_CHECK_VERSION
217   - }
218   -
219   - bool java::trylock() {
220   -#if GTK_CHECK_VERSION(2,32,0)
221   - return g_mutex_trylock(&mutex);
222   -#else
223   - return g_static_mutex_trylock(&mutex);
224   -#endif // GTK_CHECK_VERSION
225   - }
226   -
227 159 void java::failed(GtkWidget *widget, const char *msg, const char *format, ...) {
228 160  
229 161 GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
... ...