Commit 73d7e595d40a12652b6872c0e2c2541fb05a2945

Authored by perry.werneck@gmail.com
1 parent 4a81c5c9
Exists in master and in 1 other branch develop

Implementando aviso de script ativo

accessible.c
... ... @@ -38,7 +38,7 @@
38 38  
39 39 #include <pw3270.h>
40 40 #include <lib3270/log.h>
41   - #include <v3270.h>
  41 + #include <pw3270/v3270.h>
42 42 #include "private.h"
43 43 #include "accessible.h"
44 44  
... ...
draw.c
... ... @@ -32,7 +32,7 @@
32 32 #include <pw3270.h>
33 33 #include <lib3270.h>
34 34 #include <lib3270/session.h>
35   - #include <v3270.h>
  35 + #include <pw3270/v3270.h>
36 36 #include "private.h"
37 37  
38 38 /*--[ Implement ]------------------------------------------------------------------------------------*/
... ...
keyboard.c
... ... @@ -38,7 +38,7 @@
38 38 #include <string.h>
39 39 #include <gdk/gdk.h>
40 40  
41   - #include <v3270.h>
  41 + #include <pw3270/v3270.h>
42 42 #include "private.h"
43 43  
44 44 #if GTK_CHECK_VERSION(3,0,0)
... ...
mouse.c
... ... @@ -30,7 +30,7 @@
30 30 #include <gtk/gtk.h>
31 31 #include <gdk/gdk.h>
32 32 #include <pw3270.h>
33   - #include <v3270.h>
  33 + #include <pw3270/v3270.h>
34 34 #include "private.h"
35 35 #include <lib3270/selection.h>
36 36 #include <lib3270/actions.h>
... ...
oia.c
... ... @@ -40,7 +40,7 @@
40 40 #include <math.h>
41 41 #endif // HAVE_LIBM
42 42  
43   - #include <v3270.h>
  43 + #include <pw3270/v3270.h>
44 44 #include "private.h"
45 45 #include "accessible.h"
46 46  
... ... @@ -505,9 +505,7 @@ void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_me
505 505 #ifdef HAVE_PRINTER
506 506 { V3270_OIA_PRINTER, setup_single_char_right },
507 507 #endif // HAVE_PRINTER
508   -#ifdef HAVE_SCRIPT
509 508 { V3270_OIA_SCRIPT, setup_single_char_right },
510   -#endif // HAVE_SCRIPT
511 509 { V3270_OIA_INSERT, setup_insert_position },
512 510 { V3270_OIA_TYPEAHEAD, setup_single_char_right },
513 511 { V3270_OIA_SHIFT, setup_double_char_position },
... ... @@ -858,10 +856,11 @@ void v3270_draw_shift_status(v3270 *terminal)
858 856  
859 857 }
860 858  
861   -static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id, const gchar *text)
  859 +static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id, const gchar chr)
