wails/v3/pkg/application/key_binding_manager.go
Lea Anthony fe717c42b5
Refactor to using Window interface (#4471)
Refactor window interface to eliminate type assertions and improve code maintainability
2025-08-09 15:28:08 +10:00

66 lines
1.8 KiB
Go

package application
// KeyBindingManager manages all key binding operations
type KeyBindingManager struct {
app *App
}
// newKeyBindingManager creates a new KeyBindingManager instance
func newKeyBindingManager(app *App) *KeyBindingManager {
return &KeyBindingManager{
app: app,
}
}
// Add adds a key binding
func (kbm *KeyBindingManager) Add(accelerator string, callback func(window Window)) {
kbm.app.keyBindingsLock.Lock()
defer kbm.app.keyBindingsLock.Unlock()
kbm.app.keyBindings[accelerator] = callback
}
// Remove removes a key binding
func (kbm *KeyBindingManager) Remove(accelerator string) {
kbm.app.keyBindingsLock.Lock()
defer kbm.app.keyBindingsLock.Unlock()
delete(kbm.app.keyBindings, accelerator)
}
// Process processes a key binding and returns true if handled
func (kbm *KeyBindingManager) Process(accelerator string, window Window) bool {
kbm.app.keyBindingsLock.RLock()
callback, exists := kbm.app.keyBindings[accelerator]
kbm.app.keyBindingsLock.RUnlock()
if exists && callback != nil {
callback(window)
return true
}
return false
}
// KeyBinding represents a key binding with its accelerator and callback
type KeyBinding struct {
Accelerator string
Callback func(window Window)
}
// GetAll returns all registered key bindings as a slice
func (kbm *KeyBindingManager) GetAll() []*KeyBinding {
kbm.app.keyBindingsLock.RLock()
defer kbm.app.keyBindingsLock.RUnlock()
result := make([]*KeyBinding, 0, len(kbm.app.keyBindings))
for accelerator, callback := range kbm.app.keyBindings {
result = append(result, &KeyBinding{
Accelerator: accelerator,
Callback: callback,
})
}
return result
}
// HandleWindowKeyEvent handles window key events (internal use)
func (kbm *KeyBindingManager) handleWindowKeyEvent(event *windowKeyEvent) {
kbm.app.handleWindowKeyEvent(event)
}