user32: Fix case where EM_SCROLL with page down results in trying to scroll up past the beginning.

This commit is contained in:
David Hedberg 2010-03-03 13:19:47 +01:00 committed by Alexandre Julliard
parent 598052b4ad
commit 5a1f8c57a8
2 changed files with 18 additions and 1 deletions

View File

@ -1632,7 +1632,7 @@ static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action)
INT vlc = get_vertical_line_count(es); INT vlc = get_vertical_line_count(es);
/* check if we are going to move too far */ /* check if we are going to move too far */
if(es->y_offset + dy > es->line_count - vlc) if(es->y_offset + dy > es->line_count - vlc)
dy = es->line_count - vlc - es->y_offset; dy = max(es->line_count - vlc, 0) - es->y_offset;
/* Notification is done in EDIT_EM_LineScroll */ /* Notification is done in EDIT_EM_LineScroll */
if(dy) { if(dy) {

View File

@ -1320,6 +1320,7 @@ static void test_edit_control_limittext(void)
static void test_edit_control_scroll(void) static void test_edit_control_scroll(void)
{ {
static const char *single_line_str = "a"; static const char *single_line_str = "a";
static const char *multiline_str = "Test\r\nText";
HWND hwEdit; HWND hwEdit;
LONG ret; LONG ret;
@ -1348,6 +1349,22 @@ static void test_edit_control_scroll(void)
ok(!ret, "Returned %x, expected 0.\n", ret); ok(!ret, "Returned %x, expected 0.\n", ret);
DestroyWindow (hwEdit); DestroyWindow (hwEdit);
/* SB_PAGEDOWN while at the beginning of a buffer with few lines
should not cause EM_SCROLL to return a negative value of
scrolled lines that would put us "before" the beginning. */
hwEdit = CreateWindow(
"EDIT",
multiline_str,
WS_VSCROLL | ES_MULTILINE,
0, 0, 100, 100,
NULL, NULL, hinst, NULL);
assert(hwEdit);
ret = SendMessage(hwEdit, EM_SCROLL, SB_PAGEDOWN, 0);
ok(!ret, "Returned %x, expected 0.\n", ret);
DestroyWindow (hwEdit);
} }
static void test_margins(void) static void test_margins(void)