summaryrefslogtreecommitdiff
path: root/src/protocols/XDGOutput.hpp
blob: 2469e600b5224588febb58eb7132a47bb328c1bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once

#include "WaylandProtocol.hpp"
#include <optional>

class CMonitor;

struct SXDGOutput {
    CMonitor*                         monitor = nullptr;
    std::unique_ptr<CWaylandResource> resource;

    std::optional<Vector2D>           overridePosition;

    wl_client*                        client     = nullptr;
    bool                              isXWayland = false;
};

class CXDGOutputProtocol : public IWaylandProtocol {
  public:
    CXDGOutputProtocol(const wl_interface* iface, const int& ver, const std::string& name);

    virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);

    void         onManagerResourceDestroy(wl_resource* res);
    void         onOutputResourceDestroy(wl_resource* res);
    void         onManagerGetXDGOutput(wl_client* client, wl_resource* resource, uint32_t id, wl_resource* outputResource);

  private:
    void                                           updateOutputDetails(SXDGOutput* pOutput);
    void                                           updateAllOutputs();

    std::vector<std::unique_ptr<CWaylandResource>> m_vManagerResources;
    std::vector<std::unique_ptr<SXDGOutput>>       m_vXDGOutputs;
};