Preventive fix inspired from ~

This commit is contained in:
Guillaume Munch 2017-03-10 23:20:29 +01:00
parent b034389e6d
commit 22edb3df96

View File

@ -1361,18 +1361,23 @@ Inset * TextMetrics::editXY(Cursor & cur, int x, int y,
if (edited == inset && cur.pos() == it->pos) {
// non-editable inset, set cursor after the inset if x is
// nearer to that position (bug 9628)
// TODO: This should be replaced with an improvement of
// Cursor::moveToClosestEdge that handles rtl text. (Which could not
// be tested because of #10569.)
CoordCache::Insets const & insetCache = bv_->coordCache().getInsets();
Dimension const & dim = insetCache.dim(inset);
Point p = insetCache.xy(inset);
bool const is_rtl = text_->isRTL(text_->getPar(pit));
if (is_rtl) {
// "in front of" == "right of"
if (abs(p.x_ - x) < abs(p.x_ + dim.wid - x))
cur.posForward();
} else {
// "in front of" == "left of"
if (abs(p.x_ + dim.wid - x) < abs(p.x_ - x))
cur.posForward();
if (insetCache.has(inset)) {
Dimension const & dim = insetCache.dim(inset);
Point p = insetCache.xy(inset);
bool const is_rtl = text_->isRTL(text_->getPar(pit));
if (is_rtl) {
// "in front of" == "right of"
if (abs(p.x_ - x) < abs(p.x_ + dim.wid - x))
cur.posForward();
} else {
// "in front of" == "left of"
if (abs(p.x_ + dim.wid - x) < abs(p.x_ - x))
cur.posForward();
}
}
}