Fix event() chaining in QSocketNotifier

We should return the result of the call of the base implementation for
all events that we did not handle. Also, QObject::event() does not
actually activate any filters, so the comment was inaccurate as well.

Change-Id: Iff6644b7b1621229f8351c83569ee72594e47197
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
This commit is contained in:
Alex Trotsenko 2020-12-11 13:15:47 +02:00
parent 81ed78c293
commit 0e8b626401

View File

@ -289,24 +289,28 @@ bool QSocketNotifier::event(QEvent *e)
Q_D(QSocketNotifier);
// Emits the activated() signal when a QEvent::SockAct or QEvent::SockClose is
// received.
if (e->type() == QEvent::ThreadChange) {
switch (e->type()) {
case QEvent::ThreadChange:
if (d->snenabled) {
QMetaObject::invokeMethod(this, "setEnabled", Qt::QueuedConnection,
Q_ARG(bool, d->snenabled));
setEnabled(false);
}
}
QObject::event(e); // will activate filters
if ((e->type() == QEvent::SockAct) || (e->type() == QEvent::SockClose)) {
QPointer<QSocketNotifier> alive(this);
emit activated(d->sockfd, d->sntype, QPrivateSignal());
// ### Qt7: Remove emission if the activated(int) signal is removed
if (alive)
emit activated(int(qintptr(d->sockfd)), QPrivateSignal());
break;
case QEvent::SockAct:
case QEvent::SockClose:
{
QPointer<QSocketNotifier> alive(this);
emit activated(d->sockfd, d->sntype, QPrivateSignal());
// ### Qt7: Remove emission if the activated(int) signal is removed
if (alive)
emit activated(int(qintptr(d->sockfd)), QPrivateSignal());
}
return true;
default:
break;
}
return false;
return QObject::event(e);
}
/*!