1
0
mirror of https://github.com/gryf/wmdocklib.git synced 2025-12-19 04:20:17 +01:00

1714333 - keyboard events are not notified

added KeyPress/KeyRelease and handling of focus to filtering of events.
rewritten if/else-if into a switch/case.
This commit is contained in:
mfrasca
2007-05-07 14:15:02 +00:00
parent 9dc7d952b4
commit 153a8b629b

View File

@@ -191,24 +191,43 @@ pywmgeneral_checkForEvents(PyObject *self, PyObject *args) {
return NULL; return NULL;
while (XPending(display)) { while (XPending(display)) {
XNextEvent(display, &event); XNextEvent(display, &event);
if (event.type == Expose) { switch(event.type) {
case Expose:
RedrawWindow(); RedrawWindow();
} break;
else if (event.type == ClientMessage) {
case EnterNotify:
case LeaveNotify:
/* needed by KeyPress/release, otherwise events go to parent. */
XSetInputFocus(display, PointerRoot, RevertToParent, CurrentTime);
break;
case KeyPress:
return Py_BuildValue("{s:s,s:i,s:i}",
"type", "keypress",
"state", event.xkey.state,
"keycode", event.xkey.keycode);
case ButtonPress:
case ButtonRelease:
return Py_BuildValue("{s:s,s:i,s:i,s:i}",
"type", event.type==ButtonPress?"buttonpress":"buttonrelease",
"button", event.xbutton.button,
"x", event.xbutton.x, "y", event.xbutton.y);
case ClientMessage:
if((Atom)event.xclient.data.l[0] == deleteAtom) { if((Atom)event.xclient.data.l[0] == deleteAtom) {
XCloseDisplay(display); XCloseDisplay(display);
return Py_BuildValue("{s:s}", "type", "destroynotify"); return Py_BuildValue("{s:s}", "type", "destroynotify");
} }
} break;
else if (event.type == DestroyNotify) {
case DestroyNotify:
/* This seems to never happen, why? */ /* This seems to never happen, why? */
XCloseDisplay(display); XCloseDisplay(display);
return Py_BuildValue("{s:s}", "type", "destroynotify"); return Py_BuildValue("{s:s}", "type", "destroynotify");
}
else if (event.type == ButtonRelease) {
return Py_BuildValue("{s:s,s:i,s:i,s:i}", "type", "buttonrelease",
"button", event.xbutton.button, "x",
event.xbutton.x, "y", event.xbutton.y);
} }
} }
Py_INCREF(Py_None); Py_INCREF(Py_None);
@@ -551,8 +570,30 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
classHint.res_class = wname; classHint.res_class = wname;
XSetClassHint(display, win, &classHint); XSetClassHint(display, win, &classHint);
XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); XSelectInput(display, win,
XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); ExposureMask |
ButtonPressMask |
ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
KeyPressMask | /* Try this to get keyboard working */
PointerMotionMask |
FocusChangeMask |
LeaveWindowMask |
StructureNotifyMask |
EnterWindowMask );
XSelectInput(display, iconwin,
ExposureMask |
ButtonPressMask |
ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
KeyPressMask | /* Try this to get keyboard working */
PointerMotionMask |
FocusChangeMask |
LeaveWindowMask |
StructureNotifyMask |
EnterWindowMask );
//ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask |
//ExposureMask |
//FocusChangeMask | EnterWindowMask |
//PointerMotionMask | StructureNotifyMask);
if (XStringListToTextProperty(&wname, 1, &name) == 0) { if (XStringListToTextProperty(&wname, 1, &name) == 0) {
fprintf(stderr, "%s: can't allocate window name\n", wname); fprintf(stderr, "%s: can't allocate window name\n", wname);