sowm

An itsy bitsy floating window manager (220~ sloc!).
git clone git://mfeller.io/sowm.git
Log | Files | Refs | README | LICENSE

commit 1fc724a28d7f8dc2eabe8e7ad16cb855103263ae
parent cc3ee24a019b6bdf95ec4ebf19d6cf8d1a4b6ccc
Author: Dylan Araps <dylan.araps@gmail.com>
Date:   Tue, 15 Oct 2019 14:51:19 +0300

docs: update

Diffstat:
Mpatches/sowm-rounded-corners.patch | 130++++----------------------------------------------------------------------------
1 file changed, 5 insertions(+), 125 deletions(-)

diff --git a/patches/sowm-rounded-corners.patch b/patches/sowm-rounded-corners.patch @@ -15,132 +15,12 @@ index 864c9a7..1525894 100644 +++ b/config.h @@ -2,6 +2,7 @@ #define CONFIG_H - + #define MOD Mod4Mask +#define ROUND_CORNERS 20 - + const char* menu[] = {"dmenu_run", 0}; const char* term[] = {"st", 0}; -diff --git a/patches/sowm-rounded-corners.patch b/patches/sowm-rounded-corners.patch -index 2cff7e2..6e8114f 100644 ---- a/patches/sowm-rounded-corners.patch -+++ b/patches/sowm-rounded-corners.patch -@@ -1,115 +0,0 @@ --diff --git a/Makefile b/Makefile --index 2420660..d03d5e7 100644 ----- a/Makefile --+++ b/Makefile --@@ -1,5 +1,5 @@ -- CFLAGS+= -std=c99 -Wall -Wno-deprecated-declarations -pedantic ---LDADD+= -lX11 --+LDADD+= -lX11 -lXext -- LDFLAGS= -- PREFIX?= /usr -- BINDIR?= $(PREFIX)/bin --diff --git a/config.h b/config.h --index 864c9a7..1525894 100644 ----- a/config.h --+++ b/config.h --@@ -2,6 +2,7 @@ -- #define CONFIG_H -- -- #define MOD Mod4Mask --+#define ROUND_CORNERS 20 -- -- const char* menu[] = {"dmenu_run", 0}; -- const char* term[] = {"st", 0}; --diff --git a/sowm.c b/sowm.c --index b927fda..2775eb7 100644 ----- a/sowm.c --+++ b/sowm.c --@@ -5,6 +5,7 @@ -- #include <X11/Xlib.h> -- #include <X11/XF86keysym.h> -- #include <X11/keysym.h> --+#include <X11/extensions/shape.h> -- #include <stdlib.h> -- #include <signal.h> -- #include <unistd.h> --@@ -53,6 +54,7 @@ static void win_fs(Window w); -- static void win_fs_current(); -- static void win_kill(); -- static void win_next(); --+static void win_round_corners(Window w, int rad); -- static void win_to_ws(const Arg arg); -- static void ws_go(const Arg arg); -- static void ws_save(int i); --@@ -93,6 +95,8 @@ void notify_destroy(XEvent *e) { -- } -- -- void notify_enter(XEvent *e) { --+ while(XCheckTypedEvent(d, EnterNotify, e)); --+ -- if (e->xcrossing.window != root) FOC(e->xcrossing.window) -- } -- --@@ -110,6 +114,8 @@ void notify_motion(XEvent *e) { -- attr.y + (mouse.button==1 ? yd : 0), -- attr.width + (mouse.button==3 ? xd : 0), -- attr.height + (mouse.button==3 ? yd : 0)); --+ --+ win_round_corners(mouse.subwindow, ROUND_CORNERS); -- } -- -- for WIN if (c->w == mouse.subwindow) c->f = 0; --@@ -220,7 +226,45 @@ void win_fs(Window w) { -- -- } else -- XMoveResizeWindow(d, w, c->a.x, c->a.y, c->a.width, c->a.height); --+ --+ win_round_corners(w, c->f ? 0 : ROUND_CORNERS); --+ } --+} --+ --+void win_round_corners(Window w, int rad) { --+ XWindowAttributes attr2; --+ XGetWindowAttributes(d, w, &attr2); --+ --+ int dia = 2 * rad; --+ int ww = attr2.width; --+ int wh = attr2.height; --+ --+ if (ww < dia || wh < dia) return; --+ --+ Pixmap mask = XCreatePixmap(d, w, ww, wh, 1); --+ --+ if (!mask) return; --+ --+ XGCValues xgcv; --+ GC shape_gc = XCreateGC(d, mask, 0, &xgcv); --+ --+ if (!shape_gc) { --+ XFreePixmap(d, mask); --+ return; -- } --+ --+ XSetForeground(d, shape_gc, 0); --+ XFillRectangle(d, mask, shape_gc, 0, 0, ww, wh); --+ XSetForeground(d, shape_gc, 1); --+ XFillArc(d, mask, shape_gc, 0, 0, dia, dia, 0, 23040); --+ XFillArc(d, mask, shape_gc, ww-dia-1, 0, dia, dia, 0, 23040); --+ XFillArc(d, mask, shape_gc, 0, wh-dia-1, dia, dia, 0, 23040); --+ XFillArc(d, mask, shape_gc, ww-dia-1, wh-dia-1, dia, dia, 0, 23040); --+ XFillRectangle(d, mask, shape_gc, rad, 0, ww-dia, wh); --+ XFillRectangle(d, mask, shape_gc, 0, rad, ww, wh-dia); --+ XShapeCombineMask(d, w, ShapeBounding, 0, 0, mask, ShapeSet); --+ XFreePixmap(d, mask); --+ XFreeGC(d, shape_gc); -- } -- -- void win_to_ws(const Arg arg) { --@@ -313,6 +357,7 @@ void map_request(XEvent *e) { -- EnterWindowMask|FocusChangeMask); -- win_center(w); -- XMapWindow(d, w); --+ win_round_corners(w, ROUND_CORNERS); -- FOC(w); -- win_add(w); -- } diff --git a/sowm.c b/sowm.c index b9e8867..4c0b3fa 100644 --- a/sowm.c @@ -164,21 +44,21 @@ index b9e8867..4c0b3fa 100644 @@ -183,6 +185,8 @@ void notify_motion(XEvent *e) { attr.width + (mouse.button==3 ? xd : 0), attr.height + (mouse.button==3 ? yd : 0)); - + + win_round_corners(mouse.subwindow, ROUND_CORNERS); + for WIN if (c->w == mouse.subwindow) c->f = 0; } } @@ -364,9 +368,58 @@ void win_fs(Window w) { - + } else XMoveResizeWindow(d, w, c->a.x, c->a.y, c->a.width, c->a.height); + + win_round_corners(w, c->f ? 0 : ROUND_CORNERS); } } - + +/* + Round the corners of the desired window. +