user32: Don't do the painting if combobox is not visible in CBPaintText

Piotr Caban <[email protected]>
Newsgroups gmane.comp.emulators.wine.patches
Message-ID <[email protected]>
This patch fixes regression reported in bug 43920.

Signed-off-by: Piotr Caban <[email protected]>
---
  dlls/user32/combo.c     |  2 +-
  dlls/user32/tests/msg.c | 19 +++++++++++++++++++
  2 files changed, 20 insertions(+), 1 deletion(-)
0001-user32-Don-t-do-the-painting-if-combobox-is-not-visibl.txt (text/x-patch, 1.8 KB)
diff --git a/dlls/user32/combo.c b/dlls/user32/combo.c
index 149a495eb9..c43d726205 100644
--- a/dlls/user32/combo.c
+++ b/dlls/user32/combo.c
@@ -733,7 +733,7 @@ static void CBPaintText(
 	if( lphc->wState & CBF_FOCUSED )
            SendMessageW(lphc->hWndEdit, EM_SETSEL, 0, -1);
    }
-   else /* paint text field ourselves */
+   else if( IsWindowVisible( lphc->self )) /* paint text field ourselves */
    {
      HDC hdc = hdc_paint ? hdc_paint : GetDC(lphc->self);
      UINT itemState = ODS_COMBOBOXEDIT;
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 1b4f6fa525..10f4fbdbb8 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -6613,6 +6613,18 @@ static const struct message SetCurSelComboSeq[] =
     { 0 }
 };
 
+static const struct message SetCurSelComboSeq2[] =
+{
+    { CB_SETCURSEL, sent|wparam|lparam, 0, 0 },
+    { LB_SETCURSEL, sent|wparam|lparam, 0, 0 },
+    { LB_SETTOPINDEX, sent|wparam|lparam, 0, 0 },
+    { LB_GETCURSEL, sent|wparam|lparam, 0, 0 },
+    { LB_GETTEXTLEN, sent|wparam|lparam, 0, 0 },
+    { LB_GETTEXTLEN, sent|wparam|lparam|optional, 0, 0 }, /* TODO: it's sent on all Windows versions */
+    { LB_GETTEXT, sent|wparam, 0 },
+    { 0 }
+};
+
 static const struct message WmKeyDownComboSeq[] =
 {
     { WM_KEYDOWN, sent|wparam|lparam, VK_DOWN, 0 },
@@ -6939,6 +6951,13 @@ static void test_combobox_messages(void)
     log_all_parent_messages--;
     ok_sequence(SetCurSelComboSeq, "CB_SETCURSEL on a ComboBox", FALSE);
 
+    ShowWindow(combo, SW_HIDE);
+    flush_sequence();
+    log_all_parent_messages++;
+    SendMessageA(combo, CB_SETCURSEL, 0, 0);
+    log_all_parent_messages--;
+    ok_sequence(SetCurSelComboSeq2, "CB_SETCURSEL on a ComboBox", FALSE);
+
     DestroyWindow(combo);
     DestroyWindow(parent);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.