sowm

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

commit b54620584a51a1724c245655f954d49a496116fb
parent 274180f9ec2000a34430874b8cddb89b63d34aec
Author: Dylan Araps <dylan.araps@gmail.com>
Date:   Mon, 14 Oct 2019 10:53:45 +0300

docs: update

Diffstat:
Mpatches/sowm-rounded-corners.patch | 216++++++++++++++++++++++++++++++++++---------------------------------------------
1 file changed, 94 insertions(+), 122 deletions(-)

diff --git a/patches/sowm-rounded-corners.patch b/patches/sowm-rounded-corners.patch @@ -15,129 +15,101 @@ 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 a2a3554..6b0cd21 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 1618a65..29794cb 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); --@@ -87,6 +89,8 @@ void notify_destroy(XEvent *e) { -- } -- -- void notify_enter(XEvent *e) { --+ while(XCheckTypedEvent(dis, EnterNotify, e)); --+ -- if (e->xcrossing.window != root) FOC(e->xcrossing.window) -- } -- --@@ -104,6 +108,8 @@ void notify_motion(XEvent *e) { -- attr.y + (start.button==1 ? yd : 0), -- attr.width + (start.button==3 ? xd : 0), -- attr.height + (start.button==3 ? yd : 0)); --+ --+ win_round_corners(start.subwindow, ROUND_CORNERS); -- } -- -- for WIN if (c->win == start.subwindow) c->f = 0; --@@ -219,7 +225,45 @@ void win_fs(Window w) { -- -- } else -- XMoveResizeWindow(dis, 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(dis, w, &attr2); --+ --+ int dia = 2 * rad; --+ int ww = attr2.width; --+ int wh = attr2.height; --+ --+ if (ww < dia || wh < dia) return; --+ --+ Pixmap mask = XCreatePixmap(dis, w, ww, wh, 1); --+ --+ if (!mask) return; --+ --+ XGCValues xgcv; --+ GC shape_gc = XCreateGC(dis, mask, 0, &xgcv); --+ --+ if (!shape_gc) { --+ XFreePixmap(dis, mask); --+ return; -- } --+ --+ XSetForeground(dis, shape_gc, 0); --+ XFillRectangle(dis, mask, shape_gc, 0, 0, ww, wh); --+ XSetForeground(dis, shape_gc, 1); --+ XFillArc(dis, mask, shape_gc, 0, 0, dia, dia, 0, 23040); --+ XFillArc(dis, mask, shape_gc, ww-dia-1, 0, dia, dia, 0, 23040); --+ XFillArc(dis, mask, shape_gc, 0, wh-dia-1, dia, dia, 0, 23040); --+ XFillArc(dis, mask, shape_gc, ww-dia-1, wh-dia-1, dia, dia, 0, 23040); --+ XFillRectangle(dis, mask, shape_gc, rad, 0, ww-dia, wh); --+ XFillRectangle(dis, mask, shape_gc, 0, rad, ww, wh-dia); --+ XShapeCombineMask(dis, w, ShapeBounding, 0, 0, mask, ShapeSet); --+ XFreePixmap(dis, mask); --+ XFreeGC(dis, shape_gc); -- } -- -- void win_to_ws(const Arg arg) { --@@ -310,6 +354,7 @@ void map_request(XEvent *e) { -- EnterWindowMask|FocusChangeMask); -- win_center(w); -- XMapWindow(dis, w); --+ win_round_corners(w, ROUND_CORNERS); -- FOC(w); -- win_add(w); -- } +diff --git a/sowm.c b/sowm.c +index 1618a65..29794cb 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); +@@ -87,6 +89,8 @@ void notify_destroy(XEvent *e) { + } + + void notify_enter(XEvent *e) { ++ while(XCheckTypedEvent(dis, EnterNotify, e)); ++ + if (e->xcrossing.window != root) FOC(e->xcrossing.window) + } + +@@ -104,6 +108,8 @@ void notify_motion(XEvent *e) { + attr.y + (start.button==1 ? yd : 0), + attr.width + (start.button==3 ? xd : 0), + attr.height + (start.button==3 ? yd : 0)); ++ ++ win_round_corners(start.subwindow, ROUND_CORNERS); + } + + for WIN if (c->win == start.subwindow) c->f = 0; +@@ -219,7 +225,45 @@ void win_fs(Window w) { + + } else + XMoveResizeWindow(dis, 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(dis, w, &attr2); ++ ++ int dia = 2 * rad; ++ int ww = attr2.width; ++ int wh = attr2.height; ++ ++ if (ww < dia || wh < dia) return; ++ ++ Pixmap mask = XCreatePixmap(dis, w, ww, wh, 1); ++ ++ if (!mask) return; ++ ++ XGCValues xgcv; ++ GC shape_gc = XCreateGC(dis, mask, 0, &xgcv); ++ ++ if (!shape_gc) { ++ XFreePixmap(dis, mask); ++ return; + } ++ ++ XSetForeground(dis, shape_gc, 0); ++ XFillRectangle(dis, mask, shape_gc, 0, 0, ww, wh); ++ XSetForeground(dis, shape_gc, 1); ++ XFillArc(dis, mask, shape_gc, 0, 0, dia, dia, 0, 23040); ++ XFillArc(dis, mask, shape_gc, ww-dia-1, 0, dia, dia, 0, 23040); ++ XFillArc(dis, mask, shape_gc, 0, wh-dia-1, dia, dia, 0, 23040); ++ XFillArc(dis, mask, shape_gc, ww-dia-1, wh-dia-1, dia, dia, 0, 23040); ++ XFillRectangle(dis, mask, shape_gc, rad, 0, ww-dia, wh); ++ XFillRectangle(dis, mask, shape_gc, 0, rad, ww, wh-dia); ++ XShapeCombineMask(dis, w, ShapeBounding, 0, 0, mask, ShapeSet); ++ XFreePixmap(dis, mask); ++ XFreeGC(dis, shape_gc); + } + + void win_to_ws(const Arg arg) { +@@ -310,6 +354,7 @@ void map_request(XEvent *e) { + EnterWindowMask|FocusChangeMask); + win_center(w); + XMapWindow(dis, w); ++ win_round_corners(w, ROUND_CORNERS); + FOC(w); + win_add(w); + }