Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-clientopacity-20220612-d3f93c7.diff - sites - public wiki contents of suckl…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-clientopacity-20220612-d3f93c7.diff (6055B)
---
1 From d59a5a5409e4078c2c1b5ead786e1312d431c9a8 Mon Sep 17 00:00:00 2001
2 From: blatzfab <[email protected]>
3 Date: Sun, 12 Jun 2022 18:42:28 +0200
4 Subject: [PATCH] [PATCH] adds opacity on a per client basis
5
6 ---
7 config.def.h | 10 +++++++---
8 dwm.c | 37 ++++++++++++++++++++++++++++++++++++-
9 2 files changed, 43 insertions(+), 4 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index a2ac963..4b6903c 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* borde…
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 defaultopacity = 0.75;
20 static const char *fonts[] = { "monospace:size=10" };
21 static const char dmenufont[] = "monospace:size=10";
22 static const char col_gray1[] = "#222222";
23 @@ -26,9 +27,10 @@ static const Rule rules[] = {
24 * WM_CLASS(STRING) = instance, class
25 * WM_NAME(STRING) = title
26 */
27 - /* class instance title tags mask isfloating …
28 - { "Gimp", NULL, NULL, 0, 1, …
29 - { "Firefox", NULL, NULL, 1 << 8, 0, …
30 + /* class instance title tags mask isfloating …
31 + { "Gimp", NULL, NULL, 0, 1, …
32 + { "Firefox", NULL, NULL, 1 << 8, 0, …
33 + { "St", NULL, NULL, 0, 0, …
34 };
35
36 /* layout(s) */
37 @@ -85,6 +87,8 @@ static Key keys[] = {
38 { MODKEY, XK_period, focusmon, {.i …
39 { MODKEY|ShiftMask, XK_comma, tagmon, {.i …
40 { MODKEY|ShiftMask, XK_period, tagmon, {.i …
41 + { MODKEY|ShiftMask, XK_KP_Add, changeopacity, …
42 + { MODKEY|ShiftMask, XK_KP_Subtract, changeopacit…
43 TAGKEYS( XK_1, 0)
44 TAGKEYS( XK_2, 1)
45 TAGKEYS( XK_3, 2)
46 diff --git a/dwm.c b/dwm.c
47 index 5646a5c..591dff9 100644
48 --- a/dwm.c
49 +++ b/dwm.c
50 @@ -62,7 +62,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cu…
51 enum { SchemeNorm, SchemeSel }; /* color schemes */
52 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
53 NetWMFullscreen, NetActiveWindow, NetWMWindowType,
54 - NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
55 + NetWMWindowTypeDialog, NetClientList, NetWMWindowsOpacity, NetLa…
56 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* defaul…
57 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
58 ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
59 @@ -95,6 +95,7 @@ struct Client {
60 int isfixed, isfloating, isurgent, neverfocus, oldstate, isfull…
61 Client *next;
62 Client *snext;
63 + double opacity;
64 Monitor *mon;
65 Window win;
66 };
67 @@ -138,6 +139,7 @@ typedef struct {
68 const char *title;
69 unsigned int tags;
70 int isfloating;
71 + double opacity;
72 int monitor;
73 } Rule;
74
75 @@ -149,6 +151,7 @@ static void arrangemon(Monitor *m);
76 static void attach(Client *c);
77 static void attachstack(Client *c);
78 static void buttonpress(XEvent *e);
79 +static void changeopacity(const Arg *arg);
80 static void checkotherwm(void);
81 static void cleanup(void);
82 static void cleanupmon(Monitor *mon);
83 @@ -185,6 +188,7 @@ static void monocle(Monitor *m);
84 static void motionnotify(XEvent *e);
85 static void movemouse(const Arg *arg);
86 static Client *nexttiled(Client *c);
87 +static void opacity(Client *c, double opacity);
88 static void pop(Client *);
89 static void propertynotify(XEvent *e);
90 static void quit(const Arg *arg);
91 @@ -288,6 +292,7 @@ applyrules(Client *c)
92 /* rule matching */
93 c->isfloating = 0;
94 c->tags = 0;
95 + c->opacity = defaultopacity;
96 XGetClassHint(dpy, c->win, &ch);
97 class = ch.res_class ? ch.res_class : broken;
98 instance = ch.res_name ? ch.res_name : broken;
99 @@ -300,6 +305,7 @@ applyrules(Client *c)
100 {
101 c->isfloating = r->isfloating;
102 c->tags |= r->tags;
103 + c->opacity = r->opacity;
104 for (m = mons; m && m->num != r->monitor; m = m…
105 if (m)
106 c->mon = m;
107 @@ -458,6 +464,21 @@ buttonpress(XEvent *e)
108 buttons[i].func(click == ClkTagBar && buttons[i…
109 }
110
111 +void
112 +changeopacity(const Arg *arg)
113 +{
114 + if (!selmon->sel)
115 + return;
116 + selmon->sel->opacity+=arg->f;
117 + if(selmon->sel->opacity > 1.0)
118 + selmon->sel->opacity = 1.0;
119 +
120 + if(selmon->sel->opacity < 0)
121 + selmon->sel->opacity = 0;
122 +
123 + opacity(selmon->sel, selmon->sel->opacity);
124 +}
125 +
126 void
127 checkotherwm(void)
128 {
129 @@ -1045,6 +1066,7 @@ manage(Window w, XWindowAttributes *wa)
130 c->mon = selmon;
131 applyrules(c);
132 }
133 + opacity(c, c->opacity);
134
135 if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
136 c->x = c->mon->mx + c->mon->mw - WIDTH(c);
137 @@ -1206,6 +1228,18 @@ nexttiled(Client *c)
138 return c;
139 }
140
141 +void
142 +opacity(Client *c, double opacity)
143 +{
144 + if(opacity >= 0 && opacity <= 1) {
145 + unsigned long real_opacity[] = { opacity * 0xffffffff };
146 + XChangeProperty(dpy, c->win, netatom[NetWMWindowsOpacit…
147 + 32, PropModeReplace, (unsigned char *)r…
148 + 1);
149 + } else
150 + XDeleteProperty(dpy, c->win, netatom[NetWMWindowsOpacit…
151 +}
152 +
153 void
154 pop(Client *c)
155 {
156 @@ -1569,6 +1603,7 @@ setup(void)
157 netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYP…
158 netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WIND…
159 netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", F…
160 + netatom[NetWMWindowsOpacity] = XInternAtom(dpy, "_NET_WM_WINDOW…
161 /* init cursors */
162 cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
163 cursor[CurResize] = drw_cur_create(drw, XC_sizing);
164 --
165 2.36.1
166
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.