Tk Source Code

Artifact [99c7b7f8]
Login

Artifact 99c7b7f8f5092270a67b843e39e20623d52eb8d1effe82789eba2629df25991d:

Attachment "crossing.patch" to ticket [22349fc7] added by erikleunissen 2024-03-13 17:58:12.
--- tkPointer.c.1	2024-02-18 09:46:05.000000000 +0100
+++ tkPointer.c.2	2024-02-18 13:54:03.000000000 +0100
@@ -115,7 +115,8 @@
  *	enter/leave events that are needed.
  *
  * Results:
- *	Returns 1 if enter/leave events were generated.
+ *	Returns a boolean value indicating whether the pointer crossed
+ *	a window boundary.
  *
  * Side effects:
  *	May insert events into the Tk event queue.
@@ -129,7 +130,7 @@
     int x, int y,		/* Current mouse position in root coords. */
     int state)			/* State flags. */
 {
-    int crossed = 0;		/* 1 if mouse crossed a window boundary */
+    int crossed = 0;
     ThreadSpecificData *tsdPtr =
 	    Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData));
     TkWindow *restrictWinPtr = tsdPtr->restrictWinPtr;
@@ -188,12 +189,10 @@
 			state, detail);
 		Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
 	    }
-
 	} else {
 	    TkWindow *targetPtr;
 
-	    if ((lastWinPtr == NULL)
-		|| (lastWinPtr->window == None)) {
+	    if ((lastWinPtr == NULL) || (lastWinPtr->window == None)) {
 		targetPtr = winPtr;
 	    } else {
 		targetPtr = lastWinPtr;
@@ -208,15 +207,15 @@
 		 */
 
 		InitializeEvent(&event, targetPtr, LeaveNotify, x, y, state,
-			NotifyNormal);
+			NotifyAncestor);
 
 		TkInOutEvents(&event, lastWinPtr, winPtr, LeaveNotify,
 			EnterNotify, TCL_QUEUE_TAIL);
-		crossed = 1;
 	    }
 	}
 
 	tsdPtr->lastWinPtr = winPtr;
+	crossed = 1;
     }
 
     return crossed;