aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/xwayland/Server.hpp
blob: 0c06a56c538b30ba3717d260e672fc30682d161f (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once

#include <array>
#include "../helpers/signal/Signal.hpp"

struct wl_event_source;
struct wl_client;

// TODO: add lazy mode
class CXWaylandServer {
  public:
    CXWaylandServer();
    ~CXWaylandServer();

    // create the server.
    bool create();

    // starts the server, meant to be called by CXWaylandServer.
    bool start();

    // called on ready
    int  ready(int fd, uint32_t mask);

    void die();

    struct {
        CSignal ready;
    } events;

    wl_client* xwaylandClient = nullptr;

  private:
    bool                            tryOpenSockets();
    void                            runXWayland(int notifyFD);

    pid_t                           serverPID = 0;

    std::string                     displayName;
    int                             display       = -1;
    std::array<int, 2>              xFDs          = {-1, -1};
    std::array<wl_event_source*, 2> xFDReadEvents = {nullptr, nullptr};
    wl_event_source*                idleSource    = nullptr;
    wl_event_source*                pipeSource    = nullptr;
    std::array<int, 2>              xwmFDs        = {-1, -1};
    std::array<int, 2>              waylandFDs    = {-1, -1};

    friend class CXWM;
};