Files
DankMaterialShell/quickshell/Modals/FileBrowser/FileBrowserSurfaceModal.qml
T

91 lines
2.9 KiB
QML

import QtQuick
import Quickshell.Wayland
import qs.Common
import qs.DankCommon.FileBrowser
import qs.Modals.Common
DankModal {
id: fileBrowserSurfaceModal
property string mode: folderMode ? "openFolder" : saveMode ? "save" : "open"
property var filters: fileExtensions
property bool multiple: false
property string defaultName: defaultFileName
property string startPath: revealPath
property string bucket: browserType
property string defaultViewMode: ["wallpaper", "profile"].includes(bucket) ? "grid" : "list"
property string browserTitle: I18n.tr("Select File", "default file browser window title")
property string browserIcon: "folder_open" // !TODO: plugin compat, the window header no longer draws an icon
property string browserType: "generic"
property var fileExtensions: []
property alias filterExtensions: fileBrowserSurfaceModal.fileExtensions
property bool showHiddenFiles: false
property bool saveMode: false
property bool folderMode: false
property string defaultFileName: ""
property string revealPath: ""
property var parentPopout: null
property bool _settled: false
signal accepted(var paths)
signal rejected
signal fileSelected(string path)
layerNamespace: "dms:filebrowser"
modalWidth: 860
modalHeight: 620
backgroundColor: Theme.floatingWindowSurface
closeOnEscapeKey: false
closeOnBackgroundClick: true
allowStacking: true
useOverlayLayer: true
keepPopoutsOpen: true
onBackgroundClicked: close()
onOpened: {
_settled = false;
if (parentPopout)
parentPopout.customKeyboardFocus = WlrKeyboardFocus.None;
Qt.callLater(() => {
const picker = contentLoader?.item;
if (!picker)
return;
picker.reset();
picker.forceActiveFocus();
});
}
onDialogClosed: {
if (parentPopout)
parentPopout.customKeyboardFocus = null;
if (_settled)
return;
_settled = true;
rejected();
}
content: FilePicker {
focus: true
autoReset: false
mode: fileBrowserSurfaceModal.mode
filters: fileBrowserSurfaceModal.filters
multiple: fileBrowserSurfaceModal.multiple
defaultName: fileBrowserSurfaceModal.defaultName
startPath: fileBrowserSurfaceModal.startPath
bucket: fileBrowserSurfaceModal.bucket
title: fileBrowserSurfaceModal.browserTitle
defaultShowHidden: fileBrowserSurfaceModal.showHiddenFiles
defaultViewMode: fileBrowserSurfaceModal.defaultViewMode
onAccepted: paths => {
fileBrowserSurfaceModal._settled = true;
fileBrowserSurfaceModal.accepted(paths);
if (paths.length > 0)
fileBrowserSurfaceModal.fileSelected(paths[0]);
fileBrowserSurfaceModal.close();
}
onRejected: fileBrowserSurfaceModal.close()
}
}