From: Friedemann Kleint Date: Thu, 28 Jun 2012 08:19:17 +0000 (+0200) Subject: Fix QDockWidgets on XCB. X-Git-Tag: 071012110112~105 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d3af02f190461c9b98dc2f575aa84945b48ec360;p=profile%2Fivi%2Fqtbase.git Fix QDockWidgets on XCB. Do not use native decoration. Task-number: QTBUG-26296 Change-Id: I15a6ace737a08003ee196bde3d0b5ca65aa00408 Reviewed-by: Samuel Rødal --- diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 551549f..c35b761 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -207,13 +207,18 @@ bool QDockWidgetLayout::nativeWindowDeco() const return nativeWindowDeco(parentWidget()->isWindow()); } +static bool isXcb() +{ + static const bool xcb = !QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive); + return xcb; +} + bool QDockWidgetLayout::nativeWindowDeco(bool floating) const { -#if defined(Q_WS_X11) || defined(Q_OS_WINCE) - Q_UNUSED(floating); +#ifdef Q_OS_WINCE return false; #else - return floating && item_list[QDockWidgetLayout::TitleBar] == 0; + return !isXcb() && (floating && item_list[QDockWidgetLayout::TitleBar] == 0); #endif } @@ -750,19 +755,19 @@ void QDockWidgetPrivate::endDrag(bool abort) if (state->ownWidgetItem) delete state->widgetItem; mwLayout->restore(); -#ifdef Q_WS_X11 - // get rid of the X11BypassWindowManager window flag and activate the resizer - Qt::WindowFlags flags = q->windowFlags(); - flags &= ~Qt::X11BypassWindowManagerHint; - q->setWindowFlags(flags); - resizer->setActive(QWidgetResizeHandler::Resize, true); - q->show(); -#else - QDockWidgetLayout *myLayout - = qobject_cast(layout); - resizer->setActive(QWidgetResizeHandler::Resize, - myLayout->widgetForRole(QDockWidgetLayout::TitleBar) != 0); -#endif + if (isXcb()) { + // get rid of the X11BypassWindowManager window flag and activate the resizer + Qt::WindowFlags flags = q->windowFlags(); + flags &= ~Qt::X11BypassWindowManagerHint; + q->setWindowFlags(flags); + resizer->setActive(QWidgetResizeHandler::Resize, true); + q->show(); + } else { + QDockWidgetLayout *myLayout + = qobject_cast(layout); + resizer->setActive(QWidgetResizeHandler::Resize, + myLayout->widgetForRole(QDockWidgetLayout::TitleBar) != 0); + } undockedGeometry = q->geometry(); q->activateWindow(); } else {