Commit b573200e8dba4633ed63030b9f9f2461e73b4740

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

Corrigindo fontes editados em windows e desenho do spinner da OIA

@@ -5,7 +5,7 @@ msgid "" @@ -5,7 +5,7 @@ msgid ""
5 msgstr "" 5 msgstr ""
6 "Project-Id-Version: pw3270 5.0\n" 6 "Project-Id-Version: pw3270 5.0\n"
7 "Report-Msgid-Bugs-To: \n" 7 "Report-Msgid-Bugs-To: \n"
8 -"POT-Creation-Date: 2013-06-12 09:54-0300\n" 8 +"POT-Creation-Date: 2013-06-17 11:06-0300\n"
9 "PO-Revision-Date: 2013-05-08 14:30-0300\n" 9 "PO-Revision-Date: 2013-05-08 14:30-0300\n"
10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 "Language-Team: Português <>\n" 11 "Language-Team: Português <>\n"
@@ -96,7 +96,7 @@ msgstr &quot;- Emulador 3270 para GTK&quot; @@ -96,7 +96,7 @@ msgstr &quot;- Emulador 3270 para GTK&quot;
96 msgid "16 colors" 96 msgid "16 colors"
97 msgstr "16 cores" 97 msgstr "16 cores"
98 98
99 -#: screen.c:691 screen.c:721 screen.c:735 screen.c:854 99 +#: screen.c:691 screen.c:721 screen.c:735 screen.c:860
100 msgid "3270 Error" 100 msgid "3270 Error"
101 msgstr "Erro 3270" 101 msgstr "Erro 3270"
102 102
@@ -632,7 +632,7 @@ msgstr &quot;Apagar até o final do campo&quot; @@ -632,7 +632,7 @@ msgstr &quot;Apagar até o final do campo&quot;
632 msgid "Erase to end of line" 632 msgid "Erase to end of line"
633 msgstr "Apagar até o final da linha" 633 msgstr "Apagar até o final da linha"
634 634
635 -#: print.c:238 v3270/widget.c:215 util.c:1009 635 +#: print.c:238 v3270/widget.c:215 util.c:1018
636 msgid "Error" 636 msgid "Error"
637 msgstr "Erro" 637 msgstr "Erro"
638 638
@@ -2070,7 +2070,7 @@ msgstr &quot;Alvo inesperado \&quot;%s\&quot;&quot; @@ -2070,7 +2070,7 @@ msgstr &quot;Alvo inesperado \&quot;%s\&quot;&quot;
2070 msgid "Unexpected type %d in typeahead queue" 2070 msgid "Unexpected type %d in typeahead queue"
2071 msgstr "Tipo inesperado %d na fila de teclado" 2071 msgstr "Tipo inesperado %d na fila de teclado"
2072 2072
2073 -#: ctlr.c:583 2073 +#: ctlr.c:588
2074 #, c-format 2074 #, c-format
2075 msgid "Unknown 3270 Data Stream command: 0x%X" 2075 msgid "Unknown 3270 Data Stream command: 0x%X"
2076 msgstr "Unknown 3270 Data Stream command: 0x%X" 2076 msgstr "Unknown 3270 Data Stream command: 0x%X"
src/plugins/rx3270/pluginmain.cc
@@ -48,6 +48,14 @@ @@ -48,6 +48,14 @@
48 #include <lib3270/actions.h> 48 #include <lib3270/actions.h>
49 #include <lib3270/log.h> 49 #include <lib3270/log.h>
50 50
  51 +/*--[ Globals ]--------------------------------------------------------------------------------------*/
  52 +
  53 +#if GTK_CHECK_VERSION(2,32,0)
  54 + static GMutex mutex;
  55 +#else
  56 + static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
  57 +#endif // GTK_CHECK_VERSION
  58 +
