]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/nonownedwnd.cpp
Add wxDataViewModel::ChangeValue() and use it in wxDVC implementation.
[wxWidgets.git] / src / osx / carbon / nonownedwnd.cpp
index 7f0cbbdc9b720066ec75e1293b1dcf38be53827d..cab04631f5a7522d74224c8eb6f75c0f0b0d3302 100644 (file)
@@ -99,12 +99,18 @@ bool wxNonOwnedWindowCarbonImpl::SetBackgroundColour(const wxColour& col )
     if ( col == wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDocumentWindowBackground)) )
     {
         SetThemeWindowBackground( (WindowRef) m_macWindow,  kThemeBrushDocumentWindowBackground, false ) ;
-        SetBackgroundStyle(wxBG_STYLE_SYSTEM);
+        m_wxPeer->SetBackgroundStyle(wxBG_STYLE_SYSTEM);
+        // call directly if object is not yet completely constructed
+        if ( m_wxPeer->GetNonOwnedPeer() == NULL )
+            SetBackgroundStyle(wxBG_STYLE_SYSTEM);
     }
     else if ( col == wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive)) )
     {
         SetThemeWindowBackground( (WindowRef) m_macWindow,  kThemeBrushDialogBackgroundActive, false ) ;
-        SetBackgroundStyle(wxBG_STYLE_SYSTEM);
+        m_wxPeer->SetBackgroundStyle(wxBG_STYLE_SYSTEM);
+        // call directly if object is not yet completely constructed
+        if ( m_wxPeer->GetNonOwnedPeer() == NULL )
+            SetBackgroundStyle(wxBG_STYLE_SYSTEM);
     }
     return true;
 }
@@ -126,7 +132,7 @@ void wxNonOwnedWindowCarbonImpl::SetExtraStyle( long exStyle )
 }
 
 bool wxNonOwnedWindowCarbonImpl::SetBackgroundStyle(wxBackgroundStyle style)
-{            
+{
     if ( style == wxBG_STYLE_TRANSPARENT )
     {
         OSStatus err = HIWindowChangeFeatures( m_macWindow, 0, kWindowIsOpaque );
@@ -226,7 +232,7 @@ void wxNonOwnedWindowCarbonImpl::MacSetUnifiedAppearance( bool set )
     // for wx.
     // TODO: Determine if we need this on Leopard as well. (should be harmless either way,
     // though)
-    // since when creating the peering is not yet completely set-up we call both setters 
+    // since when creating the peering is not yet completely set-up we call both setters
     // explicitely
     m_wxPeer->SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) ) ;
     SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) ) ;
@@ -611,9 +617,9 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler),
                     // instead of its children (wxToolBarTools)
                     ControlRef parent ;
                     GetSuperControl(control, &parent );
-                    wxWindow *wxParent = (wxWindow*) wxFindWindowFromWXWidget((WXWidget) parent ) ;
-                    if ( wxParent && wxParent->IsKindOf( CLASSINFO( wxToolBar ) ) )
-                        currentMouseWindow = wxParent ;
+                    wxWindow *wxparent = (wxWindow*) wxFindWindowFromWXWidget((WXWidget) parent ) ;
+                    if ( wxparent && wxparent->IsKindOf( CLASSINFO( wxToolBar ) ) )
+                        currentMouseWindow = wxparent ;
 #endif
                 }
 #endif
@@ -674,7 +680,7 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler),
             ::HiliteMenu(0);
             result = noErr ;
         }
-    } 
+    }
     else if ( window && windowPart == inProxyIcon )
     {
         // special case proxy icon bar, as we are having a low-level runloop we must do it ourselves
@@ -749,6 +755,16 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler),
     }
     else // currentMouseWindow == NULL
     {
+        if (toplevelWindow && !control)
+        {
+           extern wxCursor gGlobalCursor;
+           if (!gGlobalCursor.IsOk())
+           {
+                // update cursor when over toolbar and titlebar etc.
+                wxSTANDARD_CURSOR->MacInstall() ;
+           }
+        }
+
         // don't mess with controls we don't know about
         // for some reason returning eventNotHandledErr does not lead to the correct behaviour
         // so we try sending them the correct control directly
@@ -837,19 +853,24 @@ wxNonOwnedWindowEventHandler(EventHandlerCallRef WXUNUSED(handler),
             if ( (attributes & kWindowBoundsChangeSizeChanged) || (attributes & kWindowBoundsChangeOriginChanged) )
             {
                 // all (Mac) rects are in content area coordinates, all wxRects in structure coordinates
-                int left , top , right , bottom ;
-
-                toplevelWindow->GetNonOwnedPeer()->GetContentArea(left, top, right, bottom);
-
+                int left , top , width , height ;
+                // structure width
+                int swidth, sheight;
+
+                toplevelWindow->GetNonOwnedPeer()->GetContentArea(left, top, width, height);
+                toplevelWindow->GetNonOwnedPeer()->GetSize(swidth, sheight);
+                int deltawidth = swidth - width;
+                int deltaheight = sheight - height;
                 wxRect adjustR(
                     newRect.left - left,
                     newRect.top - top,
-                    newRect.right - newRect.left + left + right,
-                    newRect.bottom - newRect.top + top + bottom ) ;
+                    newRect.right - newRect.left + deltawidth,
+                    newRect.bottom - newRect.top + deltaheight ) ;
 
                 toplevelWindow->HandleResizing( cEvent.GetTicks(), &adjustR );
-                
-                const Rect adjustedRect = { adjustR.y + top  , adjustR.x + left , adjustR.y + adjustR.height - bottom , adjustR.x + adjustR.width - right } ;
+
+                const Rect adjustedRect = { adjustR.y + top  , adjustR.x + left , adjustR.y + top + adjustR.height - deltaheight ,
+                    adjustR.x + left + adjustR.width - deltawidth } ;
                 if ( !EqualRect( &newRect , &adjustedRect ) )
                     cEvent.SetParameter<Rect>( kEventParamCurrentBounds , &adjustedRect ) ;
             }
@@ -1115,7 +1136,7 @@ wxNonOwnedWindowCarbonImpl::~wxNonOwnedWindowCarbonImpl()
 }
 
 void wxNonOwnedWindowCarbonImpl::Destroy()
