applied Connor's patch, thanks!
37236f88
1 file(s) · +33 −44
| 52 | 52 | static void calcoffsetsv(void); |
|
| 53 | 53 | static char *cistrstr(const char *s, const char *sub); |
|
| 54 | 54 | static void cleanup(void); |
|
| 55 | + | static void drawmenu(void); |
|
| 55 | 56 | static void drawmenuh(void); |
|
| 56 | 57 | static void drawmenuv(void); |
|
| 57 | 58 | static void drawtext(const char *text, unsigned long col[ColLast]); |
|
| 95 | 96 | static Bool vlist = False; |
|
| 96 | 97 | static unsigned int lines = 5; |
|
| 97 | 98 | static void (*calcoffsets)(void) = calcoffsetsh; |
|
| 98 | - | static void (*drawmenu)(void) = drawmenuh; |
|
| 99 | 99 | ||
| 100 | 100 | void |
|
| 101 | 101 | appenditem(Item *i, Item **list, Item **last) { |
|
| 200 | 200 | ||
| 201 | 201 | void |
|
| 202 | 202 | drawcursor(void) { |
|
| 203 | - | XRectangle r = { dc.x, dc.y + 2, 1, dc.h - 4 }; |
|
| 203 | + | XRectangle r = { dc.x, dc.y + 2, 1, dc.font.height - 2 }; |
|
| 204 | 204 | ||
| 205 | 205 | r.x += textnw(text, cursor) + dc.font.height / 2; |
|
| 206 | 206 | ||
| 209 | 209 | } |
|
| 210 | 210 | ||
| 211 | 211 | void |
|
| 212 | - | drawmenuh(void) { |
|
| 213 | - | Item *i; |
|
| 214 | - | ||
| 212 | + | drawmenu(void) { |
|
| 215 | 213 | dc.x = 0; |
|
| 216 | 214 | dc.y = 0; |
|
| 217 | 215 | dc.w = mw; |
|
| 231 | 229 | drawcursor(); |
|
| 232 | 230 | dc.x += cmdw; |
|
| 233 | 231 | if(curr) { |
|
| 234 | - | dc.w = spaceitem; |
|
| 235 | - | drawtext((curr && curr->left) ? "<" : NULL, dc.norm); |
|
| 236 | - | dc.x += dc.w; |
|
| 237 | - | /* determine maximum items */ |
|
| 238 | - | for(i = curr; i != next; i=i->right) { |
|
| 239 | - | dc.w = textw(i->text); |
|
| 240 | - | if(dc.w > mw / 3) |
|
| 241 | - | dc.w = mw / 3; |
|
| 242 | - | drawtext(i->text, (sel == i) ? dc.sel : dc.norm); |
|
| 243 | - | dc.x += dc.w; |
|
| 244 | - | } |
|
| 245 | - | dc.x = mw - spaceitem; |
|
| 246 | - | dc.w = spaceitem; |
|
| 247 | - | drawtext(next ? ">" : NULL, dc.norm); |
|
| 232 | + | if(vlist) |
|
| 233 | + | drawmenuv(); |
|
| 234 | + | else |
|
| 235 | + | drawmenuh(); |
|
| 248 | 236 | } |
|
| 249 | 237 | XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); |
|
| 250 | 238 | XFlush(dpy); |
|
| 251 | 239 | } |
|
| 252 | 240 | ||
| 253 | 241 | void |
|
| 242 | + | drawmenuh(void) { |
|
| 243 | + | Item *i; |
|
| 244 | + | ||
| 245 | + | dc.w = spaceitem; |
|
| 246 | + | drawtext((curr && curr->left) ? "<" : NULL, dc.norm); |
|
| 247 | + | dc.x += dc.w; |
|
| 248 | + | /* determine maximum items */ |
|
| 249 | + | for(i = curr; i != next; i=i->right) { |
|
| 250 | + | dc.w = textw(i->text); |
|
| 251 | + | if(dc.w > mw / 3) |
|
| 252 | + | dc.w = mw / 3; |
|
| 253 | + | drawtext(i->text, (sel == i) ? dc.sel : dc.norm); |
|
| 254 | + | dc.x += dc.w; |
|
| 255 | + | } |
|
| 256 | + | dc.x = mw - spaceitem; |
|
| 257 | + | dc.w = spaceitem; |
|
| 258 | + | drawtext(next ? ">" : NULL, dc.norm); |
|
| 259 | + | } |
|
| 260 | + | ||
| 261 | + | void |
|
| 254 | 262 | drawmenuv(void) { |
|
| 255 | 263 | Item *i; |
|
| 256 | 264 | ||
| 257 | 265 | dc.x = 0; |
|
| 258 | - | dc.y = 0; |
|
| 259 | 266 | dc.w = mw; |
|
| 260 | - | dc.h = mh; |
|
| 261 | - | drawtext(NULL, dc.norm); |
|
| 262 | - | /* print prompt? */ |
|
| 263 | - | if(promptw) { |
|
| 264 | - | dc.w = promptw; |
|
| 265 | - | drawtext(prompt, dc.sel); |
|
| 266 | - | } |
|
| 267 | - | dc.x += promptw; |
|
| 268 | - | dc.w = mw - promptw; |
|
| 269 | - | /* print command */ |
|
| 270 | - | drawtext(text[0] ? text : NULL, dc.norm); |
|
| 271 | - | if(curr) { |
|
| 272 | - | dc.x = 0; |
|
| 273 | - | dc.w = mw; |
|
| 267 | + | dc.y += dc.font.height + 2; |
|
| 268 | + | /* determine maximum items */ |
|
| 269 | + | for(i = curr; i != next; i=i->right) { |
|
| 270 | + | drawtext(i->text, (sel == i) ? dc.sel : dc.norm); |
|
| 274 | 271 | dc.y += dc.font.height + 2; |
|
| 275 | - | /* determine maximum items */ |
|
| 276 | - | for(i = curr; i != next; i=i->right) { |
|
| 277 | - | drawtext(i->text, (sel == i) ? dc.sel : dc.norm); |
|
| 278 | - | dc.y += dc.font.height + 2; |
|
| 279 | - | } |
|
| 280 | - | drawtext(NULL, dc.norm); |
|
| 281 | 272 | } |
|
| 282 | - | XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); |
|
| 283 | - | XFlush(dpy); |
|
| 273 | + | drawtext(NULL, dc.norm); |
|
| 284 | 274 | } |
|
| 285 | 275 | ||
| 286 | 276 | void |
|
| 786 | 776 | else if(!strcmp(argv[i], "-l")) { |
|
| 787 | 777 | vlist = True; |
|
| 788 | 778 | calcoffsets = calcoffsetsv; |
|
| 789 | - | drawmenu = drawmenuv; |
|
| 790 | - | if(++i < argc) lines += atoi(argv[i]); |
|
| 779 | + | if(++i < argc) lines = atoi(argv[i]); |
|
| 791 | 780 | } |
|
| 792 | 781 | else if(!strcmp(argv[i], "-fn")) { |
|
| 793 | 782 | if(++i < argc) font = argv[i]; |
|