From 9c0ed539ccad01158a63d5cda4e9fdb026180449 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Wed, 4 Nov 2009 18:10:03 +0100
Subject: [PATCH] Prevent global replace before search is done.

Also fix focusing issues of the replace line edit.

Reviewed-by: Roberto Raggi
---
 src/plugins/cpptools/cppfindreferences.cpp |  1 +
 src/plugins/find/searchresultwindow.cpp    | 43 +++++++++++++---------
 src/plugins/find/searchresultwindow.h      |  9 ++---
 src/plugins/texteditor/basefilefind.cpp    |  1 +
 4 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 6881c7d376e..72677abf6e2 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -350,6 +350,7 @@ void CppFindReferences::displayResult(int index)
 
 void CppFindReferences::searchFinished()
 {
+    _resultWindow->finishSearch();
     emit changed();
 }
 
diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp
index c60e2d6c9ee..5bbf06af512 100644
--- a/src/plugins/find/searchresultwindow.cpp
+++ b/src/plugins/find/searchresultwindow.cpp
@@ -53,7 +53,8 @@ static const QString SETTINGSKEYEXPANDRESULTS("ExpandResults");
 
 SearchResultWindow::SearchResultWindow()
     : m_currentSearch(0),
-    m_isShowingReplaceUI(false)
+    m_isShowingReplaceUI(false),
+    m_focusReplaceEdit(false)
 {
     m_widget = new QStackedWidget;
     m_widget->setWindowTitle(name());
@@ -124,15 +125,13 @@ void SearchResultWindow::setShowReplaceUI(bool show)
     m_isShowingReplaceUI = show;
 }
 
-bool SearchResultWindow::isShowingReplaceUI() const
-{
-    return m_isShowingReplaceUI;
-}
-
 void SearchResultWindow::handleReplaceButton()
 {
     QTC_ASSERT(m_currentSearch, return);
-    m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems());
+    // check if button is actually enabled, because this is also triggered
+    // by pressing return in replace line edit
+    if (m_replaceButton->isEnabled())
+        m_currentSearch->replaceButtonClicked(m_replaceTextEdit->text(), checkedItems());
 }
 
 QList<SearchResultItem> SearchResultWindow::checkedItems() const
@@ -177,9 +176,19 @@ SearchResult *SearchResultWindow::startNewSearch(SearchMode searchOrSearchAndRep
     return m_currentSearch;
 }
 
+void SearchResultWindow::finishSearch()
+{
+    if (m_items.count()) {
+        m_replaceButton->setEnabled(true);
+    } else {
+        showNoMatchesFound();
+    }
+}
+
 void SearchResultWindow::clearContents()
 {
-    setReplaceUIEnabled(false);
+    m_replaceTextEdit->setEnabled(false);
+    m_replaceButton->setEnabled(false);
     m_replaceTextEdit->clear();
     m_searchResultTreeView->clear();
     m_items.clear();
@@ -189,7 +198,8 @@ void SearchResultWindow::clearContents()
 
 void SearchResultWindow::showNoMatchesFound()
 {
-    setReplaceUIEnabled(false);
+    m_replaceTextEdit->setEnabled(false);
+    m_replaceButton->setEnabled(false);
     m_widget->setCurrentWidget(m_noMatchesFoundDisplay);
 }
 
@@ -220,7 +230,8 @@ void SearchResultWindow::setFocus()
             m_searchResultTreeView->setFocus();
         } else {
             if (!m_widget->focusWidget()
-                    || m_widget->focusWidget() == m_replaceTextEdit) {
+                    || m_widget->focusWidget() == m_replaceTextEdit
+                    || m_focusReplaceEdit) {
                 m_replaceTextEdit->setFocus();
             } else {
                 m_searchResultTreeView->setFocus();
@@ -257,20 +268,16 @@ void SearchResultWindow::addResult(const QString &fileName, int lineNumber, cons
     m_items.append(item);
     m_searchResultTreeView->appendResultLine(index, fileName, lineNumber, rowText, searchTermStart, searchTermLength);
     if (index == 0) {
-        setReplaceUIEnabled(true);
-        // We didn't have an item before, set the focus to the m_searchResultTreeView
+        m_replaceTextEdit->setEnabled(true);
+        // We didn't have an item before, set the focus to the search widget
+        m_focusReplaceEdit = true;
         setFocus();
+        m_focusReplaceEdit = false;
         m_searchResultTreeView->selectionModel()->select(m_searchResultTreeView->model()->index(0, 0, QModelIndex()), QItemSelectionModel::Select);
         emit navigateStateChanged();
     }
 }
 
-void SearchResultWindow::setReplaceUIEnabled(bool enabled)
-{
-    m_replaceTextEdit->setEnabled(enabled);
-    m_replaceButton->setEnabled(enabled);
-}
-
 void SearchResultWindow::handleExpandCollapseToolButton(bool checked)
 {
     m_searchResultTreeView->setAutoExpandResults(checked);
diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h
index c41ca3424f7..e8996f8c029 100644
--- a/src/plugins/find/searchresultwindow.h
+++ b/src/plugins/find/searchresultwindow.h
@@ -103,9 +103,6 @@ public:
 
     void setTextEditorFont(const QFont &font);
 
-    void setShowReplaceUI(bool show);
-    bool isShowingReplaceUI() const;
-
     void setTextToReplace(const QString &textToReplace);
     QString textToReplace() const;
 
@@ -114,17 +111,18 @@ public:
 
 public slots:
     void clearContents();
-    void showNoMatchesFound();
     void addResult(const QString &fileName, int lineNumber, const QString &lineText,
                    int searchTermStart, int searchTermLength, const QVariant &userData = QVariant());
+    void finishSearch();
 
 private slots:
     void handleExpandCollapseToolButton(bool checked);
     void handleJumpToSearchResult(int index, bool checked);
     void handleReplaceButton();
-    void setReplaceUIEnabled(bool enabled);
+    void showNoMatchesFound();
 
 private:
+    void setShowReplaceUI(bool show);
     void readSettings();
     void writeSettings();
     QList<SearchResultItem> checkedItems() const;
@@ -140,6 +138,7 @@ private:
     SearchResult *m_currentSearch;
     QList<SearchResultItem> m_items;
     bool m_isShowingReplaceUI;
+    bool m_focusReplaceEdit;
 };
 
 } // namespace Find
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index 5126d2e96ab..97479b37c2b 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -121,6 +121,7 @@ void BaseFileFind::displayResult(int index) {
 
 void BaseFileFind::searchFinished()
 {
+    m_resultWindow->finishSearch();
     m_isSearching = false;
     m_resultLabel = 0;
     emit changed();
-- 
GitLab