Add app launcher
This commit is contained in:
parent
60764d85aa
commit
2a55058a06
38
dwm.c
38
dwm.c
|
@ -142,6 +142,11 @@ typedef struct {
|
||||||
int monitor;
|
int monitor;
|
||||||
} Rule;
|
} Rule;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char** command;
|
||||||
|
const char* name;
|
||||||
|
} Launcher;
|
||||||
|
|
||||||
/* function declarations */
|
/* function declarations */
|
||||||
static void applyrules(Client *c);
|
static void applyrules(Client *c);
|
||||||
static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
|
static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
|
||||||
|
@ -446,9 +451,25 @@ buttonpress(XEvent *e)
|
||||||
if (i < LENGTH(tags)) {
|
if (i < LENGTH(tags)) {
|
||||||
click = ClkTagBar;
|
click = ClkTagBar;
|
||||||
arg.ui = 1 << i;
|
arg.ui = 1 << i;
|
||||||
} else if (ev->x < x + blw)
|
goto execute_handler;
|
||||||
|
} else if (ev->x < x + blw) {
|
||||||
click = ClkLtSymbol;
|
click = ClkLtSymbol;
|
||||||
else
|
goto execute_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
x += blw;
|
||||||
|
|
||||||
|
for(i = 0; i < LENGTH(launchers); i++) {
|
||||||
|
x += TEXTW(launchers[i].name);
|
||||||
|
|
||||||
|
if (ev->x < x) {
|
||||||
|
Arg a;
|
||||||
|
a.v = launchers[i].command;
|
||||||
|
spawn(&a);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
click = ClkStatusText;
|
click = ClkStatusText;
|
||||||
} else if ((c = wintoclient(ev->window))) {
|
} else if ((c = wintoclient(ev->window))) {
|
||||||
focus(c);
|
focus(c);
|
||||||
|
@ -456,6 +477,9 @@ buttonpress(XEvent *e)
|
||||||
XAllowEvents(dpy, ReplayPointer, CurrentTime);
|
XAllowEvents(dpy, ReplayPointer, CurrentTime);
|
||||||
click = ClkClientWin;
|
click = ClkClientWin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
execute_handler:
|
||||||
|
|
||||||
for (i = 0; i < LENGTH(buttons); i++)
|
for (i = 0; i < LENGTH(buttons); i++)
|
||||||
if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
|
if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
|
||||||
&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
|
&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
|
||||||
|
@ -824,9 +848,6 @@ drawbar(Monitor *m)
|
||||||
|
|
||||||
/* draw status first so it can be overdrawn by tags later */
|
/* draw status first so it can be overdrawn by tags later */
|
||||||
if (m == selmon) { /* status is only drawn on selected monitor */
|
if (m == selmon) { /* status is only drawn on selected monitor */
|
||||||
// drw_setscheme(drw, scheme[SchemeNorm]);
|
|
||||||
// tw = TEXTW(stext); /* - lrpad + 2; * 2px right padding */
|
|
||||||
// drw_text(drw, m->ww - tw - 2 * hpb, 0, tw, bh, lrpad / 2, stext, 0);
|
|
||||||
tw = m->ww - drawstatusbar(m, bh, stext);
|
tw = m->ww - drawstatusbar(m, bh, stext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,6 +879,13 @@ drawbar(Monitor *m)
|
||||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
|
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
|
||||||
|
|
||||||
|
for (i = 0; i < LENGTH(launchers); i++)
|
||||||
|
{
|
||||||
|
w = TEXTW(launchers[i].name);
|
||||||
|
drw_text(drw, x, 0, w, bh, lrpad / 2, launchers[i].name, urg & 1 << i);
|
||||||
|
x += w;
|
||||||
|
}
|
||||||
|
|
||||||
if ((w = m->ww - tw - x) > bh) {
|
if ((w = m->ww - tw - x) > bh) {
|
||||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||||
drw_rect(drw, x, 0, w - 2 * hpb, bh, 1, 1);
|
drw_rect(drw, x, 0, w - 2 * hpb, bh, 1, 1);
|
||||||
|
|
Loading…
Reference in New Issue