summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/dialogs/qdialog.cpp2
-rw-r--r--src/widgets/kernel/qwidget.cpp31
-rw-r--r--src/widgets/kernel/qwidget_p.h16
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp4
4 files changed, 31 insertions, 22 deletions
diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp
index c416ba9a5c..9e18e2443a 100644
--- a/src/widgets/dialogs/qdialog.cpp
+++ b/src/widgets/dialogs/qdialog.cpp
@@ -155,7 +155,7 @@ void QDialogPrivate::hide(int resultCode)
q->setResult(resultCode);
q->hide();
- close_helper(QWidgetPrivate::CloseNoEvent);
+ handleClose(QWidgetPrivate::CloseNoEvent);
resetModalitySetByOpen();
}
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 90f89b99fe..069e77c1cb 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1005,7 +1005,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
data.window_modality = Qt::NonModal;
data.sizehint_forced = 0;
- data.is_closing = 0;
+ data.is_closing = false;
data.in_show = 0;
data.in_set_window_state = 0;
data.in_destructor = false;
@@ -1466,7 +1466,7 @@ QWidget::~QWidget()
if (isWindow() && isVisible() && internalWinId()) {
QT_TRY {
- d->close_helper(QWidgetPrivate::CloseNoEvent);
+ d->handleClose(QWidgetPrivate::CloseNoEvent);
} QT_CATCH(...) {
// if we're out of memory, at least hide the window.
QT_TRY {
@@ -8385,13 +8385,12 @@ void QWidgetPrivate::hideChildren(bool spontaneous)
The function is also called by the QWidget destructor, with \a mode set to CloseNoEvent.
*/
-bool QWidgetPrivate::close_helper(CloseMode mode)
+bool QWidgetPrivate::handleClose(CloseMode mode)
{
- if (data.is_closing)
- return true;
-
Q_Q(QWidget);
- data.is_closing = 1;
+
+ // We might not have initiated the close, so update the state now that we know
+ data.is_closing = true;
QPointer<QWidget> that = q;
QPointer<QWidget> parentWidget = (q->parentWidget() && !QObjectPrivate::get(q->parentWidget())->wasDeleted) ? q->parentWidget() : nullptr;
@@ -8404,7 +8403,7 @@ bool QWidgetPrivate::close_helper(CloseMode mode)
else
QCoreApplication::sendEvent(q, &e);
if (!that.isNull() && !e.isAccepted()) {
- data.is_closing = 0;
+ data.is_closing = false;
return false;
}
}
@@ -8438,7 +8437,7 @@ bool QWidgetPrivate::close_helper(CloseMode mode)
if (!that.isNull()) {
- data.is_closing = 0;
+ data.is_closing = false;
if (q->testAttribute(Qt::WA_DeleteOnClose)) {
q->setAttribute(Qt::WA_DeleteOnClose, false);
q->deleteLater();
@@ -8472,13 +8471,23 @@ bool QWidgetPrivate::close_helper(CloseMode mode)
bool QWidget::close()
{
+ return d_func()->close();
+}
+
+bool QWidgetPrivate::close()
+{
+ if (data.is_closing)
+ return true;
+
+ data.is_closing = true;
+
// Close native widgets via QWindow::close() in order to run QWindow
- // close code. The QWidget-specific close code in close_helper() will
+ // close code. The QWidget-specific close code in handleClose() will
// in this case be called from the Close event handler in QWidgetWindow.
if (QWindow *widgetWindow = windowHandle())
return widgetWindow->close();
- return d_func()->close_helper(QWidgetPrivate::CloseWithEvent);
+ return handleClose(QWidgetPrivate::CloseWithEvent);
}
/*!
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index a8a3ad1447..db458be7f1 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -236,13 +236,6 @@ public:
Q_DECLARE_FLAGS(DrawWidgetFlags, DrawWidgetFlag)
Q_FLAG(DrawWidgetFlags)
- enum CloseMode {
- CloseNoEvent,
- CloseWithEvent,
- CloseWithSpontaneousEvent
- };
- Q_ENUM(CloseMode)
-
enum Direction {
DirectionNorth = 0x01,
DirectionEast = 0x10,
@@ -374,7 +367,14 @@ public:
const QRegion &getOpaqueChildren() const;
void setDirtyOpaqueRegion();
- bool close_helper(CloseMode mode);
+ bool close();
+ enum CloseMode {
+ CloseNoEvent,
+ CloseWithEvent,
+ CloseWithSpontaneousEvent
+ };
+ Q_ENUM(CloseMode)
+ bool handleClose(CloseMode mode);
void setWindowIcon_helper();
void setWindowIcon_sys();
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index 029d152f5d..5ca26a39cb 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -841,9 +841,9 @@ void QWidgetWindow::handleResizeEvent(QResizeEvent *event)
void QWidgetWindow::handleCloseEvent(QCloseEvent *event)
{
Q_D(QWidgetWindow);
- bool is_closing = m_widget->d_func()->close_helper(d->inClose ? QWidgetPrivate::CloseWithEvent
+ bool accepted = m_widget->d_func()->handleClose(d->inClose ? QWidgetPrivate::CloseWithEvent
: QWidgetPrivate::CloseWithSpontaneousEvent);
- event->setAccepted(is_closing);
+ event->setAccepted(accepted);
}
#if QT_CONFIG(wheelevent)