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 56 DECLARE_LIB3270_ACTION( clear )
57 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 61 DECLARE_LIB3270_ACTION( unselect )
62 62 DECLARE_LIB3270_ACTION( reselect )
63 63  
... ...
src/include/lib3270/selection.h
... ... @@ -33,10 +33,12 @@
33 33  
34 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 37 LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr);
38 38 LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr);
39 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 44 * "Paste" supplied string.
... ...
src/lib3270/selection.c
... ... @@ -176,7 +176,7 @@ void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_
176 176 update_selected_region(session);
177 177 }
178 178  
179   -LIB3270_ACTION(unselect)
  179 +LIB3270_EXPORT int lib3270_unselect(H3270 *hSession)
180 180 {
181 181 int a;
182 182  
... ... @@ -242,11 +242,14 @@ LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end)
242 242  
243 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 248 // Do we really need to change selection?
247 249 if(start == h->select.start && end == h->select.end && h->selected)
248 250 return;
249 251  
  252 + // Start address is inside the screen?
250 253 h->select.start = start;
251 254 h->select.end = end;
252 255  
... ... @@ -340,20 +343,18 @@ LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr)
340 343 return 0;
341 344 }
342 345  
343   -LIB3270_ACTION( selectfield )
  346 +LIB3270_EXPORT int lib3270_select_field(H3270 *hSession)
344 347 {
345 348 CHECK_SESSION_HANDLE(hSession);
346 349 lib3270_select_field_at(hSession,hSession->cursor_addr);
347 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 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 359 return 0;
359 360 }
... ... @@ -764,7 +765,9 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to)
764 765 {
765 766 int pos[2];
766 767 int rows, cols, f, step;
767   - // , start, end;
  768 +
  769 + if(from == to)
  770 + return from;
768 771  
769 772 if(!lib3270_get_selection_bounds(hSession,&pos[0],&pos[1]))
770 773 return from;
... ... @@ -835,6 +838,8 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig
835 838 if(flag & SELECTION_BOTTOM) // Update bottom margin
836 839 origin = last = (row*h->cols) + (last%h->cols);
837 840  
  841 + trace("origin=%d first=%d last=%d",origin,first,last);
  842 +
838 843 if(first < last)
839 844 do_select(h,first,last,h->rectsel);
840 845 else
... ...
src/pw3270/actions.c
... ... @@ -398,12 +398,13 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget)
398 398  
399 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 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 410 static void action_select_none(GtkAction *action, GtkWidget *widget)
... ...