summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/mainwindow.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-06-27 15:15:09 +0200
committerEike Ziller <eike.ziller@digia.com>2014-07-02 09:57:11 +0200
commit5b3bb398ba751265aec0fb8071dacc5784985e91 (patch)
treec41046eb9aac701a3c322374b938c8099e323ae0 /src/plugins/coreplugin/mainwindow.cpp
parent8cd6f1909579c06940b52b1afef87aef4d8ea0e8 (diff)
downloadqt-creator-5b3bb398ba751265aec0fb8071dacc5784985e91.tar.gz
Run "New ..." dialog as non-blocking, stay-on-top.
Task-number: QTCREATORBUG-6102 Change-Id: I384c37e5867ce1cbd6127e96c49cb7790298713c Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Diffstat (limited to 'src/plugins/coreplugin/mainwindow.cpp')
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp61
1 files changed, 21 insertions, 40 deletions
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 2ef8720bd5..8b8049093a 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -76,6 +76,7 @@
#include <coreplugin/settingsdatabase.h>
#include <utils/historycompleter.h>
#include <utils/hostosinfo.h>
+#include <utils/qtcassert.h>
#include <utils/stylehelper.h>
#include <utils/stringutils.h>
#include <extensionsystem/pluginmanager.h>
@@ -248,6 +249,11 @@ void MainWindow::setIsFullScreen(bool fullScreen)
m_toggleFullScreenAction->setText(tr("Enter Full Screen"));
}
+bool MainWindow::isNewItemDialogRunning() const
+{
+ return !m_newDialog.isNull();
+}
+
MainWindow::~MainWindow()
{
ExtensionSystem::PluginManager::removeObject(m_shortcutSettings);
@@ -869,46 +875,14 @@ void MainWindow::showNewItemDialog(const QString &title,
const QString &defaultLocation,
const QVariantMap &extraVariables)
{
- // Scan for wizards matching the filter and pick one. Don't show
- // dialog if there is only one.
- IWizardFactory *wizard = 0;
- QString selectedPlatform;
- switch (factories.size()) {
- case 0:
- break;
- case 1:
- wizard = factories.front();
- break;
- default: {
- NewDialog dlg(this);
- dlg.setWizardFactories(factories);
- dlg.setWindowTitle(title);
- wizard = dlg.showDialog();
- selectedPlatform = dlg.selectedPlatform();
- }
- break;
- }
-
- if (!wizard)
- return;
-
- QString path = defaultLocation;
- if (path.isEmpty()) {
- switch (wizard->kind()) {
- case IWizardFactory::ProjectWizard:
- // Project wizards: Check for projects directory or
- // use last visited directory of file dialog. Never start
- // at current.
- path = DocumentManager::useProjectsDirectory() ?
- DocumentManager::projectsDirectory() :
- DocumentManager::fileDialogLastVisitedDirectory();
- break;
- default:
- path = DocumentManager::fileDialogInitialDirectory();
- break;
- }
- }
- wizard->runWizard(path, this, selectedPlatform, extraVariables);
+ QTC_ASSERT(!m_newDialog, return);
+ m_newAction->setEnabled(false);
+ m_newDialog = new NewDialog(this);
+ connect(m_newDialog.data(), SIGNAL(destroyed()), this, SLOT(newItemDialogFinished()));
+ m_newDialog->setWizardFactories(factories, defaultLocation, extraVariables);
+ m_newDialog->setWindowTitle(title);
+ m_newDialog->showDialog();
+ emit newItemDialogRunningChanged();
}
bool MainWindow::showOptionsDialog(Id category, Id page, QWidget *parent)
@@ -1263,5 +1237,12 @@ void MainWindow::restoreWindowState()
m_statusBarManager->restoreSettings();
}
+void MainWindow::newItemDialogFinished()
+{
+ m_newAction->setEnabled(true);
+ // fire signal when the dialog is actually destroyed
+ QTimer::singleShot(0, this, SIGNAL(newItemDialogRunningChanged()));
+}
+
} // namespace Internal
} // namespace Core