On Fri, Sep 28, 2018 at 02:44:11PM +0300, Gabriel Ivăncescu wrote:
@@ -229,6 +231,54 @@ static LRESULT change_selection(IAutoCompleteImpl *ac, HWND hwnd, UINT key) return 0; }
+static void aclist_expand(IAutoCompleteImpl *ac, WCHAR *txt) +{
- /* call IACList::Expand only when needed
'/' is allowed as a delim for unix paths */
- WCHAR c, *p, *last_delim, *old_txt = ac->txtbackup;
- size_t i = 0;
- /* skip the shared prefix */
- while ((c = tolowerW(txt[i])) == tolowerW(old_txt[i]))
- {
if (c == '\0') return;
i++;
- }
- /* they differ at this point, check for a delim further in txt */
- last_delim = NULL;
- for (p = &txt[i]; *p != '\0'; p++)
if (*p == '\\' || *p == '/')
last_delim = p;
- if (last_delim)
goto expand;
- /* txt has no delim after i, check for a delim further in old_txt */
- for (p = &old_txt[i]; *p != '\0'; p++)
if (*p == '\\' || *p == '/')
{
/* find the delim before i (if any) */
while (i--)
{
if (txt[i] == '\\' || txt[i] == '/')
{
last_delim = &txt[i];
goto expand;
}
}
break; /* Windows doesn't expand without a delim */
}
- /* they differ, but without any different delims, so no need to expand */
- return;
+expand:
- c = last_delim[1];
- last_delim[1] = '\0';
- IACList_Expand(ac->aclist, txt);
- last_delim[1] = c;
+}
This is going to need some work; trying to follow this code is just too hard.
Huw.