From f6e875c748ae7a757164ae1203041bf513ba8db3 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 1 Sep 2022 16:37:51 +0400 Subject: [PATCH] Use new Qt 6.4 API for window extents on Wayland --- CMakeLists.txt | 1 - .../linux/ui_linux_wayland_integration.cpp | 46 ++++++++++++++----- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8352b47..4190fa6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,7 +295,6 @@ elseif(LINUX) target_link_libraries(lib_ui PUBLIC - desktop-app::lib_waylandshells desktop-app::external_wayland_client ) endif() diff --git a/ui/platform/linux/ui_linux_wayland_integration.cpp b/ui/platform/linux/ui_linux_wayland_integration.cpp index 8dba5e9..aac886c 100644 --- a/ui/platform/linux/ui_linux_wayland_integration.cpp +++ b/ui/platform/linux/ui_linux_wayland_integration.cpp @@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/platform/base_platform_info.h" #include "base/qt_signal_producer.h" -#include "waylandshells/xdg_shell.h" #include "qwayland-xdg-shell.h" #include @@ -17,7 +16,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include -Q_DECLARE_METATYPE(QMargins); +typedef void (*SetWindowMarginsFunc)( + QWindow *window, + const QMargins &margins); namespace Ui { namespace Platform { @@ -141,7 +142,20 @@ bool WaylandIntegration::xdgDecorationSupported() { } bool WaylandIntegration::windowExtentsSupported() { - return WaylandShells::XdgShell(); + const auto native = QGuiApplication::platformNativeInterface(); + if (!native) { + return false; + } + + const auto setWindowMargins = reinterpret_cast( + reinterpret_cast( + native->nativeResourceFunctionForWindow("setmargins"))); + + if (!setWindowMargins) { + return false; + } + + return true; } void WaylandIntegration::setWindowExtents( @@ -152,10 +166,15 @@ void WaylandIntegration::setWindowExtents( return; } - native->setWindowProperty( - widget->windowHandle()->handle(), - "_desktopApp_waylandCustomMargins", - QVariant::fromValue(extents)); + const auto setWindowMargins = reinterpret_cast( + reinterpret_cast( + native->nativeResourceFunctionForWindow("setmargins"))); + + if (!setWindowMargins) { + return; + } + + setWindowMargins(widget->windowHandle(), extents); } void WaylandIntegration::unsetWindowExtents(not_null widget) { @@ -164,10 +183,15 @@ void WaylandIntegration::unsetWindowExtents(not_null widget) { return; } - native->setWindowProperty( - widget->windowHandle()->handle(), - "_desktopApp_waylandCustomMargins", - QVariant()); + const auto setWindowMargins = reinterpret_cast( + reinterpret_cast( + native->nativeResourceFunctionForWindow("setmargins"))); + + if (!setWindowMargins) { + return; + } + + setWindowMargins(widget->windowHandle(), QMargins()); } void WaylandIntegration::showWindowMenu(