mirror of
https://github.com/bakkeby/patches
synced 2024-11-19 15:25:38 +00:00
systray: systray window may always not exist depending on configuration and number of monitors available, causing segfault in cleanup
This commit is contained in:
parent
7782580903
commit
c74b570858
@ -1,16 +1,16 @@
|
|||||||
From 91f2f27ff5fd351261b33506ed7c755341bedbbb Mon Sep 17 00:00:00 2001
|
From 055377418bb462aba7743f9f369fdcb286f3c479 Mon Sep 17 00:00:00 2001
|
||||||
From: bakkeby <bakkeby@gmail.com>
|
From: bakkeby <bakkeby@gmail.com>
|
||||||
Date: Mon, 20 Jul 2020 11:19:12 +0200
|
Date: Mon, 20 Jul 2020 11:19:12 +0200
|
||||||
Subject: [PATCH 2/2] Adding systray module
|
Subject: [PATCH 2/2] Adding systray module
|
||||||
|
|
||||||
---
|
---
|
||||||
config.def.h | 3 +
|
config.def.h | 3 +
|
||||||
dwm.c | 128 ++++++++++++++++++++++++++----
|
dwm.c | 130 ++++++++++++++++++++++++++----
|
||||||
patch/bar_systray.c | 187 ++++++++++++++++++++++++++++++++++++++++++++
|
patch/bar_systray.c | 187 ++++++++++++++++++++++++++++++++++++++++++++
|
||||||
patch/bar_systray.h | 40 ++++++++++
|
patch/bar_systray.h | 40 ++++++++++
|
||||||
patch/include.c | 3 +-
|
patch/include.c | 3 +-
|
||||||
patch/include.h | 3 +-
|
patch/include.h | 3 +-
|
||||||
6 files changed, 347 insertions(+), 17 deletions(-)
|
6 files changed, 349 insertions(+), 17 deletions(-)
|
||||||
create mode 100644 patch/bar_systray.c
|
create mode 100644 patch/bar_systray.c
|
||||||
create mode 100644 patch/bar_systray.h
|
create mode 100644 patch/bar_systray.h
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ index 2534eac..d17b65c 100644
|
|||||||
{ -1, 0, BAR_ALIGN_NONE, width_wintitle, draw_wintitle, click_wintitle, "wintitle" },
|
{ -1, 0, BAR_ALIGN_NONE, width_wintitle, draw_wintitle, click_wintitle, "wintitle" },
|
||||||
};
|
};
|
||||||
diff --git a/dwm.c b/dwm.c
|
diff --git a/dwm.c b/dwm.c
|
||||||
index 03dccfb..ce6c4fe 100644
|
index 03dccfb..dff9862 100644
|
||||||
--- a/dwm.c
|
--- a/dwm.c
|
||||||
+++ b/dwm.c
|
+++ b/dwm.c
|
||||||
@@ -63,6 +63,8 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
@@ -63,6 +63,8 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
|
||||||
@ -69,19 +69,21 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
static int running = 1;
|
static int running = 1;
|
||||||
static Cur *cursor[CurLast];
|
static Cur *cursor[CurLast];
|
||||||
static Clr **scheme;
|
static Clr **scheme;
|
||||||
@@ -555,6 +558,11 @@ cleanup(void)
|
@@ -555,6 +558,13 @@ cleanup(void)
|
||||||
XUngrabKey(dpy, AnyKey, AnyModifier, root);
|
XUngrabKey(dpy, AnyKey, AnyModifier, root);
|
||||||
while (mons)
|
while (mons)
|
||||||
cleanupmon(mons);
|
cleanupmon(mons);
|
||||||
+ if (showsystray) {
|
+ if (showsystray && systray) {
|
||||||
+ XUnmapWindow(dpy, systray->win);
|
+ if (systray->win) {
|
||||||
+ XDestroyWindow(dpy, systray->win);
|
+ XUnmapWindow(dpy, systray->win);
|
||||||
|
+ XDestroyWindow(dpy, systray->win);
|
||||||
|
+ }
|
||||||
+ free(systray);
|
+ free(systray);
|
||||||
+ }
|
+ }
|
||||||
for (i = 0; i < CurLast; i++)
|
for (i = 0; i < CurLast; i++)
|
||||||
drw_cur_free(drw, cursor[i]);
|
drw_cur_free(drw, cursor[i]);
|
||||||
for (i = 0; i < LENGTH(colors); i++)
|
for (i = 0; i < LENGTH(colors); i++)
|
||||||
@@ -590,9 +598,48 @@ cleanupmon(Monitor *mon)
|
@@ -590,9 +600,48 @@ cleanupmon(Monitor *mon)
|
||||||
void
|
void
|
||||||
clientmessage(XEvent *e)
|
clientmessage(XEvent *e)
|
||||||
{
|
{
|
||||||
@ -130,7 +132,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
if (!c)
|
if (!c)
|
||||||
return;
|
return;
|
||||||
if (cme->message_type == netatom[NetWMState]) {
|
if (cme->message_type == netatom[NetWMState]) {
|
||||||
@@ -755,6 +802,10 @@ destroynotify(XEvent *e)
|
@@ -755,6 +804,10 @@ destroynotify(XEvent *e)
|
||||||
|
|
||||||
if ((c = wintoclient(ev->window)))
|
if ((c = wintoclient(ev->window)))
|
||||||
unmanage(c, 1);
|
unmanage(c, 1);
|
||||||
@ -141,7 +143,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1021,9 +1072,15 @@ getatomprop(Client *c, Atom prop)
|
@@ -1021,9 +1074,15 @@ getatomprop(Client *c, Atom prop)
|
||||||
unsigned char *p = NULL;
|
unsigned char *p = NULL;
|
||||||
Atom da, atom = None;
|
Atom da, atom = None;
|
||||||
|
|
||||||
@ -158,7 +160,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
XFree(p);
|
XFree(p);
|
||||||
}
|
}
|
||||||
return atom;
|
return atom;
|
||||||
@@ -1161,7 +1218,7 @@ killclient(const Arg *arg)
|
@@ -1161,7 +1220,7 @@ killclient(const Arg *arg)
|
||||||
{
|
{
|
||||||
if (!selmon->sel)
|
if (!selmon->sel)
|
||||||
return;
|
return;
|
||||||
@ -167,7 +169,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
XGrabServer(dpy);
|
XGrabServer(dpy);
|
||||||
XSetErrorHandler(xerrordummy);
|
XSetErrorHandler(xerrordummy);
|
||||||
XSetCloseDownMode(dpy, DestroyAll);
|
XSetCloseDownMode(dpy, DestroyAll);
|
||||||
@@ -1247,9 +1304,15 @@ mappingnotify(XEvent *e)
|
@@ -1247,9 +1306,15 @@ mappingnotify(XEvent *e)
|
||||||
void
|
void
|
||||||
maprequest(XEvent *e)
|
maprequest(XEvent *e)
|
||||||
{
|
{
|
||||||
@ -183,7 +185,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
if (!XGetWindowAttributes(dpy, ev->window, &wa))
|
if (!XGetWindowAttributes(dpy, ev->window, &wa))
|
||||||
return;
|
return;
|
||||||
if (wa.override_redirect)
|
if (wa.override_redirect)
|
||||||
@@ -1373,6 +1436,16 @@ propertynotify(XEvent *e)
|
@@ -1373,6 +1438,16 @@ propertynotify(XEvent *e)
|
||||||
Window trans;
|
Window trans;
|
||||||
XPropertyEvent *ev = &e->xproperty;
|
XPropertyEvent *ev = &e->xproperty;
|
||||||
|
|
||||||
@ -200,7 +202,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
||||||
updatestatus();
|
updatestatus();
|
||||||
else if (ev->state == PropertyDelete)
|
else if (ev->state == PropertyDelete)
|
||||||
@@ -1592,26 +1665,36 @@ setclientstate(Client *c, long state)
|
@@ -1592,26 +1667,36 @@ setclientstate(Client *c, long state)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -247,7 +249,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
}
|
}
|
||||||
return exists;
|
return exists;
|
||||||
}
|
}
|
||||||
@@ -1625,7 +1708,7 @@ setfocus(Client *c)
|
@@ -1625,7 +1710,7 @@ setfocus(Client *c)
|
||||||
XA_WINDOW, 32, PropModeReplace,
|
XA_WINDOW, 32, PropModeReplace,
|
||||||
(unsigned char *) &(c->win), 1);
|
(unsigned char *) &(c->win), 1);
|
||||||
}
|
}
|
||||||
@ -256,7 +258,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1714,6 +1797,15 @@ setup(void)
|
@@ -1714,6 +1799,15 @@ setup(void)
|
||||||
wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
|
wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
|
||||||
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
|
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
|
||||||
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
||||||
@ -272,7 +274,7 @@ index 03dccfb..ce6c4fe 100644
|
|||||||
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
|
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
|
||||||
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
|
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
|
||||||
netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
|
netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
|
||||||
@@ -1956,6 +2048,12 @@ unmapnotify(XEvent *e)
|
@@ -1956,6 +2050,12 @@ unmapnotify(XEvent *e)
|
||||||
setclientstate(c, WithdrawnState);
|
setclientstate(c, WithdrawnState);
|
||||||
else
|
else
|
||||||
unmanage(c, 0);
|
unmanage(c, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user