}
-static bool getLocalStatus(Cursor cursor, FuncRequest const & cmd, FuncStatus & status)
-{
- // Try to fix cursor in case it is broken.
- cursor.fixIfBroken();
-
- // This is, of course, a mess. Better create a new doc iterator and use
- // this in Inset::getStatus. This might require an additional
- // BufferView * arg, though (which should be avoided)
- //Cursor safe = *this;
- bool res = false;
- for ( ; cursor.depth(); cursor.pop()) {
- //lyxerr << "\nCursor::getStatus: cmd: " << cmd << endl << *this << endl;
- LASSERT(cursor.idx() <= cursor.lastidx(), /**/);
- LASSERT(cursor.pit() <= cursor.lastpit(), /**/);
- LASSERT(cursor.pos() <= cursor.lastpos(), /**/);
-
- // The inset's getStatus() will return 'true' if it made
- // a definitive decision on whether it want to handle the
- // request or not. The result of this decision is put into
- // the 'status' parameter.
- if (cursor.inset().getStatus(cursor, cmd, status)) {
- res = true;
- break;
- }
- }
- return res;
-}
-
-
bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
{
// Can we use a readonly buffer?
Cursor & cur = d->cursor_;
- // Is this a function that acts on inset at point?
- Inset * inset = cur.nextInset();
- if (lyxaction.funcHasFlag(cmd.action, LyXAction::AtPoint)
- && inset && inset->getStatus(cur, cmd, flag))
- return true;
-
- if (getLocalStatus(cur, cmd, flag))
+ if (cur.getStatus(cmd, flag))
return true;
switch (cmd.action) {
Cursor & cur = d->cursor_;
// Don't dispatch function that does not apply to internal buffers.
- if (buffer_.isInternal() && lyxaction.funcHasFlag(cmd.action, LyXAction::NoInternal))
+ if (buffer_.isInternal()
+ && lyxaction.funcHasFlag(cmd.action, LyXAction::NoInternal))
return false;
// We'll set this back to false if need be.
bool dispatched = true;
- if (cmd.action != LFUN_UNDO && cmd.action != LFUN_REDO)
- buffer_.undo().beginUndoGroup();
+ buffer_.undo().beginUndoGroup();
switch (cmd.action) {
break;
}
- case LFUN_WORD_FINDADV:
- findAdv(this, cmd);
+ case LFUN_WORD_FINDADV: {
+ FindAndReplaceOptions opt;
+ istringstream iss(to_utf8(cmd.argument()));
+ iss >> opt;
+ if (findAdv(this, opt))
+ cur.dispatched();
+ else
+ cur.undispatched();
break;
+ }
case LFUN_MARK_OFF:
cur.clearSelection();
break;
}
- if (cmd.action != LFUN_UNDO && cmd.action != LFUN_REDO)
- buffer_.undo().endUndoGroup();
+ buffer_.undo().endUndoGroup();
return dispatched;
}
if (!do_selection && d->cursor_.inTexted())
update |= checkDepm(cur, d->cursor_);
- d->cursor_.resetAnchor();
+ if (!do_selection)
+ d->cursor_.resetAnchor();
d->cursor_.setCursor(cur);
d->cursor_.boundary(cur.boundary());
if (do_selection)