*/
#include <config.h>
-#include <vector>
#include "LyXFunc.h"
#include "Converter.h"
#include "Cursor.h"
#include "CutAndPaste.h"
-#include "support/debug.h"
#include "DispatchResult.h"
#include "Encoding.h"
#include "ErrorList.h"
#include "Format.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
-#include "support/gettext.h"
#include "InsetIterator.h"
#include "Intl.h"
#include "KeyMap.h"
#include "Server.h"
#include "Session.h"
#include "TextClassList.h"
-#include "ToolbarBackend.h"
#include "insets/InsetBox.h"
#include "insets/InsetBranch.h"
#include "frontends/LyXView.h"
#include "frontends/Selection.h"
+#include "support/debug.h"
#include "support/environment.h"
#include "support/FileName.h"
#include "support/filetools.h"
+#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/Path.h"
#include "support/Package.h"
#include "support/os.h"
#include <sstream>
+#include <vector>
using namespace std;
using namespace lyx::support;
namespace Alert = frontend::Alert;
-extern bool quitting;
-extern bool use_gui;
-
namespace {
dispatch(FuncRequest(LFUN_SELF_INSERT, arg,
FuncRequest::KEYBOARD));
LYXERR(Debug::KEY, "SelfInsert arg[`" << to_utf8(arg) << "']");
+ lyx_view_->updateCompletion(true, true);
}
} else {
dispatch(func);
+ if (func.action == LFUN_CHAR_DELETE_BACKWARD)
+ // backspace is not a self-insertion. But it
+ // still should not hide the completion popup.
+ // FIXME: more clever way to detect those movements
+ lyx_view_->updateCompletion(false, true);
+ else
+ lyx_view_->updateCompletion(false, false);
}
- lyx_view_->restartCursor();
+ if (lyx_view_)
+ lyx_view_->restartCursor();
}
break;
case LFUN_TOOLBAR_TOGGLE:
- case LFUN_UI_TOGGLE:
case LFUN_INSET_APPLY:
case LFUN_BUFFER_WRITE:
case LFUN_BUFFER_WRITE_AS:
+ case LFUN_SPLIT_VIEW:
+ case LFUN_CLOSE_TAB_GROUP:
+ case LFUN_COMPLETION_POPUP:
+ case LFUN_COMPLETION_INLINE:
+ case LFUN_COMPLETION_COMPLETE:
if (lyx_view_)
return lyx_view_->getStatus(cmd);
enable = false;
case LFUN_DIALOG_HIDE:
case LFUN_DIALOG_DISCONNECT_INSET:
case LFUN_BUFFER_CHILD_OPEN:
+ case LFUN_UI_TOGGLE:
case LFUN_TOGGLE_CURSOR_FOLLOWS_SCROLLBAR:
case LFUN_KEYMAP_OFF:
case LFUN_KEYMAP_PRIMARY:
void loadTextClass(string const & name)
{
- pair<bool, textclass_type> const tc_pair =
+ pair<bool, TextClassIndex> const tc_pair =
textclasslist.numberOfClass(name);
if (!tc_pair.first) {
return;
}
- textclass_type const tc = tc_pair.second;
+ TextClassIndex const tc = tc_pair.second;
if (!textclasslist[tc].load()) {
docstring s = bformat(_("The document class %1$s."
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().getTextClassPtr();
+ TextClassIndex oldClass = buffer->params().textClassIndex();
Cursor & cur = view()->cursor();
cur.recordUndoFullDocument();
case LFUN_LAYOUT_MODULES_CLEAR: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().getTextClassPtr();
+ TextClassIndex oldClass = buffer->params().textClassIndex();
view()->cursor().recordUndoFullDocument();
buffer->params().clearLayoutModules();
buffer->params().makeTextClass();
case LFUN_LAYOUT_MODULE_ADD: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().getTextClassPtr();
+ TextClassIndex oldClass = buffer->params().textClassIndex();
view()->cursor().recordUndoFullDocument();
buffer->params().addLayoutModule(argument);
buffer->params().makeTextClass();
loadTextClass(argument);
- pair<bool, textclass_type> const tc_pair =
+ pair<bool, TextClassIndex> const tc_pair =
textclasslist.numberOfClass(argument);
if (!tc_pair.first)
break;
- textclass_type const old_class = buffer->params().getBaseClass();
- textclass_type const new_class = tc_pair.second;
+ TextClassIndex const old_class = buffer->params().baseClass();
+ TextClassIndex const new_class = tc_pair.second;
if (old_class == new_class)
// nothing to do
break;
//Save the old, possibly modular, layout for use in conversion.
- TextClassPtr oldClass = buffer->params().getTextClassPtr();
+ TextClassIndex oldClass = buffer->params().textClassIndex();
view()->cursor().recordUndoFullDocument();
buffer->params().setBaseClass(new_class);
buffer->params().makeTextClass();
case LFUN_LAYOUT_RELOAD: {
BOOST_ASSERT(lyx_view_);
Buffer * buffer = lyx_view_->buffer();
- TextClassPtr oldClass = buffer->params().getTextClassPtr();
- textclass_type const tc = buffer->params().getBaseClass();
+ TextClassIndex oldClass = buffer->params().textClassIndex();
+ TextClassIndex const tc = buffer->params().baseClass();
textclasslist.reset(tc);
buffer->params().setBaseClass(tc);
buffer->params().makeTextClass();
}
// Let the current Cursor dispatch its own actions.
+ Cursor old = view()->cursor();
view()->cursor().getPos(cursorPosBeforeDispatchX_,
cursorPosBeforeDispatchY_);
view()->cursor().dispatch(cmd);
- updateFlags = view()->cursor().result().update();
- if (!view()->cursor().result().dispatched()) {
- // No update needed in this case (e.g. when reaching
- // top of document.
- updateFlags = Update::None;
+
+ // notify insets we just left
+ if (view()->cursor() != old) {
+ old.fixIfBroken();
+ bool badcursor = notifyCursorLeaves(old, view()->cursor());
+ if (badcursor)
+ view()->cursor().fixIfBroken();
}
+
+ updateFlags = view()->cursor().result().update();
}
if (lyx_view_ && lyx_view_->buffer()) {
}
-void LyXFunc::updateLayout(TextClassPtr const & oldlayout,
+void LyXFunc::updateLayout(TextClassIndex const & oldlayout,
Buffer * buffer)
{
lyx_view_->message(_("Converting document to new document class..."));
StableDocIterator backcur(view()->cursor());
ErrorList & el = buffer->errorList("Class Switch");
cap::switchBetweenClasses(
- oldlayout, buffer->params().getTextClassPtr(),
+ oldlayout, buffer->params().textClassIndex(),
static_cast<InsetText &>(buffer->inset()), el);
view()->setCursor(backcur.asDocIterator(&(buffer->inset())));
case LyXRC::RC_BIBTEX_COMMAND:
case LyXRC::RC_BINDFILE:
case LyXRC::RC_CHECKLASTFILES:
+ case LyXRC::RC_COMPLETION_INLINE_DELAY:
+ case LyXRC::RC_COMPLETION_INLINE_DOTS:
+ case LyXRC::RC_COMPLETION_INLINE_MATH:
+ case LyXRC::RC_COMPLETION_INLINE_TEXT:
+ case LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE:
+ case LyXRC::RC_COMPLETION_POPUP_DELAY:
+ case LyXRC::RC_COMPLETION_POPUP_MATH:
+ case LyXRC::RC_COMPLETION_POPUP_TEXT:
case LyXRC::RC_USELASTFILEPOS:
case LyXRC::RC_LOADSESSION:
case LyXRC::RC_CHKTEX_COMMAND:
case LyXRC::RC_USE_SPELL_LIB:
case LyXRC::RC_VIEWDVI_PAPEROPTION:
case LyXRC::RC_SORT_LAYOUTS:
+ case LyXRC::RC_FULL_SCREEN_LIMIT:
+ case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
+ case LyXRC::RC_FULL_SCREEN_TABBAR:
+ case LyXRC::RC_FULL_SCREEN_TOOLBARS:
+ case LyXRC::RC_FULL_SCREEN_WIDTH:
+ case LyXRC::RC_VISUAL_CURSOR:
case LyXRC::RC_VIEWER:
case LyXRC::RC_LAST:
break;