From e7e324bed8afaa3c4a20cf2c9d009f9bd3968c15 Mon Sep 17 00:00:00 2001 From: Benjamin Williams Date: Fri, 10 Nov 2006 08:11:01 +0000 Subject: [PATCH] ability to create tab mdi children without activating page git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43262 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/aui/tabmdi.h | 5 +++-- src/aui/tabmdi.cpp | 32 ++++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/include/wx/aui/tabmdi.h b/include/wx/aui/tabmdi.h index 48275eba39..018d4ea8fc 100644 --- a/include/wx/aui/tabmdi.h +++ b/include/wx/aui/tabmdi.h @@ -222,6 +222,7 @@ protected: wxString m_title; wxIcon m_icon; wxIconBundle m_icon_bundle; + bool m_activate_on_create; #if wxUSE_MENUS wxMenuBar* m_pMenuBar; @@ -255,8 +256,8 @@ public: protected: void PageChanged(int old_selection, int new_selection); - void OnPageClose(wxAuiNotebookEvent& event); - void OnPageChanged(wxAuiNotebookEvent& event); + void OnPageClose(wxAuiNotebookEvent& evt); + void OnPageChanged(wxAuiNotebookEvent& evt); void OnSize(wxSizeEvent& evt); private: diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index cacd76d01a..8680825a53 100644 --- a/src/aui/tabmdi.cpp +++ b/src/aui/tabmdi.cpp @@ -380,7 +380,18 @@ wxAuiMDIChildFrame::wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent, const wxString& name) { Init(); - Create(parent, id, title, wxDefaultPosition, size, style, name); + + // There are two ways to create an tabbed mdi child fram without + // making it the active document. Either Show(false) can be called + // before Create() (as is customary on some ports with wxFrame-type + // windows), or wxMINIMIZE can be passed in the style flags. Note that + // wxAuiMDIChildFrame is not really derived from wxFrame, as wxMDIChildFrame + // is, but those are the expected symantics. No style flag is passed + // onto the panel underneath. + if (style & wxMINIMIZE) + m_activate_on_create = false; + + Create(parent, id, title, wxDefaultPosition, size, 0, name); } wxAuiMDIChildFrame::~wxAuiMDIChildFrame() @@ -401,6 +412,10 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, wxAuiMDIClientWindow* pClientWindow = parent->GetClientWindow(); wxASSERT_MSG((pClientWindow != (wxWindow*) NULL), wxT("Missing MDI client window.")); + // see comment in constructor + if (style & wxMINIMIZE) + m_activate_on_create = false; + wxSize cli_size = pClientWindow->GetClientSize(); // create the window off-screen to prevent flicker @@ -408,7 +423,9 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, id, wxPoint(cli_size.x+1, cli_size.y+1), size, - style|wxNO_BORDER, name); + wxNO_BORDER, name); + + DoShow(false); SetMDIParentFrame(parent); @@ -417,9 +434,9 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, m_title = title; - pClientWindow->AddPage(this, title, true); + pClientWindow->AddPage(this, title, m_activate_on_create); pClientWindow->Refresh(); - + return true; } @@ -604,14 +621,17 @@ wxAuiMDIParentFrame* wxAuiMDIChildFrame::GetMDIParentFrame() const void wxAuiMDIChildFrame::Init() { + m_activate_on_create = true; m_pMDIParentFrame = NULL; #if wxUSE_MENUS m_pMenuBar = NULL; #endif // wxUSE_MENUS } -bool wxAuiMDIChildFrame::Show(bool WXUNUSED(show)) +bool wxAuiMDIChildFrame::Show(bool show) { + m_activate_on_create = show; + // do nothing return true; } @@ -687,7 +707,7 @@ bool wxAuiMDIClientWindow::CreateClient(wxAuiMDIParentFrame* parent, long style) } wxColour bkcolour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); - SetBackgroundColour(bkcolour); + SetOwnBackgroundColour(bkcolour); m_mgr.GetArtProvider()->SetColour(wxAUI_ART_BACKGROUND_COLOUR, bkcolour);