diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 8e06c85175884868ab0572e91326ff9ce80e52a9..1ed1edae57f69cb4ad3d6800f35ebbd7202fce3f 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -218,6 +218,8 @@ struct EditorManagerPrivate { IFile::ReloadSetting m_reloadSetting; IFile::Utf8BomSetting m_utf8BomSetting; + + QString m_titleAddition; }; } @@ -530,13 +532,17 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto if (m_d->m_currentEditor && !ignoreNavigationHistory) addCurrentPositionToNavigationHistory(); + if (m_d->m_currentEditor) + disconnect(m_d->m_currentEditor, SIGNAL(changed()), this, SLOT(updateWindowTitle())); m_d->m_currentEditor = editor; if (editor) { if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor)) splitterOrView->view()->setCurrentEditor(editor); m_d->m_view->updateEditorHistory(editor); // the global view should have a complete history + connect(m_d->m_currentEditor, SIGNAL(changed()), this, SLOT(updateWindowTitle())); } updateActions(); + updateWindowTitle(); emit currentEditorChanged(editor); } @@ -847,6 +853,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask if (!currentEditor()) { emit currentEditorChanged(0); updateActions(); + updateWindowTitle(); } return !closingFailed; @@ -1569,6 +1576,26 @@ void EditorManager::makeCurrentEditorWritable() makeEditorWritable(curEditor); } +void EditorManager::updateWindowTitle() +{ + QString windowTitle = tr("Qt Creator"); + if (!m_d->m_titleAddition.isEmpty()) { + windowTitle.prepend(m_d->m_titleAddition + " - "); + } + IEditor *curEditor = currentEditor(); + if (curEditor) { + QString editorName = curEditor->displayName(); + if (!editorName.isEmpty()) + windowTitle.prepend(editorName + " - "); + QString filePath = QFileInfo(curEditor->file()->fileName()).absoluteFilePath(); + if (!filePath.isEmpty()) + m_d->m_core->mainWindow()->setWindowFilePath(filePath); + } else { + m_d->m_core->mainWindow()->setWindowFilePath(QString()); + } + m_d->m_core->mainWindow()->setWindowTitle(windowTitle); +} + void EditorManager::updateActions() { QString fName; @@ -2069,7 +2096,12 @@ void EditorManager::removeAllSplits() if (!m_d->m_splitter->isSplitter()) return; IEditor *editor = m_d->m_currentEditor; - m_d->m_currentEditor = 0; // trigger update below + { + // trigger update below + disconnect(m_d->m_currentEditor, SIGNAL(changed()), + this, SLOT(updateWindowTitle())); + m_d->m_currentEditor = 0; + } if (editor && m_d->m_editorModel->isDuplicate(editor)) m_d->m_editorModel->makeOriginal(editor); m_d->m_splitter->unsplitAll(); @@ -2104,5 +2136,15 @@ qint64 EditorManager::maxTextFileSize() { return (qint64(3) << 24); } -//===================EditorClosingCoreListener====================== + +void EditorManager::setWindowTitleAddition(const QString &addition) +{ + m_d->m_titleAddition = addition; + updateWindowTitle(); +} + +QString EditorManager::windowTitleAddition() const +{ + return m_d->m_titleAddition; +} diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 6b55561dc68d89e24a5d39380a33be52e97b0822..2dbdc4adec98da15f40250e76b66a1837e46d6aa 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -208,6 +208,9 @@ public: static qint64 maxTextFileSize(); + void setWindowTitleAddition(const QString &addition); + QString windowTitleAddition() const; + signals: void currentEditorChanged(Core::IEditor *editor); void editorCreated(Core::IEditor *editor, const QString &fileName); @@ -231,6 +234,7 @@ private slots: void handleContextChange(Core::IContext *context); void updateActions(); void makeCurrentEditorWritable(); + void updateWindowTitle(); public slots: void goBackInNavigationHistory(); @@ -269,7 +273,6 @@ private: Core::Internal::EditorView *currentEditorView() const; IEditor *pickUnusedEditor() const; - static EditorManager *m_instance; EditorManagerPrivate *m_d; diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp index f18f57e0a7add1f76f78b8c90b8523c86b5ae3ff..9cdd5125c90e641c521d753f5fc8f697b134bfd2 100644 --- a/src/plugins/designer/formwindoweditor.cpp +++ b/src/plugins/designer/formwindoweditor.cpp @@ -212,6 +212,7 @@ QString FormWindowEditor::displayName() const void FormWindowEditor::setDisplayName(const QString &title) { d->m_textEditable.setDisplayName(title); + emit changed(); } bool FormWindowEditor::duplicateSupported() const diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 9b04fbe1265f5d6b7c6b848cfe1e428e58fb5b87..1082c7ea38d8c2d9415db2dab858d94a6bb1a862 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -312,7 +312,6 @@ SessionManager::SessionManager(QObject *parent) m_core(Core::ICore::instance()), m_file(new SessionFile), m_sessionNode(new Internal::SessionNodeImpl(this)), - m_currentEditor(0), m_virginSession(true) { connect(m_core->modeManager(), SIGNAL(currentModeChanged(Core::IMode*)), @@ -324,8 +323,6 @@ SessionManager::SessionManager(QObject *parent) this, SLOT(setEditorCodec(Core::IEditor *, QString))); connect(ProjectExplorerPlugin::instance(), SIGNAL(currentProjectChanged(ProjectExplorer::Project *)), this, SLOT(updateWindowTitle())); - connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)), - this, SLOT(handleCurrentEditorChange(Core::IEditor*))); connect(em, SIGNAL(editorOpened(Core::IEditor*)), this, SLOT(markSessionFileDirty())); connect(em, SIGNAL(editorsClosed(QList<Core::IEditor*>)), @@ -839,40 +836,17 @@ QString SessionManager::currentSession() const return m_file->fileName(); } -void SessionManager::handleCurrentEditorChange(Core::IEditor *editor) -{ - if (editor != m_currentEditor) { - if (m_currentEditor) - disconnect(m_currentEditor, SIGNAL(changed()), this, SLOT(updateWindowTitle())); - if (editor) - connect(editor, SIGNAL(changed()), this, SLOT(updateWindowTitle())); - m_currentEditor = editor; - } - updateWindowTitle(); -} - void SessionManager::updateWindowTitle() { - QString windowTitle = tr("Qt Creator"); if (isDefaultSession(m_sessionName)) { if (Project *currentProject = ProjectExplorerPlugin::instance()->currentProject()) - windowTitle.prepend(currentProject->displayName() + " - "); + m_core->editorManager()->setWindowTitleAddition(currentProject->displayName()); } else { QString sessionName = m_sessionName; if (sessionName.isEmpty()) sessionName = tr("Untitled"); - windowTitle.prepend(sessionName + " - "); - } - if (m_core->editorManager()->currentEditor()) { - QFileInfo fi(m_core->editorManager()->currentEditor()->file()->fileName()); - QString fileName = fi.fileName(); - if (!fileName.isEmpty()) - windowTitle.prepend(fileName + " - "); - m_core->mainWindow()->setWindowFilePath(fi.absoluteFilePath()); - } else { - m_core->mainWindow()->setWindowFilePath(QString()); + m_core->editorManager()->setWindowTitleAddition(sessionName); } - m_core->mainWindow()->setWindowTitle(windowTitle); } void SessionManager::updateName(const QString &session) diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h index 213730b5f687d8b5b5143bd61ffb1064c1e94c96..50b30212c8aed105580859ff46bbc00da54f1416 100644 --- a/src/plugins/projectexplorer/session.h +++ b/src/plugins/projectexplorer/session.h @@ -155,7 +155,6 @@ private slots: void saveActiveMode(Core::IMode *mode); void clearProjectFileCache(); void setEditorCodec(Core::IEditor *editor, const QString &fileName); - void handleCurrentEditorChange(Core::IEditor *editor); void updateWindowTitle(); void markSessionFileDirty(bool makeDefaultVirginDirty = true); @@ -176,7 +175,6 @@ private: Internal::SessionFile *m_file; Internal::SessionNodeImpl *m_sessionNode; - QPointer<Core::IEditor> m_currentEditor; QString m_sessionName; bool m_virginSession; diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h index b05f5eee3a25047123d511bfeee125ef1d1a96e9..5acd1099006ebbc4e7b54f2d4f1be2d10b393ad8 100644 --- a/src/plugins/resourceeditor/resourceeditorw.h +++ b/src/plugins/resourceeditor/resourceeditorw.h @@ -89,7 +89,7 @@ public: Core::IFile *file() { return m_resourceFile; } QString id() const; QString displayName() const { return m_displayName; } - void setDisplayName(const QString &title) { m_displayName = title; } + void setDisplayName(const QString &title) { m_displayName = title; emit changed(); } QWidget *toolBar() { return 0; } QByteArray saveState() const { return QByteArray(); } bool restoreState(const QByteArray &/*state*/) { return true; } diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 73147180db5bd6a8ad27c311658b9abeff42e945..1e58cf2265c6a6b80477ee076d885de52b27ead6 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2050,6 +2050,7 @@ QString BaseTextEditor::displayName() const void BaseTextEditor::setDisplayName(const QString &title) { d->m_displayName = title; + emit changed(); } BaseTextDocument *BaseTextEditor::baseTextDocument() const diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index ca7d1db5a3889d33c9e3155dd03bd51565d9a2ce..c6e3fe6ef791a3b21708acaa9454566b1f43fc29 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -572,7 +572,7 @@ public: return e->open(fileName); } inline QString displayName() const { return e->displayName(); } - inline void setDisplayName(const QString &title) { e->setDisplayName(title); } + inline void setDisplayName(const QString &title) { e->setDisplayName(title); emit changed(); } inline QByteArray saveState() const { return e->saveState(); } inline bool restoreState(const QByteArray &state) { return e->restoreState(state); } diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index a3a2b9618a5930f713e783862b58d687e0a1b1c4..ec5578ea20ee7cc7d91c56405d8396e96869a7af 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -329,6 +329,7 @@ QString VCSBaseSubmitEditor::displayName() const void VCSBaseSubmitEditor::setDisplayName(const QString &title) { m_d->m_displayName = title; + emit changed(); } QString VCSBaseSubmitEditor::checkScriptWorkingDirectory() const