From 2dd3add5b342b9defbfe369425e28c46d762dc0d Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 24 Aug 2023 08:18:48 +0400 Subject: [PATCH] Move code not really depending on Wayland-specific dependencies out of WaylandIntegration --- .../linux/ui_linux_wayland_integration.cpp | 32 ------------ .../linux/ui_linux_wayland_integration.h | 3 -- .../ui_linux_wayland_integration_dummy.cpp | 12 ----- ui/platform/linux/ui_utility_linux.cpp | 50 +++++++++++++------ 4 files changed, 36 insertions(+), 61 deletions(-) diff --git a/ui/platform/linux/ui_linux_wayland_integration.cpp b/ui/platform/linux/ui_linux_wayland_integration.cpp index b01f2f7..455341b 100644 --- a/ui/platform/linux/ui_linux_wayland_integration.cpp +++ b/ui/platform/linux/ui_linux_wayland_integration.cpp @@ -85,38 +85,6 @@ bool WaylandIntegration::xdgDecorationSupported() { return _private->xdgDecoration.has_value(); } -bool WaylandIntegration::windowExtentsSupported() { - QWindow window; - window.create(); - return window.nativeInterface(); -} - -void WaylandIntegration::setWindowExtents( - not_null widget, - const QMargins &extents) { - const auto window = widget->windowHandle(); - Expects(window != nullptr); - - const auto native = window->nativeInterface(); - if (!native) { - return; - } - - native->setCustomMargins(extents); -} - -void WaylandIntegration::unsetWindowExtents(not_null widget) { - const auto window = widget->windowHandle(); - Expects(window != nullptr); - - const auto native = window->nativeInterface(); - if (!native) { - return; - } - - native->setCustomMargins(QMargins()); -} - void WaylandIntegration::showWindowMenu( not_null widget, const QPoint &point) { diff --git a/ui/platform/linux/ui_linux_wayland_integration.h b/ui/platform/linux/ui_linux_wayland_integration.h index 4ce6a8a..7d13631 100644 --- a/ui/platform/linux/ui_linux_wayland_integration.h +++ b/ui/platform/linux/ui_linux_wayland_integration.h @@ -20,9 +20,6 @@ public: [[nodiscard]] static WaylandIntegration *Instance(); [[nodiscard]] bool xdgDecorationSupported(); - [[nodiscard]] bool windowExtentsSupported(); - void setWindowExtents(not_null widget, const QMargins &extents); - void unsetWindowExtents(not_null widget); void showWindowMenu(not_null widget, const QPoint &point); private: diff --git a/ui/platform/linux/ui_linux_wayland_integration_dummy.cpp b/ui/platform/linux/ui_linux_wayland_integration_dummy.cpp index 87b6203..171fc48 100644 --- a/ui/platform/linux/ui_linux_wayland_integration_dummy.cpp +++ b/ui/platform/linux/ui_linux_wayland_integration_dummy.cpp @@ -30,18 +30,6 @@ bool WaylandIntegration::xdgDecorationSupported() { return false; } -bool WaylandIntegration::windowExtentsSupported() { - return false; -} - -void WaylandIntegration::setWindowExtents( - not_null widget, - const QMargins &extents) { -} - -void WaylandIntegration::unsetWindowExtents(not_null widget) { -} - void WaylandIntegration::showWindowMenu( not_null widget, const QPoint &point) { diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index 53d04a3..956317d 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace Ui { namespace Platform { @@ -467,9 +468,14 @@ std::optional IsOverlapped( } bool WindowExtentsSupported() { - if (const auto integration = WaylandIntegration::Instance()) { - return integration->windowExtentsSupported(); +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + using namespace QNativeInterface::Private; + QWindow window; + window.create(); + if (window.nativeInterface()) { + return true; } +#endif // Qt >= 6.5.0 #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION namespace XCB = base::Platform::XCB; @@ -485,23 +491,39 @@ bool WindowExtentsSupported() { } void SetWindowExtents(not_null widget, const QMargins &extents) { - if (const auto integration = WaylandIntegration::Instance()) { - integration->setWindowExtents(widget, extents); - } else if (::Platform::IsX11()) { -#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION - SetXCBFrameExtents(widget, extents); -#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + using namespace QNativeInterface::Private; + if (const auto native = not_null(widget->windowHandle()) + ->nativeInterface()) { + native->setCustomMargins(extents); + return; } +#endif // Qt >= 6.5.0 + +#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION + if (::Platform::IsX11()) { + SetXCBFrameExtents(widget, extents); + return; + } +#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION } void UnsetWindowExtents(not_null widget) { - if (const auto integration = WaylandIntegration::Instance()) { - integration->unsetWindowExtents(widget); - } else if (::Platform::IsX11()) { -#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION - UnsetXCBFrameExtents(widget); -#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + using namespace QNativeInterface::Private; + if (const auto native = not_null(widget->windowHandle()) + ->nativeInterface()) { + native->setCustomMargins(QMargins()); + return; } +#endif // Qt >= 6.5.0 + +#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION + if (::Platform::IsX11()) { + UnsetXCBFrameExtents(widget); + return; + } +#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION } void ShowWindowMenu(not_null widget, const QPoint &point) {