862 860 {
863   - GdkRectangle *r;
864   - cairo_t *cr;
  861 + GdkRectangle * r;
  862 + cairo_t * cr;
  863 + gchar text[] = { chr, 0 };
865 864  
866 865 if(!terminal->surface)
867 866 return;
... ... @@ -882,7 +881,7 @@ static void update_text_field(v3270 *terminal, gboolean flag, V3270_OIA_FIELD id
882 881  
883 882 void v3270_draw_alt_status(v3270 *terminal)
884 883 {
885   - update_text_field(terminal,terminal->keyflags & KEY_FLAG_ALT,V3270_OIA_ALT,"A");
  884 + update_text_field(terminal,terminal->keyflags & KEY_FLAG_ALT,V3270_OIA_ALT,'A');
886 885 }
887 886  
888 887 void v3270_draw_ins_status(v3270 *terminal)
... ... @@ -1050,23 +1049,76 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1050 1049 break;
1051 1050  
1052 1051 case LIB3270_FLAG_TYPEAHEAD:
1053   - update_text_field(terminal,on,V3270_OIA_TYPEAHEAD,"T");
  1052 + update_text_field(terminal,on,V3270_OIA_TYPEAHEAD,'T');
1054 1053 break;
1055 1054  
1056 1055 #ifdef HAVE_PRINTER
1057 1056 case LIB3270_FLAG_PRINTER:
1058   - update_text_field(terminal,on,V3270_OIA_PRINTER,"P");
  1057 + update_text_field(terminal,on,V3270_OIA_PRINTER,'P');
1059 1058 break;
1060 1059 #endif // HAVE_PRINTER
1061 1060  
1062   -#ifdef HAVE_SCRIPT
  1061 +/*
1063 1062 case LIB3270_FLAG_SCRIPT:
1064   - update_text_field(terminal,on,V3270_OIA_SCRIPT,"S");
  1063 + update_text_field(terminal,on,V3270_OIA_SCRIPT,terminal->script_id);
1065 1064 break;
1066   -#endif // HAVE_SCRIPT
  1065 +*/
1067 1066  
1068 1067 default:
1069 1068 return;
1070 1069 }
1071 1070  
1072 1071 }
  1072 +
  1073 +static gboolean blink_script(v3270 *widget)
  1074 +{
  1075 + if(!widget->script.id)
  1076 + return FALSE;
  1077 +
  1078 + update_text_field(widget,1,V3270_OIA_SCRIPT,widget->script.blink ? 'S' : ' ');
  1079 + widget->script.blink = !widget->script.blink;
  1080 +
  1081 + return TRUE;
  1082 +}
  1083 +
  1084 +static void release_script(v3270 *widget)
  1085 +{
  1086 + widget->script.timer = NULL;
  1087 + widget->script.id = 0;
  1088 +}
  1089 +
  1090 +LIB3270_EXPORT int v3270_set_script(GtkWidget *widget, const gchar id, unsigned char on)
  1091 +{
  1092 + v3270 *terminal;
  1093 + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
  1094 +
  1095 + terminal = GTK_V3270(widget);
  1096 +
  1097 + if(terminal->script.id && id != terminal->script.id)
  1098 + return EBUSY;
  1099 +
  1100 + terminal->script.id = on ? id : 0;
  1101 + update_text_field(terminal,on,V3270_OIA_SCRIPT,'S');
  1102 +
  1103 + if(on)
  1104 + {
  1105 + if(!terminal->script.timer)
  1106 + {
  1107 + terminal->script.timer = g_timeout_source_new(500);
  1108 + g_source_set_callback(terminal->script.timer,(GSourceFunc) blink_script, terminal, (GDestroyNotify) release_script);
  1109 +
  1110 + g_source_attach(terminal->script.timer, NULL);
  1111 + g_source_unref(terminal->script.timer);
  1112 + }
  1113 + }
  1114 + else if(terminal->script.timer)
  1115 + {
  1116 + if(terminal->script.timer->ref_count < 2)
  1117 + g_source_destroy(terminal->script.timer);
  1118 +
  1119 + if(terminal->timer)
  1120 + g_source_unref(terminal->script.timer);
  1121 + }
  1122 +
  1123 + return 0;
  1124 +}
... ...
private.h
... ... @@ -180,6 +180,14 @@ G_BEGIN_DECLS
180 180 H3270 * host; /**< Related 3270 session */
181 181 gchar * session_name; /**< Session name (for window title) */
182 182  
  183 + // Scripting
  184 + struct
  185 + {
  186 + int blink : 1;
  187 + gchar id; /**< Script indicator */
  188 + GSource * timer;
  189 + } script;
  190 +
183 191 };
184 192  
185 193 /*--[ Globals ]--------------------------------------------------------------------------------------*/
... ...
selection.c
... ... @@ -29,7 +29,7 @@
29 29  
30 30 #include <gtk/gtk.h>
31 31 #include <pw3270.h>
32   - #include <v3270.h>
  32 + #include <pw3270/v3270.h>
33 33 #include "private.h"
34 34 #include <lib3270/selection.h>
35 35 #include <lib3270/log.h>
... ...
widget.c
... ... @@ -39,7 +39,7 @@
39 39 #include <malloc.h>
40 40 #endif // HAVE_MALLOC_H
41 41  
42   - #include <v3270.h>
  42 + #include <pw3270/v3270.h>
43 43 #include "private.h"
44 44 #include "accessible.h"
45 45 #include "marshal.h"
... ... @@ -892,6 +892,13 @@ static void v3270_destroy(GtkObject *widget)
892 892 g_source_unref(terminal->timer);
893 893 }
894 894  
  895 + if(terminal->script.timer)
  896 + {
  897 + g_source_destroy(terminal->script.timer);
  898 + while(terminal->script.timer)
  899 + g_source_unref(terminal->script.timer);
  900 + }
  901 +
895 902 if(terminal->cursor.timer)
896 903 {
897 904 g_source_destroy(terminal->cursor.timer);
... ...