#pragma once #include #include #include #define WLR_USE_UNSTABLE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "xdg-shell-protocol.h" #include #include /* main types */ typedef union Arg Arg; typedef struct Button Button; typedef struct Mouse Mouse; typedef struct Key Key; typedef struct Keyboard Keyboard; typedef struct Monitor Monitor; typedef struct Layout Layout; typedef struct Client Client; typedef struct Payload Payload; typedef struct Rule Rule; typedef struct MonitorRule MonitorRule; union Arg { int i; uint ui; float f; const void *p; }; struct Button { uint mod; uint kind; void (*func)(const Arg *); Arg arg; }; enum { MouseNormal, MouseMove, MouseResize, }; struct Mouse { uint mode; struct wlr_xcursor_manager *manager; struct wlr_cursor *cursor; struct { struct wl_listener axis; struct wl_listener frame; struct wl_listener button; struct wl_listener motion; struct wl_listener absmotion; } ev; }; struct Key { uint32 mod; xkb_keysym_t sym; void (*func)(const Arg *); Arg arg; }; struct Keyboard { struct wl_list link; struct wlr_input_device *dev; struct { struct wl_listener modifier; struct wl_listener keypress; } ev; }; struct Monitor { struct wl_list link; struct wlr_output *dev; struct { struct wl_listener draw; struct wl_listener free; } ev; struct { struct wlr_box all; struct wlr_box win; } area; const Layout *lt[2]; uint seltags; uint sellt; uint tagset[2]; double mfact; int nmaster; }; struct Layout { char *sym; void (*arrange)(Monitor *); }; struct Client { struct wlr_xdg_surface *surf; struct wlr_box dim; struct { struct wl_list tiles; struct wl_list stack; struct wl_list focus; } pos; struct { struct wl_listener map; struct wl_listener unmap; struct wl_listener free; } ev; int bw; uint tags; int floating; Monitor *m; }; struct Payload { struct wlr_output *dev; struct timespec *now; int x, y; }; /* hooks provided to config */ static void chvt(const Arg *arg); static void incmaster(const Arg *arg); static void focusmonitor(const Arg *arg); static void focusstack(const Arg *arg); static void moveresize(const Arg *arg); static void quit(const Arg *arg); static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void spawn(const Arg *arg); static void tag(const Arg *arg); static void tagmonitor(const Arg *arg); static void togglefloating(const Arg *arg); static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); static void view(const Arg *arg); /* layouts */ static void tile(Monitor *m); #include "config.h" /* callback functions */ static void ev·newmonitor(struct wl_listener *ev, void *arg); static void ev·freemonitor(struct wl_listener *ev, void *arg); static void ev·newidev(struct wl_listener *ev, void *arg); static void ev·freeidev(struct wl_listener *ev, void *arg); static void ev·render(struct wl_listener *ev, void *arg); static void ev·newclient(struct wl_listener *ev, void *arg); static void ev·mapclient(struct wl_listener *ev, void *arg); static void ev·unmapclient(struct wl_listener *ev, void *arg); static void ev·freeclient(struct wl_listener *ev, void *arg); static void ev·setcursor(struct wl_listener *ev, void *arg); static void ev·setsel(struct wl_listener *ev, void *arg); static void ev·setpsel(struct wl_listener *ev, void *arg); static void ev·mousescroll(struct wl_listener *ev, void *arg); static void ev·mouseframe(struct wl_listener *ev, void *arg); static void ev·mouseclick(struct wl_listener *ev, void *arg); static void ev·mouserelmove(struct wl_listener *ev, void *arg); static void ev·mouseabsmove(struct wl_listener *ev, void *arg); static void ev·keypress(struct wl_listener *ev, void *arg); static void ev·modifier(struct wl_listener *ev, void *arg);