From b9a85ee091f4fa2eb63fc6d4e29bba4ff0db5e15 Mon Sep 17 00:00:00 2001
From: wolfsuit <wolfsuit@noemail.net>
Date: Thu, 10 Mar 2005 07:32:25 +0000
Subject: Fix for bug 1160025.

FossilOrigin-Name: 12c51cbb01ba9806d158c1ce1e96807d6cc14212
---
 ChangeLog                   |  6 ++++++
 macosx/tkMacOSXMouseEvent.c | 36 ++++++++++++++++++++++++------------
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 435fa6a..a6655ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-10  Jim Ingham  <jingham@apple.com>
+
+	* macosx/tkMacOSXMouseEvent.c (TkMacOSXProcessMouseEvent): In
+	the inDrag section, set the GrafPort to the drag window's GrafPort
+	before doing LocalToGlobal. [Bug 1160025]
+	
 2005-03-08  Jeff Hobbs  <jeffh@ActiveState.com>
 
 	* win/tkWinWm.c (WinSetIcon): fix GCLP_ICONSM -> GCLP_HICONSM.
diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c
index 168ef73..69a322b 100644
--- a/macosx/tkMacOSXMouseEvent.c
+++ b/macosx/tkMacOSXMouseEvent.c
@@ -334,19 +334,31 @@ TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr)
 
     switch (medPtr->windowPart) {
         case inDrag:
-            DragWindow(medPtr->whichWin, where, NULL);
-            where2.h = where2.v = 0;
-            LocalToGlobal(&where2);
-            if (EqualPt(where, where2)) {
-                return false;
+            {
+                CGrafPtr saveWorld;
+                GDHandle saveDevice;
+                GWorldPtr dstPort;
+                
+                GetGWorld(&saveWorld, &saveDevice);
+                dstPort = TkMacOSXGetDrawablePort(Tk_WindowId(tkwin));
+                SetGWorld(dstPort, NULL);
+                
+                DragWindow(medPtr->whichWin, where, NULL);
+                where2.h = where2.v = 0;
+                LocalToGlobal(&where2);
+                if (EqualPt(where, where2)) {
+                    SetGWorld (saveWorld, saveDevice);
+                    return false;
+                }
+                TkMacOSXWindowOffset(medPtr->whichWin, &xOffset, &yOffset);
+                where2.h -= xOffset;
+                where2.v -= yOffset;
+                TkGenWMConfigureEvent(tkwin, where2.h, where2.v,
+                        -1, -1, TK_LOCATION_CHANGED);
+                SetGWorld(saveWorld, saveDevice);
+                return true;
+                break;
             }
-            TkMacOSXWindowOffset(medPtr->whichWin, &xOffset, &yOffset);
-            where2.h -= xOffset;
-            where2.v -= yOffset;
-            TkGenWMConfigureEvent(tkwin, where2.h, where2.v,
-                    -1, -1, TK_LOCATION_CHANGED);
-            return true;
-            break;
         case inContent:
             return TkGenerateButtonEvent(where.h, where.v, 
                     window, medPtr->state);
-- 
cgit v0.12