diff --git a/src/UI/Focus.re b/src/UI/Focus.re index 9a6d2cf25..6dbe7685e 100644 --- a/src/UI/Focus.re +++ b/src/UI/Focus.re @@ -10,6 +10,8 @@ let focused = ref(None); module Log = (val Log.withNamespace("Revery.UI.Focus")); +let getFocused = () => focused^; + /* Should happen when user clicks anywhere where no focusable node exists */ let loseFocus = () => { Log.trace("loseFocus()"); @@ -23,12 +25,6 @@ let loseFocus = () => { // If there is an active window, with text input active, turn off text input }; -let focusWithoutBlur = (node: Node.node) => { - Log.trace("focus()"); - node#handleEvent(Focus); - focused := Some({handler: node#handleEvent, id: node#getInternalId()}); -}; - let isFocused = (node: Node.node) => switch (focused^) { | Some({id, _}) => node#getInternalId() == id @@ -39,5 +35,8 @@ let isFocused = (node: Node.node) => let focus = (node: Node.node) => if (!isFocused(node)) { loseFocus(); - focusWithoutBlur(node); + + Log.trace("focus()"); + node#handleEvent(Focus); + focused := Some({handler: node#handleEvent, id: node#getInternalId()}); }; diff --git a/src/UI/Focus.rei b/src/UI/Focus.rei new file mode 100644 index 000000000..90aab7703 --- /dev/null +++ b/src/UI/Focus.rei @@ -0,0 +1,15 @@ +open NodeEvents; + +type active = { + handler: event => unit, + id: int, +}; +type focused = ref(option(active)); + +let getFocused: unit => option(active); + +let loseFocus: unit => unit; + +let isFocused: Node.node => bool; + +let focus: Node.node => unit; diff --git a/src/UI/Keyboard.re b/src/UI/Keyboard.re index 4712a4adc..af665c225 100644 --- a/src/UI/Keyboard.re +++ b/src/UI/Keyboard.re @@ -2,7 +2,7 @@ open Revery_Core; open NodeEvents; let dispatch = (event: Revery_Core.Events.internalKeyboardEvent) => { - let focused = Focus.focused^; + let focused = Focus.getFocused(); switch (focused) { | None => ()