Cthulhu is no longer a fork. Now it is a screen reader written in Golang.
This commit is contained in:
1 parent
a998fe67de
commit
069fc674dc
708 files changed
+112482
-532
No files matched your search
@@ -0,0 +1,87 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// Authors: Storm Dragon, Angus Kola
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"git.stormux.org/storm/cthulhu/internal/config"
|
||||
)
|
||||
|
||||
func (worker *preferencesWorker) applicationSettings(application string) (config.Settings, error) {
|
||||
if settings, ok := worker.appSettings[application]; ok {
|
||||
return settings, nil
|
||||
}
|
||||
store, err := config.NewStore(worker.globalSettings.Path)
|
||||
if err != nil {
|
||||
return config.Settings{}, err
|
||||
}
|
||||
persistedGlobal, err := store.Load()
|
||||
if err != nil {
|
||||
return config.Settings{}, err
|
||||
}
|
||||
settings, mapped, err := store.LoadForApplication(application)
|
||||
if err != nil {
|
||||
return config.Settings{}, err
|
||||
}
|
||||
if !mapped {
|
||||
return worker.globalSettings, nil
|
||||
}
|
||||
settings = config.RebaseApplicationSettings(persistedGlobal, worker.globalSettings, settings)
|
||||
worker.appSettings[application] = settings
|
||||
return settings, nil
|
||||
}
|
||||
|
||||
func (worker *preferencesWorker) switchApplication(ctx context.Context, application string) {
|
||||
application = strings.TrimSpace(application)
|
||||
if application == "" || application == worker.activeApp {
|
||||
return
|
||||
}
|
||||
settings, err := worker.applicationSettings(application)
|
||||
if err == nil {
|
||||
err = worker.applyRuntime(ctx, settings)
|
||||
}
|
||||
if err != nil {
|
||||
worker.logger.Error("switch application settings", "application", application, "error", err)
|
||||
return
|
||||
}
|
||||
worker.activeApp = application
|
||||
if worker.live != nil {
|
||||
worker.live.application.Store(&application)
|
||||
worker.live.notify_clipboard()
|
||||
}
|
||||
}
|
||||
|
||||
func (worker *preferencesWorker) beginEdit(ctx context.Context, application string) bool {
|
||||
// A focus event and its shortcut can arrive on separate goroutines. Use the
|
||||
// latest accepted focus before deciding which application to edit.
|
||||
select {
|
||||
case focused := <-worker.applicationChanges:
|
||||
worker.switchApplication(ctx, focused)
|
||||
default:
|
||||
}
|
||||
if application == "\x00" {
|
||||
application = worker.activeApp
|
||||
if application == "" {
|
||||
worker.announceSpeechSetting("No active application for application preferences.")
|
||||
return false
|
||||
}
|
||||
}
|
||||
worker.editApp = application
|
||||
worker.editingActive = true
|
||||
worker.editing = worker.globalSettings
|
||||
if application != "" {
|
||||
settings, err := worker.applicationSettings(application)
|
||||
if err != nil {
|
||||
worker.logger.Error("load application settings", "application", application, "error", err)
|
||||
worker.announceSpeechSetting("Could not load application preferences.")
|
||||
worker.editingActive = false
|
||||
return false
|
||||
}
|
||||
worker.editing = settings
|
||||
}
|
||||
return true
|
||||
}
|
||||
Reference in new issue
Block a user