dwm: update to 6.3 + cleaning patches.
This commit is contained in:
parent
ef80d981bf
commit
90216e394e
15 changed files with 374 additions and 430 deletions
|
@ -67,17 +67,14 @@
|
|||
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
||||
|
||||
#define SYSTEM_TRAY_REQUEST_DOCK 0
|
||||
|
||||
/* XEMBED messages */
|
||||
#define XEMBED_EMBEDDED_NOTIFY 0
|
||||
#define XEMBED_WINDOW_ACTIVATE 1
|
||||
#define XEMBED_FOCUS_IN 4
|
||||
#define XEMBED_MODALITY_ON 10
|
||||
|
||||
#define XEMBED_MAPPED (1 << 0)
|
||||
#define XEMBED_WINDOW_ACTIVATE 1
|
||||
#define XEMBED_WINDOW_DEACTIVATE 2
|
||||
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 0
|
||||
#define XEMBED_EMBEDDED_VERSION (VERSION_MAJOR << 16) | VERSION_MINOR
|
||||
|
@ -299,7 +296,7 @@ static Client *termforwin(const Client *c);
|
|||
static pid_t winpid(Window w);
|
||||
|
||||
/* variables */
|
||||
static Systray *systray = NULL;
|
||||
static Systray *systray = NULL;
|
||||
static const char broken[] = "broken";
|
||||
static char stext[1024];
|
||||
static int screen;
|
||||
|
@ -322,7 +319,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
|
|||
[MapRequest] = maprequest,
|
||||
[MotionNotify] = motionnotify,
|
||||
[PropertyNotify] = propertynotify,
|
||||
[ResizeRequest] = resizerequest,
|
||||
[ResizeRequest] = resizerequest,
|
||||
[UnmapNotify] = unmapnotify
|
||||
};
|
||||
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
|
||||
|
@ -554,7 +551,7 @@ unswallow(Client *c)
|
|||
void
|
||||
buttonpress(XEvent *e)
|
||||
{
|
||||
unsigned int i, x, click, occ = 0;
|
||||
unsigned int i, x, click, occ;
|
||||
Arg arg = {0};
|
||||
Client *c;
|
||||
Monitor *m;
|
||||
|
@ -568,15 +565,14 @@ buttonpress(XEvent *e)
|
|||
focus(NULL);
|
||||
}
|
||||
if (ev->window == selmon->barwin) {
|
||||
i = x = 0;
|
||||
i = x = occ = 0;
|
||||
/* Bitmask of occupied tags */
|
||||
for (c = m->clients; c; c = c->next)
|
||||
occ |= c->tags == 255 ? 0 : c->tags;
|
||||
do {
|
||||
/* do not reserve space for vacant tags */
|
||||
if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
|
||||
continue;
|
||||
x += TEXTW(tags[i]);
|
||||
} while (ev->x >= x && ++i < LENGTH(tags));
|
||||
occ |= c->tags;
|
||||
|
||||
do
|
||||
x += TEXTW(occ & 1 << i ? alttags[i] : tags[i]);
|
||||
while (ev->x >= x && ++i < LENGTH(tags));
|
||||
if (i < LENGTH(tags)) {
|
||||
click = ClkTagBar;
|
||||
arg.ui = 1 << i;
|
||||
|
@ -623,15 +619,18 @@ cleanup(void)
|
|||
XUngrabKey(dpy, AnyKey, AnyModifier, root);
|
||||
while (mons)
|
||||
cleanupmon(mons);
|
||||
|
||||
if (showsystray) {
|
||||
XUnmapWindow(dpy, systray->win);
|
||||
XDestroyWindow(dpy, systray->win);
|
||||
free(systray);
|
||||
}
|
||||
for (i = 0; i < CurLast; i++)
|
||||
|
||||
for (i = 0; i < CurLast; i++)
|
||||
drw_cur_free(drw, cursor[i]);
|
||||
for (i = 0; i < LENGTH(colors) + 1; i++)
|
||||
free(scheme[i]);
|
||||
free(scheme);
|
||||
XDestroyWindow(dpy, wmcheckwin);
|
||||
drw_free(drw);
|
||||
XSync(dpy, False);
|
||||
|
@ -709,6 +708,7 @@ clientmessage(XEvent *e)
|
|||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!c)
|
||||
return;
|
||||
if (cme->message_type == netatom[NetWMState]) {
|
||||
|
@ -933,10 +933,9 @@ drawstatusbar(Monitor *m, int bh, char* stext) {
|
|||
isCode = 0;
|
||||
text = p;
|
||||
|
||||
w += 2; /* 1px padding on both sides */
|
||||
ret = x = m->ww - w;
|
||||
x = m->ww - w - getsystraywidth();
|
||||
drw_setscheme(drw, scheme[LENGTH(colors)]);
|
||||
w += 2; /* 1px padding on both sides */
|
||||
ret = m->ww - w;
|
||||
x = m->ww - w - getsystraywidth();
|
||||
|
||||
drw_setscheme(drw, scheme[LENGTH(colors)]);
|
||||
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
|
||||
|
@ -1008,33 +1007,36 @@ drawstatusbar(Monitor *m, int bh, char* stext) {
|
|||
void
|
||||
drawbar(Monitor *m)
|
||||
{
|
||||
int x, w, tw = 0, stw = 0;
|
||||
unsigned int i, occ = 0, urg = 0;
|
||||
Client *c;
|
||||
int x, w, tw = 0, stw = 0;
|
||||
int boxs = drw->fonts->h / 9;
|
||||
int boxw = drw->fonts->h / 6 + 2;
|
||||
unsigned int i, occ = 0, urg = 0;
|
||||
const char *tagtext;
|
||||
Client *c;
|
||||
|
||||
if (!m->showbar)
|
||||
return;
|
||||
|
||||
if(showsystray && m == systraytomon(m) && !systrayonleft)
|
||||
stw = getsystraywidth();
|
||||
|
||||
/* draw status first so it can be overdrawn by tags later */
|
||||
if (m == selmon) { /* status is only drawn on selected monitor */
|
||||
tw = m->ww - drawstatusbar(m, bh, stext);
|
||||
}
|
||||
/* draw status first so it can be overdrawn by tags later */
|
||||
if (m == selmon) { /* status is only drawn on selected monitor */
|
||||
tw = m->ww - drawstatusbar(m, bh, stext);
|
||||
}
|
||||
|
||||
resizebarwin(m);
|
||||
for (c = m->clients; c; c = c->next) {
|
||||
occ |= c->tags == 255 ? 0 : c->tags;
|
||||
occ |= c->tags;
|
||||
if (c->isurgent)
|
||||
urg |= c->tags;
|
||||
}
|
||||
x = 0;
|
||||
for (i = 0; i < LENGTH(tags); i++) {
|
||||
/* do not draw vacant tags */
|
||||
if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
|
||||
continue;
|
||||
|
||||
w = TEXTW(tags[i]);
|
||||
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
|
||||
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
|
||||
tagtext = occ & 1 << i ? alttags[i] : tags[i];
|
||||
w = TEXTW(tagtext);
|
||||
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
|
||||
drw_text(drw, x, 0, w, bh, lrpad / 2, tagtext, urg & 1 << i);
|
||||
x += w;
|
||||
}
|
||||
w = blw = TEXTW(m->ltsymbol);
|
||||
|
@ -1042,7 +1044,7 @@ drawbar(Monitor *m)
|
|||
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
|
||||
|
||||
if ((w = m->ww - tw - stw - x) > bh) {
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
drw_rect(drw, x, 0, w, bh, 1, 1);
|
||||
}
|
||||
drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
|
||||
|
@ -1177,6 +1179,7 @@ getatomprop(Client *c, Atom prop)
|
|||
unsigned long dl;
|
||||
unsigned char *p = NULL;
|
||||
Atom da, atom = None;
|
||||
|
||||
/* FIXME getatomprop should return the number of items and a pointer to
|
||||
* the stored data instead of this workaround */
|
||||
Atom req = XA_ATOM;
|
||||
|
@ -1335,6 +1338,7 @@ killclient(const Arg *arg)
|
|||
{
|
||||
if (!selmon->sel)
|
||||
return;
|
||||
|
||||
if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0 , 0, 0)) {
|
||||
XGrabServer(dpy);
|
||||
XSetErrorHandler(xerrordummy);
|
||||
|
@ -1393,7 +1397,7 @@ manage(Window w, XWindowAttributes *wa)
|
|||
XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
|
||||
grabbuttons(c, 0);
|
||||
if (!c->isfloating)
|
||||
c->isfloating = c->oldstate = trans != None || c->isfixed;
|
||||
c->isfloating = c->oldstate = t || c->isfixed;
|
||||
if (c->isfloating)
|
||||
XRaiseWindow(dpy, c->win);
|
||||
if( attachbelow )
|
||||
|
@ -1430,6 +1434,7 @@ maprequest(XEvent *e)
|
|||
{
|
||||
static XWindowAttributes wa;
|
||||
XMapRequestEvent *ev = &e->xmaprequest;
|
||||
|
||||
Client *i;
|
||||
if ((i = wintosystrayicon(ev->window))) {
|
||||
sendevent(i->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, systray->win, XEMBED_EMBEDDED_VERSION);
|
||||
|
@ -1573,7 +1578,8 @@ propertynotify(XEvent *e)
|
|||
resizebarwin(selmon);
|
||||
updatesystray();
|
||||
}
|
||||
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
||||
|
||||
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
||||
updatestatus();
|
||||
else if (ev->state == PropertyDelete)
|
||||
return; /* ignore */
|
||||
|
@ -1634,7 +1640,6 @@ removesystrayicon(Client *i)
|
|||
free(i);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
resize(Client *c, int x, int y, int w, int h, int interact)
|
||||
{
|
||||
|
@ -1854,7 +1859,8 @@ sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, lo
|
|||
else {
|
||||
exists = True;
|
||||
mt = proto;
|
||||
}
|
||||
}
|
||||
|
||||
if (exists) {
|
||||
ev.type = ClientMessage;
|
||||
ev.xclient.window = w;
|
||||
|
@ -1981,7 +1987,7 @@ setup(void)
|
|||
if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
|
||||
die("no fonts could be loaded.");
|
||||
lrpad = drw->fonts->h;
|
||||
bh = user_bh ? user_bh : drw->fonts->h + 2;
|
||||
bh = drw->fonts->h + 2;
|
||||
updategeom();
|
||||
/* init atoms */
|
||||
utf8string = XInternAtom(dpy, "UTF8_STRING", False);
|
||||
|
@ -1990,12 +1996,12 @@ setup(void)
|
|||
wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
|
||||
wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
|
||||
netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
|
||||
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
||||
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
||||
netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", False);
|
||||
netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", False);
|
||||
netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION", False);
|
||||
netatom[NetSystemTrayOrientationHorz] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION_HORZ", False);
|
||||
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[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
|
||||
netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
|
||||
|
@ -2005,7 +2011,7 @@ setup(void)
|
|||
xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
|
||||
xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
|
||||
xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
|
||||
/* init cursors */
|
||||
/* init cursors */
|
||||
cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
|
||||
cursor[CurResize] = drw_cur_create(drw, XC_sizing);
|
||||
cursor[CurMove] = drw_cur_create(drw, XC_fleur);
|
||||
|
@ -2314,11 +2320,11 @@ unmanage(Client *c, int destroyed)
|
|||
}
|
||||
free(c);
|
||||
|
||||
if (!s) {
|
||||
arrange(m);
|
||||
focus(NULL);
|
||||
updateclientlist();
|
||||
}
|
||||
if (!s) {
|
||||
arrange(m);
|
||||
focus(NULL);
|
||||
updateclientlist();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2545,6 +2551,7 @@ updatestatus(void)
|
|||
updatesystray();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
updatesystrayicongeom(Client *i, int w, int h)
|
||||
{
|
||||
|
@ -2610,7 +2617,7 @@ updatesystray(void)
|
|||
if (!showsystray)
|
||||
return;
|
||||
if (systrayonleft)
|
||||
x -= sw;
|
||||
x -= sw + lrpad / 2;
|
||||
if (!systray) {
|
||||
/* init systray */
|
||||
if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue