more wrapper soup. xdg decoration manager, scene/tree node factories so callers stop touching raw wlr_scene_*_create, a box geometry helper, and seat pointer/keyboard focus clearing. dragging myself through it.
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
// SPDX-License-Identifier: AGPL-3.0-only
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
|
|
#include "wlr/wlr.hpp"
|
|
#include "wlr/display.hpp"
|
|
#include "wlr/signals.hpp"
|
|
#include "wlr/xdg_shell.hpp"
|
|
|
|
namespace wlr {
|
|
|
|
class XdgToplevelDecoration {
|
|
public:
|
|
enum Mode { None = 0, ClientSide = 1, ServerSide = 2 };
|
|
|
|
XdgToplevelDecoration(struct wlr_xdg_toplevel_decoration_v1* d) : m_dec(d) {}
|
|
struct wlr_xdg_toplevel_decoration_v1* raw() const { return m_dec; }
|
|
explicit operator bool() const { return m_dec != nullptr; }
|
|
|
|
Mode current_mode() const { return static_cast<Mode>(m_dec->current.mode); }
|
|
Mode requested_mode() const { return static_cast<Mode>(m_dec->requested_mode); }
|
|
void set_mode(Mode m) {
|
|
wlr_xdg_toplevel_decoration_v1_set_mode(m_dec,
|
|
static_cast<enum wlr_xdg_toplevel_decoration_v1_mode>(m));
|
|
}
|
|
|
|
Toplevel toplevel() const { return Toplevel{m_dec->toplevel}; }
|
|
|
|
void on_request_mode(std::function<void(void*)> cb) {
|
|
m_request.connect(&m_dec->events.request_mode, std::move(cb));
|
|
}
|
|
void on_destroy(std::function<void(void*)> cb) {
|
|
m_destroy.connect(&m_dec->events.destroy, std::move(cb));
|
|
}
|
|
|
|
private:
|
|
struct wlr_xdg_toplevel_decoration_v1* m_dec;
|
|
SignalSink m_request;
|
|
SignalSink m_destroy;
|
|
};
|
|
|
|
class XdgDecorationManager {
|
|
public:
|
|
XdgDecorationManager(Display& d)
|
|
: m_mgr(wlr_xdg_decoration_manager_v1_create(d.raw())) {}
|
|
struct wlr_xdg_decoration_manager_v1* raw() const { return m_mgr; }
|
|
explicit operator bool() const { return m_mgr != nullptr; }
|
|
|
|
void on_new_toplevel_decoration(std::function<void(void*)> cb) {
|
|
m_new.connect(&m_mgr->events.new_toplevel_decoration, std::move(cb));
|
|
}
|
|
|
|
private:
|
|
struct wlr_xdg_decoration_manager_v1* m_mgr;
|
|
SignalSink m_new;
|
|
};
|
|
|
|
}
|