47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package atspi
|
|
|
|
type deferredLiveRegion struct{ object, document ObjectID }
|
|
|
|
// No text or native handles survive the event. Completion re-reads the owned
|
|
// active region. Secure input, shutdown and document replacement retire it.
|
|
type deferredLiveRegionStore []deferredLiveRegion
|
|
|
|
func (store *deferredLiveRegionStore) remember(object, document ObjectID) {
|
|
if !object.Valid() || !document.Valid() {
|
|
return
|
|
}
|
|
for _, entry := range *store {
|
|
if entry.object == object {
|
|
return
|
|
}
|
|
}
|
|
if len(*store) == 32 {
|
|
*store = (*store)[1:]
|
|
}
|
|
*store = append(*store, deferredLiveRegion{object, document})
|
|
}
|
|
|
|
func (store *deferredLiveRegionStore) take(object ObjectID) (ObjectID, bool) {
|
|
for index, entry := range *store {
|
|
if entry.object == object {
|
|
*store = append((*store)[:index], (*store)[index+1:]...)
|
|
return entry.document, true
|
|
}
|
|
}
|
|
return ObjectID{}, false
|
|
}
|
|
|
|
func (store *deferredLiveRegionStore) forget_document(document ObjectID) {
|
|
kept := (*store)[:0]
|
|
for _, entry := range *store {
|
|
if entry.document != document {
|
|
kept = append(kept, entry)
|
|
}
|
|
}
|
|
*store = kept
|
|
}
|