diff options
author | Tobias Markmann <tm@ayena.de> | 2015-03-18 12:56:50 (GMT) |
---|---|---|
committer | Kevin Smith <kevin.smith@isode.com> | 2015-04-04 19:37:18 (GMT) |
commit | a5c0e268421d4350ffdd07b46fd76b454cf48271 (patch) | |
tree | 39b7a6167850f4b2ac1f0c7a724fee8b14163cdf | |
parent | fbe7af04050bdf2f57c63300e8b6d74d648d9f09 (diff) | |
download | swift-a5c0e268421d4350ffdd07b46fd76b454cf48271.zip swift-a5c0e268421d4350ffdd07b46fd76b454cf48271.tar.bz2 |
Fix popup visibility issues in QtSuggestingJIDInput
When hiding the popup after selection of an item via mouse, the focus
was given to a widget other then the QtSuggestingJIDInput or its parent
dialog. This patch explicitly sets the focus back to the
QtSuggestingJIDInput.
Hide the potentially open popup when the QtSuggestingJIDInput is hidden.
This can happen when the user closes a dialog with a QtSuggestingJIDInput
inside of it.
Test-Information:
Verified described behavior on OS X 10.9.5 and Windows 8.
Change-Id: Ic6629e6e626be18a70de159df62cda79dd82ee09
-rw-r--r-- | Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp | 8 | ||||
-rw-r--r-- | Swift/QtUI/UserSearch/QtSuggestingJIDInput.h | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp index 2b775f9..8ed6efb 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp @@ -132,6 +132,11 @@ void QtSuggestingJIDInput::keyPressEvent(QKeyEvent* event) { } } +void QtSuggestingJIDInput::hideEvent(QHideEvent* /* event */) { + // Hide our popup when we are hidden (can happen when a dialog is closed by the user). + treeViewPopup_->hide(); +} + void QtSuggestingJIDInput::handleApplicationFocusChanged(QWidget* /*old*/, QWidget* /*now*/) { /* Using the now argument gives use the wrong widget. This is part of the code needed to prevent stealing of focus when opening a the suggestion window. */ @@ -196,6 +201,9 @@ void QtSuggestingJIDInput::showPopup() { void QtSuggestingJIDInput::hidePopup() { disconnect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*, QWidget*))); treeViewPopup_->hide(); + + // Give focus back to input widget because the hide() call passes the focus to the wrong widget. + setFocus(); } } diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h index cacb8d2..d5ec45d 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -42,6 +42,7 @@ class QtSuggestingJIDInput : public QLineEdit { protected: virtual void keyPressEvent(QKeyEvent* event); + virtual void hideEvent(QHideEvent* event); private: void handleSettingsChanged(const std::string& setting); |