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);