-Update::flags BufferView::dispatch(FuncRequest const & cmd)
+bool BufferView::dispatch(FuncRequest const & cmd)
{
//lyxerr << [ cmd = " << cmd << "]" << endl;
{
//lyxerr << [ cmd = " << cmd << "]" << endl;
<< " button[" << cmd.button() << ']');
Cursor & cur = d->cursor_;
<< " button[" << cmd.button() << ']');
Cursor & cur = d->cursor_;
- // Default Update flags.
- Update::flags updateFlags = Update::Force | Update::FitCursor;
switch (cmd.action) {
case LFUN_UNDO:
cur.message(_("Undo"));
cur.clearSelection();
switch (cmd.action) {
case LFUN_UNDO:
cur.message(_("Undo"));
cur.clearSelection();
cur.message(_("No further undo information"));
cur.message(_("No further undo information"));
- updateFlags = Update::None;
- }
break;
case LFUN_REDO:
cur.message(_("Redo"));
cur.clearSelection();
break;
case LFUN_REDO:
cur.message(_("Redo"));
cur.clearSelection();
cur.message(_("No further redo information"));
cur.message(_("No further redo information"));
- updateFlags = Update::None;
- }
break;
case LFUN_FONT_STATE:
break;
case LFUN_FONT_STATE:
theLyXFunc().dispatch(FuncRequest(
LFUN_BUFFER_SWITCH, b->absFileName()));
theLyXFunc().dispatch(cmd);
theLyXFunc().dispatch(FuncRequest(
LFUN_BUFFER_SWITCH, b->absFileName()));
theLyXFunc().dispatch(cmd);
- updateFlags = Update::None;
d->text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_);
//FIXME: what to do with cur.x_target()?
cur.finishUndo();
d->text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_);
//FIXME: what to do with cur.x_target()?
cur.finishUndo();
- // The metrics are already up to date. see scroll()
- updateFlags = Update::None;
break;
}
case LFUN_SCREEN_UP_SELECT:
case LFUN_SCREEN_DOWN_SELECT: {
break;
}
case LFUN_SCREEN_UP_SELECT:
case LFUN_SCREEN_DOWN_SELECT: {
+ // Those two are not ready yet for consumption.
+ return false;
+
cur.selHandle(true);
size_t initial_depth = cur.depth();
Point const p = getPos(cur, cur.boundary());
cur.selHandle(true);
size_t initial_depth = cur.depth();
Point const p = getPos(cur, cur.boundary());
// But no screen update is needed.
d->update_strategy_ = NoScreenUpdate;
buffer_.changed();
// But no screen update is needed.
d->update_strategy_ = NoScreenUpdate;
buffer_.changed();
- updateFlags = Update::Force | Update::FitCursor;
- updateFlags = Update::None;
/// return true for events that will handle.
FuncStatus getStatus(FuncRequest const & cmd);
/// execute the given function.
/// return true for events that will handle.
FuncStatus getStatus(FuncRequest const & cmd);
/// execute the given function.
- /// \return the Update::flags for further metrics update.
- Update::flags dispatch(FuncRequest const & argument);
+ /// \return true if the function has been processed.
+ bool dispatch(FuncRequest const & argument);
/// request an X11 selection.
/// \return the selected string.
/// request an X11 selection.
/// \return the selected string.
LyX::ref().session().bookmarks().clear();
break;
LyX::ref().session().bookmarks().clear();
break;
BOOST_ASSERT(theApp());
// Let the frontend dispatch its own actions.
if (theApp()->dispatch(cmd))
BOOST_ASSERT(theApp());
// Let the frontend dispatch its own actions.
if (theApp()->dispatch(cmd))
- // FIXME: Probably a good idea to inverse the Cursor and BufferView
- // dispatching.
+ BOOST_ASSERT(lyx_view_->view());
+ // Let the current BufferView dispatch its own actions.
+ if (view()->dispatch(cmd)) {
+ // The BufferView took care of its own updates if needed.
+ updateFlags = Update::None;
+ break;
+ }
// Let the current Cursor dispatch its own actions.
// Let the current Cursor dispatch its own actions.
- BOOST_ASSERT(lyx_view_->view());
view()->cursor().getPos(cursorPosBeforeDispatchX_,
cursorPosBeforeDispatchY_);
view()->cursor().dispatch(cmd);
updateFlags = view()->cursor().result().update();
view()->cursor().getPos(cursorPosBeforeDispatchX_,
cursorPosBeforeDispatchY_);
view()->cursor().dispatch(cmd);
updateFlags = view()->cursor().result().update();
- if (!view()->cursor().result().dispatched())
- // Let the current BufferView dispatch its own actions.
- updateFlags = view()->dispatch(cmd);
- break;
- }
+ // Verify that the action has been dispatched.
+ BOOST_ASSERT(view()->cursor().result().dispatched());
}
if (lyx_view_ && lyx_view_->buffer()) {
}
if (lyx_view_ && lyx_view_->buffer()) {
} else {
cur.undispatched();
}
} else {
cur.undispatched();
}
+ cur.updateFlags(Update::FitCursor);
break;
case LFUN_BUFFER_END:
break;
case LFUN_BUFFER_END:
} else {
cur.undispatched();
}
} else {
cur.undispatched();
}
+ cur.updateFlags(Update::FitCursor);
break;
case LFUN_CHAR_FORWARD:
break;
case LFUN_CHAR_FORWARD: