Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-sticky-20240927-60f7034.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-sticky-20240927-60f7034.diff (5476B)
---
1 From 60f7034ca1573e10cf9e005e2ef5a44e6b76ea9b Mon Sep 17 00:00:00 2001
2 From: elbachir-one <[email protected]>
3 Date: Fri, 27 Sep 2024 12:35:36 +0100
4 Subject: [PATCH] Added the missing keybinding
5
6 ---
7 config.def.h | 1 +
8 dwm.c | 43 ++++++++++++++++++++++++++++++++++++++++---
9 2 files changed, 41 insertions(+), 3 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 9efa774..55c0a6c 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -95,6 +95,7 @@ static const Key keys[] = {
16 TAGKEYS( XK_8, 7)
17 TAGKEYS( XK_9, 8)
18 { MODKEY|ShiftMask, XK_q, quit, {0} …
19 + { MODKEY, XK_s, togglesticky, {0} …
20 };
21
22 /* button definitions */
23 diff --git a/dwm.c b/dwm.c
24 index 67c6b2b..e8ed755 100644
25 --- a/dwm.c
26 +++ b/dwm.c
27 @@ -49,7 +49,7 @@
28 #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (Shif…
29 #define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - …
30 * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - …
31 -#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->selt…
32 +#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->selt…
33 #define LENGTH(X) (sizeof X / sizeof X[0])
34 #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
35 #define WIDTH(X) ((X)->w + 2 * (X)->bw)
36 @@ -61,7 +61,7 @@
37 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
38 enum { SchemeNorm, SchemeSel }; /* color schemes */
39 enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
40 - NetWMFullscreen, NetActiveWindow, NetWMWindowType,
41 + NetWMFullscreen, NetWMSticky, NetActiveWindow, NetWMWindowType,
42 NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
43 enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* defaul…
44 enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
45 @@ -92,7 +92,7 @@ struct Client {
46 int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvali…
47 int bw, oldbw;
48 unsigned int tags;
49 - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfull…
50 + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfull…
51 Client *next;
52 Client *snext;
53 Monitor *mon;
54 @@ -200,6 +200,7 @@ static void sendmon(Client *c, Monitor *m);
55 static void setclientstate(Client *c, long state);
56 static void setfocus(Client *c);
57 static void setfullscreen(Client *c, int fullscreen);
58 +static void setsticky(Client *c, int sticky);
59 static void setlayout(const Arg *arg);
60 static void setmfact(const Arg *arg);
61 static void setup(void);
62 @@ -211,6 +212,7 @@ static void tagmon(const Arg *arg);
63 static void tile(Monitor *m);
64 static void togglebar(const Arg *arg);
65 static void togglefloating(const Arg *arg);
66 +static void togglesticky(const Arg *arg);
67 static void toggletag(const Arg *arg);
68 static void toggleview(const Arg *arg);
69 static void unfocus(Client *c, int setfocus);
70 @@ -525,6 +527,10 @@ clientmessage(XEvent *e)
71 || cme->data.l[2] == netatom[NetWMFullscreen])
72 setfullscreen(c, (cme->data.l[0] == 1 /* _NET_W…
73 || (cme->data.l[0] == 2 /* _NET_WM_STAT…
74 +
75 + if (cme->data.l[1] == netatom[NetWMSticky]
76 + || cme->data.l[2] == netatom[NetWMSticky])
77 + setsticky(c, (cme->data.l[0] == 1 || (cme->data.l[0] == 2 &…
78 } else if (cme->message_type == netatom[NetActiveWindow]) {
79 if (c != selmon->sel && !c->isurgent)
80 seturgent(c, 1);
81 @@ -1507,6 +1513,23 @@ setfullscreen(Client *c, int fullscreen)
82 }
83 }
84
85 +void
86 + setsticky(Client *c, int sticky)
87 + {
88 +
89 + if(sticky && !c->issticky) {
90 + XChangeProperty(dpy, c->win, netatom[NetWMStat…
91 + PropModeReplace, (unsigned cha…
92 + c->issticky = 1;
93 + } else if(!sticky && c->issticky){
94 + XChangeProperty(dpy, c->win, netatom[NetWMStat…
95 + PropModeReplace, (unsigned cha…
96 + c->issticky = 0;
97 + arrange(c->mon);
98 + }
99 + }
100 +
101 +
102 void
103 setlayout(const Arg *arg)
104 {
105 @@ -1576,6 +1599,7 @@ setup(void)
106 netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
107 netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHEC…
108 netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULL…
109 + netatom[NetWMSticky] = XInternAtom(dpy, "_NET_WM_STATE_STICKY",…
110 netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYP…
111 netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WIND…
112 netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", F…
113 @@ -1735,6 +1759,15 @@ togglefloating(const Arg *arg)
114 arrange(selmon);
115 }
116
117 +void
118 +togglesticky(const Arg *arg)
119 +{
120 + if (!selmon->sel)
121 + return;
122 + setsticky(selmon->sel, !selmon->sel->issticky);
123 + arrange(selmon);
124 +}
125 +
126 void
127 toggletag(const Arg *arg)
128 {
129 @@ -2027,6 +2060,9 @@ updatewindowtype(Client *c)
130
131 if (state == netatom[NetWMFullscreen])
132 setfullscreen(c, 1);
133 + if (state == netatom[NetWMSticky]) {
134 + setsticky(c, 1);
135 + }
136 if (wtype == netatom[NetWMWindowTypeDialog])
137 c->isfloating = 1;
138 }
139 @@ -2163,3 +2199,4 @@ main(int argc, char *argv[])
140 XCloseDisplay(dpy);
141 return EXIT_SUCCESS;
142 }
143 +
144 --
145 2.46.0
146
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.