From a739be6474a8b609dc2f45377b8e66f0426025ad Mon Sep 17 00:00:00 2001 From: Andrej Benz Date: Sat, 4 Jan 2025 15:05:29 +0100 Subject: [PATCH] switcher: fix panic when switcher has `auto_select = true` --- cmd/version.txt | 2 +- internal/state/appstate.go | 1 - internal/ui/interactions.go | 29 +++++++++++++++-------------- internal/ui/modules.go | 6 ------ internal/ui/ui.go | 9 +++++++-- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/cmd/version.txt b/cmd/version.txt index 02c04c6..a95c45d 100644 --- a/cmd/version.txt +++ b/cmd/version.txt @@ -1 +1 @@ -0.11.14-git +0.11.14 diff --git a/internal/state/appstate.go b/internal/state/appstate.go index 86bc24c..60d3061 100644 --- a/internal/state/appstate.go +++ b/internal/state/appstate.go @@ -13,7 +13,6 @@ import ( type AppState struct { ActiveItem *int AutoSelect bool - AutoSelectOld bool Clipboard modules.Workable ConfigError error IsDebug bool diff --git a/internal/ui/interactions.go b/internal/ui/interactions.go index e55c8d4..0d59ffe 100644 --- a/internal/ui/interactions.go +++ b/internal/ui/interactions.go @@ -459,24 +459,25 @@ func handleSwitcher(module string) { explicits = []modules.Workable{} explicits = append(explicits, m) - common.items.Splice(0, int(common.items.NItems())) - elements.input.SetObjectProperty("placeholder-text", m.General().Placeholder) - setupSingleModule() + glib.IdleAdd(func() { + common.items.Splice(0, int(common.items.NItems())) + elements.input.SetObjectProperty("placeholder-text", m.General().Placeholder) - if val, ok := layouts[singleModule.General().Name]; ok { - glib.IdleAdd(func() { + setupSingleModule() + + if val, ok := layouts[singleModule.General().Name]; ok { layout = val setupLayout(singleModule.General().Theme, singleModule.General().ThemeBase) - }) - } + } - if elements.input.Text() != "" { - elements.input.SetText("") - } else { - debouncedProcess(process) - } + if elements.input.Text() != "" { + elements.input.SetText("") + } else { + debouncedProcess(process) + } - elements.input.GrabFocus() + elements.input.GrabFocus() + }) } } } @@ -1014,7 +1015,7 @@ func quit(ignoreEvent bool) { appstate.IsRunning = false appstate.IsSingle = false - appstate.AutoSelect = appstate.AutoSelectOld + appstate.AutoSelect = false historyIndex = 0 diff --git a/internal/ui/modules.go b/internal/ui/modules.go index 35083f4..ead67c1 100644 --- a/internal/ui/modules.go +++ b/internal/ui/modules.go @@ -200,12 +200,6 @@ func setupSingleModule() { singleModule = toUse[0] } - appstate.AutoSelectOld = appstate.AutoSelect - - if !appstate.AutoSelect { - appstate.AutoSelect = singleModule.General().AutoSelect - } - glib.IdleAdd(func() { debouncedProcess = util.NewDebounce(time.Millisecond * time.Duration(singleModule.General().Delay)) }) diff --git a/internal/ui/ui.go b/internal/ui/ui.go index a6148f5..f0a89ad 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -823,8 +823,13 @@ func afterUI() { common.selection.SetSelected(0) - if common.items.NItems() == 1 && appstate.AutoSelect { - activateItem(false, false) + if common.items.NItems() == 1 { + entry := gioutil.ObjectValue[util.Entry](common.items.Item(0)) + module := findModule(entry.Module, toUse) + + if module.General().AutoSelect || appstate.AutoSelect { + activateItem(false, false) + } } elements.grid.ScrollTo(0, gtk.ListScrollNone, nil)