Module: wine Branch: master Commit: 6790cdb8f5c8d15df0b19702e36e888c996fc97c URL: http://source.winehq.org/git/wine.git/?a=commit;h=6790cdb8f5c8d15df0b19702e3...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Aug 14 12:31:27 2007 +0200
comctl32: Create a manifest file at dll registration time.
---
dlls/comctl32/commctrl.c | 95 ++++++++++++++++++++++++++++++++++++++++++++-- tools/wine.inf | 1 + 2 files changed, 92 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index 4bfe1a5..ea42db8 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -71,6 +71,58 @@
WINE_DEFAULT_DEBUG_CHANNEL(commctrl);
+ +#define NAME "microsoft.windows.common-controls" +#define FILE "comctl32.dll" +#define VERSION "6.0.0.0" +#define PUBLIC_KEY "6595b64144ccf1df" + +#ifdef __i386__ +#define ARCH "x86" +#elif defined __x86_64__ +#define ARCH "amd64" +#else +#define ARCH "none" +#endif + +static const char manifest[] = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + "<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\n" + " <assemblyIdentity type="win32" name="" NAME "" version="" VERSION "" processorArchitecture="" ARCH "" publicKeyToken="" PUBLIC_KEY ""/>\n" + " <file name="" FILE "">\n" + " <windowClass>Button</windowClass>\n" + " <windowClass>ButtonListBox</windowClass>\n" + " <windowClass>ComboBoxEx32</windowClass>\n" + " <windowClass>ComboLBox</windowClass>\n" + " <windowClass>Combobox</windowClass>\n" + " <windowClass>Edit</windowClass>\n" + " <windowClass>Listbox</windowClass>\n" + " <windowClass>NativeFontCtl</windowClass>\n" + " <windowClass>ReBarWindow32</windowClass>\n" + " <windowClass>ScrollBar</windowClass>\n" + " <windowClass>Static</windowClass>\n" + " <windowClass>SysAnimate32</windowClass>\n" + " <windowClass>SysDateTimePick32</windowClass>\n" + " <windowClass>SysHeader32</windowClass>\n" + " <windowClass>SysIPAddress32</windowClass>\n" + " <windowClass>SysLink</windowClass>\n" + " <windowClass>SysListView32</windowClass>\n" + " <windowClass>SysMonthCal32</windowClass>\n" + " <windowClass>SysPager</windowClass>\n" + " <windowClass>SysTabControl32</windowClass>\n" + " <windowClass>SysTreeView32</windowClass>\n" + " <windowClass>ToolbarWindow32</windowClass>\n" + " <windowClass>msctls_hotkey32</windowClass>\n" + " <windowClass>msctls_progress32</windowClass>\n" + " <windowClass>msctls_statusbar32</windowClass>\n" + " <windowClass>msctls_trackbar32</windowClass>\n" + " <windowClass>msctls_updown32</windowClass>\n" + " <windowClass>tooltips_class32</windowClass>\n" + " </file>\n" + "</assembly>\n"; + +static const char manifest_filename[] = ARCH "_" NAME "_" PUBLIC_KEY "_" VERSION "_none_deadbeef.manifest"; + LRESULT WINAPI COMCTL32_SubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LPWSTR COMCTL32_wSubclass = NULL; @@ -91,6 +143,42 @@ static const WCHAR strCC32SubclassInfo[] = { 'C','C','3','2','S','u','b','c','l','a','s','s','I','n','f','o',0 };
+static BOOL create_manifest( BOOL install ) +{ + static const WCHAR dirW[] = {'\','w','i','n','s','x','s','\','m','a','n','i','f','e','s','t','s','\',0}; + + DWORD len, written; + WCHAR *buffer; + HANDLE file; + BOOL ret = FALSE; + + len = MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename), NULL, 0 ); + len += GetWindowsDirectoryW( NULL, 0 ); + len = len * sizeof(WCHAR) + sizeof(dirW); + if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len ))) return FALSE; + GetWindowsDirectoryW( buffer, len ); + lstrcatW( buffer, dirW ); + MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename), + buffer + lstrlenW(buffer), len ); + if (install) + { + file = CreateFileW( buffer, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); + if (file != INVALID_HANDLE_VALUE) + { + ret = (WriteFile( file, manifest, sizeof(manifest)-1, &written, NULL ) && + written == sizeof(manifest)-1); + CloseHandle( file ); + if (!ret) DeleteFileW( buffer ); + else TRACE("created %s\n", debugstr_w(buffer)); + } + } + else ret = DeleteFileW( buffer ); + + HeapFree( GetProcessHeap(), 0, buffer ); + return ret; +} + + /*********************************************************************** * DllMain [Internal] * @@ -917,10 +1005,9 @@ HRESULT WINAPI DllGetVersion (DLLVERSIONINFO *pdvi) */ HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline) { - FIXME("(%s, %s): stub\n", bInstall?"TRUE":"FALSE", - debugstr_w(cmdline)); - - return S_OK; + TRACE("(%u, %s): stub\n", bInstall, debugstr_w(cmdline)); + if (!create_manifest( bInstall )) return HRESULT_FROM_WIN32(GetLastError()); + return S_OK; }
/*********************************************************************** diff --git a/tools/wine.inf b/tools/wine.inf index 30e7ee0..06702d2 100644 --- a/tools/wine.inf +++ b/tools/wine.inf @@ -2126,6 +2126,7 @@ HKLM,%CurrentVersion%\Telephony\Country List\998,"SameAreaRule",,"G" 11,,avifil32.dll,1 11,,browseui.dll,1 11,,comcat.dll,1 +11,,comctl32.dll,2 11,,d3dxof.dll,1 11,,ddraw.dll,1 11,,ddrawex.dll,1