Commit a69872eaaa3ad0759d0e5648abb215daa04086f4

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

Reimplementando plugin java

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 &quot;C&quot; { @@ -112,118 +102,60 @@ extern &quot;C&quot; {
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)),