QShortcut: call base class implementation in event()
QShortcut::event() did not call the base class implementation QObject::event() which caused that e.g. QEvent::DeferredDelete was not handled. Fix it by calling QObject::event() when the event was not handled. Fixes: QTBUG-66809 Change-Id: Ideebc980bc658f8f2b9ec4417e738bccda5eeab5 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>bb10
parent
15edba4101
commit
a42a451339
|
|
@ -665,24 +665,22 @@ int QShortcut::id() const
|
|||
bool QShortcut::event(QEvent *e)
|
||||
{
|
||||
Q_D(QShortcut);
|
||||
bool handled = false;
|
||||
if (d->sc_enabled && e->type() == QEvent::Shortcut) {
|
||||
QShortcutEvent *se = static_cast<QShortcutEvent *>(e);
|
||||
if (se->shortcutId() == d->sc_id && se->key() == d->sc_sequence){
|
||||
#if QT_CONFIG(whatsthis)
|
||||
if (QWhatsThis::inWhatsThisMode()) {
|
||||
QWhatsThis::showText(QCursor::pos(), d->sc_whatsthis);
|
||||
handled = true;
|
||||
} else
|
||||
#endif
|
||||
if (se->isAmbiguous())
|
||||
emit activatedAmbiguously();
|
||||
else
|
||||
emit activated();
|
||||
handled = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return handled;
|
||||
return QObject::event(e);
|
||||
}
|
||||
#endif // QT_NO_SHORTCUT
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ private slots:
|
|||
void context();
|
||||
void duplicatedShortcutOverride();
|
||||
void shortcutToFocusProxy();
|
||||
void deleteLater();
|
||||
|
||||
protected:
|
||||
static Qt::KeyboardModifiers toButtons( int key );
|
||||
|
|
@ -1305,5 +1306,14 @@ void tst_QShortcut::shortcutToFocusProxy()
|
|||
QCOMPARE(le.text(), QString());
|
||||
}
|
||||
|
||||
void tst_QShortcut::deleteLater()
|
||||
{
|
||||
QWidget w;
|
||||
QPointer<QShortcut> sc(new QShortcut(QKeySequence(Qt::Key_1), &w));
|
||||
sc->deleteLater();
|
||||
QTRY_VERIFY(!sc);
|
||||
}
|
||||
|
||||
|
||||
QTEST_MAIN(tst_QShortcut)
|
||||
#include "tst_qshortcut.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue