forked from Shinonome/dots-hyprland
overview: limit search results while typing (less laggy emoji/clipboard search)
This commit is contained in:
@@ -13,7 +13,11 @@ import Quickshell.Io
|
|||||||
|
|
||||||
Item { // Wrapper
|
Item { // Wrapper
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
readonly property string xdgConfigHome: Directories.config
|
readonly property string xdgConfigHome: Directories.config
|
||||||
|
readonly property int typingDebounceInterval: 200
|
||||||
|
readonly property int typingResultLimit: 15 // Should be enough to cover the whole view
|
||||||
|
|
||||||
property string searchingText: LauncherSearch.query
|
property string searchingText: LauncherSearch.query
|
||||||
property bool showResults: searchingText != ""
|
property bool showResults: searchingText != ""
|
||||||
implicitWidth: searchWidgetContent.implicitWidth + Appearance.sizes.elevationMargin * 2
|
implicitWidth: searchWidgetContent.implicitWidth + Appearance.sizes.elevationMargin * 2
|
||||||
@@ -178,30 +182,35 @@ Item { // Wrapper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
model: ScriptModel {
|
Timer {
|
||||||
id: model
|
id: debounceTimer
|
||||||
objectProp: "key"
|
interval: root.typingDebounceInterval
|
||||||
values: LauncherSearch.results
|
onTriggered: {
|
||||||
onValuesChanged: {
|
resultModel.values = LauncherSearch.results ?? [];
|
||||||
root.focusFirstItem();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: LauncherSearch
|
||||||
|
function onResultsChanged() {
|
||||||
|
resultModel.values = LauncherSearch.results.slice(0, root.typingResultLimit);
|
||||||
|
root.focusFirstItem();
|
||||||
|
debounceTimer.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
model: ScriptModel {
|
||||||
|
id: resultModel
|
||||||
|
objectProp: "key"
|
||||||
|
}
|
||||||
|
|
||||||
delegate: SearchItem {
|
delegate: SearchItem {
|
||||||
// The selectable item for each search result
|
// The selectable item for each search result
|
||||||
required property var modelData
|
required property var modelData
|
||||||
anchors.left: parent?.left
|
anchors.left: parent?.left
|
||||||
anchors.right: parent?.right
|
anchors.right: parent?.right
|
||||||
entry: modelData
|
entry: modelData
|
||||||
query: StringUtils.cleanOnePrefix(root.searchingText, [
|
query: StringUtils.cleanOnePrefix(root.searchingText, [Config.options.search.prefix.action, Config.options.search.prefix.app, Config.options.search.prefix.clipboard, Config.options.search.prefix.emojis, Config.options.search.prefix.math, Config.options.search.prefix.shellCommand, Config.options.search.prefix.webSearch])
|
||||||
Config.options.search.prefix.action,
|
|
||||||
Config.options.search.prefix.app,
|
|
||||||
Config.options.search.prefix.clipboard,
|
|
||||||
Config.options.search.prefix.emojis,
|
|
||||||
Config.options.search.prefix.math,
|
|
||||||
Config.options.search.prefix.shellCommand,
|
|
||||||
Config.options.search.prefix.webSearch
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user