51 /*--[ Rexx application data block ]--------------------------------------------------------------------------*/ 59 /*--[ Rexx application data block ]--------------------------------------------------------------------------*/
52 60
53 struct rexx_application_data 61 struct rexx_application_data
@@ -58,6 +66,223 @@ @@ -58,6 +66,223 @@
58 }; 66 };
59 67
60 68
  69 +/*--[ Running rexx scripts ]---------------------------------------------------------------------------------*/
  70 +
  71 + static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock)
  72 + {
  73 + trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction);
  74 +
  75 + if(subfunction == RXSIOSAY)
  76 + {
  77 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(((struct rexx_application_data * )context->GetApplicationData())->widget)),
  78 + GTK_DIALOG_DESTROY_WITH_PARENT,
  79 + GTK_MESSAGE_INFO,
  80 + GTK_BUTTONS_OK_CANCEL,
  81 + "%s", (((RXSIOSAY_PARM *) parmBlock)->rxsio_string).strptr );
  82 +
  83 + gtk_window_set_title(GTK_WINDOW(dialog), _( "Script message" ) );
  84 +
  85 + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
  86 + context->RaiseException0(Rexx_Error_Program_interrupted);
  87 +
  88 + gtk_widget_destroy(dialog);
  89 +
  90 + return RXEXIT_HANDLED;
  91 + }
  92 +
  93 + return RXEXIT_NOT_HANDLED;
  94 + }
  95 +
  96 + static void call_rexx_script(GtkAction *action, GtkWidget *widget, const gchar *filename)
  97 + {
  98 + const gchar * args = (const gchar *) g_object_get_data(G_OBJECT(action),"args");
  99 +
  100 + struct rexx_application_data appdata = { action, widget, filename };
  101 +
  102 + RexxInstance * instance;
  103 + RexxThreadContext * threadContext;
  104 + RexxOption options[25];
  105 + RexxContextExit exits[2];
  106 +
  107 + memset(options,0,sizeof(options));
  108 + memset(exits,0,sizeof(exits));
  109 +
  110 + exits[0].sysexit_code = RXSIO;
  111 + exits[0].handler = Rexx_IO_exit;
  112 +
  113 + options[0].optionName = DIRECT_EXITS;
  114 + options[0].option = (void *) exits;
  115 +
  116 + options[1].optionName = APPLICATION_DATA;
  117 + options[1].option = (void *) &appdata;
  118 +
  119 + if(!RexxCreateInterpreter(&instance, &threadContext, options))
  120 + {
  121 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  122 + GTK_DIALOG_DESTROY_WITH_PARENT,
  123 + GTK_MESSAGE_ERROR,
  124 + GTK_BUTTONS_CANCEL,
  125 + _( "Can't start %s script" ), "rexx" );
  126 +
  127 + gtk_window_set_title(GTK_WINDOW(dialog),_( "Rexx error" ));
  128 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "Can't create %s interpreter instance" ), "rexx");
  129 +
  130 + gtk_dialog_run(GTK_DIALOG (dialog));
  131 + gtk_widget_destroy(dialog);
  132 + }
  133 + else
  134 + {
  135 + RexxArrayObject rxArgs;
  136 +
  137 + trace("%s start",__FUNCTION__);
  138 +
  139 + if(args)
  140 + {
  141 + gchar **arg = g_strsplit(args,",",-1);
  142 + size_t sz = g_strv_length(arg);
  143 +
  144 + rxArgs = threadContext->NewArray(sz);
  145 + for(unsigned int i = 0; i<sz; i++)
  146 + threadContext->ArrayPut(rxArgs, threadContext->String(arg[i]), i + 1);
  147 +
  148 + g_strfreev(arg);
  149 + }
  150 + else
  151 + {
  152 + rxArgs = threadContext->NewArray(1);
  153 + threadContext->ArrayPut(rxArgs, threadContext->String(""),1);
  154 + }
  155 +
  156 + v3270_set_script(widget,'R',TRUE);
  157 + RexxObjectPtr result = threadContext->CallProgram(filename, rxArgs);
  158 + v3270_set_script(widget,'R',FALSE);
  159 +
  160 + if (threadContext->CheckCondition())
  161 + {
  162 + RexxCondition condition;
  163 +
  164 + // retrieve the error information and get it into a decoded form
  165 + RexxDirectoryObject cond = threadContext->GetConditionInfo();
  166 + threadContext->DecodeConditionInfo(cond, &condition);
  167 + // display the errors
  168 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  169 + GTK_DIALOG_DESTROY_WITH_PARENT,
  170 + GTK_MESSAGE_ERROR,
  171 + GTK_BUTTONS_CANCEL,
  172 + _( "%s script failed" ), "Rexx" );
  173 +
  174 + gtk_window_set_title(GTK_WINDOW(dialog),_( "Rexx error" ));
  175 +
  176 + gtk_message_dialog_format_secondary_text(
  177 + GTK_MESSAGE_DIALOG(dialog),
  178 + _( "%s error %d: %s\n%s" ),
  179 + "Rexx",
  180 + (int) condition.code,
  181 + threadContext->CString(condition.errortext),
  182 + threadContext->CString(condition.message)
  183 +
  184 + );
  185 +
  186 + gtk_dialog_run(GTK_DIALOG (dialog));
  187 + gtk_widget_destroy(dialog);
  188 +
  189 + }
  190 + else if (result != NULLOBJECT)
  191 + {
  192 + CSTRING resultString = threadContext->CString(result);
  193 + lib3270_write_log(NULL,"REXX","%s exits with rc=%s",filename,resultString);
  194 + }
  195 +
  196 + instance->Terminate();
  197 +
  198 + trace("%s ends",__FUNCTION__);
  199 + }
  200 +
  201 + }
  202 +
  203 +
  204 +extern "C"
  205 +{
  206 + LIB3270_EXPORT void pw3270_action_rexx_activated(GtkAction *action, GtkWidget *widget)
  207 + {
  208 + gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");
  209 +
  210 + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);
  211 +
  212 +#if GTK_CHECK_VERSION(2,32,0)
  213 + if(!g_mutex_trylock(&mutex))
  214 +#else
  215 + if(!g_static_mutex_trylock(&mutex))
  216 +#endif // GTK_CHECK_VERSION
  217 + {
  218 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  219 + GTK_DIALOG_DESTROY_WITH_PARENT,
  220 + GTK_MESSAGE_ERROR,
  221 + GTK_BUTTONS_CANCEL,
  222 + "%s", _( "Can't start script" ));
  223 +
  224 + gtk_window_set_title(GTK_WINDOW(dialog),_( "System busy" ));
  225 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",_( "Please, try again in a few moments" ));
  226 +
  227 + gtk_dialog_run(GTK_DIALOG (dialog));
  228 + gtk_widget_destroy(dialog);
  229 + return;
  230 + }
  231 +
  232 + gtk_action_set_sensitive(action,FALSE);
  233 +
  234 + if(filename)
  235 + {
  236 + // Has filename, call it directly
  237 + call_rexx_script(action,widget,filename);
  238 + }
  239 + else
  240 + {
  241 + // No filename, ask user
  242 + static const struct _list
  243 + {
  244 + const gchar *name;
  245 + const gchar *pattern;
  246 + } list[] =
  247 + {
  248 + { N_( "Rexx script file" ), "*.rex" },
  249 + { N_( "Rexx class file" ), "*.cls" }
  250 + };
  251 +
  252 + GtkFileFilter * filter[G_N_ELEMENTS(list)+1];
  253 + unsigned int f;
  254 +
  255 + memset(filter,0,sizeof(filter));
  256 +
  257 + for(f=0;f<G_N_ELEMENTS(list);f++)
  258 + {
  259 + filter[f] = gtk_file_filter_new();
  260 + gtk_file_filter_set_name(filter[f],gettext(list[f].name));
  261 + gtk_file_filter_add_pattern(filter[f],list[f].pattern);
  262 + }
  263 +
  264 + filename = pw3270_get_filename(widget,"rexx","script",filter,_( "Select script to run" ));
  265 +
  266 + if(filename)
  267 + {
  268 + call_rexx_script(action,widget,filename);
  269 + g_free(filename);
  270 + }
  271 +
  272 +
  273 + }
  274 +
  275 + gtk_action_set_sensitive(action,TRUE);
  276 +#if GTK_CHECK_VERSION(2,32,0)
  277 + g_mutex_unlock(&mutex);
  278 +#else
  279 + g_static_mutex_unlock(&mutex);
  280 +#endif // GTK_CHECK_VERSION
  281 +
  282 + }
  283 +
  284 +}
  285 +
61 /*--[ Plugin session object ]--------------------------------------------------------------------------------*/ 286 /*--[ Plugin session object ]--------------------------------------------------------------------------------*/
62 287
63 class plugin : public rx3270 288 class plugin : public rx3270
@@ -116,11 +341,6 @@ @@ -116,11 +341,6 @@
116 341
117 }; 342 };
118 343
119 -/*--[ Globals ]--------------------------------------------------------------------------------------*/  
120 -  
121 -#if GTK_CHECK_VERSION(2,32,0)  
122 - static GMutex mutex; #else static GStaticMutex mutex = G_STATIC_MUTEX_INIT; #endif // GTK_CHECK_VERSION  
123 -  
124 /*--[ Implement ]------------------------------------------------------------------------------------*/ 344 /*--[ Implement ]------------------------------------------------------------------------------------*/
125 345
126 static rx3270 * factory(const char *name) 346 static rx3270 * factory(const char *name)
@@ -132,7 +352,8 @@ @@ -132,7 +352,8 @@
132 { 352 {
133 trace("%s",__FUNCTION__); 353 trace("%s",__FUNCTION__);
134 #if GTK_CHECK_VERSION(2,32,0) 354 #if GTK_CHECK_VERSION(2,32,0)
135 - g_mutex_init(&mutex); #endif // GTK_CHECK_VERSION 355 + g_mutex_init(&mutex);
  356 +#endif // GTK_CHECK_VERSION
136 rx3270::set_plugin(factory); 357 rx3270::set_plugin(factory);
137 return 0; 358 return 0;
138 } 359 }
@@ -140,7 +361,8 @@ @@ -140,7 +361,8 @@
140 LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window) 361 LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window)
141 { 362 {
142 #if GTK_CHECK_VERSION(2,32,0) 363 #if GTK_CHECK_VERSION(2,32,0)
143 - g_mutex_clear(&mutex); #endif // GTK_CHECK_VERSION 364 + g_mutex_clear(&mutex);
  365 +#endif // GTK_CHECK_VERSION
144 trace("%s",__FUNCTION__); 366 trace("%s",__FUNCTION__);
145 return 0; 367 return 0;
146 } 368 }
@@ -324,212 +546,3 @@ int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *mess @@ -324,212 +546,3 @@ int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *mess
324 return 0; 546 return 0;
325 } 547 }
326 548
327 - static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock)  
328 - {  
329 - trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction);  
330 -  
331 - if(subfunction == RXSIOSAY)  
332 - {  
333 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(((struct rexx_application_data * )context->GetApplicationData())->widget)),  
334 - GTK_DIALOG_DESTROY_WITH_PARENT,  
335 - GTK_MESSAGE_INFO,  
336 - GTK_BUTTONS_OK_CANCEL,  
337 - "%s", (((RXSIOSAY_PARM *) parmBlock)->rxsio_string).strptr );  
338 -  
339 - gtk_window_set_title(GTK_WINDOW(dialog), _( "Script message" ) );  
340 -  
341 - if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)  
342 - context->RaiseException0(Rexx_Error_Program_interrupted);  
343 -  
344 - gtk_widget_destroy(dialog);  
345 -  
346 - return RXEXIT_HANDLED;  
347 - }  
348 -  
349 - return RXEXIT_NOT_HANDLED;  
350 - }  
351 -  
352 - static void call_rexx_script(GtkAction *action, GtkWidget *widget, const gchar *filename)  
353 - {  
354 - const gchar * args = (const gchar *) g_object_get_data(G_OBJECT(action),"args");  
355 -  
356 - struct rexx_application_data appdata = { action, widget, filename };  
357 -  
358 - RexxInstance * instance;  
359 - RexxThreadContext * threadContext;  
360 - RexxOption options[25];  
361 - RexxContextExit exits[2];  
362 -  
363 - memset(options,0,sizeof(options));  
364 - memset(exits,0,sizeof(exits));  
365 -  
366 - exits[0].sysexit_code = RXSIO;  
367 - exits[0].handler = Rexx_IO_exit;  
368 -  
369 - options[0].optionName = DIRECT_EXITS;  
370 - options[0].option = (void *) exits;  
371 -  
372 - options[1].optionName = APPLICATION_DATA;  
373 - options[1].option = (void *) &appdata;  
374 -  
375 - if(!RexxCreateInterpreter(&instance, &threadContext, options))  
376 - {  
377 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
378 - GTK_DIALOG_DESTROY_WITH_PARENT,  
379 - GTK_MESSAGE_ERROR,  
380 - GTK_BUTTONS_CANCEL,  
381 - _( "Can't start %s script" ), "rexx" );  
382 -  
383 - gtk_window_set_title(GTK_WINDOW(dialog),_( "Rexx error" ));  
384 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),_( "Can't create %s interpreter instance" ), "rexx");  
385 -  
386 - gtk_dialog_run(GTK_DIALOG (dialog));  
387 - gtk_widget_destroy(dialog);  
388 - }  
389 - else  
390 - {  
391 - RexxArrayObject rxArgs;  
392 -  
393 - trace("%s start",__FUNCTION__);  
394 -  
395 - if(args)  
396 - {  
397 - gchar **arg = g_strsplit(args,",",-1);  
398 - size_t sz = g_strv_length(arg);  
399 -  
400 - rxArgs = threadContext->NewArray(sz);  
401 - for(unsigned int i = 0; i<sz; i++)  
402 - threadContext->ArrayPut(rxArgs, threadContext->String(arg[i]), i + 1);  
403 -  
404 - g_strfreev(arg);  
405 - }  
406 - else  
407 - {  
408 - rxArgs = threadContext->NewArray(1);  
409 - threadContext->ArrayPut(rxArgs, threadContext->String(""),1);  
410 - }  
411 -  
412 - v3270_set_script(widget,'R',TRUE);  
413 - RexxObjectPtr result = threadContext->CallProgram(filename, rxArgs);  
414 - v3270_set_script(widget,'R',FALSE);  
415 -  
416 - if (threadContext->CheckCondition())  
417 - {  
418 - RexxCondition condition;  
419 -  
420 - // retrieve the error information and get it into a decoded form  
421 - RexxDirectoryObject cond = threadContext->GetConditionInfo();  
422 - threadContext->DecodeConditionInfo(cond, &condition);  
423 - // display the errors  
424 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
425 - GTK_DIALOG_DESTROY_WITH_PARENT,  
426 - GTK_MESSAGE_ERROR,  
427 - GTK_BUTTONS_CANCEL,  
428 - _( "%s script failed" ), "Rexx" );  
429 -  
430 - gtk_window_set_title(GTK_WINDOW(dialog),_( "Rexx error" ));  
431 -  
432 - gtk_message_dialog_format_secondary_text(  
433 - GTK_MESSAGE_DIALOG(dialog),  
434 - _( "%s error %d: %s\n%s" ),  
435 - "Rexx",  
436 - (int) condition.code,  
437 - threadContext->CString(condition.errortext),  
438 - threadContext->CString(condition.message)  
439 -  
440 - );  
441 -  
442 - gtk_dialog_run(GTK_DIALOG (dialog));  
443 - gtk_widget_destroy(dialog);  
444 -  
445 - }  
446 - else if (result != NULLOBJECT)  
447 - {  
448 - CSTRING resultString = threadContext->CString(result);  
449 - lib3270_write_log(NULL,"REXX","%s exits with rc=%s",filename,resultString);  
450 - }  
451 -  
452 - instance->Terminate();  
453 -  
454 - trace("%s ends",__FUNCTION__);  
455 - }  
456 -  
457 - }  
458 -  
459 -  
460 -extern "C"  
461 -{  
462 - LIB3270_EXPORT void pw3270_action_rexx_activated(GtkAction *action, GtkWidget *widget)  
463 - {  
464 - gchar *filename = (gchar *) g_object_get_data(G_OBJECT(action),"src");  
465 -  
466 - lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p",gtk_action_get_name(action),widget);  
467 -  
468 -#if GTK_CHECK_VERSION(2,32,0)  
469 - if(!g_mutex_trylock(&mutex)) #else if(!g_static_mutex_trylock(&mutex)) #endif // GTK_CHECK_VERSION  
470 - {  
471 - GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
472 - GTK_DIALOG_DESTROY_WITH_PARENT,  
473 - GTK_MESSAGE_ERROR,  
474 - GTK_BUTTONS_CANCEL,  
475 - "%s", _( "Can't start script" ));  
476 -  
477 - gtk_window_set_title(GTK_WINDOW(dialog),_( "System busy" ));  
478 - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",_( "Please, try again in a few moments" ));  
479 -  
480 - gtk_dialog_run(GTK_DIALOG (dialog));  
481 - gtk_widget_destroy(dialog);  
482 - return;  
483 - }  
484 -  
485 - gtk_action_set_sensitive(action,FALSE);  
486 -  
487 - if(filename)  
488 - {  
489 - // Has filename, call it directly  
490 - call_rexx_script(action,widget,filename);  
491 - }  
492 - else  
493 - {  
494 - // No filename, ask user  
495 - static const struct _list  
496 - {  
497 - const gchar *name;  
498 - const gchar *pattern;  
499 - } list[] =  
500 - {  
501 - { N_( "Rexx script file" ), "*.rex" },  
502 - { N_( "Rexx class file" ), "*.cls" }  
503 - };  
504 -  
505 - GtkFileFilter * filter[G_N_ELEMENTS(list)+1];  
506 - unsigned int f;  
507 -  
508 - memset(filter,0,sizeof(filter));  
509 -  
510 - for(f=0;f<G_N_ELEMENTS(list);f++)  
511 - {  
512 - filter[f] = gtk_file_filter_new();  
513 - gtk_file_filter_set_name(filter[f],gettext(list[f].name));  
514 - gtk_file_filter_add_pattern(filter[f],list[f].pattern);  
515 - }  
516 -  
517 - filename = pw3270_get_filename(widget,"rexx","script",filter,_( "Select script to run" ));  
518 -  
519 - if(filename)  
520 - {  
521 - call_rexx_script(action,widget,filename);  
522 - g_free(filename);  
523 - }  
524 -  
525 -  
526 - }  
527 -  
528 - gtk_action_set_sensitive(action,TRUE);  
529 -#if GTK_CHECK_VERSION(2,32,0)  
530 - g_mutex_unlock(&mutex); #else g_static_mutex_unlock(&mutex); #endif // GTK_CHECK_VERSION  
531 -  
532 - }  
533 -  
534 -}  
535 -  
src/pw3270/main.c
@@ -261,6 +261,8 @@ int main(int argc, char *argv[]) @@ -261,6 +261,8 @@ int main(int argc, char *argv[])
261 static const gchar * host = NULL; 261 static const gchar * host = NULL;
262 int rc = 0; 262 int rc = 0;
263 263
  264 + trace("%s",__FUNCTION__);
  265 +
