Commit 4e287678326bc8c79f6445ebcf8dfa01bed50907
1 parent
7443b5e6
Exists in
master
and in
5 other branches
Corrigindo erro ao arrastar uma caixa de seleção que ocupe toda a tela do terminal
Showing
4 changed files
with
20 additions
and
12 deletions
Show diff stats
src/include/lib3270/action_table.h
| @@ -56,8 +56,8 @@ | @@ -56,8 +56,8 @@ | ||
| 56 | DECLARE_LIB3270_ACTION( clear ) | 56 | DECLARE_LIB3270_ACTION( clear ) |
| 57 | DECLARE_LIB3270_ACTION( eraseinput ) | 57 | DECLARE_LIB3270_ACTION( eraseinput ) |
| 58 | 58 | ||
| 59 | - DECLARE_LIB3270_ACTION( selectfield ) | ||
| 60 | - DECLARE_LIB3270_ACTION( selectall ) | 59 | + DECLARE_LIB3270_ACTION( select_field ) |
| 60 | + DECLARE_LIB3270_ACTION( select_all ) | ||
| 61 | DECLARE_LIB3270_ACTION( unselect ) | 61 | DECLARE_LIB3270_ACTION( unselect ) |
| 62 | DECLARE_LIB3270_ACTION( reselect ) | 62 | DECLARE_LIB3270_ACTION( reselect ) |
| 63 | 63 |
src/include/lib3270/selection.h
| @@ -33,10 +33,12 @@ | @@ -33,10 +33,12 @@ | ||
| 33 | 33 | ||
| 34 | #define LIB3270_SELECTION_H_INCLUDED 1 | 34 | #define LIB3270_SELECTION_H_INCLUDED 1 |
| 35 | 35 | ||
| 36 | - LIB3270_EXPORT void lib3270_clear_selection(H3270 *session); | 36 | + LIB3270_EXPORT int lib3270_unselect(H3270 *session); |
| 37 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); | 37 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); |
| 38 | LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); | 38 | LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); |
| 39 | LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr); | 39 | LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr); |
| 40 | + LIB3270_EXPORT int lib3270_select_field(H3270 *session); | ||
| 41 | + LIB3270_EXPORT int lib3270_select_all(H3270 *session); | ||
| 40 | 42 | ||
| 41 | /** | 43 | /** |
| 42 | * "Paste" supplied string. | 44 | * "Paste" supplied string. |
src/lib3270/selection.c
| @@ -176,7 +176,7 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_ | @@ -176,7 +176,7 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_ | ||
| 176 | update_selected_region(session); | 176 | update_selected_region(session); |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | -LIB3270_ACTION(unselect) | 179 | +LIB3270_EXPORT int lib3270_unselect(H3270 *hSession) |
| 180 | { | 180 | { |
| 181 | int a; | 181 | int a; |
| 182 | 182 | ||
| @@ -242,11 +242,14 @@ LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end) | @@ -242,11 +242,14 @@ LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end) | ||
| 242 | 242 | ||
| 243 | static void do_select(H3270 *h, int start, int end, int rect) | 243 | static void do_select(H3270 *h, int start, int end, int rect) |
| 244 | { | 244 | { |
| 245 | + if(start < 0 || end > (h->rows * h->cols)) | ||
| 246 | + return; | ||
| 245 | 247 | ||
| 246 | // Do we really need to change selection? | 248 | // Do we really need to change selection? |
| 247 | if(start == h->select.start && end == h->select.end && h->selected) | 249 | if(start == h->select.start && end == h->select.end && h->selected) |
| 248 | return; | 250 | return; |
| 249 | 251 | ||
| 252 | + // Start address is inside the screen? | ||
| 250 | h->select.start = start; | 253 | h->select.start = start; |
| 251 | h->select.end = end; | 254 | h->select.end = end; |
| 252 | 255 | ||
| @@ -340,20 +343,18 @@ LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr) | @@ -340,20 +343,18 @@ LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr) | ||
| 340 | return 0; | 343 | return 0; |
| 341 | } | 344 | } |
| 342 | 345 | ||
| 343 | -LIB3270_ACTION( selectfield ) | 346 | +LIB3270_EXPORT int lib3270_select_field(H3270 *hSession) |
| 344 | { | 347 | { |
| 345 | CHECK_SESSION_HANDLE(hSession); | 348 | CHECK_SESSION_HANDLE(hSession); |
| 346 | lib3270_select_field_at(hSession,hSession->cursor_addr); | 349 | lib3270_select_field_at(hSession,hSession->cursor_addr); |
| 347 | return 0; | 350 | return 0; |
| 348 | } | 351 | } |
| 349 | 352 | ||
| 350 | -LIB3270_ACTION( selectall ) | 353 | +LIB3270_EXPORT int lib3270_select_all(H3270 * hSession) |
| 351 | { | 354 | { |
| 352 | -// int len, baddr; | ||
| 353 | - | ||
| 354 | CHECK_SESSION_HANDLE(hSession); | 355 | CHECK_SESSION_HANDLE(hSession); |
| 355 | 356 | ||
| 356 | - do_select(hSession,0,hSession->rows*hSession->cols,0); | 357 | + do_select(hSession,0,(hSession->rows*hSession->cols)-1,0); |
| 357 | 358 | ||
| 358 | return 0; | 359 | return 0; |
| 359 | } | 360 | } |
| @@ -764,7 +765,9 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) | @@ -764,7 +765,9 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) | ||
| 764 | { | 765 | { |
| 765 | int pos[2]; | 766 | int pos[2]; |
| 766 | int rows, cols, f, step; | 767 | int rows, cols, f, step; |
| 767 | - // , start, end; | 768 | + |
| 769 | + if(from == to) | ||
| 770 | + return from; | ||
| 768 | 771 | ||
| 769 | if(!lib3270_get_selection_bounds(hSession,&pos[0],&pos[1])) | 772 | if(!lib3270_get_selection_bounds(hSession,&pos[0],&pos[1])) |
| 770 | return from; | 773 | return from; |
| @@ -835,6 +838,8 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig | @@ -835,6 +838,8 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig | ||
| 835 | if(flag & SELECTION_BOTTOM) // Update bottom margin | 838 | if(flag & SELECTION_BOTTOM) // Update bottom margin |
| 836 | origin = last = (row*h->cols) + (last%h->cols); | 839 | origin = last = (row*h->cols) + (last%h->cols); |
| 837 | 840 | ||
| 841 | + trace("origin=%d first=%d last=%d",origin,first,last); | ||
| 842 | + | ||
| 838 | if(first < last) | 843 | if(first < last) |
| 839 | do_select(h,first,last,h->rectsel); | 844 | do_select(h,first,last,h->rectsel); |
| 840 | else | 845 | else |
src/pw3270/actions.c
| @@ -398,12 +398,13 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget) | @@ -398,12 +398,13 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget) | ||
| 398 | 398 | ||
| 399 | static void action_select_all(GtkAction *action, GtkWidget *widget) | 399 | static void action_select_all(GtkAction *action, GtkWidget *widget) |
| 400 | { | 400 | { |
| 401 | - lib3270_selectall(v3270_get_session(widget)); | 401 | + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); |
| 402 | + lib3270_select_all(v3270_get_session(widget)); | ||
| 402 | } | 403 | } |
| 403 | 404 | ||
| 404 | static void action_select_field(GtkAction *action, GtkWidget *widget) | 405 | static void action_select_field(GtkAction *action, GtkWidget *widget) |
| 405 | { | 406 | { |
| 406 | - lib3270_selectfield(v3270_get_session(widget)); | 407 | + lib3270_select_field(v3270_get_session(widget)); |
| 407 | } | 408 | } |
| 408 | 409 | ||
| 409 | static void action_select_none(GtkAction *action, GtkWidget *widget) | 410 | static void action_select_none(GtkAction *action, GtkWidget *widget) |