Avoid focus loss event when wxComboBox popup is opened in wxQt
Prevent wxComboBox from generating a wxEVT_KILL_FOCUS event when the user opens the drop-down list under wxQt, as logically the drop-down is part of wxComboBox, even if it's a separate window at Qt level. Closes https://github.com/wxWidgets/wxWidgets/pull/1377
This commit is contained in:
committed by
Vadim Zeitlin
parent
1c5921f85a
commit
9e35bb92c0
@@ -80,6 +80,7 @@ public:
|
|||||||
virtual void Popup();
|
virtual void Popup();
|
||||||
virtual void Dismiss();
|
virtual void Dismiss();
|
||||||
|
|
||||||
|
virtual bool QtHandleFocusEvent(QWidget *handler, QFocusEvent *event) wxOVERRIDE;
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// From wxTextEntry:
|
// From wxTextEntry:
|
||||||
|
@@ -15,6 +15,9 @@
|
|||||||
|
|
||||||
#include <QtWidgets/QComboBox>
|
#include <QtWidgets/QComboBox>
|
||||||
#include <QtWidgets/QLineEdit>
|
#include <QtWidgets/QLineEdit>
|
||||||
|
#include <QtWidgets/QApplication>
|
||||||
|
#include <QtWidgets/QAbstractItemView>
|
||||||
|
#include <QtGui/QFocusEvent>
|
||||||
|
|
||||||
class wxQtComboBox : public wxQtEventSignalHandler< QComboBox, wxComboBox >
|
class wxQtComboBox : public wxQtEventSignalHandler< QComboBox, wxComboBox >
|
||||||
{
|
{
|
||||||
@@ -254,6 +257,22 @@ void wxComboBox::Dismiss()
|
|||||||
static_cast<QComboBox *>(GetHandle())->hidePopup();
|
static_cast<QComboBox *>(GetHandle())->hidePopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxComboBox::QtHandleFocusEvent(QWidget *handler, QFocusEvent *event)
|
||||||
|
{
|
||||||
|
if ( !event->gotFocus() )
|
||||||
|
{
|
||||||
|
// Qt treats the combobox and its drop-down as distinct widgets, but in
|
||||||
|
// wxWidgets they're both part of the same control, so we have to avoid
|
||||||
|
// generating a lose focus event if the combobox or its drop-down still
|
||||||
|
// have focus.
|
||||||
|
QWidget* const widget = qApp->focusWidget();
|
||||||
|
if ( widget == m_qtComboBox || widget == m_qtComboBox->view() )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxChoice::QtHandleFocusEvent(handler, event);
|
||||||
|
}
|
||||||
|
|
||||||
void wxComboBox::Clear()
|
void wxComboBox::Clear()
|
||||||
{
|
{
|
||||||
if ( !IsReadOnly() )
|
if ( !IsReadOnly() )
|
||||||
|
Reference in New Issue
Block a user