static void monocle(Monitor *m);
static void motionnotify(XEvent *e);
static void movemouse(const Arg *arg);
+static void nametag(const Arg *arg);
static Client *nexttiled(Client *c);
static void pop(Client *c);
static void propertynotify(XEvent *e);
static void quit(const Arg *arg);
+static void quitprompt(const Arg *arg);
static Monitor *recttomon(int x, int y, int w, int h);
static void resize(Client *c, int x, int y, int w, int h, int interact);
static void resizeclient(Client *c, int x, int y, int w, int h);
};
static Atom wmatom[WMLast], netatom[NetLast];
static int running = 1;
+static int restart = 1;
static Cur *cursor[CurLast];
static Clr **scheme;
static Display *dpy;
void
drawbar(Monitor *m)
{
+ int indn;
int x, w, tw = 0;
int boxs = drw->fonts->h / 9;
int boxw = drw->fonts->h / 6 + 2;
}
x = 0;
for (i = 0; i < LENGTH(tags); i++) {
+ indn = 0;
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);
- if (occ & 1 << i)
- drw_rect(drw, x + boxs, boxs, boxw, boxw,
- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- urg & 1 << i);
+
+ for (c = m->clients; c; c = c->next) {
+ if (c->tags & (1 << i)) {
+ drw_rect(drw, x, 1 + (indn * 2), selmon->sel == c ? 6 : 1, 1, 1, urg & 1 << i);
+ indn++;
+ }
+ }
+
x += w;
}
w = TEXTW(m->ltsymbol);
}
}
+void
+nametag(const Arg *arg) {
+ char *p, name[MAX_TAGLEN];
+ FILE *f;
+ int i;
+
+ errno = 0; // popen(3p) says on failure it "may" set errno
+ // TODO: Create a central location for the dmenu font specification.
+ // It should not be hardcoded in multiple locations.
+ if(!(f = popen("dmenu -fn monospace:size=14 < /dev/null", "r"))) {
+ fprintf(stderr, "dwm: popen 'dmenu < /dev/null' failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : "");
+ return;
+ }
+ if (!(p = fgets(name, MAX_TAGLEN, f)) && (i = errno) && ferror(f))
+ fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i));
+ if (pclose(f) < 0)
+ fprintf(stderr, "dwm: pclose failed: %s\n", strerror(errno));
+ if(!p)
+ return;
+ if((p = strchr(name, '\n')))
+ *p = '\0';
+
+ for(i = 0; i < LENGTH(tags); i++)
+ if(selmon->tagset[selmon->seltags] & (1 << i))
+ strcpy(tags[i], name);
+ drawbars();
+}
+
Client *
nexttiled(Client *c)
{
running = 0;
}
+void
+quitprompt(const Arg *arg)
+{
+ // TODO: Create a central location for the dmenu font specification.
+ // It should not be hardcoded in multiple locations.
+ FILE *pp = popen("echo -e \"no\nrestart\nyes\" | dmenu -fn monospace:size=14 -i -sb red -p \"Quit DWM?\"", "r");
+ if(pp != NULL) {
+ char buf[1024];
+ if (fgets(buf, sizeof(buf), pp) == NULL) {
+ fprintf(stderr, "Quitprompt: Error reading pipe!\n");
+ return;
+ }
+ if (strcmp(buf, "yes\n") == 0) {
+ pclose(pp);
+ restart = 0;
+ quit(NULL);
+ } else if (strcmp(buf, "restart\n") == 0) {
+ pclose(pp);
+ restart = 1;
+ quit(NULL);
+ } else if (strcmp(buf, "no\n") == 0) {
+ pclose(pp);
+ return;
+ }
+ }
+}
+
Monitor *
recttomon(int x, int y, int w, int h)
{
run();
cleanup();
XCloseDisplay(dpy);
+ if (restart == 1) {
+ execlp("dwm-sgk", "dwm-sgk", NULL);
+ }
return EXIT_SUCCESS;
}