diff options
Diffstat (limited to 'sys/cmd/dway/dway.h')
-rw-r--r-- | sys/cmd/dway/dway.h | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/sys/cmd/dway/dway.h b/sys/cmd/dway/dway.h new file mode 100644 index 0000000..430f3b7 --- /dev/null +++ b/sys/cmd/dway/dway.h @@ -0,0 +1,201 @@ +#pragma once + +#include <u.h> +#include <libn.h> + +#include <wayland-server-core.h> + +#define WLR_USE_UNSTABLE +#include <wlr/backend.h> +#include <wlr/render/wlr_renderer.h> +#include <wlr/types/wlr_compositor.h> +#include <wlr/types/wlr_cursor.h> +#include <wlr/types/wlr_data_device.h> +#include <wlr/types/wlr_input_device.h> +#include <wlr/types/wlr_keyboard.h> +#include <wlr/types/wlr_matrix.h> +#include <wlr/types/wlr_output.h> +#include <wlr/types/wlr_output_layout.h> +#include <wlr/types/wlr_pointer.h> +#include <wlr/types/wlr_primary_selection.h> +#include <wlr/types/wlr_primary_selection_v1.h> +#include <wlr/types/wlr_screencopy_v1.h> +#include <wlr/types/wlr_seat.h> +#include <wlr/types/wlr_xcursor_manager.h> +#include <wlr/types/wlr_xdg_shell.h> +#include <wlr/util/log.h> + +#include "xdg-shell-protocol.h" +#include <xkbcommon/xkbcommon.h> + +#include <linux/input-event-codes.h> + +/* 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); |