Skip to content

Commit 576a13c

Browse files
committed
Add SB_OpenHomeWindowWhenLastProjectClosed option
1 parent 9f599a3 commit 576a13c

File tree

5 files changed

+40
-2
lines changed

5 files changed

+40
-2
lines changed

src/plugins/coreplugin/internal/BehaviorPreference.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ namespace Core::Internal {
5858
Q_D(BehaviorPreference);
5959
auto settings = RuntimeInterface::settings();
6060
settings->beginGroup(staticMetaObject.className());
61-
d->startupBehavior = settings->value("startupBehavior", QVariant::fromValue(SB_CloseHomeWindowAfterOpeningProject)).value<StartupBehavior>();
61+
d->startupBehavior = settings->value("startupBehavior", QVariant::fromValue(SB_CloseHomeWindowAfterOpeningProject | SB_OpenHomeWindowWhenLastProjectClosed)).value<StartupBehavior>();
6262
emit startupBehaviorChanged();
6363
d->useSystemLanguage = settings->value("useSystemLanguage", true).toBool();
6464
emit useSystemLanguageChanged();

src/plugins/coreplugin/internal/BehaviorPreference.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ namespace Core::Internal {
6262
enum StartupBehaviorFlag {
6363
SB_CreateNewProject = 0x01,
6464
SB_CloseHomeWindowAfterOpeningProject = 0x02,
65+
SB_OpenHomeWindowWhenLastProjectClosed = 0x04,
6566
};
6667
Q_ENUM(StartupBehaviorFlag)
6768
Q_DECLARE_FLAGS(StartupBehavior, StartupBehaviorFlag)

src/plugins/coreplugin/internal/CorePlugin.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,29 @@ namespace Core::Internal {
298298
ProjectWindowInterfaceRegistry::instance()->attach<ProjectWindowNavigatorAddOn>();
299299
ProjectWindowInterfaceRegistry::instance()->attach<AfterSavingNotifyAddOn>();
300300
ProjectWindowInterfaceRegistry::instance()->attach<CloseSaveCheckAddOn>();
301+
302+
auto windowSystem = CoreInterface::windowSystem();
303+
connect(windowSystem, &WindowSystem::windowAboutToDestroy, this, [](WindowInterface *windowInterface) {
304+
if (!qobject_cast<ProjectWindowInterface *>(windowInterface)) {
305+
return;
306+
}
307+
308+
const auto startupBehavior = BehaviorPreference::startupBehavior();
309+
const bool closeHomeAfterOpening = startupBehavior & BehaviorPreference::SB_CloseHomeWindowAfterOpeningProject;
310+
const bool reopenHomeOnLastProjectClosed = startupBehavior & BehaviorPreference::SB_OpenHomeWindowWhenLastProjectClosed;
311+
312+
if (closeHomeAfterOpening && !reopenHomeOnLastProjectClosed) {
313+
return;
314+
}
315+
316+
const bool hasOtherProjectWindow = std::ranges::any_of(CoreInterface::windowSystem()->windows(), [](auto w) {
317+
return qobject_cast<ProjectWindowInterface *>(w);
318+
});
319+
320+
if (!hasOtherProjectWindow) {
321+
CoreInterface::showHome();
322+
}
323+
});
301324
}
302325

303326
void CorePlugin::initializeBehaviorPreference() {

src/plugins/coreplugin/internal/CorePlugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Core::Internal {
2525
void initializeSingletons();
2626
static void initializeActions();
2727
void initializeSettings() const;
28-
static void initializeWindows();
28+
void initializeWindows();
2929
static void initializeBehaviorPreference();
3030
static void initializeColorScheme();
3131
static void initializeJumpList();

src/plugins/coreplugin/qml/settings/GeneralPage.qml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,20 @@ ScrollView {
103103
}
104104
}
105105
}
106+
CheckBox {
107+
Layout.leftMargin: 22
108+
text: qsTr("Reopen the home window when the last project window closes")
109+
TextMatcherItem on text { matcher: page.matcher }
110+
checked: page.startupBehavior & BehaviorPreference.SB_OpenHomeWindowWhenLastProjectClosed
111+
enabled: page.startupBehavior & BehaviorPreference.SB_CloseHomeWindowAfterOpeningProject
112+
onClicked: () => {
113+
if (checked) {
114+
page.startupBehavior |= BehaviorPreference.SB_OpenHomeWindowWhenLastProjectClosed
115+
} else {
116+
page.startupBehavior &= ~BehaviorPreference.SB_OpenHomeWindowWhenLastProjectClosed
117+
}
118+
}
119+
}
106120
}
107121
}
108122
GroupBox {

0 commit comments

Comments
 (0)