X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a4c721ee38d6e7656765a5188f89fe59c854058e..49fc3b9c03107c3f3b79432ddb1c4bd58c8a9fc3:/src/aui/framemanager.cpp diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index 664c02947d..7c552d9243 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -1093,8 +1093,7 @@ bool wxAuiManager::DetachPane(wxWindow* window) return false; } -// ClosePane() destroys or hides the pane depending on its -// flags +// ClosePane() destroys or hides the pane depending on its flags void wxAuiManager::ClosePane(wxAuiPaneInfo& pane_info) { // if we were maximized, restore @@ -1447,12 +1446,11 @@ bool wxAuiManager::LoadPerspective(const wxString& layout, bool update) if (!p.IsOk()) { // the pane window couldn't be found - // in the existing layout - return false; + // in the existing layout -- skip it + continue; } p.SafeSet(pane); - } if (update) @@ -2090,6 +2088,8 @@ wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes, dock.fixed = false; if (!pane.IsToolbar()) dock.toolbar = false; + if (pane.HasFlag(wxAuiPaneInfo::optionDockFixed)) + dock.fixed = true; if (pane.state & wxAuiPaneInfo::actionPane) action_pane_marked = true; } @@ -2293,6 +2293,8 @@ void wxAuiManager::GetDockSizeConstraint(double* width_pct, double* height_pct) void wxAuiManager::Update() { + m_hover_button = NULL; + wxSizer* sizer; int i, pane_count = m_panes.GetCount(); @@ -3529,7 +3531,15 @@ void wxAuiManager::OnFloatingPaneClosed(wxWindow* wnd, wxCloseEvent& evt) } else { - ClosePane(pane); + // close the pane, but check that it + // still exists in our pane array first + // (the event handler above might have removed it) + + wxAuiPaneInfo& check = GetPane(wnd); + if (check.IsOk()) + { + ClosePane(pane); + } } } @@ -3792,8 +3802,9 @@ void wxAuiManager::OnLeftDown(wxMouseEvent& event) if (part->type == wxAuiDockUIPart::typeDockSizer || part->type == wxAuiDockUIPart::typePaneSizer) { - if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER) - return; + // Removing this restriction so that a centre pane can be resized + //if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER) + // return; // a dock may not be resized if it has a single // pane which is not resizable @@ -4309,7 +4320,8 @@ void wxAuiManager::OnChildFocus(wxChildFocusEvent& event) // active panes are allowed by the owner) if (GetFlags() & wxAUI_MGR_ALLOW_ACTIVE_PANE) { - if (GetPane(event.GetWindow()).IsOk()) + wxAuiPaneInfo& pane = GetPane(event.GetWindow()); + if (pane.IsOk() && (pane.state & wxAuiPaneInfo::optionActive) == 0) { SetActivePane(m_panes, event.GetWindow()); m_frame->Refresh(); @@ -4338,7 +4350,16 @@ void wxAuiManager::OnPaneButton(wxAuiManagerEvent& evt) if (!e.GetVeto()) { - ClosePane(pane); + // close the pane, but check that it + // still exists in our pane array first + // (the event handler above might have removed it) + + wxAuiPaneInfo& check = GetPane(pane.window); + if (check.IsOk()) + { + ClosePane(pane); + } + Update(); } }