From 7883981fe9976b3933959c04fa8cc62158c70855 Mon Sep 17 00:00:00 2001 From: uint23 Date: Mon, 14 Apr 2025 22:18:55 +0100 Subject: inital window manager setup. check for other window managers too --- Makefile | 24 ++++++++++++++++++++++++ src/sxwm.c | 39 +++++++++++++++++++++++++++++++++++++++ src/sxwm.h | 21 +++++++++++++++++++++ src/util.h | 8 ++++++++ src/utils.c | 31 +++++++++++++++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 Makefile create mode 100644 src/sxwm.c create mode 100644 src/sxwm.h create mode 100644 src/util.h create mode 100644 src/utils.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2cdfaf1 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +CC = gcc +CFLAGS = -Wall -Wextra -O2 -g -Isrc +LDFLAGS = -lX11 + +SRC_DIR = src +SRC = $(wildcard $(SRC_DIR)/*.c) +OBJ = $(SRC:.c=.o) +BIN = sxwm + +all: $(BIN) + +$(BIN): $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + +$(SRC_DIR)/%.o: $(SRC_DIR)/%.c + $(CC) $(CFLAGS) -c -o $@ $< + +x: + rm -f $(SRC_DIR)/*.o $(BIN) + +r: + x all + +.PHONY: all clean rebuild diff --git a/src/sxwm.c b/src/sxwm.c new file mode 100644 index 0000000..19b8975 --- /dev/null +++ b/src/sxwm.c @@ -0,0 +1,39 @@ +#include "sxwm.h" +#include "util.h" + +static void +run(void) +{ + XEvent xev; + for (;;) { + XNextEvent(dpy, &xev); + } +} + +void +setup(void) +{ + dpy = XOpenDisplay(NULL); + if (dpy == 0) + errx(0, "sxwm: can't open display."); + + root = XDefaultRootWindow(dpy); + otherwm(); + XSelectInput(dpy, root, + SubstructureRedirectMask | KeyPressMask | KeyReleaseMask + ); +} + +int +main(int ac, char **av) +{ + if (ac > 1) { + if (strcmp(av[1], "-v") == 0 || strcmp(av[1], "--version") == 0) + errx(0, "%s\n%s\n%s\n", SXWM_VERSION, SXWM_AUTHOR, SXWM_LICINFO); + else + errx(0, "usage:\n[-v || --version]: See the version of sxwm\n"); + } + run(); + dpy = XOpenDisplay(NULL); + return 0; +} diff --git a/src/sxwm.h b/src/sxwm.h new file mode 100644 index 0000000..cb6286c --- /dev/null +++ b/src/sxwm.h @@ -0,0 +1,21 @@ +#ifndef SXWM_H +#define SXWM_H + +#include +#include +#include + +#define SXWM_VERSION "sxwm ver. 0.1.0" +#define SXWM_AUTHOR "(C) Abhinav Prasai 2025" +#define SXWM_LICINFO "See LICENSE for more info" + +#define ALT Mod1Mask +#define SUPER Mod4Mask +#define SHIFT ShiftMask + +static void run(void); +static void setup(void); + +static Display *dpy; +static Window root; +#endif diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..bc77105 --- /dev/null +++ b/src/util.h @@ -0,0 +1,8 @@ +#ifndef UTIL_H +#define UTIL_H +#include + +void otherwm(void); +int otherwmerr(Display *dpy, XErrorEvent *ee); + +#endif diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..c99e74c --- /dev/null +++ b/src/utils.c @@ -0,0 +1,31 @@ +#include +#include +#include "util.h" + +void +otherwm(void) +{ + XSetErrorHandler(otherwmerr); + XChangeWindowAttributes(dpy, root, CWEventMask, + &(XSetWindowAttributes){.event_mask = SubstructureRedirectMask}); + XSync(dpy, False); + XSetErrorHandler(xerr); + XSync(dpy, False); +} + +int +otherwmerr(Display *dpy, XErrorEvent *ee) +{ + errx(0, "sxwm: another window manager is already running, please close it"); + return 0; + if (dpy && ee) return 0; +} + +int +xerr(Display *dpy, XErrorEvent *ee) +{ + fprintf(stderr, "sxwm: fatal error\nrequest code:%d\nerror code:%d", + ee->request_code, ee->error_code); + return 0; + if (dpy && ee) return 0; +} -- cgit v1.2.3