mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
all: [API] replace tag parameter of Source.Event with per-filter tags
Until now, every event has had a particular target. We're about to simplify key event delivery to match the first matching filter, so there is no longer a global meaning to the tag argument to Source.Event. Add fields to filters to specify their target tags. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+6
-3
@@ -148,13 +148,16 @@ func (b *Clickable) Update(gtx layout.Context) (Click, bool) {
|
||||
}
|
||||
}
|
||||
filters := []event.Filter{
|
||||
key.FocusFilter{},
|
||||
key.FocusFilter{Target: b},
|
||||
}
|
||||
if b.focused {
|
||||
filters = append(filters, key.Filter{Name: key.NameReturn}, key.Filter{Name: key.NameSpace})
|
||||
filters = append(filters,
|
||||
key.Filter{Target: b, Name: key.NameReturn},
|
||||
key.Filter{Target: b, Name: key.NameSpace},
|
||||
)
|
||||
}
|
||||
for {
|
||||
e, ok := gtx.Event(b, filters...)
|
||||
e, ok := gtx.Event(filters...)
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ func (d *Draggable) Update(gtx layout.Context) (mime string, requested bool) {
|
||||
d.pos = pos
|
||||
|
||||
for {
|
||||
e, ok := gtx.Event(d, transfer.SourceFilter{Type: d.Type})
|
||||
e, ok := gtx.Event(transfer.SourceFilter{Target: d, Type: d.Type})
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
+4
-4
@@ -35,7 +35,7 @@ func TestDraggable(t *testing.T) {
|
||||
stack.Pop()
|
||||
|
||||
drag.Update(gtx)
|
||||
r.Event(tgt, transfer.TargetFilter{Type: drag.Type})
|
||||
r.Event(transfer.TargetFilter{Target: tgt, Type: drag.Type})
|
||||
r.Frame(gtx.Ops)
|
||||
r.Queue(
|
||||
pointer.Event{
|
||||
@@ -53,10 +53,10 @@ func TestDraggable(t *testing.T) {
|
||||
)
|
||||
ofr := &offer{data: "hello"}
|
||||
drag.Update(gtx)
|
||||
r.Event(tgt, transfer.TargetFilter{Type: drag.Type})
|
||||
r.Event(transfer.TargetFilter{Target: tgt, Type: drag.Type})
|
||||
drag.Offer(gtx, "file", ofr)
|
||||
|
||||
e, ok := r.Event(tgt, transfer.TargetFilter{Type: drag.Type})
|
||||
e, ok := r.Event(transfer.TargetFilter{Target: tgt, Type: drag.Type})
|
||||
if !ok {
|
||||
t.Fatalf("expected event")
|
||||
}
|
||||
@@ -67,7 +67,7 @@ func TestDraggable(t *testing.T) {
|
||||
if ofr.closed {
|
||||
t.Error("offer closed prematurely")
|
||||
}
|
||||
e, ok = r.Event(tgt, transfer.TargetFilter{Type: drag.Type})
|
||||
e, ok = r.Event(transfer.TargetFilter{Target: tgt, Type: drag.Type})
|
||||
if !ok {
|
||||
t.Fatalf("expected event")
|
||||
}
|
||||
|
||||
+23
-23
@@ -337,50 +337,50 @@ func (e *Editor) processKey(gtx layout.Context) {
|
||||
if e.text.Changed() {
|
||||
e.events = append(e.events, ChangeEvent{})
|
||||
}
|
||||
filters := []event.Filter{key.FocusFilter{}, transfer.TargetFilter{Type: "application/text"}}
|
||||
filters := []event.Filter{key.FocusFilter{Target: e}, transfer.TargetFilter{Target: e, Type: "application/text"}}
|
||||
if e.focused {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameEnter, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NameReturn, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameEnter, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameReturn, Optional: key.ModShift},
|
||||
|
||||
key.Filter{Name: "Z", Required: key.ModShortcut, Optional: key.ModShift},
|
||||
key.Filter{Name: "C", Required: key.ModShortcut},
|
||||
key.Filter{Name: "V", Required: key.ModShortcut},
|
||||
key.Filter{Name: "X", Required: key.ModShortcut},
|
||||
key.Filter{Name: "A", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "Z", Required: key.ModShortcut, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: "C", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "V", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "X", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "A", Required: key.ModShortcut},
|
||||
|
||||
key.Filter{Name: key.NameDeleteBackward, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameDeleteForward, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameDeleteBackward, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameDeleteForward, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
|
||||
key.Filter{Name: key.NameHome, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NameEnd, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NamePageDown, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NamePageUp, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameHome, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameEnd, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NamePageDown, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NamePageUp, Optional: key.ModShift},
|
||||
)
|
||||
caret, _ := e.text.Selection()
|
||||
if caret > 0 {
|
||||
if gtx.Locale.Direction.Progression() == system.FromOrigin {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
)
|
||||
} else {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
)
|
||||
}
|
||||
}
|
||||
if caret < e.text.Len() {
|
||||
if gtx.Locale.Direction.Progression() == system.FromOrigin {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
)
|
||||
} else {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -388,7 +388,7 @@ func (e *Editor) processKey(gtx layout.Context) {
|
||||
// adjust keeps track of runes dropped because of MaxLen.
|
||||
var adjust int
|
||||
for {
|
||||
ke, ok := gtx.Event(e, filters...)
|
||||
ke, ok := gtx.Event(filters...)
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
+6
-3
@@ -65,13 +65,16 @@ func (e *Enum) Update(gtx layout.Context) bool {
|
||||
}
|
||||
}
|
||||
filters := []event.Filter{
|
||||
key.FocusFilter{},
|
||||
key.FocusFilter{Target: &state.tag},
|
||||
}
|
||||
if e.focused && e.focus == state.key {
|
||||
filters = append(filters, key.Filter{Name: key.NameReturn}, key.Filter{Name: key.NameSpace})
|
||||
filters = append(filters,
|
||||
key.Filter{Target: &state.tag, Name: key.NameReturn},
|
||||
key.Filter{Target: &state.tag, Name: key.NameSpace},
|
||||
)
|
||||
}
|
||||
for {
|
||||
ev, ok := gtx.Event(&state.tag, filters...)
|
||||
ev, ok := gtx.Event(filters...)
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ func ExampleDraggable_Layout() {
|
||||
|
||||
// Check for the received data.
|
||||
for {
|
||||
ev, ok := gtx.Event(&drop, transfer.TargetFilter{Type: mime})
|
||||
ev, ok := gtx.Event(transfer.TargetFilter{Target: &drop, Type: mime})
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
+13
-13
@@ -302,27 +302,27 @@ func (e *Selectable) clickDragEvents(gtx layout.Context) []event.Event {
|
||||
|
||||
func (e *Selectable) processKey(gtx layout.Context) {
|
||||
filters := []event.Filter{
|
||||
key.FocusFilter{},
|
||||
key.FocusFilter{Target: e},
|
||||
}
|
||||
if e.focused {
|
||||
filters = append(filters,
|
||||
key.Filter{Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift},
|
||||
|
||||
key.Filter{Name: key.NamePageUp, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NamePageDown, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NameEnd, Optional: key.ModShift},
|
||||
key.Filter{Name: key.NameHome, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NamePageUp, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NamePageDown, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameEnd, Optional: key.ModShift},
|
||||
key.Filter{Target: e, Name: key.NameHome, Optional: key.ModShift},
|
||||
|
||||
key.Filter{Name: "C", Required: key.ModShortcut},
|
||||
key.Filter{Name: "X", Required: key.ModShortcut},
|
||||
key.Filter{Name: "A", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "C", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "X", Required: key.ModShortcut},
|
||||
key.Filter{Target: e, Name: "A", Required: key.ModShortcut},
|
||||
)
|
||||
}
|
||||
for {
|
||||
ke, ok := gtx.Event(e, filters...)
|
||||
ke, ok := gtx.Event(filters...)
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user