]> git.lyx.org Git - lyx.git/commitdiff
* src/text3.C (dispatch): merge the SELECT and non-SELECT cursor
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 13 Jul 2006 07:43:48 +0000 (07:43 +0000)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 13 Jul 2006 07:43:48 +0000 (07:43 +0000)
movement LFUNs; use LCursor::selHandle consistently (fixes bugs 2119
and 2259, and also a crash related to with dEPM)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14436 a592a061-630c-0410-9148-cb99ea01b6c8

src/text3.C

index 4a494ecd466867590e8a0f0eb46833f58adf02bf..5b2aecec628f2d3b2e8ef2196b967e7aeb89f143 100644 (file)
@@ -399,65 +399,21 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                finishChange(cur, false);
                break;
 
-       case LFUN_WORD_FORWARD:
-               if (!cur.mark())
-                       cur.clearSelection();
-               if (isRTL(cur.paragraph()))
-                       needsUpdate = cursorLeftOneWord(cur);
-               else
-                       needsUpdate = cursorRightOneWord(cur);
-               finishChange(cur, false);
-               break;
-
-       case LFUN_WORD_BACKWARD:
-               if (!cur.mark())
-                       cur.clearSelection();
-               if (isRTL(cur.paragraph()))
-                       needsUpdate = cursorRightOneWord(cur);
-               else
-                       needsUpdate = cursorLeftOneWord(cur);
-               finishChange(cur, false);
-               break;
-
        case LFUN_BUFFER_BEGIN:
-               if (cur.depth() == 1) {
-                       if (!cur.mark())
-                               cur.clearSelection();
-                       needsUpdate = cursorTop(cur);
-                       finishChange(cur, false);
-               } else {
-                       cur.undispatched();
-               }
-               break;
-
        case LFUN_BUFFER_BEGIN_SELECT:
+               cur.selHandle(cmd.action == LFUN_BUFFER_BEGIN_SELECT);
                if (cur.depth() == 1) {
-                       if (!cur.selection())
-                               cur.resetAnchor();
                        needsUpdate = cursorTop(cur);
-                       finishChange(cur, true);
                } else {
                        cur.undispatched();
                }
                break;
 
        case LFUN_BUFFER_END:
-               if (cur.depth() == 1) {
-                       if (!cur.mark())
-                               cur.clearSelection();
-                       needsUpdate = cursorBottom(cur);
-                       finishChange(cur, false);
-               } else {
-                       cur.undispatched();
-               }
-               break;
-
        case LFUN_BUFFER_END_SELECT:
+               cur.selHandle(cmd.action == LFUN_BUFFER_END_SELECT);
                if (cur.depth() == 1) {
-                       if (!cur.selection())
-                               cur.resetAnchor();
                        needsUpdate = cursorBottom(cur);
-                       finishChange(cur, true);
                } else {
                        cur.undispatched();
                }
@@ -525,83 +481,72 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_PARAGRAPH_UP:
-               if (!cur.mark())
-                       cur.clearSelection();
-               needsUpdate = cursorUpParagraph(cur);
-               finishChange(cur, false);
-               break;
-
        case LFUN_PARAGRAPH_UP_SELECT:
-               if (!cur.selection())
-                       cur.resetAnchor();
-               cursorUpParagraph(cur);
-               finishChange(cur, true);
+               cur.selHandle(cmd.action == LFUN_PARAGRAPH_UP_SELECT);
+               needsUpdate = cursorUpParagraph(cur);
                break;
 
        case LFUN_PARAGRAPH_DOWN:
-               if (!cur.mark())
-                       cur.clearSelection();
-               needsUpdate = cursorDownParagraph(cur);
-               finishChange(cur, false);
-               break;
-
        case LFUN_PARAGRAPH_DOWN_SELECT:
-               if (!cur.selection())
-                       cur.resetAnchor();
-               cursorDownParagraph(cur);
-               finishChange(cur, true);
+               cur.selHandle(cmd.action == LFUN_PARAGRAPH_DOWN_SELECT);
+               needsUpdate = cursorDownParagraph(cur);
                break;
 
+       case LFUN_SCREEN_UP:
        case LFUN_SCREEN_UP_SELECT:
                update(cur);
