Xinqi Bao's Git
projects
/
dmenu.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Makefile: bikesheddingly replace ${} with $()
[dmenu.git]
/
dmenu.c
diff --git
a/dmenu.c
b/dmenu.c
index
5e9c367
..
314256f
100644
(file)
--- a/
dmenu.c
+++ b/
dmenu.c
@@
-308,13
+308,21
@@
keypress(XKeyEvent *ev)
{
char buf[32];
int len;
{
char buf[32];
int len;
- KeySym ksym
= NoSymbol
;
+ KeySym ksym;
Status status;
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
Status status;
len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status);
- if (status == XBufferOverflow)
+ switch (status) {
+ default: /* XLookupNone, XBufferOverflow */
return;
return;
- if (ev->state & ControlMask)
+ case XLookupChars:
+ goto insert;
+ case XLookupKeySym:
+ case XLookupBoth:
+ break;
+ }
+
+ if (ev->state & ControlMask) {
switch(ksym) {
case XK_a: ksym = XK_Home; break;
case XK_b: ksym = XK_Left; break;
switch(ksym) {
case XK_a: ksym = XK_Home; break;
case XK_b: ksym = XK_Left; break;
@@
-352,12
+360,10
@@
keypress(XKeyEvent *ev)
return;
case XK_Left:
movewordedge(-1);
return;
case XK_Left:
movewordedge(-1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_Right:
movewordedge(+1);
case XK_Right:
movewordedge(+1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_Return:
case XK_KP_Enter:
break;
case XK_Return:
case XK_KP_Enter:
break;
@@
-367,16
+373,14
@@
keypress(XKeyEvent *ev)
default:
return;
}
default:
return;
}
- else if (ev->state & Mod1Mask)
+ } else if (ev->state & Mod1Mask) {
switch(ksym) {
case XK_b:
movewordedge(-1);
switch(ksym) {
case XK_b:
movewordedge(-1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_f:
movewordedge(+1);
case XK_f:
movewordedge(+1);
- ksym = NoSymbol;
- break;
+ goto draw;
case XK_g: ksym = XK_Home; break;
case XK_G: ksym = XK_End; break;
case XK_h: ksym = XK_Up; break;
case XK_g: ksym = XK_Home; break;
case XK_G: ksym = XK_End; break;
case XK_h: ksym = XK_Up; break;
@@
-386,13
+390,14
@@
keypress(XKeyEvent *ev)
default:
return;
}
default:
return;
}
+ }
+
switch(ksym) {
default:
switch(ksym) {
default:
+insert:
if (!iscntrl(*buf))
insert(buf, len);
break;
if (!iscntrl(*buf))
insert(buf, len);
break;
- case NoSymbol:
- break;
case XK_Delete:
if (text[cursor] == '\0')
return;
case XK_Delete:
if (text[cursor] == '\0')
return;
@@
-489,6
+494,8
@@
keypress(XKeyEvent *ev)
match();
break;
}
match();
break;
}
+
+draw:
drawmenu();
}
drawmenu();
}
@@
-545,7
+552,7
@@
run(void)
XEvent ev;
while (!XNextEvent(dpy, &ev)) {
XEvent ev;
while (!XNextEvent(dpy, &ev)) {
- if (XFilterEvent(&ev,
win
))
+ if (XFilterEvent(&ev,
None
))
continue;
switch(ev.type) {
case Expose:
continue;
switch(ev.type) {
case Expose:
@@
-657,6
+664,7
@@
setup(void)
XNClientWindow, win, XNFocusWindow, win, NULL);
XMapRaised(dpy, win);
XNClientWindow, win, XNFocusWindow, win, NULL);
XMapRaised(dpy, win);
+ XSetInputFocus(dpy, win, RevertToParent, CurrentTime);
if (embed) {
XSelectInput(dpy, parentwin, FocusChangeMask);
if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
if (embed) {
XSelectInput(dpy, parentwin, FocusChangeMask);
if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
@@
-722,6
+730,8
@@
main(int argc, char *argv[])
if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
fputs("warning: no locale support\n", stderr);
if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
fputs("warning: no locale support\n", stderr);
+ if (!XSetLocaleModifiers(""))
+ fputs("warning: no locale modifiers support\n", stderr);
if (!(dpy = XOpenDisplay(NULL)))
die("cannot open display");
screen = DefaultScreen(dpy);
if (!(dpy = XOpenDisplay(NULL)))
die("cannot open display");
screen = DefaultScreen(dpy);