From 54841de9911133e3e731d7624acba6a7d9e98829 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 25 May 2023 03:38:38 +0400 Subject: [PATCH] Use new base_linux_wayland_utilities --- .../linux/linux_wayland_integration.cpp | 85 ++++++------------- Telegram/lib_base | 2 +- Telegram/lib_ui | 2 +- 3 files changed, 27 insertions(+), 62 deletions(-) diff --git a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp index c693282e2..c6193869f 100644 --- a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp +++ b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "platform/linux/linux_wayland_integration.h" +#include "base/platform/linux/base_linux_wayland_utilities.h" #include "base/platform/base_platform_info.h" #include "base/qt_signal_producer.h" #include "base/flat_map.h" @@ -20,62 +21,27 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL using namespace QNativeInterface; using namespace QNativeInterface::Private; +using namespace base::Platform::Wayland; namespace Platform { namespace internal { -namespace { - -struct WlRegistryDeleter { - void operator()(wl_registry *value) { - wl_registry_destroy(value); - } -}; - -struct PlasmaSurfaceDeleter { - void operator()(org_kde_plasma_surface *value) { - org_kde_plasma_surface_destroy(value); - } -}; - -template -class QtWaylandAutoDestroyer : public T { -public: - QtWaylandAutoDestroyer() = default; - - ~QtWaylandAutoDestroyer() { - if (!this->isInitialized()) { - return; - } - - static constexpr auto HasDestroy = requires(const T &t) { - t.destroy(); - }; - - if constexpr (HasDestroy) { - this->destroy(); - } else { - free(this->object()); - this->init(nullptr); - } - } -}; - -} // namespace struct WaylandIntegration::Private { - org_kde_plasma_surface *plasmaSurface(QWindow *window); - std::unique_ptr registry; - QtWaylandAutoDestroyer plasmaShell; + QtWayland::org_kde_plasma_surface plasmaSurface(QWindow *window); + + std::unique_ptr registry; + AutoDestroyer plasmaShell; uint32_t plasmaShellName = 0; - base::flat_map> plasmaSurfaces; + base::flat_map< + wl_surface*, + AutoDestroyer + > plasmaSurfaces; rpl::lifetime lifetime; - static const struct wl_registry_listener RegistryListener; + static const wl_registry_listener RegistryListener; }; -const struct wl_registry_listener WaylandIntegration::Private::RegistryListener = { +const wl_registry_listener WaylandIntegration::Private::RegistryListener = { decltype(wl_registry_listener::global)(+[]( Private *data, wl_registry *registry, @@ -92,40 +58,39 @@ const struct wl_registry_listener WaylandIntegration::Private::RegistryListener wl_registry *registry, uint32_t name) { if (name == data->plasmaShellName) { - free(data->plasmaShell.object()); - data->plasmaShell.init(nullptr); + data->plasmaShell = {}; data->plasmaShellName = 0; } }), }; -org_kde_plasma_surface *WaylandIntegration::Private::plasmaSurface( +QtWayland::org_kde_plasma_surface WaylandIntegration::Private::plasmaSurface( QWindow *window) { if (!plasmaShell.isInitialized()) { - return nullptr; + return {}; } const auto native = window->nativeInterface(); if (!native) { - return nullptr; + return {}; } const auto surface = native->surface(); if (!surface) { - return nullptr; + return {}; } const auto it = plasmaSurfaces.find(surface); if (it != plasmaSurfaces.cend()) { - return it->second.get(); + return it->second; } - const auto result = plasmaShell.get_surface(surface); - if (!result) { - return nullptr; + const auto plasmaSurface = plasmaShell.get_surface(surface); + if (!plasmaSurface) { + return {}; } - plasmaSurfaces.emplace(surface, result); + const auto result = plasmaSurfaces.emplace(surface, plasmaSurface); base::qt_signal_producer( native, @@ -137,7 +102,7 @@ org_kde_plasma_surface *WaylandIntegration::Private::plasmaSurface( } }, lifetime); - return result; + return result.first->second; } WaylandIntegration::WaylandIntegration() @@ -182,11 +147,11 @@ bool WaylandIntegration::skipTaskbarSupported() { void WaylandIntegration::skipTaskbar(QWindow *window, bool skip) { auto plasmaSurface = _private->plasmaSurface(window); - if (!plasmaSurface) { + if (!plasmaSurface.isInitialized()) { return; } - org_kde_plasma_surface_set_skip_taskbar(plasmaSurface, skip); + plasmaSurface.set_skip_taskbar(skip); } } // namespace internal diff --git a/Telegram/lib_base b/Telegram/lib_base index 840250261..26894d78f 160000 --- a/Telegram/lib_base +++ b/Telegram/lib_base @@ -1 +1 @@ -Subproject commit 8402502615af3d58da6785f00681fc5fb43b907f +Subproject commit 26894d78fa7b49fd218e54d1f118842a3ab4288b diff --git a/Telegram/lib_ui b/Telegram/lib_ui index a7d503188..bf4cb33fa 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit a7d503188918904d12a069bca7d3f6c92b9fb553 +Subproject commit bf4cb33faba84b855eff583bb1b20004434b5424