Don't propagate unsolicited events from QWidgetWindow to QWidget
Show and Hide events were not propagated before this change. Add Timer, DynamicPropertyChange, ChildAdded, and ChildRemoved, because they are supposed to be delivered to one QObject. Also don't propagate these events if WA_DontShowOnScreen is set. Change-Id: I134bf3909d46141e4d3e39f41983f493a4f35478 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
parent
aedda12ef1
commit
6cacd19db5
@ -156,11 +156,29 @@ QObject *QWidgetWindow::focusObject() const
|
||||
return widget;
|
||||
}
|
||||
|
||||
static inline bool shouldBePropagatedToWidget(QEvent *event)
|
||||
{
|
||||
switch (event->type()) {
|
||||
// Handing show events to widgets would cause them to be triggered twice
|
||||
case QEvent::Show:
|
||||
case QEvent::Hide:
|
||||
case QEvent::Timer:
|
||||
case QEvent::DynamicPropertyChange:
|
||||
case QEvent::ChildAdded:
|
||||
case QEvent::ChildRemoved:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool QWidgetWindow::event(QEvent *event)
|
||||
{
|
||||
if (m_widget->testAttribute(Qt::WA_DontShowOnScreen)) {
|
||||
// \a event is uninteresting for QWidgetWindow, the event was probably
|
||||
// generated before WA_DontShowOnScreen was set
|
||||
if (!shouldBePropagatedToWidget(event))
|
||||
return true;
|
||||
return QCoreApplication::sendEvent(m_widget, event);
|
||||
}
|
||||
|
||||
@ -285,10 +303,6 @@ bool QWidgetWindow::event(QEvent *event)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
// Handing show events to widgets (see below) here would cause them to be triggered twice
|
||||
case QEvent::Show:
|
||||
case QEvent::Hide:
|
||||
return QWindow::event(event);
|
||||
case QEvent::WindowBlocked:
|
||||
qt_button_down = 0;
|
||||
break;
|
||||
@ -303,7 +317,7 @@ bool QWidgetWindow::event(QEvent *event)
|
||||
break;
|
||||
}
|
||||
|
||||
if (QCoreApplication::sendEvent(m_widget, event) && event->type() != QEvent::Timer)
|
||||
if (shouldBePropagatedToWidget(event) && QCoreApplication::sendEvent(m_widget, event))
|
||||
return true;
|
||||
|
||||
return QWindow::event(event);
|
||||
|
Loading…
x
Reference in New Issue
Block a user