aboutsummaryrefslogtreecommitdiff
path: root/launcher
diff options
context:
space:
mode:
authorashuntu <101582426+ashuntu@users.noreply.github.com>2023-07-07 13:23:05 -0500
committerashuntu <101582426+ashuntu@users.noreply.github.com>2023-07-07 13:24:31 -0500
commit51d7a6289e1cf2df463ae8d7c0b08b4a61faea3c (patch)
tree8afc84e8464dff7e2c2cc5292a4136118f40055c /launcher
parent10678096e57eb5b344f0dd39ad178403640b722a (diff)
downloadPrismLauncher-51d7a6289e1cf2df463ae8d7c0b08b4a61faea3c.tar.gz
PrismLauncher-51d7a6289e1cf2df463ae8d7c0b08b4a61faea3c.tar.bz2
PrismLauncher-51d7a6289e1cf2df463ae8d7c0b08b4a61faea3c.zip
Fix URL open crash (#596)
Diffstat (limited to 'launcher')
-rw-r--r--launcher/DesktopServices.cpp24
-rw-r--r--launcher/DesktopServices.h13
2 files changed, 32 insertions, 5 deletions
diff --git a/launcher/DesktopServices.cpp b/launcher/DesktopServices.cpp
index 2984a1b4..81362f09 100644
--- a/launcher/DesktopServices.cpp
+++ b/launcher/DesktopServices.cpp
@@ -118,7 +118,7 @@ bool openDirectory(const QString &path, bool ensureExists)
return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath()));
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isFlatpak())
+ if(!isSandbox())
{
return IndirectOpen(f);
}
@@ -139,7 +139,7 @@ bool openFile(const QString &path)
return QDesktopServices::openUrl(QUrl::fromLocalFile(path));
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isFlatpak())
+ if(!isSandbox())
{
return IndirectOpen(f);
}
@@ -157,7 +157,7 @@ bool openFile(const QString &application, const QString &path, const QString &wo
qDebug() << "Opening file" << path << "using" << application;
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
- if(!isFlatpak())
+ if(!isSandbox())
{
return IndirectOpen([&]()
{
@@ -177,7 +177,7 @@ bool run(const QString &application, const QStringList &args, const QString &wor
{
qDebug() << "Running" << application << "with args" << args.join(' ');
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isFlatpak())
+ if(!isSandbox())
{
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
return IndirectOpen([&]()
@@ -202,7 +202,7 @@ bool openUrl(const QUrl &url)
return QDesktopServices::openUrl(url);
};
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isFlatpak())
+ if(!isSandbox())
{
return IndirectOpen(f);
}
@@ -224,4 +224,18 @@ bool isFlatpak()
#endif
}
+bool isSnap()
+{
+#ifdef Q_OS_LINUX
+ return getenv("SNAP");
+#else
+ return false;
+#endif
+}
+
+bool isSandbox()
+{
+ return isSnap() || isFlatpak();
+}
+
}
diff --git a/launcher/DesktopServices.h b/launcher/DesktopServices.h
index 21c9cae0..b1948cc2 100644
--- a/launcher/DesktopServices.h
+++ b/launcher/DesktopServices.h
@@ -34,5 +34,18 @@ namespace DesktopServices
*/
bool openUrl(const QUrl &url);
+ /**
+ * Determine whether the launcher is running in a Flatpak environment
+ */
bool isFlatpak();
+
+ /**
+ * Determine whether the launcher is running in a Snap environment
+ */
+ bool isSnap();
+
+ /**
+ * Determine whether the launcher is running in a sandboxed (Flatpak or Snap) environment
+ */
+ bool isSandbox();
}