static status eventTileAdjuster(TileAdjuster adj, EventObj ev) { Int offset; if ( postEventWindow((PceWindow) adj, ev) ) succeed; if ( isDownEvent(ev) && (offset = getEventOffsetTileAdjuster(adj, ev)) ) { send(adj, NAME_focus, adj, DEFAULT, adj->cursor, getButtonEvent(ev), EAV); assign(adj, down_offset, offset); succeed; } else if ( notNil(adj->offset) ) { if ( isDragEvent(ev) ) { DisplayObj d = getDisplayEvent(ev); if ( d && ws_events_queued_display(d) ) succeed; forwardTileAdjuster(adj, ev); } else if ( isUpEvent(ev) ) { forwardTileAdjuster(adj, ev); assign(adj, down_offset, NIL); } succeed; } fail; }
Any ws_event_in_subwindow(EventObj ev, Any root) { DisplayObj d = getDisplayEvent(ev); DisplayWsXref r = d->ws_ref; Window src_w = XtWindow(widgetWindow(ev->window)); int dx, dy; Window child; int root_is_display; if ( isDefault(root) ) root = d; if ( (root_is_display = instanceOfObject(root, ClassDisplay)) ) { XWindowAttributes atts; int depth = MAX_DECORATION_NESTING; if ( d != root ) { errorPce(ev, NAME_notSameDisplay, root); fail; } XGetWindowAttributes(r->display_xref, XtWindow(r->shell_xref), &atts); XTranslateCoordinates(r->display_xref, src_w, atts.root, valInt(ev->x), valInt(ev->y), &dx, &dy, &child); #if 0 DEBUG(NAME_pointer, /* TEST STUFF */ ({ Window rr, cr; int rx, ry, wx, wy, mask; if ( XQueryPointer(r->display_xref, atts.root, &rr, &cr, &rx, &ry, &wx, &wy, &mask) ) { Cprintf("XTranslateCoordinates --> %d\nXQueryPointer --> %d\n", child, cr); } }));