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