Commit 714aa8af40346706e1815a4a58101757f4c3faa2
1 parent
8c98b4ca
Exists in
master
and in
3 other branches
Padronizando action que move o cursor ao final do campo ativo, incluindo função …
…de biblioteca que obtem a posição do último caractere do campo
Showing
2 changed files
with
34 additions
and
12 deletions
Show diff stats
kybd.c
@@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n | @@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n | ||
2346 | */ | 2346 | */ |
2347 | LIB3270_ACTION( fieldend ) | 2347 | LIB3270_ACTION( fieldend ) |
2348 | { | 2348 | { |
2349 | - int baddr, faddr; | ||
2350 | - unsigned char fa, c; | ||
2351 | - int last_nonblank = -1; | 2349 | + int baddr; |
2352 | 2350 | ||
2353 | if (hSession->kybdlock) | 2351 | if (hSession->kybdlock) |
2354 | { | 2352 | { |
2355 | ENQUEUE_ACTION( lib3270_fieldend ); | 2353 | ENQUEUE_ACTION( lib3270_fieldend ); |
2356 | return 0; | 2354 | return 0; |
2357 | } | 2355 | } |
2356 | + | ||
2357 | + baddr = lib3270_get_field_end(hSession,hSession->cursor_addr); | ||
2358 | + if(baddr >= 0) | ||
2359 | + cursor_move(hSession,baddr); | ||
2360 | + | ||
2361 | + return 0; | ||
2362 | +} | ||
2363 | + | ||
2364 | +int lib3270_get_field_end(H3270 *hSession, int baddr) | ||
2365 | +{ | ||
2366 | + int faddr; | ||
2367 | + unsigned char fa, c; | ||
2368 | + int last_nonblank = -1; | ||
2369 | + | ||
2358 | #if defined(X3270_ANSI) /*[*/ | 2370 | #if defined(X3270_ANSI) /*[*/ |
2359 | if (IN_ANSI) | 2371 | if (IN_ANSI) |
2360 | - return 0; | 2372 | + return -1; |
2361 | #endif /*]*/ | 2373 | #endif /*]*/ |
2374 | + | ||
2362 | if (!hSession->formatted) | 2375 | if (!hSession->formatted) |
2363 | - return 0; | ||
2364 | - baddr = hSession->cursor_addr; | 2376 | + return -1; |
2377 | + | ||
2365 | faddr = find_field_attribute(hSession,baddr); | 2378 | faddr = find_field_attribute(hSession,baddr); |
2366 | fa = hSession->ea_buf[faddr].fa; | 2379 | fa = hSession->ea_buf[faddr].fa; |
2367 | if (faddr == baddr || FA_IS_PROTECTED(fa)) | 2380 | if (faddr == baddr || FA_IS_PROTECTED(fa)) |
2368 | - return 0; | 2381 | + return -1; |
2369 | 2382 | ||
2370 | baddr = faddr; | 2383 | baddr = faddr; |
2371 | - while (True) { | 2384 | + while (True) |
2385 | + { | ||
2372 | INC_BA(baddr); | 2386 | INC_BA(baddr); |
2373 | c = hSession->ea_buf[baddr].cc; | 2387 | c = hSession->ea_buf[baddr].cc; |
2374 | if (hSession->ea_buf[baddr].fa) | 2388 | if (hSession->ea_buf[baddr].fa) |
@@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend ) | @@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend ) | ||
2377 | last_nonblank = baddr; | 2391 | last_nonblank = baddr; |
2378 | } | 2392 | } |
2379 | 2393 | ||
2380 | - if (last_nonblank == -1) { | 2394 | + if (last_nonblank == -1) |
2395 | + { | ||
2381 | baddr = faddr; | 2396 | baddr = faddr; |
2382 | INC_BA(baddr); | 2397 | INC_BA(baddr); |
2383 | - } else { | 2398 | + } |
2399 | + else | ||
2400 | + { | ||
2384 | baddr = last_nonblank; | 2401 | baddr = last_nonblank; |
2385 | INC_BA(baddr); | 2402 | INC_BA(baddr); |
2386 | if (hSession->ea_buf[baddr].fa) | 2403 | if (hSession->ea_buf[baddr].fa) |
2387 | baddr = last_nonblank; | 2404 | baddr = last_nonblank; |
2388 | } | 2405 | } |
2389 | - cursor_move(hSession,baddr); | ||
2390 | - return 0; | 2406 | + return baddr; |
2391 | } | 2407 | } |
2392 | 2408 | ||
2393 | /** | 2409 | /** |
selection.c
@@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u | @@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u | ||
862 | cursor_addr++; | 862 | cursor_addr++; |
863 | break; | 863 | break; |
864 | 864 | ||
865 | + case LIB3270_DIR_END: | ||
866 | + cursor_addr = lib3270_get_field_end(hSession,cursor_addr); | ||
867 | + if(cursor_addr == -1) | ||
868 | + return EINVAL; | ||
869 | + break; | ||
870 | + | ||
865 | default: | 871 | default: |
866 | return -1; | 872 | return -1; |
867 | } | 873 | } |