MCPcopy Create free account
hub / github.com/SimHacker/micropolis / TkPointerEvent

Function TkPointerEvent

micropolis-activity/src/tk/tkgrab.c:488–719  ·  view source on GitHub ↗
(eventPtr, winPtr)

Source from the content-addressed store, hash-verified

486 * Side effects:
487 * Grab state information may be updated.
488 *
489 *----------------------------------------------------------------------
490 */
491
492int
493TkPointerEvent(eventPtr, winPtr)
494 register XEvent *eventPtr; /* Pointer to the event. */
495 TkWindow *winPtr; /* Tk's information for window
496 * where event was reported. */
497{
498 register TkWindow *winPtr2;
499 TkDisplay *dispPtr = winPtr->dispPtr;
500 int outsideGrabTree = 0;
501 int originalFlags;
502 int appGrabbed = 0; /* Non-zero means event is being
503 * reported to an application that is
504 * affected by the grab. */
505 static unsigned int state[] = {
506 Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask
507 };
508
509 /*
510 * Don't do any filtering on events generated by the event-sharing code.
511 */
512
513 if (eventPtr == tkShareEventPtr) {
514 return 1;
515 }
516
517 /*
518 * If a grab is in effect, see if the event is being reported to
519 * a window in the grab tree. Also see if the event is being reported
520 * to an application that is affected by the grab.
521 */
522
523 if (dispPtr->grabWinPtr != NULL) {
524 if ((winPtr->mainPtr == dispPtr->grabWinPtr->mainPtr)
525 || (dispPtr->grabFlags & GRAB_GLOBAL)) {
526 appGrabbed = 1;
527 }
528 for (winPtr2 = winPtr; winPtr2 != dispPtr->grabWinPtr;
529 winPtr2 = winPtr2->parentPtr) {
530 if (winPtr2 == NULL) {
531 outsideGrabTree = 1;
532 break;
533 }
534 }
535 }
536
537 originalFlags = dispPtr->grabFlags;
538 dispPtr->grabFlags &= ~GRAB_BUTTON_RELEASE;
539 if ((eventPtr->type == EnterNotify) || (eventPtr->type == LeaveNotify)) {
540 if ((eventPtr->type == EnterNotify)
541 && (eventPtr->xcrossing.detail != NotifyVirtual)
542 && (eventPtr->xcrossing.detail != NotifyNonlinearVirtual)) {
543 if ((dispPtr->grabWinPtr == NULL)
544 || (dispPtr->grabWinPtr->mainPtr == winPtr->mainPtr)) {
545 dispPtr->ungrabWinPtr = winPtr;

Callers 2

Tk_HandleEventFunction · 0.85
Tk_HandleEventFunction · 0.85

Calls 2

ChangeEventWindowFunction · 0.85
MovePointerFunction · 0.85

Tested by

no test coverage detected