diff options
author | culler <culler> | 2019-01-05 17:00:15 (GMT) |
---|---|---|
committer | culler <culler> | 2019-01-05 17:00:15 (GMT) |
commit | 0ff9be54ab18ebef3aecc29024da14d34940d45a (patch) | |
tree | 33013dabf38933ec1bfb03825024fa2610ad7b65 /macosx/tkMacOSXMouseEvent.c | |
parent | cdcd80aec2e8f345a9a491e82129ab8ae0f864ea (diff) | |
download | tk-0ff9be54ab18ebef3aecc29024da14d34940d45a.zip tk-0ff9be54ab18ebef3aecc29024da14d34940d45a.tar.gz tk-0ff9be54ab18ebef3aecc29024da14d34940d45a.tar.bz2 |
Implement local grabs for Aqua.
Diffstat (limited to 'macosx/tkMacOSXMouseEvent.c')
-rw-r--r-- | macosx/tkMacOSXMouseEvent.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 828d874..f02df1d 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -106,23 +106,32 @@ enum { } } - Window window = TkMacOSXGetXWindow(eventWindow); - Tk_Window tkwin = window ? Tk_IdToWindow(TkGetDisplayList()->display, - window) : NULL; - if (!tkwin) { + TkWindow *winPtr = TkMacOSXGetTkWindow(eventWindow); + Tk_Window tkwin = (Tk_Window) winPtr; + + if (tkwin) { + TkWindow *grabWinPtr = winPtr->dispPtr->grabWinPtr; + if (grabWinPtr && + grabWinPtr != winPtr && + !winPtr->dispPtr->grabFlags && /* this means the grab is local. */ + grabWinPtr->mainPtr == winPtr->mainPtr) { + return theEvent; + } + } else { tkwin = TkMacOSXGetCapture(); } if (!tkwin) { + TkMacOSXDbgMsg("tkwin == NULL"); return theEvent; /* Give up. No window for this event. */ - } - - TkWindow *winPtr = (TkWindow *) tkwin; + } else { + winPtr = (TkWindow *)tkwin; + } + local.x -= winPtr->wmInfoPtr->xInParent; local.y -= winPtr->wmInfoPtr->yInParent; int win_x, win_y; - tkwin = Tk_TopCoordsToWindow(tkwin, local.x, local.y, - &win_x, &win_y); + tkwin = Tk_TopCoordsToWindow(tkwin, local.x, local.y, &win_x, &win_y); unsigned int state = 0; NSInteger button = [theEvent buttonNumber]; |