aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/dway/dway.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/dway/dway.h')
-rw-r--r--sys/cmd/dway/dway.h201
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);