Hello Jean-Marc, > Fine. Do you know how to use "git commit --amend" (for updating commit) > and "git format-patch" (to send commit via e-mail)? Send it tomorrow if > you can, I cannot be sure I will have time this week end (family > pressure...).
I have used git commit --amend but not git format-patch. I will try to learn these things quickly. Sorry for the delay. It took much time than I thought. I will test the code with you patch in the other message and update the log accordingly. Following is my suggested log, when committing to the master, after deleting merges that I have done so far. It would be very helpful, even if you can quickly go through it. (also can find at: https://dl.dropboxusercontent.com/u/105510128/Log-master) [Feature] Key board based horizontal scrolling for math insets This feature also applicable for other insets; graphics and labels. Although the initial implementation was started with scrolling the whole content of the document at once when traverse through a too wide row, the current implementation is capable of scrolling a single row when reaching its content which is beyond the screen limits, using left and right arrow keys. The attribute 'left_edge_' introduced in the Cursor plays a main role in horizontal scrolling of the wide rows that grow beyond the screen limits. This attribute represents by how much pixels the current row that the text cursor lies in should be get scrolled. The main logic that is responsible for drawing the scrolled rows was started within TextMetrics::drawParagraph and later moved to BufferView. * The main logic is called via BufferView::draw. * What this does is set the left_edge_ attribute in Cursor in order to show the position that the text cursor lies in. * To make sure that BufferView::draw gets involved when Update flag is FitCursor necessary changes are made in BufferView::processUpdateFlags. Basically what the logic that used to set the left_edge_ does is, * The row which the text cursor lies in is identified by a CursorSlice that points to the beginning of the row. This is the 'rowSlice' variable used in checkCursorLeftEdge in BufferView. The Cursor members are modified correspondingly to obtain this variable. Here row objects were not used to identify the current row, because it appears that row objects can disappear when doing a decoration update for example. This means that comparing row pointers is not a good idea, be cause they can change without notice. * Using Cursor::setCurrentRowSlice reset left_edge_ when changing cursor row. This is done in order to prevent unwanted scrolling that happens when changing the selected row using up and down arrow keys. * Recompute inset positions before checking left edge of the row, by painting the row insets with drawing disabled. This is done because, some of the position calculations of math insets are taken place within the drawing procedure. * Current x position of the text cursor is compared with the left_edge_ value and the other variables like row.width(), bv.workWidth(). Compute the needed left_edge_ value in order to show where the text cursor lies in. The basics conditions that we check before recomputing left_edge_ are, if the text cursor lies rightward to the current right screen boundary, if the text cursor lies leftward to the current left screen boundary, if the text cursor lies within screen boundaries but the length of the row is lesser than the left boundary of the screen (this happens when we delete some content of the row using delete key or backspace key). * Change update strategy when left edge has changed. This allows to redraw the row when no drawing was scheduled. By doing so, it was possible to redraw a wide row when moving to the leftmost position of the wide row, from the leftmost position of the row below, using the left arrow key. In TextMetrics::drawParagraph it is checked whether the current row is what is drawing now. If it is so, the value used to the x value of the row for drawing is adapted according to the computed value of left_edge_ of Cursor. The method used to pass boundary() was fixed to get row when cursor was in a nested inset. This matter is considered Cursor::textRow is modified and Cursor::bottomRow is created which returns the the top-level row that holds the cursor. GuiWorkArea::Private::showCursor() is modified to show the cursor position in a scrolled row.