On Wed, Mar 20, 2019 at 03:40:33PM +0200, Gabriel Ivăncescu wrote:
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
This patch is needed for future patches and to implement some of the remaining options. Windows seems is using an owner-drawn virtual listview, and in our case, an owner-drawn LBS_NODATA listbox serves the same purpose (next patch).
Note that encapsulating the listbox inside a hwndListBoxOwner is needed regardless, because it is required to implement the resizing grip like on Windows, which has to be a sibling of the listbox. It cannot be made a child of the listbox because then it would scroll with it, and it has to clip against the listbox when it's a triangle (no scrollbar is visible).
I have outstanding patches that implement the grip, and this is the only proper way I found to implement it (I tried other methods but they didn't work out), so the owner window is definitely required anyway.
By the way, the LB_RESETCONTENT that's needed to prevent a very rare crash in ResetEnumerator is due to using listbox_strs added in this patch which is needed for LBS_NODATA. For this patch, it's just used for drawing, but in the next patch it is required and simplifies many other areas, and it happens only in out-of-memory conditions.
dlls/shell32/autocomplete.c | 139 ++++++++++++++++++++++++++++++------ 1 file changed, 118 insertions(+), 21 deletions(-)
You should be able to split this patch. First add the owner window then switch to using owner-drawn listbox.
Huw.