Jean-Marc Lasgouttes wrote: > The test is bogus, you should pass true to selHandle, or merge > LFUN_ENDBUFSEL and LFUN_ENDBUF.
true, I justed missed the rationale of the test. The attached is better, of course. > Juergen> This patch also fixes bug 2119 (Selection of text via > Juergen> keyboard sometimes fails) and bug 2259 (screen-up/down-select > Juergen> do not work). > > Juergen> Too late for 1.4.2? > > Not necessarily, it is kind of obvious. Given that it fixes 3 bugs, one of it critical, another pretty annoying, it would be nice to have. > This needs testing. I tested it, so I need volunteers now. Jürgen
Index: src/ChangeLog =================================================================== --- src/ChangeLog (Revision 14429) +++ src/ChangeLog (Arbeitskopie) @@ -1,3 +1,8 @@ +2006-07-12 Jürgen Spitzmüller <[EMAIL PROTECTED]> + + * text3.C (dispatch): use selHandle instead of just resetting + the anchor in the *SEL lfuns (fixes bugs 2683, 2119 and 2259). + 2006-07-07 Jean-Marc Lasgouttes <[EMAIL PROTECTED]> * rowpainter.h (rightMargin): reduce to 10 pixels, like the left Index: src/text3.C =================================================================== --- src/text3.C (Revision 14429) +++ src/text3.C (Arbeitskopie) @@ -396,8 +396,7 @@ void LyXText::dispatch(LCursor & cur, Fu case LFUN_BEGINNINGBUFSEL: if (cur.depth() == 1) { - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorTop(cur); finishChange(cur, true); } else { @@ -418,8 +417,7 @@ void LyXText::dispatch(LCursor & cur, Fu case LFUN_ENDBUFSEL: if (cur.depth() == 1) { - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorBottom(cur); finishChange(cur, true); } else { @@ -496,8 +494,7 @@ void LyXText::dispatch(LCursor & cur, Fu break; case LFUN_UP_PARAGRAPHSEL: - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); cursorUpParagraph(cur); finishChange(cur, true); break; @@ -510,47 +507,41 @@ void LyXText::dispatch(LCursor & cur, Fu break; case LFUN_DOWN_PARAGRAPHSEL: - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); cursorDownParagraph(cur); finishChange(cur, true); break; case LFUN_PRIORSEL: update(cur); - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorPrevious(cur); finishChange(cur, true); break; case LFUN_NEXTSEL: update(cur); - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorNext(cur); finishChange(cur, true); break; case LFUN_HOMESEL: update(cur); - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorHome(cur); finishChange(cur, true); break; case LFUN_ENDSEL: update(cur); - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); needsUpdate = cursorEnd(cur); finishChange(cur, true); break; case LFUN_WORDRIGHTSEL: - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); if (isRTL(cur.paragraph())) cursorLeftOneWord(cur); else @@ -559,8 +550,7 @@ void LyXText::dispatch(LCursor & cur, Fu break; case LFUN_WORDLEFTSEL: - if (!cur.selection()) - cur.resetAnchor(); + cur.selHandle(true); if (isRTL(cur.paragraph())) cursorRightOneWord(cur); else