Sync to Wine-20050930:
Alexandre Julliard <julliard(a)winehq.org>
- Specify 64-bit integers as double instead of long long in spec files
so that we get the correct number of arguments.
- We are no longer generating .dbg.c files.
Mike McCormack <mike(a)codeweavers.com>
- Fix gcc 4.0 warnings.
Gerald Pfeifer <gerald(a)pfeifer.com>
- #include <stdlib.h> to get abs() prototype.
Frank Richter <frank.richter(a)gmail.com>
- Remove shlwapi dependency.
Modified: trunk/reactos/lib/uxtheme/msstyles.c
Modified: trunk/reactos/lib/uxtheme/system.c
Modified: trunk/reactos/lib/uxtheme/uxtheme.spec
_____
Modified: trunk/reactos/lib/uxtheme/msstyles.c
--- trunk/reactos/lib/uxtheme/msstyles.c 2005-10-08 19:43:11 UTC
(rev 18357)
+++ trunk/reactos/lib/uxtheme/msstyles.c 2005-10-08 19:49:47 UTC
(rev 18358)
@@ -21,12 +21,11 @@
#include "config.h"
#include <stdarg.h>
+#include <stdlib.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
-#define NO_SHLWAPI_REG
-#include "shlwapi.h"
#include "winnls.h"
#include "wingdi.h"
#include "uxtheme.h"
@@ -35,6 +34,7 @@
#include "uxthemedll.h"
#include "msstyles.h"
+#include "wine/unicode.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
@@ -343,7 +343,7 @@
*iStateId = 0;
comp = sec;
/* Get the application name */
- tmp = StrChrW(comp, ':');
+ tmp = strchrW(comp, ':');
if(tmp) {
*tmp++ = 0;
tmp++;
@@ -351,19 +351,19 @@
comp = tmp;
}
- tmp = StrChrW(comp, '.');
+ tmp = strchrW(comp, '.');
if(tmp) {
*tmp++ = 0;
lstrcpynW(szClassName, comp, MAX_THEME_CLASS_NAME);
comp = tmp;
/* now get the part & state */
- tmp = StrChrW(comp, '(');
+ tmp = strchrW(comp, '(');
if(tmp) {
*tmp++ = 0;
lstrcpynW(part, comp, sizeof(part)/sizeof(part[0]));
comp = tmp;
/* now get the state */
- *StrChrW(comp, ')') = 0;
+ *strchrW(comp, ')') = 0;
lstrcpynW(state, comp, sizeof(state)/sizeof(state[0]));
}
else {
@@ -371,13 +371,13 @@
}
}
else {
- tmp = StrChrW(comp, '(');
+ tmp = strchrW(comp, '(');
if(tmp) {
*tmp++ = 0;
lstrcpynW(szClassName, comp, MAX_THEME_CLASS_NAME);
comp = tmp;
/* now get the state */
- *StrChrW(comp, ')') = 0;
+ *strchrW(comp, ')') = 0;
lstrcpynW(state, comp, sizeof(state)/sizeof(state[0]));
}
else {
@@ -805,7 +805,7 @@
}
start = pszClassList;
- while((end = StrChrW(start, ';'))) {
+ while((end = strchrW(start, ';'))) {
len = end-start;
lstrcpynW(szClassName, start, min(len+1,
sizeof(szClassName)/sizeof(szClassName[0])));
start = end+1;
_____
Modified: trunk/reactos/lib/uxtheme/system.c
--- trunk/reactos/lib/uxtheme/system.c 2005-10-08 19:43:11 UTC (rev
18357)
+++ trunk/reactos/lib/uxtheme/system.c 2005-10-08 19:49:47 UTC (rev
18358)
@@ -28,7 +28,6 @@
#include "winuser.h"
#include "wingdi.h"
#include "winreg.h"
-#include "shlwapi.h"
#include "uxtheme.h"
#include "tmschema.h"
@@ -93,6 +92,57 @@
return TRUE;
}
+/* At the end of the day this is a subset of what SHRegGetPath() does -
copied
+ * here to avoid linking against shlwapi. */
+static DWORD query_reg_path (HKEY hKey, LPCWSTR lpszValue,
+ LPVOID pvData)
+{
+ DWORD dwRet, dwType, dwUnExpDataLen = MAX_PATH, dwExpDataLen;
+
+ TRACE("(hkey=%p,%s,%p)\n", hKey, debugstr_w(lpszValue),
+ pvData);
+
+ dwRet = RegQueryValueExW(hKey, lpszValue, 0, &dwType, pvData,
&dwUnExpDataLen);
+ if (dwRet!=ERROR_SUCCESS && dwRet!=ERROR_MORE_DATA)
+ return dwRet;
+
+ if (dwType == REG_EXPAND_SZ)
+ {
+ DWORD nBytesToAlloc;
+
+ /* Expand type REG_EXPAND_SZ into REG_SZ */
+ LPWSTR szData;
+
+ /* If the caller didn't supply a buffer or the buffer is too small
we have
+ * to allocate our own
+ */
+ if (dwRet == ERROR_MORE_DATA)
+ {
+ WCHAR cNull = '\0';
+ nBytesToAlloc = dwUnExpDataLen;
+
+ szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
+ RegQueryValueExW (hKey, lpszValue, 0, NULL, (LPBYTE)szData,
&nBytesToAlloc);
+ dwExpDataLen = ExpandEnvironmentStringsW(szData, &cNull, 1);
+ dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
+ LocalFree((HLOCAL) szData);
+ }
+ else
+ {
+ nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR);
+ szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc );
+ lstrcpyW(szData, pvData);
+ dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, MAX_PATH
);
+ if (dwExpDataLen > MAX_PATH) dwRet = ERROR_MORE_DATA;
+ dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
+ LocalFree((HLOCAL) szData);
+ }
+ }
+
+ RegCloseKey(hKey);
+ return dwRet;
+}
+
/***********************************************************************
* UXTHEME_LoadTheme
*
@@ -123,7 +173,7 @@
buffsize = sizeof(szCurrentSize)/sizeof(szCurrentSize[0]);
if(RegQueryValueExW(hKey, szSizeName, NULL, NULL,
(LPBYTE)szCurrentSize, &buffsize))
szCurrentSize[0] = '\0';
- if(SHRegGetPathW(hKey, NULL, szDllName, szCurrentTheme, 0))
+ if (query_reg_path (hKey, szDllName, szCurrentTheme))
szCurrentTheme[0] = '\0';
RegCloseKey(hKey);
}
@@ -292,7 +342,7 @@
DWORD count = sizeof(colorStr);
if (RegQueryValueExA (colorKey, SysColorsNames[i], 0,
- &type, colorStr, &count) == ERROR_SUCCESS)
+ &type, (LPBYTE) colorStr, &count) == ERROR_SUCCESS)
{
int r, g, b;
if (sscanf (colorStr, "%d %d %d", &r, &g, &b)
== 3)
@@ -850,6 +900,7 @@
HANDLE hFind;
WIN32_FIND_DATAW wfd;
HRESULT hr;
+ size_t pathLen;
TRACE("(%s,%p,%p)\n", debugstr_w(pszThemePath), callback, lpData);
@@ -857,7 +908,12 @@
return E_POINTER;
lstrcpyW(szDir, pszThemePath);
- PathAddBackslashW(szDir);
+ pathLen = lstrlenW (szDir);
+ if ((pathLen > 0) && (pathLen < MAX_PATH-1) && (szDir[pathLen -
1]
!= '\\'))
+ {
+ szDir[pathLen] = '\\';
+ szDir[pathLen+1] = 0;
+ }
lstrcpyW(szPath, szDir);
lstrcatW(szPath, szStar);
_____
Modified: trunk/reactos/lib/uxtheme/uxtheme.spec
--- trunk/reactos/lib/uxtheme/uxtheme.spec 2005-10-08 19:43:11 UTC
(rev 18357)
+++ trunk/reactos/lib/uxtheme/uxtheme.spec 2005-10-08 19:49:47 UTC
(rev 18358)
@@ -82,7 +82,7 @@
@ stdcall GetThemeTextExtent(ptr ptr long long wstr long long ptr ptr)
@ stdcall GetThemeTextMetrics(ptr ptr long long ptr)
@ stdcall GetWindowTheme(ptr)
-@ stdcall HitTestThemeBackground(ptr long long long long ptr long long
long ptr)
+@ stdcall HitTestThemeBackground(ptr long long long long ptr long
double ptr)
@ stdcall IsAppThemed()
@ stdcall IsThemeActive()
@ stdcall IsThemeBackgroundPartiallyTransparent(ptr long long)