Work around issue in Qt5 that shortcut override events are posted twice

Make shortcut override handling not have side effects.

Task-number: QTBUG-30164
Change-Id: Ie54a31fc6539d4e509b0903983df0effa06cee12
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Eike Ziller
2013-03-20 13:48:58 +01:00
parent 0d850d7d15
commit 356b85d431
2 changed files with 24 additions and 7 deletions

View File

@@ -285,6 +285,14 @@ 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,13 +323,9 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
}
} else if (obj == this && event->type() == QEvent::ShortcutOverride) {
QKeyEvent *ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()
&& !m_findCompleter->popup()->isVisible()
&& !m_replaceCompleter->popup()->isVisible()) {
if (setFocusToCurrentFindSupport()) {
event->accept();
return true;
}
if (shouldSetFocusOnKeyEvent(ke)) {
event->accept();
return true;
} else if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) {
event->accept();
return true;
@@ -334,6 +338,16 @@ 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();

View File

@@ -97,6 +97,7 @@ private slots:
protected:
bool focusNextPrevChild(bool next);
void keyPressEvent(QKeyEvent *event);
private:
void installEventFilters();
@@ -115,6 +116,8 @@ private:
void updateIcons();
void updateFlagMenus();
bool shouldSetFocusOnKeyEvent(QKeyEvent *event);
FindPlugin *m_plugin;
CurrentDocumentFind *m_currentDocumentFind;
Ui::FindWidget m_ui;