summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/kernel/qwidget.cpp')
-rw-r--r--src/widgets/kernel/qwidget.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index ecf73ee777..c4ea213f29 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -2080,8 +2080,15 @@ void QWidgetPrivate::setOpaque(bool opaque)
void QWidgetPrivate::updateIsTranslucent()
{
Q_Q(QWidget);
- if (QWindow *window = q->windowHandle())
- window->setOpacity(isOpaque ? qreal(1.0) : qreal(0.0));
+ if (QWindow *window = q->windowHandle()) {
+ QSurfaceFormat format = window->format();
+ const int oldAlpha = format.alphaBufferSize();
+ const int newAlpha = q->testAttribute(Qt::WA_TranslucentBackground)? 8 : 0;
+ if (oldAlpha != newAlpha) {
+ format.setAlphaBufferSize(newAlpha);
+ window->setFormat(format);
+ }
+ }
}
static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrush &brush)