[hackers] [dmenu] resizing vlist, new dinput binding || Connor Lane Smith

From: <hg_AT_suckless.org>
Date: Tue, 29 Jun 2010 23:52:19 +0000 (UTC)

changeset: 331:cd913f078e60
tag: tip
user: Connor Lane Smith <cls_AT_lubutu.com>
date: Wed Jun 30 00:52:14 2010 +0100
files: dmenu.c
description:
resizing vlist, new dinput binding

diff -r 39494f08df06 -r cd913f078e60 dmenu.c
--- a/dmenu.c Wed Jun 30 00:05:32 2010 +0100
+++ b/dmenu.c Wed Jun 30 00:52:14 2010 +0100
@@ -109,6 +109,7 @@
         next = prev = curr;
         for(i = 0; i < lines && next; i++)
                 next = next->right;
+ mh = (dc.font.height + 2) * (i + 1);
         for(i = 0; i < lines && prev && prev->left; i++)
                 prev = prev->left;
 }
@@ -166,6 +167,8 @@
         dc.w = mw;
         dc.h = mh;
         drawtext(&dc, NULL, normcol, False);
+ dc.h = dc.font.height + 2;
+ dc.y = topbar ? 0 : mh - dc.h;
         /* print prompt? */
         if(prompt) {
                 dc.w = promptw;
@@ -177,12 +180,10 @@
         if(cmdw && item && lines == 0)
                 dc.w = cmdw;
         drawtext(&dc, *text ? text : NULL, normcol, False);
- if(curr) {
- if(lines > 0)
- drawmenuv();
- else
- drawmenuh();
- }
+ if(lines > 0)
+ drawmenuv();
+ else
+ drawmenuh();
         XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
         XFlush(dpy);
 }
@@ -193,7 +194,7 @@
 
         dc.x += cmdw;
         dc.w = spaceitem;
- drawtext(&dc, curr->left ? "<" : NULL, normcol, False);
+ drawtext(&dc, curr && curr->left ? "<" : NULL, normcol, False);
         dc.x += dc.w;
         for(i = curr; i != next; i = i->right) {
                 dc.w = MIN(textw(&dc, i->text), mw / 3);
@@ -208,16 +209,17 @@
 void
 drawmenuv(void) {
         Item *i;
+ XWindowAttributes wa;
 
+ dc.y = topbar ? dc.h : 0;
         dc.w = mw - dc.x;
- dc.h = dc.font.height + 2;
- dc.y = dc.h;
         for(i = curr; i != next; i = i->right) {
                 drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False);
                 dc.y += dc.h;
         }
- dc.h = mh - dc.y;
- drawtext(&dc, NULL, normcol, False);
+ if(!XGetWindowAttributes(dpy, win, &wa))
+ eprint("cannot get window attributes");
+ XMoveResizeWindow(dpy, win, wa.x, wa.y + (topbar ? 0 : wa.height - mh), mw, mh);
 }
 
 Bool
@@ -299,9 +301,6 @@
                         text[++i] = '\0';
                         match(text);
                         break;
- case XK_x:
- dinput();
- break;
                 }
         }
         switch(ksym) {
@@ -360,10 +359,9 @@
                 calcoffsets();
                 break;
         case XK_Return:
- if((e->state & ShiftMask) || !sel)
- fprintf(stdout, "%s", text);
- else
- fprintf(stdout, "%s", sel->text);
+ if(e->state & ShiftMask)
+ dinput();
+ fprintf(stdout, "%s", sel ? sel->text : text);
                 fflush(stdout);
                 running = False;
                 return;
Received on Tue Jun 29 2010 - 23:52:19 UTC

This archive was generated by hypermail 2.2.0 : Wed Jun 30 2010 - 00:00:12 UTC