-               if (!cur.selection())
-                       cur.resetAnchor();
-               needsUpdate = cursorPrevious(cur);
-               finishChange(cur, true);
+               cur.selHandle(cmd.action == LFUN_SCREEN_UP_SELECT);
+               if (cur.pit() == 0 && cur.textRow().pos() == 0) {
+                       cur.undispatched();
+                       cmd = FuncRequest(LFUN_FINISHED_UP);
+               } else {
+                       needsUpdate = cursorPrevious(cur);
+               }
                break;
 
+       case LFUN_SCREEN_DOWN:
        case LFUN_SCREEN_DOWN_SELECT:
                update(cur);
-               if (!cur.selection())
-                       cur.resetAnchor();
-               needsUpdate = cursorNext(cur);
-               finishChange(cur, true);
+               cur.selHandle(cmd.action == LFUN_SCREEN_DOWN_SELECT);
+               if (cur.pit() == cur.lastpit()
+                         && cur.textRow().endpos() == cur.lastpos()) {
+                       cur.undispatched();
+                       cmd = FuncRequest(LFUN_FINISHED_DOWN);
+               } else {
+                       needsUpdate = cursorNext(cur);
+               }
                break;
 
+       case LFUN_LINE_BEGIN:
        case LFUN_LINE_BEGIN_SELECT:
                update(cur);
-               if (!cur.selection())
-                       cur.resetAnchor();
+               cur.selHandle(cmd.action == LFUN_LINE_BEGIN_SELECT);
                needsUpdate = cursorHome(cur);
-               finishChange(cur, true);
                break;
 
+       case LFUN_LINE_END:
        case LFUN_LINE_END_SELECT:
                update(cur);
-               if (!cur.selection())
-                       cur.resetAnchor();
+               cur.selHandle(cmd.action == LFUN_LINE_END_SELECT);
                needsUpdate = cursorEnd(cur);
-               finishChange(cur, true);
                break;
 
+       case LFUN_WORD_FORWARD:
        case LFUN_WORD_FORWARD_SELECT:
-               if (!cur.selection())
-                       cur.resetAnchor();
+               cur.selHandle(cmd.action == LFUN_WORD_FORWARD_SELECT);
                if (isRTL(cur.paragraph()))
-                       cursorLeftOneWord(cur);
+                       needsUpdate = cursorLeftOneWord(cur);
                else
-                       cursorRightOneWord(cur);
-               finishChange(cur, true);
+                       needsUpdate = cursorRightOneWord(cur);
                break;
 
+       case LFUN_WORD_BACKWARD:
        case LFUN_WORD_BACKWARD_SELECT:
-               if (!cur.selection())
-                       cur.resetAnchor();
+               cur.selHandle(cmd.action == LFUN_WORD_BACKWARD_SELECT);
                if (isRTL(cur.paragraph()))
-                       cursorRightOneWord(cur);
+                       needsUpdate = cursorRightOneWord(cur);
                else
-                       cursorLeftOneWord(cur);
-               finishChange(cur, true);
+                       needsUpdate = cursorLeftOneWord(cur);
                break;
 
        case LFUN_WORD_SELECT: {
@@ -610,47 +555,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_SCREEN_UP:
-               update(cur);
-               if (!cur.mark())
-                       cur.clearSelection();
-               finishChange(cur, false);
-               if (cur.pit() == 0 && cur.textRow().pos() == 0) {
-                       cur.undispatched();
-                       cmd = FuncRequest(LFUN_FINISHED_UP);
-               } else {
-                       needsUpdate = cursorPrevious(cur);
-               }
-               break;
-
-       case LFUN_SCREEN_DOWN:
-               update(cur);
-               if (!cur.mark())
-                       cur.clearSelection();
-               finishChange(cur, false);
-               if (cur.pit() == cur.lastpit()
-                         && cur.textRow().endpos() == cur.lastpos()) {
-                       cur.undispatched();
-                       cmd = FuncRequest(LFUN_FINISHED_DOWN);
-               } else {
-                       needsUpdate = cursorNext(cur);
-               }
-               break;
-
-       case LFUN_LINE_BEGIN:
-               if (!cur.mark())
-                       cur.clearSelection();
-               needsUpdate = cursorHome(cur);
-               finishChange(cur, false);
-               break;
-
-       case LFUN_LINE_END:
-               if (!cur.mark())
-                       cur.clearSelection();
-               needsUpdate = cursorEnd(cur);
-               finishChange(cur, false);
-               break;
-
        case LFUN_BREAK_LINE: {
                // Not allowed by LaTeX (labels or empty par)
                if (cur.pos() > cur.paragraph().beginOfBody()) {