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) |