Zhiyi Zhang (@zhiyi) commented about dlls/uxtheme/system.c:
/* If SetWindowTheme was used on the window, that overrides the class list passed to this function */ pszUseClassList = UXTHEME_GetWindowProperty(hwnd, atSubIdList, szClassBuff, ARRAY_SIZE(szClassBuff)); if(!pszUseClassList) pszUseClassList = pszClassList;
- if (pszUseClassList) + p = wcschr(pszClassList, ':'); + if (p) + { + /* If the application class is already set then fail */ + if (!pszAppName) + { + p++; + lstrcpynW(szAppBuff, pszUseClassList, min(p - pszUseClassList, 256)); + szAppBuff[p - pszUseClassList] = 0; + if (*p == ':') p++;
I am afraid this is wrong. You're only parsing the first app/class here. You should do the parsing in MSSTYLES_OpenThemeClass() instead. For example, OpenThemeData(hwnd, L"abc:def;explorer::treeview") succeeds. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4140#note_49624