From cd4a51212cc4fe6407cb8a07649e763a46f7f3d5 Mon Sep 17 00:00:00 2001 From: maelstrom Date: Thu, 15 May 2025 21:51:27 +0200 Subject: [PATCH] fix: conditionally open file with openUri or execute depending on its type --- run-applet/runapplet.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/run-applet/runapplet.cpp b/run-applet/runapplet.cpp index 36b656c..c100c6b 100644 --- a/run-applet/runapplet.cpp +++ b/run-applet/runapplet.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include RunApplet::RunApplet(QWidget *parent) : QDialog(parent) @@ -32,7 +34,12 @@ RunApplet::RunApplet(QWidget *parent) }); connect(ui->browseBtn, &QPushButton::clicked, this, [&]() { - QString file = QFileDialog::getOpenFileName(this, tr("Browse"), "", tr("All Files (*)")); + QFileDialog dialog; + dialog.setWindowTitle(tr("Browse")); + dialog.setMimeTypeFilters({"application/x-executable"}); + dialog.exec(); + QStringList files = dialog.selectedFiles(); + QString file = files.size() == 1 ? files[0] : ""; if (file == "") return; ui->comboBox->lineEdit()->setText(file); }); @@ -58,6 +65,16 @@ void RunApplet::runApp(QString command) { args.push_back(QString::fromWCharArray(p_args[i])); } + // If the file exists and is not an executable, use QDesktopServices instead + QMimeDatabase mimeDb; + QMimeType mime = mimeDb.mimeTypeForFile(args[0]); + + if (QFile::exists(command) && mime.name() != "application/x-executable") { + QDesktopServices::openUrl(QUrl::fromLocalFile(command)); + return; + } + + QProcess *process = new QProcess; process->setProgram(args[0]); args.remove(0);