From 3071db5eb4f45e0d7949f80b117921721a7651c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wiktor=20Obr=C4=99bski?= Date: Thu, 30 Jan 2025 07:51:42 +0100 Subject: [PATCH] Fix Edit Field long lines changing text cursor behaviour --- library/lua/gui/widgets/edit_field.lua | 1 - library/lua/gui/widgets/text_area.lua | 10 +++++++++- test/library/gui/widgets.TextArea.lua | 21 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/library/lua/gui/widgets/edit_field.lua b/library/lua/gui/widgets/edit_field.lua index f2a4b9dc2b..7e7ff46a3d 100644 --- a/library/lua/gui/widgets/edit_field.lua +++ b/library/lua/gui/widgets/edit_field.lua @@ -114,7 +114,6 @@ function EditField:init() self:setFocus(true) end - self.start_pos = 1 self.cursor = #self.text + 1 self.ignore_keys = self.ignore_keys or {} diff --git a/library/lua/gui/widgets/text_area.lua b/library/lua/gui/widgets/text_area.lua index c906bf9223..2dd722ba55 100644 --- a/library/lua/gui/widgets/text_area.lua +++ b/library/lua/gui/widgets/text_area.lua @@ -69,7 +69,15 @@ function TextArea:setText(text) self:getCursor() ) - return self.text_area:setText(text) + self.text_area:setText(text) + + if self.one_line_mode then + self.render_start_x = 1 + local cursor = self:getCursor() + if cursor then + self:setCursor(math.min(self:getCursor(), #text + 1)) + end + end end function TextArea:getCursor() diff --git a/test/library/gui/widgets.TextArea.lua b/test/library/gui/widgets.TextArea.lua index 8212763237..a5748afd5f 100644 --- a/test/library/gui/widgets.TextArea.lua +++ b/test/library/gui/widgets.TextArea.lua @@ -3391,3 +3391,24 @@ function test.should_scroll_horizontally_in_one_line_mode() screen:dismiss() end + +function test.should_reset_horizontal_in_one_line_mode() + local text_area, screen, window, widget = arrange_textarea({ + w=40, + one_line_mode=true + }) + + local text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque dignissim volutpat orci, sed' + + widget:setText(text) + + widget:setCursor(#text + 1) + + expect.eq(read_rendered_text(text_area), text:sub(-39) .. '_') + + widget:setText('Lorem ipsum') + + expect.eq(read_rendered_text(text_area), 'Lorem ipsum_') + + screen:dismiss() +end