X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6418cb93022a02da40be0e50aea3d5615074fb71..f22e0c3c3f90510f1a92ab148f20b2453e338626:/src/mac/window.cpp diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 43e490d70b..cae38465c2 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -35,6 +35,10 @@ #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() {