Commit 73d7e595d40a12652b6872c0e2c2541fb05a2945
1 parent
4a81c5c9
Exists in
master
and in
1 other branch
Implementando aviso de script ativo
Showing
8 changed files
with
85 additions
and
18 deletions
Show diff stats
accessible.c
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
mouse.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
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); | ... | ... |