From 8c072ccac91b75c0fe877d75c95d39791ffe98d5 Mon Sep 17 00:00:00 2001 From: Jan Zerebecki Date: Sat, 11 Oct 2008 13:29:13 +0200 Subject: [PATCH] push 5bdbf5929ff53e78410b88336df0dc6549434b50 --- ANNOUNCE | 1722 ++++++++++++++++++++++------------------- VERSION | 2 +- configure | 18 +- dlls/comctl32/monthcal.c | 2 +- dlls/crypt32/tests/encode.c | 50 +- dlls/cryptdlg/main.c | 12 +- dlls/d3d9/tests/visual.c | 2 +- dlls/d3dxof/d3dxof.c | 4 +- dlls/ddraw/device.c | 4 +- dlls/mlang/tests/mlang.c | 41 +- dlls/mshtml/dispex.c | 121 +-- dlls/mshtml/htmlcomment.c | 1 + dlls/mshtml/htmlelem.c | 32 +- dlls/mshtml/htmlelem3.c | 44 +- dlls/mshtml/htmlevent.c | 35 +- dlls/mshtml/htmlevent.h | 31 + dlls/mshtml/htmlgeneric.c | 2 +- dlls/mshtml/htmlimg.c | 1 + dlls/mshtml/htmlinput.c | 17 +- dlls/mshtml/htmlnode.c | 1 + dlls/mshtml/htmloption.c | 38 +- dlls/mshtml/htmlselect.c | 46 +- dlls/mshtml/htmlstyle.c | 11 +- dlls/mshtml/htmlstyle.h | 1 + dlls/mshtml/htmltable.c | 1 + dlls/mshtml/htmltablerow.c | 1 + dlls/mshtml/htmltextarea.c | 16 +- dlls/mshtml/htmlwindow.c | 102 --- dlls/mshtml/mshtml_private.h | 22 +- dlls/mshtml/nsembed.c | 1 + dlls/mshtml/nsevents.c | 2 +- dlls/mshtml/task.c | 16 +- dlls/mshtml/tests/dom.c | 77 +- dlls/mshtml/tests/script.c | 2 +- dlls/mshtml/txtrange.c | 26 +- dlls/msxml3/tests/domdoc.c | 3 + dlls/msxml3/text.c | 107 ++- dlls/opengl32/tests/opengl.c | 122 ++- dlls/spoolss/tests/spoolss.c | 35 +- dlls/usp10/tests/usp10.c | 11 +- dlls/usp10/usp10.c | 271 ++++--- dlls/wined3d/drawprim.c | 10 +- dlls/wined3d/surface.c | 2 +- dlls/wined3d/swapchain_base.c | 10 +- dlls/winmm/mmio.c | 6 +- dlls/winmm/tests/mci.c | 17 +- dlls/winmm/tests/mixer.c | 5 +- fonts/tahoma.sfd | 70 +- fonts/tahoma.ttf | Bin 85192 -> 85444 bytes fonts/tahomabd.sfd | 62 +- fonts/tahomabd.ttf | Bin 75364 -> 75600 bytes include/mshtmdid.h | 56 ++ include/mshtml.idl | 279 ++++++- include/stdole2.idl | 25 +- programs/wordpad/En.rc | 1 + programs/wordpad/Ru.rc | 1 + programs/wordpad/print.c | 6 +- programs/wordpad/registry.c | 8 +- programs/wordpad/wordpad.c | 52 +- programs/wordpad/wordpad.h | 1 + tools/widl/parser.y | 199 +++-- 61 files changed, 2395 insertions(+), 1468 deletions(-) rewrite ANNOUNCE (96%) create mode 100644 dlls/mshtml/htmlevent.h diff --git a/ANNOUNCE b/ANNOUNCE dissimilarity index 96% index 982ac735f37..06859bf5f9d 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,810 +1,912 @@ -The Wine development release 1.1.5 is now available. - -What's new in this release (see below for details): - - Substantial JavaScript implementation. - - Partial support for layered windows. - - Support for Unicode file export in Regedit. - - Proper exception handling in widl-generated code. - - Asynchronous requests and cookies support in WinHTTP. - - Various bug fixes. - -The source is available from the following locations: - - http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.1.5.tar.bz2 - http://prdownloads.sourceforge.net/wine/wine-1.1.5.tar.bz2 - -Binary packages for various distributions will be available from: - - http://www.winehq.org/site/download - -You will find documentation on http://www.winehq.org/site/documentation - -You can also get the current source directly from the git -repository. Check http://www.winehq.org/site/git for details. - -Wine is available thanks to the work of many people. See the file -AUTHORS in the distribution for the complete list. - ----------------------------------------------------------------- - -Bugs fixed in 1.1.5: - - 3888 print page range defaults to 1 to 65535 pages on graphical applications - 4581 failure of CreateScalableFontResourceA and Unhandled page fault in MathWorkshop - 4875 Deliplayer doesn't fully open saying it can't open DeliUI - 4987 Close combat 3 crashes with backtrace - 5243 Hyperlobby: runtime error 430 - 5423 AOL AIM won't install: complains about minimum requirements - 6496 Defcon crashes in ws2_32 - 7026 Formula objects in Word 97 always trigger unhandled page fault - 7598 Regedit cannot import/export version 5 registry files - 7600 Regedit Metabug: get regedit working perfectly - 7670 No battle sounds in Guild Wars - 7851 Warrock installer crash - 8674 Safari crashes on startup - 8763 Evernote crashes - 9014 MS Office 2007 Home and Student edition installer crashes - 9364 Call from 0x7b840a80 to unimplemented function gdiplus.dll.GdipSetLinePresetBlend - 9558 FIFA2002 demo crashes, dsound/alsa - 9659 Guild Wars: Rendering of 3D models broken - 9777 Silencer doesn't fully connect to lobby server. - 9838 Input Method's output overruns the buffer of wine keyboard input - 9915 cookies not set within steam - 9961 SEH stack overflow exception in Kuma Games - 9973 Bioshock demo: crashes on loading screen - 10092 Problems with ole on Interfax-Direct - 10117 Mpeg2Schnitt doesn't display video since wine v. 0.9.16 - 10167 sacred: Sacred crashes randomly after several actions in game - 10628 Portal must be launched twice to run properly - 10725 excel page faults and exits - 11194 FileZilla 3.0.5.2 crashes if changing local working directory - 11337 Cannot select a format option for numeric values in Excel 2003 - 11445 Medieval 2: Total War: water covers the land - 11494 Speed Commander 12 does not install - 12049 Regression running "Splinter Cell:Pandora Tomorrow" - 12241 D3D9: Visual test fails - 12314 Photoshop CS2 tab doesn't really really hide windows - 12432 MotoGP 3: Crashes when attempting to configure controllers - 12534 Cepstral voice configuration tools are not displayed in the control panel - 12576 BYOND: Clicking url doesn't launch native browser - 12577 BYOND: Crashing on login - 12647 Cepstral voices garble the first part of the sentence they are reading - 12679 Trackmania nations forever does not install Openal - 12778 Progecad smart! crashes on save/save us - 12830 Xenocode Virtual Appliance Runtime Error - 12843 A-ray crashes on startup - 12879 Cluster size not supported for large NFS mounts? - 12992 Excel 2007 Crashes immediately on start up. - 12998 FtpVC applicaton does not run - 13058 BYOND Suite: Browser windows do not function / crash DreamSeeker. - 13220 warcraft 3 sound stops after a while - 13441 Sopcast generate a crash while using, native wmvcore.dll - 13643 ddraw tests fail on XP SP2 with Radeon Mobility 9000 card - 13723 Sound buffer freed by both winealsa.drv and dsound - 13742 installation of WISO 2007 failed - 13990 Spore Creature Creature: Failed to connect to license server - 14131 No sound in Morrowind using software mixing - 14250 richedit: Deleting text at end of edit control is improperly handled - 14374 Diablo2:LOD Digital Distribution: "Agree" button never enables - 14381 Google Lively installer aborts because of missing directx registry entry - 14403 VFP8-SP1-Runtime crashes on a certain function - 14410 orb installer aborts, unimplemented function gdiplus.dll.GdipGetPropertyItem - 14567 Shell32 IAutoCompleteDropDown needed for VS.NET 2005 and other tools which use MS DevEnv UI engine - 14595 UnrealTournament: General Protection fault! - 14639 ngen.exe from .NET 2.0 show exception E_INVALIDARG when trying to compile an assembly - 14670 Installer doesn't allow for the Accept button to be clicked on the license agreement - 14787 widl fails to honour typedef ptr attributes - 14846 Raising exception for SC_RPC_HANDLE being NULL - 14959 No ingame sound in Diablo 2 anymore since update - 14994 Haskell's removeDirectoryRecursive fails on Wine - 15033 intermittant crashes while playing bf1942 - 15093 Rome Total War: water is not rendered on the campaign map - 15107 Google Chrome fails to load web pages. - 15119 Google Chrome on Wine 1.1.3 does not load pages over HTTPS - 15125 Flashplayer crashes when used with an IMC - 15130 Wine notepad: Extension behaviour differ from Windows - 15141 In Google Chrome, embedded flash window does not scroll with main window - 15179 Parallel install in multiple jobs as in "make -j99 install" fails - 15197 Several fonts don't appear in Adobe Photoshop CS - 15201 Google Chrome crashes when downloading an exe file - 15209 winedbg has an infinite loop at wine/programs/winedbg/memory.c:426 - 15227 orb installer crashes when showing eula - 15252 moving/resizing undecorated windows broken in dual-screen setups - 15260 objects in spore leave trails - 15266 jscript: engine.c - unitialized variable - ----------------------------------------------------------------- - -Changes since 1.1.4: - -Alexander Dorofeyev (1): - quartz/tests: Fix potential NULL dereference (Coverity). - -Alexander Nicolaysen Sørnes (5): - notepad: Only append .txt to missing files without a dot in them. - regedit: Convert parts of export handling to unicode. - regedit: Fix importing REG_MULTI_SZ values for ANSI files. - regedit: Gather a full string before exporting it. - regedit: Add support for exporting unicode files. - -Alexandre Julliard (56): - makefile: Fix dependency for programs install. - winex11: Moved the X11DRV_WindowMessage function to window.c. - winex11: Support setting the window region on windows belonging to other threads. - user32: Fix DeferWindowPos to work on windows belonging to other processes. - configure: Fixed the check for sigset_t on mingw. - mstask/tests: Use case-insensitive compare for file names. - kernel32: Added implementation for UnregisterWaitEx. - jscript: Add necessary dependencies for the bison file. - kernel32/tests: Fix the async I/O test to handle errors properly. - kernel32/tests: Fix the BindIoCompletionCallback test on Vista. - kernel32/tests: Fix the ResumeThread on win9x. - ntdll/tests: Fix the async I/O test on Vista. - rpcrt4/tests: Fix a couple of test failures on Windows. - winex11: Remove debug hack that slipped into commit a4a5a2ec121eeb2a7cd4ffbb5ba7b298f2a050b1. - winex11: Fixed mapping of the move/resize starting point to X11 root coordinates. - user32: Notify the user driver about window extended style changes too. - server: Implemented the server side of Get/SetLayeredWindowAttributes. - user32/tests: Added some tests for Get/SetLayeredWindowAttributes. - user32: Add a SetLayeredWindowAttributes driver entry point. - winex11: Driver-side implementation of SetLayeredWindowAttributes. - inetcomm: Avoid a compiler warning. - user32/tests: Ignore some more messages. - user32/tests: Fix a test that fails on all Windows versions. - include: Added definition for RPC_BAD_STUB_DATA_EXCEPTION_FILTER. - widl: Create an explicit structure for the function frame of all generated functions. - widl: Make the exception handling macros more general and use the same code everywhere. - widl: Infrastructure for adding a prefix to local variable references. - widl: Separate declaration and initialisation for indirect arguments. - widl: Implemented __finally support in stub functions. - widl: Implemented __finally support in server functions. - widl: Implemented __finally support in client functions. - widl: Implemented RpcAbnormalTermination in the generic exception handling code. - widl: Remove unnecessary casts in the generated code. - ntdll: Hardcode the filesystem cluster size to avoid trouble on NFS. - user32/tests: Fix a number of message test failures on various Windows versions. - user32: Don't reinitialize the window placement even if the window rect is empty. - user32: Implemented UpdateLayeredWindow and UpdateLayeredWindowIndirect. - ntdll/tests: Clear the direction flag in the handler since Windows may not do it. - kernel32/tests: Fix a test on win9x. - kernel32/tests: Support alternate results in the loader test on Vista. - kernel32/tests: Comment out an UpdateResource call that causes failures. - user32/tests: Fix some test failures on XP. - mstask/tests: Fix test failures on XP. - shlwapi/tests: SHLWAPI.23 apparently returns an HRESULT on Vista. - user32/tests: Cope with last error behavior on Vista. - user32/tests: Fix some test failures on win9x. - kernel32/tests: Handle the win2k3 version check behavior. - winex11: Force the X11 size of zero-sized window to always be 1x1. - winex11: Don't try to retrieve the X11 size on ShowWindow for zero-sized windows. - winex11: Ignore the initial WM_STATE transition out of withdrawn state. - winex11: Compare the window position against the cached position in ConfigureNotify. - user32/tests: Fix a few more message test failures. - gdi32/tests: Skip test that depends on Tahoma if it isn't installed. - kernel32/tests: Fix race condition in the thread test. - kernel32/tests: Fix a couple of tests failing on NT4. - ntdll/tests: Fix a couple of tests failing on NT4. - -Alistair Leslie-Hughes (25): - mshtml: Implement IHTMLBodyElement get/put bgColor. - mshtml: Add IHTMLBodyElement bgColor tests. - mshtml: Implement IDispatch for IHTMLDocument3. - mshtml: Implement IDispatch for IHTMLDocument4. - mshtml: Implement IDispatch for IHTMLDOMTextNode. - mshtml: Implement IDispatch for IHTMLImgElement. - mshtml: Implement IDispatch for IHTMLTextContainer. - mshtml: Implement IDispatch for IHTMLScriptElement. - mshtml: Implement IDispatch for IHTMLGenericElement. - mshtml: Implement IDispatch for IHTMLOptionElement. - mshtml: Implement IDispatch for IHTMLTextAreaElement. - mshtml: Implement IDispatch for IHTMLInputElement. - mshtml: Implement IDispatch for IHTMLDocument5. - mshtml: Implement IDispatch for IHTMLTable. - mshtml: Implement HTMLElement2 get_scrollLeft. - mshtml: Implement IHTMLTextContainer get_scrollLeft. - mshtml: Add tests for get_scrollLeft. - hlink: Mark Get/Set AdditionalParams as Unimplemented. - mshtml: Implement get/put margin. - mshtml: Add IHTMLStyle margin tests. - msxml3: Add IXMLDOMCharacterData to IXMLDOMCDATASection. - msxml3: Add IXMLDOMCharacterData to IXMLDOMComment. - msxml3: Correct test. - msxml3: Correct IDispatchEx Invoke to return the correct object. - mshtml: Implement IHTMLBody get/put_Text. - -Allan Tong (1): - wined3d: Fix Geforce9 detection. - -Andrew Talbot (5): - qcap: Sign-compare warning fix. - qmgr: Sign-compare warnings fix. - shdocvw: Sign-compare warnings fix. - msi: Uninitialized variable fix (Coverity). - comctl32: Sign-compare warnings fix. - -Aric Stewart (6): - mlang: Expand stub of fnIMLangFontLink2_GetStrCodePages. - imm32: Implement helper functions for copying CompositionString data out of the IME. Standardize ImmGetCompositionStringA/W to use a common T function. - imm32: Correct CopyCompAttrIMEtoClient to handle A->W and W->A conversions. - imm32: Update CopyCompClauseIMEtoClient to handle A->W and W->A conversions. - imm32: Update CopyCompOffsetIMEtoClient to handle A->W and W->A conversions. - imm32: Include a basic ImmGetCompositionString test checking ATTR lengths. - -Austin English (1): - widl: Remove unreached code (Smatch). - -Christian Costa (3): - d3dxof: Simplify parsing. - d3dxof: Implement object parsing in text mode. - d3dxof: Fix IDirectXFileDataImpl_GetType. - -Damjan Jovanovic (1): - ws2_32: Only enable FD_WRITE on short sends. - -David Adam (1): - appwiz: Fix some typos in the French resource. - -Detlef Riekenberg (8): - include: Update RASCONN and error codes. - rasapi32/tests: Trace the correct variable. - oleaut32: Dump parameter and SYSKIND for LHashValOfNameSysA. - shlwapi: Add a stub for SHSetDefaultDialogFont. - advapi32: Remove outdated comment. - localspl: Implement AddMonitor. - winspool: Use the backend for AddMonitor. - dlls: Do not use __WINE_ALLOC_SIZE between void and *. - -Dmitry Timoshkov (11): - gdi32: Don't use pOS2->usWeightClass, some fonts don't set it correctly. - winex11.drv: Fix the scan codes keypad keys section to match the vkeys one. - kernel32: Use a kernel error code. - winedevice: Wine PE loader is able to resolve forwards to not yet loaded modules. - user32: Make GetMonitorInfoW print the monitor properties. - user32: Implement SystemParametersInfo(SPI_GETWORKAREA) properly. - user32: Fix the work area test to pass on Windows when the taskbar is on top. - winhttp: Add some tests for set/query option, make them pass under Wine. - jscript: Fix the uninitialized variable warning. - kernel32: Fix the target buffer size. - winhttp: Move common code to the upper level, avoid accessing the buffer before the buffer size check, make the code conform to existing rules. - -Dylan Smith (10): - richedit: Avoid acting on control words in skipped RTF groups. - richedit: Don't put cursor in the table row start paragraph. - richedit: Enter at the end of a table row appends a new row. - richedit: Enter inserts newline before table at start of document. - richedit: Make sure the nested tables' RTF properties are not skipped. - richedit: Fixed bugs in handling unterminated nested tables in RTF. - richedit: Prevent buffer overrun for tab stops buffer. - richedit: Handle deletion at the end of text properly. - richedit: Avoid unconditionally rewrapping text on scroll. - richedit: Removed a redundant condition. - -Eric Pouech (6): - dbghelp: Fixed offset computation for bitfields inside structures in Codeview debug information. - dbghelp: Correctly setup the Unix regular expression for matching file names in SymEnumLines. - winedbg: Also handle 1 byte signed int as they were char (PDB files are done like this... sigh). - dbghelp: Use the correct size for global variable when searching for a symbol. - dbghelp: Silence 0x112c symbol type. - dbghelp: While loading MSC debug info, don't handle public symbol at once, but delay their handling after all other symbols are loaded. - -Erik Inge Bolsø (2): - winealsa.drv: fix typo in IDsCaptureDriverImpl_Open. - wineesd.drv: Allow all errors to interrupt recording. - -Florian Köberle (1): - winedbg: Fixed an infinite loop. - -Francois Gouget (7): - ddraw/tests: Fix compilation on systems that don't support nameless unions. - jscript: Fix compilation with older bison. - crypt32/tests: Win98 is missing Crypt{Encode,Decode}ObjectEx(). - ws2_32/tests: Fix a race in sock.c:test_write_events(). - mshtml/tests: Add a trailing '\n' to an ok() call. - d3dx9_36: Fix compilation on systems that don't support nameless unions. - gdiplus: Add some documentation stubs to make winapicheck happy. - -Gerald Pfeifer (2): - wordpad: Shed off unused parameters from on_fontlist_modified, OnCreate, OnUser, OnNotify, and OnInitPopupMenu. - comctl32: Remove unused paramters from MONTHCAL_GetRange, MONTHCAL_MouseMove, and MONTHCAL_Create. - -Hans Leidekker (22): - winhttp: Start sending async completion notifications. Add corresponding tests. - winhttp: Implement WINHTTP_OPTION_SERVER_CERT_CONTEXT. - winhttp: The last parameter of WinHttpWriteData is optional. - winhttp: Use a process global SSL context instead of per connection. - winhttp: Add the remaining completion notifications. - winhttp: Support asynchronous requests. - winhttp: Option WINHTTP_OPTION_SERVER_CERT_CONTEXT must return a pointer. - winhttp: WinHttpQueryDataAvailable should do a blocking read if more data is expected. - winhttp: Make sure not to read more data than expected on a redirect. - winhttp: Don't loop on response codes other than 301 and 302. - winhttp: Increase sleep between two tests that connect to the same host. - winhttp: Better diagnostics in the notification test. - cryptui: Add a stub implementation of CryptUIDlgViewCertificateW. - winhttp: Handle relative redirects. - winhttp: Redirects are always GET requests. - winhttp: Preserve cookies on redirects. - winhttp: Strip content-type/length headers from request on a redirect. - winhttp: Reset content length when all data has been read. - winhttp: Move handling of default request parameters back to WinHttpOpenRequest. - winhttp: Manage a session global cookie cache. - winhttp: Fix logic inversion bug in setting disable flags. - winhttp: Close the network connection if necessary. - -Henri Verbeet (28): - sspi: SECBUFFER_HEADER should be called SECBUFFER_STREAM_HEADER. - wined3d: Translate one pixel down after flipping for offscreen rendering. - wined3d: Fix the half pixel offset. - wined3d: Correct a comment. - d3d9: GetDepthStencilSurface returns D3DERR_NOTFOUND when no depth stencil is present. - d3d8: GetDepthStencilSurface returns D3DERR_NOTFOUND when no depth stencil is present. - d3d8: Fix IDirect3DDevice8::SetRenderTarget(). - wined3d: Reset the auto depth stencil. - d3d9: Only run the reset test once. - d3d9: Add a test for auto depth stencil reset. - d3d8: Add a test for auto depth stencil reset. - wined3d: Make some GLSL structs and functions private to the backend. - Make some ARB program structs and functions private to the backend. - wined3d: Improve a TRACE. - wined3d: IWineD3DCubeTextureImpl implements IID_IWineD3DCubeTexture, not IID_IWineD3DTexture. - wined3d: Use the internal format for renderbuffer storage. - wined3d: Clarify a comment. - wined3d: Remove some assumptions that PreLoad() will always bind the texture. - wined3d: Don't assume the texture is bound in IWineD3DVolumeImpl_LoadTexture(). - wined3d: Don't needlessly bind the texture in PreLoad(). - wined3d: Make the debug channels more consistent. - wined3d: Add a checkGLcall() at the end of loadTexCoords(). - wined3d: Move FBO handling functions to context.c. - wined3d: Split off a function for applying an attachment's filter states. - wined3d: Handle drawbuffers in context_apply_fbo_state() instead of context_set_render_target_fbo(). - wined3d: Get rid of context_set_render_target_fbo(). - wined3d: Get rid of context_set_depth_stencil_fbo(). - wined3d: Create a FBO for each combination of render targets and depth stencil. - -Hirofumi Katayama (1): - notepad: Cancel closing window by cancelling "Save As" dialog box. - -Huw Davies (28): - winex11.drv: Fix SetDIBits optimization to work with top-down dib sections. - include: Add some more mimeole errors. - inetcomm: Add a stub MimeInternational object. - inetcomm/tests: Start of IMimeInternational tests. - mlang: Forward IMultiLanguage_GetCharsetInfo to IMultiLanguage3_GetCharsetInfo. - inetcomm: Implement IMimeInternational_FindCharset. - inetcomm/tests: Tests for IMimeInternational_FindCharset. - inetcomm: Implement IMimeInternational_GetCharsetInfo. - inetcomm/tests: Add tests for IMimeInternational_GetCharsetInfo. - inetcomm: Implement IMimeInternational_GetCodePageCharset. - inetcomm/tests: Add tests for IMimeInternational_GetCodePageCharset. - inetcomm: Implement IMimeInternational_GetDefaultCharset. - inetcomm/tests: Add test for IMimeInternational_GetDefaultCharset. - inetcomm: Implement IMimeInternational_SetDefaultCharset. - inetcomm/tests: Add a test for IMimeInternational_SetDefaultCharset. - inetcomm: Add a missing function and fix some idl. - inetcomm: Implement IMimeInternational_CanConvertCodePages. - inetcomm: Fix some more idl. - inetcomm: Implement IMimeInternational_ConvertBuffer. - inetcomm/tests: Tests for IMimeInternational_ConvertBuffer. - oleaut32: Add support for VT_INT and VT_UINT constants. - oleaut32: Use V_INT instead of V_UNION. - inetcomm: Implement IMimeInternational_ConvertString. - inetcomm/tests: Add tests for IMimeInternational_ConvertString. - inetcomm: Implement MimeOleGetCharsetInfo. - include: Fill in IMimeEnumProperties. - inetcomm: Make variable static to fix crash on process detach. - gdi32: Factor out the name table lookup into a separate function. - -Ismael Barros (1): - dplayx: Fix static overrun of pDP array in test (Coverity). - -Jacek Caban (123): - jscript: Store more data in DispatchEx object. - jscript: Added GetDispID implementation. - jscript: Added InvokeEx implementation. - jscript: Added GetNextDispID implementation. - jscript: Added DeleteMemberByName implementation. - jscript: Added GetMemberName implementation. - jscript: Added expression statement implementation. - jscript: Added identifier expression implementation. - jscript: Added AddNamedItem implementation. - jscript: Added global object implementation. - jscript: Added assign expression implementation. - jscript: Added literal expression implementation. - jscript: Added assignment test. - jscript: Added scope chain implementation. - jscript: Added variable object handling. - jscript: Added call expression implementation. - jscript: Added infrastructure for test scripts. - jscript: Added logical negation implementation. - jscript: Added var statement implementation. - jscript: Added '===' expression implementation. - jscript: Added '!==' expression implementation. - jscript: Added function object stub implementation. - jscript: Added member expression implementation. - jscript: Added Function.length implementation. - jscript: Add static functions to variable objects. - jscript: Added Object constructor object implementation. - jscript: Added String constructor object. - jscript: Added Array constructor object implementation. - jscript: Added Boolean constructor object. - jscript: Added Number constructor object implementation. - jscript: Added RegExp constructor object implementation. - jscript: Added Math object stub implementation. - jscript: Added typeof expression implementation. - jscript: Added this expression implementation. - jscript: Added return statement implementation. - jscript: Added Function.[[call]] implementation. - jscript: Set parameters on function call. - jscript: Set arguments object on function call. - jscript: Added array expression implementation. - jscript: Added 'new' expression implementation. - jscript: Added Object constructor implementation. - jscript: Added constructor invokation from Function object support. - jscript: Added function expression implementation. - jscript: Added initial prototype of functions. - jscript: Release named items in IActiveScript::Close. - jscript: Added IActiveScriptParseProcedure2::ParseProcedureText implementation. - jscript: Added if statement implementation. - jscript: Added object initialiser expression implementation. - jscript: Added block statement implementation. - jscript: Added conditional expression implementation. - jscript: Added script types tests. - jscript: Added add expression implementation. - jscript: Added '+=' expression implementation. - jscript: Added '||' expression implementation. - jscript: Added '&&' expression implementation. - jscript: Added '<' expression implementation. - jscript: Added '<=' implementation. - jscript: Added '>' expression implementation. - jscript: Added '>=' expression implementation. - jscript: Added prefix increment expression. - jscript: Added prefix decrement expression implementation. - jscript: Added postfix increment expression implementation. - jscript: Added postfix decrement expression implementation. - mshtml: Added body dispatch id test. - jscript: Added missing RegExp properties. - jscript: Added Array constructor implementation. - jscript: Added Array.length implementation. - jscript: Added ArrayInstance::on_put implementation. - jscript: Added parser support for regular expressions. - jscript: Reuse temporary heap. - jscript: Added regular expression compiler based on Mozilla regexp implementation. - jscript: Added string to object conversion implementation. - jscript: Added String.match implementation. - jscript: Added RegExp tests. - jscript: Added try statement implementation. - jscript: Added throw statement implementation. - jscript: Added to_object(VT_BOOL) implementation. - jscript: Added to_object(number) implementation. - jscript: Added '-' expression implementation. - jscript: Added '-=' expression implementation. - jscript: Added '*' expression implementation. - jscript: Added '*=' expression implementation. - jscript: Added '/' expression implementation. - jscript: Added '/=' expression implementation. - jscript: Added minus expression implementation. - jscript: Fixed allocation of script buffer. - mshtml: Fixed tests on IE7. - jscript: Added '==' expression implementation. - jscript: Added '!=' expression implementation. - jscript: Added 'new' expression implementation. - jscript: Added switch statement implementation. - jscript: Added break statement implementation. - jscript: Added '|' expression implementation. - jscript: Added '|=' expression implementation. - jscript: Added '&' expression implementation. - jscript: Added '&=' expression implementation. - jscript: Added '^' expression implementation. - jscript: Added '^=' expression implementation. - jscript: Added ',' expression implementation. - jscript: Added '~' expression implementation. - jscript: Added plus expression implementation. - jscript: Added bool and null to number conversion implementation. - jscript: Added eval implementation. - jscript: Added array literal implementation. - jscript: Added to_string(VT_I4) implementation. - jscript: Added String.length implementation. - jscript: Added while and do..while statement implementation. - jscript: Added continue statement implementation. - jscript: Added for statement implementation. - jscript: Added void expression implementation. - jscript: Added String.charAt implementation. - jscript: Added for..in statement implementation. - jscript: Added delete expression implementation. - jscript: Added with statement implementation. - jscript: Added '<<' expression implementation. - jscript: Added '>>' expression implementation. - jscript: Added '>>>' expression implementation. - jscript: Added '<<=' expression implementation. - jscript: Added '>>=' expression implementation. - jscript: Added '>>>=' expression implementation. - jscript: Minor fixes. - jscript: Added more to_string implementation. - jscript: Added function constructor object. - -James Hawkins (32): - advapi32: ERROR_IO_PENDING is returned in Vista only on success. - crypt32: Trace the returned value on failure. - msi: Actions should be run even if the installed state is the same as the requested state. - msi: Make sure read-only source files are set writable after being copied. - riched20: Fix several failing test across several platforms. - comctl32: Fix two failing tests in win98. - comctl32: Fix several failing tests in win98. - comctl32: Allow a little slop in the status bar metric tests. - comctl32: Fix a couple failing tests in win98. - comctl32: Fix a failing test in win98. - comctl32: Fix several test failures in win98. - comctl32: Fix a typo. - comctl32: Fix a failing test for some platforms. - comctl32: Trace the first day of the week. - comctl32: Fix two test failures in win2000. - riched20: Fix two typos that cause a failing test. - msi: Fix a few file access discrepancies between platforms. - urlmon: Fix a failing test with IE7. - urlmon: Fix several failing tests with IE7. - ole32: Fix a few file access discrepancies between platforms. - comctl32: Store the previous timeout value to test with. - secur32: Fix two failing tests in win2k. - shell32: Fix two failing tests in win2k. - mstask: Fix a few failing tests in win2k. - crypt32: Fix a failing test in win9x. - crypt32: Fix a failing test in Vista. - crypt32: Fix a failing test in Vista. - setupapi: Fix a failing test in Vista. - setupapi: Remove a test of an undocumented function that is inconsistent across platforms. - shell32: Remove calls to unicode functions that aren't implemented in win9x. - comctl32: Fix several failing tests in win95. - comctl32: Fix the remaining broken tests in win95. - -Jan de Mooij (1): - comctl32/treeview: Fix pszText NULL pointer dereference. - -Jeff Zaroyko (5): - wined3d: Add missing HeapFree. - ws2_32: ioctlsocket should try to check if argp is valid. - dsound: Fix a few failing tests and a crash on 2008 (revised). - kernel32: Modify DeleteFileW to fail on directories. - dsound: Fix a failing test on XP. - -John Klehm (4): - wintab32: Support overlap statuses in WTOverlap. - wintab32: Support overlap statuses in WTOpen. - wintab32: Support overlap statuses in WTEnable. - gdiplus: Stub implementation of GdipGetImageDecoders and GdipGetImageDecodersSize. - -Juan Lang (31): - crypt32: Check length of sequence before checking tag. - crypt32: Don't store redundant copy of detached hash message data. - crypt32: Add stub for CryptVerifyMessageHash. - crypt32: Add tests for CryptVerifyMessageHash. - crypt32: Implement CryptVerifyMessageHash. - crypt32: Don't crash when asked to verify a signature before the content has been finalized. - crypt32: Test verifying the signature of a detached signed message. - crypt32: Add stub for CryptVerifyDetachedMessageSignature. - crypt32: Add tests for CryptVerifyDetachedMessageSignature. - crypt32: Implement CryptVerifyDetachedMessageSignature. - crypt32: Simplify CryptVerifyMessageSignature. - cabinet: Use helper function to remove duplicate code. - cabinet: Use helper function to remove duplicate code. - crypt32: Assert condition that can occur only in case of a bug. - crypt32: Fix typo. Fixes Coverity item 605. - crypt32: Return FALSE rather than crash if memory allocation fails. Fixes Coverity id 135. - crypt32: Get rid of a magic number and a redundant assignment. - winhttp: Don't reference past the attribute array. Fixes Coverity item 710. - crypt32: Don't set salt's cbData unless allocation succeeds. Fixes Coverity id 133. - user32: Return error if memory allocation fails. Fixes Coverity id 115. - riched20: Use helper function rather than goto to return found position. - devenum: Fix order of operations bug (Coverity id 709). - user32: Don't crash if passed a non-scrollbar HWND. Fixes Coverity id 265. - winex11: Make button_state as large as the maximum number of cursors. Fixes Coverity id 728. - wintrust: Add a few missing defines. - wintrust: Don't assume dwStateAction is set in WINTRUST_DATA. - crypt32: Add support for the CERT_EXTENDED_ERROR_INFO_PROP_ID. - wintrust: Add traces to a few more functions. - include: Fix typo. - include: Add missing defines. - tools/wine.inf: Register cryptdlg. - -Kai Blin (7): - ws2_32: Fix the SO_REUSEADDR tests to work on Win2k3 and newer. - dplayx: Fix static overrun of pDP array in test. (Coverity). - dplayx: Fix possible NULL pointer dereference (Coverity). - dplayx: Fix possible NULL pointer deference in error path (Coverity). - dpnet: Fix initialisation of This pointer (Coverity). - ws2_32: Win NT4 does not zero the sockaddr_in structure on getsockname. - ws2_32: Win98 closesocket() does not wake up select. - -Lei Zhang (4): - sane.ds: Replace wsprintfW with sprintfW. - comctl32: listview: Prevent DragDetect from removing WM_LBUTTONUP messages. - comctl32: Handle listview dragging better. - qcap: Make sure input to AMStreamConfig_SetFormat is not NULL. - -Luis C. Busquets Pérez (2): - d3dx9: Implement D3DXMatrixDecompose. - d3dx9: Add tests for D3DXMatrixDecompose. - -Marcus Meissner (10): - include: Mark up with alloc_size attribute. - shell32: Fixed size passed to MultiByteToWideChar. - winecfg: Fixed buffersize to GetPrivateProfileStringW. - include: Allocation size markup. - dnsapi: Fixed incorrect buffer size to GetComputerNameExW. - secur32: Fixed size passed to GetComputerNameExW. - msi/tests: Reduce buffer to size of string written. - kernel32/tests: Pass correct size to MultiBytetoWideChar. - oleview: Fixed LoadString buffer sizes. - winefile: Fixed sizes to LoadString. - -Michael Karcher (2): - ole32/compobj: Fix function name in comment. - kernel32: Clean up PROFILE_isspaceW. - -Michael Stefaniuc (6): - user32/tests: Remove unreachable break after return (Smatch). - shell32: Fix the Ca, Hu, Ro, Sk, Sv and Wa translations by removing an untranslated string. - wordpad: Fix the Hungarian translation by removing an untranslated and incomplete STRINGTABLE. - wordpad: Change the encoding of the German resource file to utf-8. - worpad: Fix the German translation. - regedit: Fix the Bg, Cs, Da, Es, Hu, It, Ko, Pl, Pt, Ru, Si and Tr translations. - -Mikołaj Zalewski (10): - appwiz.cpl: French should use SUBLANG_NEUTRAL. - oleaut32: Make _argsize and _xsize receive the full TYPEDESC and parent ITypeInfo, use a different function in IDispatch code. - oleaut32: Add some missing simple types to _argsize and _xsize. - oleaut32: VT_USERDEFINED records are passed by value. - include: Add IAutoCompleteDropDown declaration. - shell32: autocomplete: Add stub IAutoCompleteDropDown interface. - shell32: autocomplete: Fix a logical AND to a bitwise AND. - shell32: autocomplete: Make SetOptions handle setting the ACO_AUTOSUGGEST after Init, fix ACO_AUTOSUGGEST|ACO_AUTOAPPEND case. - shell32: autocomplete: Implement GetDropDownStatus. - shell32: autocomplete: Remove some obsolete FIXMEs, update some comments. - -Muneyuki Noguchi (9): - notepad: Update Japanese translation. - appwiz.cpl: Add Japanese resources. - wininet: Update Japanese translation. - view: Add Japanese resources. - cmdlgtst: Add Japanese resources. - comdlg32: Update Japanese translation. - winex11: Fix a buffer overflow bug in X11DRV_KeyEvent() and X11DRV_ToUnicodeEx(). - winex11.drv: Make X11DRV_XIMLookupChars handle a long string properly. - oleview: Add Japanese resources. - -Nicolas Le Cam (2): - comctl32: Fix a failing test for some platforms. - comctl32/tests: Fix a failing test for some platforms. - -Nikolay Sivov (4): - gdiplus: Partially implemented GdipTestControl. - gdiplus: Some defines for Image metadata API. - gdiplus: Added missed stubs for Image metadata access. - gdiplus: Some TRACE(..) for Image calls. - -Owen Rudge (1): - shell32: Check CPL_NEWINQUIRE message in control panel applets if we can't retrieve valid strings/icon. - -Paul Chitescu (2): - user32: Stub for LockWorkStation. - explorer: WM_SYSCOMMAND SC_SCREENSAVE to desktop triggers screen saver. - -Paul Vriens (22): - kernel32/tests: Fix a few tests on win9x. - kernel32/tests: Fix 2 tests on win9x. - urlmon/tests: Fix timeouts for win9x tests. - kernel32/tests: Fix a few failures on win98. - user32/tests: Win9x needs a threadid for CreateThread. - crypt32/tests: Fix a test on Vista. - winmm/tests: Fix a test on win9x. - quartz/tests: Fix the tests on several platforms. - ws2_32/tests: Remove redundant NULL check before HeapFree. - msi/tests: Create only one log file and delete it afterwards. - rpcrt4/tests: Fix some failures on XP-SP3. - gdi32/tests: Prevent a crash on win95. - gdi32/tests: Skip some failing tests on NT4. - setupapi/tests: Fix two failures on win98. - jscript/tests: Fix crash and failures on win9x. - setupapi/tests: Fix a failure on Windows 2000. - kernel32/tests: Skip tests on Win95. - oleaut32/tests: Don't crash on Win95. - msi/tests: Prevent a crash on NT4. - crypt32/tests: Don't crash on NT4. - crypt32/tests: Don't crash on win9x. - crypt32/tests: Add a missing CryptMsgUpdate. - -Peter Dons Tychsen (3): - ntoskrnl: Implement partial stub for IoGetConfigurationInformation(). - services: Fixed problem with services where DependOnServices key is REG_SZ and not REG_MULTI_SZ. - winedevice: Fix problems with driver entries without the "ImagePath" entry in registry. - -Piotr Caban (1): - msxml3: Change SAX IStream parser implementation. - -Reece Dunn (7): - shdocvw: Fixed building on msvc. - richedit20: Fixed building the tests on msvc. - browseui: Fixed building the tests with the Windows SDK. - secur32: Fixed the schannel tests on Vista. - secur32: Fixed the logic on some of the schannel tests. - hlink: Fix the tests for IE7. - shlwapi: Fixed the url tests on Vista. - -Rob Shearman (43): - wine_common_ver.rc: Allow the file version number and string to be automatically constructed from major, minor, build and platform ID numbers. - shell32: Remove defines for WINE_FILEVERSION and WINE_FILEVERSION_STR. - rpcrt4: Only start the RpcSs process for handles to the local server. - rpcrt4: Fix typo in unescape_string_binding_componentW. - rpcrt4: Change type of len parameter of NdrAllocate from size_t to SIZE_T. - include: Define sigset_t in pthread.h if HAVE_SIGSET_T isn't defined. - include: Remove incorrect [optional] attributes from parameters in ddstream.idl. - include: Uncomment declaration of IDirectShowStream in amstream.idl. - include: Fix level of indirection of parameters in GetNotifyCmdLine function of IBackgroundCopyJob2 interface in bits1_5.idl. - include: Fix signature of NearestPoint function of IInkDisp interface in msinkaut.idl. - include: The INewShortcutHookA, INewShortcutHookW and IRunnableTask interface in shobjidl.idl should be local. - include: Add XMLDOMDocumentEvents dispinterface to xmldom.idl. - include: Use placeholder structures with at least one field in vmr9.idl. - include: Fix function names in IVBSAXXMLReader interface in msxml2.idl. - widl: Fix the writing typedefs to dispinterfaces and pointers to interfaces. - msi: Reduce destination file name used in the MoveFiles action to the long file name. - winhttp: Add version resource. - widl: Remove redundant code. - rpcrt4: Free the memory for a registered interface that is in use and when WaitForCallsToComplete is 0. - rpcrt4: Print error messages from RPC message functions when they are called in an invalid way. - rpcrt4: Don't crash in NdrDllGetClassObject when a NULL pclsid is passed in. - rpcrt4: Fix memory leaks of hdr in error paths in RPCRT4_io_thread. - rpcrt4: Fix memory leak of 0-byte buffer allocated during processing of bind packets. - avifil32: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - oleaut32: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - urlmon: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - usp10: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - winedos: Fix the type of res in VGA_DoSetMode. - dsound: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - wintrust: Add explicit "!= NO_ERROR" to expressions that use variables containing error codes as booleans. - advpack: Add explicit "!= S_OK" to expressions that use HRESULTs as booleans. - d3d9: Fix type used to store return value in IDirect3DDevice9Impl_GetNPatchMode. - ole32: Update comments in compobj.c. - kernel32: Fix character count passed to GlobalGetAtomNameW in test_get_atom_name. - msvcrt: Fix character count passed into fgetws in test_fileops. - cryptnet: Define CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS before including any PSDK headers. - include: Make dmusici.h compile when it is included after winspool.h. - include: Make exdisp.h compile when included after commdlg.h. - include: Add DUMMYUNIONNAME to the anonymous union in the uSTGMEDIUM structure in objidl.idl. - include: Add DUMMYUNIONNAME to unions in the _wireVARIANT, TYPEDESC and VARDESC structures in oaidl.idl. - oleaut32: Fix a typo in VarTokenizeFormatString. - include: Add explicit DUMMYUNIONNAME and DUMMYSTRUCTNAME names to anonymous unions in IDL files. - widl: Don't automatically add DUMMYUNIONNAME and DUMMYSTRUCTNAME names to anonymous unions and structs. - -Roderick Colenbrander (1): - wined3d: Degrade an ERR to a TRACE. - -Roy Shea (2): - shell32: Use default system icons if PrivateExtractIconsW in SHGetFileInfoW fails. - kernel32/test: Test import entries of a core windows DLL. - -Stefan Dösinger (3): - wined3d: Don't disable arbfp if the pipeline replacement is in. - wined3d: Some ARB code fixes. - wined3d: Add a test for zenable=false, zwriteenable=false. - -Steven Edwards (1): - widl: Open files in binary mode to avoid corruption from text mode on Windows. - -Tobias Jakobi (2): - wined3d: Fix SHOW_FRAME_MAKEUP debug dump code. - wined3d: Fix long int warnings. - -Vincent Povirk (1): - user32: Use the correct bitmap location for MNS_CHECKORBMP. - -Vitaliy Margolen (4): - kernel32: Use FileStandardInformation to get file size. - dinput: Replace strdup with HeapAlloc. - dinput: Implement DIPROP_KEYNAME property for keyboard device. - kernel32: Use NULL attributes if name and SA are not not specified. - -Vitaly Lipatov (1): - wineboot: Do registry update with wineboot --update in any case. - --- -Alexandre Julliard -julliard@winehq.org +The Wine development release 1.1.6 is now available. + +What's new in this release (see below for details): + - Beginnings of schannel implementation using GnuTLS. + - Many fixes from various code analysis tools. + - Support for X11 desktop work area. + - Fixes for Richedit tables. + - More complete JavaScript support. + - Various bug fixes. + +The source is available from the following locations: + + http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.1.6.tar.bz2 + http://prdownloads.sourceforge.net/wine/wine-1.1.6.tar.bz2 + +Binary packages for various distributions will be available from: + + http://www.winehq.org/site/download + +You will find documentation on http://www.winehq.org/site/documentation + +You can also get the current source directly from the git +repository. Check http://www.winehq.org/site/git for details. + +Wine is available thanks to the work of many people. See the file +AUTHORS in the distribution for the complete list. + +---------------------------------------------------------------- + +Bugs fixed in 1.1.6: + + 2122 wrong window size on startup, busted graphics and invisible text in listboxes. + 3875 ACM format codecs shutdown sound in WINE + 3915 Win32 GTK apps are all black when run in WINE (dogfood) + 5008 Wine 0.9.11 does not run applications on FreeBSD 6.0 + 5145 Microsoft Visual C++ Runtime Library (Etherlords 2 Demo) + 6253 EQ II Patcher Fails + 6382 CaptureWizard fails to install + 7051 EVE Online isn't displaying some elements of the ui + 7186 fonts in applications using cairo ( not only through GTK ) + 7200 Tab control flickers too much + 7257 Documents Manager doesn't find iexplore.exe + 7295 wine.inf's timezone data is inconsistent with Windows + 7368 eISLP -font too small on main list + 7441 GlobalMemoryStatus 2GB limiting results in failure of virtual > physical memory checks + 7452 JScript not functioning + 7488 Screen.ActiveForm run-time error 91 + 7581 Shell Folder AutoComplete List in browseui.dll not implemented + 7645 Wine tests fail under FreeBSD and other problems + 7829 Photoshop CS3 install / Adobe Setup fails at runtime + 7996 serious sam dedicated servers don't work + 9298 Empire at war, best of PC install failes + 9319 Sony Vegas v4.0: Menus dissapear after single view + 9519 Adobe Reader 8.1 (and Acrobat Pro 8): Unable to accept License (window.external object) + 9877 AT1 crashes when system.ini or wini.ini have too many lines + 9929 Internet Explorer 7 installer complains it cannot verify integrity of installation files, quits + 9963 GPSMapEdit: Unimplemented function gdiplus.dll.GdipGetImageDecodersSize + 10544 treeview scrolling on collapsing is broken on windows + 10933 PAF 5 unicode font displays with inconsistent size + 11294 Adobe Imageready 3 and 6 (part of Photoshop 6 and 7) and InDesign 2 tool option window in wrong place + 11735 ClocX: UpdateLayeredWindow needs to be implemented + 11838 Y axis inverted in tablet with OpenCanvas 1.1? + 11938 Valve Hammer Editor unusable: window mostly black + 11943 Wacom Tablet Y-axe gets inverted on click in ArtRage 2.5 + 11948 TF2 and Portal do not render correctly with nvidia-drivers-169.x and above + 12059 Help window cannot be closed + 12133 Desktop directory is invalid + 12144 Endnote demo crashes on launch in gdiplus + 12255 Static sound effects with Syberia 2 + 12309 energyXT gui rendering brings the system down to its knees. + 12421 Digsby beta crashes during login (needs lots of gdiplus functions) + 12447 MSN Messenger 7.0 crash while loading the Contact list + 12861 Gtk+ demo (gtk-demo.exe) doesn't work + 13214 No icons on control buttons with Audacity 1.2.6 + 13520 Facewound crosshair does not render + 13634 dogfood: geany not usable at all + 13728 Crash when running Oblivion installation program + 13745 Installing DirectX breaks "gold" VB6 heavy application + 14188 utorrent - it disconnects fast leaching peers with Error 10022 + 14281 Richedit's EM_SETTEXTEX handler doesn't notice \urtf as valid RTF sequence + 14353 problem with displaying digits in the bookkeeping proram "Mala Ksiegowosc Rzeczpospolitej" + 14422 AutoCAD 2005, Adobe Photoshop CS3 crash on unimplemented function gdiplus.dll.GdipGetFamily + 14642 mIRC 6.33 hang up then IRC channel topic has ISO-8859-2 char + 14674 Wine WordPad fails to correctly open CP1251 RTF documents with russian letter "ya" + 14732 WINE Wordpad crashes horizontally resizing certain RTF documents + 14744 Burning Sea: draw regression under alpha UI elements + 14773 Adobe Photoshop CS3 crashes at startup on unimplemented function gdiplus.dll.GdipGetFontHeight, GdipGetFontStyle + 14800 directx-dinput problem in PES2008 + 14913 Dawn of war, transperent characters become invisable + 14986 Rome Total War v1.5 Gold crashs if buttons that highlight on mouse hover + 15009 Black & White 2 crash on start up since 0.9.44 + 15066 FedExShipManager installer crashes in msi + 15077 Myth II 1.6 fails with Wine 1.1.3 (regression from 1.1.2) + 15096 This user account does not have sufficient rights to install + 15138 Spore crashes after the first stage of life + 15210 MIDI-OX installer crashes + 15215 Microsoft Office 2007: Attempting to update IME dictionary => crash (dogfood) + 15279 Saxo Trader installer crashes into unimplemented msi functoims + 15281 PROFILE_Load and friends doesn't handle ini files with CR-only line endings + 15298 Highway Pursuit crashes with a X Error + 15313 Leela: graphics do not show (win32/GDI?) + 15332 Compiling on PC-BSD with -Werror fails in dlls/mscms/handle.c + 15334 richedit: cursor doesn't change when over a scrollbar + 15335 Regedit: char format, different type arg errors + 15344 reaper sequencer crashes + 15347 Lexware: Installation fails with "Systemprüfung konnte nicht erfolgreich abgeschlossen werden" + 15366 Starcraft cant find CD + 15378 mshtml/tests: dom.c fails in gcc 3.3/CFLAGS="-Werror" + 15387 VB6 Format error in wine 1.1.4 + 15391 "--without-opengl" configure option doesn't compile anymore + 15413 dualcad crashes into msvcrt + 15416 Garena : division by zero in comctl32 + 15488 IFC Trade Terminal crash on unimplemented function dwmapi.dll.DwmExtendFrameIntoClientArea + 15507 winex11.drv regression causes ClocX 1.5 beta 2 installer window to be hidden + +---------------------------------------------------------------- + +Changes since 1.1.5: + +Alexander Morozov (5): + ntoskrnl.exe: Initialize StackSize field of DEVICE_OBJECT structure. + include: Add some definitions. + include: Add usb.h, usb100.h, usb200.h and usbdlib.h. + ntoskrnl.exe: Implement some functions. + ntoskrnl.exe: Fix trace typo. + +Alexander Nicolaysen Sørnes (3): + regedit: Fix char escaping for registry export. + regedit: Fix some fprintf arguments. + netapi32: Improve NetUserGetLocalGroups stub. + +Alexandre Julliard (22): + configure: Always use -fno-builtin if supported, since it's needed for scanf too. + ntdll/tests: Fix a few test failures on NT4. + user32/tests: Fix some more message test failures. + comctl32/tests: Fix a couple of message test failures. + winex11: Fix SetLayeredWindowAttributes when called on a thread that doesn't have any window. + regedit: Fix file exports in ASCII format. + configure: Make sure opengl is not built with --without-opengl is specified. + user32/tests: Fix more message test failures on NT4 and XP. + user32/tests: Fix the winstation tests on NT4. + user32/tests: Fix some input test failures. + user32/tests: Fix the listbox tests on Win9x and NT4. + gdiplus: Fix a string buffer overflow. + advapi32: Always pass a valid argv pointer to a service even if there are no arguments. + oleaut32: Fix a couple of interface registrations to match Windows. + inetcomm: Add missing license header. + ntdll: Preserve the 2K block size returned for CDROMs. + msvcrt: Pass the command interpreter as exe name from _wpopen. + server: Follow symlink even with OBJ_OPENLINK unless it is the last element of the path. + ws2_32: Allow arbitrary-sized iovecs again in WSASendTo and WSARecvFrom. + msi/tests: Clean up the binary.dat file. + widl: Add support for attributes on enum, struct and union definitions. + stdole2: Add some missing attributes and fix some typos. + +Alistair Leslie-Hughes (9): + mshtml: Implement IDispatch for IHTMLDOMNode2. + mshtml: Implement IDispatch for IHTMLDOMNode. + mshtml: Implement IDispatch for IHTMLElementCollection. + mshtml: Implement IDispatch for IHTMLDOMChildrenCollection. + mshtml: Implement IHTMLBodyElement put_background. + msxml3: Correct cast. + gdiplus: Stub GdipRecordMetafileFileName and GdipRecordMetafileFileNameI. + msxml3: Add IXMLHTTPRequest support. + mshtml: Implement IHTMLStyle put/get borderWidth. + +Andrew Nguyen (1): + wine.inf: Add entry for fake wintab32.dll. + +Andrew Talbot (12): + comdlg32: Sign-compare warnings fix. + comctl32: Sign-compare warnings fix. + credui: Sign-compare warnings fix. + crypt32: Sign-compare warnings fix. + crypt32: Sign-compare warnings fix. + dbghelp: Sign-compare warnings fix. + dbghelp: Sign-compare warnings fix. + ddraw: Sign-compare warnings fix. + dinput: Sign-compare warnings fix. + ddraw: Sign-compare warning fix. + dsound: Sign-compare warnings fix. + gdi32: Sign-compare warnings fix. + +Andrey Turkin (7): + ntdll: Add stubbed implementations for NtQueryEaFile and NtSetEaFile. + regedit: Ignore spaces in regedit files. + dwmapi: Add a few stub implementations. + kernel32: Add ExitProcess wrapper to please Shrinker. + wordpad: Fix some unicode bugs. + wordpad: Convert some ANSI calls to Unicode. + wordpad: Fix some compile-time warnings. + +Aric Stewart (19): + imm32: ImmConfigureIME should return 0 when the type is IME_CONFIG_REGISTERWORD and the data is NULL. + mlang/tests: IMultiLanguage2_GetRfc1766FromLcid can return S_FALSE on partial name matching so deal with this properly. + mlang/tests: Some versions of native mlang return E_FAIL when source string is NULL and a source length is supplied. + mlang/tests: GetLastError may not be set if Japanese conversions fail with S_FAIL so do not require that to skip the Japanese tests. + mlang/tests: Skip testing a codepage returning the buggy, legacy unicodeFEFF charset (only appears to exist on windows 2008). + mlang/tests: windows 2008's version of mlang E_FAILs when you pass in a rgelt in IEnumCodePage::Next. + mlang: Correct use of uninitialized rfcstr value (Coverity 796). + user32/tests: GetMenuItemCount returns an INT which can be -1 (Coverity 543). + user32/tests: GetMenuItemCount returns INT so check for -1 (Coverity 542). + ole32: Handle GetMenuItemCount returning -1 by changing UINT to INT (Coverity 228). + version: Check for out of memory in VerInstallFileA/W conversion (Coverity 635). + x11drv: ime: In the update functions if we get a null string with a len report this and fix len to be 0 (Coverity 656 and 655). + winealsa: Don't dereference a potentially NULL value in the WARN statement (Coverity 93). + quartz: Check hr so we are not incrementing a NULL (Coverity 106). + wineoss: Don't dereference a potentially NULL value in the WARN statement (Coverity 93). + d3d8: Initialize IDirect3DDevice8 *device to NULL in case of immediate cleanup (Coverity 795). + oleaut32: In variants check bOverflow to make sure not to accidently overun static buffers in an overflow case (Coverity 313). + browseui: Update AutoComplete Multi to have a stub implemntation of CLSID_ACListISF and IID_IACList2. + mlang/tests: Make sure a given codepage has 'abc' before depending on that conversion to detect if a codepage is convertable. + +Austin English (3): + mscms: Undefine HIWORD to avoid a conflict. + mshtml/tests: Fix gcc warnings. + ntdll: Quiet a noisy fixme. + +Christian Costa (8): + d3dxof: Rewrite check_TOKEN and parse_TOKEN_* to work properly and be more logical. + d3dxof: Implement IDirectXFileDataImpl_GetNextObject. + d3dxof: Do not print an error for interfaces that can be queried to retrieve the type of the object. + d3dxof: Implement IDirectXFileDataReference. + d3dxof: Allow omission of comma which separates array elements. + d3dxof: Enumerate only 2 levels of objects obtained from a reference. + d3dxof: Store number of subojects for all top level objects. + d3dxof: Enable referencing of named subobjects too. + +Damjan Jovanovic (1): + oleaut32: Fix double negative sign regression in VarFormat. + +Detlef Riekenberg (6): + jscript/tests: Fix a typo in ok(). + oleaut32: Remove redundant NULL check before SysFreeString. + msxml3: Remove redundant NULL check before SysFreeString. + msi: Remove redundant NULL check before SysFreeString. + shdocvw: Remove redundant NULL check before SysFreeString. + shdocvw: Set the default homepage. + +Dimitrie O. Paun (1): + user32: Fix a noisy FIXME. + +Dmitry Timoshkov (13): + gdi32: Add a test for PS_NULL pen being equal to NULL_PEN stock object. + gdi32: Make the PS_NULL test pass under Wine. + wine.inf: Correct the Pacific SA Standard Time entry. + gdi32: Do not skip the font metrics update after the DC transform change. + winex11.drv: Add support for _NET_WORKAREA. + user32: Print the expected and received rectangles. + gdi32: Make test_font_metrics require the font being selected into the DC. + gdi32: Add a test for a font being selected into 2 DCs with different transformations. + gdi32: Allow a rounding error in the text justification test. + winex11.drv: Use the monitor work area to decide whether a window should be made managed. + gdi32: Remove the code which bypasses the DC transformation checks. + gdi32: Revert incorrect fix introduced in a5d288f08c08dc19d217093fdf8622605c92a4e0. + winmm: The buffer provided by an application is valid only in the mmioOpen(FOURCC_MEM) case. + +Dylan Smith (21): + richedit: Removed space in front of function signature. + richedit: Fixed test failure that happend on older builds of riched20.dll. + richedit: Fixed test failing on windows version with larger font sizes. + richedit: Make sure border properties are saved for undo/redo. + richedit: Prevent font or colour buffer overflow on stream out. + richedit: Prevent assertion failure when streaming out nested tables. + richedit: Added code to stream out table border properties. + richedit: Fixed a bug preventing streaming out nested table properties. + richedit: Made sure table row gap/offset is copied on append row. + richedit: Print hex string for strcmp test failing on Windows 95, 98 & NT4. + richedit: Swapped the expected and destination buffers in a test. + richedit: Avoided testing for undocumented behaviour causing test to fail. + richedit: Removed invalid assertion. + richedit: Unsigned cast char to avoid EOF equality. + richedit: Use RTF reader for text starting with {\urtf. + richedit: ES_AUTOHSCROLL window style disables word wrapping. + user32: Converted rcScrollBar to screen coordinates. + richedit: Show arrow cursor over scrollbar. + runtest: More helpful error when top of wine directory isn't found. + runtest: Modified the default program so that it might find the test program. + runtest: Let the test program handle the lack of a test name. + +Eric Pouech (21): + dbghelp: Added stubs for add symbol functions. + dbghelp: Added the latest stubs. + dbghelp: Added stub for SymSetScopeFromAddr. + dbghelp,winedump: Added support for symbol 0x113a. + dbghelp,winedump: Added support for symbol 0x1012. + winedump: Added support for dumping long long constants. + winedump: Dump a bit more of information from procedures. + winedump: Add preliminary dumping of 0x1136 and 0x1137 symbols. + dbghelp: Silence symbol 0x1139. + dbghelp,winedump: Added support for 0x113d symbol. + dbghelp,winedump: Added support for symbol 0x113c. + dbghelp,winedump: Added support for symbol symbol. + winedump: Improved a bit the MS Tool V3 description. + dbghelp: Now fully reading the leafs as variant for constants. + dbghelp: Added support for real80 (aka long double) in inner codeview types. + winedump: Now dumping codeview source line information. + winedump: First stab at dumping the "new" line information out of pdb files. + dbghelp: Rewrote the linetab access so that we don't need to allocate intermediate information. + dbghelp: Add support for the newest line number information in pdb files. + msvcrt: Implemented wcsncpy_s. + msvcrt: Implemented splitpath_s. + +Erik Inge Bolsø (1): + kernel32: Fix PROFILE_Load to handle mac line endings. + +Francois Gouget (10): + kernel32/tests: Fix compilation on systems that don't support nameless unions. + jscript: Remove spaces before '\n' in Wine traces. + jscript: Add a trailing '\n' to a Wine trace. + secur32: Fix compilation with GNU TLS 1.0.16. + make_opengl: Avoid the deprecated '$#' construct. + comctl32/tests: FreeMRUList(NULL) crashes on Win98 OSR0. + comctl32/tests: Don't crash if adding the tooltip failed. + mshtml/tests: Add a trailing '\n' to an ok() call. + cryptdlg: Fix compilation on systems that don't support nameless unions. + Assorted spelling fixes. + +Gerald Pfeifer (1): + cryptnet: Include stdarg.h. + +Hans Leidekker (13): + rpcrt4: Add stub implementations for RpcMgmtInqStats and RpcMgmtStatsVectorFree. + winhttp: Implement WinHttpCreateUrl. + winhttp: Add tests for WinHttpCreateUrl. + wininet: Support setting username and password through options. + shlwapi: Fix PathIsValidChar tests that fail on some versions of Windows. + winhttp: Skip notifications that may arrive out of order. + include: Define IRangeList, IIMAPCallback and IIMAPTransport. + inetcomm: Add a stub implementation of IIMAPTransport. + wldap32: Return an error when ldap_parse_sort_control or ldap_parse_vlv_control is called with NULL control array. + wldap32: Add tests for ldap_parse_sort_control and make them pass. + wininet: Option INTERNET_OPTION_CALLBACK is not settable. + wininet: Avoid a crash on certain buffer size queries in HTTP_HttpQueryInfoW. + usp10: Store glyph mappings and widths in the script cache. + +Henri Verbeet (44): + wined3d: Make sure update_minfilter and update_magfilter are initialized. + wined3d: Destroy FBO entries in the context. + wined3d: Fix a memory leak. + wined3d: Don't try to draw with unsupported attribute data types. + wined3d: Get rid of the wantsDepthStencilBuffer in IWineD3DSwapChainImpl. + wined3d: Add/update the D3DPRESENTFLAG constants. + wined3d: Skip copying the depth stencil if it's discarded. + wined3d: Merge pshader_hw_map2gl() and vshader_hw_map2gl(). + wined3d: Use shader_glsl_log() in some more places. + secur32: Skip schannel tests if schannel is unavailable. + secur32: Require gnutls for schannel. + secur32: Basic implementation of schannel AcquireCredentialsHandle/FreeCredentialsHandle. + secur32: Allocate schannel client credentials. + secur32: Allow gnutls debug output to be shown. + wined3d: Move part of the shader instruction table to the backend. + wined3d: atifs_shader_backend doesn't exist anymore. + wined3d: Make some more ARB program functions private to the backend. + wined3d: Make some more GLSL functions private to the backend. + wined3d: Remove the "Wine 1.0 safety path". + wined3d: Split SetGlTextureDesc() up. + wined3d: Set the texture name at surface creation. + wined3d: Properly handle the offset for compressed surfaces in IWineD3DDeviceImpl_UpdateSurface(). + wined3d: If a stage isn't mapped to a texture unit, we can't set default coordinates either. + wined3d: Handle texture coordinates the same way we handle other vertex attributes. + wined3d: Enable lights on the correct swapchain. + secur32: Use ~0UL instead of -1 for invalid schannel handles. + secur32: Improve error handling for gnutls_certificate_allocate_credentials(). + secur32: Forward schannel InitializeSecurityContextA to InitializeSecurityContextW. + d3d9: Use more reasonable texture dimensions. + gdi32: Call AbortProc from StartDoc instead of EndPage. + comdlg32: Add a test for AbortProc handling. + wined3d: Print an error when drawStridedSlow() is called with 0 idxSize and non-NULL idxData (CID 509). + wined3d: Remove a redundant initialization of cfgs in WineD3D_ChoosePixelFormat. + wined3d: Cleanup CreateAdditionalSwapChain error handling a bit (LLVM/Clang). + wined3d: Assign the correct "levels" variable (LLVM/Clang). + wined3d: Remove a redundant initialization of cfgs in CheckDepthStencilCapability (LLVM/Clang). + wined3d: Get rid of some redundant assignments (LLVM/Clang). + wined3d: Set the correct pow2Matrix for cube textures when NPOT textures are supported. + wined3d: Don't do GL calls without a context. + wined3d: Correct some swizzles and write masks in arb_program_shader. + wined3d: Make sure some variables are always initialized. + wined3d: Declare diffuseColor and specularColor inside their respective blocks (LLVM/Clang). + wined3d: Pass the correct RECT to LoadLocation() in LockRect(). + ddraw: Remove a few more redundant inits (LLVM/Clang). + +Huw Davies (9): + inetcomm: Start of IMimeMessage_SetOption. + inetcomm: Start of IMimeBody_SetOption. + inetcomm: Charset name comparison should be case insensitive. + inetcomm: Content-Disposition can have parameters. + inetcomm: Implement IMimeBody_IsType(IBT_EMPTY). + inetcomm: Add wrapper functions MimeOleFindCharset and MimeOleGetDefaultCharset. + include: Add a missing WINAPI. + rpcrt4: Actually set an unmarshalled object ptr to NULL when a NULL pointer id is received. + ole32: Remove an unneeded WINAPI and remove some useless comments. + +Jacek Caban (151): + mshtml: Fixed dynamic properties allocation. + jscript: Added string to number conversion implementation. + jscript: Added Array.push implementation. + jscript: Added Array.join implementation. + jscript: Added Array.toString implementation. + jscript: Added Number constructor implementation. + jscript: Added Number.toString implementation. + jscript: Added Number function implementation. + jscript: Added Array.sort implementation. + jscript: Fixed array literal length calculation. + jscript: Added Array.concat implementation. + jscript: Added Object default value implementation. + jscript: for..in is not error if in expression is not an object. + jscript: Added Array default value implementation. + jscript: Fixed typo in to_integer. + jscript: Added String.substring implementation. + jscript: Added String.toString implementation. + jscript: Added String.valueOf implementation. + jscript: Added String.slice implementation. + jscript: Added String.charCodeAt implementation. + jscript: Added parseInt implementation. + jscript: Remove no longer used jsdisp_set_prototype. + jscript: Added String constructor implementation. + jscript: Added String default value implementation. + jscript: Added String.concat implementation. + jscript: Added String function implementation. + jscript: Added Math.min implementation. + jscript: Added Math.round implementation. + jscript: Added Math.abs implementation. + jscript: Added Math.max implementation. + jscript: Added Math.pow implementation. + jscript: Added Math.ceil implementation. + jscript: Don't call IDispatch as constructor. + jscript: Added Function.toString implementation. + jscript: Added Function default value implementation. + jscript: Added RegExp contruction implementation. + jscript: Fixed a typo. + jscript: Added VT_R8 to string conversion implementation. + jscript: Added Number default value implementation. + jscript: Added object to number conversion implementation. + jscript: Split regexp_match function. + jscript: Added String.replace implementation. + jscript: Added String.match implementation for non-regexp arguments. + jscript: Added String.split implementation. + mshtml: Use ActiveScript for JavaScript in file protocol documents. + mshtml: Fixed tests timeout. + shdocvw: Fixed tests on IE5. + urlmon: Fixed file protocol tests on win9x. + mshtml: Fixed tests on IE7. + urlmon: Fixed potential null dereference. + mshtml.idl: Added IHTMLTableRow declaration. + mshtml.idl: Added DispHTMLTable declaration. + mshtml.idl: Added DispHTMLTableRow declaration. + mshtml: Added IHTMLTableRow stub implementation. + mshtml: Added IDispatchEx support to HTMLTableRow. + mshtml: Added IDispatchEx support to IHTMLTable. + mshtml: Don't use IHTMLControlElement in IDispatchEx implementations. + mshtml: Move IHTMLElementCollection to separated file. + mshtml: Use create_collection_from_nodelist in IHTMLElement::get_children implementation. + mshtml: Use create_all_collection in IHTMLElement::get_all implementation. + mshtml: Store nsIDOMHTMLTableElement in HTMLTable. + mshtml: Added IHTMLTable::get_rows implementation. + mshtml: Added IHTMLTableRow::get_cells implementation. + mshtml: Ignore IDispatchJS in QueryInterface. + jscript: Optimize GetDispID usage. + jscript: Allocate variables when entering execution context. + jscript: Don't clear uninitialized variable. + jscript: Added Date constructor object implementation. + jscript: Added IDispatchEx::GeleteMemberByDispID implementation. + jscript: Added delete expression for EXPRVAL_IDREF implementation. + mshtml.idl: Added IHTMLStyle2 interface declaration. + mshtml: Added IHTMStyle2 stub implementation. + mshtml: Added IHTMLStyle2 to IDispatchEx support. + mshtml: Added IHTMLElement2::get_currentStyle implementation. + jscript: Don't initialize variables without initialiser to undefined in variable_list_eval. + jscript: Fixed conflict in Block statement that caused problems with empty blocks. + jscript: Fixed backslash handling in regular expressions. + jscript: Added possibility to run test scripts from file. + mshtml.idl: Added DispHTMLCurrentStyle dispinterface declaration. + mshtml: Added IDispatchEx support to HTMLCurrentStyle. + mshtml: Moved HTMLStyle to separated header file. + mshtml: Use IDs instead of strings in HTMLStyle implementation. + mshtml: Store nsIDOMCSSStyleDeclaration in HTMLCurrentStyle. + mshtml: Added IHTMLCurrentStyle::get_display implementation. + mshtml: Release nsstyle when destroying HTMLStyle. + mshtml: Added IHTMLStyle::[get|put]_border implementation. + mshtml: Added IHTMLStyle::[get|put]_left implementation. + mshtml: Added IHTMLStyle::[get|put]_cursor implementation. + mshtml: Added IHTMLStyle::[put|get]_top implementation. + mshtml: Added IHTMLStyle::[get|put]_verticalAlign implementation. + mshtml: Added IHTMLStyle::[get|put]_height implementation. + mshtml: Added IHTMLStyle2::[get|put]_position. + mshtml: Added INVOKE_FUNC support to InvokeEx. + mshtml: Fixed handing non-element nodes in IHTMLElementCollection. + mshtml: Added DispHTMLIFrame dispinterface declaration. + msi: Added MsiInstallMissingComponentW stub implementation. + jscript: Added String.indexOf implementation. + jscript: Added a few missing allocation checks (Coverity). + jscript: Fixed compare function check in Array.sort (Coverity). + jscript: Fixed copy&paste bug in disp_propget. + jscript: Fixed list literal length calculation. + jscript: Added Array.pop implementation. + jscript: Fixed numeric escapes unescaping. + jscript: Added encodeURI implementation. + jscript: Added String.split implementation for non-regexp arguments. + mshtml: Added IHTMLElement::get_offsetWidth implementation. + mshtml: Added IHTMLElement3 stub implementation. + mshtml: Added HTMLIFrame stub implementation. + mshtml: Added IDispatchEx support for HTMLIFrame. + mshtml: Added IHTMLStyle::[get|put]_zIndex implementation. + mshtml: Added support for accessing style attributes by CSS syntax. + mshtml: Added IHTMLStyle::[get|put]_textAlign implementation. + mshtml: Added IHTMLStyle::[get|put]_filter implementation. + mshtml: Store nsIDOMHTMLDocument in HTMLDocument. + mshtml: Use stored nsdoc in handle_load. + mshtml: Use stored nsdoc in get_compatMode. + mshtml: Use stored nsdoc in createRange. + mshtml: Use stored nsdoc in get_doc_string. + mshtml: Use stored nsdoc in set_font_size. + mshtml: Use stored nsdoc in exec_hyperlink. + mshtml: Use stored nsdoc in createTextRange. + mshtml: Use stored nsdoc in HTMLCurrentStyle_Create. + mshtml: Use stored nsdoc in IHTMDocument2::get_all. + mshtml: Use stored nsdoc in IHTMLDocument2::get_body. + mshtml: Use stored nsdoc in IHTMLDocument2::put_title. + mshtml: Use stored nsdoc in IHTMLDocument2::get_title. + mshtml: Use stored nsdoc in IHTMLDocument2::write. + mshtml: Use stored nsdoc in IHTMLDocument2::createElement. + mshtml: Use stored nsdoc in IHTMLDocument2::get_styleSheets. + mshtml: Use stored nsdoc in createTextNode. + mshtml: Use stored nselem in get_documentElement. + mshtml: Use stored nsdoc in IHTMLDocument3::getElementById. + mshtml: Use stored nsdoc in prev_node. + mshtml: Use stored nsdoc in IHTMLTxtRange::put_text. + jscript: Added '%' expression implementation. + jscript: Added '%=' expression implementation. + mshtml: Use stored nsdoc in IHTMLTxtRange::expand. + mshtml: Use stored nsdoc in exec_indent. + mshtml: Use stored nsdoc in IHTMLElement::insertAdjacentHTML. + mshtml: Use stored nsdoc in IHTMLElement::insertAdjacentText. + mshtml: Use stored nsdoc in IHTMOptionElement::put_text. + mshtml: Use stored nsdoc in IHTMLOptionElementFactory::create. + mshtml: Get rid of setup_nswindow. + mshtml: Forward IHTMLelement3::[get|put]_disabled to child object if possible. + mshtml: Added IHTMLElement3::[get|put]_implementation. + mshtml: Use IHTMLElement3 in IDispatchEx. + mshtml: Added IHTMLSelectElement::[get|put]_disabled implementation. + mshtml: Don't use IDispatchEx for timer callbacks. + mshtml.idl: Added DispCEventObj declaration. + mshtml: Added IDispatchEx support to HTMLEventObj. + mshtml: Moved events declaration to separated file. + +James Hawkins (31): + comctl32: Fix several failing tests in win95. + comctl32: Fix a failing test in win95. + comctl32: Add a missing newline. + crypt32: Fix several test failures in win98. + ntdll: Fix a couple failing tests in NT4. + oleaut32: Fix a failing test in win95. + secur32: Fix a failing test in win95. + comctl32: Fix a failing test in win9x. + msi: Fix several test failures in win9x. + crypt32: Fix several failing tests in win9x. + comctl32: Fix a test on locales where default first day of week is not the max value. + msi: Add a stub implementation of MsiDatabaseMerge. + msi: Forward MsiDatabaseMergeA to MsiDatabaseMergeW. + msi: Fix a test that fails in win95. + comctl32: Only log system messages. + comctl32: Fix several test failures in win2k. + comctl32: Only log system messages. + msi: Implement the DROP TABLE sql command. + msi: Resolve file source paths dynamically, as the source directory can be changed. + msi: Remove a break that kept other columns from getting the table name. + msi: Remove the columns in reverse order. + msi: Add tests for dropping tables with multiple columns. + msi: Don't update the table columns if there are no more columns. + msi: Remove a part of a debugging statement that was accidentally left in. + msi: Add tests for converting record fields between strings and ints. + msi: Add initial implementation of MsiDatabaseMerge, with tests. + msi: Replace lengthy calls to MSI_DatabaseOpenView with MSI_OpenQuery. + msi: Add a stub implementation of MsiDetermineApplicablePatches. + msi: Add extra constraints on the formatting string of edit path text. + msi: Initialize the count variable to zero. + comctl32: Fix MCM_SETFIRSTDAYOFWEEK when the first day set is greater than max allowed. + +Jan-Peter Nilsson (1): + wininet: Fix HTTP_ProcessCookies only processing one cookie. + +Jeff Zaroyko (2): + hhctrl.ocx: Always set WS_OVERLAPPEDWINDOW. + msvcrt: Avoid a NULL pointer deref in ctime. + +John Klehm (3): + wintab32: Improve tracing of LOGCONTEXT struct. + wintab32: Handle negative output context range for y-axe. + wintab32: Send notification when z-order changes. + +Joris Huizer (1): + version/tests: Corrected memset placement. + +Juan Lang (40): + cryptui: Implement CryptUIDlgViewCertificateA on top of CryptUIDlgViewCertificateW. + cryptui: Build import lib. + wintrust: Search all additional stores when building a chain, not just the first one. + wintrust: Store the error status and confidence for each element in the chain. + wintrust: Always initialize CERT_CHAIN_PARA's RequestedUsage. + wintrust: Use helper function to allocate CRYPT_PROVIDER_DATA. + wintrust: Use helper function to add the trust steps to execute. + wintrust: Only do policy check if pointer is set. + wintrust: Check that the end certificate in the chain isn't disallowed to match native behavior. + wintrust: Support the CERT_CERTIFICATE_ACTION_VERIFY action. + cryptdlg: Implement CertViewPropertiesA on top of CertViewPropertiesW. + cryptdlg: Implement CertViewPropertiesW on top of CryptUIDlgViewCertificateW. + cryptdlg: Implement CertTrustInit. + cryptdlg: Implement CertTrustFinalPolicy. + include: Add definition of CRYPTUI_DISABLE_ISSUERSTATEMENT. + wintrust: Map cert trust error status to a windows error. + wintrust: Use helper function for setting confidence in SoftpubCheckCert. + wintrust: Only set the error on the root element of the chain. + secur32: Fix test failure with neither gnutls nor ntlm_auth available. + inetmib1: Skip tests if a portion of inetmib1 isn't implemented. + wintrust: Add stub for WTHelperGetKnownUsages. + wintrust: Add tests for WTHelperGetKnownUsages. + wintrust: Implement WTHelperGetKnownUsages. + wintrust: Implement OpenPersonalTrustDBDialog. + wininet: Trace the cache file entry's local file name rather than the passed-in cache entry info's local file name, as the caller may have passed a NULL pointer. + wininet: Don't call URL_LocalFileNameToPathA when asked for a unicode string and URL_LocalFileNameToPathW fails. + wininet: Fix trace typo. + cryptnet: Don't access URL cache entry before it's been read. + cryptnet: Set cache expiration time of objects that have an expiration time to the object's expiration time, rather than relying on the HTTP Expires header. + wintrust: Implement CryptSIPGetSignedDataMsg for .cat files. + crypt32: Implement CryptSIPRetrieveSubjectGuid for .cat files. + wintrust: Don't hardcode supported OIDs, let CryptDecodeObject handle it directly. + crypt32: Fix test failures on NT4. + crypt32: Fix some chain failures on Win9x/NT4. + crypt32: Remove an error that no longer fails. + crypt32: Fix error handling for cyclic chains. + wintrust: Fix test failures on Win9x. + inetmib1: Fix some test failures on Win9x/NT4. + inetmib1: Fix remaining failure on Win9x/NT4. + crypt32: Fix some test failures on Win9x. + +Kai Blin (2): + secur32: Make GetComputerObjectName(A|W) tests work on win2k3 domains. + dplayx: Set tests to "interactive" to avoid timing out on all machines. + +Kirill K. Smirnov (1): + oleaut32: Add tests for metafiles, make them pass under Wine. + +Kjell Rune Skaaraas (1): + wined3d: Implement IWineD3DResourceImpl_GetPriority and IWineD3DResourceImpl_SetPriority for resource management. + +Konstantin Kondratyuk (2): + fonts: Add afii61352 into tahoma.sfd. + fonts: Add afii61352 into tahomabd.sfd. + +Lei Zhang (11): + winspool: Check the return results from schedule_* functions. + gdiplus: Allocate enough space for BITMAPINFO in GdipCreateTextureIA. + gdiplus: Free memory on a failure. + gdiplus: Allocate enough space for BITMAPINFO in GdipBitmapLockBits. + gdiplus: Allocate enough space for BITMAPINFO in GdipBitmapUnlockBits. + gdiplus: Allocate enough space for BITMAPINFO in GdipLoadImageFromStream. + comctl32: Avoid a divide by zero in listview. + regedit: Use W version of TreeView_GetItem. + regedit: Check return values, don't request unneeded value which always fails. + regedit: Make branch export behavior work more like native regedit. + regedit: Pass VK_DELETE messages to Listview/Treeview child windows. + +Louis Lenders (2): + shdocvw: Create default App Paths key for iexplore.exe. + msi: Add stub for MsiSetExternalUIRecord. + +Maarten Lankhorst (7): + quartz: Implement IMediaPosition::put_CurrentPosition. + quartz: Add missing calls to EndFlush. + quartz: Don't abort starting for unconnected pin in avi splitter. + quartz: Return VFW_E_WRONG_STATE in file source if flushing. + quartz: Requeue in pullpin if request for data timed out. + dsound: Fix volume and panning for primary buffer. + winealsa.drv: Don't hang on last few bytes not played. + +Marcus Meissner (6): + jscript: Fixed crash in run test. + jscript: Fix number conversion in non-English locales. + msi/tests: Fix explicit C:\\Program Files\\ references. + msi: Fix potential uninitialized use of substg. + gdiplus: Also handle 32bpp bitmaps. + advapi32: Check for NULL ptr. + +Michael Karcher (12): + msxml3/tests: Clean up test_removeChild. + msxml3: removeChild can only delete direct children. + msxml3: Fail a bit earlier on removeChild(...,NULL,...). + msxml3: Simplify IXMLDOMNode::removeChild. + msxml3: Parameter validation for IXMLDOMNode::replaceChild and tests. + msxml3/tests: Valgrind fix. + msxml3: Basic implementation of IXMLDOMNode::replaceChild. + msxml3: replaceNode accepts IXMLDOMElement instead of IXMLDOMNode. + msxml3: Handle all variant types in IXMLDOMDocument::createNode. + msxml3: Revert "Simplify IXMLDOMNode::removeChild". + msxml3: _domtext->element is in fact a IXMLDOMNode. + msxml3: Text node should not aggregate element. + +Michael Stefaniuc (28): + oleaut32/tests: Remove redundant NULL check before SysFreeString (Smatch). + jscript: Remove redundant NULL check before SysFreeString (Smatch). + msxml3/tests: Remove redundant NULL check before SysFreeString (Smatch). + oleaut32: Remove redundant NULL check before SysFreeString (Smatch). + shlwapi/tests: Remove redundant NULL check before SysFreeString (Smatch). + oleaut32/tests: Fix printf format warning. + shell32: Use FAILED instead of !SUCCEEDED. + ole32: Use the right FAILED/SUCCEEDED macro instead of negating the opposite. + qmgr: Use FAILED instead of !SUCCEEDED. + quartz: Use the right FAILED/SUCCEEDED macro instead of negating the opposite. + ddraw/tests: Use FAILED instead of !SUCCEEDED. + urlmon/tests: Use FAILED instead of !SUCCEEDED. + mshtml/tests: Use FAILED instead of !SUCCEEDED. + d3d9/tests: Use FAILED instead of !SUCCEEDED. + shlwapi: Use FAILED instead of !SUCCEEDED. + dplayx: Use SUCCEEDED instead of !FAILED. + qcap: Use the right FAILED/SUCCEEDED macro instead of negating the opposite. + shdocvw: Use FAILED instead of !SUCCEEDED. + comctl32: Use FAILED instead of !SUCCEEDED. + dxdiagn: Use FAILED instead of !SUCCEEDED. + d3dxof: Use FAILED instead of !SUCCEEDED. + winefile: Use FAILED instead of !SUCCEEDED. + msxml3/tests: Use SUCCEEDED instead of !FAILED. + itss/tests: Use FAILED instead of !SUCCEEDED. + winecfg: Use FAILED instead of !SUCCEEDED. + msi: Use the right FAILED/SUCCEEDED macro instead of negating the opposite. + oleaut32: Use FAILED instead of !SUCCEEDED. + shell32/tests: Use FAILED instead of !SUCCEEDED. + +Muneyuki Noguchi (22): + regedit: Use "MS Shell Dlg" 9 in Japanese resources. + wineboot: Use "MS Shell Dlg" 9 in Japanese resources. + winefile: Use "MS Shell Dlg" 9 in Japanese resources. + taskmgr: Use "MS Shell Dlg" 9 in Japanese resources. + winecfg: Use "MS Shell Dlg" 9 in Japanese resources. + wordpad: Use "MS Shell Dlg" 9 in Japanese resources. + winhlp32: Use "MS Shell Dlg" 9 in Japanese resources. + notepad: Use "MS Shell Dlg" 9 in Japanese resources. + avifil32: Use "MS Shell Dlg" 9 in Japanese resources. + setupapi: Use "MS Shell Dlg" 9 in Japanese resources. + shell32: Use "MS Shell Dlg" 9 in Japanese resources. + user32: Use "MS Shell Dlg" 9 in Japanese resources. + wineps.drv: Use "MS Shell Dlg" 9 in Japanese resources. + wininet: Use "MS Shell Dlg" 9 in Japanese resources. + comctl32: Use "MS Shell Dlg" 9 in Japanese resources. + msacm32: Use "MS Shell Dlg" 9 in Japanese resources. + oledlg: Use "MS Shell Dlg" 9 in Japanese resources. + serialui: Use "MS Shell Dlg" 9 in Japanese resources. + shlwapi: Use "MS Shell Dlg" 9 in Japanese resources. + write: Add Japanese resources. + reg: Add Japanese resources. + mshtml: Add Japanese resources. + +Nikolay Sivov (7): + gdiplus: Stub for GdipSetPathGradientBlend. + gdiplus: Implement GdipGetTextureTransform with test. + gdiplus: Implemented GdipSetTextureTransform with tests. + gdiplus: Implemented GdipResetTextureTransform. + gdiplus: Implemented GdipSetClipRect/GdipSetClipRectI. + gdiplus: Implemented GdipSetClipPath. + gdiplus: Stubs for GdipIsVisiblePoint/GdipIsVisiblePointI. + +Paul Vriens (39): + kernel32/tests: Use skip instead of trace. + kernel32/tests: Skip some tests on win9x. + kernel32/tests: Fix tests on NT4. + kernel32/tests: Make sure we can remove a test directory. + kernel32/tests: Add extra tests for SetCurrentDirectory. + ddraw/tests: Fix a test on a Win98 box. + dsound/tests: Fix failure on Win9x and NT4. + userenv/tests: Don't crash on NT4. + ntdll/tests: Use skip and add a FreeLibrary. + ntdll/tests: Show that we are skipping tests. + ntdll/tests: Show that we are skipping tests. + imm32/tests: Skip tests when IME support is not implemented. + kernel32/tests: Add a skip. + kernel32/tests: Add a skip. + comctl32/tests: Don't crash on some win9x boxes. + gdi32/tests: Fix a few failures on win9x. + kernel32/tests: Fix the remaining errors on win95. + kernel32/tests: Fix some failures on win9x. + kernel32/tests: Add some skips to fix failures on WinMe. + kernel32/tests: We need the return value. + kernel32/tests: Fix failures on WinMe. + user32/tests: Run tests on win95 again. + user32/tests: Fix failures on W2K and below. + kernel32/tests: Add a missing newline. + advapi2/tests: Compare instead of assign. + inetmib1/tests: Compare instead of assign. + msxml3/tests: Compare instead of assign. + shell32/tests: Compare instead of assign. + gdi32/tests: Skip some tests on Win9x/WinMe. + shlwapi/tests: Don't crash on NT4. + wininet/tests: Don't crash on W2K and below. + lz32/tests: Change a trace into a skip. + ole32/tests: Fix two failures on NT4. + shell32/tests: Fix a failure on NT4. + wintrust/tests: Vista/W2K8 have some extra struct members. + user32/tests: Don't crash on NT4. + winmm/tests: Fix the failures on Win9x and WinMe. + winmm/tests: Fix some failures on Vista and W2K8. + spoolss/tests: Fix a failure on Vista/W2K8. + +Philip Nilsson (1): + configure: Add i486-mingw to the cross-compiler prefixes. + +Piotr Caban (9): + msxml3: Change order of interface recognition and fix typo. + msxml3: Fix xmlnode_get_xml to work properly with XML_DOCUMENT_NODE. + msxml3/test: Add test for ISAXXMLReader_parse (passing XMLDOMDocument as argument). + msxml: Partial implementation of ISAXXMLReader_putProperty. + msxml: Fix implementation of ISAXContentHandler_characters. + msxml: Rewrite ISAXContentHandler_characters. + msxml: Fix parsing <.../> elements. + msxml: Added ISAXLexicalHandler_comment event. + msxml: Added CDATA related events handling. + +Reece Dunn (1): + kernel32: Be more verbose when reporting the sync test failures. + +Rob Shearman (58): + include: Add DShellFolderViewEvents to shldisp.idl. + rpcrt4: Don't call VirtualFree with MEM_RELEASE and non-zero size. + msvcrt: Fix mutual exclusion over logical or is always a non-zero constant. + msvcrt: Fix testing zero-valued expression with bitwise and in find_best_locale_proc. + msvcmaker: Define USE_COMPILER_EXCEPTIONS and HAVE_SPAWNVP. + msvcmaker: Fix the arguments passed to winebuild to generate the .def file. + msvcmaker: Fix the generated filename for the spec file for modules with extensions other than .dll. + msvcmaker: Fix generated imports for Wine modules and link with delayed imports. + msvcmaker: Factor out some common settings. + msvcmaker: Add HAVE_* defines for some types present in the MSVC build environment. + msvcmaker: Update the HAVE_* defines for headers in the generated config.h file. + msvcmaker: Remove the defining of __ASM_SHORT and __ASM_STRING in the generated config.h file. + msvcmaker: Update the function list for which HAVE_* defines are written into config.h. + msvcmaker: Add support for building wine.lib. + msvcmaker: Fix invocation of winebuild to generate compatible .def files. + msvcmaker: Generate .h files from .idl files specified in IDL_H_SRCS makefile rules. + msvcmaker: Generate include project and make every wine module depend on it. + msvcmaker: Fix detection of static libraries. + msvcmaker: Define _USE_MATH_DEFINES so that M_PI and other constants are defined when including . + urlmon: Fix race in protocol tests. + ole32: Create a dummy window for use in the drag and drop API tests. + ole32: Fix clipboard test failures on some versions of Windows. + winebuild: Declare fatal_error and fatal_perror as non-returning functions. + uxtheme: SetPropW returns a BOOL not an HRESULT. + shlwapi: Use an error code instead of -1 for signalling prefix not being found in URL_GuessScheme. + d3d9: Fix incorrect ordering of brackets in IDirect3DVertexShader9Impl_GetDevice. + avifil32: Fix type of variable used to store the result of ICCompress in AVIFILE_EncodeFrame. + oledlg: Fix the type of ret in UIINSERTOBJECTDLG_PopulateObjectTypes. + avifil32: Fix treating the return values of mmio* functions as HRESULTs instead of MMRESULTs. + d3d8: Fix incorrect ordering of brackets in IDirect3DVertexShader8Impl_GetDevice. + comcat: Fix mixing of HRESULT and LSTATUS types in COMCAT_CLSID_IEnumGUID_Next, COMCAT_IEnumCATEGORYINFO_Next and COMCAT_CATID_IEnumGUID_Next. + advapi32: Output the last error when services tests fail. + cabinet: Check buffer size before copying in NONEfdi_decomp. + include: Define DD_OK to S_OK instead of 0. + include: Wrap uses of u_* types in ws2tcpip.h with WS() macro. + winhttp: Fix compilation with MinGW/MSVC. + urlmon: Compare HRESULT value explicitly against S_OK instead of using an implicit != 0 comparison. + wininet: Compare HRESULT values explicitly against S_OK instead of using an implicit != 0 comparison. + winedos: Compare HRESULT value explicitly against S_OK instead of using an implicit != 0 comparison. + quartz: Don't use strlenW in array size declaration. + quartz: Fix placement of WINAPI attribute in fnFoundSeek typedef. + wininet: Make WININET_AllocHandle 64-bit safe by using the correct type in the sizeof expression. + include: Generate error codes with correct type in urlmon.idl. + oleaut32: Make the code in copy_to_variant and copy_from_variant more portable. + wininet: Add tests for InternetTimeFromSystemTimeW with insufficient buffer. + wininet: Fix behaviour of InternetTimeFromSystemTimeA/W when a buffer that is too small is passed in. + wininet: Move internet time tests from http.c to internet.c. + Add configure check for dirent.h and readdir. + d3d8/9: Use WINED3D_OK instead of D3D_OK in vertexshader.c. + wininet: Return error codes explicitly from URLCache functions instead of returning a BOOL and storing the error code in the last error value. + wininet: Fix GetUrlCacheEntryInfoA/W when a NULL lpCacheEntryInfo parameter is passed in. + wininet: Add tests for passing invalid parameters into InternetTimeFromSystemTimeA/W. + wininet: Fix behaviour of InternetTimeFromSystemTimeA/W when dealing with invalid parameters. + wininet: Validate parameters passed to RetrieveUrlCacheEntryInfoA/W. + wininet: Get rid of rc variable in InternetReadFile_test. + wininet: Fix crash when calling HttpQueryInfoA/W(HTTP_QUERY_RAW_HEADERS) before any response has been received from a server. + msvcmaker: Don't generate project files for DLLs that can't be compiled with MSVC. + msvcmaker: Don't automatically add a define for the DLL name. + +Roderick Colenbrander (7): + wined3d: Re-add a comment which got lost. + wined3d: UpdateSurface should take into account the offset from the source rectangle. + opengl32: Don't run wgl tests on old gl drivers. + opengl32: Add some driver traces to the tests. + opengl32: Remove some tests which cause issues on win9x. + opengl32: Merge recent opengl extensions and prepare for opengl 3.0. + opengl32: Add a test case for WGL_ARB_create_context/opengl3. + +Stefan Dösinger (1): + wined3d: Initialize standalone surface parameters. + +Stefan Leichter (1): + winscard: Add stubs for SCardAddReaderToGroupA/W. + +Ulrich Czekalla (1): + shell32: Revert c1f2824429286dd60fac723611b801e67eb745b1. It caused poor performance. + +Vincent Povirk (2): + shell32/tests: Accept delays in getting ABN_POSCHANGED notifications. + user32: Handle undocumented WM_POPUPSYSTEMMENU message. + +Vitaliy Margolen (3): + user32/tests: Use empty_message_queue with timeouts. + user32/tests: Make it easier to identify failed tests. + user32/tests: Move shell test to the end - killing explorer affects lots of tests. + +Vitaly Lipatov (1): + include/ddk: Fix include path and include guard name. + +-- +Alexandre Julliard +julliard@winehq.org diff --git a/VERSION b/VERSION index 41c2c19075c..9ba442c9903 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Wine version 1.1.5 +Wine version 1.1.6 diff --git a/configure b/configure index 8e18861f6d4..30e12a34ad8 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for Wine 1.1.5. +# Generated by GNU Autoconf 2.61 for Wine 1.1.6. # # Report bugs to . # @@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='Wine' PACKAGE_TARNAME='wine' -PACKAGE_VERSION='1.1.5' -PACKAGE_STRING='Wine 1.1.5' +PACKAGE_VERSION='1.1.6' +PACKAGE_STRING='Wine 1.1.6' PACKAGE_BUGREPORT='wine-devel@winehq.org' ac_unique_file="server/atom.c" @@ -1307,7 +1307,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Wine 1.1.5 to adapt to many kinds of systems. +\`configure' configures Wine 1.1.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1376,7 +1376,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Wine 1.1.5:";; + short | recursive ) echo "Configuration of Wine 1.1.6:";; esac cat <<\_ACEOF @@ -1508,7 +1508,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Wine configure 1.1.5 +Wine configure 1.1.6 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1522,7 +1522,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Wine $as_me 1.1.5, which was +It was created by Wine $as_me 1.1.6, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -26385,7 +26385,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Wine $as_me 1.1.5, which was +This file was extended by Wine $as_me 1.1.6, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -26438,7 +26438,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Wine config.status 1.1.5 +Wine config.status 1.1.6 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c index a3f96580a10..4125ea17201 100644 --- a/dlls/comctl32/monthcal.c +++ b/dlls/comctl32/monthcal.c @@ -913,7 +913,7 @@ MONTHCAL_SetFirstDayOfWeek(MONTHCAL_INFO *infoPtr, LPARAM lParam) } else if(lParam >= 7) { - infoPtr->firstDay = localFirstDay; + infoPtr->firstDay = 6; /* max first day allowed */ infoPtr->firstDayHighWord = TRUE; } else diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c index 9d3635d6444..108df0dc6c5 100644 --- a/dlls/crypt32/tests/encode.c +++ b/dlls/crypt32/tests/encode.c @@ -225,18 +225,22 @@ static void test_decodeInt(DWORD dwEncoding) /* check with NULL integer buffer */ ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, NULL, 0, 0, NULL, NULL, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD, - "Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_EOD || + GetLastError() == OSS_BAD_ARG /* Win9x */), + "Expected CRYPT_E_ASN1_EOD or OSS_BAD_ARG, got %08x\n", GetLastError()); /* check with a valid, but too large, integer */ ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, bigInt, bigInt[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_LARGE, + ok((!ret && GetLastError() == CRYPT_E_ASN1_LARGE) || + broken(ret) /* Win9x */, "Expected CRYPT_E_ASN1_LARGE, got %d\n", GetLastError()); /* check with a DER-encoded string */ ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, testStr, testStr[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG, - "Expected CRYPT_E_ASN1_BADTAG, got %d\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG || + GetLastError() == OSS_PDU_MISMATCH /* Win9x */ ), + "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %08x\n", + GetLastError()); for (i = 0; i < sizeof(ints) / sizeof(ints[0]); i++) { /* When the output buffer is NULL, this always succeeds */ @@ -525,8 +529,10 @@ static void testTimeDecoding(DWORD dwEncoding, LPCSTR structType, compareTime(&time->sysTime, &ft); } else - ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG, - "Expected CRYPT_E_ASN1_BADTAG, got 0x%08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG || + GetLastError() == OSS_PDU_MISMATCH /* Win9x */ ), + "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %08x\n", + GetLastError()); } static const BYTE bin20[] = { @@ -645,8 +651,10 @@ static void test_decodeFiletime(DWORD dwEncoding) size = sizeof(ft1); ret = pCryptDecodeObjectEx(dwEncoding, X509_CHOICE_OF_TIME, bogusTimes[i], bogusTimes[i][1] + 2, 0, NULL, &ft1, &size); - ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT, - "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_CORRUPT || + GetLastError() == OSS_DATA_ERROR /* Win9x */), + "Expected CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08x\n", + GetLastError()); } } @@ -1487,13 +1495,17 @@ static void test_decodeAltName(DWORD dwEncoding) ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, unimplementedType, sizeof(unimplementedType), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG, - "Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG || + GetLastError() == OSS_DATA_ERROR /* Win9x */), + "Expected CRYPT_E_ASN1_BADTAG or OSS_DATA_ERROR, got %08x\n", + GetLastError()); ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, bogusType, sizeof(bogusType), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT, - "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_CORRUPT || + GetLastError() == OSS_DATA_ERROR /* Win9x */), + "Expected CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08x\n", + GetLastError()); /* Now expected cases */ ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, emptySequence, emptySequence[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, @@ -2147,8 +2159,10 @@ static void test_decodeBasicConstraints(DWORD dwEncoding) ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2, inverted, inverted[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT, - "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_CORRUPT || + GetLastError() == OSS_DATA_ERROR /* Win9x */), + "Expected CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08x\n", + GetLastError()); ok(!buf, "Expected buf to be set to NULL\n"); /* Check with a non-DER bool */ ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2, @@ -2167,8 +2181,10 @@ static void test_decodeBasicConstraints(DWORD dwEncoding) ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2, (LPBYTE)encodedCommonName, encodedCommonName[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize); - ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT, - "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError()); + ok(!ret && (GetLastError() == CRYPT_E_ASN1_CORRUPT || + GetLastError() == OSS_DATA_ERROR /* Win9x */), + "Expected CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08x\n", + GetLastError()); /* Now check with the more complex CERT_BASIC_CONSTRAINTS_INFO */ ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS, emptyConstraint, sizeof(emptyConstraint), CRYPT_DECODE_ALLOC_FLAG, NULL, diff --git a/dlls/cryptdlg/main.c b/dlls/cryptdlg/main.c index d87d480f038..46fb7ed10bf 100644 --- a/dlls/cryptdlg/main.c +++ b/dlls/cryptdlg/main.c @@ -16,6 +16,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define NONAMELESSUNION + #include "config.h" #include @@ -240,11 +242,11 @@ static CERT_VERIFY_CERTIFICATE_TRUST *CRYPTDLG_GetVerifyData( * called directly: */ if (data->pWintrustData->dwUnionChoice == WTD_CHOICE_BLOB && - data->pWintrustData->pBlob && data->pWintrustData->pBlob->cbMemObject == + data->pWintrustData->u.pBlob && data->pWintrustData->u.pBlob->cbMemObject == sizeof(CERT_VERIFY_CERTIFICATE_TRUST) && - data->pWintrustData->pBlob->pbMemObject) + data->pWintrustData->u.pBlob->pbMemObject) pCert = (CERT_VERIFY_CERTIFICATE_TRUST *) - data->pWintrustData->pBlob->pbMemObject; + data->pWintrustData->u.pBlob->pbMemObject; return pCert; } @@ -432,7 +434,7 @@ BOOL WINAPI CertViewPropertiesW(CERT_VIEWPROPERTIES_STRUCT_W *info) wtd.cbStruct = sizeof(wtd); wtd.dwUIChoice = WTD_UI_NONE; wtd.dwUnionChoice = WTD_CHOICE_BLOB; - wtd.pBlob = &blob; + wtd.u.pBlob = &blob; wtd.dwStateAction = WTD_STATEACTION_VERIFY; err = WinVerifyTrust(NULL, &cert_action_verify, &wtd); if (err == ERROR_SUCCESS) @@ -449,7 +451,7 @@ BOOL WINAPI CertViewPropertiesW(CERT_VIEWPROPERTIES_STRUCT_W *info) uiInfo.pCertContext = info->pCertContext; uiInfo.cPurposes = info->cArrayPurposes; uiInfo.rgszPurposes = (LPCSTR *)info->arrayPurposes; - uiInfo.hWVTStateData = wtd.hWVTStateData; + uiInfo.u.hWVTStateData = wtd.hWVTStateData; uiInfo.fpCryptProviderDataTrustedUsage = TRUE; uiInfo.cPropSheetPages = info->cArrayPropSheetPages; uiInfo.rgPropSheetPages = info->arrayPropSheetPages; diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index 3211076bb29..c49d5b6792e 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -9687,7 +9687,7 @@ static void zwriteenable_test(IDirect3DDevice9 *device) { ok(hr == D3D_OK, "IDirect3DDevice9_BeginScene failed with 0x%08x\n", hr); if(SUCCEEDED(hr)) { /* The Z buffer is filled with 1.0. Draw a red quad with z = 0.1, zenable = D3DZB_FALSE, zwriteenable = TRUE. - * The red color is written because the z test is disabled. The question is wether the z = 0.1 values + * The red color is written because the z test is disabled. The question is whether the z = 0.1 values * are written into the Z buffer. After the draw, set zenable = TRUE and draw a green quad at z = 0.9. * If the values are written, the z test will fail(0.9 > 0.1) and the red color remains. If the values * are not written, the z test succeeds(0.9 < 1.0) and the green color is written. It turns out that diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c index 0bd59479e67..5fae6d58761 100644 --- a/dlls/d3dxof/d3dxof.c +++ b/dlls/d3dxof/d3dxof.c @@ -1300,7 +1300,7 @@ static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface(IDirectXFileData* ifac return S_OK; } - /* Do not print an error for interfaces that can be queried to retreive the type of the object */ + /* Do not print an error for interfaces that can be queried to retrieve the type of the object */ if (!IsEqualGUID(riid, &IID_IDirectXFileBinary) && !IsEqualGUID(riid, &IID_IDirectXFileDataReference)) ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); @@ -1520,7 +1520,7 @@ static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileD return S_OK; } - /* Do not print an error for interfaces that can be queried to retreive the type of the object */ + /* Do not print an error for interfaces that can be queried to retrieve the type of the object */ if (!IsEqualGUID(riid, &IID_IDirectXFileData) && !IsEqualGUID(riid, &IID_IDirectXFileBinary)) ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index cb0bda51448..2eb2ae2e5a9 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -3248,7 +3248,7 @@ IDirect3DDeviceImpl_7_SetTransform(IDirect3DDevice7 *iface, D3DMATRIX *Matrix) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); - D3DTRANSFORMSTATETYPE type = TransformStateType; + D3DTRANSFORMSTATETYPE type; HRESULT hr; TRACE("(%p)->(%08x,%p): Relay\n", This, TransformStateType, Matrix); @@ -3343,7 +3343,7 @@ IDirect3DDeviceImpl_7_GetTransform(IDirect3DDevice7 *iface, D3DMATRIX *Matrix) { ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); - D3DTRANSFORMSTATETYPE type = TransformStateType; + D3DTRANSFORMSTATETYPE type; HRESULT hr; TRACE("(%p)->(%08x,%p): Relay\n", This, TransformStateType, Matrix); diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index a1e5793b4f4..f42836dceca 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -250,7 +250,7 @@ static const char *dump_mime_flags(DWORD flags) } #endif -static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to) +static HRESULT check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to) { CHAR convert[MAX_PATH]; BYTE dest[MAX_PATH]; @@ -259,21 +259,37 @@ static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to) static WCHAR strW[] = {'a','b','c',0}; + /* Check to see if the target codepage has these characters or not */ + if (from != CP_UTF8) + { + BOOL fDefaultChar; + char ch[10]; + int cb; + cb = WideCharToMultiByte( from, WC_NO_BEST_FIT_CHARS | WC_COMPOSITECHECK | WC_DEFAULTCHAR, + strW, 3, ch, sizeof(ch), NULL, &fDefaultChar); + + if(cb == 0 || fDefaultChar) + { + trace("target codepage %i does not contain 'abc'\n",from); + return E_FAIL; + } + } + srcsz = lstrlenW(strW) + 1; destsz = MAX_PATH; hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, from, strW, &srcsz, convert, &destsz); if (hr != S_OK) - return FALSE; + return S_FALSE; srcsz = -1; destsz = MAX_PATH; hr = IMultiLanguage2_ConvertString(iML2, NULL, from, to, (BYTE *)convert, &srcsz, dest, &destsz); if (hr != S_OK) - return FALSE; + return S_FALSE; - return TRUE; + return S_OK; } static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) @@ -333,8 +349,7 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) { CHARSETINFO csi; MIMECSETINFO mcsi; - BOOL convertible; - HRESULT check = S_OK; + HRESULT convertible = S_OK; static const WCHAR autoW[] = {'_','a','u','t','o',0}; static const WCHAR feffW[] = {'u','n','i','c','o','d','e','F','E','F','F',0}; @@ -386,13 +401,13 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); convertible = check_convertible(iML2, cpinfo[i].uiCodePage, CP_UTF8); - if (!convertible) - check = S_FALSE; - - ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8); - ok(ret == check, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret); - ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage); - ok(ret == check, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); + if (convertible != E_FAIL) + { + ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8); + ok(ret == convertible, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret); + ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage); + ok(ret == convertible, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); + } } else trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage); diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 9d77f97e1c9..7ddbe5bdeef 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -65,6 +65,7 @@ static struct list dispex_data_list = LIST_INIT(dispex_data_list); static REFIID tid_ids[] = { &IID_NULL, + &DIID_DispCEventObj, &DIID_DispDOMChildrenCollection, &DIID_DispHTMLBody, &DIID_DispHTMLCommentElement, @@ -100,6 +101,7 @@ static REFIID tid_ids[] = { &IID_IHTMLElement3, &IID_IHTMLElement4, &IID_IHTMLElementCollection, + &IID_IHTMLEventObj, &IID_IHTMLFrameBase2, &IID_IHTMLGenericElement, &IID_IHTMLImgElement, @@ -333,6 +335,70 @@ static inline BOOL is_dynamic_dispid(DISPID id) return DISPID_DYNPROP_0 <= id && id <= DISPID_DYNPROP_MAX; } +static HRESULT get_dynamic_prop(DispatchEx *This, const WCHAR *name, BOOL alloc, dynamic_prop_t **ret) +{ + dispex_dynamic_data_t *data = This->dynamic_data; + + if(data) { + unsigned i; + + for(i=0; i < data->prop_cnt; i++) { + if(!strcmpW(data->props[i].name, name)) { + *ret = data->props+i; + return S_OK; + } + } + } + + if(alloc) { + TRACE("creating dynamic prop %s\n", debugstr_w(name)); + + if(!data) { + data = This->dynamic_data = heap_alloc_zero(sizeof(dispex_dynamic_data_t)); + if(!data) + return E_OUTOFMEMORY; + } + + if(!data->buf_size) { + data->props = heap_alloc(sizeof(dynamic_prop_t)*4); + if(!data->props) + return E_OUTOFMEMORY; + data->buf_size = 4; + }else if(data->buf_size == data->prop_cnt) { + dynamic_prop_t *new_props; + + new_props = heap_realloc(data->props, sizeof(dynamic_prop_t)*(data->buf_size<<1)); + if(!new_props) + return E_OUTOFMEMORY; + + data->props = new_props; + data->buf_size <<= 1; + } + + data->props[data->prop_cnt].name = heap_strdupW(name); + VariantInit(&data->props[data->prop_cnt].var); + *ret = data->props + data->prop_cnt++; + + return S_OK; + } + + TRACE("not found %s\n", debugstr_w(name)); + return DISP_E_UNKNOWNNAME; +} + +HRESULT dispex_get_dprop_ref(DispatchEx *This, const WCHAR *name, BOOL alloc, VARIANT **ret) +{ + dynamic_prop_t *prop; + HRESULT hres; + + hres = get_dynamic_prop(This, name, alloc, &prop); + if(FAILED(hres)) + return hres; + + *ret = &prop->var; + return S_OK; +} + #define DISPATCHEX_THIS(iface) DEFINE_THIS(DispatchEx, IDispatchEx, iface) static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv) @@ -418,8 +484,10 @@ static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) { DispatchEx *This = DISPATCHEX_THIS(iface); + dynamic_prop_t *dprop; dispex_data_t *data; int min, max, n, c; + HRESULT hres; TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); @@ -451,17 +519,6 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DW min = n+1; } - if(This->dynamic_data) { - unsigned i; - - for(i=0; i < This->dynamic_data->prop_cnt; i++) { - if(!strcmpW(This->dynamic_data->props[i].name, bstrName)) { - *pid = DISPID_DYNPROP_0 + i; - return S_OK; - } - } - } - if(This->data->vtbl && This->data->vtbl->get_dispid) { HRESULT hres; @@ -470,44 +527,12 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DW return hres; } - if(grfdex & fdexNameEnsure) { - dispex_dynamic_data_t *dynamic_data; - - TRACE("creating dynamic prop %s\n", debugstr_w(bstrName)); - - if(This->dynamic_data) { - dynamic_data = This->dynamic_data; - }else { - dynamic_data = This->dynamic_data = heap_alloc_zero(sizeof(dispex_dynamic_data_t)); - if(!dynamic_data) - return E_OUTOFMEMORY; - } - - if(!dynamic_data->buf_size) { - dynamic_data->props = heap_alloc(sizeof(dynamic_prop_t)*4); - if(!dynamic_data->props) - return E_OUTOFMEMORY; - dynamic_data->buf_size = 4; - }else if(dynamic_data->buf_size == dynamic_data->prop_cnt) { - dynamic_prop_t *new_props; - - new_props = heap_realloc(dynamic_data->props, sizeof(dynamic_prop_t)*(dynamic_data->buf_size<<1)); - if(!new_props) - return E_OUTOFMEMORY; - - dynamic_data->props = new_props; - dynamic_data->buf_size <<= 1; - } - - dynamic_data->props[dynamic_data->prop_cnt].name = heap_strdupW(bstrName); - VariantInit(&dynamic_data->props[dynamic_data->prop_cnt].var); - *pid = DISPID_DYNPROP_0 + dynamic_data->prop_cnt++; - - return S_OK; - } + hres = get_dynamic_prop(This, bstrName, grfdex&fdexNameEnsure, &dprop); + if(FAILED(hres)) + return hres; - TRACE("not found %s\n", debugstr_w(bstrName)); - return DISP_E_UNKNOWNNAME; + *pid = DISPID_DYNPROP_0 + (dprop - This->dynamic_data->props); + return S_OK; } static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, diff --git a/dlls/mshtml/htmlcomment.c b/dlls/mshtml/htmlcomment.c index 63db38274be..722cb14966e 100644 --- a/dlls/mshtml/htmlcomment.c +++ b/dlls/mshtml/htmlcomment.c @@ -180,6 +180,7 @@ static const tid_t HTMLCommentElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLCommentElement_tid, 0 }; diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index f11c2356880..60fd574b454 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -32,6 +32,7 @@ #include "wine/unicode.h" #include "mshtml_private.h" +#include "htmlevent.h" WINE_DEFAULT_DEBUG_CHANNEL(mshtml); @@ -918,26 +919,22 @@ static HRESULT WINAPI HTMLElement_insertAdjacentHTML(IHTMLElement *iface, BSTR w BSTR html) { HTMLElement *This = HTMLELEM_THIS(iface); - nsresult nsres; - nsIDOMDocument *nsdoc; nsIDOMDocumentRange *nsdocrange; nsIDOMRange *range; nsIDOMNSRange *nsrange; nsIDOMNode *nsnode; nsAString ns_html; + nsresult nsres; HRESULT hr; TRACE("(%p)->(%s %s)\n", This, debugstr_w(where), debugstr_w(html)); - nsres = nsIWebNavigation_GetDocument(This->node.doc->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres)) - { - ERR("GetDocument failed: %08x\n", nsres); - return E_FAIL; + if(!This->node.doc->nsdoc) { + WARN("NULL nsdoc\n"); + return E_UNEXPECTED; } - nsres = nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMDocumentRange, (void **)&nsdocrange); - nsIDOMDocument_Release(nsdoc); + nsres = nsIDOMDocument_QueryInterface(This->node.doc->nsdoc, &IID_nsIDOMDocumentRange, (void **)&nsdocrange); if(NS_FAILED(nsres)) { ERR("getting nsIDOMDocumentRange failed: %08x\n", nsres); @@ -983,25 +980,21 @@ static HRESULT WINAPI HTMLElement_insertAdjacentText(IHTMLElement *iface, BSTR w BSTR text) { HTMLElement *This = HTMLELEM_THIS(iface); - nsresult nsres; - nsIDOMDocument *nsdoc; nsIDOMNode *nsnode; nsAString ns_text; + nsresult nsres; HRESULT hr; TRACE("(%p)->(%s %s)\n", This, debugstr_w(where), debugstr_w(text)); - nsres = nsIWebNavigation_GetDocument(This->node.doc->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres) || !nsdoc) - { - ERR("GetDocument failed: %08x\n", nsres); - return E_FAIL; + if(!This->node.doc->nsdoc) { + WARN("NULL nsdoc\n"); + return E_UNEXPECTED; } - nsAString_Init(&ns_text, text); - nsres = nsIDOMDocument_CreateTextNode(nsdoc, &ns_text, (nsIDOMText **)&nsnode); - nsIDOMDocument_Release(nsdoc); + nsAString_Init(&ns_text, text); + nsres = nsIDOMDocument_CreateTextNode(This->node.doc->nsdoc, &ns_text, (nsIDOMText **)&nsnode); nsAString_Finish(&ns_text); if(NS_FAILED(nsres) || !nsnode) @@ -1377,6 +1370,7 @@ static const tid_t HTMLElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, 0 }; diff --git a/dlls/mshtml/htmlelem3.c b/dlls/mshtml/htmlelem3.c index f85b065c047..22c93a948a1 100644 --- a/dlls/mshtml/htmlelem3.c +++ b/dlls/mshtml/htmlelem3.c @@ -202,19 +202,55 @@ static HRESULT WINAPI HTMLElement3_get_hideFocus(IHTMLElement3 *iface, VARIANT_B return E_NOTIMPL; } +static const WCHAR disabledW[] = {'d','i','s','a','b','l','e','d',0}; + static HRESULT WINAPI HTMLElement3_put_disabled(IHTMLElement3 *iface, VARIANT_BOOL v) { HTMLElement *This = HTMLELEM3_THIS(iface); - FIXME("(%p)->(%x)\n", This, v); + VARIANT *var; + HRESULT hres; + + TRACE("(%p)->(%x)\n", This, v); + + if(This->node.vtbl->put_disabled) + return This->node.vtbl->put_disabled(&This->node, v); + + hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, TRUE, &var); + if(FAILED(hres)) + return hres; + + VariantClear(var); + V_VT(var) = VT_BOOL; + V_BOOL(var) = v; return S_OK; - return E_NOTIMPL; } static HRESULT WINAPI HTMLElement3_get_disabled(IHTMLElement3 *iface, VARIANT_BOOL *p) { HTMLElement *This = HTMLELEM3_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + VARIANT *var; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, p); + + if(This->node.vtbl->get_disabled) + return This->node.vtbl->get_disabled(&This->node, p); + + hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, FALSE, &var); + if(hres == DISP_E_UNKNOWNNAME) { + *p = VARIANT_FALSE; + return S_OK; + } + if(FAILED(hres)) + return hres; + + if(V_VT(var) != VT_BOOL) { + FIXME("vt %d\n", V_VT(var)); + return E_NOTIMPL; + } + + *p = V_BOOL(var); + return S_OK; } static HRESULT WINAPI HTMLElement3_get_isDisabled(IHTMLElement3 *iface, VARIANT_BOOL *p) diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index f98e3a15c53..d72b936102b 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -26,6 +26,7 @@ #include "ole2.h" #include "mshtml_private.h" +#include "htmlevent.h" #include "wine/debug.h" @@ -76,6 +77,7 @@ eventid_t str_to_eid(LPCWSTR str) } typedef struct { + DispatchEx dispex; const IHTMLEventObjVtbl *lpIHTMLEventObjVtbl; LONG ref; } HTMLEventObj; @@ -93,12 +95,11 @@ static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID r if(IsEqualGUID(&IID_IUnknown, riid)) { TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); *ppv = HTMLEVENTOBJ(This); - }else if(IsEqualGUID(&IID_IDispatch, riid)) { - TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); - *ppv = HTMLEVENTOBJ(This); }else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) { TRACE("(%p)->(IID_IHTMLEventObj %p)\n", This, ppv); *ppv = HTMLEVENTOBJ(This); + }else if(dispex_query_interface(&This->dispex, riid, ppv)) { + return *ppv ? S_OK : E_NOINTERFACE; } if(*ppv) { @@ -380,6 +381,18 @@ static const IHTMLEventObjVtbl HTMLEventObjVtbl = { HTMLEventObj_get_srcFilter }; +static const tid_t HTMLEventObj_iface_tids[] = { + IHTMLEventObj_tid, + 0 +}; + +static dispex_static_data_t HTMLEventObj_dispex = { + NULL, + DispCEventObj_tid, + NULL, + HTMLEventObj_iface_tids +}; + static IHTMLEventObj *create_event(void) { HTMLEventObj *ret; @@ -388,6 +401,8 @@ static IHTMLEventObj *create_event(void) ret->lpIHTMLEventObjVtbl = &HTMLEventObjVtbl; ret->ref = 1; + init_dispex(&ret->dispex, (IUnknown*)HTMLEVENTOBJ(ret), &HTMLEventObj_dispex); + return HTMLEVENTOBJ(ret); } @@ -421,9 +436,17 @@ static HRESULT set_node_event_disp(HTMLDOMNode *node, eventid_t eid, IDispatch * IDispatch_AddRef(disp); node->event_target->event_table[eid] = disp; - if((event_info[eid].flags & EVENT_DEFAULTLISTENER) && !node->doc->nscontainer->event_vector[eid]) { - node->doc->nscontainer->event_vector[eid] = TRUE; - add_nsevent_listener(node->doc->nscontainer, event_info[eid].name); + if(event_info[eid].flags & EVENT_DEFAULTLISTENER) { + if(!node->doc->nscontainer->event_vector) { + node->doc->nscontainer->event_vector = heap_alloc_zero(EVENTID_LAST*sizeof(BOOL)); + if(!node->doc->nscontainer->event_vector) + return E_OUTOFMEMORY; + } + + if(!node->doc->nscontainer->event_vector[eid]) { + node->doc->nscontainer->event_vector[eid] = TRUE; + add_nsevent_listener(node->doc->nscontainer, event_info[eid].name); + } } return S_OK; diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h new file mode 100644 index 00000000000..adc769265cd --- /dev/null +++ b/dlls/mshtml/htmlevent.h @@ -0,0 +1,31 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +typedef enum { + EVENTID_CHANGE, + EVENTID_CLICK, + EVENTID_KEYUP, + EVENTID_LOAD, + EVENTID_LAST +} eventid_t; + +eventid_t str_to_eid(LPCWSTR); +void check_event_attr(HTMLDocument*,nsIDOMElement*); +void release_event_target(event_target_t*); +void fire_event(HTMLDocument*,eventid_t,nsIDOMNode*); +HRESULT set_node_event(HTMLDOMNode*,eventid_t,VARIANT*); diff --git a/dlls/mshtml/htmlgeneric.c b/dlls/mshtml/htmlgeneric.c index daa48df73ba..fc53ee0b595 100644 --- a/dlls/mshtml/htmlgeneric.c +++ b/dlls/mshtml/htmlgeneric.c @@ -157,7 +157,7 @@ static const tid_t HTMLGenericElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, - IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLGenericElement_tid, 0 }; diff --git a/dlls/mshtml/htmlimg.c b/dlls/mshtml/htmlimg.c index 50c3c65e86f..795d6f9965d 100644 --- a/dlls/mshtml/htmlimg.c +++ b/dlls/mshtml/htmlimg.c @@ -567,6 +567,7 @@ static const tid_t HTMLImgElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLImgElement_tid, 0 }; diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c index 028201a6809..e53f4c7a5b2 100644 --- a/dlls/mshtml/htmlinput.c +++ b/dlls/mshtml/htmlinput.c @@ -1064,11 +1064,25 @@ static void HTMLInputElement_destructor(HTMLDOMNode *iface) HTMLElement_destructor(&This->element.node); } +static HRESULT HTMLInputElementImpl_put_disabled(HTMLDOMNode *iface, VARIANT_BOOL v) +{ + HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface); + return IHTMLInputElement_put_disabled(HTMLINPUT(This), v); +} + +static HRESULT HTMLInputElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOOL *p) +{ + HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface); + return IHTMLInputElement_get_disabled(HTMLINPUT(This), p); +} + #undef HTMLINPUT_NODE_THIS static const NodeImplVtbl HTMLInputElementImplVtbl = { HTMLInputElement_QI, - HTMLInputElement_destructor + HTMLInputElement_destructor, + HTMLInputElementImpl_put_disabled, + HTMLInputElementImpl_get_disabled, }; static const tid_t HTMLInputElement_iface_tids[] = { @@ -1076,6 +1090,7 @@ static const tid_t HTMLInputElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLInputElement_tid, 0 }; diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index e9237950985..a3eaaaf395e 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -28,6 +28,7 @@ #include "wine/debug.h" #include "mshtml_private.h" +#include "htmlevent.h" WINE_DEFAULT_DEBUG_CHANNEL(mshtml); diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index accae83221c..fc3f89298b8 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -180,7 +180,6 @@ static HRESULT WINAPI HTMLOptionElement_get_index(IHTMLOptionElement *iface, LON static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR v) { HTMLOptionElement *This = HTMLOPTION_THIS(iface); - nsIDOMDocument *nsdoc; nsIDOMText *text_node; nsAString text_str; nsIDOMNode *tmp; @@ -188,6 +187,11 @@ static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + if(!This->element.node.doc->nsdoc) { + WARN("NULL nsdoc\n"); + return E_UNEXPECTED; + } + while(1) { nsIDOMNode *child; @@ -205,19 +209,12 @@ static HRESULT WINAPI HTMLOptionElement_put_text(IHTMLOptionElement *iface, BSTR } } - nsres = nsIWebNavigation_GetDocument(This->element.node.doc->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres)) { - ERR("GetDocument failed: %08x\n", nsres); - return S_OK; - } - nsAString_Init(&text_str, v); - nsres = nsIDOMDocument_CreateTextNode(nsdoc, &text_str, &text_node); - nsIDOMDocument_Release(nsdoc); + nsres = nsIDOMHTMLDocument_CreateTextNode(This->element.node.doc->nsdoc, &text_str, &text_node); nsAString_Finish(&text_str); if(NS_FAILED(nsres)) { ERR("CreateTextNode failed: %08x\n", nsres); - return S_OK; + return E_FAIL; } nsres = nsIDOMHTMLOptionElement_AppendChild(This->nsoption, (nsIDOMNode*)text_node, &tmp); @@ -331,6 +328,7 @@ static const tid_t HTMLOptionElement_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLOptionElement_tid, 0 }; @@ -451,7 +449,6 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory IHTMLOptionElement **optelem) { HTMLOptionElementFactory *This = HTMLOPTFACTORY_THIS(iface); - nsIDOMDocument *nsdoc; nsIDOMElement *nselem; nsAString option_str; nsresult nsres; @@ -459,21 +456,18 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory static const PRUnichar optionW[] = {'O','P','T','I','O','N',0}; - TRACE("(%p)->(v v v v %p)\n", This, optelem); + TRACE("(%p)->(%s %s %s %s %p)\n", This, debugstr_variant(&text), debugstr_variant(&value), + debugstr_variant(&defaultselected), debugstr_variant(&selected), optelem); - *optelem = NULL; - if(!This->doc->nscontainer) - return E_FAIL; - - nsres = nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres)) { - ERR("GetDocument failed: %08x\n", nsres); - return E_FAIL; + if(!This->doc->nsdoc) { + WARN("NULL nsdoc\n"); + return E_UNEXPECTED; } + *optelem = NULL; + nsAString_Init(&option_str, optionW); - nsres = nsIDOMDocument_CreateElement(nsdoc, &option_str, &nselem); - nsIDOMDocument_Release(nsdoc); + nsres = nsIDOMHTMLDocument_CreateElement(This->doc->nsdoc, &option_str, &nselem); nsAString_Finish(&option_str); if(NS_FAILED(nsres)) { ERR("CreateElement failed: %08x\n", nsres); diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index 9c7cf71dcea..3a414cfcbcf 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -28,6 +28,7 @@ #include "wine/debug.h" #include "mshtml_private.h" +#include "htmlevent.h" WINE_DEFAULT_DEBUG_CHANNEL(mshtml); @@ -289,15 +290,35 @@ static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BST static HRESULT WINAPI HTMLSelectElement_put_disabled(IHTMLSelectElement *iface, VARIANT_BOOL v) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%x)\n", This, v); + + nsres = nsIDOMHTMLSelectElement_SetDisabled(This->nsselect, v != VARIANT_FALSE); + if(NS_FAILED(nsres)) { + ERR("SetDisabled failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLSelectElement_get_disabled(IHTMLSelectElement *iface, VARIANT_BOOL *p) { HTMLSelectElement *This = HTMLSELECT_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + PRBool disabled = FALSE; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLSelectElement_GetDisabled(This->nsselect, &disabled); + if(NS_FAILED(nsres)) { + ERR("GetDisabled failed: %08x\n", nsres); + return E_FAIL; + } + + *p = disabled ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTMLFormElement **p) @@ -442,11 +463,25 @@ static void HTMLSelectElement_destructor(HTMLDOMNode *iface) HTMLElement_destructor(&This->element.node); } +static HRESULT HTMLSelectElementImpl_put_disabled(HTMLDOMNode *iface, VARIANT_BOOL v) +{ + HTMLSelectElement *This = HTMLSELECT_NODE_THIS(iface); + return IHTMLSelectElement_put_disabled(HTMLSELECT(This), v); +} + +static HRESULT HTMLSelectElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOOL *p) +{ + HTMLSelectElement *This = HTMLSELECT_NODE_THIS(iface); + return IHTMLSelectElement_get_disabled(HTMLSELECT(This), p); +} + #undef HTMLSELECT_NODE_THIS static const NodeImplVtbl HTMLSelectElementImplVtbl = { HTMLSelectElement_QI, - HTMLSelectElement_destructor + HTMLSelectElement_destructor, + HTMLSelectElementImpl_put_disabled, + HTMLSelectElementImpl_get_disabled }; static const tid_t HTMLSelectElement_tids[] = { @@ -454,6 +489,7 @@ static const tid_t HTMLSelectElement_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLSelectElement_tid, 0 }; diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 48ae2fe4da0..8d6564d0eb6 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -44,6 +44,8 @@ static const WCHAR attrBorder[] = {'b','o','r','d','e','r',0}; static const WCHAR attrBorderLeft[] = {'b','o','r','d','e','r','-','l','e','f','t',0}; +static const WCHAR attrBorderWidth[] = + {'b','o','r','d','e','r','-','w','i','d','t','h',0}; static const WCHAR attrColor[] = {'c','o','l','o','r',0}; static const WCHAR attrCursor[] = @@ -98,6 +100,7 @@ static const struct{ {attrBackgroundImage, DISPID_IHTMLSTYLE_BACKGROUNDIMAGE}, {attrBorder, DISPID_IHTMLSTYLE_BORDER}, {attrBorderLeft, DISPID_IHTMLSTYLE_BORDERLEFT}, + {attrBorderWidth, DISPID_IHTMLSTYLE_BORDERWIDTH}, {attrColor, DISPID_IHTMLSTYLE_COLOR}, {attrCursor, DISPID_IHTMLSTYLE_CURSOR}, {attrDisplay, DISPID_IHTMLSTYLE_DISPLAY}, @@ -1240,15 +1243,15 @@ static HRESULT WINAPI HTMLStyle_get_borderLeftColor(IHTMLStyle *iface, VARIANT * static HRESULT WINAPI HTMLStyle_put_borderWidth(IHTMLStyle *iface, BSTR v) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + return set_style_attr(This, STYLEID_BORDER_WIDTH, v, ATTR_FIX_PX); } static HRESULT WINAPI HTMLStyle_get_borderWidth(IHTMLStyle *iface, BSTR *p) { HTMLStyle *This = HTMLSTYLE_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, p); + return get_style_attr(This, STYLEID_BORDER_WIDTH, p); } static HRESULT WINAPI HTMLStyle_put_borderTopWidth(IHTMLStyle *iface, VARIANT v) diff --git a/dlls/mshtml/htmlstyle.h b/dlls/mshtml/htmlstyle.h index 5c1dfe313fe..a6cc5e85fa6 100644 --- a/dlls/mshtml/htmlstyle.h +++ b/dlls/mshtml/htmlstyle.h @@ -36,6 +36,7 @@ typedef enum { STYLEID_BACKGROUND_IMAGE, STYLEID_BORDER, STYLEID_BORDER_LEFT, + STYLEID_BORDER_WIDTH, STYLEID_COLOR, STYLEID_CURSOR, STYLEID_DISPLAY, diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c index f43433d6293..9396f448706 100644 --- a/dlls/mshtml/htmltable.c +++ b/dlls/mshtml/htmltable.c @@ -562,6 +562,7 @@ static const tid_t HTMLTable_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLTable_tid, 0 }; diff --git a/dlls/mshtml/htmltablerow.c b/dlls/mshtml/htmltablerow.c index 77d8221e927..e040ac06f41 100644 --- a/dlls/mshtml/htmltablerow.c +++ b/dlls/mshtml/htmltablerow.c @@ -305,6 +305,7 @@ static const tid_t HTMLTableRow_iface_tids[] = { IHTMLDOMNode2_tid, IHTMLElement_tid, IHTMLElement2_tid, + IHTMLElement3_tid, IHTMLTableRow_tid, 0 }; diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 96df5f86cf3..9db2c982200 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -388,11 +388,25 @@ static void HTMLTextAreaElement_destructor(HTMLDOMNode *iface) HTMLElement_destructor(&This->element.node); } +static HRESULT HTMLTextAreaElementImpl_put_disabled(HTMLDOMNode *iface, VARIANT_BOOL v) +{ + HTMLTextAreaElement *This = HTMLTXTAREA_NODE_THIS(iface); + return IHTMLTextAreaElement_put_disabled(HTMLTXTAREA(This), v); +} + +static HRESULT HTMLTextAreaElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOOL *p) +{ + HTMLTextAreaElement *This = HTMLTXTAREA_NODE_THIS(iface); + return IHTMLTextAreaElement_get_disabled(HTMLTXTAREA(This), p); +} + #undef HTMLTXTAREA_NODE_THIS static const NodeImplVtbl HTMLTextAreaElementImplVtbl = { HTMLTextAreaElement_QI, - HTMLTextAreaElement_destructor + HTMLTextAreaElement_destructor, + HTMLTextAreaElementImpl_put_disabled, + HTMLTextAreaElementImpl_get_disabled }; HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement *nselem) diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 76efb9dcb8c..1027399ab7c 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -1177,108 +1177,6 @@ static dispex_static_data_t HTMLWindow_dispex = { HTMLWindow_iface_tids }; -static const char wineConfig_func[] = -"window.__defineGetter__(\"external\",function() {\n" -" return window.__wineWindow__.external;\n" -"});\n" -"window.__wineWindow__ = wineWindow;\n"; - -static void astr_to_nswstr(const char *str, nsAString *nsstr) -{ - LPWSTR wstr; - int len; - - len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); - wstr = heap_alloc(len*sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, str, -1, wstr, len); - - nsAString_Init(nsstr, wstr); - - heap_free(wstr); -} - -static nsresult call_js_func(nsIScriptContainer *script_container, nsISupports *target, - const char *name, const char *body, - PRUint32 argc, const char **arg_names, nsIArray *argv) -{ - nsACString name_str; - nsAString body_str; - JSObject func_obj, jsglobal; - nsIVariant *jsret; - nsresult nsres; - - nsres = nsIScriptContainer_GetGlobalObject(script_container, &jsglobal); - if(NS_FAILED(nsres)) - ERR("GetGlobalObject: %08x\n", nsres); - - nsACString_Init(&name_str, name); - astr_to_nswstr(body, &body_str); - - nsres = nsIScriptContainer_CompileFunction(script_container, jsglobal, &name_str, argc, arg_names, - &body_str, NULL, 1, FALSE, &func_obj); - - nsACString_Finish(&name_str); - nsAString_Finish(&body_str); - - if(NS_FAILED(nsres)) { - ERR("CompileFunction failed: %08x\n", nsres); - return nsres; - } - - nsres = nsIScriptContainer_CallFunction(script_container, target, jsglobal, func_obj, argv, &jsret); - - nsIScriptContainer_DropScriptObject(script_container, func_obj); - nsIScriptContainer_DropScriptObject(script_container, jsglobal); - if(NS_FAILED(nsres)) { - ERR("CallFunction failed: %08x\n", nsres); - return nsres; - } - - nsIVariant_Release(jsret); - return NS_OK; -} - -void setup_nswindow(HTMLWindow *This) -{ - nsIScriptContainer *script_container; - nsIDOMWindow *nswindow; - nsIDOMDocument *domdoc; - nsIWritableVariant *nsvar; - nsIMutableArray *argv; - nsresult nsres; - - static const char *args[] = {"wineWindow"}; - - TRACE("(%p)\n", This); - - nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &domdoc); - nsres = nsIDOMDocument_QueryInterface(domdoc, &IID_nsIScriptContainer, (void**)&script_container); - nsIDOMDocument_Release(domdoc); - if(NS_FAILED(nsres)) { - TRACE("Could not get nsIDOMScriptContainer: %08x\n", nsres); - return; - } - - nsIWebBrowser_GetContentDOMWindow(This->doc->nscontainer->webbrowser, &nswindow); - - nsvar = create_nsvariant(); - nsres = nsIWritableVariant_SetAsInterface(nsvar, &IID_IDispatch, HTMLWINDOW2(This)); - if(NS_FAILED(nsres)) - ERR("SetAsInterface failed: %08x\n", nsres); - - argv = create_nsarray(); - nsres = nsIMutableArray_AppendElement(argv, (nsISupports*)nsvar, FALSE); - nsIWritableVariant_Release(nsvar); - if(NS_FAILED(nsres)) - ERR("AppendElement failed: %08x\n", nsres); - - call_js_func(script_container, (nsISupports*)nswindow/*HTMLWINDOW2(This)*/, "wineConfig", - wineConfig_func, 1, args, (nsIArray*)argv); - - nsIMutableArray_Release(argv); - nsIScriptContainer_Release(script_container); -} - HTMLWindow *HTMLWindow_Create(HTMLDocument *doc) { HTMLWindow *ret = heap_alloc_zero(sizeof(HTMLWindow)); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index cac111711e4..a58cfef32a3 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -61,6 +61,7 @@ typedef struct event_target_t event_target_t; /* NOTE: make sure to keep in sync with dispex.c */ typedef enum { NULL_tid, + DispCEventObj_tid, DispDOMChildrenCollection_tid, DispHTMLBody_tid, DispHTMLCommentElement_tid, @@ -96,6 +97,7 @@ typedef enum { IHTMLElement3_tid, IHTMLElement4_tid, IHTMLElementCollection_tid, + IHTMLEventObj_tid, IHTMLFrameBase2_tid, IHTMLGenericElement_tid, IHTMLImgElement_tid, @@ -114,14 +116,6 @@ typedef enum { LAST_tid } tid_t; -typedef enum { - EVENTID_CHANGE, - EVENTID_CLICK, - EVENTID_KEYUP, - EVENTID_LOAD, - EVENTID_LAST -} eventid_t; - typedef struct dispex_data_t dispex_data_t; typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; @@ -151,6 +145,7 @@ typedef struct { void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*); BOOL dispex_query_interface(DispatchEx*,REFIID,void**); +HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**); typedef struct { DispatchEx dispex; @@ -337,7 +332,7 @@ struct NSContainer { nsChannelBSC *bscallback; /* hack */ HWND reset_focus; /* hack */ - BOOL event_vector[EVENTID_LAST]; + BOOL *event_vector; }; typedef struct { @@ -361,6 +356,8 @@ typedef struct { typedef struct { HRESULT (*qi)(HTMLDOMNode*,REFIID,void**); void (*destructor)(HTMLDOMNode*); + HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL); + HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*); } NodeImplVtbl; struct HTMLDOMNode { @@ -467,7 +464,6 @@ HTMLWindow *nswindow_to_window(const nsIDOMWindow*); HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLDocument*); HTMLLocation *HTMLLocation_Create(HTMLDocument*); IOmNavigator *OmNavigator_Create(void); -void setup_nswindow(HTMLWindow*); void HTMLDocument_HTMLDocument3_Init(HTMLDocument*); void HTMLDocument_HTMLDocument5_Init(HTMLDocument*); @@ -533,12 +529,6 @@ void add_nsevent_listener(NSContainer*,LPCWSTR); nsresult get_nsinterface(nsISupports*,REFIID,void**); void update_nsdocument(HTMLDocument*); -void check_event_attr(HTMLDocument*,nsIDOMElement*); -void release_event_target(event_target_t*); -void fire_event(HTMLDocument*,eventid_t,nsIDOMNode*); -HRESULT set_node_event(HTMLDOMNode*,eventid_t,VARIANT*); -eventid_t str_to_eid(LPCWSTR); - void set_document_bscallback(HTMLDocument*,nsChannelBSC*); void set_current_mon(HTMLDocument*,IMoniker*); HRESULT start_binding(HTMLDocument*,BSCallback*,IBindCtx*); diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 94707c2649d..45386beaee3 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -984,6 +984,7 @@ static nsrefcnt NSAPI nsWebBrowserChrome_Release(nsIWebBrowserChrome *iface) TRACE("(%p) ref=%d\n", This, ref); if(!ref) { + heap_free(This->event_vector); if(This->parent) nsIWebBrowserChrome_Release(NSWBCHROME(This->parent)); heap_free(This); diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index d226ccb750a..dc54322393a 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c @@ -31,6 +31,7 @@ #include "wine/unicode.h" #include "mshtml_private.h" +#include "htmlevent.h" WINE_DEFAULT_DEBUG_CHANNEL(mshtml); @@ -139,7 +140,6 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event update_nsdocument(This->doc); connect_scripts(This->doc); - setup_nswindow(This->doc->window); if(This->editor_controller) { nsIController_Release(This->editor_controller); diff --git a/dlls/mshtml/task.c b/dlls/mshtml/task.c index a1c8da98402..ffef5434ab0 100644 --- a/dlls/mshtml/task.c +++ b/dlls/mshtml/task.c @@ -365,6 +365,20 @@ static void process_task(task_t *task) } } +static void call_timer_disp(IDispatch *disp) +{ + DISPPARAMS dp = {NULL, NULL, 0, 0}; + EXCEPINFO ei; + VARIANT res; + HRESULT hres; + + V_VT(&res) = VT_EMPTY; + memset(&ei, 0, sizeof(ei)); + hres = IDispatch_Invoke(disp, DISPID_VALUE, &IID_NULL, 0, DISPATCH_METHOD, &dp, &res, &ei, NULL); + TRACE("ret %08x %s\n", hres, debugstr_variant(&res)); + VariantClear(&res); +} + static LRESULT process_timer(void) { thread_data_t *thread_data = get_thread_data(TRUE); @@ -395,7 +409,7 @@ static LRESULT process_timer(void) release_task_timer(thread_data->thread_hwnd, timer); } - call_disp_func(doc, disp); + call_timer_disp(disp); IDispatch_Release(disp); } diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 82dd6552d93..e15b6077b23 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -1,5 +1,5 @@ /* - * Copyright 2007 Jacek Caban for CodeWeavers + * Copyright 2007-2008 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -471,6 +471,17 @@ static IHTMLElement2 *_get_elem2_iface(unsigned line, IUnknown *unk) return elem; } +#define get_elem3_iface(u) _get_elem3_iface(__LINE__,u) +static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk) +{ + IHTMLElement3 *elem; + HRESULT hres; + + hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement3, (void**)&elem); + ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement3: %08x\n", hres); + return elem; +} + #define get_node_iface(u) _get_node_iface(__LINE__,u) static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk) { @@ -1059,6 +1070,56 @@ static IHTMLElement *_test_elem_get_parent(unsigned line, IUnknown *unk) return parent; } +#define test_elem3_get_disabled(i,b) _test_elem3_get_disabled(__LINE__,i,b) +static void _test_elem3_get_disabled(unsigned line, IUnknown *unk, VARIANT_BOOL exb) +{ + IHTMLElement3 *elem3 = _get_elem3_iface(line, unk); + VARIANT_BOOL disabled = 100; + HRESULT hres; + + hres = IHTMLElement3_get_disabled(elem3, &disabled); + ok_(__FILE__,line) (hres == S_OK, "get_disabled failed: %08x\n", hres); + ok_(__FILE__,line) (disabled == exb, "disabled=%x, expected %x\n", disabled, exb); + IHTMLElement3_Release(elem3); +} + +#define test_elem3_set_disabled(i,b) _test_elem3_set_disabled(__LINE__,i,b) +static void _test_elem3_set_disabled(unsigned line, IUnknown *unk, VARIANT_BOOL b) +{ + IHTMLElement3 *elem3 = _get_elem3_iface(line, unk); + HRESULT hres; + + hres = IHTMLElement3_put_disabled(elem3, b); + ok_(__FILE__,line) (hres == S_OK, "get_disabled failed: %08x\n", hres); + + IHTMLElement3_Release(elem3); + _test_elem3_get_disabled(line, unk, b); +} + +#define test_select_get_disabled(i,b) _test_select_get_disabled(__LINE__,i,b) +static void _test_select_get_disabled(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL exb) +{ + VARIANT_BOOL disabled = 100; + HRESULT hres; + + hres = IHTMLSelectElement_get_disabled(select, &disabled); + ok_(__FILE__,line) (hres == S_OK, "get_disabled failed: %08x\n", hres); + ok_(__FILE__,line) (disabled == exb, "disabled=%x, expected %x\n", disabled, exb); + + _test_elem3_get_disabled(line, (IUnknown*)select, exb); +} + +#define test_select_set_disabled(i,b) _test_select_set_disabled(__LINE__,i,b) +static void _test_select_set_disabled(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL b) +{ + HRESULT hres; + + hres = IHTMLSelectElement_put_disabled(select, b); + ok_(__FILE__,line) (hres == S_OK, "get_disabled failed: %08x\n", hres); + + _test_select_get_disabled(line, select, b); +} + #define elem_get_scroll_height(u) _elem_get_scroll_height(__LINE__,u) static long _elem_get_scroll_height(unsigned line, IUnknown *unk) { @@ -1206,6 +1267,8 @@ static void _test_input_get_disabled(unsigned line, IHTMLInputElement *input, VA hres = IHTMLInputElement_get_disabled(input, &disabled); ok_(__FILE__,line) (hres == S_OK, "get_disabled failed: %08x\n", hres); ok_(__FILE__,line) (disabled == exb, "disabled=%x, expected %x\n", disabled, exb); + + _test_elem3_get_disabled(line, (IUnknown*)input, exb); } #define test_input_set_disabled(i,b) _test_input_set_disabled(__LINE__,i,b) @@ -1688,6 +1751,10 @@ static void test_select_elem(IHTMLSelectElement *select) test_select_set_value(select, "val1"); test_select_value(select, "val1"); + + test_select_get_disabled(select, VARIANT_FALSE); + test_select_set_disabled(select, VARIANT_TRUE); + test_select_set_disabled(select, VARIANT_FALSE); } static void test_create_option_elem(IHTMLDocument2 *doc) @@ -2838,6 +2905,10 @@ static void test_elems(IHTMLDocument2 *doc) test_input_get_disabled(input, VARIANT_FALSE); test_input_set_disabled(input, VARIANT_TRUE); test_input_set_disabled(input, VARIANT_FALSE); + test_elem3_set_disabled((IUnknown*)input, VARIANT_TRUE); + test_input_get_disabled(input, VARIANT_TRUE); + test_elem3_set_disabled((IUnknown*)input, VARIANT_FALSE); + test_input_get_disabled(input, VARIANT_FALSE); test_elem_client_size((IUnknown*)elem); test_node_get_value_str((IUnknown*)elem, NULL); @@ -2943,6 +3014,10 @@ static void test_elems(IHTMLDocument2 *doc) IHTMLDOMChildrenCollection_Release(child_col); } + test_elem3_get_disabled((IUnknown*)elem, VARIANT_FALSE); + test_elem3_set_disabled((IUnknown*)elem, VARIANT_TRUE); + test_elem3_set_disabled((IUnknown*)elem, VARIANT_FALSE); + IHTMLElement_Release(elem); test_stylesheets(doc); diff --git a/dlls/mshtml/tests/script.c b/dlls/mshtml/tests/script.c index 394496217d3..90e558365a5 100644 --- a/dlls/mshtml/tests/script.c +++ b/dlls/mshtml/tests/script.c @@ -282,7 +282,7 @@ static HRESULT WINAPI funcDisp_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(rgvarg[1]) = %d\n", V_VT(pdp->rgvarg)); ok(V_BOOL(pdp->rgvarg+1) == VARIANT_TRUE, "V_BOOL(rgvarg[1]) = %x\n", V_BOOL(pdp->rgvarg)); ok(pvarRes != NULL, "pvarRes == NULL\n"); - ok(pei != NULL, "pei == NULL"); + ok(pei != NULL, "pei == NULL\n"); ok(!pspCaller, "pspCaller != NULL\n"); V_VT(pvarRes) = VT_I4; diff --git a/dlls/mshtml/txtrange.c b/dlls/mshtml/txtrange.c index c35834fde35..3f383d11ae7 100644 --- a/dlls/mshtml/txtrange.c +++ b/dlls/mshtml/txtrange.c @@ -1308,22 +1308,10 @@ static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIA } case RU_TEXTEDIT: { - nsIDOMDocument *nsdoc; - nsIDOMHTMLDocument *nshtmldoc; nsIDOMHTMLElement *nsbody = NULL; nsresult nsres; - nsres = nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc); - if(NS_FAILED(nsres) || !nsdoc) { - ERR("GetDocument failed: %08x\n", nsres); - break; - } - - nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc); - nsIDOMDocument_Release(nsdoc); - - nsres = nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody); - nsIDOMHTMLDocument_Release(nshtmldoc); + nsres = nsIDOMHTMLDocument_GetBody(This->doc->nsdoc, &nsbody); if(NS_FAILED(nsres) || !nsbody) { ERR("Could not get body: %08x\n", nsres); break; @@ -1758,7 +1746,6 @@ static HRESULT exec_indent(HTMLTxtRange *This, VARIANT *in, VARIANT *out) { nsIDOMDocumentFragment *fragment; nsIDOMElement *blockquote_elem, *p_elem; - nsIDOMDocument *nsdoc; nsIDOMNode *tmp; nsAString tag_str; @@ -1767,18 +1754,19 @@ static HRESULT exec_indent(HTMLTxtRange *This, VARIANT *in, VARIANT *out) TRACE("(%p)->(%p %p)\n", This, in, out); - nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc); + if(!This->doc->nsdoc) { + WARN("NULL nsdoc\n"); + return E_NOTIMPL; + } nsAString_Init(&tag_str, blockquoteW); - nsIDOMDocument_CreateElement(nsdoc, &tag_str, &blockquote_elem); + nsIDOMHTMLDocument_CreateElement(This->doc->nsdoc, &tag_str, &blockquote_elem); nsAString_Finish(&tag_str); nsAString_Init(&tag_str, pW); - nsIDOMDocument_CreateElement(nsdoc, &tag_str, &p_elem); + nsIDOMDocument_CreateElement(This->doc->nsdoc, &tag_str, &p_elem); nsAString_Finish(&tag_str); - nsIDOMDocument_Release(nsdoc); - nsIDOMRange_ExtractContents(This->nsrange, &fragment); nsIDOMElement_AppendChild(p_elem, (nsIDOMNode*)fragment, &tmp); nsIDOMDocumentFragment_Release(fragment); diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c index 9bc14699b79..15a60e5de24 100644 --- a/dlls/msxml3/tests/domdoc.c +++ b/dlls/msxml3/tests/domdoc.c @@ -559,6 +559,9 @@ static void test_domdoc( void ) { IXMLDOMNamedNodeMap *pAttribs; + r = IXMLDOMText_QueryInterface(nodetext, &IID_IXMLDOMElement, (LPVOID*)&element); + ok(r == E_NOINTERFACE, "ret %08x\n", r ); + /* Text Last Child Checks */ r = IXMLDOMText_get_lastChild(nodetext, NULL); ok(r == E_INVALIDARG, "ret %08x\n", r ); diff --git a/dlls/msxml3/text.c b/dlls/msxml3/text.c index 4b32ac9ce1e..7cb1d42e215 100644 --- a/dlls/msxml3/text.c +++ b/dlls/msxml3/text.c @@ -42,8 +42,8 @@ typedef struct _domtext { const struct IXMLDOMTextVtbl *lpVtbl; LONG ref; - IUnknown *element_unk; - IXMLDOMElement *element; + IUnknown *node_unk; + IXMLDOMNode *node; } domtext; static inline domtext *impl_from_IXMLDOMText( IXMLDOMText *iface ) @@ -66,10 +66,9 @@ static HRESULT WINAPI domtext_QueryInterface( { *ppvObject = iface; } - else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) || - IsEqualGUID( riid, &IID_IXMLDOMElement ) ) + else if ( IsEqualGUID( riid, &IID_IXMLDOMNode ) ) { - return IUnknown_QueryInterface(This->element_unk, riid, ppvObject); + return IUnknown_QueryInterface(This->node_unk, riid, ppvObject); } else { @@ -98,7 +97,7 @@ static ULONG WINAPI domtext_Release( ref = InterlockedDecrement( &This->ref ); if ( ref == 0 ) { - IUnknown_Release( This->element_unk ); + IUnknown_Release( This->node_unk ); HeapFree( GetProcessHeap(), 0, This ); } @@ -187,7 +186,7 @@ static HRESULT WINAPI domtext_get_nodeName( BSTR* p ) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nodeName( This->element, p ); + return IXMLDOMNode_get_nodeName( This->node, p ); } static HRESULT WINAPI domtext_get_nodeValue( @@ -195,7 +194,7 @@ static HRESULT WINAPI domtext_get_nodeValue( VARIANT* var1 ) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nodeValue( This->element, var1 ); + return IXMLDOMNode_get_nodeValue( This->node, var1 ); } static HRESULT WINAPI domtext_put_nodeValue( @@ -203,7 +202,7 @@ static HRESULT WINAPI domtext_put_nodeValue( VARIANT var1 ) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_put_nodeValue( This->element, var1 ); + return IXMLDOMNode_put_nodeValue( This->node, var1 ); } static HRESULT WINAPI domtext_get_nodeType( @@ -211,7 +210,7 @@ static HRESULT WINAPI domtext_get_nodeType( DOMNodeType* domNodeType ) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nodeType( This->element, domNodeType ); + return IXMLDOMNode_get_nodeType( This->node, domNodeType ); } static HRESULT WINAPI domtext_get_parentNode( @@ -219,7 +218,7 @@ static HRESULT WINAPI domtext_get_parentNode( IXMLDOMNode** parent ) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_parentNode( This->element, parent ); + return IXMLDOMNode_get_parentNode( This->node, parent ); } static HRESULT WINAPI domtext_get_childNodes( @@ -227,7 +226,7 @@ static HRESULT WINAPI domtext_get_childNodes( IXMLDOMNodeList** outList) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_childNodes( This->element, outList ); + return IXMLDOMNode_get_childNodes( This->node, outList ); } static HRESULT WINAPI domtext_get_firstChild( @@ -235,7 +234,7 @@ static HRESULT WINAPI domtext_get_firstChild( IXMLDOMNode** domNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_firstChild( This->element, domNode ); + return IXMLDOMNode_get_firstChild( This->node, domNode ); } static HRESULT WINAPI domtext_get_lastChild( @@ -243,7 +242,7 @@ static HRESULT WINAPI domtext_get_lastChild( IXMLDOMNode** domNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_lastChild( This->element, domNode ); + return IXMLDOMNode_get_lastChild( This->node, domNode ); } static HRESULT WINAPI domtext_get_previousSibling( @@ -251,7 +250,7 @@ static HRESULT WINAPI domtext_get_previousSibling( IXMLDOMNode** domNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_previousSibling( This->element, domNode ); + return IXMLDOMNode_get_previousSibling( This->node, domNode ); } static HRESULT WINAPI domtext_get_nextSibling( @@ -259,7 +258,7 @@ static HRESULT WINAPI domtext_get_nextSibling( IXMLDOMNode** domNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nextSibling( This->element, domNode ); + return IXMLDOMNode_get_nextSibling( This->node, domNode ); } static HRESULT WINAPI domtext_get_attributes( @@ -267,7 +266,7 @@ static HRESULT WINAPI domtext_get_attributes( IXMLDOMNamedNodeMap** attributeMap) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_attributes( This->element, attributeMap ); + return IXMLDOMNode_get_attributes( This->node, attributeMap ); } static HRESULT WINAPI domtext_insertBefore( @@ -276,7 +275,7 @@ static HRESULT WINAPI domtext_insertBefore( IXMLDOMNode** outOldNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_insertBefore( This->element, newNode, var1, outOldNode ); + return IXMLDOMNode_insertBefore( This->node, newNode, var1, outOldNode ); } static HRESULT WINAPI domtext_replaceChild( @@ -286,7 +285,7 @@ static HRESULT WINAPI domtext_replaceChild( IXMLDOMNode** outOldNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_replaceChild( This->element, newNode, oldNode, outOldNode ); + return IXMLDOMNode_replaceChild( This->node, newNode, oldNode, outOldNode ); } static HRESULT WINAPI domtext_removeChild( @@ -294,7 +293,7 @@ static HRESULT WINAPI domtext_removeChild( IXMLDOMNode* domNode, IXMLDOMNode** oldNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_removeChild( This->element, domNode, oldNode ); + return IXMLDOMNode_removeChild( This->node, domNode, oldNode ); } static HRESULT WINAPI domtext_appendChild( @@ -302,7 +301,7 @@ static HRESULT WINAPI domtext_appendChild( IXMLDOMNode* newNode, IXMLDOMNode** outNewNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_appendChild( This->element, newNode, outNewNode ); + return IXMLDOMNode_appendChild( This->node, newNode, outNewNode ); } static HRESULT WINAPI domtext_hasChildNodes( @@ -310,7 +309,7 @@ static HRESULT WINAPI domtext_hasChildNodes( VARIANT_BOOL* pbool) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_hasChildNodes( This->element, pbool ); + return IXMLDOMNode_hasChildNodes( This->node, pbool ); } static HRESULT WINAPI domtext_get_ownerDocument( @@ -318,7 +317,7 @@ static HRESULT WINAPI domtext_get_ownerDocument( IXMLDOMDocument** domDocument) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_ownerDocument( This->element, domDocument ); + return IXMLDOMNode_get_ownerDocument( This->node, domDocument ); } static HRESULT WINAPI domtext_cloneNode( @@ -326,7 +325,7 @@ static HRESULT WINAPI domtext_cloneNode( VARIANT_BOOL pbool, IXMLDOMNode** outNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_cloneNode( This->element, pbool, outNode ); + return IXMLDOMNode_cloneNode( This->node, pbool, outNode ); } static HRESULT WINAPI domtext_get_nodeTypeString( @@ -334,7 +333,7 @@ static HRESULT WINAPI domtext_get_nodeTypeString( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nodeTypeString( This->element, p ); + return IXMLDOMNode_get_nodeTypeString( This->node, p ); } static HRESULT WINAPI domtext_get_text( @@ -342,7 +341,7 @@ static HRESULT WINAPI domtext_get_text( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_text( This->element, p ); + return IXMLDOMNode_get_text( This->node, p ); } static HRESULT WINAPI domtext_put_text( @@ -350,7 +349,7 @@ static HRESULT WINAPI domtext_put_text( BSTR p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_put_text( This->element, p ); + return IXMLDOMNode_put_text( This->node, p ); } static HRESULT WINAPI domtext_get_specified( @@ -358,7 +357,7 @@ static HRESULT WINAPI domtext_get_specified( VARIANT_BOOL* pbool) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_specified( This->element, pbool ); + return IXMLDOMNode_get_specified( This->node, pbool ); } static HRESULT WINAPI domtext_get_definition( @@ -366,7 +365,7 @@ static HRESULT WINAPI domtext_get_definition( IXMLDOMNode** domNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_definition( This->element, domNode ); + return IXMLDOMNode_get_definition( This->node, domNode ); } static HRESULT WINAPI domtext_get_nodeTypedValue( @@ -374,7 +373,7 @@ static HRESULT WINAPI domtext_get_nodeTypedValue( VARIANT* var1) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_nodeTypedValue( This->element, var1 ); + return IXMLDOMNode_get_nodeTypedValue( This->node, var1 ); } static HRESULT WINAPI domtext_put_nodeTypedValue( @@ -382,7 +381,7 @@ static HRESULT WINAPI domtext_put_nodeTypedValue( VARIANT var1) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_put_nodeTypedValue( This->element, var1 ); + return IXMLDOMNode_put_nodeTypedValue( This->node, var1 ); } static HRESULT WINAPI domtext_get_dataType( @@ -390,7 +389,7 @@ static HRESULT WINAPI domtext_get_dataType( VARIANT* var1) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_dataType( This->element, var1 ); + return IXMLDOMNode_get_dataType( This->node, var1 ); } static HRESULT WINAPI domtext_put_dataType( @@ -398,7 +397,7 @@ static HRESULT WINAPI domtext_put_dataType( BSTR p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_put_dataType( This->element, p ); + return IXMLDOMNode_put_dataType( This->node, p ); } static HRESULT WINAPI domtext_get_xml( @@ -406,7 +405,7 @@ static HRESULT WINAPI domtext_get_xml( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_xml( This->element, p ); + return IXMLDOMNode_get_xml( This->node, p ); } static HRESULT WINAPI domtext_transformNode( @@ -414,7 +413,7 @@ static HRESULT WINAPI domtext_transformNode( IXMLDOMNode* domNode, BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_transformNode( This->element, domNode, p ); + return IXMLDOMNode_transformNode( This->node, domNode, p ); } static HRESULT WINAPI domtext_selectNodes( @@ -422,7 +421,7 @@ static HRESULT WINAPI domtext_selectNodes( BSTR p, IXMLDOMNodeList** outList) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_selectNodes( This->element, p, outList ); + return IXMLDOMNode_selectNodes( This->node, p, outList ); } static HRESULT WINAPI domtext_selectSingleNode( @@ -430,7 +429,7 @@ static HRESULT WINAPI domtext_selectSingleNode( BSTR p, IXMLDOMNode** outNode) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_selectSingleNode( This->element, p, outNode ); + return IXMLDOMNode_selectSingleNode( This->node, p, outNode ); } static HRESULT WINAPI domtext_get_parsed( @@ -438,7 +437,7 @@ static HRESULT WINAPI domtext_get_parsed( VARIANT_BOOL* pbool) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_parsed( This->element, pbool ); + return IXMLDOMNode_get_parsed( This->node, pbool ); } static HRESULT WINAPI domtext_get_namespaceURI( @@ -446,7 +445,7 @@ static HRESULT WINAPI domtext_get_namespaceURI( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_namespaceURI( This->element, p ); + return IXMLDOMNode_get_namespaceURI( This->node, p ); } static HRESULT WINAPI domtext_get_prefix( @@ -454,7 +453,7 @@ static HRESULT WINAPI domtext_get_prefix( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_prefix( This->element, p ); + return IXMLDOMNode_get_prefix( This->node, p ); } static HRESULT WINAPI domtext_get_baseName( @@ -462,7 +461,7 @@ static HRESULT WINAPI domtext_get_baseName( BSTR* p) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_get_baseName( This->element, p ); + return IXMLDOMNode_get_baseName( This->node, p ); } static HRESULT WINAPI domtext_transformNodeToObject( @@ -470,7 +469,7 @@ static HRESULT WINAPI domtext_transformNodeToObject( IXMLDOMNode* domNode, VARIANT var1) { domtext *This = impl_from_IXMLDOMText( iface ); - return IXMLDOMNode_transformNodeToObject( This->element, domNode, var1 ); + return IXMLDOMNode_transformNodeToObject( This->node, domNode, var1 ); } static HRESULT WINAPI domtext_get_data( @@ -484,7 +483,7 @@ static HRESULT WINAPI domtext_get_data( if(!p) return E_INVALIDARG; - hr = IXMLDOMNode_get_nodeValue( This->element, &vRet ); + hr = IXMLDOMNode_get_nodeValue( This->node, &vRet ); if(hr == S_OK) { *p = V_BSTR(&vRet); @@ -506,7 +505,7 @@ static HRESULT WINAPI domtext_put_data( V_VT(&val) = VT_BSTR; V_BSTR(&val) = data; - hr = IXMLDOMNode_put_nodeValue( This->element, val ); + hr = IXMLDOMNode_put_nodeValue( This->node, val ); return hr; } @@ -516,7 +515,7 @@ static HRESULT WINAPI domtext_get_length( long *len) { domtext *This = impl_from_IXMLDOMText( iface ); - xmlnode *pDOMNode = impl_from_IXMLDOMNode( (IXMLDOMNode*)This->element ); + xmlnode *pDOMNode = impl_from_IXMLDOMNode( This->node ); xmlChar *pContent; long nLength = 0; @@ -542,7 +541,7 @@ static HRESULT WINAPI domtext_substringData( long offset, long count, BSTR *p) { domtext *This = impl_from_IXMLDOMText( iface ); - xmlnode *pDOMNode = impl_from_IXMLDOMNode( (IXMLDOMNode*)This->element ); + xmlnode *pDOMNode = impl_from_IXMLDOMNode( This->node ); xmlChar *pContent; long nLength = 0; HRESULT hr = S_FALSE; @@ -587,7 +586,7 @@ static HRESULT WINAPI domtext_appendData( BSTR p) { domtext *This = impl_from_IXMLDOMText( iface ); - xmlnode *pDOMNode = impl_from_IXMLDOMNode( (IXMLDOMNode*)This->element ); + xmlnode *pDOMNode = impl_from_IXMLDOMNode( This->node ); xmlChar *pContent; HRESULT hr = S_FALSE; @@ -616,7 +615,7 @@ static HRESULT WINAPI domtext_insertData( long offset, BSTR p) { domtext *This = impl_from_IXMLDOMText( iface ); - xmlnode *pDOMNode = impl_from_IXMLDOMNode( (IXMLDOMNode*)This->element ); + xmlnode *pDOMNode = impl_from_IXMLDOMNode( This->node ); xmlChar *pXmlContent; BSTR sNewString; HRESULT hr = S_FALSE; @@ -773,22 +772,22 @@ IUnknown* create_text( xmlNodePtr text ) This->lpVtbl = &domtext_vtbl; This->ref = 1; - This->element_unk = create_element( text, (IUnknown*)&This->lpVtbl ); - if(!This->element_unk) + This->node_unk = create_basic_node( text, (IUnknown*)&This->lpVtbl ); + if(!This->node_unk) { HeapFree(GetProcessHeap(), 0, This); return NULL; } - hr = IUnknown_QueryInterface(This->element_unk, &IID_IXMLDOMNode, (LPVOID*)&This->element); + hr = IUnknown_QueryInterface(This->node_unk, &IID_IXMLDOMNode, (LPVOID*)&This->node); if(FAILED(hr)) { - IUnknown_Release(This->element_unk); + IUnknown_Release(This->node_unk); HeapFree( GetProcessHeap(), 0, This ); return NULL; } - /* The ref on This->element is actually looped back into this object, so release it */ - IXMLDOMNode_Release(This->element); + /* The ref on This->node is actually looped back into this object, so release it */ + IXMLDOMNode_Release(This->node); return (IUnknown*) &This->lpVtbl; } diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c index 65c47c603f9..b931999e348 100644 --- a/dlls/opengl32/tests/opengl.c +++ b/dlls/opengl32/tests/opengl.c @@ -1,7 +1,7 @@ /* * Some tests for OpenGL functions * - * Copyright (C) 2007 Roderick Colenbrander + * Copyright (C) 2007-2008 Roderick Colenbrander * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -30,6 +30,18 @@ const unsigned char * WINAPI glGetString(unsigned int); #define MAX_FORMATS 256 typedef void* HPBUFFERARB; +/* WGL_ARB_create_context */ +HGLRC (WINAPI *pwglCreateContextAttribsARB)(HDC hDC, HGLRC hShareContext, const int *attribList); +/* GetLastError */ +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +/* Flags for WGL_CONTEXT_FLAGS_ARB */ +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 + /* WGL_ARB_extensions_string */ static const char* (WINAPI *pwglGetExtensionsStringARB)(HDC); static int (WINAPI *pwglReleasePbufferDCARB)(HPBUFFERARB, HDC); @@ -64,6 +76,9 @@ static void init_functions(void) if(!p ## func) \ trace("wglGetProcAddress(%s) failed\n", #func); + /* WGL_ARB_create_context */ + GET_PROC(wglCreateContextAttribsARB); + /* WGL_ARB_extensions_string */ GET_PROC(wglGetExtensionsStringARB) @@ -400,6 +415,108 @@ static void test_dc(HWND hwnd, HDC hdc) } } +static void test_opengl3(HDC hdc) +{ + /* Try to create a context using an invalid OpenGL version namely 0.x */ + { + HGLRC gl3Ctx; + int attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 0, 0}; + + gl3Ctx = pwglCreateContextAttribsARB(hdc, 0, attribs); + ok(gl3Ctx == 0, "wglCreateContextAttribs with major version=0 should fail!\n"); + + if(gl3Ctx) + wglDeleteContext(gl3Ctx); + } + + /* Try to create a context compatible with OpenGL 1.x; 1.0-2.1 is allowed */ + { + HGLRC gl3Ctx; + int attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 1, 0}; + + gl3Ctx = pwglCreateContextAttribsARB(hdc, 0, attribs); + ok(gl3Ctx != 0, "pwglCreateContextAttribsARB for a 1.x context failed!\n"); + wglDeleteContext(gl3Ctx); + } + + /* Try to pass an invalid HDC */ + { + HGLRC gl3Ctx; + DWORD error; + gl3Ctx = pwglCreateContextAttribsARB((HDC)0xdeadbeef, 0, 0); + ok(gl3Ctx == 0, "pwglCreateContextAttribsARB using an invalid HDC passed\n"); + error = GetLastError(); + ok(error == ERROR_DC_NOT_FOUND, "Expected ERROR_DC_NOT_FOUND, got error=%x\n", error); + wglDeleteContext(gl3Ctx); + } + + /* Try to pass an invalid shareList */ + { + HGLRC gl3Ctx; + DWORD error; + gl3Ctx = pwglCreateContextAttribsARB(hdc, (HGLRC)0xdeadbeef, 0); + ok(gl3Ctx == 0, "pwglCreateContextAttribsARB using an invalid shareList passed\n"); + error = GetLastError(); + ok(error == ERROR_INVALID_OPERATION, "Expected ERROR_INVALID_OPERATION, got error=%x\n", error); + wglDeleteContext(gl3Ctx); + } + + /* Try to create an OpenGL 3.0 context */ + { + int attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 0, 0}; + HGLRC gl3Ctx = pwglCreateContextAttribsARB(hdc, 0, attribs); + + if(gl3Ctx == NULL) + { + skip("Skipping the rest of the WGL_ARB_create_context test due to lack of OpenGL 3.0\n"); + return; + } + + wglDeleteContext(gl3Ctx); + } + + /* Test matching an OpenGL 3.0 context with an older one, OpenGL 3.0 should allow it until the new object model is introduced in a future revision */ + { + HGLRC glCtx = wglCreateContext(hdc); + + int attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 0, 0}; + int attribs_future[] = {WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 0, 0}; + + HGLRC gl3Ctx = pwglCreateContextAttribsARB(hdc, glCtx, attribs); + ok(gl3Ctx != NULL, "Sharing of a display list between OpenGL 3.0 and OpenGL 1.x/2.x failed!\n"); + if(gl3Ctx) + wglDeleteContext(gl3Ctx); + + gl3Ctx = pwglCreateContextAttribsARB(hdc, glCtx, attribs_future); + ok(gl3Ctx != NULL, "Sharing of a display list between a forward compatible OpenGL 3.0 context and OpenGL 1.x/2.x failed!\n"); + if(gl3Ctx) + wglDeleteContext(gl3Ctx); + + if(glCtx) + wglDeleteContext(glCtx); + } + + /* Try to create an OpenGL 3.0 context and test windowless rendering */ + { + HGLRC gl3Ctx; + int attribs[] = {WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 0, 0}; + BOOL res; + + gl3Ctx = pwglCreateContextAttribsARB(hdc, 0, attribs); + ok(gl3Ctx != 0, "pwglCreateContextAttribsARB for a 3.0 context failed!\n"); + + /* OpenGL 3.0 allows offscreen rendering WITHOUT a drawable */ + /* NOTE: Nvidia's 177.89 beta drivers don't allow this yet */ + res = wglMakeCurrent(0, gl3Ctx); + ok(res == TRUE, "OpenGL 3.0 should allow windowless rendering, but the test failed!\n"); + if(res) + wglMakeCurrent(0, 0); + + if(gl3Ctx) + wglDeleteContext(gl3Ctx); + } +} + START_TEST(opengl) { HWND hwnd; @@ -477,6 +594,9 @@ START_TEST(opengl) wgl_extensions = pwglGetExtensionsStringARB(hdc); if(wgl_extensions == NULL) skip("Skipping opengl32 tests because this OpenGL implementation doesn't support WGL extensions!\n"); + if(strstr(wgl_extensions, "WGL_ARB_create_context")) + test_opengl3(hdc); + if(strstr(wgl_extensions, "WGL_ARB_make_current_read")) test_make_current_read(hdc); else diff --git a/dlls/spoolss/tests/spoolss.c b/dlls/spoolss/tests/spoolss.c index d65f1012b16..6a2711e1752 100644 --- a/dlls/spoolss/tests/spoolss.c +++ b/dlls/spoolss/tests/spoolss.c @@ -120,13 +120,42 @@ static void test_BuildOtherNamesFromMachineName(void) SetLastError(0xdeadbeef); res = pBuildOtherNamesFromMachineName(&buffers, &numentries); - /* An array with 3 stringpointer is returned: + /* An array with a number of stringpointers is returned (minimum of 3): entry_#0: "" (empty String) entry_#1: (this is the same as the computername) - entry_#2: (string with the ip-address of ) + 1 entry per Ethernet adapter : (string with a IPv4 ip-address) + + As of Vista: + + IPv6 fully disabled (lan interfaces, connections, tunnel interfaces and loopback interfaces) + entry_#0: "" (empty String) + entry_#1: (this is the same as the computername) + 1 entry per Ethernet adapter : (string with a IPv4 ip-address) + entry_#x: "::1" + + IPv6 partly disabled (lan interfaces, connections): + entry_#0: "" (empty String) + entry_#1: (this is the same as the computername) + entry_#2: "::1" + 1 entry per Ethernet adapter : (string with a IPv4 ip-address) + + IPv6 fully enabled but not on all lan interfaces: + entry_#0: "" (empty String) + entry_#1: (this is the same as the computername) + 1 entry per IPv6 enabled Ethernet adapter : (string with a Link-local IPv6 ip-address) + 1 entry per IPv4 enabled Ethernet adapter : (string with a IPv4 ip-address) + + IPv6 fully enabled on all lan interfaces: + entry_#0: "" (empty String) + entry_#1: (this is the same as the computername) + 1 entry per IPv6 enabled Ethernet adapter : (string with a Link-local IPv6 ip-address) + entry_#x: Tunnel adapter (string with a Link-local IPv6 ip-address) + 1 entry per IPv4 enabled Ethernet adapter : (string with a IPv4 ip-address) + entry_#y: Tunnel adapter (string with a IPv6 ip-address) */ + todo_wine - ok( res && (buffers != NULL) && (numentries == 3) && (buffers[0] != NULL) && (buffers[0][0] == '\0'), + ok( res && (buffers != NULL) && (numentries >= 3) && (buffers[0] != NULL) && (buffers[0][0] == '\0'), "got %u with %u and %p,%u (%p:%d)\n", res, GetLastError(), buffers, numentries, ((numentries > 0) && buffers) ? buffers[0] : NULL, ((numentries > 0) && buffers && buffers[0]) ? lstrlenW(buffers[0]) : -1); diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c index 67a4ea9c884..a791214072f 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -61,13 +61,22 @@ static void test_ScriptShape(HDC hdc) hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, NULL); ok(hr == E_INVALIDARG, "ScriptShape should return E_INVALIDARG not %08x\n", hr); + hr = ScriptShape(NULL, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb); + ok(hr == E_PENDING, "ScriptShape should return E_PENDING not %08x\n", hr); + hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb); ok(!hr, "ScriptShape should return S_OK not %08x\n", hr); ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n"); + hr = ScriptShape(NULL, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb); + ok(!hr, "ScriptShape should return S_OK not %08x\n", hr); + hr = ScriptPlace(hdc, &sc, glyphs, 4, NULL, &items[0].a, widths, NULL, NULL); ok(hr == E_INVALIDARG, "ScriptPlace should return E_INVALIDARG not %08x\n", hr); + hr = ScriptPlace(NULL, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, NULL); + ok(hr == E_PENDING, "ScriptPlace should return E_PENDING not %08x\n", hr); + hr = ScriptPlace(hdc, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, NULL); ok(!hr, "ScriptPlace should return S_OK not %08x\n", hr); ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n"); @@ -1394,7 +1403,7 @@ START_TEST(usp10) ok( hdc != NULL, "HDC failed to be created %p\n", hdc); memset(&lf, 0, sizeof(LOGFONTA)); - lstrcpyA(lf.lfFaceName, "Symbol"); + lstrcpyA(lf.lfFaceName, "Tahoma"); lf.lfHeight = 10; lf.lfWeight = 3; lf.lfWidth = 10; diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index 28ba2bc77ad..2bc06178056 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -138,10 +138,16 @@ static const SCRIPT_PROPERTIES *script_props[] = &props[73] }; +#define GLYPH_BLOCK_SHIFT 8 +#define GLYPH_BLOCK_SIZE (1UL << GLYPH_BLOCK_SHIFT) +#define GLYPH_BLOCK_MASK (GLYPH_BLOCK_SIZE - 1) +#define GLYPH_MAX 65536 + typedef struct { - HDC hdc; LOGFONTW lf; TEXTMETRICW tm; + WORD *glyphs[GLYPH_MAX / GLYPH_BLOCK_SIZE]; + ABC *widths[GLYPH_MAX / GLYPH_BLOCK_SIZE]; } ScriptCache; typedef struct { @@ -155,6 +161,7 @@ typedef struct { } StringGlyphs; typedef struct { + HDC hdc; BOOL invalid; int clip_len; ScriptCache *sc; @@ -187,69 +194,78 @@ static inline BOOL heap_free(LPVOID mem) return HeapFree(GetProcessHeap(), 0, mem); } -static HDC get_cache_hdc(SCRIPT_CACHE *psc) -{ - return ((ScriptCache *)*psc)->hdc; -} - -static WCHAR get_cache_default_char(SCRIPT_CACHE *psc) +static inline WCHAR get_cache_default_char(SCRIPT_CACHE *psc) { return ((ScriptCache *)*psc)->tm.tmDefaultChar; } -static LONG get_cache_height(SCRIPT_CACHE *psc) +static inline LONG get_cache_height(SCRIPT_CACHE *psc) { return ((ScriptCache *)*psc)->tm.tmHeight; } -static BYTE get_cache_pitch_family(SCRIPT_CACHE *psc) +static inline BYTE get_cache_pitch_family(SCRIPT_CACHE *psc) { return ((ScriptCache *)*psc)->tm.tmPitchAndFamily; } -static HRESULT init_script_cache(const HDC hdc, ScriptCache *sc) +static inline WORD get_cache_glyph(SCRIPT_CACHE *psc, WCHAR c) { - if (!GetTextMetricsW(hdc, &sc->tm)) return E_INVALIDARG; - if (!GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(LOGFONTW), &sc->lf)) return E_INVALIDARG; - sc->hdc = hdc; - return S_OK; + WORD *block = ((ScriptCache *)*psc)->glyphs[c >> GLYPH_BLOCK_SHIFT]; + + if (!block) return 0; + return block[c & GLYPH_BLOCK_MASK]; } -static HRESULT get_script_cache(const HDC hdc, SCRIPT_CACHE *psc) +static inline WORD set_cache_glyph(SCRIPT_CACHE *psc, WCHAR c, WORD glyph) { - if (!psc) return E_INVALIDARG; - if (!*psc) - { - HRESULT ret; - ScriptCache *sc; + WORD **block = &((ScriptCache *)*psc)->glyphs[c >> GLYPH_BLOCK_SHIFT]; - if (!hdc) return E_PENDING; - if (!(sc = heap_alloc_zero(sizeof(ScriptCache)))) return E_OUTOFMEMORY; - ret = init_script_cache(hdc, sc); - if (ret != S_OK) - { - heap_free(sc); - return ret; - } - *psc = sc; - } - TRACE("<- %p\n", *psc); - return S_OK; + if (!*block && !(*block = heap_alloc_zero(sizeof(WORD) * GLYPH_BLOCK_SIZE))) return 0; + return ((*block)[c & GLYPH_BLOCK_MASK] = glyph); } -static HFONT select_cached_font(SCRIPT_CACHE *psc) +static inline BOOL get_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc) { - HFONT old_font; - ScriptCache *sc = *psc; + static const ABC nil; + ABC *block = ((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT]; - old_font = SelectObject(sc->hdc, CreateFontIndirectW(&sc->lf)); - return old_font; + if (!block || !memcmp(&block[glyph & GLYPH_BLOCK_MASK], &nil, sizeof(ABC))) return FALSE; + memcpy(abc, &block[glyph & GLYPH_BLOCK_MASK], sizeof(ABC)); + return TRUE; } -static void unselect_cached_font(SCRIPT_CACHE *psc, HFONT old_font) +static inline BOOL set_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc) { - ScriptCache *sc = *psc; - DeleteObject(SelectObject(sc->hdc, old_font)); + ABC **block = &((ScriptCache *)*psc)->widths[glyph >> GLYPH_BLOCK_SHIFT]; + + if (!*block && !(*block = heap_alloc_zero(sizeof(ABC) * GLYPH_BLOCK_SIZE))) return FALSE; + memcpy(&(*block)[glyph & GLYPH_BLOCK_MASK], abc, sizeof(ABC)); + return TRUE; +} + +static HRESULT init_script_cache(const HDC hdc, SCRIPT_CACHE *psc) +{ + ScriptCache *sc; + + if (!psc) return E_INVALIDARG; + if (*psc) return S_OK; + if (!hdc) return E_PENDING; + + if (!(sc = heap_alloc_zero(sizeof(ScriptCache)))) return E_OUTOFMEMORY; + if (!GetTextMetricsW(hdc, &sc->tm)) + { + heap_free(sc); + return E_INVALIDARG; + } + if (!GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(LOGFONTW), &sc->lf)) + { + heap_free(sc); + return E_INVALIDARG; + } + *psc = sc; + TRACE("<- %p\n", sc); + return S_OK; } /*********************************************************************** @@ -285,10 +301,16 @@ HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc) { TRACE("%p\n", psc); - if (psc) + if (psc && *psc) { - heap_free(*psc); - *psc = NULL; + unsigned int i; + for (i = 0; i < GLYPH_MAX / GLYPH_BLOCK_SIZE; i++) + { + heap_free(((ScriptCache *)*psc)->glyphs[i]); + heap_free(((ScriptCache *)*psc)->widths[i]); + } + heap_free(*psc); + *psc = NULL; } return S_OK; } @@ -338,10 +360,7 @@ HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPR TRACE("%p,%p,%p\n", hdc, psc, sfp); if (!sfp) return E_INVALIDARG; - - hr = get_script_cache(hdc, psc); - if (hr != S_OK) - return hr; + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; if (sfp->cBytes != sizeof(SCRIPT_FONTPROPERTIES)) return E_INVALIDARG; @@ -613,6 +632,7 @@ HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, /* FIXME: handle clipping */ analysis->clip_len = cString; + analysis->hdc = hdc; hr = ScriptItemize(pString, cString, num_items, psControl, psState, analysis->pItem, &analysis->numItems); @@ -757,7 +777,7 @@ HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, cnt += analysis->glyphs[item].numGlyphs; /* point to the end of the copied text */ } - hr = ScriptTextOut(analysis->sc->hdc, (SCRIPT_CACHE *)&analysis->sc, iX, iY, + hr = ScriptTextOut(analysis->hdc, (SCRIPT_CACHE *)&analysis->sc, iX, iY, uOptions, prc, &analysis->pItem->a, NULL, 0, glyphs, cnt, analysis->glyphs->piAdvance, NULL, analysis->glyphs->pGoffset); TRACE("ScriptTextOut hr=%08x\n", hr); @@ -1242,9 +1262,8 @@ HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs) { - int cnt; HRESULT hr; - HFONT hfont; + unsigned int i; TRACE("(%p, %p, %p, %d, %d, %p)\n", hdc, psc, pwcChars, cChars, cMaxGlyphs, psa); if (psa) TRACE("psa values: %d, %d, %d, %d, %d, %d, %d\n", psa->eScript, psa->fRTL, psa->fLayoutRTL, @@ -1253,38 +1272,42 @@ HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, if (!psva || !pcGlyphs) return E_INVALIDARG; if (cChars > cMaxGlyphs) return E_OUTOFMEMORY; - hr = get_script_cache(hdc, psc); - if (hr != S_OK) return hr; - *pcGlyphs = cChars; - - hfont = select_cached_font(psc); + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE) && !psa->fNoGlyphIndex) { - GetGlyphIndicesW(get_cache_hdc(psc), pwcChars, cChars, pwOutGlyphs, 0); + for (i = 0; i < cChars; i++) + { + if (!(pwOutGlyphs[i] = get_cache_glyph(psc, pwcChars[i]))) + { + WORD glyph; + if (!hdc) return E_PENDING; + if (GetGlyphIndicesW(hdc, &pwcChars[i], 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE; + pwOutGlyphs[i] = set_cache_glyph(psc, pwcChars[i], glyph); + } + } } else { TRACE("no glyph translation\n"); - for (cnt = 0; cnt < cChars; cnt++) pwOutGlyphs[cnt] = pwcChars[cnt]; + for (i = 0; i < cChars; i++) pwOutGlyphs[i] = pwcChars[i]; } if (psva) { /* set up a valid SCRIPT_VISATTR and LogClust for each char in this run */ - for (cnt = 0; cnt < cChars; cnt++) + for (i = 0; i < cChars; i++) { /* FIXME: set to better values */ - psva[cnt].uJustification = 2; - psva[cnt].fClusterStart = 1; - psva[cnt].fDiacritic = 0; - psva[cnt].fZeroWidth = 0; + psva[i].uJustification = 2; + psva[i].fClusterStart = 1; + psva[i].fDiacritic = 0; + psva[i].fZeroWidth = 0; - if (pwLogClust) pwLogClust[cnt] = cnt; + if (pwLogClust) pwLogClust[i] = i; } } - unselect_cached_font(psc, hfont); return S_OK; } @@ -1313,60 +1336,46 @@ HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC ) { HRESULT hr; - LPABC lpABC; - HFONT hfont; unsigned int i; TRACE("(%p, %p, %p, %s, %d, %p, %p, %p)\n", hdc, psc, pwGlyphs, debugstr_wn(pwGlyphs, cGlyphs), cGlyphs, psva, psa, piAdvance); if (!psva) return E_INVALIDARG; + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; - hr = get_script_cache(hdc, psc); - if (hr != S_OK) return hr; - - hfont = select_cached_font(psc); - - /* Here we need to calculate the width of the run unit. At this point the input string - * has been converted to glyphs and we still need to translate back to the original chars - * to get the correct ABC widths. */ - - if (!(lpABC = heap_alloc_zero(sizeof(ABC) * cGlyphs))) return E_OUTOFMEMORY; if (pABC) memset(pABC, 0, sizeof(ABC)); - - if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE) && !psa->fNoGlyphIndex) - { - GetCharABCWidthsI(get_cache_hdc(psc), 0, cGlyphs, (WORD *)pwGlyphs, lpABC); - } - else + for (i = 0; i < cGlyphs; i++) { - INT width; - for (i = 0; i < cGlyphs; i++) + ABC abc; + if (!get_cache_glyph_widths(psc, pwGlyphs[i], &abc)) { - GetCharWidth32W(get_cache_hdc(psc), pwGlyphs[i], pwGlyphs[i], &width); - lpABC[i].abcB = width; + if (!hdc) return E_PENDING; + if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE) && !psa->fNoGlyphIndex) + { + if (!GetCharABCWidthsI(hdc, 0, 1, (WORD *)&pwGlyphs[i], &abc)) return S_FALSE; + } + else + { + INT width; + if (!GetCharWidth32W(hdc, pwGlyphs[i], pwGlyphs[i], &width)) return S_FALSE; + abc.abcB = width; + abc.abcA = abc.abcC = 0; + } + set_cache_glyph_widths(psc, pwGlyphs[i], &abc); } - } - - for (i = 0; i < cGlyphs; i++) - { - TRACE(" Glyph=%04x, abcA=%d, abcB=%d, abcC=%d index=%d\n", - pwGlyphs[i], lpABC[i].abcA, lpABC[i].abcB, lpABC[i].abcC, i); - if (pABC) { - pABC->abcA += lpABC[i].abcA; - pABC->abcB += lpABC[i].abcB; - pABC->abcC += lpABC[i].abcC; + pABC->abcA += abc.abcA; + pABC->abcB += abc.abcB; + pABC->abcC += abc.abcC; } /* FIXME: set to more reasonable values */ if (pGoffset) pGoffset[i].du = pGoffset[i].dv = 0; - if (piAdvance) piAdvance[i] = lpABC[i].abcA + lpABC[i].abcB + lpABC[i].abcC; + if (piAdvance) piAdvance[i] = abc.abcA + abc.abcB + abc.abcC; } - if (pABC) TRACE("Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->abcA, pABC->abcB, pABC->abcC); - heap_free(lpABC); - unselect_cached_font(psc, hfont); + if (pABC) TRACE("Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->abcA, pABC->abcB, pABC->abcC); return S_OK; } @@ -1391,20 +1400,32 @@ HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars int cChars, DWORD dwFlags, WORD *pwOutGlyphs) { HRESULT hr; - HFONT hfont; + unsigned int i; TRACE("(%p,%p,%s,%d,0x%x,%p)\n", hdc, psc, debugstr_wn(pwcInChars, cChars), cChars, dwFlags, pwOutGlyphs); - hr = get_script_cache(hdc, psc); - if (hr != S_OK) return hr; + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; - hfont = select_cached_font(psc); - if (GetGlyphIndicesW(get_cache_hdc(psc), pwcInChars, cChars, pwOutGlyphs, 0) == GDI_ERROR) - hr = S_FALSE; - - unselect_cached_font(psc, hfont); - return hr; + if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE)) + { + for (i = 0; i < cChars; i++) + { + if (!(pwOutGlyphs[i] = get_cache_glyph(psc, pwcInChars[i]))) + { + WORD glyph; + if (!hdc) return E_PENDING; + if (GetGlyphIndicesW(hdc, &pwcInChars[i], 1, &glyph, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) return S_FALSE; + pwOutGlyphs[i] = set_cache_glyph(psc, pwcInChars[i], glyph); + } + } + } + else + { + TRACE("no glyph translation\n"); + for (i = 0; i < cChars; i++) pwOutGlyphs[i] = pwcInChars[i]; + } + return S_OK; } /*********************************************************************** @@ -1456,9 +1477,7 @@ HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *height) TRACE("(%p, %p, %p)\n", hdc, psc, height); if (!height) return E_INVALIDARG; - - hr = get_script_cache(hdc, psc); - if (hr != S_OK) return hr; + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; *height = get_cache_height(psc); return S_OK; @@ -1481,19 +1500,29 @@ HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *height) */ HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD glyph, ABC *abc) { - HFONT hfont; - HRESULT hr = S_OK; + HRESULT hr; TRACE("(%p, %p, 0x%04x, %p)\n", hdc, psc, glyph, abc); - hr = get_script_cache(hdc, psc); - if (hr != S_OK) return hr; + if ((hr = init_script_cache(hdc, psc)) != S_OK) return hr; - hfont = select_cached_font(psc); - if (!GetCharABCWidthsI(get_cache_hdc(psc), 0, 1, &glyph, abc)) hr = E_HANDLE; - - unselect_cached_font(psc, hfont); - return hr; + if (!get_cache_glyph_widths(psc, glyph, abc)) + { + if (!hdc) return E_PENDING; + if ((get_cache_pitch_family(psc) & TMPF_TRUETYPE)) + { + if (!GetCharABCWidthsI(hdc, 0, 1, &glyph, abc)) return S_FALSE; + } + else + { + INT width; + if (!GetCharWidth32W(hdc, glyph, glyph, &width)) return S_FALSE; + abc->abcB = width; + abc->abcA = abc->abcC = 0; + } + set_cache_glyph_widths(psc, glyph, abc); + } + return S_OK; } /*********************************************************************** diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index 39ebc14f7b7..aa3a3d477e4 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -294,8 +294,6 @@ static void drawStridedSlow(IWineD3DDevice *iface, WineDirect3DVertexStridedData const WORD *pIdxBufS = NULL; const DWORD *pIdxBufL = NULL; LONG vx_index; - DWORD diffuseColor = 0xFFFFFFFF; /* Diffuse Color */ - DWORD specularColor = 0; /* Specular Color */ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; UINT *streamOffset = This->stateBlock->streamOffset; long SkipnStrides = startVertex + This->stateBlock->loadBaseVertexIndex; @@ -382,10 +380,6 @@ static void drawStridedSlow(IWineD3DDevice *iface, WineDirect3DVertexStridedData /* For each primitive */ for (vx_index = 0; vx_index < NumVertexes; ++vx_index) { - - /* Initialize diffuse color */ - diffuseColor = 0xFFFFFFFF; - /* Blending data and Point sizes are not supported by this function. They are not supported by the fixed * function pipeline at all. A Fixme for them is printed after decoding the vertex declaration */ @@ -451,10 +445,10 @@ static void drawStridedSlow(IWineD3DDevice *iface, WineDirect3DVertexStridedData diffuse_funcs[sd->u.s.diffuse.dwType]((void *) ptrToCoords); if(This->activeContext->num_untracked_materials) { + DWORD diffuseColor = ptrToCoords[0]; unsigned char i; float color[4]; - diffuseColor = ptrToCoords[0]; color[0] = D3DCOLOR_B_R(diffuseColor) / 255.0; color[1] = D3DCOLOR_B_G(diffuseColor) / 255.0; color[2] = D3DCOLOR_B_B(diffuseColor) / 255.0; @@ -475,7 +469,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, WineDirect3DVertexStridedData (This->stateBlock->renderState[WINED3DRS_FOGVERTEXMODE] == WINED3DFOG_NONE || sd->u.s.position.dwType == WINED3DDECLTYPE_FLOAT4 )&& This->stateBlock->renderState[WINED3DRS_FOGTABLEMODE] == WINED3DFOG_NONE) { if(GL_SUPPORT(EXT_FOG_COORD)) { - specularColor = ptrToCoords[0]; + DWORD specularColor = ptrToCoords[0]; GL_EXTCALL(glFogCoordfEXT(specularColor >> 24)); } else { static BOOL warned = FALSE; diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 4c7e15724da..c22a54749ae 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1102,7 +1102,7 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED case RTL_AUTO: case RTL_READDRAW: case RTL_READTEX: - IWineD3DSurface_LoadLocation(iface, SFLAG_INSYSMEM, pRect); + IWineD3DSurface_LoadLocation(iface, SFLAG_INSYSMEM, pass_rect); break; case RTL_DISABLE: diff --git a/dlls/wined3d/swapchain_base.c b/dlls/wined3d/swapchain_base.c index 75adf7720e1..40881908488 100644 --- a/dlls/wined3d/swapchain_base.c +++ b/dlls/wined3d/swapchain_base.c @@ -95,15 +95,15 @@ HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, if (iBackBuffer > This->presentParms.BackBufferCount - 1) { TRACE("Back buffer count out of range\n"); - /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it here - * in wined3d to avoid problems in other libs - */ + /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it + * here in wined3d to avoid problems in other libs + */ *ppBackBuffer = NULL; return WINED3DERR_INVALIDCALL; } - /* Return invalid if there is no backbufferarray, otherwise it will crash when ddraw is - * used (there This->backBuffer is allways NULL). We need this because this function have + /* Return invalid if there is no backbuffer array, otherwise it will crash when ddraw is + * used (there This->backBuffer is always NULL). We need this because this function has * to be called from IWineD3DStateBlockImpl_InitStartupStateBlock to get the default * scissorrect dimensions. */ if( !This->backBuffer ) { diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c index 42f1d3223cc..4bad745452e 100644 --- a/dlls/winmm/mmio.c +++ b/dlls/winmm/mmio.c @@ -570,11 +570,8 @@ static MMRESULT MMIO_SetBuffer(WINE_MMIO* wm, void* pchBuffer, LONG cchBuffer, wm->info.dwFlags &= ~MMIO_ALLOCBUF; } - wm->bBufferLoaded = FALSE; - if (pchBuffer) { wm->info.pchBuffer = pchBuffer; - wm->bBufferLoaded = TRUE; } else if (cchBuffer) { if (!(wm->info.pchBuffer = HeapAlloc(GetProcessHeap(), 0, cchBuffer))) return MMIOERR_OUTOFMEMORY; @@ -588,6 +585,7 @@ static MMRESULT MMIO_SetBuffer(WINE_MMIO* wm, void* pchBuffer, LONG cchBuffer, wm->info.pchEndRead = wm->info.pchBuffer; wm->info.pchEndWrite = wm->info.pchBuffer + cchBuffer; wm->info.lBufOffset = wm->info.lDiskOffset; + wm->bBufferLoaded = FALSE; return MMSYSERR_NOERROR; } @@ -669,6 +667,8 @@ HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags, refmminfo->wErrorRet = MMIO_SetBuffer(wm, refmminfo->pchBuffer, refmminfo->cchBuffer, 0); if (refmminfo->wErrorRet != MMSYSERR_NOERROR) goto error1; + if (wm->info.fccIOProc == FOURCC_MEM) + wm->bBufferLoaded = TRUE; } /* see mmioDosIOProc for that one */ diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c index 90a185fd938..9138b6026b8 100644 --- a/dlls/winmm/tests/mci.c +++ b/dlls/winmm/tests/mci.c @@ -31,15 +31,19 @@ START_TEST(mci) const char command_sysinfo[] = "sysinfo waveaudio quantity open"; MSG msg; char buf[1024]; + HWND hwnd; + + hwnd = CreateWindowExA(0, "winmm test", "", WS_POPUP, 0,0,100,100, + 0, 0, 0, NULL); err = mciSendString(command_open, NULL, 0, NULL); ok(!err,"mciSendString(%s, NULL, 0 , NULL) returned error: %d\n", command_open, err); - err = mciSendString(command_close_my, NULL, 0, NULL); + err = mciSendString(command_close_my, NULL, 0, hwnd); ok(!err,"mciSendString(%s, NULL, 0 , NULL) returned error: %d\n", command_close_my, err); - ok(PeekMessageW( &msg, (HWND)-1, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n"); - ok(msg.hwnd == NULL, "got %p instead of NULL\n", msg.hwnd); + ok(PeekMessageA( &msg, hwnd, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n"); + ok(msg.hwnd == hwnd, "Didn't get the handle to our test window\n"); ok(msg.message == MM_MCINOTIFY, "got %04x instead of MM_MCINOTIFY\n", msg.message); ok(msg.wParam == MCI_NOTIFY_SUCCESSFUL, "got %08lx instead of MCI_NOTIFY_SUCCESSFUL\n", msg.wParam); @@ -47,7 +51,7 @@ START_TEST(mci) todo_wine ok(!err,"mciSendString(%s, NULL, 0 , NULL) returned error: %d\n", command_close_all, err); memset(buf, 0, sizeof(buf)); - err = mciSendString(command_close_all, buf, sizeof(buf), NULL); + err = mciSendString(command_close_all, buf, sizeof(buf), hwnd); todo_wine ok(!err,"mciSendString(%s, buf, sizeof(buf) , NULL) returned error: %d\n", command_close_all, err); todo_wine ok(buf[0] == 0, "mciSendString(%s, buf, sizeof(buf) , NULL) changed output buffer: %s\n", command_close_all, buf); @@ -57,7 +61,10 @@ START_TEST(mci) todo_wine ok(buf[0] == '0' && buf[1] == 0, "mciSendString(%s, buf, sizeof(buf) , NULL), expected output buffer '0', got: '%s'\n", command_sysinfo, buf); err = mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_NOTIFY, 0); - todo_wine ok(err == MCIERR_INVALID_DEVICE_ID, + todo_wine ok(err == MCIERR_INVALID_DEVICE_ID || + broken(!err), /* Win9x and WinMe */ "mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_NOTIFY, NULL) returned %d instead of %d\n", err, MCIERR_INVALID_DEVICE_ID); + + DestroyWindow(hwnd); } diff --git a/dlls/winmm/tests/mixer.c b/dlls/winmm/tests/mixer.c index 4961547e26b..25711b7e787 100644 --- a/dlls/winmm/tests/mixer.c +++ b/dlls/winmm/tests/mixer.c @@ -740,8 +740,9 @@ static void mixer_test_deviceW(int device) mmsys_error(rc)); rc=mixerGetDevCapsW(device,&capsW,4); - ok(rc==MMSYSERR_NOERROR, - "mixerGetDevCapsW: MMSYSERR_NOERROR expected, got %s\n", + ok(rc==MMSYSERR_NOERROR || + rc==MMSYSERR_INVALPARAM, /* Vista and W2K8 */ + "mixerGetDevCapsW: MMSYSERR_NOERROR or MMSYSERR_INVALPARAM expected, got %s\n", mmsys_error(rc)); rc=mixerGetDevCapsW(device,&capsW,sizeof(capsW)); diff --git a/fonts/tahoma.sfd b/fonts/tahoma.sfd index 4b0c54d88dc..5b0a8b0c591 100644 --- a/fonts/tahoma.sfd +++ b/fonts/tahoma.sfd @@ -12,13 +12,13 @@ UnderlinePosition: -170 UnderlineWidth: 130 Ascent: 1638 Descent: 410 -XUID: [1021 135 1692684408 1110822] +XUID: [1021 135 1692684408 1110823] FSType: 0 OS2Version: 2 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1169210120 -ModificationTime: 1208293008 +ModificationTime: 1223550020 PfmFamily: 33 TTFWeight: 400 TTFWidth: 5 @@ -108,7 +108,7 @@ SnapStemV 9 [184 203] ExpansionFactor 4 0.06 EndPrivate TeXData: 1 0 0 327680 163840 109226 571904 -1048576 109226 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 -BeginChars: 65537 431 +BeginChars: 65537 432 StartChar: .notdef Encoding: 0 0 0 Width: 2048 @@ -9238,8 +9238,44 @@ Encoding: 160 160 430 Width: 639 Flags: W EndChar +StartChar: afii61352 +Encoding: 8470 8470 431 +Width: 1366 +Flags: W +TeX: 0 0 0 0 +HStem: 0 21G<152 337 678 900> 950 95<970 1220> 1090 75<1051.18 1158.82> 1405 85<1051.18 1158.82> +VStem: 152 185<0 1284> 715 185<310 1489> 965 65<1198.89 1371.11> 1180 45<1198.89 1371.11> +Fore +970 1045 m 5 + 1220 1045 l 5 + 1220 950 l 5 + 970 950 l 5 + 970 1045 l 5 +1180 1285 m 0 + 1180 1351.24 1146.4 1405 1105 1405 c 0 + 1063.6 1405 1030 1351.24 1030 1285 c 0 + 1030 1218.76 1063.6 1165 1105 1165 c 0 + 1146.4 1165 1180 1218.76 1180 1285 c 0 +965 1290 m 0 + 965 1400.4 1023.24 1490 1095 1490 c 0 + 1166.76 1490 1225 1400.4 1225 1290 c 0 + 1225 1179.6 1166.76 1090 1095 1090 c 0 + 1023.24 1090 965 1179.6 965 1290 c 0 +152 0 m 1 + 152 1489 l 1 + 433 1489 l 1 + 715 310 l 1 + 715 1489 l 1 + 900 1489 l 1 + 900 0 l 1 + 678 0 l 1 + 337 1284 l 1 + 337 0 l 1 + 152 0 l 1 +EndSplineSet +EndChar EndChars -BitmapFont: 9 431 7 2 1 +BitmapFont: 9 432 7 2 1 BDFChar: 0 0 9 1 7 0 6 rdo`RJqEt% BDFChar: 1 32 3 0 0 0 0 @@ -10102,8 +10138,10 @@ BDFChar: 429 539 3 0 1 -2 5 JA?\cJ3X*b BDFChar: 430 160 3 0 0 0 0 z +BDFChar: 431 8470 7 0 6 0 6 +QIaFVYcs2h EndBitmapFont -BitmapFont: 11 431 9 2 1 FontForge +BitmapFont: 11 432 9 2 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--11-80-96-96-P-62-ISO10646-1" FONTBOUNDINGBOX 1 "15 11 0 -2" @@ -11001,8 +11039,10 @@ BDFChar: 429 539 4 0 2 -3 7 J:QR.J:N/X!'l&7 BDFChar: 430 160 3 0 0 0 0 z +BDFChar: 431 8470 7 0 6 0 7 +QIaF6Yct?n EndBitmapFont -BitmapFont: 12 431 10 2 1 FontForge +BitmapFont: 12 432 10 2 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--12-90-96-96-P-70-ISO10646-1" FONTBOUNDINGBOX 1 "16 12 0 -2" @@ -11696,8 +11736,10 @@ BDFChar: 429 539 4 0 3 -3 8 5X=g(5X7S"0E<4\ BDFChar: 430 160 4 0 0 0 0 z +BDFChar: 431 8470 8 0 7 0 8 +Mp'2BW2Q)NL]@DT EndBitmapFont -BitmapFont: 13 431 10 3 1 FontForge +BitmapFont: 13 432 10 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--13-100-96-96-P-73-ISO10646-1" FONTBOUNDINGBOX 1 "15 13 0 -3" @@ -12391,8 +12433,10 @@ BDFChar: 429 539 4 0 3 -3 8 5X=g(5X7S"0E<4\ BDFChar: 430 160 4 0 0 0 0 z +BDFChar: 431 8470 8 0 7 0 8 +Mp'2BW2Q)NL]@DT EndBitmapFont -BitmapFont: 15 431 12 3 1 FontForge +BitmapFont: 15 432 12 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--15-110-96-96-P-85-ISO10646-1" FONTBOUNDINGBOX 1 "19 15 0 -3" @@ -13086,8 +13130,10 @@ BDFChar: 429 539 5 0 4 -3 9 5X>*05X7S"5WA`T0E;(Q BDFChar: 430 160 5 0 0 0 0 z +BDFChar: 431 8470 10 0 8 0 10 +Kn.-m_uQWaU]@b%PQ6pJMu\e:KE(uP EndBitmapFont -BitmapFont: 16 431 13 3 1 FontForge +BitmapFont: 16 432 13 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--16-120-96-96-P-93-ISO10646-1" FONTBOUNDINGBOX 1 "21 16 0 -3" @@ -13767,8 +13813,8 @@ BDFChar: 422 370 10 0 9 -3 11 J3\WMJ3\WMJ3\WMJ3\WMJ3\WM5_)'!!WW?'!rr<$ BDFChar: 423 371 9 0 7 -3 8 JUrB'JUrA>4TY`g -BDFChar: 424 175 9 0 8 13 14 -!!*%L +BDFChar: 424 175 9 0 8 13 13 +s*t(L BDFChar: 425 806 9 2 4 -4 -2 ?pK5B BDFChar: 426 536 9 0 7 -3 11 @@ -13781,5 +13827,7 @@ BDFChar: 429 539 5 0 4 -3 11 5X7U05X7S"5X7Ro!"^ga BDFChar: 430 160 0 0 0 0 0 z +BDFChar: 431 8470 11 0 9 0 11 +KE0!,`B^98U]@7,PQ6pJPQ6XBMu\M2 EndBitmapFont EndSplineFont diff --git a/fonts/tahoma.ttf b/fonts/tahoma.ttf index 20697537d8fd984dc1be46bf9f56cd182c6b2d10..b8bdfa6f9f52894a684964fac0d494cd0274178a 100644 GIT binary patch delta 2844 zcwTLm3s6*L6vxkDckkVG7xp16sF*BECXZAWToy|~9!uf+NUf~KXnlYrBu!A-L$b7& zHe##Z71TxZRgj2Vt@JQ6ZOk5{_AYa&VHzu&sHtp_taJAs6sVo~!#%(6yWe-t|9k8n z->f;>q-n6uZ><6_VR1pxoR#UVM*!Za0jO{n7kCQ4eQW>6fcAp`soie(oN1-!t~~`f zZ7%>MmJ}7c#S6OI00MGcP%?AI?5qBnHV>frD1d%%$?Tg83L9>0ruOsemyN3L2GDda zsP@)GeUs_}h&c(MI=kTh+9W8_m;o&NX%KaV_r4m42a#U#Q*5fJT3(*5U6}=7O$4|% zVeumGLhlo;s{znM?asvnEH-T##j7YzSzKMatf6NMy&E+KKsa8tbb(iYsr!1$&+;-& zSYGX2RuhFllcAh-(mmelMG3mDT7W0BDXILLrT5i-8rxF>u#wo1WI&KVQ`Dv3Wcudf z4Do7#_h(EAT7B0Wm(btc#!CC+ zoy$7wI;VuUg`2{@@N?mY@U!7(!Yjh_!&AdIeBCAN1N3E@76&((yqMbv%b^-uU=3`g zZ12Zbe2E5r5S#IN+<^{!0hU5NP1XW$!YU|-dvOmY}s@^AY7!L0^d#OboSB4`Oy4?%iX}jy{cGq1zq&anQk-Dj8 zoJQT#OBF@I-72%-)tmwY#L_%=b5`)FN7l!a@xwPdR1R#1wGhAq7{r(H74YM$&0f*sj>g7`XQ^o`!)8p;vF}QS?jhzs52VR$Bs1&0fT;3=EJv0 zJ5!ez%-mqt9x?S;vXW0WYpq&w9G|I?c6nXIzLf9z%Wyew29!f~TCc#@r zXKV%OY0^g0cG63v4$?cMk4T@BI!WJ?ej)uqsmSRJA;pns-x;qajV0xf3Q5yQx02>b zrgR)JrJd@WLrX#x8Lyt zNbizPk!D%M5ipP*kOMahvfd4UC)2^g>^5eWD^sTRxhoHwz-)cL=|?bY9l!`M|BP<-eggoE=7wJB11FBMP2l&q z?DXq67C9~m8FFwJ>OuVq#bnyJ3(`RsN)b;x+0zE4^SIuDgN=_G6l*z_3rt~_5%TAv zpsLSJtg<>oMx7h@!|Im}{|d~)a0vraF7PW+qpn9}DF?$giR+;z-`l9HLVGc&;q z`Kv{NA2RHp$hiURvb_^6%#~FK7{h#`R5gj*eSn+UfQfy1vAYvjg<2;m?sh8GeuHVylq}W`~^pK}0Vy>oJsb>91lochGe(%RO+gS)M`hERN$zW0^e~`ob-n z+qaA4k~#D2l2)LAiEYW84?`qM+njA0bRRunIK+c^msr+Rzz8Kjq~lmuvU2^h`*oLNfj~7-(OSCH zQf%4W`X0Co&YMaZ7{Yy{Io`x^WNCTjx|&0cd^;=(P;{_-OTNlz?~}Ocb~|=C zb~v^>wmLRAERJkP*3UN-CqUK|U9okZ&c}9GS3vRgSdVf#h8parqgYGFsTC{mCN#I@4Qys@=*o0+xjgC+ReMHUHnTBxv33SqEZgMZ}A&J`Pq-~YqEw9+_X+hK8 zovxm~bNU05$&_mkA!%XdmAN zAQbO9uSUG%yaw}g3TUWNWUB=wejWP-lkX1<+#?V{7{xD4er>~TUpN1#Qnv9BC!w)^ zb1>TW?Xd>(l6_m*x^;|=E*I%-72S8Vwvyf@THDpXFB$A@8tM%Q>N8A@`2N`l9d{uA z6zn2-C_N~ddlsnSbPMv!K?_@1eTeV!pdRIcfJ-rExb^9sc~$jH(!&XaPIhgP=cJ$ zmIJ~Ga>i>s;`Ji-XN?lfYR{iYd5Tw-@Nq9=agFYM7B52gA*+pbmh~m8i*=3F!@9-d z1#sWc^S41CzzSuJXH8}$vSzdR1EpUiJ*?aj5bDQd^o;#{_O&|9A&=$iUdc=Q; zSpFP^xmb9xy?ZJty{fK=oOWP2(YFNC46qmsVL%j9ALhJSpj0WKR6K!N)W(Wh{zSqc zSc+fMKWE;XCUNH?VpGmQ-o6;)!{6UK>HDdHIW zBQqT)rL*za@1&M^lAM0_2tT*G3S+Mg9VoWjBmPaq@>(KYEKXtHl0XWtsu_QZiJ z^@7RQP{Ae%rg0e=&qoX@KLu3EC%m^@H7|*pK}N*K69S~giR|orkroCd^!Fv4O(?K8Cc2$Xij#7a|KHi9=|cxfdd?&6 z-z6jA?k%azJ~2h!sYN0;Xa{9i3&sbh-;C_Tg6UnxW}o4EwZ9U6zK?m`uA1wjMmBbY zVEw0vzaW_4VmU#AvDsq~E@1qBC(U_T>PjbL@UDS+E(fNF^u;|HY@@%(iq+k8N03;1Msi_vX0$Ty|4xoI{b`oiShO{soV1plbjC diff --git a/fonts/tahomabd.sfd b/fonts/tahomabd.sfd index 0f39a66522c..d1e1cc61333 100644 --- a/fonts/tahomabd.sfd +++ b/fonts/tahomabd.sfd @@ -12,13 +12,13 @@ UnderlinePosition: -170 UnderlineWidth: 130 Ascent: 1638 Descent: 410 -XUID: [1021 135 1692684408 7873690] +XUID: [1021 135 1692684408 7873691] FSType: 0 OS2Version: 2 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1169210120 -ModificationTime: 1210760415 +ModificationTime: 1223550623 PfmFamily: 33 TTFWeight: 700 TTFWidth: 5 @@ -107,7 +107,7 @@ SnapStemV 9 [184 203] ExpansionFactor 4 0.06 EndPrivate TeXData: 1 0 0 327680 163840 109226 571904 -1048576 109226 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 -BeginChars: 65537 410 +BeginChars: 65537 411 StartChar: .notdef Encoding: 0 0 0 Width: 2048 @@ -8352,8 +8352,44 @@ Encoding: 160 160 409 Width: 600 Flags: W EndChar +StartChar: afii61352 +Encoding: 8470 8470 410 +Width: 1578 +Flags: W +TeX: 0 0 0 0 +HStem: 0 21G<152 337 688 910> 1105 70<1020 1210> 1210 62.5<1074.62 1146.38> 1422.5 67.5<1074.62 1146.38> +VStem: 152 185<0 1284> 725 185<310 1489> 1010 50.5<1293.68 1401.32> 1160.5 49.5<1293.68 1401.32> +Fore +1160.5 1347.5 m 0 + 1160.5 1388.9 1138.1 1422.5 1110.5 1422.5 c 0 + 1082.9 1422.5 1060.5 1388.9 1060.5 1347.5 c 0 + 1060.5 1306.1 1082.9 1272.5 1110.5 1272.5 c 0 + 1138.1 1272.5 1160.5 1306.1 1160.5 1347.5 c 0 +1010 1350 m 0 + 1010 1427.28 1054.8 1490 1110 1490 c 0 + 1165.2 1490 1210 1427.28 1210 1350 c 0 + 1210 1272.72 1165.2 1210 1110 1210 c 0 + 1054.8 1210 1010 1272.72 1010 1350 c 0 +1020 1175 m 1 + 1210 1175 l 1 + 1210 1105 l 1 + 1020 1105 l 1 + 1020 1175 l 1 +152 0 m 1 + 152 1489 l 1 + 433 1489 l 1 + 725 310 l 1 + 725 1489 l 1 + 910 1489 l 1 + 910 0 l 1 + 688 0 l 1 + 337 1284 l 1 + 337 0 l 1 + 152 0 l 1 +EndSplineSet +EndChar EndChars -BitmapFont: 11 410 9 2 1 FontForge +BitmapFont: 11 411 9 2 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--11-80-96-96-P-62-ISO10646-1" FONTBOUNDINGBOX 1 "15 11 0 -2" @@ -9209,8 +9245,10 @@ BDFChar: 408 1031 5 0 3 0 9 n,Vrc?smAM@.4-r BDFChar: 409 160 3 0 0 0 0 z +BDFChar: 410 8470 8 0 7 0 7 +c0alrr7p)O EndBitmapFont -BitmapFont: 12 410 10 2 1 FontForge +BitmapFont: 12 411 10 2 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--12-90-96-96-P-70-ISO10646-1" FONTBOUNDINGBOX 1 "16 12 0 -2" @@ -9864,8 +9902,10 @@ BDFChar: 408 1031 5 0 4 0 10 fDtDK?smAM?srI( BDFChar: 409 160 4 0 0 0 0 z +BDFChar: 410 8470 9 0 8 0 8 +c%,23li@!7quHWpg]6+0bQ%VC EndBitmapFont -BitmapFont: 13 410 10 3 1 FontForge +BitmapFont: 13 411 10 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--13-100-96-96-P-73-ISO10646-1" FONTBOUNDINGBOX 1 "15 13 0 -3" @@ -10515,8 +10555,10 @@ BDFChar: 408 1031 4 0 2 0 10 TE*n85X7S"5X=6- BDFChar: 409 160 4 0 0 0 0 z +BDFChar: 410 8470 8 0 7 0 8 +Mp'2BW484NL]@DT EndBitmapFont -BitmapFont: 15 410 12 3 1 FontForge +BitmapFont: 15 411 12 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--15-110-96-96-P-85-ISO10646-1" FONTBOUNDINGBOX 1 "19 15 0 -3" @@ -11166,8 +11208,10 @@ BDFChar: 408 1031 6 1 3 0 12 TE*n85X7S"5X7S"huE`W BDFChar: 409 160 4 0 0 0 0 z +BDFChar: 410 8470 10 0 9 0 10 +`k^`PjoG+jp&NqLh>kh$c2c,i`W,u= EndBitmapFont -BitmapFont: 16 410 13 3 1 FontForge +BitmapFont: 16 411 13 3 1 FontForge BDFStartProperties: 36 FONT 1 "-FontForge-Tahoma-Normal-R-Normal--16-120-96-96-P-93-ISO10646-1" FONTBOUNDINGBOX 1 "21 16 0 -3" @@ -11817,5 +11861,7 @@ BDFChar: 408 1031 6 0 4 0 14 Lkl%M+q5p>GWEh>lC4c2c,ic2bia EndBitmapFont EndSplineFont diff --git a/fonts/tahomabd.ttf b/fonts/tahomabd.ttf index 6651ea0a130f73cf8445cffe1e9395c26953b82d..86a62d24ba9d316413c1a42d39a5ab6105cfb398 100644 GIT binary patch delta 2687 zcwTLkdvMg%7016PyZhVsD^C*gCI<3=>;pqEp?LsFp-Ldg3_57DjSxTrQBn+5+#&=* z!b_H9L)Zub8JUqmacLJEN}&{J2aJF^{vpH07o%e|j3Z1-LiPN1??Oo3neX0vKKI;v z&+puG?^lH^Yzm6cCE zG5Z@^K4|=80LfJ|W>%^XYHk6$UtznVYHs!Xq?+GW0UhkGKU_6`LB;fvS!;Ow%W|S`z{Hajf2~{7l#UrHD-bO&s;qadZbSmqJZS~nmiiTImy{0I&j#X} zfcoa8i(SvTHXdmK=y4t|T*@Fi)mY5-Mz*t-HZ(QQ`=PTOh?)RMO)FN_xdQoD`#8Sn zBHpm1!PVSI131PL4)cWcm9B=xw{LIfh+i4tpk_6$THUm`b?|4Po&B|wL6Cptdsb(8 zJPWB>-6Ip~@gJpjNs)^#f01UslyC%!kY_TKw3FLfltG1b&jHgkiuc?wx%mG#=HHK7 z*P_WEyH=PB$-1r-Ia7JOrS(RRna(C)LpXTMBGj1GNGsx<+ za;t1j$w^JkSzBCFTwG&6eR|kOiIjEn#{YU%S*3Y-rTMWz?ac9~?dv9md|;>c-%K}ZG|*^1_IqN?U(-b_Tdvjqw&|et-bnlRP)xeZZxB3##71iNxv@`SC#7v7^_EDkY zSF!%Xx9ODkii*Y=eR@4{)av7m$~q;P7z{Eo{=}rnYm-rn(I}(X{1B=QA+uRVNzaAQ zPDU9m77I}*;d~W&H+erBCrQa|86@%rK9;Cda=pV(!AaJ6)<>+*S%a*5fK|haWu>ul zSvJ;VEPm9i)vTvkOIRyeFR|9M+F4x7)`P60tmEEBBfUJ0pAhA{)I$8cNXc?-aBJh> zI4o;F!aqsaH%Hk6fe9vxQMk7VZV9~xp|P=tMz9pY{vnu|El%**tK8S=)zGT%!61AF zg^!*U6K2U#g2k{h1gV;Dx^^S7lF* ze^WaoKDy9mVRlfkL{^?)eS*b+Z*zu#k*G&(T4MFiO{IjX zRrmd6cfcWr*9tDuSn}sl_U6F;R4!yaR8irm%eQzn>A#-E@<<_xtd)C5**(IR6E;b( zOM(7$xmbtA*cjYD^Er{*D*I;(He0aRa5!_G<-Xahfk8LKMHlvI7e4Z95HDD-U~+BP z1-m9#oLsEpBj(&0vFZ3Qt4NZj%=XcNdIRAU@ z?RQtDzg>|YoVe!r#{g0KMS1yEHJ_cf0rdX}Q1$1cypn}qtDjv1C>sPY?k*^(Dt&IM zd?VnrA^u6$8Fw0z2V|ib2EUZ5kPXjW{blJ`7#|qbQ&!pt+j7%fH)9n(LX4Ts@=GC{kgT+Eao&c0m$SVH%osUr|QS)EO>lj796dPn2pq4u)?6KFko!^TZD_6xsuKcMqP zXVQk*_4dXFybbTsgkG9peA!;V?%~7zbhsuusiwGL(`H9O=GAh5y;QX#4G_d%?v=i_ zV%IV(7mkSpk9p5ytK2&;;(2-8DUbxR3?RkbbghO3AcM)ScQo@{ziU>z3boayHN&fh zGyJ>#yZqbzP5y2ESN#ruoxjBYwBPc}Re1-X>za0%Ygj9IXGB%wTqkUWdTfVQ=*Gja z1&^QyHo!LAi~Fz*GtmW`fINhA@Ci6!J-mX4Fa_P%>KfFUbR95+iFC-F_&UCUop{uH zUsowHtFnr+-k)uoJ!nobuQxZD51RYTADJ(kubb~#Y?ek#zva5+fi=pSZmqIzv$gR z3e`WMnoJWt&RA?M7Ofs&tBriiz^k#Prj&7U8prgcA(dH)Z%{kqi6B*bm$U>Ee*`9uFbo~+A)9*42J4i;v7)D9V zEzC8f1X3FF70kKtjMW^o?HRRU^F-5TfNy0y*)9ZX%DU(oNWcS6vN-G0u`6c{jf*dH ztcQ_PWl&pqRlEzVuS6WP+-<>TU29E&gQEN1(BmrP<8haS%)7-@#mP+?;Jv>+=R zbv