added antoszka's viewprev patch with some minor modifications, restored Client->tags as Bool *, however kept the static initialization of ntags and seltags (prevtags) - this seems to be the best compromise
This commit is contained in:
parent
eeea4ef583
commit
a73de0cff4
@ -49,6 +49,7 @@ Key keys[] = { \
|
|||||||
{ MODKEY, XK_l, setmwfact, "+0.05" }, \
|
{ MODKEY, XK_l, setmwfact, "+0.05" }, \
|
||||||
{ MODKEY, XK_m, togglemax, NULL }, \
|
{ MODKEY, XK_m, togglemax, NULL }, \
|
||||||
{ MODKEY, XK_Return, zoom, NULL }, \
|
{ MODKEY, XK_Return, zoom, NULL }, \
|
||||||
|
{ MODKEY, XK_Tab, viewprevtag, NULL }, \
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \
|
{ MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \
|
||||||
{ MODKEY|ShiftMask, XK_c, killclient, NULL }, \
|
{ MODKEY|ShiftMask, XK_c, killclient, NULL }, \
|
||||||
{ MODKEY, XK_0, view, NULL }, \
|
{ MODKEY, XK_0, view, NULL }, \
|
||||||
|
@ -17,7 +17,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
|
|||||||
# flags
|
# flags
|
||||||
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
|
CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
|
||||||
LDFLAGS = -s ${LIBS}
|
LDFLAGS = -s ${LIBS}
|
||||||
#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
|
#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
|
||||||
#LDFLAGS = -g ${LIBS}
|
#LDFLAGS = -g ${LIBS}
|
||||||
|
|
||||||
# Solaris
|
# Solaris
|
||||||
|
54
dwm.c
54
dwm.c
@ -58,6 +58,22 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */
|
|||||||
/* typedefs */
|
/* typedefs */
|
||||||
typedef struct Client Client;
|
typedef struct Client Client;
|
||||||
|
|
||||||
|
struct Client {
|
||||||
|
char name[256];
|
||||||
|
int x, y, w, h;
|
||||||
|
int rx, ry, rw, rh; /* revert geometry */
|
||||||
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
|
int minax, maxax, minay, maxay;
|
||||||
|
long flags;
|
||||||
|
unsigned int border, oldborder;
|
||||||
|
Bool isbanned, isfixed, ismax, isfloating, wasfloating;
|
||||||
|
Bool *tags;
|
||||||
|
Client *next;
|
||||||
|
Client *prev;
|
||||||
|
Client *snext;
|
||||||
|
Window win;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
unsigned long norm[ColLast];
|
unsigned long norm[ColLast];
|
||||||
@ -170,6 +186,7 @@ void updatebarpos(void);
|
|||||||
void updatesizehints(Client *c);
|
void updatesizehints(Client *c);
|
||||||
void updatetitle(Client *c);
|
void updatetitle(Client *c);
|
||||||
void view(const char *arg);
|
void view(const char *arg);
|
||||||
|
void viewprevtag(const char *arg); /* views previous selected tags */
|
||||||
int xerror(Display *dpy, XErrorEvent *ee);
|
int xerror(Display *dpy, XErrorEvent *ee);
|
||||||
int xerrordummy(Display *dsply, XErrorEvent *ee);
|
int xerrordummy(Display *dsply, XErrorEvent *ee);
|
||||||
int xerrorstart(Display *dsply, XErrorEvent *ee);
|
int xerrorstart(Display *dsply, XErrorEvent *ee);
|
||||||
@ -219,22 +236,7 @@ Regs *regs = NULL;
|
|||||||
/* Statically define the number of tags. */
|
/* Statically define the number of tags. */
|
||||||
unsigned int ntags = sizeof tags / sizeof tags[0];
|
unsigned int ntags = sizeof tags / sizeof tags[0];
|
||||||
Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
|
Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
|
||||||
|
Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
|
||||||
struct Client {
|
|
||||||
char name[256];
|
|
||||||
int x, y, w, h;
|
|
||||||
int rx, ry, rw, rh; /* revert geometry */
|
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
|
||||||
int minax, maxax, minay, maxay;
|
|
||||||
long flags;
|
|
||||||
unsigned int border, oldborder;
|
|
||||||
Bool isbanned, isfixed, ismax, isfloating, wasfloating;
|
|
||||||
Bool tags[sizeof tags / sizeof tags[0]];
|
|
||||||
Client *next;
|
|
||||||
Client *prev;
|
|
||||||
Client *snext;
|
|
||||||
Window win;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* functions*/
|
/* functions*/
|
||||||
void
|
void
|
||||||
@ -265,8 +267,7 @@ applyrules(Client *c) {
|
|||||||
if(ch.res_name)
|
if(ch.res_name)
|
||||||
XFree(ch.res_name);
|
XFree(ch.res_name);
|
||||||
if(!matched)
|
if(!matched)
|
||||||
for(i = 0; i < ntags; i++)
|
memcpy(c->tags, seltags, sizeof seltags);
|
||||||
c->tags[i] = seltags[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1002,13 +1003,13 @@ leavenotify(XEvent *e) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
manage(Window w, XWindowAttributes *wa) {
|
manage(Window w, XWindowAttributes *wa) {
|
||||||
unsigned int i;
|
|
||||||
Client *c, *t = NULL;
|
Client *c, *t = NULL;
|
||||||
Window trans;
|
Window trans;
|
||||||
Status rettrans;
|
Status rettrans;
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
|
||||||
c = emallocz(sizeof(Client));
|
c = emallocz(sizeof(Client));
|
||||||
|
c->tags = emallocz(sizeof seltags);
|
||||||
c->win = w;
|
c->win = w;
|
||||||
c->x = wa->x;
|
c->x = wa->x;
|
||||||
c->y = wa->y;
|
c->y = wa->y;
|
||||||
@ -1043,8 +1044,7 @@ manage(Window w, XWindowAttributes *wa) {
|
|||||||
if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
|
if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
|
||||||
for(t = clients; t && t->win != trans; t = t->next);
|
for(t = clients; t && t->win != trans; t = t->next);
|
||||||
if(t)
|
if(t)
|
||||||
for(i = 0; i < ntags; i++)
|
memcpy(c->tags, t->tags, sizeof seltags);
|
||||||
c->tags[i] = t->tags[i];
|
|
||||||
applyrules(c);
|
applyrules(c);
|
||||||
if(!c->isfloating)
|
if(!c->isfloating)
|
||||||
c->isfloating = (rettrans == Success) || c->isfixed;
|
c->isfloating = (rettrans == Success) || c->isfixed;
|
||||||
@ -1702,6 +1702,7 @@ unmanage(Client *c) {
|
|||||||
focus(NULL);
|
focus(NULL);
|
||||||
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
|
XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
|
||||||
setclientstate(c, WithdrawnState);
|
setclientstate(c, WithdrawnState);
|
||||||
|
free(c->tags);
|
||||||
free(c);
|
free(c);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
XSetErrorHandler(xerror);
|
XSetErrorHandler(xerror);
|
||||||
@ -1838,6 +1839,7 @@ void
|
|||||||
view(const char *arg) {
|
view(const char *arg) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
memcpy(prevtags, seltags, sizeof seltags);
|
||||||
for(i = 0; i < ntags; i++)
|
for(i = 0; i < ntags; i++)
|
||||||
seltags[i] = arg == NULL;
|
seltags[i] = arg == NULL;
|
||||||
i = idxoftag(arg);
|
i = idxoftag(arg);
|
||||||
@ -1846,6 +1848,16 @@ view(const char *arg) {
|
|||||||
arrange();
|
arrange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
viewprevtag(const char *arg) {
|
||||||
|
static Bool tmptags[sizeof tags / sizeof tags[0]];
|
||||||
|
|
||||||
|
memcpy(tmptags, seltags, sizeof seltags);
|
||||||
|
memcpy(seltags, prevtags, sizeof seltags);
|
||||||
|
memcpy(prevtags, tmptags, sizeof seltags);
|
||||||
|
arrange();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zoom(const char *arg) {
|
zoom(const char *arg) {
|
||||||
Client *c;
|
Client *c;
|
||||||
|
Loading…
Reference in New Issue
Block a user