Skip to content

Commit

Permalink
Merge pull request #5220 from wiktor-obrebski/fix/edit-field-focus
Browse files Browse the repository at this point in the history
Make EditField grab focus instead of proxying it to children
  • Loading branch information
myk002 authored Jan 25, 2025
2 parents bcfdaa1 + 80f840b commit 883a504
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 deletions.
28 changes: 15 additions & 13 deletions library/lua/gui/widgets/edit_field.lua
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ function TextFieldArea:getPreferredFocusState()
return false
end

function TextFieldArea:hasFocus()
return self.parent_view.focus
end

function TextFieldArea:setFocus(focus)
return self.parent_view:setFocus(focus)
end
----------------
-- Edit field --
----------------
Expand Down Expand Up @@ -128,8 +135,6 @@ function EditField:init()
key = self.key,
on_submit = self.on_submit,
on_submit2 = self.on_submit2,
on_focus = self:callback('onFocus'),
on_unfocus = self.on_unfocus,
ignore_keys={
table.unpack(self.ignore_keys)
},
Expand All @@ -142,12 +147,10 @@ function EditField:init()
self.text_area.frame.l = self.label:getTextWidth()
end

function EditField:onFocus()
function EditField:setFocus(focus)
self.saved_text = self.text

if self.on_focus then
self:on_focus()
end
return EditField.super.setFocus(self, focus)
end

function EditField:getPreferredFocusState()
Expand Down Expand Up @@ -187,10 +190,6 @@ function EditField:onTextAreaTextChange(text)
end
end

function EditField:setFocus(focus)
self.text_area:setFocus(focus)
end

function EditField:insert(text)
local old = self.text
self:setText(
Expand All @@ -200,12 +199,15 @@ function EditField:insert(text)
end

function EditField:onInput(keys)
if not self.text_area.focus then
return self:inputToSubviews(keys)
if keys._MOUSE_L and self:getMousePos() then
self:setFocus(true)
end

if not self.focus then
return self.label:onInput(keys)
end

if self.key and (keys.LEAVESCREEN or keys._MOUSE_R) then
self:setText(self.saved_text)
self:setFocus(false)
return true
end
Expand Down
6 changes: 5 additions & 1 deletion library/lua/gui/widgets/text_area.lua
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ function TextArea:clearHistory()
return self.text_area.history:clear()
end

function TextArea:hasFocus()
return self.focus
end

function TextArea:onCursorChange(cursor, old_cursor)
local x, y = self.text_area.wrapped_text:indexToCoords(
self.text_area.cursor
Expand Down Expand Up @@ -197,7 +201,7 @@ function TextArea:onInput(keys)
self:setFocus(true)
end

if not self.focus then
if not self:hasFocus() then
return false
end

Expand Down
3 changes: 1 addition & 2 deletions library/lua/gui/widgets/text_area/text_area_content.lua
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ function TextAreaContent:onRenderBody(dc)
local show_focus = not self.enable_cursor_blink
or (
not self:hasSelection()
and self.parent_view.focus
and self.parent_view:hasFocus()
and gui.blink_visible(530)
)

Expand Down Expand Up @@ -486,7 +486,6 @@ function TextAreaContent:onMouseInput(keys)
end

elseif keys._MOUSE_L_DOWN then

local mouse_x, mouse_y = self:getMousePos()

if mouse_x and mouse_y then
Expand Down

0 comments on commit 883a504

Please sign in to comment.