summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/instancemanager.cpp21
-rw-r--r--src/instancemanager.h3
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/shared/appconfig.inc1
4 files changed, 29 insertions, 0 deletions
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp
index fdc30e22..c0d343de 100644
--- a/src/instancemanager.cpp
+++ b/src/instancemanager.cpp
@@ -186,6 +186,10 @@ QString InstanceManager::queryInstanceName(const QStringList &instanceList) cons
QString InstanceManager::chooseInstance(const QStringList &instanceList) const
{
+ if (portableInstallIsLocked()) {
+ return QString();
+ }
+
enum class Special : uint8_t {
NewInstance,
Portable,
@@ -266,6 +270,19 @@ bool InstanceManager::portableInstall() const
}
+bool InstanceManager::portableInstallIsLocked() const
+{
+ return QFile::exists(qApp->applicationDirPath() + "/" +
+ QString::fromStdWString(AppConfig::portableLockFileName()));
+}
+
+
+bool InstanceManager::allowedToChangeInstance() const
+{
+ return !portableInstallIsLocked();
+}
+
+
void InstanceManager::createDataPath(const QString &dataPath) const
{
if (!QDir(dataPath).exists()) {
@@ -286,6 +303,10 @@ void InstanceManager::createDataPath(const QString &dataPath) const
QString InstanceManager::determineDataPath()
{
QString instanceId = currentInstance();
+ if (portableInstallIsLocked())
+ {
+ instanceId.clear();
+ }
if (instanceId.isEmpty() && !m_Reset && (m_overrideInstance || portableInstall()))
{
// startup, apparently using portable mode before
diff --git a/src/instancemanager.h b/src/instancemanager.h
index 4efa6f03..0e31fb08 100644
--- a/src/instancemanager.h
+++ b/src/instancemanager.h
@@ -38,6 +38,8 @@ public:
QString currentInstance() const;
+ bool allowedToChangeInstance() const;
+
private:
InstanceManager();
@@ -58,6 +60,7 @@ private:
void createDataPath(const QString &dataPath) const;
bool portableInstall() const;
+ bool portableInstallIsLocked() const;
private:
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 657c1a27..bd9f1486 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -727,6 +727,10 @@ void MainWindow::setupToolbar()
} else {
log::warn("no separator found on the toolbar, icons won't be right-aligned");
}
+
+ if (!InstanceManager::instance().allowedToChangeInstance()) {
+ ui->actionChange_Game->setVisible(false);
+ }
}
void MainWindow::setupActionMenu(QAction* a)
diff --git a/src/shared/appconfig.inc b/src/shared/appconfig.inc
index e572a32b..709c845d 100644
--- a/src/shared/appconfig.inc
+++ b/src/shared/appconfig.inc
@@ -17,6 +17,7 @@ APPPARAM(std::wstring, proxyDLLOrig, L"steam_api_orig.dll") // needs to be ident
APPPARAM(std::wstring, proxyDLLSource, L"proxy.dll")
APPPARAM(std::wstring, vfs32DLLName, L"usvfs_x86.dll")
APPPARAM(std::wstring, vfs64DLLName, L"usvfs_x64.dll")
+APPPARAM(std::wstring, portableLockFileName, L"portable.txt")
APPPARAM(const wchar_t*, localSavePlaceholder, L"__MOProfileSave__\\")
APPPARAM(std::wstring, firstStepsTutorial, L"tutorial_firststeps_main.js")