On Sun, 2006-01-22 at 20:43 +0100, Andre Poenitz wrote:
> > The patch makes cursor movement a little more generous ;-)
> 
> A comment stating this would be in order...
> 
> Andre'

OK, see attached.

Would somebody test this, please?

Further remarks:

1) I don't think it is possible to get this completely right. A constant
of 16 works well on the display math examples in the User Guide. Makeing
it too big would lead to sometimes skipping over a  row, which isn't
acceptable either. 16 seems a good compromise.

2) There is still the older patch from last Saturday  pending (rel<->abs
cursor positioning in bruteFind2; Lars?) The current patch makes little
sense without that one first :-)

I attached that one again too. And yes, the definition of inset must be
this way for it to compile...

- Martin

Index: text2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
retrieving revision 1.637
diff -u -p -r1.637 text2.C
--- text2.C	4 Jan 2006 14:24:40 -0000	1.637
+++ text2.C	23 Jan 2006 08:21:02 -0000
@@ -1031,7 +1046,9 @@ bool LyXText::cursorUp(LCursor & cur)
 	if (!cur.selection()) {
 		int const y = bv_funcs::getPos(cur, cur.boundary()).y_;
 		LCursor old = cur;
-		editXY(cur, x, y - par.rows()[row].ascent() - 1);
+		// Go to middle of previous row. 16 found to work OK;
+		// 12 = top/bottom margin of display math
+		editXY(cur, x, y - par.rows()[row].ascent() - 16);
 		cur.clearSelection();
 
 		// This happens when you move out of an inset.
@@ -1077,7 +1094,8 @@ bool LyXText::cursorDown(LCursor & cur)
 	if (!cur.selection()) {
 		int const y = bv_funcs::getPos(cur, cur.boundary()).y_;
 		LCursor old = cur;
-		editXY(cur, x, y + par.rows()[row].descent() + 1);
+		// To middle of next row
+		editXY(cur, x, y + par.rows()[row].descent() + 16);
 		cur.clearSelection();
 
 		// This happens when you move out of an inset.
Index: cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
retrieving revision 1.142
diff -u -p -r1.142 cursor.C
--- cursor.C	19 Jan 2006 15:49:20 -0000	1.142
+++ cursor.C	23 Jan 2006 08:27:38 -0000
@@ -97,7 +97,13 @@ namespace {
 		for (size_t i = 0; ; ++i) {
 			int xo;
 			int yo;
-			it.inset().cursorPos(it.top(), c.boundary() && ((i+1) == it.depth()), xo, yo);
+			//InsetBase const * inset(const_cast<InsetBase *>(&it.inset()));
+			InsetBase const * inset = &it.inset();
+			Point o = theCoords.getInsets().xy(inset);
+			inset->cursorPos(it.top(), c.boundary() /* && ((i+1) == it.depth())*/, xo, yo);
+			// Convert to absolute
+			xo += o.x_;
+			yo += o.y_;
 			double d = (x - xo) * (x - xo) + (y - yo) * (y - yo);
 			// '<=' in order to take the last possible position
 			// this is important for clicking behind \sum in e.g. '\sum_i a'

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to