Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
added antoszka's viewprev patch with some minor modifications, restored Client->tags...
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
c9495ec
..
a4447f6
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-57,6
+57,7
@@
enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */
/* typedefs */
typedef struct Client Client;
/* typedefs */
typedef struct Client Client;
+
struct Client {
char name[256];
int x, y, w, h;
struct Client {
char name[256];
int x, y, w, h;
@@
-185,6
+186,7
@@
void updatebarpos(void);
void updatesizehints(Client *c);
void updatetitle(Client *c);
void view(const char *arg);
void updatesizehints(Client *c);
void updatetitle(Client *c);
void view(const char *arg);
+void viewprevtag(const char *arg); /* views previous selected tags */
int xerror(Display *dpy, XErrorEvent *ee);
int xerrordummy(Display *dsply, XErrorEvent *ee);
int xerrorstart(Display *dsply, XErrorEvent *ee);
int xerror(Display *dpy, XErrorEvent *ee);
int xerrordummy(Display *dsply, XErrorEvent *ee);
int xerrorstart(Display *dsply, XErrorEvent *ee);
@@
-195,7
+197,7
@@
char stext[256];
double mwfact;
int screen, sx, sy, sw, sh, wax, way, waw, wah;
int (*xerrorxlib)(Display *, XErrorEvent *);
double mwfact;
int screen, sx, sy, sw, sh, wax, way, waw, wah;
int (*xerrorxlib)(Display *, XErrorEvent *);
-unsigned int bh, bpos
, ntags
;
+unsigned int bh, bpos;
unsigned int blw = 0;
unsigned int ltidx = 0; /* default */
unsigned int nlayouts = 0;
unsigned int blw = 0;
unsigned int ltidx = 0; /* default */
unsigned int nlayouts = 0;
@@
-218,7
+220,6
@@
void (*handler[LASTEvent]) (XEvent *) = {
Atom wmatom[WMLast], netatom[NetLast];
Bool otherwm, readin;
Bool running = True;
Atom wmatom[WMLast], netatom[NetLast];
Bool otherwm, readin;
Bool running = True;
-Bool *seltags;
Bool selscreen = True;
Client *clients = NULL;
Client *sel = NULL;
Bool selscreen = True;
Client *clients = NULL;
Client *sel = NULL;
@@
-232,6
+233,11
@@
Regs *regs = NULL;
/* configuration, allows nested code to access above variables */
#include "config.h"
/* configuration, allows nested code to access above variables */
#include "config.h"
+/* Statically define the number of tags. */
+unsigned int ntags = sizeof tags / sizeof tags[0];
+Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
+Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
+
/* functions*/
void
applyrules(Client *c) {
/* functions*/
void
applyrules(Client *c) {
@@
-261,8
+267,7
@@
applyrules(Client *c) {
if(ch.res_name)
XFree(ch.res_name);
if(!matched)
if(ch.res_name)
XFree(ch.res_name);
if(!matched)
- for(i = 0; i < ntags; i++)
- c->tags[i] = seltags[i];
+ memcpy(c->tags, seltags, sizeof seltags);
}
void
}
void
@@
-393,7
+398,6
@@
cleanup(void) {
XFreeCursor(dpy, cursor[CurMove]);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XSync(dpy, False);
XFreeCursor(dpy, cursor[CurMove]);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XSync(dpy, False);
- free(seltags);
}
void
}
void
@@
-999,14
+1003,13
@@
leavenotify(XEvent *e) {
void
manage(Window w, XWindowAttributes *wa) {
void
manage(Window w, XWindowAttributes *wa) {
- unsigned int i;
Client *c, *t = NULL;
Window trans;
Status rettrans;
XWindowChanges wc;
c = emallocz(sizeof(Client));
Client *c, *t = NULL;
Window trans;
Status rettrans;
XWindowChanges wc;
c = emallocz(sizeof(Client));
- c->tags = emallocz(
ntags * sizeof(Bool)
);
+ c->tags = emallocz(
sizeof seltags
);
c->win = w;
c->x = wa->x;
c->y = wa->y;
c->win = w;
c->x = wa->x;
c->y = wa->y;
@@
-1041,8
+1044,7
@@
manage(Window w, XWindowAttributes *wa) {
if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
for(t = clients; t && t->win != trans; t = t->next);
if(t)
if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
for(t = clients; t && t->win != trans; t = t->next);
if(t)
- for(i = 0; i < ntags; i++)
- c->tags[i] = t->tags[i];
+ memcpy(c->tags, t->tags, sizeof seltags);
applyrules(c);
if(!c->isfloating)
c->isfloating = (rettrans == Success) || c->isfixed;
applyrules(c);
if(!c->isfloating)
c->isfloating = (rettrans == Success) || c->isfixed;
@@
-1467,9
+1469,6
@@
setup(void) {
/* init tags */
compileregs();
/* init tags */
compileregs();
- ntags = sizeof tags / sizeof tags[0];
- seltags = emallocz(sizeof(Bool) * ntags);
- seltags[0] = True;
/* init appearance */
dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR);
/* init appearance */
dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR);
@@
-1840,6
+1839,7
@@
void
view(const char *arg) {
unsigned int i;
view(const char *arg) {
unsigned int i;
+ memcpy(prevtags, seltags, sizeof seltags);
for(i = 0; i < ntags; i++)
seltags[i] = arg == NULL;
i = idxoftag(arg);
for(i = 0; i < ntags; i++)
seltags[i] = arg == NULL;
i = idxoftag(arg);
@@
-1848,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
zoom(const char *arg) {
Client *c;
void
zoom(const char *arg) {
Client *c;