]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/toplevel.cpp
security fix to wxSingleInstanceChecker: check if the lock file was really created...
[wxWidgets.git] / src / mac / carbon / toplevel.cpp
index 64d7065dd5bdb6bb565cfbb591c009423d90799a..e97fc6b17a40483a6c9922db00ffe3f4b784b8a1 100644 (file)
@@ -351,7 +351,7 @@ ControlRef wxMacFindSubControl( Point location , ControlRef superControl , Contr
             if ( IsControlVisible( sibling ) )
             {
                 Rect r ;
-                GetControlBounds( sibling , &r ) ;
+                UMAGetControlBoundsInWindowCoords( sibling , &r ) ;
                 if ( MacPtInRect( location , &r ) )
                 {
                     ControlHandle child = wxMacFindSubControl( location , sibling , outPart ) ;
@@ -359,7 +359,12 @@ ControlRef wxMacFindSubControl( Point location , ControlRef superControl , Contr
                         return child ;
                     else
                     {
-                        *outPart = TestControl( sibling , location ) ;
+                        Point testLocation = location ;
+#if TARGET_API_MAC_OSX
+                        testLocation.h -= r.left ;
+                        testLocation.v -= r.top ;
+#endif
+                        *outPart = TestControl( sibling , testLocation ) ;
                         return sibling ;
                     }
                 }
@@ -372,7 +377,7 @@ ControlRef wxMacFindSubControl( Point location , ControlRef superControl , Contr
 ControlRef wxMacFindControlUnderMouse( Point location , WindowRef window , ControlPartCode *outPart )
 {
 #if TARGET_API_MAC_OSX
-    if ( UMAGetSystemVersion() >= 1030 )
+    if ( UMAGetSystemVersion() >= 0x1030 )
         return FindControlUnderMouse( location , window , outPart ) ;
 #endif
     ControlRef rootControl = NULL ;
@@ -394,14 +399,10 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev
     short windowPart = ::FindWindow(screenMouseLocation, &window);
 
     wxWindow* currentMouseWindow = NULL ;
+
     if ( window )
     {
-        // calculate window relative coordinates
-        GrafPtr     port;
-        ::GetPort( &port ) ;
-        ::SetPort( UMAGetWindowPort(window ) ) ;
-        ::GlobalToLocal( &windowMouseLocation ) ;
-        ::SetPort( port ) ;
+        QDGlobalToLocalPoint( UMAGetWindowPort(window ) ,  &windowMouseLocation ) ;
 
         if ( wxTheApp->s_captureWindow && wxTheApp->s_captureWindow->MacGetTopLevelWindowRef() == (WXWindow) window && windowPart == inContent )
         {
@@ -508,7 +509,11 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev
                 wxMacFindControlUnderMouse( windowMouseLocation , window , &dummyPart ) ) )
             {
                 EventModifiers modifiers = cEvent.GetParameter<EventModifiers>(kEventParamKeyModifiers, typeUInt32) ;
-                HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , windowMouseLocation ,
+                Point clickLocation = windowMouseLocation ;
+#if TARGET_API_MAC_OSX
+                currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ;
+#endif
+                HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation ,
                     modifiers , (ControlActionUPP ) -1 ) ;
                 result = noErr ;
             }
@@ -788,25 +793,6 @@ void wxTopLevelWindowMac::Maximize(bool maximize)
     wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ;
     wxMacWindowClipper clip (this);
     ZoomWindow( (WindowRef)m_macWindow , maximize ? inZoomOut : inZoomIn , false ) ;
-/*
-    Rect r ;
-    GDHandle device = NULL ;
-    verify_noerr( GetWindowGreatestAreaDevice( (WindowRef) m_macWindow , kWindowContentRgn ,
-        &device , NULL ) ;
-    verify_noerr( GetAvailableWindowPositioningBounds( GetMainDevice() , &r ) ) ;
-
-    Rect tempRect ;
-    GrafPtr port ;
-    GetPort( &port ) ;
-    Point pt = { 0, 0 } ;
-    SetPortWindowPort((WindowRef)m_macWindow) ;
-    LocalToGlobal( &pt ) ;
-    SetPort( port ) ;
-
-    GetWindowPortBounds((WindowRef)m_macWindow, &tempRect ) ;
-    SetSize( pt.h , pt.v , tempRect.right-tempRect.left ,
-        tempRect.bottom-tempRect.top, wxSIZE_USE_EXISTING);
-*/
 }
 
 bool wxTopLevelWindowMac::IsMaximized() const
@@ -986,14 +972,14 @@ void  wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title,
 
     wxAssociateWinWithMacWindow( (WindowRef) m_macWindow , this ) ;
     UMASetWTitle( (WindowRef) m_macWindow , title , m_font.GetEncoding() ) ;
-    if ( m_macUsesCompositing )
-    {
-        ::GetRootControl( (WindowRef)m_macWindow, (ControlRef*)&m_macControl ) ;
-    }
-    else
-    {
-        ::CreateRootControl( (WindowRef)m_macWindow , (ControlRef*)&m_macControl ) ;
-    }
+#if TARGET_API_MAC_OSX
+    // There is a bug in 10.2.X for ::GetRootControl returning the window view instead of 
+    // the content view, so we have to retrieve it explicitely
+    HIViewFindByID( HIViewGetRoot( (WindowRef) m_macWindow ) , kHIViewWindowContentID , 
+        (ControlRef*)&m_macControl ) ;
+#else
+    ::CreateRootControl( (WindowRef)m_macWindow , (ControlRef*)&m_macControl ) ;
+#endif
     // the root control level handleer
     MacInstallEventHandler() ;
 
@@ -1222,8 +1208,7 @@ static void wxShapedMacWindowGetPos(WindowRef window, Rect* inRect)
 {
     GetWindowPortBounds(window, inRect);
     Point pt = {inRect->left, inRect->top};
-    SetPort((GrafPtr) GetWindowPort(window));
-    LocalToGlobal(&pt);
+    QDLocalToGlobalPoint( GetWindowPort(window) , &pt ) ;
     inRect->top = pt.v;
     inRect->left = pt.h;
     inRect->bottom += pt.v;