Added stubs for all functions.
diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c
new file mode 100644
index 0000000..0d82ec6
--- /dev/null
+++ b/dlls/uxtheme/system.c
@@ -0,0 +1,418 @@
+/*
+ * Win32 5.1 Theme system
+ *
+ * Copyright (C) 2003 Kevin Koltzau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "wingdi.h"
+#include "uxtheme.h"
+
+#include "uxthemedll.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
+
+/***********************************************************************
+ * Defines and global variables
+ */
+
+DWORD dwThemeAppProperties = STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS;
+ATOM atWindowTheme;
+ATOM atSubAppName;
+ATOM atSubIdList;
+
+/***********************************************************************/
+
+/***********************************************************************
+ * UXTHEME_InitSystem
+ */
+void UXTHEME_InitSystem()
+{
+ const WCHAR szWindowTheme[] = {
+ 'u','x','_','t','h','e','m','e','\0'
+ };
+ const WCHAR szSubAppName[] = {
+ 'u','x','_','s','u','b','a','p','p','\0'
+ };
+ const WCHAR szSubIdList[] = {
+ 'u','x','_','s','u','b','i','d','l','s','t','\0'
+ };
+
+ atWindowTheme = GlobalAddAtomW(szWindowTheme);
+ atSubAppName = GlobalAddAtomW(szSubAppName);
+ atSubIdList = GlobalAddAtomW(szSubIdList);
+}
+
+/***********************************************************************
+ * IsAppThemed (UXTHEME.@)
+ */
+BOOL WINAPI IsAppThemed(void)
+{
+ FIXME("stub\n");
+ return FALSE;
+}
+
+/***********************************************************************
+ * IsThemeActive (UXTHEME.@)
+ */
+BOOL WINAPI IsThemeActive(void)
+{
+ FIXME("stub\n");
+ return FALSE;
+}
+
+/***********************************************************************
+ * EnableTheming (UXTHEME.@)
+ *
+ * NOTES
+ * This is a global and persistant change
+ */
+HRESULT WINAPI EnableTheming(BOOL fEnable)
+{
+ FIXME("%d: stub\n", fEnable);
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+/***********************************************************************
+ * OpenThemeData (UXTHEME.@)
+ */
+HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR pszClassList)
+{
+ FIXME("%p %s: stub\n", hwnd, debugstr_w(pszClassList));
+ return NULL;
+}
+
+/***********************************************************************
+ * GetWindowTheme (UXTHEME.@)
+ *
+ * Retrieve the last theme opened for a window
+ */
+HTHEME WINAPI GetWindowTheme(HWND hwnd)
+{
+ TRACE("(%p)\n", hwnd);
+ return GetPropW(hwnd, MAKEINTATOMW(atWindowTheme));
+}
+
+/***********************************************************************
+ * UXTHEME_SetWindowProperty
+ *
+ * I'm using atoms as there may be large numbers of duplicated strings
+ * and they do the work of keeping memory down as a cause of that quite nicely
+ */
+HRESULT UXTHEME_SetWindowProperty(HWND hwnd, ATOM aProp, LPCWSTR pszValue)
+{
+ ATOM oldValue = (ATOM)(size_t)RemovePropW(hwnd, MAKEINTATOMW(aProp));
+ if(oldValue)
+ DeleteAtom(oldValue);
+ if(pszValue) {
+ ATOM atValue = AddAtomW(pszValue);
+ if(!atValue
+ || !SetPropW(hwnd, MAKEINTATOMW(aProp), (LPWSTR)MAKEINTATOMW(atValue))) {
+ HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
+ if(atValue) DeleteAtom(atValue);
+ return hr;
+ }
+ }
+ return S_OK;
+}
+
+/***********************************************************************
+ * SetWindowTheme (UXTHEME.@)
+ *
+ * Persistant through the life of the window, even after themes change
+ */
+HRESULT WINAPI SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName,
+ LPCWSTR pszSubIdList)
+{
+ HRESULT hr;
+ TRACE("(%p,%s,%s)\n", hwnd, debugstr_w(pszSubAppName),
+ debugstr_w(pszSubIdList));
+ hr = UXTHEME_SetWindowProperty(hwnd, atSubAppName, pszSubAppName);
+ if(SUCCEEDED(hr))
+ hr = UXTHEME_SetWindowProperty(hwnd, atSubIdList, pszSubIdList);
+ return hr;
+}
+
+/***********************************************************************
+ * GetCurrentThemeName (UXTHEME.@)
+ */
+HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars,
+ LPWSTR pszColorBuff, int cchMaxColorChars,
+ LPWSTR pszSizeBuff, int cchMaxSizeChars)
+{
+ FIXME("stub\n");
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/***********************************************************************
+ * GetThemeAppProperties (UXTHEME.@)
+ */
+DWORD WINAPI GetThemeAppProperties(void)
+{
+ return dwThemeAppProperties;
+}
+
+/***********************************************************************
+ * SetThemeAppProperties (UXTHEME.@)
+ */
+void WINAPI SetThemeAppProperties(DWORD dwFlags)
+{
+ TRACE("(0x%08lx)\n", dwFlags);
+ dwThemeAppProperties = dwFlags;
+}
+
+/***********************************************************************
+ * CloseThemeData (UXTHEME.@)
+ */
+HRESULT WINAPI CloseThemeData(HTHEME hTheme)
+{
+ FIXME("stub\n");
+ if(!hTheme)
+ return E_HANDLE;
+ return S_OK;
+}
+
+/***********************************************************************
+ * HitTestThemeBackground (UXTHEME.@)
+ */
+HRESULT WINAPI HitTestThemeBackground(HTHEME hTheme, HDC hdc, int iPartId,
+ int iStateId, DWORD dwOptions,
+ const RECT *pRect, HRGN hrgn,
+ POINT ptTest, WORD *pwHitTestCode)
+{
+ FIXME("%d %d 0x%08lx: stub\n", iPartId, iStateId, dwOptions);
+ if(!hTheme)
+ return E_HANDLE;
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/***********************************************************************
+ * IsThemePartDefined (UXTHEME.@)
+ */
+BOOL WINAPI IsThemePartDefined(HTHEME hTheme, int iPartId, int iStateId)
+{
+ FIXME("%d %d: stub\n", iPartId, iStateId);
+ return FALSE;
+}
+
+/**********************************************************************
+ * Undocumented functions
+ */
+
+/**********************************************************************
+ * QueryThemeServices (UXTHEME.1)
+ *
+ * RETURNS
+ * some kind of status flag
+ */
+DWORD WINAPI QueryThemeServices()
+{
+ FIXME("stub\n");
+ return 3; /* This is what is returned under XP in most cases */
+}
+
+
+/**********************************************************************
+ * OpenThemeFile (UXTHEME.2)
+ *
+ * Opens a theme file, which can be used to change the current theme, etc
+ *
+ * PARAMS
+ * pszThemeFileName Path to a msstyles theme file
+ * pszColorName Color defined in the theme, eg. NormalColor
+ * pszSizeName Size defined in the theme, eg. NormalSize
+ * hThemeFile Handle to theme file
+ */
+HRESULT WINAPI OpenThemeFile(LPCWSTR pszThemeFileName, LPCWSTR pszColorName,
+ LPCWSTR pszSizeName, HTHEMEFILE *hThemeFile,
+ DWORD unknown)
+{
+ FIXME("%s,%s,%s,%ld: stub\n", debugstr_w(pszThemeFileName),
+ debugstr_w(pszColorName),
+ debugstr_w(pszSizeName), unknown);
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ * CloseThemeFile (UXTHEME.3)
+ *
+ * Releases theme file handle returned by OpenThemeFile
+ *
+ * PARAMS
+ * hThemeFile Handle to theme file
+ */
+HRESULT WINAPI CloseThemeFile(HTHEMEFILE hThemeFile)
+{
+ FIXME("stub\n");
+ return S_OK;
+}
+
+/**********************************************************************
+ * ApplyTheme (UXTHEME.4)
+ *
+ * Set a theme file to be the currently active theme
+ *
+ * PARAMS
+ * hThemeFile Handle to theme file
+ * unknown See notes
+ * hWnd Window requesting the theme change
+ *
+ * NOTES
+ * I'm not sure what the second parameter is (the datatype is likely wrong), other then this:
+ * Under XP if I pass
+ * char b[] = "";
+ * the theme is applied with the screen redrawing really badly (flickers)
+ * char b[] = "\0"; where \0 can be one or more of any character, makes no difference
+ * the theme is applied smoothly (screen does not flicker)
+ * char *b = "\0" or NULL; where \0 can be zero or more of any character, makes no difference
+ * the function fails returning invalid parameter...very strange
+ */
+HRESULT WINAPI ApplyTheme(HTHEMEFILE hThemeFile, char *unknown, HWND hWnd)
+{
+ FIXME("%s: stub\n", unknown);
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ * GetThemeDefaults (UXTHEME.7)
+ *
+ * Get the default color & size for a theme
+ *
+ * PARAMS
+ * pszThemeFileName Path to a msstyles theme file
+ * pszColorName Buffer to recieve the default color name
+ * dwColorNameLen Length, in characters, of color name buffer
+ * pszSizeName Buffer to recieve the default size name
+ * dwSizeNameLen Length, in characters, of size name buffer
+ */
+HRESULT WINAPI GetThemeDefaults(LPCWSTR pszThemeFileName, LPWSTR pszColorName,
+ DWORD dwColorNameLen, LPWSTR pszSizeName,
+ DWORD dwSizeNameLen)
+{
+ FIXME("%s: stub\n", debugstr_w(pszThemeFileName));
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ * EnumThemes (UXTHEME.8)
+ *
+ * Enumerate available themes, calls specified EnumThemeProc for each
+ * theme found. Passes lpData through to callback function.
+ *
+ * PARAMS
+ * pszThemePath Path containing themes
+ * callback Called for each theme found in path
+ * lpData Passed through to callback
+ */
+HRESULT WINAPI EnumThemes(LPCWSTR pszThemePath, EnumThemeProc callback,
+ LPVOID lpData)
+{
+ FIXME("%s: stub\n", debugstr_w(pszThemePath));
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/**********************************************************************
+ * EnumThemeColors (UXTHEME.9)
+ *
+ * Enumerate theme colors available with a particular size
+ *
+ * PARAMS
+ * pszThemeFileName Path to a msstyles theme file
+ * pszSizeName Theme size to enumerate available colors
+ * If NULL the default theme size is used
+ * dwColorNum Color index to retrieve, increment from 0
+ * pszColorName Output color name
+ *
+ * RETURNS
+ * S_OK on success
+ * E_PROP_ID_UNSUPPORTED when dwColorName does not refer to a color
+ * or when pszSizeName does not refer to a valid size
+ *
+ * NOTES
+ * XP fails with E_POINTER when pszColorName points to a buffer smaller then 605
+ * characters
+ */
+HRESULT WINAPI EnumThemeColors(LPWSTR pszThemeFileName, LPWSTR pszSizeName,
+ DWORD dwColorNum, LPWSTR pszColorName)
+{
+ FIXME("%s %s %ld: stub\n", debugstr_w(pszThemeFileName),
+ debugstr_w(pszSizeName), dwColorNum);
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ * EnumThemeSizes (UXTHEME.10)
+ *
+ * Enumerate theme colors available with a particular size
+ *
+ * PARAMS
+ * pszThemeFileName Path to a msstyles theme file
+ * pszColorName Theme color to enumerate available sizes
+ * If NULL the default theme color is used
+ * dwSizeNum Size index to retrieve, increment from 0
+ * pszSizeName Output size name
+ *
+ * RETURNS
+ * S_OK on success
+ * E_PROP_ID_UNSUPPORTED when dwSizeName does not refer to a size
+ * or when pszColorName does not refer to a valid color
+ *
+ * NOTES
+ * XP fails with E_POINTER when pszSizeName points to a buffer smaller then 605
+ * characters
+ */
+HRESULT WINAPI EnumThemeSizes(LPWSTR pszThemeFileName, LPWSTR pszColorName,
+ DWORD dwSizeNum, LPWSTR pszSizeName)
+{
+ FIXME("%s %s %ld: stub\n", debugstr_w(pszThemeFileName), debugstr_w(pszColorName), dwSizeNum);
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ * ParseThemeIniFile (UXTHEME.11)
+ *
+ * Enumerate data in a theme INI file.
+ *
+ * PARAMS
+ * pszIniFileName Path to a theme ini file
+ * pszUnknown Cannot be NULL, L"" is valid
+ * callback Called for each found entry
+ * lpData Passed through to callback
+ *
+ * RETURNS
+ * S_OK on success
+ * 0x800706488 (Unknown property) when enumeration is canceled from callback
+ *
+ * NOTES
+ * When pszUnknown is NULL the callback is never called, the value does not seem to surve
+ * any other purpose
+ */
+HRESULT WINAPI ParseThemeIniFile(LPCWSTR pszIniFileName, LPWSTR pszUnknown,
+ ParseThemeIniFileProc callback, LPVOID lpData)
+{
+ FIXME("%s %s: stub\n", debugstr_w(pszIniFileName), debugstr_w(pszUnknown));
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}