Commit 458f43a4aaff9b2cbd8d00382764a063238003d5
1 parent
30b68cb1
Exists in
master
and in
5 other branches
Iniciando atualizacao do controle de toggle
Showing
2 changed files
with
33 additions
and
44 deletions
Show diff stats
src/include/lib3270.h
src/lib3270/toggles.c
| ... | ... | @@ -78,37 +78,6 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = |
| 78 | 78 | "beep", /**< Beep on errors */ |
| 79 | 79 | }; |
| 80 | 80 | |
| 81 | - | |
| 82 | -/* | |
| 83 | -static void no_callback(H3270 *h, int value, LIB3270_TOGGLE_TYPE reason) | |
| 84 | -{ | |
| 85 | -} | |
| 86 | - | |
| 87 | -LIB3270_EXPORT int lib3270_register_tchange(H3270 *h, LIB3270_TOGGLE_ID ix, void (*func)(H3270 *, int, LIB3270_TOGGLE_TYPE)) | |
| 88 | -{ | |
| 89 | - struct toggle *t; | |
| 90 | - | |
| 91 | - CHECK_SESSION_HANDLE(h); | |
| 92 | - | |
| 93 | - if(ix < 0 || ix >= LIB3270_TOGGLE_COUNT) | |
| 94 | - return EINVAL; | |
| 95 | - | |
| 96 | - t = &appres.toggle[ix]; | |
| 97 | - | |
| 98 | - if(func) | |
| 99 | - { | |
| 100 | - t->callback = func; | |
| 101 | - t->callback(h, t->value, (int) TT_INITIAL); | |
| 102 | - } | |
| 103 | - else | |
| 104 | - { | |
| 105 | - t->callback = no_callback; | |
| 106 | - } | |
| 107 | - | |
| 108 | - return 0; | |
| 109 | -} | |
| 110 | -*/ | |
| 111 | - | |
| 112 | 81 | LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix) |
| 113 | 82 | { |
| 114 | 83 | CHECK_SESSION_HANDLE(session); |
| ... | ... | @@ -124,7 +93,6 @@ LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE i |
| 124 | 93 | static void toggle_notify(H3270 *session, struct toggle *t, LIB3270_TOGGLE ix) |
| 125 | 94 | { |
| 126 | 95 | t->upcall(session, t, TT_INTERACTIVE); |
| 127 | -// t->callback(session,t->value, (int) TT_INTERACTIVE); | |
| 128 | 96 | |
| 129 | 97 | if(session->update_toggle) |
| 130 | 98 | session->update_toggle(session,ix,t->value,TT_INTERACTIVE,toggle_names[ix]); |
| ... | ... | @@ -133,7 +101,8 @@ static void toggle_notify(H3270 *session, struct toggle *t, LIB3270_TOGGLE ix) |
| 133 | 101 | |
| 134 | 102 | LIB3270_EXPORT void lib3270_set_toggle(H3270 *session, LIB3270_TOGGLE ix, int value) |
| 135 | 103 | { |
| 136 | - struct toggle *t; | |
| 104 | + char v = value ? True : False; | |
| 105 | + struct toggle * t; | |
| 137 | 106 | |
| 138 | 107 | CHECK_SESSION_HANDLE(session); |
| 139 | 108 | |
| ... | ... | @@ -141,7 +110,11 @@ LIB3270_EXPORT void lib3270_set_toggle(H3270 *session, LIB3270_TOGGLE ix, int va |
| 141 | 110 | return; |
| 142 | 111 | |
| 143 | 112 | t = &appres.toggle[ix]; |
| 144 | - t->value = (value != 0); | |
| 113 | + | |
| 114 | + if(v == t->value) | |
| 115 | + return; | |
| 116 | + | |
| 117 | + t->value = v; | |
| 145 | 118 | |
| 146 | 119 | toggle_notify(session,t,ix); |
| 147 | 120 | } |
| ... | ... | @@ -153,14 +126,14 @@ LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE ix) |
| 153 | 126 | CHECK_SESSION_HANDLE(session); |
| 154 | 127 | |
| 155 | 128 | if(ix < 0 || ix >= LIB3270_TOGGLE_COUNT) |
| 156 | - return; | |
| 129 | + return 0; | |
| 157 | 130 | |
| 158 | 131 | t = &appres.toggle[ix]; |
| 159 | 132 | |
| 160 | - t->value = !t->value; | |
| 133 | + t->value = t->value ? False : True; | |
| 161 | 134 | toggle_notify(session,t,ix); |
| 162 | 135 | |
| 163 | - return 0; | |
| 136 | + return (int) t->value; | |
| 164 | 137 | } |
| 165 | 138 | |
| 166 | 139 | static void toggle_monocase(H3270 *session, struct toggle *t, LIB3270_TOGGLE_TYPE tt) |
| ... | ... | @@ -176,10 +149,7 @@ void initialize_toggles(H3270 *session, struct toggle *toggle) |
| 176 | 149 | int f; |
| 177 | 150 | |
| 178 | 151 | for(f=0;f<LIB3270_TOGGLE_COUNT;f++) |
| 179 | - { | |
| 180 | -// toggle[f].callback = no_callback; | |
| 181 | 152 | toggle[f].upcall = toggle_nop; |
| 182 | - } | |
| 183 | 153 | |
| 184 | 154 | toggle[LIB3270_TOGGLE_RECTANGLE_SELECT].upcall = toggle_rectselect; |
| 185 | 155 | toggle[LIB3270_TOGGLE_MONOCASE].upcall = toggle_monocase; |
| ... | ... | @@ -199,11 +169,9 @@ void initialize_toggles(H3270 *session, struct toggle *toggle) |
| 199 | 169 | LIB3270_TOGGLE_CURSOR_BLINK, |
| 200 | 170 | LIB3270_TOGGLE_CURSOR_POS, |
| 201 | 171 | LIB3270_TOGGLE_BEEP, |
| 202 | - | |
| 203 | - (LIB3270_TOGGLE) -1 | |
| 204 | 172 | }; |
| 205 | 173 | |
| 206 | - for(f=0;active_by_default[f] != (LIB3270_TOGGLE) -1; f++) | |
| 174 | + for(f=0;f< (sizeof(active_by_default)/sizeof(active_by_default[0])); f++) | |
| 207 | 175 | { |
| 208 | 176 | toggle[active_by_default[f]].value = True; |
| 209 | 177 | } |
| ... | ... | @@ -223,6 +191,26 @@ void initialize_toggles(H3270 *session, struct toggle *toggle) |
| 223 | 191 | void shutdown_toggles(H3270 *session, struct toggle *toggle) |
| 224 | 192 | { |
| 225 | 193 | #if defined(X3270_TRACE) |
| 194 | + static const LIB3270_TOGGLE disable_on_shutdown[] = {DS_TRACE, EVENT_TRACE, SCREEN_TRACE}; | |
| 195 | + | |
| 196 | + int f; | |
| 197 | + | |
| 198 | + for(f=0;f< (sizeof(disable_on_shutdown)/sizeof(disable_on_shutdown[0])); f++) | |
| 199 | + { | |
| 200 | + LIB3270_TOGGLE ix = disable_on_shutdown[f]; | |
| 201 | + struct toggle * t = &toggle[ix]; | |
| 202 | + | |
| 203 | + if(t->value) | |
| 204 | + { | |
| 205 | + t->value = False; | |
| 206 | + t->upcall(session,&toggle[f],TT_FINAL); | |
| 207 | + | |
| 208 | + if(session->update_toggle) | |
| 209 | + session->update_toggle(session,ix,t->value,TT_FINAL,toggle_names[ix]); | |
| 210 | + } | |
| 211 | + } | |
| 212 | + | |
| 213 | +/* | |
| 226 | 214 | // Clean up the data stream trace monitor window. |
| 227 | 215 | if(toggle[DS_TRACE].value) |
| 228 | 216 | { |
| ... | ... | @@ -242,6 +230,7 @@ void shutdown_toggles(H3270 *session, struct toggle *toggle) |
| 242 | 230 | toggle[SCREEN_TRACE].value = False; |
| 243 | 231 | toggle_screenTrace(session, &toggle[SCREEN_TRACE], TT_FINAL); |
| 244 | 232 | } |
| 233 | +*/ | |
| 245 | 234 | #endif |
| 246 | 235 | } |
| 247 | 236 | ... | ... |