Avoid inconsistent states with Workspace::m_dropPreview* members

This commit is contained in:
David Capello 2015-04-04 14:53:27 -03:00
parent ecc2f06492
commit 7ba1138b40
2 changed files with 15 additions and 9 deletions

View File

@ -760,7 +760,7 @@ void Tabs::stopDrag(DropTabResult result)
m_removedTab.reset();
destroyFloatingTab();
//ASSERT(tab); // TODO check this state
ASSERT(tab.get());
if (tab)
removeTab(tab->view, false);
break;

View File

@ -159,23 +159,29 @@ void Workspace::setDropViewPreview(const gfx::Point& pos,
void Workspace::removeDropViewPreview()
{
if (m_dropPreviewPanel)
if (m_dropPreviewPanel) {
m_dropPreviewPanel->removeDropViewPreview();
m_dropPreviewPanel = nullptr;
}
if (m_dropPreviewTabs)
if (m_dropPreviewTabs) {
m_dropPreviewTabs->removeDropViewPreview();
m_dropPreviewTabs = nullptr;
}
}
bool Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* view)
{
if (m_dropPreviewPanel)
return m_dropPreviewPanel->dropViewAt(pos, getViewPanel(view), view);
else if (m_dropPreviewTabs) {
WorkspacePanel* dropPanel = m_dropPreviewTabs->panel();
WorkspaceTabs* tabs = getTabsAt(pos);
WorkspacePanel* panel = getPanelAt(pos);
if (panel)
return panel->dropViewAt(pos, getViewPanel(view), view);
else if (tabs && tabs != getViewPanel(view)->tabs()) {
WorkspacePanel* dropPanel = tabs->panel();
ASSERT(dropPanel);
int pos = m_dropPreviewTabs->getDropTabIndex();
m_dropPreviewTabs->removeDropViewPreview();
int pos = tabs->getDropTabIndex();
removeView(view);
addViewToPanel(dropPanel, view, pos);