diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 7f37cc98..27ec7693 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -402,6 +402,11 @@ void CodeController::expandVisibleSnippets(std::vector* snipp { TRACE(); + if (!snippets->size()) + { + return; + } + bool inListMode = getView()->isInListMode(); size_t filesToExpand = inListMode ? std::min(int(snippets->size()), 3) : 1; diff --git a/src/lib_gui/qt/element/QtCodeFileSingle.cpp b/src/lib_gui/qt/element/QtCodeFileSingle.cpp index 61556b04..d4c002b3 100644 --- a/src/lib_gui/qt/element/QtCodeFileSingle.cpp +++ b/src/lib_gui/qt/element/QtCodeFileSingle.cpp @@ -76,9 +76,14 @@ QAbstractScrollArea* QtCodeFileSingle::getScrollArea() return m_area; } -void QtCodeFileSingle::clearCache() +void QtCodeFileSingle::clearFile() { setFileData(FileData()); +} + +void QtCodeFileSingle::clearCache() +{ + clearFile(); m_fileDatas.clear(); m_filePaths.clear(); diff --git a/src/lib_gui/qt/element/QtCodeFileSingle.h b/src/lib_gui/qt/element/QtCodeFileSingle.h index d2af7ffb..397a5168 100644 --- a/src/lib_gui/qt/element/QtCodeFileSingle.h +++ b/src/lib_gui/qt/element/QtCodeFileSingle.h @@ -27,6 +27,7 @@ public: QtCodeFileSingle(QtCodeNavigator* navigator, QWidget* parent = nullptr); virtual ~QtCodeFileSingle(); + void clearFile(); void clearCache(); // QtCodeNaviatebale implementation diff --git a/src/lib_gui/qt/element/QtCodeNavigator.cpp b/src/lib_gui/qt/element/QtCodeNavigator.cpp index 1ff90650..39ce2799 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.cpp +++ b/src/lib_gui/qt/element/QtCodeNavigator.cpp @@ -257,6 +257,11 @@ void QtCodeNavigator::clearCodeSnippets() m_singleHasNewFile = false; } +void QtCodeNavigator::clearFile() +{ + m_single->clearFile(); +} + void QtCodeNavigator::clearCaches() { m_single->clearCache(); diff --git a/src/lib_gui/qt/element/QtCodeNavigator.h b/src/lib_gui/qt/element/QtCodeNavigator.h index b25b20f5..018c10a5 100644 --- a/src/lib_gui/qt/element/QtCodeNavigator.h +++ b/src/lib_gui/qt/element/QtCodeNavigator.h @@ -41,6 +41,7 @@ public: void clear(); void clearCodeSnippets(); + void clearFile(); void clearCaches(); const std::set& getCurrentActiveTokenIds() const; diff --git a/src/lib_gui/qt/element/QtSmartSearchBox.cpp b/src/lib_gui/qt/element/QtSmartSearchBox.cpp index b76776c8..eb3d16da 100644 --- a/src/lib_gui/qt/element/QtSmartSearchBox.cpp +++ b/src/lib_gui/qt/element/QtSmartSearchBox.cpp @@ -88,6 +88,7 @@ QtSmartSearchBox::QtSmartSearchBox(QWidget* parent) , m_cursorIndex(0) , m_shiftKeyDown(false) , m_mousePressed(false) + , m_ignoreNextMousePress(false) { m_highlightRect = new QWidget(this); m_highlightRect->setGeometry(0, 0, 0, 0); @@ -150,17 +151,6 @@ void QtSmartSearchBox::setMatches(const std::vector& matches) void QtSmartSearchBox::setFocus() { QLineEdit::setFocus(Qt::ShortcutFocusReason); - - if (text().size() == 1 && text().startsWith(SearchMatch::FULLTEXT_SEARCH_CHARACTER)) - { - setEditText(""); - } - else - { - editTextToElement(); - selectAllElementsWith(true); - layoutElements(); - } } void QtSmartSearchBox::findFulltext() @@ -214,6 +204,32 @@ void QtSmartSearchBox::resizeEvent(QResizeEvent* event) layoutElements(); } +void QtSmartSearchBox::focusInEvent(QFocusEvent* event) +{ + QLineEdit::focusInEvent(event); + + if (event->reason() != Qt::MouseFocusReason && event->reason() != Qt::ShortcutFocusReason) + { + return; + } + + if (text().size() == 1 && text().startsWith(SearchMatch::FULLTEXT_SEARCH_CHARACTER)) + { + setEditText(""); + } + else + { + editTextToElement(); + selectAllElementsWith(true); + layoutElements(); + } + + if (event->reason() == Qt::MouseFocusReason) + { + m_ignoreNextMousePress = true; + } +} + void QtSmartSearchBox::keyPressEvent(QKeyEvent* event) { m_shiftKeyDown = event->modifiers() & Qt::ShiftModifier; @@ -436,14 +452,24 @@ void QtSmartSearchBox::mousePressEvent(QMouseEvent* event) { QLineEdit::mousePressEvent(event); - m_mousePressed = true; - m_mouseX = event->x(); + if (!m_ignoreNextMousePress) + { + m_mousePressed = true; + m_mouseX = event->x(); + } + + m_ignoreNextMousePress = false; } void QtSmartSearchBox::mouseReleaseEvent(QMouseEvent* event) { QLineEdit::mouseReleaseEvent(event); + if (!m_mousePressed) + { + return; + } + m_mousePressed = false; if (abs(event->x() - m_mouseX) > 5) diff --git a/src/lib_gui/qt/element/QtSmartSearchBox.h b/src/lib_gui/qt/element/QtSmartSearchBox.h index fa1638ef..4cf1067d 100644 --- a/src/lib_gui/qt/element/QtSmartSearchBox.h +++ b/src/lib_gui/qt/element/QtSmartSearchBox.h @@ -51,6 +51,8 @@ public: protected: virtual bool event(QEvent *event); virtual void resizeEvent(QResizeEvent* event); + virtual void focusInEvent(QFocusEvent* event); + virtual void keyPressEvent(QKeyEvent* event); virtual void keyReleaseEvent(QKeyEvent* event); @@ -112,6 +114,7 @@ private: bool m_shiftKeyDown; bool m_mousePressed; int m_mouseX; + bool m_ignoreNextMousePress; QWidget* m_highlightRect; QtAutocompletionList* m_completer; diff --git a/src/lib_gui/qt/view/QtCodeView.cpp b/src/lib_gui/qt/view/QtCodeView.cpp index 02edacf9..a65c2ff5 100644 --- a/src/lib_gui/qt/view/QtCodeView.cpp +++ b/src/lib_gui/qt/view/QtCodeView.cpp @@ -72,6 +72,11 @@ void QtCodeView::showCodeSnippets(const std::vector& snippets m_widget->setActiveTokenIds(params.activeTokenIds); m_widget->setErrorInfos(params.errorInfos); + + if (!snippets.size()) + { + m_widget->clearFile(); + } } bool addedFiles = false;