bool isInside(DocIterator const & it, MathArray const & ar,
lyx::pos_type p1, lyx::pos_type p2)
{
- for (size_t i = 0; i != it.size(); ++i) {
+ for (size_t i = 0; i != it.depth(); ++i) {
CursorSlice const & sl = it[i];
if (sl.inset().inMathed() && &sl.cell() == &ar)
return p1 <= sl.pos() && sl.pos() < p2;
currx += glue;
currx += (*it)->width();
}
+
if (abs(lastx - targetx) < abs(currx - targetx) && it != begin())
--it;
+ // The below code guarantees that in this slice, the cursor will
+ // never be on the right edge of an inset after a mouse click.
+ if (it != begin())
+ --it;
+ if (it < end() && (*it)->getChar())
+ ++it;
+
return it - begin();
}
void MathArray::setXY(int x, int y) const
{
//lyxerr << "setting position cache for MathArray " << this << std::endl;
- theCoords.arrays_.add(this, x, y);
+ theCoords.arrays().add(this, x, y);
}
int MathArray::xo() const
{
- return theCoords.arrays_.x(this);
+ return theCoords.getArrays().x(this);
}
int MathArray::yo() const
{
- return theCoords.arrays_.y(this);
+ return theCoords.getArrays().y(this);
}
-