]> git.lyx.org Git - features.git/blobdiff - src/LyXFunc.cpp
* simplify notifyCursorLeaves logic: We now only call it from strategic
[features.git] / src / LyXFunc.cpp
index 5d3dc132b53620b328f1089b17f730b44c57b297..13b5c091ffc72f99d8db02573f6d029170f31fe2 100644 (file)
@@ -18,7 +18,6 @@
  */
 
 #include <config.h>
-#include <vector>
 
 #include "LyXFunc.h"
 
@@ -56,7 +55,6 @@
 #include "Server.h"
 #include "Session.h"
 #include "TextClassList.h"
-#include "ToolbarBackend.h"
 
 #include "insets/InsetBox.h"
 #include "insets/InsetBranch.h"
@@ -91,6 +89,7 @@
 #include "support/os.h"
 
 #include <sstream>
+#include <vector>
 
 using namespace std;
 using namespace lyx::support;
@@ -101,9 +100,6 @@ using frontend::LyXView;
 
 namespace Alert = frontend::Alert;
 
-extern bool quitting;
-extern bool use_gui;
-
 namespace {
 
 
@@ -370,9 +366,17 @@ void LyXFunc::processKeySym(KeySymbol const & keysym, KeyModifier state)
                        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();
@@ -456,6 +460,11 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        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;
@@ -1696,15 +1705,20 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        }
 
                        // 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()) {
@@ -1899,6 +1913,14 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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:
@@ -2006,6 +2028,12 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        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;