st-focus-20200530-patch_alpha.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-focus-20200530-patch_alpha.diff (3848B)
---
1 From c2c9e874fa069bc24df0982505788ae14c3024f3 Mon Sep 17 00:00:00 2001
2 From: Julius Huelsmann <juliusHuelsmann@gmail.com>
3 Date: Sat, 6 Jun 2020 13:12:28 +0200
4 Subject: [PATCH] patch: focus
5
6 ---
7 config.def.h | 5 +++--
8 st.h | 2 +-
9 x.c | 44 ++++++++++++++++++++++++++++++--------------
10 3 files changed, 34 insertions(+), 17 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index b94b23c..577d1f1 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -85,7 +85,7 @@ char *termname = "st-256color";
17 unsigned int tabspaces = 8;
18
19 /* bg opacity */
20 -float alpha = 0.8;
21 +float alpha = 0.8, alphaUnfocused = 0.6;
22
23 /* Terminal colors (16 first used in escape sequence) */
24 static const char *colorname[] = {
25 @@ -123,9 +123,10 @@ static const char *colorname[] = {
26 * foreground, background, cursor, reverse cursor
27 */
28 unsigned int defaultfg = 7;
29 -unsigned int defaultbg = 258;
30 +unsigned int defaultbg = 0;
31 static unsigned int defaultcs = 256;
32 static unsigned int defaultrcs = 257;
33 +unsigned int bg = 17, bgUnfocused = 16;
34
35 /*
36 * Default shape of cursor
37 diff --git a/st.h b/st.h
38 index 2c656af..b5f1cf6 100644
39 --- a/st.h
40 +++ b/st.h
41 @@ -122,4 +122,4 @@ extern char *termname;
42 extern unsigned int tabspaces;
43 extern unsigned int defaultfg;
44 extern unsigned int defaultbg;
45 -extern float alpha;
46 +extern float alpha, alphaUnfocused;
47 diff --git a/x.c b/x.c
48 index 50da23c..a0c3223 100644
49 --- a/x.c
50 +++ b/x.c
51 @@ -254,6 +254,8 @@ static char *opt_line = NULL;
52 static char *opt_name = NULL;
53 static char *opt_title = NULL;
54
55 +static int focused = 0;
56 +
57 static int oldbutton = 3; /* button event on startup: 3 = release */
58
59 void
60 @@ -774,35 +776,38 @@ xloadcolor(int i, const char *name, Color *ncolor)
61 return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor);
62 }
63
64 +void
65 +xloadalpha(void)
66 +{
67 + float const usedAlpha = focused ? alpha : alphaUnfocused;
68 + if (opt_alpha) alpha = strtof(opt_alpha, NULL);
69 + dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * usedAlpha);
70 + dc.col[defaultbg].pixel &= 0x00FFFFFF;
71 + dc.col[defaultbg].pixel |= (unsigned char)(0xff * usedAlpha) << 24;
72 +}
73 +
74 void
75 xloadcols(void)
76 {
77 - int i;
78 static int loaded;
79 Color *cp;
80
81 - if (loaded) {
82 - for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp)
83 - XftColorFree(xw.dpy, xw.vis, xw.cmap, cp);
84 - } else {
85 - dc.collen = MAX(LEN(colorname), 256);
86 - dc.col = xmalloc(dc.collen * sizeof(Color));
87 + if (!loaded) {
88 + dc.collen = 1 + (defaultbg = MAX(LEN(colorname), 256));
89 + dc.col = xmalloc((dc.collen) * sizeof(Color));
90 }
91
92 - for (i = 0; i < dc.collen; i++)
93 + for (int i = 0; i+1 < dc.collen; ++i)
94 if (!xloadcolor(i, NULL, &dc.col[i])) {
95 if (colorname[i])
96 die("could not allocate color '%s'\n", colorname[i]);
97 else
98 die("could not allocate color %d\n", i);
99 }
100 + if (dc.collen) // cannot die, as the color is already loaded.
101 + xloadcolor(focused ?bg :bgUnfocused, NULL, &dc.col[defaultbg]);
102
103 - /* set alpha value of bg color */
104 - if (opt_alpha)
105 - alpha = strtof(opt_alpha, NULL);
106 - dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha);
107 - dc.col[defaultbg].pixel &= 0x00FFFFFF;
108 - dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24;
109 + xloadalpha();
110 loaded = 1;
111 }
112
113 @@ -1747,12 +1752,22 @@ focus(XEvent *ev)
114 xseturgency(0);
115 if (IS_SET(MODE_FOCUS))
116 ttywrite("\033[I", 3, 0);
117 + if (!focused) {
118 + focused = 1;
119 + xloadcols();
120 + redraw();
121 + }
122 } else {
123 if (xw.ime.xic)
124 XUnsetICFocus(xw.ime.xic);
125 win.mode &= ~MODE_FOCUSED;
126 if (IS_SET(MODE_FOCUS))
127 ttywrite("\033[O", 3, 0);
128 + if (focused) {
129 + focused = 0;
130 + xloadcols();
131 + redraw();
132 + }
133 }
134 }
135
136 @@ -2065,6 +2080,7 @@ run:
137 XSetLocaleModifiers("");
138 cols = MAX(cols, 1);
139 rows = MAX(rows, 1);
140 + defaultbg = MAX(LEN(colorname), 256);
141 tnew(cols, rows);
142 xinit(cols, rows);
143 xsetenv();
144 --
145 2.27.0
146