[CONTACT]

[ABOUT]

[POLICY]

git clone dmenu dmenu Log gph

Found at: gopher.r-36.net:70/scm/dmenu/commit/7afd296c40a2e8af9477add1c3d02a7c4b444747.gph

tresizing vlist, new dinput binding - dmenu - Dmenu fork with xft fonts.

git clone git://r-36.net/dmenu

Log

Files

Refs

README

LICENSE

---

commit 7afd296c40a2e8af9477add1c3d02a7c4b444747

parent cc8b3b999ba0153029b1e5a97ebbd59563f9e7bb

Author: Connor Lane Smith

Date:   Wed, 30 Jun 2010 00:52:14 +0100
resizing vlist, new dinput binding
Diffstat:
  dmenu.c                             |      34 +++++++++++++++----------------
1 file changed, 16 insertions(+), 18 deletions(-)
---

diff --git a/dmenu.c b/dmenu.c

t@@ -109,6 +109,7 @@ calcoffsetsv(void) {
         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;
 }
t@@ -166,6 +167,8 @@ drawmenu(void) {
         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;
t@@ -177,12 +180,10 @@ drawmenu(void) {
         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);
 }
t@@ -193,7 +194,7 @@ drawmenuh(void) {
         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);
t@@ -208,16 +209,17 @@ drawmenuh(void) {
 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
t@@ -299,9 +301,6 @@ kpress(XKeyEvent *e) {
                         text[++i] = '\0';
                         match(text);
                         break;
-                case XK_x:
-                        dinput();
-                        break;
                 }
         }
         switch(ksym) {
t@@ -360,10 +359,9 @@ kpress(XKeyEvent *e) {
                 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;
.


AD: