X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5b781a6729859abc77e6ca5b1f81cbaad974a78f..98ec9dbebc5584ba1b903d314b25e8c562891483:/src/mac/frame.cpp diff --git a/src/mac/frame.cpp b/src/mac/frame.cpp index 2a4ee0b968..6bde00fc74 100644 --- a/src/mac/frame.cpp +++ b/src/mac/frame.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: frame.cpp -// Purpose: wxFrame +// Purpose: wxFrameMac // Author: AUTHOR // Modified by: // Created: ??/??/98 @@ -14,7 +14,7 @@ #endif #include "wx/frame.h" -#include "wx/mac/statusbr.h" +#include "wx/statusbr.h" #include "wx/toolbar.h" #include "wx/menuitem.h" #include "wx/menu.h" @@ -29,22 +29,25 @@ extern wxList wxModelessWindows; extern wxList wxPendingDelete; #if !USE_SHARED_LIBRARY -BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) -// EVT_SIZE(wxFrame::OnSize) - EVT_ACTIVATE(wxFrame::OnActivate) - // EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight) - EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) -// EVT_IDLE(wxFrame::OnIdle) -// EVT_CLOSE(wxFrame::OnCloseWindow) +BEGIN_EVENT_TABLE(wxFrameMac, wxFrameBase) +// EVT_SIZE(wxFrameMac::OnSize) + EVT_ACTIVATE(wxFrameMac::OnActivate) + // EVT_MENU_HIGHLIGHT_ALL(wxFrameMac::OnMenuHighlight) + EVT_SYS_COLOUR_CHANGED(wxFrameMac::OnSysColourChanged) +// EVT_IDLE(wxFrameMac::OnIdle) +// EVT_CLOSE(wxFrameMac::OnCloseWindow) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) +IMPLEMENT_DYNAMIC_CLASS(wxFrameMac, wxWindow) +#endif +#ifndef __WXUNIVERSAL__ +IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxFrameMac) #endif #if wxUSE_NATIVE_STATUSBAR -bool wxFrame::m_useNativeStatusBar = TRUE; +bool wxFrameMac::m_useNativeStatusBar = TRUE; #else -bool wxFrame::m_useNativeStatusBar = FALSE; +bool wxFrameMac::m_useNativeStatusBar = FALSE; #endif #define WX_MAC_STATUSBAR_HEIGHT 15 @@ -52,8 +55,16 @@ bool wxFrame::m_useNativeStatusBar = FALSE; // creation/destruction // ---------------------------------------------------------------------------- -void wxFrame::Init() +void wxFrameMac::Init() { + m_frameMenuBar = NULL; + +#if wxUSE_TOOLBAR + m_frameToolBar = NULL ; +#endif + m_frameStatusBar = NULL; + m_winLastFocused = NULL ; + m_iconized = FALSE; #if wxUSE_TOOLTIPS @@ -61,7 +72,7 @@ void wxFrame::Init() #endif } -wxPoint wxFrame::GetClientAreaOrigin() const +wxPoint wxFrameMac::GetClientAreaOrigin() const { // on mac we are at position -1,-1 with the control wxPoint pt(0, 0); @@ -86,7 +97,7 @@ wxPoint wxFrame::GetClientAreaOrigin() const return pt; } -bool wxFrame::Create(wxWindow *parent, +bool wxFrameMac::Create(wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint& pos, @@ -94,13 +105,6 @@ bool wxFrame::Create(wxWindow *parent, long style, const wxString& name) { - m_frameMenuBar = NULL; - -#if wxUSE_TOOLBAR - m_frameToolBar = NULL ; -#endif - m_frameStatusBar = NULL; - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); if ( id > -1 ) @@ -122,7 +126,7 @@ bool wxFrame::Create(wxWindow *parent, return TRUE; } -wxFrame::~wxFrame() +wxFrameMac::~wxFrameMac() { m_isBeingDeleted = TRUE; wxTopLevelWindows.DeleteObject(this); @@ -145,7 +149,7 @@ wxFrame::~wxFrame() } -bool wxFrame::Enable(bool enable) +bool wxFrameMac::Enable(bool enable) { if ( !wxWindow::Enable(enable) ) return FALSE; @@ -161,40 +165,40 @@ bool wxFrame::Enable(bool enable) return TRUE; } // Equivalent to maximize/restore in Windows -void wxFrame::Maximize(bool maximize) +void wxFrameMac::Maximize(bool maximize) { // TODO } -bool wxFrame::IsIconized() const +bool wxFrameMac::IsIconized() const { // TODO return FALSE; } -void wxFrame::Iconize(bool iconize) +void wxFrameMac::Iconize(bool iconize) { // TODO } // Is the frame maximized? -bool wxFrame::IsMaximized(void) const +bool wxFrameMac::IsMaximized(void) const { // TODO return FALSE; } -void wxFrame::Restore() +void wxFrameMac::Restore() { // TODO } -void wxFrame::SetIcon(const wxIcon& icon) +void wxFrameMac::SetIcon(const wxIcon& icon) { wxFrameBase::SetIcon(icon); } -wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id, +wxStatusBar *wxFrameMac::OnCreateStatusBar(int number, long style, wxWindowID id, const wxString& name) { wxStatusBar *statusBar = NULL; @@ -206,7 +210,7 @@ wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id, return statusBar; } -void wxFrame::PositionStatusBar() +void wxFrameMac::PositionStatusBar() { if (m_frameStatusBar ) { @@ -221,22 +225,21 @@ void wxFrame::PositionStatusBar() } } -void wxFrame::SetMenuBar(wxMenuBar *menuBar) +void wxFrameMac::SetMenuBar(wxMenuBar *menuBar) { if (!menuBar) { return; } - m_frameMenuBar = NULL; m_frameMenuBar = menuBar; - m_frameMenuBar->MacInstallMenuBar() ; - m_frameMenuBar->Attach(this); +// m_frameMenuBar->MacInstallMenuBar() ; + m_frameMenuBar->Attach((wxFrame *)this); } // Responds to colour changes, and passes event on to children. -void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) +void wxFrameMac::OnSysColourChanged(wxSysColourChangedEvent& event) { SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE)); Refresh(); @@ -255,14 +258,25 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) // Default activation behaviour - set the focus for the first child // subwindow found. -void wxFrame::OnActivate(wxActivateEvent& event) +void wxFrameMac::OnActivate(wxActivateEvent& event) { if ( !event.GetActive() ) { + // remember the last focused child + m_winLastFocused = FindFocus(); + while ( m_winLastFocused ) + { + if ( GetChildren().Find(m_winLastFocused) ) + break; + + m_winLastFocused = m_winLastFocused->GetParent(); + } + event.Skip(); - return; } - + else + { +/* for ( wxWindowList::Node *node = GetChildren().GetFirst(); node; node = node->GetNext() ) @@ -273,7 +287,7 @@ void wxFrame::OnActivate(wxActivateEvent& event) // restore focus wxWindow *child = node->GetData(); - if ( !child->IsTopLevel() + if ( !child->IsTopLevel() && child->AcceptsFocus() #if wxUSE_TOOLBAR && !wxDynamicCast(child, wxToolBar) #endif // wxUSE_TOOLBAR @@ -283,12 +297,20 @@ void wxFrame::OnActivate(wxActivateEvent& event) ) { child->SetFocus(); - return; + break; } } + */ + wxSetFocusToChild(this, &m_winLastFocused); + + if ( m_frameMenuBar != NULL ) + { + m_frameMenuBar->MacInstallMenuBar() ; + } + } } -void wxFrame::DoGetClientSize(int *x, int *y) const +void wxFrameMac::DoGetClientSize(int *x, int *y) const { wxWindow::DoGetClientSize( x , y ) ; @@ -306,7 +328,7 @@ void wxFrame::DoGetClientSize(int *x, int *y) const *x -= pt.x; } -void wxFrame::DoSetClientSize(int clientwidth, int clientheight) +void wxFrameMac::DoSetClientSize(int clientwidth, int clientheight) { int currentclientwidth , currentclientheight ; int currentwidth , currentheight ; @@ -326,7 +348,7 @@ void wxFrame::DoSetClientSize(int clientwidth, int clientheight) #if wxUSE_TOOLBAR -wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) +wxToolBar* wxFrameMac::CreateToolBar(long style, wxWindowID id, const wxString& name) { if ( wxFrameBase::CreateToolBar(style, id, name) ) { @@ -336,7 +358,7 @@ wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& nam return m_frameToolBar; } -void wxFrame::PositionToolBar() +void wxFrameMac::PositionToolBar() { int cw, ch;