summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiu Heng <[email protected]>2024-11-27 17:55:15 +0800
committerLiu Heng <[email protected]>2024-11-30 00:15:44 +0800
commit706d54eefee22e2feb16a7a7717c0a48ff270460 (patch)
tree7c1c89c49a5b08d07a8b2c0b006c1386779a7872
parentb3c0b08eb040bbd76b81a7c6172e3846e8ec0000 (diff)
fix QApplciation with a QML popupWindow
Since 6.8, QML has popupWindow. When in popupModeMode, it does not necessarily have a popupWidget. Not checking whether popWidget is nullptr will cause the program to crash. Fixes: QTBUG-131664 Pick-to: 6.8 Change-Id: I624b62ef7185f0ab35215c2c34b0d6e9c80539a0 Reviewed-by: Tor Arne Vestbø <[email protected]>
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index 04c9e1cccb4..9b2d6ca31d4 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -505,8 +505,7 @@ void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e)
void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
{
- if (QApplicationPrivate::inPopupMode()) {
- QPointer<QWidget> activePopupWidget = QApplication::activePopupWidget();
+ if (auto *activePopupWidget = QApplication::activePopupWidget()) {
QPointF mapped = event->position();
if (activePopupWidget != m_widget)
mapped = activePopupWidget->mapFromGlobal(event->globalPosition());
@@ -682,7 +681,7 @@ void QWidgetWindow::handleTouchEvent(QTouchEvent *event)
if (event->type() == QEvent::TouchCancel) {
QApplicationPrivate::translateTouchCancel(event->pointingDevice(), event->timestamp());
event->accept();
- } else if (QApplicationPrivate::inPopupMode()) {
+ } else if (QApplication::activePopupWidget()) {
// Ignore touch events for popups. This will cause QGuiApplication to synthesise mouse
// events instead, which QWidgetWindow::handleMouseEvent will forward correctly:
event->ignore();
@@ -697,8 +696,7 @@ void QWidgetWindow::handleKeyEvent(QKeyEvent *event)
return;
QObject *receiver = QWidget::keyboardGrabber();
- if (!receiver && QApplicationPrivate::inPopupMode()) {
- QWidget *popup = QApplication::activePopupWidget();
+ if (auto *popup = QApplication::activePopupWidget(); !receiver && popup) {
QWidget *popupFocusWidget = popup->focusWidget();
receiver = popupFocusWidget ? popupFocusWidget : popup;
}
@@ -1151,8 +1149,7 @@ void QWidgetWindow::handleGestureEvent(QNativeGestureEvent *e)
{
// copy-pasted code to find correct widget follows:
QObject *receiver = nullptr;
- if (QApplicationPrivate::inPopupMode()) {
- QWidget *popup = QApplication::activePopupWidget();
+ if (auto *popup = QApplication::activePopupWidget()) {
QWidget *popupFocusWidget = popup->focusWidget();
receiver = popupFocusWidget ? popupFocusWidget : popup;
}