diff options
Diffstat (limited to 'xbmc/windowing/wayland/ShellSurfaceWlShell.cpp')
-rw-r--r-- | xbmc/windowing/wayland/ShellSurfaceWlShell.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/xbmc/windowing/wayland/ShellSurfaceWlShell.cpp b/xbmc/windowing/wayland/ShellSurfaceWlShell.cpp new file mode 100644 index 0000000..2c91858 --- /dev/null +++ b/xbmc/windowing/wayland/ShellSurfaceWlShell.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "ShellSurfaceWlShell.h" + +#include "Registry.h" + +#include <cmath> + +using namespace KODI::WINDOWING::WAYLAND; +using namespace std::placeholders; + +CShellSurfaceWlShell::CShellSurfaceWlShell(IShellSurfaceHandler& handler, + CConnection& connection, + const wayland::surface_t& surface, + const std::string& title, + const std::string& class_) + : m_handler{handler} +{ + { + CRegistry registry{connection}; + registry.RequestSingleton(m_shell, 1, 1); + registry.Bind(); + } + + m_shellSurface = m_shell.get_shell_surface(surface); + + m_surfaceState.set(STATE_ACTIVATED); + m_shellSurface.set_class(class_); + m_shellSurface.set_title(title); + m_shellSurface.on_ping() = [this](std::uint32_t serial) + { + m_shellSurface.pong(serial); + }; + m_shellSurface.on_configure() = [this](const wayland::shell_surface_resize&, std::int32_t width, + std::int32_t height) { + // wl_shell does not have serials + m_handler.OnConfigure(0, {width, height}, m_surfaceState); + }; +} + +void CShellSurfaceWlShell::AckConfigure(std::uint32_t) +{ +} + +void CShellSurfaceWlShell::Initialize() +{ + // Nothing to do here - constructor already handles it + // This is not a problem since the constructor is guaranteed not to call + // handler functions since the event loop is not running. +} + +void CShellSurfaceWlShell::SetFullScreen(const wayland::output_t& output, float refreshRate) +{ + m_shellSurface.set_fullscreen(wayland::shell_surface_fullscreen_method::driver, std::round(refreshRate * 1000.0f), output); + m_surfaceState.set(STATE_FULLSCREEN); +} + +void CShellSurfaceWlShell::SetWindowed() +{ + m_shellSurface.set_toplevel(); + m_surfaceState.reset(STATE_FULLSCREEN); +} + +void CShellSurfaceWlShell::SetMaximized() +{ + m_shellSurface.set_maximized(wayland::output_t()); + m_surfaceState.set(STATE_MAXIMIZED); +} + +void CShellSurfaceWlShell::UnsetMaximized() +{ + m_surfaceState.reset(STATE_MAXIMIZED); +} + +void CShellSurfaceWlShell::SetMinimized() +{ +} + +void CShellSurfaceWlShell::SetWindowGeometry(CRectInt) +{ +} + +void CShellSurfaceWlShell::StartMove(const wayland::seat_t& seat, std::uint32_t serial) +{ + m_shellSurface.move(seat, serial); +} + +void CShellSurfaceWlShell::StartResize(const wayland::seat_t& seat, std::uint32_t serial, wayland::shell_surface_resize edge) +{ + m_shellSurface.resize(seat, serial, edge); +} + +void CShellSurfaceWlShell::ShowShellContextMenu(const wayland::seat_t&, std::uint32_t, CPointInt) +{ +} |