summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vrátil <daniel.vratil@kdab.com>2016-11-02 21:20:26 +0100
committerDaniel Vrátil <daniel.vratil@kdab.com>2016-11-22 12:40:33 +0000
commitbabc7c5929d5157330eb4010cf1483861528eeb8 (patch)
treece2a77a39ea6220cce1b5ade1fab536d279e6637
parenta01f2112f4b88dbccd4af8c16248457376e363ab (diff)
Introduce QWindow::setFlag and QWidget::setWindowFlag
Analogous to QWidget::setAttribute(), introduce an API to easily enable/disable a single window flag without having to resort to w.setFlags(w.flags() | Qt::NewFlag). Change-Id: Ib0f7254a34c8d884cdec181c41b99e5ef035d954 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
-rw-r--r--src/gui/kernel/qwindow.cpp19
-rw-r--r--src/gui/kernel/qwindow.h1
-rw-r--r--src/widgets/kernel/qwidget.cpp19
-rw-r--r--src/widgets/kernel/qwidget.h1
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp13
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp5
6 files changed, 57 insertions, 1 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 124e997c58..4822793ae7 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -821,6 +821,8 @@ QSurfaceFormat QWindow::format() const
The actual window flags might differ from the flags set with setFlags()
if the requested flags could not be fulfilled.
+
+ \sa setFlag()
*/
void QWindow::setFlags(Qt::WindowFlags flags)
{
@@ -840,6 +842,23 @@ Qt::WindowFlags QWindow::flags() const
}
/*!
+ \since 5.9
+
+ Sets the window flag \a flag on this window if \a on is true;
+ otherwise clears the flag.
+
+ \sa setFlags(), flags(), type()
+*/
+void QWindow::setFlag(Qt::WindowType flag, bool on)
+{
+ Q_D(QWindow);
+ if (on)
+ setFlags(d->windowFlags | flag);
+ else
+ setFlags(d->windowFlags & ~flag);
+}
+
+/*!
Returns the type of the window.
This returns the part of the window flags that represents
diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h
index bf25cf64c9..0b84f30468 100644
--- a/src/gui/kernel/qwindow.h
+++ b/src/gui/kernel/qwindow.h
@@ -163,6 +163,7 @@ public:
void setFlags(Qt::WindowFlags flags);
Qt::WindowFlags flags() const;
+ void setFlag(Qt::WindowType, bool on = true);
Qt::WindowType type() const;
QString title() const;
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index ace50f13ee..1db9f5d75e 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -10357,7 +10357,7 @@ void QWidget::updateGeometry()
a window, causing the widget to be hidden. You must call show() to make
the widget visible again..
- \sa windowType(), {Window Flags Example}
+ \sa windowType(), setWindowFlag(), {Window Flags Example}
*/
void QWidget::setWindowFlags(Qt::WindowFlags flags)
{
@@ -10365,6 +10365,23 @@ void QWidget::setWindowFlags(Qt::WindowFlags flags)
d->setWindowFlags(flags);
}
+/*!
+ \since 5.9
+
+ Sets the window flag \a flag on this widget if \a on is true;
+ otherwise clears the flag.
+
+ \sa setWindowFlags(), windowFlags(), windowType()
+*/
+void QWidget::setWindowFlag(Qt::WindowType flag, bool on)
+{
+ Q_D(QWidget);
+ if (on)
+ d->setWindowFlags(data->window_flags | flag);
+ else
+ d->setWindowFlags(data->window_flags & ~flag);
+}
+
/*! \internal
Implemented in QWidgetPrivate so that QMdiSubWindowPrivate can reimplement it.
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index 5edf2c62da..daf6b9e85b 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -562,6 +562,7 @@ public:
void setWindowFlags(Qt::WindowFlags type);
inline Qt::WindowFlags windowFlags() const;
+ void setWindowFlag(Qt::WindowType, bool on = true);
void overrideWindowFlags(Qt::WindowFlags type);
inline Qt::WindowType windowType() const;
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index a08f1896bb..4fc18be3d2 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -102,6 +102,7 @@ private slots:
void initTestCase();
void stateChange_data();
void stateChange();
+ void flags();
void cleanup();
private:
@@ -2194,6 +2195,18 @@ void tst_QWindow::requestUpdate()
QTRY_COMPARE(window.received(QEvent::UpdateRequest), 2);
}
+void tst_QWindow::flags()
+{
+ Window window;
+ const auto baseFlags = window.flags();
+ window.setFlags(window.flags() | Qt::FramelessWindowHint);
+ QCOMPARE(window.flags(), baseFlags | Qt::FramelessWindowHint);
+ window.setFlag(Qt::WindowStaysOnTopHint, true);
+ QCOMPARE(window.flags(), baseFlags | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
+ window.setFlag(Qt::FramelessWindowHint, false);
+ QCOMPARE(window.flags(), baseFlags | Qt::WindowStaysOnTopHint);
+}
+
#include <tst_qwindow.moc>
QTEST_MAIN(tst_QWindow)
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 0c25a01ba0..28849e345b 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -8957,8 +8957,13 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave()
void tst_QWidget::windowFlags()
{
QWidget w;
+ const auto baseFlags = w.windowFlags();
w.setWindowFlags(w.windowFlags() | Qt::FramelessWindowHint);
QVERIFY(w.windowFlags() & Qt::FramelessWindowHint);
+ w.setWindowFlag(Qt::WindowStaysOnTopHint, true);
+ QCOMPARE(w.windowFlags(), baseFlags | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
+ w.setWindowFlag(Qt::FramelessWindowHint, false);
+ QCOMPARE(w.windowFlags(), baseFlags | Qt::WindowStaysOnTopHint);
}
void tst_QWidget::initialPosForDontShowOnScreenWidgets()