| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { restartBlink } from "./selection.js"
- import { webkit } from "../util/browser.js"
- import { addClass, rmClass } from "../util/dom.js"
- import { signal } from "../util/event.js"
- export function ensureFocus(cm) {
- if (!cm.hasFocus()) {
- cm.display.input.focus()
- if (!cm.state.focused) onFocus(cm)
- }
- }
- export function delayBlurEvent(cm) {
- cm.state.delayingBlurEvent = true
- setTimeout(() => { if (cm.state.delayingBlurEvent) {
- cm.state.delayingBlurEvent = false
- if (cm.state.focused) onBlur(cm)
- } }, 100)
- }
- export function onFocus(cm, e) {
- if (cm.state.delayingBlurEvent && !cm.state.draggingText) cm.state.delayingBlurEvent = false
- if (cm.options.readOnly == "nocursor") return
- if (!cm.state.focused) {
- signal(cm, "focus", cm, e)
- cm.state.focused = true
- addClass(cm.display.wrapper, "CodeMirror-focused")
- // This test prevents this from firing when a context
- // menu is closed (since the input reset would kill the
- // select-all detection hack)
- if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
- cm.display.input.reset()
- if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730
- }
- cm.display.input.receivedFocus()
- }
- restartBlink(cm)
- }
- export function onBlur(cm, e) {
- if (cm.state.delayingBlurEvent) return
- if (cm.state.focused) {
- signal(cm, "blur", cm, e)
- cm.state.focused = false
- rmClass(cm.display.wrapper, "CodeMirror-focused")
- }
- clearInterval(cm.display.blinker)
- setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150)
- }
|