MCPcopy Create free account
hub / github.com/gioui/gio / processKey

Method processKey

widget/editor.go:357–486  ·  view source on GitHub ↗
(gtx layout.Context)

Source from the content-addressed store, hash-verified

355}
356
357func (e *Editor) processKey(gtx layout.Context) (EditorEvent, bool) {
358 if e.text.Changed() {
359 return ChangeEvent{}, true
360 }
361 caret, _ := e.text.Selection()
362 atBeginning := caret == 0
363 atEnd := caret == e.text.Len()
364 if gtx.Locale.Direction.Progression() != system.FromOrigin {
365 atEnd, atBeginning = atBeginning, atEnd
366 }
367 filters := []event.Filter{
368 key.FocusFilter{Target: e},
369 transfer.TargetFilter{Target: e, Type: "application/text"},
370 key.Filter{Focus: e, Name: key.NameEnter, Optional: key.ModShift},
371 key.Filter{Focus: e, Name: key.NameReturn, Optional: key.ModShift},
372
373 key.Filter{Focus: e, Name: "Z", Required: key.ModShortcut, Optional: key.ModShift},
374 key.Filter{Focus: e, Name: "C", Required: key.ModShortcut},
375 key.Filter{Focus: e, Name: "V", Required: key.ModShortcut},
376 key.Filter{Focus: e, Name: "X", Required: key.ModShortcut},
377 key.Filter{Focus: e, Name: "A", Required: key.ModShortcut},
378
379 key.Filter{Focus: e, Name: key.NameDeleteBackward, Optional: key.ModShortcutAlt | key.ModShift},
380 key.Filter{Focus: e, Name: key.NameDeleteForward, Optional: key.ModShortcutAlt | key.ModShift},
381
382 key.Filter{Focus: e, Name: key.NameHome, Optional: key.ModShortcut | key.ModShift},
383 key.Filter{Focus: e, Name: key.NameEnd, Optional: key.ModShortcut | key.ModShift},
384 key.Filter{Focus: e, Name: key.NamePageDown, Optional: key.ModShift},
385 key.Filter{Focus: e, Name: key.NamePageUp, Optional: key.ModShift},
386 condFilter(!atBeginning, key.Filter{Focus: e, Name: key.NameLeftArrow, Optional: key.ModShortcutAlt | key.ModShift}),
387 condFilter(!atBeginning, key.Filter{Focus: e, Name: key.NameUpArrow, Optional: key.ModShortcutAlt | key.ModShift}),
388 condFilter(!atEnd, key.Filter{Focus: e, Name: key.NameRightArrow, Optional: key.ModShortcutAlt | key.ModShift}),
389 condFilter(!atEnd, key.Filter{Focus: e, Name: key.NameDownArrow, Optional: key.ModShortcutAlt | key.ModShift}),
390 }
391 // adjust keeps track of runes dropped because of MaxLen.
392 var adjust int
393 for {
394 ke, ok := gtx.Event(filters...)
395 if !ok {
396 break
397 }
398 e.blinkStart = gtx.Now
399 switch ke := ke.(type) {
400 case key.FocusEvent:
401 // Reset IME state.
402 e.ime.imeState = imeState{}
403 e.ime.composition = key.Range{Start: -1, End: -1}
404 if ke.Focus && !e.ReadOnly {
405 gtx.Execute(key.SoftKeyboardCmd{Show: true})
406 }
407 case key.CompositionEvent:
408 e.ime.composition = key.Range(ke)
409 case key.Event:
410 if !gtx.Focused(e) || ke.State != key.Press {
411 break
412 }
413 if !e.ReadOnly && e.Submit && (ke.Name == key.NameReturn || ke.Name == key.NameEnter) {
414 if !ke.Modifiers.Contain(key.ModShift) {

Callers 1

processEventsMethod · 0.95

Calls 15

commandMethod · 0.95
updateSnippetMethod · 0.95
replaceMethod · 0.95
InsertMethod · 0.95
RangeStruct · 0.92
condFilterFunction · 0.85
ProgressionMethod · 0.80
ExecuteMethod · 0.80
ChangedMethod · 0.65
EventMethod · 0.65
SelectionMethod · 0.45
LenMethod · 0.45

Tested by

no test coverage detected