[menu] Grab the keyboard rather than setting the keyboard focus.

This commit is contained in:
Kris Maglione 2008-10-14 19:08:13 -04:00
parent 98f66f5aaf
commit 692dcce623
3 changed files with 16 additions and 1 deletions

View File

@ -223,7 +223,7 @@ menu_show(void) {
mapwin(barwin);
raisewin(barwin);
menu_draw();
setfocus(barwin, RevertToPointerRoot);
grabkeyboard(barwin);
}
static void

View File

@ -970,6 +970,19 @@ ungrabpointer(void) {
XUngrabPointer(display, CurrentTime);
}
int
grabkeyboard(Window *w) {
return XGrabKeyboard(display, w->w, false /* owner events */,
GrabModeAsync, GrabModeAsync, CurrentTime
) == GrabSuccess;
}
void
ungrabkeyboard(void) {
XUngrabKeyboard(display, CurrentTime);
}
/* Insanity */
void
sethints(Window *w) {

View File

@ -212,6 +212,7 @@ char* getprop_string(Window*, char*);
int getprop_textlist(Window *w, char *name, char **ret[]);
ulong getprop_ulong(Window*, char*, char*, ulong, ulong**, ulong);
ulong getproperty(Window*, char *prop, char *type, Atom *actual, ulong offset, uchar **ret, ulong length);
int grabkeyboard(Window*);
int grabpointer(Window*, Window *confine, Cursor, int mask);
void initdisplay(void);
KeyCode keycode(char*);
@ -242,6 +243,7 @@ uint textwidth(Font*, char*);
uint textwidth_l(Font*, char*, uint len);
int traperrors(bool);
Point translate(Window*, Window*, Point);
void ungrabkeyboard(void);
void ungrabpointer(void);
int unmapwin(Window*);
void warppointer(Point);