dwm-fadeinactive-20211114-a786211.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-fadeinactive-20211114-a786211.diff (5052B)
---
1 From dcdb97829cc2bb4e842ca66142eb24b4b4028a9f Mon Sep 17 00:00:00 2001
2 From: BrunoCooper17 <BrunoCooper17@outlook.com>
3 Date: Sun, 14 Nov 2021 23:10:08 -0600
4 Subject: [PATCH] fadeinactive Patch
5
6 ---
7 config.def.h | 4 ++++
8 dwm.c | 27 ++++++++++++++++++++++++++-
9 2 files changed, 30 insertions(+), 1 deletion(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index a2ac963..2e001cf 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -5,6 +5,9 @@ static const unsigned int borderpx = 1; /* border pixel of windows */
16 static const unsigned int snap = 32; /* snap pixel */
17 static const int showbar = 1; /* 0 means no bar */
18 static const int topbar = 1; /* 0 means bottom bar */
19 +static const double activeopacity = 1.0f; /* Window opacity when it's focused (0 <= opacity <= 1) */
20 +static const double inactiveopacity = 0.875f; /* Window opacity when it's inactive (0 <= opacity <= 1) */
21 +static Bool bUseOpacity = True; /* Starts with opacity on any unfocused windows */
22 static const char *fonts[] = { "monospace:size=10" };
23 static const char dmenufont[] = "monospace:size=10";
24 static const char col_gray1[] = "#222222";
25 @@ -73,6 +76,7 @@ static Key keys[] = {
26 { MODKEY, XK_l, setmfact, {.f = +0.05} },
27 { MODKEY, XK_Return, zoom, {0} },
28 { MODKEY, XK_Tab, view, {0} },
29 + { MODKEY, XK_a, toggleopacity, {0} },
30 { MODKEY|ShiftMask, XK_c, killclient, {0} },
31 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
32 { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
33 diff --git a/dwm.c b/dwm.c
34 index 5e4d494..d506b1a 100644
35 --- a/dwm.c
36 +++ b/dwm.c
37 @@ -62,7 +62,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
38 enum { SchemeNorm, SchemeSel }; /* color schemes */
39 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
40 NetWMFullscreen, NetActiveWindow, NetWMWindowType,
41 - NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
42 + NetWMWindowTypeDialog, NetClientList, NetWMWindowsOpacity, NetLast }; /* EWMH atoms */
43 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
44 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
45 ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
46 @@ -185,6 +185,7 @@ static void monocle(Monitor *m);
47 static void motionnotify(XEvent *e);
48 static void movemouse(const Arg *arg);
49 static Client *nexttiled(Client *c);
50 +static void opacity(Client *c, double opacity);
51 static void pop(Client *);
52 static void propertynotify(XEvent *e);
53 static void quit(const Arg *arg);
54 @@ -212,6 +213,7 @@ static void tagmon(const Arg *arg);
55 static void tile(Monitor *);
56 static void togglebar(const Arg *arg);
57 static void togglefloating(const Arg *arg);
58 +static void toggleopacity(const Arg *arg);
59 static void toggletag(const Arg *arg);
60 static void toggleview(const Arg *arg);
61 static void unfocus(Client *c, int setfocus);
62 @@ -798,6 +800,7 @@ focus(Client *c)
63 grabbuttons(c, 1);
64 XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
65 setfocus(c);
66 + opacity(c, activeopacity);
67 } else {
68 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
69 XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
70 @@ -1200,6 +1203,18 @@ nexttiled(Client *c)
71 return c;
72 }
73
74 +void
75 +opacity(Client *c, double opacity)
76 +{
77 + if(bUseOpacity && opacity > 0 && opacity < 1) {
78 + unsigned long real_opacity[] = { opacity * 0xffffffff };
79 + XChangeProperty(dpy, c->win, netatom[NetWMWindowsOpacity], XA_CARDINAL,
80 + 32, PropModeReplace, (unsigned char *)real_opacity,
81 + 1);
82 + } else
83 + XDeleteProperty(dpy, c->win, netatom[NetWMWindowsOpacity]);
84 +}
85 +
86 void
87 pop(Client *c)
88 {
89 @@ -1563,6 +1578,7 @@ setup(void)
90 netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
91 netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
92 netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
93 + netatom[NetWMWindowsOpacity] = XInternAtom(dpy, "_NET_WM_WINDOW_OPACITY", False);
94 /* init cursors */
95 cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
96 cursor[CurResize] = drw_cur_create(drw, XC_sizing);
97 @@ -1722,6 +1738,14 @@ togglefloating(const Arg *arg)
98 arrange(selmon);
99 }
100
101 +void
102 +toggleopacity(const Arg *arg) {
103 + bUseOpacity = !bUseOpacity;
104 + for (Monitor* m = mons; m; m = m->next)
105 + for (Client* c = m->clients; c; c = c->next)
106 + opacity(c, (bUseOpacity && c != selmon->sel) ? inactiveopacity : activeopacity);
107 +}
108 +
109 void
110 toggletag(const Arg *arg)
111 {
112 @@ -1755,6 +1779,7 @@ unfocus(Client *c, int setfocus)
113 if (!c)
114 return;
115 grabbuttons(c, 0);
116 + opacity(c, inactiveopacity);
117 XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
118 if (setfocus) {
119 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
120 --
121 2.33.1
122