[PATCH 4/5] riched20: Remove direct accesses to the editor from the window proc.

Huw Davies huw at codeweavers.com
Wed Mar 24 04:08:32 CDT 2021


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/riched20/txthost.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/dlls/riched20/txthost.c b/dlls/riched20/txthost.c
index 2c832db6a76..81f925c0578 100644
--- a/dlls/riched20/txthost.c
+++ b/dlls/riched20/txthost.c
@@ -970,7 +970,6 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
                                        LPARAM lparam, BOOL unicode )
 {
     struct host *host;
-    ME_TextEditor *editor;
     HRESULT hr = S_OK;
     LRESULT res = 0;
 
@@ -999,7 +998,6 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
         return res;
     }
 
-    editor = host->editor;
     switch (msg)
     {
     case WM_CHAR:
@@ -1042,7 +1040,7 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
         RECT rc;
         HBRUSH brush;
 
-        if (GetUpdateRect( editor->hWnd, &rc, TRUE ))
+        if (GetUpdateRect( hwnd, &rc, TRUE ))
         {
             brush = CreateSolidBrush( ITextHost_TxGetSysColor( &host->ITextHost_iface, COLOR_WINDOW ) );
             FillRect( hdc, &rc, brush );
@@ -1182,47 +1180,49 @@ static LRESULT RichEditWndProc_common( HWND hwnd, UINT msg, WPARAM wparam,
     case WM_PAINT:
     {
         HDC hdc;
-        RECT rc;
+        RECT rc, client;
         PAINTSTRUCT ps;
         HBRUSH brush = CreateSolidBrush( ITextHost_TxGetSysColor( &host->ITextHost_iface, COLOR_WINDOW ) );
 
-        hdc = BeginPaint( editor->hWnd, &ps );
+        ITextHostImpl_TxGetClientRect( &host->ITextHost_iface, &client );
+
+        hdc = BeginPaint( hwnd, &ps );
         brush = SelectObject( hdc, brush );
 
         /* Erase area outside of the formatting rectangle */
-        if (ps.rcPaint.top < editor->rcFormat.top)
+        if (ps.rcPaint.top < client.top)
         {
             rc = ps.rcPaint;
-            rc.bottom = editor->rcFormat.top;
+            rc.bottom = client.top;
             PatBlt( hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY );
-            ps.rcPaint.top = editor->rcFormat.top;
+            ps.rcPaint.top = client.top;
         }
-        if (ps.rcPaint.bottom > editor->rcFormat.bottom)
+        if (ps.rcPaint.bottom > client.bottom)
         {
             rc = ps.rcPaint;
-            rc.top = editor->rcFormat.bottom;
+            rc.top = client.bottom;
             PatBlt( hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY );
-            ps.rcPaint.bottom = editor->rcFormat.bottom;
+            ps.rcPaint.bottom = client.bottom;
         }
-        if (ps.rcPaint.left < editor->rcFormat.left)
+        if (ps.rcPaint.left < client.left)
         {
             rc = ps.rcPaint;
-            rc.right = editor->rcFormat.left;
+            rc.right = client.left;
             PatBlt( hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY );
-            ps.rcPaint.left = editor->rcFormat.left;
+            ps.rcPaint.left = client.left;
         }
-        if (ps.rcPaint.right > editor->rcFormat.right)
+        if (ps.rcPaint.right > client.right)
         {
             rc = ps.rcPaint;
-            rc.left = editor->rcFormat.right;
+            rc.left = client.right;
             PatBlt( hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, PATCOPY );
-            ps.rcPaint.right = editor->rcFormat.right;
+            ps.rcPaint.right = client.right;
         }
 
         ITextServices_TxDraw( host->text_srv, DVASPECT_CONTENT, 0, NULL, NULL, hdc, NULL, NULL, NULL,
                               &ps.rcPaint, NULL, 0, TXTVIEW_ACTIVE );
         DeleteObject( SelectObject( hdc, brush ) );
-        EndPaint( editor->hWnd, &ps );
+        EndPaint( hwnd, &ps );
         return 0;
     }
     case EM_REPLACESEL:
@@ -1473,7 +1473,7 @@ static BOOL register_classes( HINSTANCE instance )
     wcW.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
     wcW.lpfnWndProc = RichEditWndProcW;
     wcW.cbClsExtra = 0;
-    wcW.cbWndExtra = sizeof(ME_TextEditor *);
+    wcW.cbWndExtra = sizeof(struct host *);
     wcW.hInstance = NULL; /* hInstance would register DLL-local class */
     wcW.hIcon = NULL;
     wcW.hCursor = LoadCursorW( NULL, (LPWSTR)IDC_IBEAM );
@@ -1499,7 +1499,7 @@ static BOOL register_classes( HINSTANCE instance )
     wcA.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
     wcA.lpfnWndProc = RichEditWndProcA;
     wcA.cbClsExtra = 0;
-    wcA.cbWndExtra = sizeof(ME_TextEditor *);
+    wcA.cbWndExtra = sizeof(struct host *);
     wcA.hInstance = NULL; /* hInstance would register DLL-local class */
     wcA.hIcon = NULL;
     wcA.hCursor = LoadCursorW( NULL, (LPWSTR)IDC_IBEAM );
-- 
2.23.0




More information about the wine-devel mailing list