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:
@@ -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) {
|
||||||
RedrawWindow();
|
|
||||||
}
|
case Expose:
|
||||||
else if (event.type == ClientMessage) {
|
RedrawWindow();
|
||||||
if((Atom)event.xclient.data.l[0] == deleteAtom) {
|
break;
|
||||||
XCloseDisplay(display);
|
|
||||||
return Py_BuildValue("{s:s}", "type", "destroynotify");
|
case EnterNotify:
|
||||||
}
|
case LeaveNotify:
|
||||||
}
|
/* needed by KeyPress/release, otherwise events go to parent. */
|
||||||
else if (event.type == DestroyNotify) {
|
XSetInputFocus(display, PointerRoot, RevertToParent, CurrentTime);
|
||||||
/* This seems to never happen, why? */
|
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) {
|
||||||
XCloseDisplay(display);
|
XCloseDisplay(display);
|
||||||
return Py_BuildValue("{s:s}", "type", "destroynotify");
|
return Py_BuildValue("{s:s}", "type", "destroynotify");
|
||||||
}
|
}
|
||||||
else if (event.type == ButtonRelease) {
|
break;
|
||||||
return Py_BuildValue("{s:s,s:i,s:i,s:i}", "type", "buttonrelease",
|
|
||||||
"button", event.xbutton.button, "x",
|
case DestroyNotify:
|
||||||
event.xbutton.x, "y", event.xbutton.y);
|
/* This seems to never happen, why? */
|
||||||
|
XCloseDisplay(display);
|
||||||
|
return Py_BuildValue("{s:s}", "type", "destroynotify");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user