Commit aba9cdef1e2254dc64fc2ffe22ca920830257a18
1 parent
4ffa4f37
Exists in
master
and in
5 other branches
Incluindo funcoes para obtenção das bordas de palavra e campo para uso no compon…
…ente de acessibilidade
Showing
9 changed files
with
217 additions
and
83 deletions
Show diff stats
pw3270.cbp
| ... | ... | @@ -174,6 +174,9 @@ |
| 174 | 174 | <Unit filename="src/lib3270/aplc.h" /> |
| 175 | 175 | <Unit filename="src/lib3270/appres.h" /> |
| 176 | 176 | <Unit filename="src/lib3270/arpa_telnet.h" /> |
| 177 | + <Unit filename="src/lib3270/bounds.c"> | |
| 178 | + <Option compilerVar="CC" /> | |
| 179 | + </Unit> | |
| 177 | 180 | <Unit filename="src/lib3270/cg.h" /> |
| 178 | 181 | <Unit filename="src/lib3270/charset.c"> |
| 179 | 182 | <Option compilerVar="CC" /> | ... | ... |
src/gtk/v3270/accessible.c
| ... | ... | @@ -506,7 +506,34 @@ static gboolean v3270_accessible_set_selection(AtkText *text, gint selection_num |
| 506 | 506 | return FALSE; |
| 507 | 507 | } |
| 508 | 508 | |
| 509 | -/* | |
| 509 | +static AtkAttributeSet *add_attribute(AtkAttributeSet * attributes, AtkTextAttribute attr, const gchar *value) | |
| 510 | +{ | |
| 511 | + AtkAttribute *at = g_new(AtkAttribute, 1); | |
| 512 | + | |
| 513 | + at->name = g_strdup (atk_text_attribute_get_name (attr)); | |
| 514 | + at->value = g_strdup (value); | |
| 515 | + | |
| 516 | + return g_slist_prepend (attributes, at); | |
| 517 | +} | |
| 518 | + | |
| 519 | +static AtkAttributeSet * v3270_accessible_get_default_attributes (AtkText *text) | |
| 520 | +{ | |
| 521 | + GtkWidget * widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); | |
| 522 | + AtkAttributeSet * attributes = NULL; | |
| 523 | + | |
| 524 | + if(!widget) | |
| 525 | + return NULL; | |
| 526 | + | |
| 527 | + trace("%s is incomplete ***********************",__FUNCTION__); | |
| 528 | + | |
| 529 | + // http://developer.gnome.org/atk/stable/AtkText.html#AtkTextAttribute | |
| 530 | + | |
| 531 | + // The direction of the text, if set. Values are "none", "ltr" or "rtl" | |
| 532 | + attributes = add_attribute(attributes, ATK_TEXT_ATTR_DIRECTION,atk_text_attribute_get_value(ATK_TEXT_ATTR_DIRECTION,gtk_widget_get_direction(widget))); | |
| 533 | + | |
| 534 | + return attributes; | |
| 535 | +} | |
| 536 | + | |
| 510 | 537 | static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint offset, gint * start_offset, gint * end_offset) |
| 511 | 538 | { |
| 512 | 539 | GtkWidget * widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text)); |
| ... | ... | @@ -519,14 +546,33 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint |
| 519 | 546 | |
| 520 | 547 | // http://developer.gnome.org/atk/stable/AtkText.html#AtkTextAttribute |
| 521 | 548 | |
| 522 | - attributes = add_attribute (attributes, ATK_TEXT_ATTR_DIRECTION, | |
| 523 | - atk_text_attribute_get_value (ATK_TEXT_ATTR_DIRECTION, | |
| 524 | - gtk_widget_get_direction(widget))); | |
| 549 | + // The direction of the text, if set. Values are "none", "ltr" or "rtl" | |
| 550 | + attributes = add_attribute(attributes, ATK_TEXT_ATTR_DIRECTION,atk_text_attribute_get_value(ATK_TEXT_ATTR_DIRECTION,gtk_widget_get_direction(widget))); | |
| 551 | + | |
| 552 | + | |
| 553 | + // ATK_TEXT_ATTR_LEFT_MARGIN | |
| 554 | + // The pixel width of the left margin | |
| 525 | 555 | |
| 556 | + // ATK_TEXT_ATTR_RIGHT_MARGIN | |
| 557 | + // The pixel width of the right margin | |
| 558 | + | |
| 559 | + // ATK_TEXT_ATTR_INVISIBLE | |
| 560 | + // Either "true" or "false" indicating whether text is visible or not | |
| 561 | + | |
| 562 | + // Either "true" or "false" indicating whether text is editable or not | |
| 563 | + // ATK_TEXT_ATTR_EDITABLE | |
| 564 | + | |
| 565 | + // The background color. The value is an RGB value of the format "u,u,u" | |
| 566 | + // ATK_TEXT_ATTR_BG_COLOR | |
| 567 | + | |
| 568 | + // The foreground color. The value is an RGB value of the format "u,u,u" | |
| 569 | + // ATK_TEXT_ATTR_FG_COLOR | |
| 570 | + | |
| 571 | + // The font family name | |
| 572 | + // ATK_TEXT_ATTR_FAMILY_NAME | |
| 526 | 573 | |
| 527 | 574 | return attributes; |
| 528 | 575 | } |
| 529 | -*/ | |
| 530 | 576 | |
| 531 | 577 | static void atk_text_interface_init(AtkTextIface *iface) |
| 532 | 578 | { |
| ... | ... | @@ -547,6 +593,9 @@ static void atk_text_interface_init(AtkTextIface *iface) |
| 547 | 593 | iface->remove_selection = v3270_accessible_remove_selection; |
| 548 | 594 | iface->set_selection = v3270_accessible_set_selection; |
| 549 | 595 | iface->get_selection = v3270_accessible_get_selection; |
| 596 | + iface->get_run_attributes = v3270_accessible_get_run_attributes; | |
| 597 | + iface->get_default_attributes = v3270_accessible_get_default_attributes; | |
| 598 | + | |
| 550 | 599 | |
| 551 | 600 | /* |
| 552 | 601 | http://git.gnome.org/browse/gtk+/tree/gtk/a11y/gtklabelaccessible.c |
| ... | ... | @@ -556,8 +605,6 @@ http://git.gnome.org/browse/gtk+/tree/gtk/a11y/gtklabelaccessible.c |
| 556 | 605 | iface->get_text_after_offset = gtk_label_accessible_get_text_after_offset; |
| 557 | 606 | |
| 558 | 607 | |
| 559 | - iface->get_run_attributes = gtk_label_accessible_get_run_attributes; | |
| 560 | - iface->get_default_attributes = gtk_label_accessible_get_default_attributes; | |
| 561 | 608 | */ |
| 562 | 609 | } |
| 563 | 610 | ... | ... |
src/gtk/v3270/mouse.c
| ... | ... | @@ -87,11 +87,13 @@ static void button_1_press(GtkWidget *widget, GdkEventType type, int baddr) |
| 87 | 87 | break; |
| 88 | 88 | |
| 89 | 89 | case GDK_2BUTTON_PRESS: // Double click - Select word |
| 90 | - lib3270_select_word(GTK_V3270(widget)->host,baddr); | |
| 90 | + if(lib3270_select_word_at(GTK_V3270(widget)->host,baddr)); | |
| 91 | + lib3270_ring_bell(GTK_V3270(widget)->host); | |
| 91 | 92 | break; |
| 92 | 93 | |
| 93 | 94 | case GDK_3BUTTON_PRESS: // Triple clock - Select field |
| 94 | - lib3270_select_field_at(GTK_V3270(widget)->host,baddr); | |
| 95 | + if(lib3270_select_field_at(GTK_V3270(widget)->host,baddr)) | |
| 96 | + lib3270_ring_bell(GTK_V3270(widget)->host); | |
| 95 | 97 | break; |
| 96 | 98 | |
| 97 | 99 | #ifdef DEBUG | ... | ... |
src/include/lib3270.h
| ... | ... | @@ -695,6 +695,22 @@ |
| 695 | 695 | */ |
| 696 | 696 | LIB3270_EXPORT int lib3270_get_element(H3270 *h, int baddr, unsigned char *c, unsigned short *attr); |
| 697 | 697 | |
| 698 | + /** | |
| 699 | + * Get field region | |
| 700 | + * | |
| 701 | + * @param h Session handle. | |
| 702 | + * @param baddr Reference position to get the field start/stop offsets. | |
| 703 | + * @param start return location for start of selection, as a character offset. | |
| 704 | + * @param end return location for end of selection, as a character offset. | |
| 705 | + * | |
| 706 | + * @return Non 0 if invalid | |
| 707 | + * | |
| 708 | + */ | |
| 709 | + LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *hSession, int baddr, int *start, int *end); | |
| 710 | + | |
| 711 | + LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *hSession, int baddr, int *start, int *end); | |
| 712 | + | |
| 713 | + | |
| 698 | 714 | LIB3270_EXPORT int lib3270_set_model(H3270 *session, int model); |
| 699 | 715 | LIB3270_EXPORT int lib3270_get_model(H3270 *session); |
| 700 | 716 | ... | ... |
src/include/lib3270/selection.h
| ... | ... | @@ -35,7 +35,7 @@ |
| 35 | 35 | |
| 36 | 36 | LIB3270_EXPORT void lib3270_clear_selection(H3270 *session); |
| 37 | 37 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); |
| 38 | - LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr); | |
| 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 | 40 | |
| 41 | 41 | /** | ... | ... |
src/include/lib3270/session.h
src/lib3270/Makefile.in
| ... | ... | @@ -95,7 +95,7 @@ SOURCES = XtGlue.c init.c actions.c ansi.c charset.c ctlr.c \ |
| 95 | 95 | print.c printer.c proxy.c resources.c rpq.c screen.c see.c \ |
| 96 | 96 | sf.c tables.c telnet.c toggles.c trace_ds.c utf8.c util.c \ |
| 97 | 97 | xio.c resolver.c log.c paste.c macros.c fallbacks.c version.c \ |
| 98 | - selection.c | |
| 98 | + selection.c bounds.c | |
| 99 | 99 | |
| 100 | 100 | #---[ Misc targets ]----------------------------------------------------------- |
| 101 | 101 | ... | ... |
| ... | ... | @@ -0,0 +1,94 @@ |
| 1 | +/* | |
| 2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | |
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | |
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270. | |
| 5 | + * | |
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | |
| 7 | + * | |
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | |
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | |
| 10 | + * Free Software Foundation. | |
| 11 | + * | |
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | |
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | |
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | |
| 15 | + * obter mais detalhes. | |
| 16 | + * | |
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | |
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | |
| 19 | + * Place, Suite 330, Boston, MA, 02111-1307, USA | |
| 20 | + * | |
| 21 | + * Este programa está nomeado como bounds.c e possui - linhas de código. | |
| 22 | + * | |
| 23 | + * Contatos: | |
| 24 | + * | |
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 27 | + * licinio@bb.com.br (Licínio Luis Branco) | |
| 28 | + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | |
| 29 | + * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | |
| 30 | + * | |
| 31 | + */ | |
| 32 | + | |
| 33 | +#include "globals.h" | |
| 34 | + | |
| 35 | +/*--[ Implement ]------------------------------------------------------------------------------------*/ | |
| 36 | + | |
| 37 | +LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *session, int baddr, int *start, int *end) | |
| 38 | +{ | |
| 39 | + int first; | |
| 40 | + | |
| 41 | + CHECK_SESSION_HANDLE(session); | |
| 42 | + | |
| 43 | + if(!lib3270_connected(session)) | |
| 44 | + return -1; | |
| 45 | + | |
| 46 | + first = lib3270_field_addr(session,baddr); | |
| 47 | + | |
| 48 | + if(first < 0) | |
| 49 | + return -1; | |
| 50 | + | |
| 51 | + first++; | |
| 52 | + | |
| 53 | + if(start) | |
| 54 | + *start = first; | |
| 55 | + | |
| 56 | + if(end) | |
| 57 | + { | |
| 58 | + int maxlen = (session->rows * session->cols)-1; | |
| 59 | + *end = first + lib3270_field_length(session,first); | |
| 60 | + if(*end > maxlen) | |
| 61 | + *end = maxlen; | |
| 62 | + } | |
| 63 | + | |
| 64 | + return 0; | |
| 65 | +} | |
| 66 | + | |
| 67 | +LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *session, int baddr, int *start, int *end) | |
| 68 | +{ | |
| 69 | + int pos; | |
| 70 | + | |
| 71 | + CHECK_SESSION_HANDLE(session); | |
| 72 | + | |
| 73 | + if(!lib3270_connected(session) || isspace(session->text[baddr].chr)) | |
| 74 | + return -1; | |
| 75 | + | |
| 76 | + if(start) | |
| 77 | + { | |
| 78 | + for(pos = baddr; pos > 0 && !isspace(session->text[pos].chr);pos--); | |
| 79 | + | |
| 80 | + *start = pos > 0 ? pos+1 : 0; | |
| 81 | + } | |
| 82 | + | |
| 83 | + if(end) | |
| 84 | + { | |
| 85 | + int maxlen = session->rows * session->cols; | |
| 86 | + for(pos = baddr; pos < maxlen && !isspace(session->text[pos].chr);pos++); | |
| 87 | + | |
| 88 | + *end = pos < maxlen ? pos-1 : maxlen; | |
| 89 | + } | |
| 90 | + | |
| 91 | + return 0; | |
| 92 | +} | |
| 93 | + | |
| 94 | + | ... | ... |
src/lib3270/selection.c
| ... | ... | @@ -34,13 +34,16 @@ |
| 34 | 34 | #include <lib3270/session.h> |
| 35 | 35 | #include <lib3270/selection.h> |
| 36 | 36 | |
| 37 | - #define SELECTION_LEFT 0x01 | |
| 38 | - #define SELECTION_TOP 0x02 | |
| 39 | - #define SELECTION_RIGHT 0x04 | |
| 40 | - #define SELECTION_BOTTOM 0x08 | |
| 41 | - #define SELECTION_ACTIVE 0x10 | |
| 37 | + #define SELECTION_LEFT 0x01 | |
| 38 | + #define SELECTION_TOP 0x02 | |
| 39 | + #define SELECTION_RIGHT 0x04 | |
| 40 | + #define SELECTION_BOTTOM 0x08 | |
| 41 | + #define SELECTION_SINGLE_ROW 0x10 | |
| 42 | + #define SELECTION_SINGLE_COL 0x20 | |
| 42 | 43 | |
| 43 | - static void select_region(H3270 *h, int start, int end); | |
| 44 | + #define SELECTION_ACTIVE 0x80 | |
| 45 | + | |
| 46 | + static void do_select(H3270 *h, int start, int end, int rect); | |
| 44 | 47 | |
| 45 | 48 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 46 | 49 | |
| ... | ... | @@ -212,7 +215,7 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) |
| 212 | 215 | |
| 213 | 216 | cursor_move(session,end = baddr); |
| 214 | 217 | |
| 215 | - select_region(session,start,end); | |
| 218 | + do_select(session,start,end,lib3270_get_toggle(session,LIB3270_TOGGLE_RECTANGLE_SELECT)); | |
| 216 | 219 | |
| 217 | 220 | } |
| 218 | 221 | |
| ... | ... | @@ -231,12 +234,12 @@ LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end) |
| 231 | 234 | if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end) |
| 232 | 235 | return; |
| 233 | 236 | |
| 234 | - select_region(h,start,end); | |
| 237 | + do_select(h,start,end,lib3270_get_toggle(h,LIB3270_TOGGLE_RECTANGLE_SELECT)); | |
| 235 | 238 | cursor_move(h,h->select.end); |
| 236 | 239 | |
| 237 | 240 | } |
| 238 | 241 | |
| 239 | -static void select_region(H3270 *h, int start, int end) | |
| 242 | +static void do_select(H3270 *h, int start, int end, int rect) | |
| 240 | 243 | { |
| 241 | 244 | |
| 242 | 245 | // Do we really need to change selection? |
| ... | ... | @@ -246,10 +249,16 @@ static void select_region(H3270 *h, int start, int end) |
| 246 | 249 | h->select.start = start; |
| 247 | 250 | h->select.end = end; |
| 248 | 251 | |
| 249 | - if(lib3270_get_toggle(h,LIB3270_TOGGLE_RECTANGLE_SELECT)) | |
| 252 | + if(rect) | |
| 253 | + { | |
| 254 | + h->rectsel = 1; | |
| 250 | 255 | update_selected_rectangle(h); |
| 256 | + } | |
| 251 | 257 | else |
| 258 | + { | |
| 259 | + h->rectsel = 0; | |
| 252 | 260 | update_selected_region(h); |
| 261 | + } | |
| 253 | 262 | |
| 254 | 263 | if(!h->selected) |
| 255 | 264 | { |
| ... | ... | @@ -275,6 +284,12 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba |
| 275 | 284 | col = baddr % hSession->cols; |
| 276 | 285 | rc |= SELECTION_ACTIVE; |
| 277 | 286 | |
| 287 | + if( (hSession->select.start % hSession->cols) == (hSession->select.end % hSession->cols) ) | |
| 288 | + rc |= SELECTION_SINGLE_COL; | |
| 289 | + | |
| 290 | + if( (hSession->select.start / hSession->cols) == (hSession->select.end / hSession->cols) ) | |
| 291 | + rc |= SELECTION_SINGLE_ROW; | |
| 292 | + | |
| 278 | 293 | if( (col == 0) || !(hSession->text[baddr-1].attr & LIB3270_ATTR_SELECTED) ) |
| 279 | 294 | rc |= SELECTION_LEFT; |
| 280 | 295 | |
| ... | ... | @@ -290,57 +305,28 @@ LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int ba |
| 290 | 305 | return rc; |
| 291 | 306 | } |
| 292 | 307 | |
| 293 | -LIB3270_EXPORT void lib3270_select_word(H3270 *session, int baddr) | |
| 308 | +LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr) | |
| 294 | 309 | { |
| 295 | - int pos, len, start, end; | |
| 296 | - | |
| 297 | - CHECK_SESSION_HANDLE(session); | |
| 310 | + int start, end; | |
| 298 | 311 | |
| 299 | - if(!lib3270_connected(session) || isspace(session->text[baddr].chr)) | |
| 300 | - { | |
| 301 | - lib3270_ring_bell(session); | |
| 302 | - return; | |
| 303 | - } | |
| 312 | + if(lib3270_get_word_bounds(session,baddr,&start,&end)) | |
| 313 | + return -1; | |
| 304 | 314 | |
| 305 | - start = session->select.start; | |
| 306 | - for(pos = baddr; pos > 0 && !isspace(session->text[pos].chr);pos--); | |
| 307 | - start = pos > 0 ? pos+1 : 0; | |
| 315 | + trace("%s: baddr=%d start=%d end=%d",__FUNCTION__,baddr,start,end); | |
| 308 | 316 | |
| 309 | - len = session->rows * session->cols; | |
| 310 | - for(pos = baddr; pos < len && !isspace(session->text[pos].chr);pos++); | |
| 311 | - end = pos < len ? pos-1 : len; | |
| 317 | + do_select(session,start,end,0); | |
| 312 | 318 | |
| 313 | - select_region(session,start,end); | |
| 319 | + return 0; | |
| 314 | 320 | } |
| 315 | 321 | |
| 316 | 322 | LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr) |
| 317 | 323 | { |
| 318 | - int start, end,len; | |
| 319 | - | |
| 320 | - CHECK_SESSION_HANDLE(session); | |
| 321 | - | |
| 322 | - if(!lib3270_connected(session)) | |
| 323 | - { | |
| 324 | - lib3270_ring_bell(session); | |
| 325 | - return -1; | |
| 326 | - } | |
| 327 | - | |
| 328 | - start = lib3270_field_addr(session,baddr); | |
| 324 | + int start, end; | |
| 329 | 325 | |
| 330 | - if(start < 0) | |
| 331 | - { | |
| 332 | - lib3270_ring_bell(session); | |
| 326 | + if(lib3270_get_field_bounds(session,baddr,&start,&end)) | |
| 333 | 327 | return -1; |
| 334 | - } | |
| 335 | - | |
| 336 | - start++; | |
| 337 | 328 | |
| 338 | - len = (session->rows * session->cols)-1; | |
| 339 | - end = start + lib3270_field_length(session,start); | |
| 340 | - if(end > len) | |
| 341 | - end = len; | |
| 342 | - | |
| 343 | - select_region(session,start,end); | |
| 329 | + do_select(session,start,end,0); | |
| 344 | 330 | |
| 345 | 331 | return 0; |
| 346 | 332 | } |
| ... | ... | @@ -358,21 +344,8 @@ LIB3270_ACTION( selectall ) |
| 358 | 344 | |
| 359 | 345 | CHECK_SESSION_HANDLE(hSession); |
| 360 | 346 | |
| 361 | - select_region(hSession,0,hSession->rows*hSession->cols); | |
| 362 | -/* | |
| 363 | - len = hSession->rows*hSession->cols; | |
| 364 | - | |
| 365 | - for(baddr = 0; baddr < len; baddr++) | |
| 366 | - { | |
| 367 | - if(!(hSession->text[baddr].attr & LIB3270_ATTR_SELECTED)) | |
| 368 | - { | |
| 369 | - hSession->text[baddr].attr |= LIB3270_ATTR_SELECTED; | |
| 370 | - hSession->update(hSession,baddr,hSession->text[baddr].chr,hSession->text[baddr].attr,baddr == hSession->cursor_addr); | |
| 371 | - } | |
| 372 | - } | |
| 347 | + do_select(hSession,0,hSession->rows*hSession->cols,0); | |
| 373 | 348 | |
| 374 | - set_selected(hSession); | |
| 375 | -*/ | |
| 376 | 349 | return 0; |
| 377 | 350 | } |
| 378 | 351 | |
| ... | ... | @@ -385,7 +358,7 @@ LIB3270_ACTION( reselect ) |
| 385 | 358 | if(!lib3270_connected(hSession) || hSession->select.start == hSession->select.end || hSession->selected) |
| 386 | 359 | return 0; |
| 387 | 360 | |
| 388 | - select_region(hSession, hSession->select.start,hSession->select.end); | |
| 361 | + do_select(hSession, hSession->select.start,hSession->select.end,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECTANGLE_SELECT)); | |
| 389 | 362 | |
| 390 | 363 | return 0; |
| 391 | 364 | } |
| ... | ... | @@ -589,9 +562,9 @@ LIB3270_EXPORT int lib3270_move_selected_area(H3270 *hSession, int from, int to) |
| 589 | 562 | cols = hSession->cols - ((pos[f] % hSession->cols)+1); |
| 590 | 563 | } |
| 591 | 564 | |
| 592 | - step = (rows * hSession->cols) + cols; | |
| 565 | + step = (rows * hSession->cols) + cols; | |
| 593 | 566 | |
| 594 | - select_region(hSession,hSession->select.start + step,hSession->select.end + step); | |
| 567 | + do_select(hSession,hSession->select.start + step,hSession->select.end + step,hSession->rectsel); | |
| 595 | 568 | cursor_move(hSession,hSession->select.end); |
| 596 | 569 | |
| 597 | 570 | return from+step; |
| ... | ... | @@ -604,8 +577,6 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig |
| 604 | 577 | if(!lib3270_get_selection_bounds(h,&first,&last)) |
| 605 | 578 | return origin; |
| 606 | 579 | |
| 607 | - flag &= 0x1f; | |
| 608 | - | |
| 609 | 580 | trace("%s: flag=%04x",__FUNCTION__,flag); |
| 610 | 581 | |
| 611 | 582 | if(!flag) |
| ... | ... | @@ -629,9 +600,9 @@ LIB3270_EXPORT int lib3270_drag_selection(H3270 *h, unsigned char flag, int orig |
| 629 | 600 | origin = last = (row*h->cols) + (last%h->cols); |
| 630 | 601 | |
| 631 | 602 | if(first < last) |
| 632 | - select_region(h,first,last); | |
| 603 | + do_select(h,first,last,h->rectsel); | |
| 633 | 604 | else |
| 634 | - select_region(h,last,first); | |
| 605 | + do_select(h,last,first,h->rectsel); | |
| 635 | 606 | |
| 636 | 607 | cursor_move(h,h->select.end); |
| 637 | 608 | |
| ... | ... | @@ -683,7 +654,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir |
| 683 | 654 | return -1; |
| 684 | 655 | } |
| 685 | 656 | |
| 686 | - select_region(hSession,start,end); | |
| 657 | + do_select(hSession,start,end,hSession->rectsel); | |
| 687 | 658 | cursor_move(hSession,hSession->select.end); |
| 688 | 659 | |
| 689 | 660 | return 0; | ... | ... |