WMMaskedEvents* WMMaskEvents(WMView* view) { W_MaskedEvents *mask; unsigned int i; Bool changed = False; mask = wmalloc(sizeof(W_MaskedEvents)); mask->view = view; mask->procs = WMCreateArray(0); mask->data = WMCreateArray(0); for (i = 0; i < WMGetArrayItemCount(W_GetViewEventHandlers(view)); i++) { W_EventHandler *h = (W_EventHandler*) WMGetFromArray(W_GetViewEventHandlers(view), i); if (h->eventMask == (ButtonPressMask|ButtonReleaseMask| EnterWindowMask|LeaveWindowMask|ButtonMotionMask)) { WMAddToArray(mask->procs, h->proc); WMAddToArray(mask->data, h->clientData); /* we change only the first handler to our one, because they seem to be processed upside-down and we want the dnd-handler to be processed first. */ if (changed == False) { h->proc = W_MaskedEventHandler; h->clientData = (void*) mask; changed = True; } else { WMDeleteEventHandler(view, h->eventMask, h->proc, h->clientData); } } } return mask; }
void WMDeleteDragHandler(WMView * view, WMEventProc * dragEventProc, void *clientData) { WMDeleteEventHandler(view, ButtonPressMask | ButtonReleaseMask | Button1MotionMask, dragEventProc, clientData); }