-{    
+{
     if ( m_macEventHandler )
     {
         ::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
@@ -1165,8 +1186,8 @@ void wxNonOwnedWindowCarbonImpl::Create(
     wxWindow* parent,
     const wxPoint& pos,
     const wxSize& size,
-    long style, long extraStyle, 
-    const wxString& name )
+    long style, long extraStyle,
+    const wxString& WXUNUSED(name) )
 {
 
     OSStatus err = noErr ;
@@ -1398,6 +1419,11 @@ bool wxNonOwnedWindowCarbonImpl::ShowWithEffect(bool show,
                 transition = kWindowZoomTransitionEffect;
             break;
 
+        case wxSHOW_EFFECT_NONE:
+            // wxNonOwnedWindow is supposed to call Show() itself in this case
+            wxFAIL_MSG( "ShowWithEffect() shouldn't be called" );
+            return false;
+
         case wxSHOW_EFFECT_MAX:
             wxFAIL_MSG( "invalid effect flag" );
             return false;
@@ -1462,27 +1488,27 @@ bool wxNonOwnedWindowCarbonImpl::ShowWithEffect(bool show,
     return true;
 }
 
-void wxNonOwnedWindowCarbonImpl::SetTitle( const wxString& title, wxFontEncoding encoding ) 
+void wxNonOwnedWindowCarbonImpl::SetTitle( const wxString& title, wxFontEncoding encoding )
 {
     SetWindowTitleWithCFString( m_macWindow , wxCFStringRef( title , encoding ) ) ;
 }
-    
+
 bool wxNonOwnedWindowCarbonImpl::IsMaximized() const
 {
     return IsWindowInStandardState( m_macWindow , NULL , NULL ) ;
 }
-    
+
 bool wxNonOwnedWindowCarbonImpl::IsIconized() const
 {
     return IsWindowCollapsed((WindowRef)GetWXWindow() ) ;
 }
-    
+
 void wxNonOwnedWindowCarbonImpl::Iconize( bool iconize )
 {
     if ( IsWindowCollapsable( m_macWindow ) )
         CollapseWindow( m_macWindow , iconize ) ;
 }
-    
+
 void wxNonOwnedWindowCarbonImpl::Maximize(bool maximize)
 {
     Point idealSize = { 0 , 0 } ;
@@ -1503,12 +1529,12 @@ void wxNonOwnedWindowCarbonImpl::Maximize(bool maximize)
     }
     ZoomWindowIdeal( (WindowRef)GetWXWindow() , maximize ? inZoomOut : inZoomIn , &idealSize ) ;
 }
-    
+
 bool wxNonOwnedWindowCarbonImpl::IsFullScreen() const
 {
     return m_macFullScreenData != NULL ;
 }
-    
+
 bool wxNonOwnedWindowCarbonImpl::ShowFullScreen(bool show, long style)
 {
     if ( show )
@@ -1530,7 +1556,7 @@ bool wxNonOwnedWindowCarbonImpl::ShowFullScreen(bool show, long style)
 
         wxRect client = wxGetClientDisplayRect() ;
 
-        int left , top , right , bottom ;
+        int left, top, width, height ;
         int x, y, w, h ;
 
         x = client.x ;
@@ -1538,19 +1564,23 @@ bool wxNonOwnedWindowCarbonImpl::ShowFullScreen(bool show, long style)
         w = client.width ;
         h = client.height ;
 
-        GetContentArea( left , top , right , bottom ) ;
+        GetContentArea( left, top, width, height ) ;
+        int outerwidth, outerheight;
+        GetSize( outerwidth, outerheight );
 
         if ( style & wxFULLSCREEN_NOCAPTION )
         {
             y -= top ;
             h += top ;
+            // avoid adding the caption twice to the height
+            outerheight -= top;
         }
 
         if ( style & wxFULLSCREEN_NOBORDER )
         {
             x -= left ;
-            w += left + right ;
-            h += bottom ;
+            w += outerwidth - width;
+            h += outerheight - height;
         }
 
         if ( style & wxFULLSCREEN_NOTOOLBAR )
@@ -1621,9 +1651,9 @@ void wxNonOwnedWindowCarbonImpl::ScreenToWindow( int *x, int *y )
     HIViewFindByID( HIViewGetRoot( m_macWindow ), kHIViewWindowContentID , &contentView) ;
     HIPointConvert( &p, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceView, contentView );
     if ( x )
-        *x = p.x;
+        *x = (int)p.x;
     if ( y )
-        *y = p.y;
+        *y = (int)p.y;
 }
 
 void wxNonOwnedWindowCarbonImpl::WindowToScreen( int *x, int *y )
@@ -1634,9 +1664,9 @@ void wxNonOwnedWindowCarbonImpl::WindowToScreen( int *x, int *y )
     HIViewFindByID( HIViewGetRoot( m_macWindow ), kHIViewWindowContentID , &contentView) ;
     HIPointConvert( &p, kHICoordSpaceView, contentView, kHICoordSpace72DPIGlobal, NULL );
     if ( x )
-        *x = p.x;
+        *x = (int)p.x;
     if ( y )
-        *y = p.y;
+        *y = (int)p.y;
 }
 
 wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size,