Hello Jean-Marc,

> Identified another two bugs...
> 1) When moving from the left most position of a row to the above too wide
> row using left arrow, row does not get slide. (I think I found a fix for
> this, have to test more)

Here is what I observe:
https://dl.dropboxusercontent.com/u/105510128/Bug_2.webm

And here is the suggested fix. I used the code segments that you suggested
for Home/End problem. Otherwise no way, I would find an easy fix :)
When debugging I found that at some point a FullScreenUpdate get called.
After that, this problem no longer remains. You can see that in the video I
have recorded.

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 7e29216..eb212f3 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -2847,6 +2847,7 @@ void checkCursorLeftEdge(PainterInfo & pi, Cursor const & 
        Bidi bidi;
        Row const & row = cur.bottomRow();
        BufferView const & bv = cur.bv();
+       bool row_need_slide = false;
 
        // Set the row on which the cursor lives.
        cur.setCurrentRow(&row);
@@ -2868,11 +2869,22 @@ void checkCursorLeftEdge(PainterInfo & pi, Cursor const 
        // If need to slide right
        if (cur_x < left_edge + 10) {
                left_edge = cur_x - 10;
+               row_need_slide = true;
        }
 
        // If need to slide left ()
        else if (cur_x > left_edge + bv.workWidth() - 10) {
                left_edge = cur_x - bv.workWidth() + 10;
+               row_need_slide = true;
+       }
+
+       if (cur.getCurrentRow() != cur.getPreviousRow() 
+           && strategy == NoScreenUpdate
+           && row_need_slide) {
+               ScreenUpdateStrategy const oldstrat = strategy;
+               strategy = FullScreenUpdate;
+               LYXERR0("leftEdge: " << cur.getLeftEdge() 
<< " => " << left_edge
+                       << ", Update strategy " << oldstrat 
<< " => " << strateg
        }
 
        cur.setLeftEdge(left_edge);

I used this boolean to improve the efficiency. That is only call a
FullScreeUpdate when moving from a lower roe to a too wide row. But without
this boolean the behaviour is different. 

With the boolean, when we move from the right most position of a too wide
row to the below row (using right arrow), the too wide row will not slide
back to left most position. But later when moving across other row, that
slides back. 

Without the boolean, when we move from the right most position of a too wide
row to the below row (using right arrow), the too wide row get slide back to
left most position. I think this is the behaviour that we are expecting. But
calling a FullScreenUpdate each and every time moving between rows is not
efficient. If we can find a way to identify that the cursor just moved from
a too wide row, the problem will get solved.


> 2) When selecting rage of text from left to right, we cannot drag and select
> if the screen is maximized. We can select beyond screen limit if LyX screen
> is not maximized (have some space between the right edge of original
> computer screen and LyX scree's right edge). But i out example, cannot
> select beyond the '{' character. Do not know the reason for this.

Sorry I was wrong with the saying; "When selecting rage of text from left to
right, we cannot drag and select if the screen is maximized." Others are
correct. Problem is why selection cannot be done beyond the brace.

Demonstrating this bug:
https://dl.dropboxusercontent.com/u/105510128/Bug_3.webm
 
Thanks
Hashini





Reply via email to