Skip to content
Snippets Groups Projects
Commit a8bdc28c authored by Niels Möller's avatar Niels Möller
Browse files

* Xlib.pmod: Event handling changed. New event types EnterNotify

and LeaveNotify.

Rev: lib/modules/Protocols.pmod/X.pmod/Xlib.pmod:1.13
parent 3030585e
No related branches found
No related tags found
No related merge requests found
...@@ -236,16 +236,18 @@ class Display ...@@ -236,16 +236,18 @@ class Display
{ {
int wid; int wid;
object w; object w;
array a;
// werror(sprintf("Event: %s\n", event->type)); werror(sprintf("Event: %s\n", event->type));
if (event->wid && (w = lookup_id(event->wid)) if (event->wid && (w = lookup_id(event->wid))
&& ((w->event_callbacks["_"+event->type]) && (a = (w->event_callbacks[event->type])))
||(w->event_callbacks[event->type]))) {
foreach(a, function f)
{ {
if(w->event_callbacks["_"+event->type]) if (!(event = f(event, this_object())))
w->event_callbacks["_"+event->type](event,this_object()); return;
if(w->event_callbacks[event->type]) }
w->event_callbacks[event->type](event,this_object()); // FIXME: Should event be forwarded to parent or not?
} }
else else
if (misc_event_handler) if (misc_event_handler)
...@@ -412,6 +414,7 @@ class Display ...@@ -412,6 +414,7 @@ class Display
break; break;
} }
#endif #endif
werror(sprintf("Xlib: Received error %O\n", m));
return ({ ACTION_ERROR, m }); return ({ ACTION_ERROR, m });
} }
else if (type == "Reply") else if (type == "Reply")
...@@ -437,23 +440,39 @@ class Display ...@@ -437,23 +440,39 @@ class Display
case "KeyRelease": case "KeyRelease":
case "ButtonPress": case "ButtonPress":
case "ButtonRelease": case "ButtonRelease":
case "MotionNotify": { case "MotionNotify":
{
int root, child; int root, child;
sscanf(msg, "%*c%c%2c%4c" "%4c%4c%4c" sscanf(msg, "%*c%c%2c%4c" "%4c%4c%4c"
"%2c%2c%2c%2c" "%2c%c", "%2c%2c%2c%2c" "%2c%c",
event->detail, event->sequenceNumber, event->time, event->detail, event->sequenceNumber, event->time,
root, event->wid, child, root, event->wid, child,
event->rootX, event->rootY, event->eventx, event->rootX, event->rootY, event->eventX,
event->eventY, event->state, event->sameScreen); event->eventY, event->state, event->sameScreen);
event->root = lookup_id(root); event->root = lookup_id(root);
event->event = lookup_id(event->wid); event->event = lookup_id(event->wid);
event->child = child && lookup_id(child); event->child = child && lookup_id(child);
break; break;
} }
#if 0
case "EnterNotify": case "EnterNotify":
case "LeaveNotify": 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 "FocusIn":
case "FocusOut": case "FocusOut":
...; ...;
...@@ -461,7 +480,8 @@ class Display ...@@ -461,7 +480,8 @@ class Display
case "KeymapNotify": case "KeymapNotify":
event->map = msg[1..]; event->map = msg[1..];
break; break;
case "Expose": { case "Expose":
{
sscanf(msg, "%*4c%4c" "%2c%2c%2c%2c" "%2c", sscanf(msg, "%*4c%4c" "%2c%2c%2c%2c" "%2c",
event->wid, event->wid,
event->x, event->y, event->width, event->height, event->x, event->y, event->width, event->height,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment