From 67c486194a2cd575b50ee52ea87bd7f3e8fa80a4 Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Thu, 27 Jan 2011 22:00:22 -0800 Subject: [PATCH] see #1998 : closing editor panel when user closes project panel, it seems gui crashes on mac only if editor panel is open at the time when user coses project panel --- src/libgui/FWWindow.cpp | 12 ++++++++---- src/libgui/FWWindow_editor.cpp | 22 +++++++++++++--------- src/libgui/ProjectPanel.cpp | 12 +++++++----- src/libgui/events.h | 13 +++++++++++-- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/libgui/FWWindow.cpp b/src/libgui/FWWindow.cpp index c560a9db8..f8bae3b27 100644 --- a/src/libgui/FWWindow.cpp +++ b/src/libgui/FWWindow.cpp @@ -1321,16 +1321,20 @@ bool FWWindow::event(QEvent *event) ev->accept(); return true; } + + case CLOSE_EDITOR_PANEL_EVENT: + { + hideEditor(); + ev->accept(); + return true; + } + } // dispatch event to all projectpanel windows foreach(QMdiSubWindow* sw, m_mainWindow->m_space->subWindowList()) QCoreApplication::sendEvent(sw->widget(), event); - // QList subWindowList = m_mainWindow->m_space->subWindowList(); - // for (int i = 0 ; i < subWindowList.size(); i++) - // QCoreApplication::sendEvent(subWindowList[i]->widget(), event); - event->accept(); return true; } diff --git a/src/libgui/FWWindow_editor.cpp b/src/libgui/FWWindow_editor.cpp index 8da5920fe..92df44e53 100644 --- a/src/libgui/FWWindow_editor.cpp +++ b/src/libgui/FWWindow_editor.cpp @@ -76,6 +76,10 @@ void FWWindow::editorPanelTabChanged(int idx) } } +/***************************************************************** + * there are too many functions that open, close and hide editor panel. + * TODO: need to get rid of redundant ones + */ void FWWindow::showEditor() { m_mainWindow->objectEditorStack->setCurrentIndex(oe->getCurrentDialogIndex()); @@ -93,6 +97,15 @@ void FWWindow::closeEditor() m_mainWindow->editorDockWidget->close(); // editor } +void FWWindow::closeEditorPanel() +{ + m_mainWindow->editorDockWidget->hide(); // editor +} + +void FWWindow::openEditorPanel() +{ +} + void FWWindow::openEditor(FWObject *obj) { attachEditorToProjectPanel(activeProject()); @@ -256,15 +269,6 @@ ObjectEditor::OptType FWWindow::getOpenedOptEditor() return oe->getOpenedOpt(); } -void FWWindow::closeEditorPanel() -{ - m_mainWindow->editorDockWidget->hide(); // editor -} - -void FWWindow::openEditorPanel() -{ -} - void FWWindow::findObject(FWObject *o) { if (activeProject()) diff --git a/src/libgui/ProjectPanel.cpp b/src/libgui/ProjectPanel.cpp index 314847125..93a7cbce1 100644 --- a/src/libgui/ProjectPanel.cpp +++ b/src/libgui/ProjectPanel.cpp @@ -1058,11 +1058,6 @@ void ProjectPanel::hideEvent(QHideEvent *ev) if (fwbdebug) qDebug() << "ProjectPanel::hideEvent " << this << "title " << mdiWindow->windowTitle(); - disconnect(m_panel->treeDockWidget, SIGNAL(topLevelChanged(bool)), - this, SLOT(topLevelChangedForTreePanel(bool))); - disconnect(m_panel->treeDockWidget, SIGNAL(visibilityChanged(bool)), - this, SLOT(visibilityChangedForTreePanel(bool))); - QWidget::hideEvent(ev); } @@ -1077,11 +1072,18 @@ void ProjectPanel::closeEvent(QCloseEvent * ev) return; } + disconnect(m_panel->treeDockWidget, SIGNAL(topLevelChanged(bool)), + this, SLOT(topLevelChangedForTreePanel(bool))); + disconnect(m_panel->treeDockWidget, SIGNAL(visibilityChanged(bool)), + this, SLOT(visibilityChangedForTreePanel(bool))); + saveState(); fileClose(); mw->updateWindowTitle(); + QCoreApplication::postEvent(mw, new closeEditorPanelEvent()); + QTimer::singleShot( 0, mw, SLOT(projectWindowClosed()) ); } diff --git a/src/libgui/events.h b/src/libgui/events.h index 996ad5daf..e7ecead33 100644 --- a/src/libgui/events.h +++ b/src/libgui/events.h @@ -67,7 +67,8 @@ enum EVENT_CODES { OPEN_LIBRARY_FOR_OBJECT_EVENT, UPDATE_SUBWINDOW_TITLES_EVENT, UPDATE_GUI_STATE_EVENT, - EXPAND_OBJECT_IN_TREE + EXPAND_OBJECT_IN_TREE, + CLOSE_EDITOR_PANEL_EVENT , }; @@ -373,7 +374,6 @@ public: {} }; - class expandObjectInTreeEvent : public fwbUpdateEvent { public: int parent_id; @@ -384,4 +384,13 @@ public: {} }; +class closeEditorPanelEvent : public fwbUpdateEvent { +public: + closeEditorPanelEvent() : + fwbUpdateEvent("", -1, + QEvent::Type(QEvent::User + CLOSE_EDITOR_PANEL_EVENT), + "closeEditorPanelEvent") + {} +}; + #endif