Rendering problem when scrolling license agreement in Picasa installer

Rein Klazes wijn at wanadoo.nl
Mon Sep 26 08:03:30 CDT 2005


On Sun, 18 Sep 2005 14:03:39 -0700, you wrote:

>http://bugs.winehq.org/show_bug.cgi?id=3348
>describes a scrolling problem that is probably pretty
>easy to fix.
>
>The nullsoft(?) installer used by picasa 2
>seems to have a problem with text scrolling
>in the latest snapshot of wine.  Scrolling
>using the keyboard works, but scrolling by
>clicking on the arrows of the scrollbar
>screws up the new text.
>
>I have a sneaking suspicion this affects other
>apps.  Is this a known problem already?

Bug in riched20.dll: the window is repainted before the internal state
of the control is updated.

Change log:
dlls/riched20	: editor.c
When scrolling, first update the new position of the control before
calling UpdateWindow().

Rein.
-------------- next part --------------
--- wine/dlls/riched20/editor.c	2005-09-20 10:46:42.000000000 +0200
+++ mywine/dlls/riched20/editor.c	2005-09-26 10:04:38.000000000 +0200
@@ -1097,7 +1097,7 @@ LRESULT WINAPI RichEditANSIWndProc(HWND 
   SCROLLINFO si;
   ME_TextEditor *editor = (ME_TextEditor *)GetWindowLongW(hWnd, 0);
   
-  TRACE("hWnd %p msg %d (%s) %08x %08lx\n",
+  TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
         hWnd, msg, get_msg_name(msg), wParam, lParam);
   
   switch(msg) {
@@ -1359,13 +1359,14 @@ LRESULT WINAPI RichEditANSIWndProc(HWND 
     if (nPos<0)
       nPos = 0;
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     return TRUE; /* Should return false if a single line richedit control */
   }
@@ -1849,13 +1850,14 @@ LRESULT WINAPI RichEditANSIWndProc(HWND 
       break;
     }
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     break;
   }
@@ -1872,13 +1874,14 @@ LRESULT WINAPI RichEditANSIWndProc(HWND 
     if (nPos<0)
       nPos = 0;
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     break;
   }
-------------- next part --------------



More information about the wine-devel mailing list