From 8556ac72f3981d6468f370e55b550a2f32059691 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sun, 6 Nov 2016 17:16:23 +0000 Subject: [PATCH] be extra carefull when accessing the popup widgets Signed-off-by: Ivailo Monev --- src/gui/kernel/qapplication.cpp | 12 ++++++------ src/gui/kernel/qapplication_x11.cpp | 6 +++--- src/gui/kernel/qwidget.cpp | 2 +- src/gui/kernel/qwidget.h | 3 +-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 32c9be5a2..e0b1c00c1 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -445,13 +445,13 @@ FontHash *qt_app_fonts_hash() return app_fonts(); } -QWidgetList *QApplicationPrivate::popupWidgets = 0; // has keyboard input focus +QWidgetList *QApplicationPrivate::popupWidgets = Q_NULLPTR; // has keyboard input focus -QDesktopWidget *qt_desktopWidget = 0; // root window widgets +QDesktopWidget *qt_desktopWidget = Q_NULLPTR; // root window widgets #ifndef QT_NO_CLIPBOARD -QClipboard *qt_clipboard = 0; // global clipboard object +QClipboard *qt_clipboard = Q_NULLPTR; // global clipboard object #endif -QWidgetList * qt_modal_stack=0; // stack of modal widgets +QWidgetList *qt_modal_stack = Q_NULLPTR; // stack of modal widgets /*! \internal @@ -2259,7 +2259,7 @@ void QApplication::setActiveWindow(QWidget* act) sendSpontaneousEvent(qApp, &appDeactivate); } - if (QApplicationPrivate::popupWidgets == 0) { // !inPopupMode() + if (!QApplicationPrivate::popupWidgets) { // !inPopupMode() // then focus events if (!QApplicationPrivate::active_window && QApplicationPrivate::focus_widget) { QApplicationPrivate::setFocusWidget(0, Qt::ActiveWindowFocusReason); @@ -4421,7 +4421,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) bool QApplicationPrivate::inPopupMode() const { - return QApplicationPrivate::popupWidgets != 0; + return QApplicationPrivate::popupWidgets != Q_NULLPTR; } /*! diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index f7a92e63d..20b8b4133 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -3790,7 +3790,7 @@ void QApplicationPrivate::closePopup(QWidget *popup) } if (QApplicationPrivate::popupWidgets->count() == 0) { // this was the last popup delete QApplicationPrivate::popupWidgets; - QApplicationPrivate::popupWidgets = 0; + QApplicationPrivate::popupWidgets = Q_NULLPTR; if (!qt_nograb() && popupGrabOk) { // grabbing not disabled Display *dpy = X11->display; if (popup->geometry().contains(QPoint(mouseGlobalXPos, mouseGlobalYPos)) @@ -4097,9 +4097,9 @@ bool QETWidget::translateMouseEvent(const XEvent *event) if (type == 0) // don't send event return false; - if (qApp->d_func()->inPopupMode()) { // in popup mode + QWidget *popup = qApp->activePopupWidget(); + if (popup) { // in popup mode QWidget *activePopupWidget = qApp->activePopupWidget(); - QWidget *popup = qApp->activePopupWidget(); if (popup != this) { if (event->type == LeaveNotify) return false; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 0c16c5aaa..d44edcfd8 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -7364,7 +7364,7 @@ bool QWidget::close() \sa show() hide() isVisible() */ -bool QWidget::isVisibleTo(QWidget* ancestor) const +bool QWidget::isVisibleTo(const QWidget* ancestor) const { if (!ancestor) return isVisible(); diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index aacfec64e..bde455843 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -476,8 +476,7 @@ public: bool restoreGeometry(const QByteArray &geometry); void adjustSize(); bool isVisible() const; - bool isVisibleTo(QWidget*) const; - // ### Qt 5: bool isVisibleTo(_const_ QWidget *) const + bool isVisibleTo(const QWidget*) const; inline bool isHidden() const; bool isMinimized() const;