264 #if ! GLIB_CHECK_VERSION(2,32,0) 266 #if ! GLIB_CHECK_VERSION(2,32,0)
265 g_thread_init(NULL); 267 g_thread_init(NULL);
266 #endif // !GLIB(2,32) 268 #endif // !GLIB(2,32)
src/pw3270/v3270/oia.c
@@ -100,9 +100,9 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step @@ -100,9 +100,9 @@ static gint draw_spinner(cairo_t *cr, GdkRectangle *r, GdkRGBA *color, gint step
100 cairo_save(cr); 100 cairo_save(cr);
101 101
102 cairo_set_source_rgba (cr, 102 cairo_set_source_rgba (cr,
103 - color[V3270_COLOR_OIA_SPINNER].red / 65535.,  
104 - color[V3270_COLOR_OIA_SPINNER].green / 65535.,  
105 - color[V3270_COLOR_OIA_SPINNER].blue / 65535., 103 + color[V3270_COLOR_OIA_SPINNER].red,
  104 + color[V3270_COLOR_OIA_SPINNER].green,
  105 + color[V3270_COLOR_OIA_SPINNER].blue,
106 t); 106 t);
107 107
108 cairo_set_line_width (cr, 2.0); 108 cairo_set_line_width (cr, 2.0);
@@ -953,20 +953,24 @@ static gboolean update_timer(struct timer_info *info) @@ -953,20 +953,24 @@ static gboolean update_timer(struct timer_info *info)
953 } 953 }
954 954
955 #ifdef HAVE_LIBM 955 #ifdef HAVE_LIBM
956 - rect = info->terminal->oia_rect + V3270_OIA_SPINNER; 956 +
  957 + rect = info->terminal->oia_rect + V3270_OIA_SPINNER;
