From c7d44cfb12e21efd81595e0e85db4ef23ee517bd Mon Sep 17 00:00:00 2001 From: purian23 Date: Sun, 10 May 2026 21:47:15 -0400 Subject: [PATCH] fix(Settings): Update card registration logic to fix binded crash --- .../Settings/Widgets/SettingsButtonGroupRow.qml | 11 ++++++++--- .../Modules/Settings/Widgets/SettingsCard.qml | 16 ++++++++++------ .../Settings/Widgets/SettingsDropdownRow.qml | 11 ++++++++--- .../Settings/Widgets/SettingsSliderRow.qml | 11 ++++++++--- .../Settings/Widgets/SettingsToggleRow.qml | 11 ++++++++--- quickshell/Services/SettingsSearchService.qml | 6 ++++-- 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/quickshell/Modules/Settings/Widgets/SettingsButtonGroupRow.qml b/quickshell/Modules/Settings/Widgets/SettingsButtonGroupRow.qml index 5e49936d..4e82545d 100644 --- a/quickshell/Modules/Settings/Widgets/SettingsButtonGroupRow.qml +++ b/quickshell/Modules/Settings/Widgets/SettingsButtonGroupRow.qml @@ -33,9 +33,14 @@ Item { Component.onCompleted: { if (!settingKey) return; - let flickable = findParentFlickable(); - if (flickable) - SettingsSearchService.registerCard(settingKey, root, flickable); + var key = settingKey; + Qt.callLater(() => { + if (!root.parent) + return; + var flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(key, root, flickable); + }); } Component.onDestruction: { diff --git a/quickshell/Modules/Settings/Widgets/SettingsCard.qml b/quickshell/Modules/Settings/Widgets/SettingsCard.qml index 65642a0c..6e3d6909 100644 --- a/quickshell/Modules/Settings/Widgets/SettingsCard.qml +++ b/quickshell/Modules/Settings/Widgets/SettingsCard.qml @@ -55,12 +55,16 @@ StyledRect { } Component.onCompleted: { - if (settingKey) { - let flickable = findParentFlickable(); - if (flickable) { - SettingsSearchService.registerCard(settingKey, root, flickable); - } - } + if (!settingKey) + return; + var key = settingKey; + Qt.callLater(() => { + if (!root.parent) + return; + var flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(key, root, flickable); + }); } Component.onDestruction: { diff --git a/quickshell/Modules/Settings/Widgets/SettingsDropdownRow.qml b/quickshell/Modules/Settings/Widgets/SettingsDropdownRow.qml index c5ec3a6e..3b622a21 100644 --- a/quickshell/Modules/Settings/Widgets/SettingsDropdownRow.qml +++ b/quickshell/Modules/Settings/Widgets/SettingsDropdownRow.qml @@ -48,9 +48,14 @@ DankDropdown { Component.onCompleted: { if (!settingKey) return; - let flickable = findParentFlickable(); - if (flickable) - SettingsSearchService.registerCard(settingKey, root, flickable); + var key = settingKey; + Qt.callLater(() => { + if (!root.parent) + return; + var flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(key, root, flickable); + }); } Component.onDestruction: { diff --git a/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml b/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml index b1ada848..63d2c32c 100644 --- a/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml +++ b/quickshell/Modules/Settings/Widgets/SettingsSliderRow.qml @@ -33,9 +33,14 @@ Item { Component.onCompleted: { if (!settingKey) return; - let flickable = findParentFlickable(); - if (flickable) - SettingsSearchService.registerCard(settingKey, root, flickable); + var key = settingKey; + Qt.callLater(() => { + if (!root.parent) + return; + var flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(key, root, flickable); + }); } Component.onDestruction: { diff --git a/quickshell/Modules/Settings/Widgets/SettingsToggleRow.qml b/quickshell/Modules/Settings/Widgets/SettingsToggleRow.qml index 684b639a..aa7969b7 100644 --- a/quickshell/Modules/Settings/Widgets/SettingsToggleRow.qml +++ b/quickshell/Modules/Settings/Widgets/SettingsToggleRow.qml @@ -32,9 +32,14 @@ DankToggle { Component.onCompleted: { if (!settingKey) return; - let flickable = findParentFlickable(); - if (flickable) - SettingsSearchService.registerCard(settingKey, root, flickable); + var key = settingKey; + Qt.callLater(() => { + if (!root.parent) + return; + var flickable = findParentFlickable(); + if (flickable) + SettingsSearchService.registerCard(key, root, flickable); + }); } Component.onDestruction: { diff --git a/quickshell/Services/SettingsSearchService.qml b/quickshell/Services/SettingsSearchService.qml index 00af5287..232cff4c 100644 --- a/quickshell/Services/SettingsSearchService.qml +++ b/quickshell/Services/SettingsSearchService.qml @@ -54,10 +54,12 @@ Singleton { function registerCard(settingKey, item, flickable) { if (!settingKey) return; - registeredCards[settingKey] = { + var cards = Object.assign({}, registeredCards); + cards[settingKey] = { item: item, flickable: flickable }; + registeredCards = cards; if (targetSection === settingKey) scrollTimer.restart(); } @@ -65,7 +67,7 @@ Singleton { function unregisterCard(settingKey) { if (!settingKey) return; - let cards = registeredCards; + var cards = Object.assign({}, registeredCards); delete cards[settingKey]; registeredCards = cards; }