]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/window.cpp
wxFileSystem now compiles if wxUSE_HTML (required by wxHTML)
[wxWidgets.git] / src / mac / window.cpp
index 43e490d70bfd0aa34bb0bb4976da6037cc5d9da0..cae38465c2c7b09522f9a1beb88497958f450b8d 100644 (file)
 #include "wx/menuitem.h"
 #include "wx/log.h"
 
+#if wxUSE_CARET
+    #include "wx/caret.h"
+#endif // wxUSE_CARET
+
 #define wxWINDOW_HSCROLL 5998
 #define wxWINDOW_VSCROLL 5997
 #define MAC_SCROLLBAR_SIZE 16
@@ -50,7 +54,6 @@
 extern wxList wxPendingDelete;
 wxWindow* gFocusWindow = NULL ;
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxEvtHandler)
 
 BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler)
@@ -61,7 +64,6 @@ BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler)
 //  EVT_SCROLL(wxWindow::OnScroll)
 END_EVENT_TABLE()
 
-#endif
 
 
 
@@ -198,25 +200,45 @@ void wxWindow::SetFocus()
        {
                if (gFocusWindow )
                {
+                       #if wxUSE_CARET
+                           // Deal with caret
+                           if ( gFocusWindow->m_caret )
+                           {
+                                 gFocusWindow->m_caret->OnKillFocus();
+                           }
+                       #endif // wxUSE_CARET
                        wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ;
                        if ( control && control->GetMacControl() )
                        {
                                UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl()  , kControlFocusNoPart ) ;
                        }
-           wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
-           event.SetEventObject(gFocusWindow);
+               wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
+               event.SetEventObject(gFocusWindow);
                        gFocusWindow->GetEventHandler()->ProcessEvent(event) ;
                }
                gFocusWindow = this ;
                {
+                       #if wxUSE_CARET
+                   // Deal with caret
+                   if ( m_caret )
+                   {
+                       m_caret->OnSetFocus();
+                   }
+                       #endif // wxUSE_CARET
+                       // panel wants to track the window which was the last to have focus in it
+               wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
+               if ( panel )
+               {
+                       panel->SetLastFocus(this);
+               }
                        wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ;
                        if ( control && control->GetMacControl() )
                        {
                                UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl()  , kControlEditTextPart ) ;
                        }
 
-           wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId);
-           event.SetEventObject(this);
+               wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId);
+               event.SetEventObject(this);
                        GetEventHandler()->ProcessEvent(event) ;
                }
        }
@@ -1348,6 +1370,9 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time)
                if ( focus.Ok() )
                {
                        WindowRef window = GetMacRootWindow() ;
+                       bool eraseBackground = false ;
+                       if ( m_macWindowData )
+                               eraseBackground = true ;
                        if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) )
                        {
                                        UMASetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ;
@@ -1374,13 +1399,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time)
                                                        if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) )
                                                        {
                                                                // if we have any other colours in the hierarchy
-                                                       RGBBackColor( &parent->m_backgroundColour.GetPixel()) ;
-                                                       break ;
+                                                               RGBBackColor( &parent->m_backgroundColour.GetPixel()) ;
+                                                               break ;
                                                        }
                                                        // if we have the normal colours in the hierarchy but another control etc. -> use it's background
                                                        if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) ))
                                                        {
-                                                               ApplyThemeBackground                    (kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true);
+                                                               ApplyThemeBackground(kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true);
                                                                break ;
                                                        }
                                                }
@@ -1401,8 +1426,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time)
                        {
                                RGBBackColor( &m_backgroundColour.GetPixel()) ;
                        }
+                       if ( GetParent() && m_backgroundColour != GetParent()->GetBackgroundColour() )
+                               eraseBackground = true ;
                        SetClip( updatergn ) ;
-                       EraseRgn( updatergn ) ; 
+                       if ( eraseBackground )
+                       {
+                               EraseRgn( updatergn ) ; 
+                       }
                }
        }
 
@@ -1553,7 +1583,10 @@ void wxWindow::MacKeyDown( EventRecord *ev )
 }
 
 
-
+bool wxWindow::AcceptsFocus() const
+{
+    return MacCanFocus() && wxWindowBase::AcceptsFocus();
+}
 
 ControlHandle wxWindow::MacGetContainerForEmbedding() 
 {