From a8bdc28cac00b6cd971b20033794964f064963f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Sun, 11 Jan 1998 09:04:26 +0100 Subject: [PATCH] * Xlib.pmod: Event handling changed. New event types EnterNotify and LeaveNotify. Rev: lib/modules/Protocols.pmod/X.pmod/Xlib.pmod:1.13 --- lib/modules/Protocols.pmod/X.pmod/Xlib.pmod | 82 +++++++++++++-------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod index 5c7d567b8a..adfc1e5469 100644 --- a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod +++ b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod @@ -236,16 +236,18 @@ class Display { int wid; object w; - -// werror(sprintf("Event: %s\n", event->type)); + array a; + + werror(sprintf("Event: %s\n", event->type)); if (event->wid && (w = lookup_id(event->wid)) - && ((w->event_callbacks["_"+event->type]) - ||(w->event_callbacks[event->type]))) + && (a = (w->event_callbacks[event->type]))) { - if(w->event_callbacks["_"+event->type]) - w->event_callbacks["_"+event->type](event,this_object()); - if(w->event_callbacks[event->type]) - w->event_callbacks[event->type](event,this_object()); + foreach(a, function f) + { + if (!(event = f(event, this_object()))) + return; + } + // FIXME: Should event be forwarded to parent or not? } else if (misc_event_handler) @@ -412,6 +414,7 @@ class Display break; } #endif + werror(sprintf("Xlib: Received error %O\n", m)); return ({ ACTION_ERROR, m }); } else if (type == "Reply") @@ -437,23 +440,39 @@ class Display case "KeyRelease": case "ButtonPress": case "ButtonRelease": - case "MotionNotify": { - int root, child; - sscanf(msg, "%*c%c%2c%4c" "%4c%4c%4c" - "%2c%2c%2c%2c" "%2c%c", - event->detail, event->sequenceNumber, event->time, - root, event->wid, child, - event->rootX, event->rootY, event->eventx, - event->eventY, event->state, event->sameScreen); - event->root = lookup_id(root); - event->event = lookup_id(event->wid); - event->child = child && lookup_id(child); - break; - } -#if 0 + case "MotionNotify": + { + int root, child; + sscanf(msg, "%*c%c%2c%4c" "%4c%4c%4c" + "%2c%2c%2c%2c" "%2c%c", + event->detail, event->sequenceNumber, event->time, + root, event->wid, child, + event->rootX, event->rootY, event->eventX, + event->eventY, event->state, event->sameScreen); + event->root = lookup_id(root); + event->event = lookup_id(event->wid); + event->child = child && lookup_id(child); + break; + } case "EnterNotify": case "LeaveNotify": - ...; + { + int root, child, flags; + sscanf(msg, "%*4c%4c%4c%4c%4c" "%2c%2c%2c%2c" "%2c%c%c", + event->time, root, event->wid, child, + event->rootX, event->rootY, event->eventX, event->eventY, + event->state, event->mode, flags); + event->root = lookup_id(root); + event->event = lookup_id(event->wid); + event->child = child && lookup_id(child); + event->flags = (< >); + if (flags & 1) + event->flags->Focus = 1; + if (flags & 2) + event->flags->SameScreen = 1; + break; + } +#if 0 case "FocusIn": case "FocusOut": ...; @@ -461,14 +480,15 @@ class Display case "KeymapNotify": event->map = msg[1..]; break; - case "Expose": { - sscanf(msg, "%*4c%4c" "%2c%2c%2c%2c" "%2c", - event->wid, - event->x, event->y, event->width, event->height, - event->count); - event->window = lookup_id(event->wid); - break; - } + case "Expose": + { + sscanf(msg, "%*4c%4c" "%2c%2c%2c%2c" "%2c", + event->wid, + event->x, event->y, event->width, event->height, + event->count); + event->window = lookup_id(event->wid); + break; + } #if 0 case "GraphicsExpose": ...; -- GitLab