]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCompleter.cpp
Fix handling of the add branch textfield in GuiBranches
[lyx.git] / src / frontends / qt4 / GuiCompleter.cpp
index b20280cb4f977b45811f0f5de5a2803f4b430564..7ef1a1a5794339143d40c9dd0d04b7b617c99290 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <QApplication>
 #include <QHeaderView>
+#include <QKeyEvent>
 #include <QPainter>
 #include <QPixmapCache>
 #include <QScrollBar>
@@ -284,19 +285,19 @@ bool GuiCompleter::inlineVisible() const
 }
 
 
-void GuiCompleter::updateVisibility(Cursor & cur, bool start, bool keep, bool cursorInView)
+void GuiCompleter::updateVisibility(Cursor & cur, bool start, bool keep)
 {
        // parameters which affect the completion
        bool moved = cur != old_cursor_;
        if (moved)
                old_cursor_ = cur;
 
-       bool possiblePopupState = popupPossible(cur) && cursorInView;
-       bool possibleInlineState = inlinePossible(cur) && cursorInView;
+       bool const possiblePopupState = popupPossible(cur);
+       bool const possibleInlineState = inlinePossible(cur);
 
        // we moved or popup state is not ok for popup?
        if ((moved && !keep) || !possiblePopupState)
-               hidePopup(cur);
+               hidePopup();
 
        // we moved or inline state is not ok for inline completion?
        if ((moved && !keep) || !possibleInlineState)
@@ -311,7 +312,7 @@ void GuiCompleter::updateVisibility(Cursor & cur, bool start, bool keep, bool cu
        if (!inlineVisible() && possibleInlineState && start
                && cur.inset().automaticInlineCompletion())
                inline_timer_.start(int(lyxrc.completion_inline_delay * 1000));
-       else {
+       else if (cur.inMathed() && !lyxrc.completion_inline_math) {
                // no inline completion, hence a metrics update is needed
                if (!(cur.result().screenUpdate() & Update::Force))
                        cur.screenUpdateFlags(cur.result().screenUpdate() | Update::SinglePar);
@@ -340,7 +341,7 @@ void GuiCompleter::updateVisibility(bool start, bool keep)
 }
 
 
-void GuiCompleter::updatePrefix(Cursor & cur)
+void GuiCompleter::updatePrefix(Cursor const & cur)
 {
        // get new prefix. Do nothing if unchanged
        QString newPrefix = toqstr(cur.inset().completionPrefix(cur));
@@ -379,7 +380,7 @@ void GuiCompleter::updatePrefix(Cursor & cur)
 }
 
 
-void GuiCompleter::updateInline(Cursor & cur, QString const & completion)
+void GuiCompleter::updateInline(Cursor const & cur, QString const & completion)
 {
        if (!cur.inset().inlineCompletionSupported(cur))
                return;
@@ -400,7 +401,7 @@ void GuiCompleter::updateInline(Cursor & cur, QString const & completion)
 }
 
 
-void GuiCompleter::updatePopup(Cursor & cur)
+void GuiCompleter::updatePopup(Cursor const & cur)
 {
        if (!cur.inset().completionSupported(cur))
                return;
@@ -458,7 +459,7 @@ void GuiCompleter::updateAvailability()
        // visible yet, i.e. especially if automatic completion is disabled.
        if (inlineVisible() || popupVisible())
                return;
-       Cursor & cur = gui_->bufferView().cursor();
+       Cursor const & cur = gui_->bufferView().cursor();
        if (!popupPossible(cur) && !inlinePossible(cur))
                return;
        
@@ -466,7 +467,7 @@ void GuiCompleter::updateAvailability()
 }
        
 
-void GuiCompleter::updateModel(Cursor & cur, bool popupUpdate, bool inlineUpdate)
+void GuiCompleter::updateModel(Cursor const & cur, bool popupUpdate, bool inlineUpdate)
 {
        // value which should be kept selected
        QString old = currentCompletion();
@@ -520,7 +521,7 @@ void GuiCompleter::updateModel(Cursor & cur, bool popupUpdate, bool inlineUpdate
 }
 
 
-void GuiCompleter::showPopup(Cursor & cur)
+void GuiCompleter::showPopup(Cursor const & cur)
 {
        if (!popupPossible(cur))
                return;
@@ -529,26 +530,6 @@ void GuiCompleter::showPopup(Cursor & cur)
 }
 
 
-void GuiCompleter::hidePopup(Cursor &)
-{
-       popupVisible_ = false;
-
-       if (popup_timer_.isActive())
-               popup_timer_.stop();
-
-       // hide popup asynchronously because we might be here inside of
-       // LFUN dispatchers. Hiding a popup can trigger a focus event on the 
-       // workarea which then redisplays the cursor. But the metrics are not
-       // yet up to date such that the coord cache has not all insets yet. The
-       // cursorPos methods would triggers asserts in the coord cache then.
-       QTimer::singleShot(0, this, SLOT(asyncHidePopup()));
-       
-       // mark that the asynchronous part will reset the model
-       if (!inlineVisible())
-               modelActive_ = false;
-}
-
-
 void GuiCompleter::asyncHidePopup()
 {
        popup()->hide();
@@ -557,7 +538,7 @@ void GuiCompleter::asyncHidePopup()
 }
 
 
-void GuiCompleter::showInline(Cursor & cur)
+void GuiCompleter::showInline(Cursor const & cur)
 {
        if (!inlinePossible(cur))
                return;
@@ -566,7 +547,7 @@ void GuiCompleter::showInline(Cursor & cur)
 }
 
 
-void GuiCompleter::hideInline(Cursor & cur)
+void GuiCompleter::hideInline(Cursor const & cur)
 {
        gui_->bufferView().setInlineCompletion(cur, DocIterator(cur.buffer()), docstring());
        inlineVisible_ = false;
@@ -620,14 +601,21 @@ void GuiCompleter::showInline()
 
 void GuiCompleter::hidePopup()
 {
-       Cursor cur = gui_->bufferView().cursor();
-       cur.screenUpdateFlags(Update::None);
-       
-       hidePopup(cur);
+       popupVisible_ = false;
+
+       if (popup_timer_.isActive())
+               popup_timer_.stop();
+
+       // hide popup asynchronously because we might be here inside of
+       // LFUN dispatchers. Hiding a popup can trigger a focus event on the
+       // workarea which then redisplays the cursor. But the metrics are not
+       // yet up to date such that the coord cache has not all insets yet. The
+       // cursorPos methods would triggers asserts in the coord cache then.
+       QTimer::singleShot(0, this, SLOT(asyncHidePopup()));
        
-       // redraw if needed
-       if (cur.result().screenUpdate())
-               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
+       // mark that the asynchronous part will reset the model
+       if (!inlineVisible())
+               modelActive_ = false;
 }
 
 
@@ -694,7 +682,7 @@ void GuiCompleter::tab()
                cur.inset().insertCompletion(cur, docstring(), true);
                
                // hide popup and inline completion
-               hidePopup(cur);
+               hidePopup();
                hideInline(cur);
                updateVisibility(false, false);
                cur.endUndoGroup();
@@ -887,7 +875,7 @@ void GuiCompleter::popupActivated(const QString & completion)
        docstring prefix = cur.inset().completionPrefix(cur);
        docstring postfix = qstring_to_ucs4(completion.mid(prefix.length()));
        cur.inset().insertCompletion(cur, postfix, true);
-       hidePopup(cur);
+       hidePopup();
        hideInline(cur);
        
        if (cur.result().screenUpdate())