957 958
958 #ifdef DEBUG 959 #ifdef DEBUG
959 - cairo_set_source_rgb(cr,0.1,0.1,0.1); 960 + cairo_set_source_rgb(cr,0.1,0.1,0.1);
960 #else 961 #else
961 - gdk_cairo_set_source_rgba(cr,info->terminal->color+V3270_COLOR_OIA_BACKGROUND); 962 + gdk_cairo_set_source_rgba(cr,info->terminal->color+V3270_COLOR_OIA_BACKGROUND);
962 #endif 963 #endif
963 - cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height);  
964 - cairo_fill(cr);  
965 964
966 - gdk_cairo_set_source_rgba(cr,info->terminal->color+V3270_COLOR_OIA_FOREGROUND); 965 + cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height);
  966 + cairo_fill(cr);
  967 +
  968 + gdk_cairo_set_source_rgba(cr,info->terminal->color+V3270_COLOR_OIA_FOREGROUND);
  969 +
  970 + info->step = draw_spinner(cr, rect, info->terminal->color, info->step);
  971 +
  972 + gtk_widget_queue_draw_area(GTK_WIDGET(info->terminal),rect->x,rect->y,rect->width,rect->height);
967 973
968 - info->step = draw_spinner(cr, rect, info->terminal->color, info->step);  
969 - gtk_widget_queue_draw_area(GTK_WIDGET(info->terminal),rect->x,rect->y,rect->width,rect->height);  
970 #endif // HAVE_LIBM 974 #endif // HAVE_LIBM
971 975
972 cairo_destroy(cr); 976 cairo_destroy(cr);