summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml')
-rw-r--r--raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml51
1 files changed, 51 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml
new file mode 100644
index 0000000..e4afcb8
--- /dev/null
+++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modals/BrowserPickerModal.qml
@@ -0,0 +1,51 @@
+import QtQuick
+import Quickshell
+import qs.Common
+import qs.Modals
+
+AppPickerModal {
+ id: root
+
+ property string url: ""
+
+ title: I18n.tr("Open with...")
+ targetData: url
+ targetDataLabel: ""
+ categoryFilter: ["WebBrowser", "X-WebBrowser"]
+ viewMode: SettingsData.browserPickerViewMode || "grid"
+ usageHistoryKey: "browserUsageHistory"
+ showTargetData: true
+
+ function shellEscape(str) {
+ return "'" + str.replace(/'/g, "'\\''") + "'"
+ }
+
+ onApplicationSelected: (app, url) => {
+ if (!app) return
+
+ let cmd = app.exec || ""
+ const escapedUrl = shellEscape(url)
+
+ let hasField = false
+ if (cmd.includes("%u")) { cmd = cmd.replace("%u", escapedUrl); hasField = true }
+ else if (cmd.includes("%U")) { cmd = cmd.replace("%U", escapedUrl); hasField = true }
+ else if (cmd.includes("%f")) { cmd = cmd.replace("%f", escapedUrl); hasField = true }
+ else if (cmd.includes("%F")) { cmd = cmd.replace("%F", escapedUrl); hasField = true }
+
+ cmd = cmd.replace(/%[ikc]/g, "")
+
+ if (!hasField) {
+ cmd += " " + escapedUrl
+ }
+
+ console.log("BrowserPicker: Launching", cmd)
+
+ Quickshell.execDetached({
+ command: ["sh", "-c", cmd]
+ })
+ }
+
+ onViewModeChanged: {
+ SettingsData.set("browserPickerViewMode", viewMode)
+ }
+}