other than CBS_SIMPLE, parent of listbox is set to desktop.
- In CBDropDown. ComboBox uses only first item to calculate height of
dropped listbox. Also if listbox is empty its height is unmodified
(previously it was set to 0).
- Added correct handling of WM_GETDLGCODE and WM_(SYS)KEYDOWN messages.
- General clean-up. Message order is now more precise (at least
notifications to client); listbox - combobox interaction has slight
differences comparing to Windows.
- Edit control uses undocumented window style 0x0200 to detect is it a part
of combobox. If so it calls GetDlgItem(hwndCombo, 1000) to get ComboLBox
window handle (see comments for combo.c below).
- EDIT_CheckCombo - modified for correct handling of keyboard messages.
- Processing of WM_GETDLGCODE and WM_CHAR for VK_RETURN and VK_ESCAPE
depends on whether listbox is dropped down. This prevents closing of dialog
if listbox is dropped down and allows combobox to process these keyboard
messages properly.
- When user clicks outside of dropped listbox, original selection must be
restored.
- ComboLBox has caret_on = FALSE on creation, that's why combobox sends
LB_CARETON message before dropping listbox down (but only for
CBS_DROPDOWNLIST - I don't now why).
Sheri Steeves
Haithem Hmida
- Height of the listbox should be adjust when LBS_OWNERDRAWFIXED is set
and not if LBS_OWNERDRAWVARIABLE is set, previously it was not adjusting
the size in both cases.
- When the caret index change, items repainting need tp be in this
order
a) Paint old caret item without the focus
b) Paint old caret item without the selection
c) Paint new caret item with the selection
d) Paint new caret item with the focus.
- When repainting the listbox, we should paint all items regarding if
they are slected or not and then paint after the focus item. So focus
item will end out being painted twice. (That's what Windows does).
Static controls weren't receiving WM_LBUTTONDBLCLK messages because the
Static window class was registered without the CS_DBLCLKS style (which it
has in Windows).
- Edit text must be selected only if CB is in focus.
- If CB has edit control we have to call CBUpdateEdit to update its
contents. Invalidating textRect will not force updating of child
edit control, obviously.
- We have to protect ourselves from changing selection in listbox when
we receive listbox notification. So LBN_SELCHANGE -> CBUpdateEdit ->
EN_CHANGE will not reselect item in the lisbox.
When you click on an icon to open a combo box, you would expect it to
be enabled so you can choose something in it. In Wine this was not
guaranteed since your default flags could get lost in the process-heap
of the application.
- Added handling of WM_MOUSEACTIVATE message
- Added in_focus field to internal listbox's structure. This flag is set on
receiving WM_SETFOCUS message and is reseted on WM_KILLFOCUS. All calls to
GetFocus function were replaced with checks of this flag.
- In LISTBOX_HandleLButtonDown: focus is set only if 'in_focus' flag is
clear