Commit d1d71e35799323ab5c5c1414ca105c35cbd716d2

Authored by perry.werneck@gmail.com
1 parent 473b5e60

Rômulo Silva Neiva - 29 de agosto de 2012 07:54

 * a rolagem do cursor para nas bordas superior e inferior ou seja, não percorre a janela ciclicamente.
Showing 1 changed file with 17 additions and 4 deletions   Show diff stats
@@ -695,6 +695,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir @@ -695,6 +695,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir
695 LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, unsigned char sel) 695 LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, unsigned char sel)
696 { 696 {
697 int cursor_addr = hSession->cursor_addr; 697 int cursor_addr = hSession->cursor_addr;
  698 + int maxlen = hSession->cols * hSession->rows;
698 699
699 if(!lib3270_connected(hSession)) 700 if(!lib3270_connected(hSession))
700 return -1; 701 return -1;
@@ -702,25 +703,25 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u @@ -702,25 +703,25 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
702 switch(dir) 703 switch(dir)
703 { 704 {
704 case LIB3270_DIR_UP: 705 case LIB3270_DIR_UP:
705 - if(cursor_addr <= hSession->cols) 706 + if(sel && cursor_addr <= hSession->cols)
706 return EINVAL; 707 return EINVAL;
707 cursor_addr -= hSession->cols; 708 cursor_addr -= hSession->cols;
708 break; 709 break;
709 710
710 case LIB3270_DIR_DOWN: 711 case LIB3270_DIR_DOWN:
711 - if(cursor_addr >= (hSession->cols * (hSession->rows-1))) 712 + if(sel && cursor_addr >= (hSession->cols * (hSession->rows-1)))
712 return EINVAL; 713 return EINVAL;
713 cursor_addr += hSession->cols; 714 cursor_addr += hSession->cols;
714 break; 715 break;
715 716
716 case LIB3270_DIR_LEFT: 717 case LIB3270_DIR_LEFT:
717 - if( (cursor_addr % hSession->cols) < 1) 718 + if(sel && (cursor_addr % hSession->cols) < 1)
718 return EINVAL; 719 return EINVAL;
719 cursor_addr--; 720 cursor_addr--;
720 break; 721 break;
721 722
722 case LIB3270_DIR_RIGHT: 723 case LIB3270_DIR_RIGHT:
723 - if( (cursor_addr % hSession->cols) >= (hSession->cols-1)) 724 + if(sel && (cursor_addr % hSession->cols) >= (hSession->cols-1))
724 return EINVAL; 725 return EINVAL;
725 cursor_addr++; 726 cursor_addr++;
726 break; 727 break;
@@ -730,9 +731,21 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u @@ -730,9 +731,21 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
730 } 731 }
731 732
732 if(sel) 733 if(sel)
  734 + {
733 lib3270_select_to(hSession,cursor_addr); 735 lib3270_select_to(hSession,cursor_addr);
  736 + }
  737 + else if(cursor_addr >= maxlen)
  738 + {
  739 + cursor_move(hSession,cursor_addr % maxlen);
  740 + }
  741 + else if(cursor_addr < 0)
  742 + {
  743 + cursor_move(hSession,cursor_addr + maxlen);
  744 + }
734 else 745 else
  746 + {
735 cursor_move(hSession,cursor_addr); 747 cursor_move(hSession,cursor_addr);
  748 + }
736 749
737 return 0; 750 return 0;
738 } 751 }