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);
}