[PATCH v2 1/2] user32/edit: In EM_POSFROMCHAR return correct position for empty lines
Fabian Maurer
dark.shadow4 at web.de
Wed Jun 12 16:30:36 CDT 2019
Fix with permission from ROS Jira
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47305
Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
---
dlls/user32/edit.c | 2 +-
dlls/user32/tests/edit.c | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 3c5331f9dc..6c758c3911 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -1102,7 +1102,7 @@ static LRESULT EDIT_EM_PosFromChar(EDITSTATE *es, INT index, BOOL after_wrap)
x -= es->x_offset;
}
else
- x = es->x_offset;
+ x = (lw > 0 ? es->x_offset : -es->x_offset);
if (es->style & ES_RIGHT)
x = w - (lw - x);
diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c
index d0374c02a3..b9ca2617c6 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -1142,6 +1142,8 @@ static void test_edit_control_4(void)
int lo, hi, mid;
int ret;
int i;
+ HDC dc;
+ SIZE size;
trace("EDIT: Test EM_CHARFROMPOS and EM_POSFROMCHAR\n");
hwEdit = create_editcontrol(ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0);
@@ -1251,6 +1253,21 @@ static void test_edit_control_4(void)
ret = SendMessageA(hwEdit, EM_POSFROMCHAR, 2, 0);
ok(-1 == ret, "expected -1 got %d\n", ret);
DestroyWindow(hwEdit);
+
+ /* Test newline when the edit control is scrolled to the right */
+
+ hwEdit = create_editcontrol(ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0);
+ SendMessageA(hwEdit, WM_SETTEXT, 0, (LPARAM)"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\r\n\r\n");
+ SendMessageA(hwEdit, EM_SETSEL, 40, 40);
+
+ dc = GetDC(hwEdit);
+ GetTextExtentPoint32A(dc, "w", 1, &size);
+ ReleaseDC(hwEdit, dc);
+ lo = (short)LOWORD(SendMessageA(hwEdit, EM_POSFROMCHAR, 42, 0));
+ ret = (short)LOWORD(SendMessageA(hwEdit, EM_POSFROMCHAR, 40, 0));
+ ret += size.cx * (-40); /* Calculate expected position, 40 characters to the left */
+ ok(ret == lo, "expected %d got %d\n", ret, lo);
+ DestroyWindow(hwEdit);
}
/* Test if creating edit control without ES_AUTOHSCROLL and ES_AUTOVSCROLL
--
2.22.0
More information about the wine-devel
mailing list