greenhouse

kore

my public infrastructure monorepo

git clone [email protected]:kore.git

kore / overlays / dwl / garden.patch95 lines · 3786B · raw

1diff --git a/config.def.h b/config.def.h
2index b528ca3..c41a1e6 100644
3--- a/config.def.h
4+++ b/config.def.h
5@@ -22,7 +22,11 @@ static uint32_t colors[][3]                = {
6 	[SchemeNorm] = { 0xbbbbbbff, 0x222222ff, 0x444444ff },
7 	[SchemeSel]  = { 0xeeeeeeff, 0x005577ff, 0x005577ff },
8 	[SchemeUrg]  = { 0,          0,          0x770000ff },
9+	[SchemeOcc]  = { 0xbbbbbbff, 0x222222ff, 0x444444ff },
10+	[SchemeEmpty] = { 0x555555ff, 0x222222ff, 0x444444ff },
11+	[SchemeKb]   = { 0x88aaaaff, 0x222222ff, 0x444444ff },
12 };
13+static const char *kblayouts[] = { "en", "th" };
14 
15 /* tagging */
16 static char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
17diff --git a/dwl.c b/dwl.c
18index a348dec..474da92 100644
19--- a/dwl.c
20+++ b/dwl.c
21@@ -91,7 +91,7 @@
22 #define TEXTW(mon, text)        (drwl_font_getwidth(mon->drw, text) + mon->lrpad)
23 
24 /* enums */
25-enum { SchemeNorm, SchemeSel, SchemeUrg }; /* color schemes */
26+enum { SchemeNorm, SchemeSel, SchemeUrg, SchemeOcc, SchemeEmpty, SchemeKb }; /* color schemes */
27 enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */
28 enum { XDGShell, LayerShell, X11 }; /* client types */
29 enum { LyrBg, LyrBottom, LyrTile, LyrFloat, LyrTop, LyrFS, LyrUnmanaged, LyrOverlay,
30@@ -459,6 +459,7 @@ static struct wlr_session_lock_v1 *cur_lock;
31 
32 static struct wlr_seat *seat;
33 static KeyboardGroup *kb_group;
34+static xkb_layout_index_t kblayout;
35 static unsigned int cursor_mode;
36 static Client *grabc;
37 static int grabcx, grabcy; /* client-relative */
38@@ -1682,7 +1683,8 @@ drawbar(Monitor *m)
39 	int x, w, tw = 0;
40 	int boxs = m->drw->font->height / 9;
41 	int boxw = m->drw->font->height / 6 + 2;
42-	uint32_t i, occ = 0, urg = 0;
43+	uint32_t i, occ = 0, urg = 0, sel;
44+	const char *kb = kblayout < LENGTH(kblayouts) ? kblayouts[kblayout] : "??";
45 	Client *c;
46 	Buffer *buf;
47 
48@@ -1696,6 +1698,10 @@ drawbar(Monitor *m)
49 		drwl_setscheme(m->drw, colors[SchemeNorm]);
50 		tw = TEXTW(m, stext) - m->lrpad + 2; /* 2px right padding */
51 		drwl_text(m->drw, m->b.width - tw, 0, tw, m->b.height, 0, stext, 0);
52+		w = TEXTW(m, kb) + m->lrpad;
53+		drwl_setscheme(m->drw, colors[SchemeKb]);
54+		drwl_text(m->drw, m->b.width - tw - w, 0, w, m->b.height, m->lrpad / 2, kb, 0);
55+		tw += w;
56 	}
57 
58 	wl_list_for_each(c, &clients, link) {
59@@ -1709,12 +1715,11 @@ drawbar(Monitor *m)
60 	c = focustop(m);
61 	for (i = 0; i < LENGTH(tags); i++) {
62 		w = TEXTW(m, tags[i]);
63-		drwl_setscheme(m->drw, colors[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
64+		sel = m->tagset[m->seltags] & 1 << i;
65+		drwl_setscheme(m->drw, colors[sel ? SchemeSel : occ & 1 << i ? SchemeOcc : SchemeEmpty]);
66 		drwl_text(m->drw, x, 0, w, m->b.height, m->lrpad / 2, tags[i], urg & 1 << i);
67-		if (occ & 1 << i)
68-			drwl_rect(m->drw, x + boxs, boxs, boxw, boxw,
69-				m == selmon && c && c->tags & 1 << i,
70-				urg & 1 << i);
71+		if (sel)
72+			drwl_rect(m->drw, x + m->lrpad / 2, m->b.height - 2, w - m->lrpad, 1, 1, 0);
73 		x += w;
74 	}
75 	w = TEXTW(m, m->ltsymbol);
76@@ -1723,7 +1728,7 @@ drawbar(Monitor *m)
77 
78 	if ((w = m->b.width - tw - x) > m->b.height) {
79 		if (c) {
80-			drwl_setscheme(m->drw, colors[m == selmon ? SchemeSel : SchemeNorm]);
81+			drwl_setscheme(m->drw, colors[SchemeNorm]);
82 			drwl_text(m->drw, x, 0, w, m->b.height, m->lrpad / 2, client_get_title(c), 0);
83 			if (c && c->isfloating)
84 				drwl_rect(m->drw, x + boxs, boxs, boxw, boxw, 0, 0);
85@@ -2047,6 +2052,10 @@ keypressmod(struct wl_listener *listener, void *data)
86 		return;
87 
88 	wlr_seat_set_keyboard(seat, &group->wlr_group->keyboard);
89+	if (group->wlr_group->keyboard.modifiers.group != kblayout) {
90+		kblayout = group->wlr_group->keyboard.modifiers.group;
91+		drawbars();
92+	}
93 	/* Send modifiers to the client. */
94 	wlr_seat_keyboard_notify_modifiers(seat,
95 			&group->wlr_group->keyboard.modifiers);