[PATCH v2 6/8] shell32/autocomplete: Send messages directly to the AutoComplete listbox

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Sep 20 06:55:39 CDT 2018


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---

Split from previous patch, reduces needless overhead.

 dlls/shell32/autocomplete.c | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/dlls/shell32/autocomplete.c b/dlls/shell32/autocomplete.c
index 3326e31..d03feb5 100644
--- a/dlls/shell32/autocomplete.c
+++ b/dlls/shell32/autocomplete.c
@@ -108,6 +108,11 @@ static inline WNDPROC get_edit_proc(IAutoCompleteImpl *ac, HWND hwnd)
     return (edit_proc == ACEditSubclassProc) ? ac->wpOrigEditProc : edit_proc;
 }
 
+static inline LRESULT send_to_LB(IAutoCompleteImpl *ac, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+    return CallWindowProcW(ac->wpOrigLBoxProc, hwnd, msg, wParam, lParam);
+}
+
 static void set_text_and_selection(IAutoCompleteImpl *ac, HWND hwnd, WCHAR *text, WPARAM start, LPARAM end)
 {
     /* Send it directly to the edit control to match Windows XP behavior */
@@ -186,7 +191,7 @@ static void autocomplete_text(IAutoCompleteImpl *ac, HWND hwnd, enum autoappend_
     if (len + 1 != size)
         text = heap_realloc(text, (len + 1) * sizeof(WCHAR));
 
-    SendMessageW(ac->hwndListBox, LB_RESETCONTENT, 0, 0);
+    send_to_LB(ac, ac->hwndListBox, LB_RESETCONTENT, 0, 0);
 
     /* Set txtbackup to point to text itself (which must not be released) */
     heap_free(ac->txtbackup);
@@ -215,7 +220,7 @@ static void autocomplete_text(IAutoCompleteImpl *ac, HWND hwnd, enum autoappend_
             }
 
             if (ac->options & ACO_AUTOSUGGEST)
-                SendMessageW(ac->hwndListBox, LB_ADDSTRING, 0, (LPARAM)strs);
+                send_to_LB(ac, ac->hwndListBox, LB_ADDSTRING, 0, (LPARAM)strs);
 
             cpt++;
         }
@@ -228,8 +233,8 @@ static void autocomplete_text(IAutoCompleteImpl *ac, HWND hwnd, enum autoappend_
         if (cpt)
         {
             RECT r;
-            UINT height = SendMessageW(ac->hwndListBox, LB_GETITEMHEIGHT, 0, 0);
-            SendMessageW(ac->hwndListBox, LB_CARETOFF, 0, 0);
+            UINT height = send_to_LB(ac, ac->hwndListBox, LB_GETITEMHEIGHT, 0, 0);
+            send_to_LB(ac, ac->hwndListBox, LB_CARETOFF, 0, 0);
             GetWindowRect(hwnd, &r);
             SetParent(ac->hwndListBox, HWND_DESKTOP);
             /* It seems that Windows XP displays 7 lines at most
@@ -310,24 +315,24 @@ static LRESULT ACEditSubclassProc_KeyDown(IAutoCompleteImpl *ac, HWND hwnd, UINT
             else
             {
                 INT count, sel;
-                count = SendMessageW(ac->hwndListBox, LB_GETCOUNT, 0, 0);
+                count = send_to_LB(ac, ac->hwndListBox, LB_GETCOUNT, 0, 0);
 
                 /* Change the selection */
-                sel = SendMessageW(ac->hwndListBox, LB_GETCURSEL, 0, 0);
+                sel = send_to_LB(ac, ac->hwndListBox, LB_GETCURSEL, 0, 0);
                 if (wParam == VK_UP)
                     sel = ((sel - 1) < -1) ? count - 1 : sel - 1;
                 else
                     sel = ((sel + 1) >= count) ? -1 : sel + 1;
-                SendMessageW(ac->hwndListBox, LB_SETCURSEL, sel, 0);
+                send_to_LB(ac, ac->hwndListBox, LB_SETCURSEL, sel, 0);
                 if (sel >= 0)
                 {
                     WCHAR *msg;
                     UINT len;
 
-                    len = SendMessageW(ac->hwndListBox, LB_GETTEXTLEN, sel, 0);
+                    len = send_to_LB(ac, ac->hwndListBox, LB_GETTEXTLEN, sel, 0);
                     if (!(msg = heap_alloc((len + 1) * sizeof(WCHAR))))
                         return 0;
-                    len = SendMessageW(ac->hwndListBox, LB_GETTEXT, sel, (LPARAM)msg);
+                    len = send_to_LB(ac, ac->hwndListBox, LB_GETTEXT, sel, (LPARAM)msg);
                     set_text_and_selection(ac, hwnd, msg, len, len);
                     heap_free(msg);
                 }
@@ -414,23 +419,23 @@ static LRESULT APIENTRY ACLBoxSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam,
 
     switch (uMsg) {
         case WM_MOUSEMOVE:
-            sel = SendMessageW(hwnd, LB_ITEMFROMPOINT, 0, lParam);
-            SendMessageW(hwnd, LB_SETCURSEL, sel, 0);
+            sel = send_to_LB(This, hwnd, LB_ITEMFROMPOINT, 0, lParam);
+            send_to_LB(This, hwnd, LB_SETCURSEL, sel, 0);
             break;
         case WM_LBUTTONDOWN:
-            sel = SendMessageW(hwnd, LB_GETCURSEL, 0, 0);
+            sel = send_to_LB(This, hwnd, LB_GETCURSEL, 0, 0);
             if (sel < 0)
                 break;
-            len = SendMessageW(This->hwndListBox, LB_GETTEXTLEN, sel, 0);
+            len = send_to_LB(This, hwnd, LB_GETTEXTLEN, sel, 0);
             if (!(msg = heap_alloc((len + 1) * sizeof(WCHAR))))
                 break;
-            len = SendMessageW(hwnd, LB_GETTEXT, sel, (LPARAM)msg);
+            len = send_to_LB(This, hwnd, LB_GETTEXT, sel, (LPARAM)msg);
             set_text_and_selection(This, This->hwndEdit, msg, 0, len);
             ShowWindow(hwnd, SW_HIDE);
             heap_free(msg);
             break;
         default:
-            return CallWindowProcW(This->wpOrigLBoxProc, hwnd, uMsg, wParam, lParam);
+            return send_to_LB(This, hwnd, uMsg, wParam, lParam);
     }
     return 0;
 }
@@ -749,14 +754,14 @@ static HRESULT WINAPI IAutoCompleteDropDown_fnGetDropDownStatus(
         if (dropped) {
             int sel;
 
-            sel = SendMessageW(This->hwndListBox, LB_GETCURSEL, 0, 0);
+            sel = send_to_LB(This, This->hwndListBox, LB_GETCURSEL, 0, 0);
             if (sel >= 0)
             {
                 DWORD len;
 
-                len = SendMessageW(This->hwndListBox, LB_GETTEXTLEN, sel, 0);
+                len = send_to_LB(This, This->hwndListBox, LB_GETTEXTLEN, sel, 0);
                 *ppwszString = CoTaskMemAlloc((len+1)*sizeof(WCHAR));
-                SendMessageW(This->hwndListBox, LB_GETTEXT, sel, (LPARAM)*ppwszString);
+                send_to_LB(This, This->hwndListBox, LB_GETTEXT, sel, (LPARAM)*ppwszString);
             }
             else
                 *ppwszString = NULL;
-- 
1.9.1




More information about the wine-devel mailing list