resizing vlist, new dinput binding
This commit is contained in:
parent
cc8b3b999b
commit
7afd296c40
1 changed files with 16 additions and 18 deletions
26
dmenu.c
26
dmenu.c
|
@ -109,6 +109,7 @@ calcoffsetsv(void) {
|
||||||
next = prev = curr;
|
next = prev = curr;
|
||||||
for(i = 0; i < lines && next; i++)
|
for(i = 0; i < lines && next; i++)
|
||||||
next = next->right;
|
next = next->right;
|
||||||
|
mh = (dc.font.height + 2) * (i + 1);
|
||||||
for(i = 0; i < lines && prev && prev->left; i++)
|
for(i = 0; i < lines && prev && prev->left; i++)
|
||||||
prev = prev->left;
|
prev = prev->left;
|
||||||
}
|
}
|
||||||
|
@ -166,6 +167,8 @@ drawmenu(void) {
|
||||||
dc.w = mw;
|
dc.w = mw;
|
||||||
dc.h = mh;
|
dc.h = mh;
|
||||||
drawtext(&dc, NULL, normcol, False);
|
drawtext(&dc, NULL, normcol, False);
|
||||||
|
dc.h = dc.font.height + 2;
|
||||||
|
dc.y = topbar ? 0 : mh - dc.h;
|
||||||
/* print prompt? */
|
/* print prompt? */
|
||||||
if(prompt) {
|
if(prompt) {
|
||||||
dc.w = promptw;
|
dc.w = promptw;
|
||||||
|
@ -177,12 +180,10 @@ drawmenu(void) {
|
||||||
if(cmdw && item && lines == 0)
|
if(cmdw && item && lines == 0)
|
||||||
dc.w = cmdw;
|
dc.w = cmdw;
|
||||||
drawtext(&dc, *text ? text : NULL, normcol, False);
|
drawtext(&dc, *text ? text : NULL, normcol, False);
|
||||||
if(curr) {
|
|
||||||
if(lines > 0)
|
if(lines > 0)
|
||||||
drawmenuv();
|
drawmenuv();
|
||||||
else
|
else
|
||||||
drawmenuh();
|
drawmenuh();
|
||||||
}
|
|
||||||
XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
|
XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
|
||||||
XFlush(dpy);
|
XFlush(dpy);
|
||||||
}
|
}
|
||||||
|
@ -193,7 +194,7 @@ drawmenuh(void) {
|
||||||
|
|
||||||
dc.x += cmdw;
|
dc.x += cmdw;
|
||||||
dc.w = spaceitem;
|
dc.w = spaceitem;
|
||||||
drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
|
drawtext(&dc, curr && curr->left ? "<" : NULL, normcol, False);
|
||||||
dc.x += dc.w;
|
dc.x += dc.w;
|
||||||
for(i = curr; i != next; i = i->right) {
|
for(i = curr; i != next; i = i->right) {
|
||||||
dc.w = MIN(textw(&dc, i->text), mw / 3);
|
dc.w = MIN(textw(&dc, i->text), mw / 3);
|
||||||
|
@ -208,16 +209,17 @@ drawmenuh(void) {
|
||||||
void
|
void
|
||||||
drawmenuv(void) {
|
drawmenuv(void) {
|
||||||
Item *i;
|
Item *i;
|
||||||
|
XWindowAttributes wa;
|
||||||
|
|
||||||
|
dc.y = topbar ? dc.h : 0;
|
||||||
dc.w = mw - dc.x;
|
dc.w = mw - dc.x;
|
||||||
dc.h = dc.font.height + 2;
|
|
||||||
dc.y = dc.h;
|
|
||||||
for(i = curr; i != next; i = i->right) {
|
for(i = curr; i != next; i = i->right) {
|
||||||
drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
|
drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
|
||||||
dc.y += dc.h;
|
dc.y += dc.h;
|
||||||
}
|
}
|
||||||
dc.h = mh - dc.y;
|
if(!XGetWindowAttributes(dpy, win, &wa))
|
||||||
drawtext(&dc, NULL, normcol, False);
|
eprint("cannot get window attributes");
|
||||||
|
XMoveResizeWindow(dpy, win, wa.x, wa.y + (topbar ? 0 : wa.height - mh), mw, mh);
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
|
@ -299,9 +301,6 @@ kpress(XKeyEvent *e) {
|
||||||
text[++i] = '\0';
|
text[++i] = '\0';
|
||||||
match(text);
|
match(text);
|
||||||
break;
|
break;
|
||||||
case XK_x:
|
|
||||||
dinput();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(ksym) {
|
switch(ksym) {
|
||||||
|
@ -360,10 +359,9 @@ kpress(XKeyEvent *e) {
|
||||||
calcoffsets();
|
calcoffsets();
|
||||||
break;
|
break;
|
||||||
case XK_Return:
|
case XK_Return:
|
||||||
if((e->state & ShiftMask) || !sel)
|
if(e->state & ShiftMask)
|
||||||
fprintf(stdout, "%s", text);
|
dinput();
|
||||||
else
|
fprintf(stdout, "%s", sel ? sel->text : text);
|
||||||
fprintf(stdout, "%s", sel->text);
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
running = False;
|
running = False;
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue