From 0a8f62d8c7116be9e344f351df679599908fb29c Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 4 Jun 2020 19:10:07 -0700 Subject: refactored --- sys/cmd/dwm/dwm.h | 346 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 sys/cmd/dwm/dwm.h (limited to 'sys/cmd/dwm/dwm.h') diff --git a/sys/cmd/dwm/dwm.h b/sys/cmd/dwm/dwm.h new file mode 100644 index 0000000..148ca89 --- /dev/null +++ b/sys/cmd/dwm/dwm.h @@ -0,0 +1,346 @@ +#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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xdg-shell.h" +#include "wlr-layer-shell.h" + +#include +#include +#include +#include + + +/* global macros */ +#define VISIBLEON(C, M) ((C)->m == (M) && ((C)->tags & (M)->tagset[(M)->seltags])) +#define CLEANMASK(mask) (mask & ~WLR_MODIFIER_CAPS) +#define TAGMASK ((1 << arrlen(tags)) - 1) + +/* main types */ + +typedef union Arg Arg; +typedef struct Button Button; +typedef struct Mouse Mouse; +typedef struct Grab Grab; +typedef struct Key Key; +typedef struct Keyboard Keyboard; +typedef struct Monitor Monitor; +typedef struct Layout Layout; +typedef struct Client Client; +typedef struct Deco Deco; +typedef struct Layer Layer; +typedef struct Payload Payload; + +typedef struct Rule Rule; +typedef struct MonitorRule MonitorRule; + +typedef struct WindowManager WindowManager; + +union Arg +{ + int i; + uint ui; + float f; + const void *v; +}; + +struct Button +{ + uint mod; + uint kind; + void (*func)(const Arg *); + Arg arg; +}; + +enum +{ + MouseNormal=0, 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; + struct wl_listener cursor; + struct wl_listener sel; + struct wl_listener psel; + } ev; +}; + +struct Grab +{ + Client *c; + int x, y; +}; + +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 Layer +{ + struct wl_list link; + struct wlr_layer_surface_v1 *surf; + + struct { + struct wl_listener map; + struct wl_listener unmap; + struct wl_listener free; + struct wl_listener commit; + struct wl_listener detach; + /* struct wl_listener popup; */ + } ev; + + struct wlr_box dim; + enum zwlr_layer_shell_v1_layer z; +}; +struct Monitor { + struct wl_list link; + struct wlr_output *dev; + struct { + struct wl_listener draw; + struct wl_listener free; + } ev; + struct { + struct wl_signal kill; + } sig; + struct { + struct wlr_box all; + struct wlr_box win; + } area; + + struct wl_list layers[4]; + struct wlr_output_damage damage; + + const Layout *lt[2]; + uint seltags; + uint sellt; + uint tagset[2]; + double mfact; + int nmaster; +}; + +struct Layout +{ + char *sym; + void (*arrange)(Monitor *); +}; + +struct MonitorRule { + char *name; + float mfact; + int nmaster; + float scale; + const Layout *lt; + enum wl_output_transform rr; +}; + +struct Rule { + char *id; + char *title; + uint tags; + int floating; + int 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; + } link; + struct { + struct wl_listener map; + struct wl_listener unmap; + struct wl_listener free; + } ev; + int bw; + uint tags; + int floating; + Monitor *m; +}; + +struct Deco +{ + struct wl_list link; + struct wlr_server_decoration *wlr; + + struct { + struct wl_listener free; + struct wl_listener mode; + } ev; +}; + +struct Payload +{ + struct wlr_output *dev; + struct timespec *now; + int x, y; +}; + +struct WindowManager +{ + struct wl_display *display; + struct wlr_backend *backend; + struct wlr_renderer *draw; + struct wlr_compositor *compositor; + struct wlr_xdg_shell *xdgsh; + struct wlr_layer_shell_v1 *laysh; + struct wlr_output_layout *layout; + struct wlr_idle *idle; + struct wlr_seat *seat; + + struct { + struct wlr_server_decoration_manager *deco; + struct wlr_xdg_decoration_manager *xdeco; + } mngr; + + struct { + struct wl_event_loop *loop; + /* i/o devices */ + struct wl_listener input; + struct wl_listener output; + struct wl_listener client; + /* shells */ + struct wl_listener layer; + struct wl_listener deco; + } ev; + + struct { + struct wl_list odevs; + struct wl_list idevs; + struct wl_list tiles; /* order of tiles */ + struct wl_list stack; /* order w/in stack */ + struct wl_list focus; /* order of focus */ + struct wl_list keyboards; + struct wl_list decos; + }; + + /* geometry of union of output devices */ + struct wlr_box dim; +}; + +/* funcs.c */ +void chvt(const Arg *arg); +void incmaster(const Arg *arg); +void focusmonitor(const Arg *arg); +void focusstack(const Arg *arg); +void moveresize(const Arg *arg); +void quit(const Arg *arg); +void setlayout(const Arg *arg); +void setmfact(const Arg *arg); +void spawn(const Arg *arg); +void tag(const Arg *arg); +void tagmonitor(const Arg *arg); +void togglefloating(const Arg *arg); +void toggletag(const Arg *arg); +void toggleview(const Arg *arg); +void view(const Arg *arg); + +/* layouts */ +void tile(Monitor *m); + +#include "config.h" + +// ----------------------------------------------------------------------- +// global variables + +extern Mouse mouse; +extern Grab grab; +extern Monitor *monitor; /* currently focused */ +extern WindowManager dwm; + +// ----------------------------------------------------------------------- +// global functions + +/* util.c */ +void fatal(byte *fmt, ...); +void scale(struct wlr_box *box, float by); + +/* input.c */ +void ev·newinput(struct wl_listener *ev, void *arg); + +/* client.c */ +void ev·newclient(struct wl_listener *ev, void *arg); + +void applybounds(Client *c, struct wlr_box *bbox); +void applyrules(Client *c); +Client *clientat(double x, double y); +Client *getclient(void); +Client *lastfocus(void); +void resize(Client *c, int x, int y, int w, int h, int interact); +void setfocus(Client *c, struct wlr_surface *surf, int lift); +void setfloating(Client *c, int f); +void pointerfocus(Client *c, struct wlr_surface *surf, double sx, double sy, uint32 time); + +/* output.c */ +void ev·newmonitor(struct wl_listener *ev, void *arg); + +void arrange(Monitor *m); +void setmonitor(Client *c, Monitor *m, uint newtags); +Monitor *getmonitor(int dir); +Monitor *monitorat(double x, double y); + +/* layer.c */ +void ev·newlayershell(struct wl_listener *ev, void *arg); +void arrangelayers(Monitor *m); + +/* decoration.c */ +void ev·newdecoration(struct wl_listener *ev, void *arg); -- cgit v1.2.1