diff options
| -rw-r--r-- | dinput.c | 28 | ||||
| -rw-r--r-- | dmenu.c | 30 |
2 files changed, 20 insertions, 38 deletions
| @@ -1,7 +1,6 @@ | |||
| 1 | /* See LICENSE file for copyright and license details. */ | 1 | /* See LICENSE file for copyright and license details. */ |
| 2 | #include <ctype.h> | 2 | #include <ctype.h> |
| 3 | #include <locale.h> | 3 | #include <locale.h> |
| 4 | #include <stdarg.h> | ||
| 5 | #include <stdio.h> | 4 | #include <stdio.h> |
| 6 | #include <stdlib.h> | 5 | #include <stdlib.h> |
| 7 | #include <string.h> | 6 | #include <string.h> |
| @@ -15,7 +14,6 @@ | |||
| 15 | #include <draw.h> | 14 | #include <draw.h> |
| 16 | 15 | ||
| 17 | /* macros */ | 16 | /* macros */ |
| 18 | #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) | ||
| 19 | #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) | 17 | #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) |
| 20 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) | 18 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
| 21 | #define MAX(a, b) ((a) > (b) ? (a) : (b)) | 19 | #define MAX(a, b) ((a) > (b) ? (a) : (b)) |
| @@ -46,7 +44,7 @@ static unsigned long selcol[ColLast]; | |||
| 46 | static Bool running = True; | 44 | static Bool running = True; |
| 47 | static DC dc; | 45 | static DC dc; |
| 48 | static Display *dpy; | 46 | static Display *dpy; |
| 49 | static Window win, parent; | 47 | static Window win, root; |
| 50 | 48 | ||
| 51 | void | 49 | void |
| 52 | cleanup(void) { | 50 | cleanup(void) { |
| @@ -91,7 +89,7 @@ grabkeyboard(void) { | |||
| 91 | unsigned int len; | 89 | unsigned int len; |
| 92 | 90 | ||
| 93 | for(len = 1000; len; len--) { | 91 | for(len = 1000; len; len--) { |
| 94 | if(XGrabKeyboard(dpy, parent, True, GrabModeAsync, GrabModeAsync, CurrentTime) | 92 | if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime) |
| 95 | == GrabSuccess) | 93 | == GrabSuccess) |
| 96 | break; | 94 | break; |
| 97 | usleep(1000); | 95 | usleep(1000); |
| @@ -257,7 +255,6 @@ setup(Bool topbar) { | |||
| 257 | #endif | 255 | #endif |
| 258 | XModifierKeymap *modmap; | 256 | XModifierKeymap *modmap; |
| 259 | XSetWindowAttributes wa; | 257 | XSetWindowAttributes wa; |
| 260 | XWindowAttributes pwa; | ||
| 261 | 258 | ||
| 262 | /* init modifier map */ | 259 | /* init modifier map */ |
| 263 | modmap = XGetModifierMapping(dpy); | 260 | modmap = XGetModifierMapping(dpy); |
| @@ -284,13 +281,13 @@ setup(Bool topbar) { | |||
| 284 | /* input window geometry */ | 281 | /* input window geometry */ |
| 285 | mh = dc.font.height + 2; | 282 | mh = dc.font.height + 2; |
| 286 | #if XINERAMA | 283 | #if XINERAMA |
| 287 | if(parent == RootWindow(dpy, screen) && XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) { | 284 | if(XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) { |
| 288 | i = 0; | 285 | i = 0; |
| 289 | if(n > 1) { | 286 | if(n > 1) { |
| 290 | int di; | 287 | int di; |
| 291 | unsigned int dui; | 288 | unsigned int dui; |
| 292 | Window dummy; | 289 | Window dummy; |
| 293 | if(XQueryPointer(dpy, parent, &dummy, &dummy, &x, &y, &di, &di, &dui)) | 290 | if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui)) |
| 294 | for(i = 0; i < n; i++) | 291 | for(i = 0; i < n; i++) |
| 295 | if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) | 292 | if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) |
| 296 | break; | 293 | break; |
| @@ -303,13 +300,12 @@ setup(Bool topbar) { | |||
| 303 | else | 300 | else |
| 304 | #endif | 301 | #endif |
| 305 | { | 302 | { |
| 306 | XGetWindowAttributes(dpy, parent, &pwa); | ||
| 307 | x = 0; | 303 | x = 0; |
| 308 | y = topbar ? 0 : pwa.height - mh; | 304 | y = topbar ? 0 : DisplayHeight(dpy, screen) - mh; |
| 309 | mw = pwa.width; | 305 | mw = DisplayWidth(dpy, screen); |
| 310 | } | 306 | } |
| 311 | 307 | ||
| 312 | win = XCreateWindow(dpy, parent, x, y, mw, mh, 0, | 308 | win = XCreateWindow(dpy, root, x, y, mw, mh, 0, |
| 313 | DefaultDepth(dpy, screen), CopyFromParent, | 309 | DefaultDepth(dpy, screen), CopyFromParent, |
| 314 | DefaultVisual(dpy, screen), | 310 | DefaultVisual(dpy, screen), |
| 315 | CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | 311 | CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); |
| @@ -327,15 +323,12 @@ main(int argc, char *argv[]) { | |||
| 327 | Bool topbar = True; | 323 | Bool topbar = True; |
| 328 | 324 | ||
| 329 | /* command line args */ | 325 | /* command line args */ |
| 330 | progname = argv[0]; | 326 | progname = "dinput"; |
| 331 | for(i = 1; i < argc; i++) | 327 | for(i = 1; i < argc; i++) |
| 332 | if(!strcmp(argv[i], "-i")) | 328 | if(!strcmp(argv[i], "-i")) |
| 333 | ; /* ignore flag */ | 329 | ; /* ignore flag */ |
| 334 | else if(!strcmp(argv[i], "-b")) | 330 | else if(!strcmp(argv[i], "-b")) |
| 335 | topbar = False; | 331 | topbar = False; |
| 336 | else if(!strcmp(argv[i], "-e")) { | ||
| 337 | if(++i < argc) parent = atoi(argv[i]); | ||
| 338 | } | ||
| 339 | else if(!strcmp(argv[i], "-l")) | 332 | else if(!strcmp(argv[i], "-l")) |
| 340 | i++; /* ignore flag */ | 333 | i++; /* ignore flag */ |
| 341 | else if(!strcmp(argv[i], "-fn")) { | 334 | else if(!strcmp(argv[i], "-fn")) { |
| @@ -363,7 +356,7 @@ main(int argc, char *argv[]) { | |||
| 363 | else if(!*text) | 356 | else if(!*text) |
| 364 | strncpy(text, argv[i], sizeof text); | 357 | strncpy(text, argv[i], sizeof text); |
| 365 | else { | 358 | else { |
| 366 | fputs("usage: dinput [-b] [-e <xid>] [-fn <font>] [-nb <color>] [-nf <color>]\n" | 359 | fputs("usage: dinput [-b] [-fn <font>] [-nb <color>] [-nf <color>]\n" |
| 367 | " [-p <prompt>] [-sb <color>] [-sf <color>] [-v] [<text>]\n", stderr); | 360 | " [-p <prompt>] [-sb <color>] [-sf <color>] [-v] [<text>]\n", stderr); |
| 368 | exit(EXIT_FAILURE); | 361 | exit(EXIT_FAILURE); |
| 369 | } | 362 | } |
| @@ -372,8 +365,7 @@ main(int argc, char *argv[]) { | |||
| 372 | if(!(dpy = XOpenDisplay(NULL))) | 365 | if(!(dpy = XOpenDisplay(NULL))) |
| 373 | eprint("cannot open display\n"); | 366 | eprint("cannot open display\n"); |
| 374 | screen = DefaultScreen(dpy); | 367 | screen = DefaultScreen(dpy); |
| 375 | if(!parent) | 368 | root = RootWindow(dpy, screen); |
| 376 | parent = RootWindow(dpy, screen); | ||
| 377 | 369 | ||
| 378 | running = grabkeyboard(); | 370 | running = grabkeyboard(); |
| 379 | setup(topbar); | 371 | setup(topbar); |
| @@ -1,11 +1,9 @@ | |||
| 1 | /* See LICENSE file for copyright and license details. */ | 1 | /* See LICENSE file for copyright and license details. */ |
| 2 | #include <ctype.h> | 2 | #include <ctype.h> |
| 3 | #include <locale.h> | 3 | #include <locale.h> |
| 4 | #include <stdarg.h> | ||
| 5 | #include <stdio.h> | 4 | #include <stdio.h> |
| 6 | #include <stdlib.h> | 5 | #include <stdlib.h> |
| 7 | #include <string.h> | 6 | #include <string.h> |
| 8 | #include <strings.h> | ||
| 9 | #include <unistd.h> | 7 | #include <unistd.h> |
| 10 | #include <X11/keysym.h> | 8 | #include <X11/keysym.h> |
| 11 | #include <X11/Xlib.h> | 9 | #include <X11/Xlib.h> |
| @@ -16,7 +14,6 @@ | |||
| 16 | #include <draw.h> | 14 | #include <draw.h> |
| 17 | 15 | ||
| 18 | /* macros */ | 16 | /* macros */ |
| 19 | #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) | ||
| 20 | #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) | 17 | #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) |
| 21 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) | 18 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
| 22 | #define MAX(a, b) ((a) > (b) ? (a) : (b)) | 19 | #define MAX(a, b) ((a) > (b) ? (a) : (b)) |
| @@ -72,7 +69,7 @@ static Item *sel = NULL; | |||
| 72 | static Item *next = NULL; | 69 | static Item *next = NULL; |
| 73 | static Item *prev = NULL; | 70 | static Item *prev = NULL; |
| 74 | static Item *curr = NULL; | 71 | static Item *curr = NULL; |
| 75 | static Window win, parent; | 72 | static Window win, root; |
| 76 | static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; | 73 | static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; |
| 77 | static char *(*fstrstr)(const char *, const char *) = strstr; | 74 | static char *(*fstrstr)(const char *, const char *) = strstr; |
| 78 | static void (*calcoffsets)(void) = calcoffsetsh; | 75 | static void (*calcoffsets)(void) = calcoffsetsh; |
| @@ -227,7 +224,7 @@ grabkeyboard(void) { | |||
| 227 | unsigned int len; | 224 | unsigned int len; |
| 228 | 225 | ||
| 229 | for(len = 1000; len; len--) { | 226 | for(len = 1000; len; len--) { |
| 230 | if(XGrabKeyboard(dpy, parent, True, GrabModeAsync, GrabModeAsync, CurrentTime) | 227 | if(XGrabKeyboard(dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime) |
| 231 | == GrabSuccess) | 228 | == GrabSuccess) |
| 232 | break; | 229 | break; |
| 233 | usleep(1000); | 230 | usleep(1000); |
| @@ -482,7 +479,6 @@ setup(void) { | |||
| 482 | #endif | 479 | #endif |
| 483 | XModifierKeymap *modmap; | 480 | XModifierKeymap *modmap; |
| 484 | XSetWindowAttributes wa; | 481 | XSetWindowAttributes wa; |
| 485 | XWindowAttributes pwa; | ||
| 486 | 482 | ||
| 487 | /* init modifier map */ | 483 | /* init modifier map */ |
| 488 | modmap = XGetModifierMapping(dpy); | 484 | modmap = XGetModifierMapping(dpy); |
| @@ -509,13 +505,13 @@ setup(void) { | |||
| 509 | /* menu window geometry */ | 505 | /* menu window geometry */ |
| 510 | mh = (dc.font.height + 2) * (lines + 1); | 506 | mh = (dc.font.height + 2) * (lines + 1); |
| 511 | #if XINERAMA | 507 | #if XINERAMA |
| 512 | if(parent == RootWindow(dpy, screen) && XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) { | 508 | if(XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) { |
| 513 | i = 0; | 509 | i = 0; |
| 514 | if(n > 1) { | 510 | if(n > 1) { |
| 515 | int di; | 511 | int di; |
| 516 | unsigned int dui; | 512 | unsigned int dui; |
| 517 | Window dummy; | 513 | Window dummy; |
| 518 | if(XQueryPointer(dpy, parent, &dummy, &dummy, &x, &y, &di, &di, &dui)) | 514 | if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui)) |
| 519 | for(i = 0; i < n; i++) | 515 | for(i = 0; i < n; i++) |
| 520 | if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) | 516 | if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) |
| 521 | break; | 517 | break; |
| @@ -528,14 +524,12 @@ setup(void) { | |||
| 528 | else | 524 | else |
| 529 | #endif | 525 | #endif |
| 530 | { | 526 | { |
| 531 | if(!XGetWindowAttributes(dpy, parent, &pwa)) | ||
| 532 | eprint("cannot get window attributes"); | ||
| 533 | x = 0; | 527 | x = 0; |
| 534 | y = topbar ? 0 : pwa.height - mh; | 528 | y = topbar ? 0 : mh - DisplayHeight(dpy, screen); |
| 535 | mw = pwa.width; | 529 | mw = DisplayWidth(dpy, screen); |
| 536 | } | 530 | } |
| 537 | 531 | ||
| 538 | win = XCreateWindow(dpy, parent, x, y, mw, mh, 0, | 532 | win = XCreateWindow(dpy, root, x, y, mw, mh, 0, |
| 539 | DefaultDepth(dpy, screen), CopyFromParent, | 533 | DefaultDepth(dpy, screen), CopyFromParent, |
| 540 | DefaultVisual(dpy, screen), | 534 | DefaultVisual(dpy, screen), |
| 541 | CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | 535 | CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); |
| @@ -555,7 +549,7 @@ main(int argc, char *argv[]) { | |||
| 555 | unsigned int i; | 549 | unsigned int i; |
| 556 | 550 | ||
| 557 | /* command line args */ | 551 | /* command line args */ |
| 558 | progname = argv[0]; | 552 | progname = "dmenu"; |
| 559 | for(i = 1; i < argc; i++) | 553 | for(i = 1; i < argc; i++) |
| 560 | if(!strcmp(argv[i], "-i")) { | 554 | if(!strcmp(argv[i], "-i")) { |
| 561 | fstrncmp = strncasecmp; | 555 | fstrncmp = strncasecmp; |
| @@ -563,9 +557,6 @@ main(int argc, char *argv[]) { | |||
| 563 | } | 557 | } |
| 564 | else if(!strcmp(argv[i], "-b")) | 558 | else if(!strcmp(argv[i], "-b")) |
| 565 | topbar = False; | 559 | topbar = False; |
| 566 | else if(!strcmp(argv[i], "-e")) { | ||
| 567 | if(++i < argc) parent = atoi(argv[i]); | ||
| 568 | } | ||
| 569 | else if(!strcmp(argv[i], "-l")) { | 560 | else if(!strcmp(argv[i], "-l")) { |
| 570 | if(++i < argc) lines = atoi(argv[i]); | 561 | if(++i < argc) lines = atoi(argv[i]); |
| 571 | if(lines > 0) | 562 | if(lines > 0) |
| @@ -594,7 +585,7 @@ main(int argc, char *argv[]) { | |||
| 594 | exit(EXIT_SUCCESS); | 585 | exit(EXIT_SUCCESS); |
| 595 | } | 586 | } |
| 596 | else { | 587 | else { |
| 597 | fputs("usage: dmenu [-i] [-b] [-e <xid>] [-l <lines>] [-fn <font>] [-nb <color>]\n" | 588 | fputs("usage: dmenu [-i] [-b] [-l <lines>] [-fn <font>] [-nb <color>]\n" |
| 598 | " [-nf <color>] [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n", stderr); | 589 | " [-nf <color>] [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n", stderr); |
| 599 | exit(EXIT_FAILURE); | 590 | exit(EXIT_FAILURE); |
| 600 | } | 591 | } |
| @@ -603,8 +594,7 @@ main(int argc, char *argv[]) { | |||
| 603 | if(!(dpy = XOpenDisplay(NULL))) | 594 | if(!(dpy = XOpenDisplay(NULL))) |
| 604 | eprint("cannot open display\n"); | 595 | eprint("cannot open display\n"); |
| 605 | screen = DefaultScreen(dpy); | 596 | screen = DefaultScreen(dpy); |
| 606 | if(!parent) | 597 | root = RootWindow(dpy, screen); |
| 607 | parent = RootWindow(dpy, screen); | ||
| 608 | if(!(argp = malloc(sizeof *argp * (argc+2)))) | 598 | if(!(argp = malloc(sizeof *argp * (argc+2)))) |
| 609 | eprint("cannot malloc %u bytes\n", sizeof *argp * (argc+2)); | 599 | eprint("cannot malloc %u bytes\n", sizeof *argp * (argc+2)); |
| 610 | memcpy(argp + 2, argv + 1, sizeof *argp * argc); | 600 | memcpy(argp + 2, argv + 1, sizeof *argp * argc); |
