Skip to content

Commit

Permalink
QCompleter: add more nullptr checks for the widget
Browse files Browse the repository at this point in the history
The widget might become nullptr, especially after delivering events to
it. So consistently test for nullptr before calling the event function.

Fixes: QTBUG-128478
Pick-to: 6.8 6.5
Change-Id: Ieed4e8b68b41488fafd9946d718c1d77fad39a44
Reviewed-by: Axel Spoerl <[email protected]>
  • Loading branch information
vohi committed Oct 31, 2024
1 parent 44634c5 commit 6b86d9d
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions src/widgets/util/qcompleter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1370,11 +1370,13 @@ bool QCompleter::eventFilter(QObject *o, QEvent *e)
return false;
}

// Send the event to the widget. If the widget accepted the event, do nothing
// If the widget did not accept the event, provide a default implementation
d->eatFocusOut = false;
(static_cast<QObject *>(d->widget))->event(ke);
d->eatFocusOut = true;
if (d->widget) {
// Send the event to the widget. If the widget accepted the event, do nothing
// If the widget did not accept the event, provide a default implementation
d->eatFocusOut = false;
(static_cast<QObject *>(d->widget))->event(ke);
d->eatFocusOut = true;
}
if (!d->widget || e->isAccepted() || !d->popup->isVisible()) {
// widget lost focus, hide the popup
if (d->widget && (!d->widget->hasFocus()
Expand Down Expand Up @@ -1426,8 +1428,9 @@ bool QCompleter::eventFilter(QObject *o, QEvent *e)

#ifdef QT_KEYPAD_NAVIGATION
case QEvent::KeyRelease: {
QKeyEvent *ke = static_cast<QKeyEvent *>(e);
if (QApplicationPrivate::keypadNavigationEnabled() && ke->key() == Qt::Key_Back) {
if (d->widget &&
QApplicationPrivate::keypadNavigationEnabled() && ke->key() == Qt::Key_Back) {
QKeyEvent *ke = static_cast<QKeyEvent *>(e);
// Send the event to the 'widget'. This is what we did for KeyPress, so we need
// to do the same for KeyRelease, in case the widget's KeyPress event set
// up something (such as a timer) that is relying on also receiving the
Expand All @@ -1444,7 +1447,8 @@ bool QCompleter::eventFilter(QObject *o, QEvent *e)

case QEvent::MouseButtonPress: {
#ifdef QT_KEYPAD_NAVIGATION
if (QApplicationPrivate::keypadNavigationEnabled()) {
if (d->widget
&& QApplicationPrivate::keypadNavigationEnabled()) {
// if we've clicked in the widget (or its descendant), let it handle the click
QWidget *source = qobject_cast<QWidget *>(o);
if (source) {
Expand Down Expand Up @@ -1473,7 +1477,8 @@ bool QCompleter::eventFilter(QObject *o, QEvent *e)
return true;
case QEvent::InputMethod:
case QEvent::ShortcutOverride:
QCoreApplication::sendEvent(d->widget, e);
if (d->widget)
QCoreApplication::sendEvent(d->widget, e);
break;

default:
Expand Down

0 comments on commit 6b86d9d

Please sign in to comment.