Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-fsignal-6.2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-fsignal-6.2.diff (3145B)
---
1 From e7f523c898983c84ba3102675662dc33cbb5573e Mon Sep 17 00:00:00 2001
2 From: Nihal Jere <[email protected]>
3 Date: Sat, 21 Mar 2020 15:50:00 -0500
4 Subject: [PATCH] fsignal
5
6 ---
7 config.def.h | 7 +++++++
8 dwm.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++--
9 2 files changed, 59 insertions(+), 2 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 1c0b587..8d2e6e9 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -113,3 +113,10 @@ static Button buttons[] = {
16 { ClkTagBar, MODKEY, Button3, togglet…
17 };
18
19 +/* signal definitions */
20 +/* signum must be greater than 0 */
21 +/* trigger signals using `xsetroot -name "fsignal:<signum>"` */
22 +static Signal signals[] = {
23 + /* signum function argument */
24 + { 1, setlayout, {.v = 0} },
25 +};
26 diff --git a/dwm.c b/dwm.c
27 index 4465af1..db2ee08 100644
28 --- a/dwm.c
29 +++ b/dwm.c
30 @@ -106,6 +106,12 @@ typedef struct {
31 const Arg arg;
32 } Key;
33
34 +typedef struct {
35 + unsigned int signum;
36 + void (*func)(const Arg *);
37 + const Arg arg;
38 +} Signal;
39 +
40 typedef struct {
41 const char *symbol;
42 void (*arrange)(Monitor *);
43 @@ -176,6 +182,7 @@ static void grabbuttons(Client *c, int focused);
44 static void grabkeys(void);
45 static void incnmaster(const Arg *arg);
46 static void keypress(XEvent *e);
47 +static int fake_signal(void);
48 static void killclient(const Arg *arg);
49 static void manage(Window w, XWindowAttributes *wa);
50 static void mappingnotify(XEvent *e);
51 @@ -998,6 +1005,47 @@ keypress(XEvent *e)
52 keys[i].func(&(keys[i].arg));
53 }
54
55 +int
56 +fake_signal(void)
57 +{
58 + char fsignal[256];
59 + char indicator[9] = "fsignal:";
60 + char str_signum[16];
61 + int i, v, signum;
62 + size_t len_fsignal, len_indicator = strlen(indicator);
63 +
64 + // Get root name property
65 + if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
66 + len_fsignal = strlen(fsignal);
67 +
68 + // Check if this is indeed a fake signal
69 + if (len_indicator > len_fsignal ? 0 : strncmp(indicator…
70 + memcpy(str_signum, &fsignal[len_indicator], len…
71 + str_signum[len_fsignal - len_indicator] = '\0';
72 +
73 + // Convert string value into managable integer
74 + for (i = signum = 0; i < strlen(str_signum); i+…
75 + v = str_signum[i] - '0';
76 + if (v >= 0 && v <= 9) {
77 + signum = signum * 10 + v;
78 + }
79 + }
80 +
81 + // Check if a signal was found, and if so handl…
82 + if (signum)
83 + for (i = 0; i < LENGTH(signals); i++)
84 + if (signum == signals[i].signum…
85 + signals[i].func(&(signa…
86 +
87 + // A fake signal was sent
88 + return 1;
89 + }
90 + }
91 +
92 + // No fake signal was sent, so proceed with update
93 + return 0;
94 +}
95 +
96 void
97 killclient(const Arg *arg)
98 {
99 @@ -1215,8 +1263,10 @@ propertynotify(XEvent *e)
100 Window trans;
101 XPropertyEvent *ev = &e->xproperty;
102
103 - if ((ev->window == root) && (ev->atom == XA_WM_NAME))
104 - updatestatus();
105 + if ((ev->window == root) && (ev->atom == XA_WM_NAME)) {
106 + if (!fake_signal())
107 + updatestatus();
108 + }
109 else if (ev->state == PropertyDelete)
110 return; /* ignore */
111 else if ((c = wintoclient(ev->window))) {
112 --
113 2.25.1
114
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.