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
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)
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;
}
void wxAuiManager::Update()
{
+ m_hover_button = NULL;
+
wxSizer* sizer;
int i, pane_count = m_panes.GetCount();
}
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);
+ }
}
}
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
- if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER)
- return;
-
if (GetFlags() & wxAUI_MGR_ALLOW_ACTIVE_PANE)
{
// set the caption as active
Repaint();
}
+ if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER)
+ return;
+
m_action = actionClickCaption;
m_action_part = part;
m_action_start = wxPoint(event.m_x, event.m_y);
// 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();
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();
}
}