Jacek Caban : conhost: Don't create bitmap for hidden windows.

Alexandre Julliard julliard at winehq.org
Wed Dec 16 15:53:58 CST 2020


Module: wine
Branch: master
Commit: 9e62d7d2576bd8b1db89bfc9b4056b528faeda5c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9e62d7d2576bd8b1db89bfc9b4056b528faeda5c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Dec 16 22:18:03 2020 +0100

conhost: Don't create bitmap for hidden windows.

Fixes performance issues in ConEmu.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/conhost/window.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/programs/conhost/window.c b/programs/conhost/window.c
index f5cf8e434c3..ed806c379d3 100644
--- a/programs/conhost/window.c
+++ b/programs/conhost/window.c
@@ -385,7 +385,7 @@ static void fill_mem_dc( struct console *console, const RECT *update )
     INT *dx;
     RECT r;
 
-    if (!console->window->font)
+    if (!console->window->font || !console->window->bitmap)
         return;
 
     if (!(line = malloc( (update->right - update->left + 1) * sizeof(WCHAR))) ) return;
@@ -479,7 +479,7 @@ static void update_window( struct console *console )
 
     if (console->window->sb_width != console->active->width ||
         console->window->sb_height != console->active->height ||
-        !console->window->bitmap)
+        (!console->window->bitmap && IsWindowVisible( console->win )))
     {
         console->window->sb_width  = console->active->width;
         console->window->sb_height = console->active->height;
@@ -2189,6 +2189,16 @@ static LRESULT WINAPI window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
             break;
         }
 
+    case WM_SHOWWINDOW:
+        if (wparam)
+            update_window( console );
+        else
+        {
+            if (console->window->bitmap) DeleteObject( console->window->bitmap );
+            console->window->bitmap = NULL;
+        }
+        break;
+
     case WM_KEYDOWN:
     case WM_KEYUP:
         if (console->window->in_selection)




More information about the wine-cvs mailing list