Hi,
Can I get some feedback on this please?
Best Regards Alistair Leslie-Hughes
"Alistair Leslie-Hughes" leslie_alistair@hotmail.com wrote in message news:496DB2F4.2020505@hotmail.com...
Hi,
Based on a patch by David Hedberg and later Austin English. Fixes bug 1517. Corrected test and corrected tab/space issues.
Changelog: user32: Check for bad scroll value and fix return values in EDIT_EM_Scroll
Best Regards Alistair Leslie-Hughes
--------------------------------------------------------------------------------
From 398cc9b765070ee10dd429b55f6c3b0cdb5bcc46 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Wed, 14 Jan 2009 20:33:08 +1100 Subject: [PATCH] Check for bad scroll value and fix return values in EDIT_EM_Scroll To: wine-patches wine-patches@winehq.org
dlls/user32/edit.c | 18 +++++++++++--- dlls/user32/tests/edit.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index 6914906..4cd1497 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -3430,13 +3430,23 @@ static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action) INT vlc = get_vertical_line_count(es); /* check if we are going to move too far */ if(es->y_offset + dy > es->line_count - vlc)
- dy = es->line_count - vlc - es->y_offset;
 
- {
 - dy = es->line_count - vlc - es->y_offset;
 - /* Make sure we're not trying to scroll backwards here */
 - if(es->y_offset + dy < 0)
 - dy = 0;
 - }
 
/* Notification is done in EDIT_EM_LineScroll */if(dy)
- /* Notification is done in EDIT_EM_LineScroll */
 - if(dy)
 EDIT_EM_LineScroll(es, 0, dy); }
- return MAKELONG((INT16)dy, (BOOL16)TRUE);
 
- if(dy)
 - return MAKELONG((INT16)dy, (BOOL16)TRUE);
 - else
 - return (LRESULT)FALSE;
 }
diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c index b1a9820..ec4759e 100644 --- a/dlls/user32/tests/edit.c +++ b/dlls/user32/tests/edit.c @@ -1205,6 +1205,60 @@ static void test_edit_control_5(void) DestroyWindow(hWnd); }
+static void test_edit_control_6(void) +{
- HWND hwEdit;
 - LONG r;
 - static const char *single_line_str = "a";
 - static const char *multiline_str = "Test\nText";
 - /* Check the return value when EM_SCROLL doesn't actually scroll
 anything. */
- hwEdit = CreateWindow(
 "EDIT",single_line_str,WS_VSCROLL | ES_MULTILINE,1, 1, 35, 35,NULL, NULL, hinst, NULL);- assert(hwEdit);
 - trace("EDIT: Scrolling down one page \n");
 - r = SendMessage(hwEdit, EM_SCROLL, SB_PAGEDOWN, 0);
 - ok(!r, "Returned %x\n", r);
 - trace("EDIT: Scrolling up one page \n");
 - r = SendMessage(hwEdit, EM_SCROLL, SB_PAGEUP, 0);
 - ok(!r, "Returned %x\n", r);
 - trace("EDIT: Scrolling up one line\n");
 - r = SendMessage(hwEdit, EM_SCROLL, SB_LINEUP, 0);
 - ok(!r, "Returned %x\n", r);
 - trace("EDIT: Scrolling down one line\n");
 - r = SendMessage(hwEdit, EM_SCROLL, SB_LINEDOWN, 0);
 - ok(!r, "Returned %x\n", r);
 - DestroyWindow (hwEdit);
 - /* Check for bug in wine where sending SB_PAGEDOWN causes
 EDIT_EM_Scroll to return a negative amount of scrolled lines. */- hwEdit = CreateWindow(
 "EDIT",multiline_str,ES_MULTILINE,0, 0, 50, 1000,NULL, NULL, hinst, NULL);- assert(hwEdit);
 - r = SendMessage(hwEdit, EM_SCROLL, SB_PAGEDOWN, 0);
 - ok(!r, "Returned %x\n", r);
 - DestroyWindow (hwEdit);
 +}
static void test_edit_control_limittext(void) { HWND hwEdit; @@ -2058,6 +2112,7 @@ START_TEST(edit) test_edit_control_3(); test_edit_control_4(); test_edit_control_5();
- test_edit_control_6(); test_edit_control_limittext(); test_margins(); test_margins_font_change();
 -- 1.5.4.3
--------------------------------------------------------------------------------