diff --git a/src/plugins/coreplugin/find/findplugin.cpp b/src/plugins/coreplugin/find/findplugin.cpp index 46979aac1a7..2686541ba41 100644 --- a/src/plugins/coreplugin/find/findplugin.cpp +++ b/src/plugins/coreplugin/find/findplugin.cpp @@ -129,6 +129,11 @@ void FindPlugin::initialize(const QStringList &, QString *) d->m_currentDocumentFind = new Internal::CurrentDocumentFind; d->m_findToolBar = new Internal::FindToolBar(this, d->m_currentDocumentFind); + auto *findToolBarContext = new IContext(this); + findToolBarContext->setWidget(d->m_findToolBar); + findToolBarContext->setContext(Context(Constants::C_FINDTOOLBAR)); + ICore::addContextObject(findToolBarContext); + d->m_findDialog = new Internal::FindToolWindow(this); d->m_searchResultWindow = new SearchResultWindow(d->m_findDialog); ExtensionSystem::PluginManager::addObject(d->m_searchResultWindow); diff --git a/src/plugins/coreplugin/find/findtoolbar.cpp b/src/plugins/coreplugin/find/findtoolbar.cpp index 2d2e0d4595d..9d248cdd23f 100644 --- a/src/plugins/coreplugin/find/findtoolbar.cpp +++ b/src/plugins/coreplugin/find/findtoolbar.cpp @@ -149,6 +149,11 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen m_ui.advancedButton->setDefaultAction(Core::ActionManager::command(Constants::ADVANCED_FIND)->action()); + m_goToCurrentFindAction = new QAction(tr("Go to Current Document Find"), this); + cmd = Core::ActionManager::registerAction(m_goToCurrentFindAction, Constants::S_RETURNTOEDITOR, + Context(Constants::C_FINDTOOLBAR)); + connect(m_goToCurrentFindAction, SIGNAL(triggered()), this, SLOT(setFocusToCurrentFindSupport())); + QIcon icon = QIcon::fromTheme(QLatin1String("edit-find-replace")); m_findInDocumentAction = new QAction(icon, tr("Find/Replace"), this); cmd = Core::ActionManager::registerAction(m_findInDocumentAction, Constants::FIND_IN_DOCUMENT, globalcontext); @@ -277,14 +282,6 @@ void FindToolBar::installEventFilters() } } -bool FindToolBar::shouldSetFocusOnKeyEvent(QKeyEvent *event) -{ - return event->key() == Qt::Key_Escape && !event->modifiers() - && !m_findCompleter->popup()->isVisible() - && !m_replaceCompleter->popup()->isVisible() - && m_currentDocumentFind->isEnabled(); -} - bool FindToolBar::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { @@ -315,10 +312,7 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event) } } else if (obj == this && event->type() == QEvent::ShortcutOverride) { QKeyEvent *ke = static_cast(event); - if (shouldSetFocusOnKeyEvent(ke)) { - event->accept(); - return true; - } else if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) { + if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) { event->accept(); return true; } @@ -330,16 +324,6 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event) return Utils::StyledBar::eventFilter(obj, event); } -void FindToolBar::keyPressEvent(QKeyEvent *event) -{ - if (shouldSetFocusOnKeyEvent(event)) { - if (setFocusToCurrentFindSupport()) - event->accept(); - return; - } - return Utils::StyledBar::keyPressEvent(event); -} - void FindToolBar::adaptToCandidate() { updateFindAction(); @@ -359,6 +343,9 @@ void FindToolBar::updateToolBar() { bool enabled = m_currentDocumentFind->isEnabled(); bool replaceEnabled = enabled && m_currentDocumentFind->supportsReplace(); + + m_goToCurrentFindAction->setEnabled(enabled); + m_findNextAction->setEnabled(enabled); m_findPreviousAction->setEnabled(enabled); diff --git a/src/plugins/coreplugin/find/findtoolbar.h b/src/plugins/coreplugin/find/findtoolbar.h index 50e7f1a20bb..1d9f77d76e8 100644 --- a/src/plugins/coreplugin/find/findtoolbar.h +++ b/src/plugins/coreplugin/find/findtoolbar.h @@ -119,14 +119,14 @@ private slots: void adaptToCandidate(); + bool setFocusToCurrentFindSupport(); + protected: bool focusNextPrevChild(bool next); - void keyPressEvent(QKeyEvent *event); private: void installEventFilters(); void invokeClearResults(); - bool setFocusToCurrentFindSupport(); void setFindFlag(FindFlag flag, bool enabled); bool hasFindFlag(FindFlag flag); FindFlags effectiveFindFlags(); @@ -140,13 +140,12 @@ private: void updateIcons(); void updateFlagMenus(); - bool shouldSetFocusOnKeyEvent(QKeyEvent *event); - FindPlugin *m_plugin; CurrentDocumentFind *m_currentDocumentFind; Ui::FindWidget m_ui; QCompleter *m_findCompleter; QCompleter *m_replaceCompleter; + QAction *m_goToCurrentFindAction; QAction *m_findInDocumentAction; QAction *m_findNextSelectedAction; QAction *m_findPreviousSelectedAction; diff --git a/src/plugins/coreplugin/find/textfindconstants.h b/src/plugins/coreplugin/find/textfindconstants.h index 53292327b30..d5a57e4e1f8 100644 --- a/src/plugins/coreplugin/find/textfindconstants.h +++ b/src/plugins/coreplugin/find/textfindconstants.h @@ -39,6 +39,8 @@ namespace Core { namespace Constants { +const char C_FINDTOOLBAR[] = "Find.ToolBar"; + const char M_FIND[] = "Find.FindMenu"; const char M_FIND_ADVANCED[] = "Find.FindAdvancedMenu"; const char G_FIND_CURRENTDOCUMENT[] = "Find.FindMenu.CurrentDocument";