Commit a69872eaaa3ad0759d0e5648abb215daa04086f4
1 parent
137bb9df
Exists in
master
and in
5 other branches
Reimplementando plugin java
Showing
4 changed files
with
102 additions
and
119 deletions
Show diff stats
src/java/main.cc
@@ -34,11 +34,6 @@ | @@ -34,11 +34,6 @@ | ||
34 | 34 | ||
35 | namespace PW3270_NAMESPACE { | 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 | jfieldID java::getHandleField(JNIEnv *env, jobject obj) { | 37 | jfieldID java::getHandleField(JNIEnv *env, jobject obj) { |
43 | jclass c = env->GetObjectClass(obj); | 38 | jclass c = env->GetObjectClass(obj); |
44 | // J is the type signature for long: | 39 | // J is the type signature for long: |
src/java/plugin.cc
@@ -325,12 +325,76 @@ | @@ -325,12 +325,76 @@ | ||
325 | 325 | ||
326 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 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 | extern "C" { | 358 | extern "C" { |
329 | 359 | ||
330 | - PW3270_NAMESPACE::session * factory(const char *name) { | 360 | + static PW3270_NAMESPACE::session * factory(const char *name) { |
331 | debug("---> %s",__FUNCTION__); | 361 | debug("---> %s",__FUNCTION__); |
332 | return new plugin(lib3270_get_default_session_handle()); | 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,8 +52,6 @@ | ||
52 | extern JavaVM * jvm; | 52 | extern JavaVM * jvm; |
53 | extern JNIEnv * env; | 53 | extern JNIEnv * env; |
54 | 54 | ||
55 | - void set_factory(PW3270_NAMESPACE::session * (*factory)(const char *name)); | ||
56 | - | ||
57 | PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj); | 55 | PW3270_NAMESPACE::session * getHandle(JNIEnv *env, jobject obj); |
58 | jfieldID getHandleField(JNIEnv *env, jobject obj); | 56 | jfieldID getHandleField(JNIEnv *env, jobject obj); |
59 | 57 | ||
@@ -75,12 +73,6 @@ | @@ -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,16 +58,6 @@ | ||
58 | #include <pw3270/class.h> | 58 | #include <pw3270/class.h> |
59 | #include <pw3270/trace.h> | 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 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 61 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
72 | 62 | ||
73 | using namespace PW3270_NAMESPACE::java; | 63 | using namespace PW3270_NAMESPACE::java; |
@@ -112,118 +102,60 @@ extern "C" { | @@ -112,118 +102,60 @@ extern "C" { | ||
112 | return 0; | 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 | if(filename) | 111 | if(filename) |
188 | { | 112 | { |
113 | + // Has filename, call it directly | ||
189 | call(widget,filename); | 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 | namespace PW3270_NAMESPACE { | 154 | namespace PW3270_NAMESPACE { |
199 | 155 | ||
200 | JavaVM * java::jvm = NULL; | 156 | JavaVM * java::jvm = NULL; |
201 | JNIEnv * java::env = NULL; | 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 | void java::failed(GtkWidget *widget, const char *msg, const char *format, ...) { | 159 | void java::failed(GtkWidget *widget, const char *msg, const char *format, ...) { |
228 | 160 | ||
229 | GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)), | 161 | GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)), |