Commit 4e287678326bc8c79f6445ebcf8dfa01bed50907

Authored by perry.werneck@gmail.com
1 parent 7443b5e6

Corrigindo erro ao arrastar uma caixa de seleção que ocupe toda a tela do terminal

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)