Update toolwindowmanager to 6f1c258

This commit is contained in:
baldurk
2017-06-22 10:10:44 +01:00
parent 25c72714cd
commit 6c4eb5cf71
3 changed files with 41 additions and 10 deletions
+31 -9
View File
@@ -368,6 +368,18 @@ void ToolWindowManager::removeToolWindow(QWidget *toolWindow) {
qWarning("unknown tool window");
return;
}
// search up to find the first parent manager
ToolWindowManager *manager = findClosestParent<ToolWindowManager*>(toolWindow);
if (!manager) {
qWarning("unknown tool window");
return;
}
if (!manager->allowClose(toolWindow))
return;
moveToolWindow(toolWindow, NoArea);
m_toolWindows.removeOne(toolWindow);
m_toolWindowProperties.remove(toolWindow);
@@ -1128,6 +1140,23 @@ bool ToolWindowManager::eventFilter(QObject *object, QEvent *event) {
return QWidget::eventFilter(object, event);
}
bool ToolWindowManager::allowClose(QWidget *toolWindow) {
if (!m_toolWindows.contains(toolWindow)) {
qWarning("unknown tool window");
return true;
}
int methodIndex = toolWindow->metaObject()->indexOfMethod(QMetaObject::normalizedSignature("checkAllowClose()"));
if(methodIndex >= 0) {
bool ret = true;
toolWindow->metaObject()->method(methodIndex).invoke(toolWindow, Qt::DirectConnection, Q_RETURN_ARG(bool, ret));
return ret;
}
return true;
}
void ToolWindowManager::tabCloseRequested(int index) {
ToolWindowManagerArea* tabWidget = qobject_cast<ToolWindowManagerArea*>(sender());
if (!tabWidget) {
@@ -1140,15 +1169,8 @@ void ToolWindowManager::tabCloseRequested(int index) {
return;
}
int methodIndex = toolWindow->metaObject()->indexOfMethod(QMetaObject::normalizedSignature("checkAllowClose()"));
if(methodIndex >= 0) {
bool ret = true;
toolWindow->metaObject()->method(methodIndex).invoke(toolWindow, Qt::DirectConnection, Q_RETURN_ARG(bool, ret));
if(!ret)
return;
}
if (!allowClose(toolWindow))
return;
if(toolWindowProperties(toolWindow) & ToolWindowManager::HideOnClose)
hideToolWindow(toolWindow);
@@ -300,6 +300,8 @@ private:
void drawHotspotPixmaps();
bool allowClose(QWidget *toolWindow);
// last widget used for adding tool windows, or 0 if there isn't one
// (warning: may contain pointer to deleted object)
ToolWindowManagerArea* m_lastUsedArea;
@@ -148,7 +148,7 @@ void ToolWindowManagerWrapper::updateTitle() {
setWindowTitle(QStringLiteral("Tool Window"));
}
void ToolWindowManagerWrapper::closeEvent(QCloseEvent *) {
void ToolWindowManagerWrapper::closeEvent(QCloseEvent *event) {
QList<QWidget*> toolWindows;
foreach(ToolWindowManagerArea* tabWidget, findChildren<ToolWindowManagerArea*>()) {
if (ToolWindowManager::managerOf(tabWidget) == m_manager) {
@@ -156,6 +156,13 @@ void ToolWindowManagerWrapper::closeEvent(QCloseEvent *) {
}
}
foreach(QWidget* toolWindow, toolWindows) {
if (!m_manager->allowClose(toolWindow)) {
event->ignore();
return;
}
}
foreach(QWidget* toolWindow, toolWindows) {
if(m_manager->toolWindowProperties(toolWindow) & ToolWindowManager::HideOnClose)
m_manager->hideToolWindow(toolWindow);