winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
November 2013
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
566 discussions
Start a n
N
ew thread
André Hentschel : ntdll: Implement LdrResolveDelayLoadedAPI.
by Alexandre Julliard
12 Nov '13
12 Nov '13
Module: wine Branch: master Commit: b6b9050d58d8baaea843c633f5968be9090214e4 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b6b9050d58d8baaea843c633f…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Mon Nov 11 23:20:41 2013 +0100 ntdll: Implement LdrResolveDelayLoadedAPI. --- dlls/kernel32/kernel32.spec | 1 + dlls/ntdll/loader.c | 65 +++++++++++++++++++++++++++++++++++++++++++ dlls/ntdll/ntdll.spec | 1 + 3 files changed, 67 insertions(+), 0 deletions(-) diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 08b225f..7779a75 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1030,6 +1030,7 @@ @ stdcall RequestWakeupLatency(long) @ stdcall ResetEvent(long) @ stdcall ResetWriteWatch(ptr long) +@ stdcall ResolveDelayLoadedAPI(ptr ptr ptr ptr ptr long) ntdll.LdrResolveDelayLoadedAPI @ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error @ stdcall ResumeThread(long) @ cdecl -arch=arm,x86_64 RtlAddFunctionTable(ptr long long) ntdll.RtlAddFunctionTable diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 0455df4..a4552bb 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -36,6 +36,7 @@ #include "windef.h" #include "winnt.h" #include "winternl.h" +#include "delayloadhandler.h" #include "wine/exception.h" #include "wine/library.h" @@ -2383,6 +2384,70 @@ BOOLEAN WINAPI RtlDllShutdownInProgress(void) return process_detaching; } +/**************************************************************************** + * LdrResolveDelayLoadedAPI (NTDLL.@) + */ +void* WINAPI LdrResolveDelayLoadedAPI( void* base, const IMAGE_DELAYLOAD_DESCRIPTOR* desc, + PDELAYLOAD_FAILURE_DLL_CALLBACK dllhook, void* syshook, + IMAGE_THUNK_DATA* addr, ULONG flags ) +{ + IMAGE_THUNK_DATA *pIAT, *pINT; + DELAYLOAD_INFO delayinfo; + UNICODE_STRING mod; + const CHAR* name; + HMODULE *phmod; + NTSTATUS nts; + FARPROC fp; + DWORD id; + + FIXME("(%p, %p, %p, %p, %p, 0x%08x), partial stub\n", base, desc, dllhook, syshook, addr, flags); + + phmod = get_rva(base, desc->ModuleHandleRVA); + pIAT = get_rva(base, desc->ImportAddressTableRVA); + pINT = get_rva(base, desc->ImportNameTableRVA); + name = get_rva(base, desc->DllNameRVA); + id = addr - pIAT; + + if (!*phmod) + { + if (!RtlCreateUnicodeStringFromAsciiz(&mod, name)) + { + nts = STATUS_NO_MEMORY; + goto fail; + } + nts = LdrLoadDll(NULL, 0, &mod, phmod); + RtlFreeUnicodeString(&mod); + if (nts) goto fail; + } + + if (IMAGE_SNAP_BY_ORDINAL(pINT[id].u1.Ordinal)) + nts = LdrGetProcedureAddress(*phmod, NULL, LOWORD(pINT[id].u1.Ordinal), (void**)&fp); + else + { + const IMAGE_IMPORT_BY_NAME* iibn = get_rva(base, pINT[id].u1.AddressOfData); + ANSI_STRING fnc; + + RtlInitAnsiString(&fnc, (char*)iibn->Name); + nts = LdrGetProcedureAddress(*phmod, &fnc, 0, (void**)&fp); + } + if (!nts) + { + pIAT[id].u1.Function = (ULONG_PTR)fp; + return fp; + } + +fail: + delayinfo.Size = sizeof(delayinfo); + delayinfo.DelayloadDescriptor = desc; + delayinfo.ThunkAddress = addr; + delayinfo.TargetDllName = name; + delayinfo.TargetApiDescriptor.ImportDescribedByName = !IMAGE_SNAP_BY_ORDINAL(pINT[id].u1.Ordinal); + delayinfo.TargetApiDescriptor.Description.Ordinal = LOWORD(pINT[id].u1.Ordinal); + delayinfo.TargetModuleBase = *phmod; + delayinfo.Unused = NULL; + delayinfo.LastError = nts; + return dllhook(4, &delayinfo); +} /****************************************************************** * LdrShutdownProcess (NTDLL.@) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 860b4c6..70bf94f 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -75,6 +75,7 @@ @ stdcall LdrProcessRelocationBlock(ptr long ptr long) @ stdcall LdrQueryImageFileExecutionOptions(ptr wstr long ptr long ptr) @ stdcall LdrQueryProcessModuleInformation(ptr long ptr) +@ stdcall LdrResolveDelayLoadedAPI(ptr ptr ptr ptr ptr long) @ stub LdrSetAppCompatDllRedirectionCallback @ stub LdrSetDllManifestProber @ stdcall LdrShutdownProcess()
1
0
0
0
André Hentschel : kernel32/tests: Improved tests for the ResolveDelayLoadedAPI callback.
by Alexandre Julliard
12 Nov '13
12 Nov '13
Module: wine Branch: master Commit: c6f70ca8535cdf77e5fa9d3284d1ec9450af3f2a URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c6f70ca8535cdf77e5fa9d328…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Mon Nov 11 23:17:55 2013 +0100 kernel32/tests: Improved tests for the ResolveDelayLoadedAPI callback. --- dlls/kernel32/tests/loader.c | 54 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 52 insertions(+), 2 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 02853fd..ab99e52 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -2191,8 +2191,55 @@ if (0) static PVOID WINAPI failuredllhook(ULONG ul, DELAYLOAD_INFO* pd) { + ok(ul == 4, "expected 4, got %u\n", ul); + ok(!!pd, "no delayload info supplied\n"); + if (pd) + { + ok(pd->Size == sizeof(*pd), "got %u\n", pd->Size); + ok(!!pd->DelayloadDescriptor, "no DelayloadDescriptor supplied\n"); + if (pd->DelayloadDescriptor) + { + ok(pd->DelayloadDescriptor->Attributes.AllAttributes == 1, + "expected 1, got %u\n", pd->DelayloadDescriptor->Attributes.AllAttributes); + ok(pd->DelayloadDescriptor->DllNameRVA == 0x2000, + "expected 0x2000, got %x\n", pd->DelayloadDescriptor->DllNameRVA); + ok(pd->DelayloadDescriptor->ModuleHandleRVA == 0x201a, + "expected 0x201a, got %x\n", pd->DelayloadDescriptor->ModuleHandleRVA); + ok(pd->DelayloadDescriptor->ImportAddressTableRVA > pd->DelayloadDescriptor->ModuleHandleRVA, + "expected %x > %x\n", pd->DelayloadDescriptor->ImportAddressTableRVA, + pd->DelayloadDescriptor->ModuleHandleRVA); + ok(pd->DelayloadDescriptor->ImportNameTableRVA > pd->DelayloadDescriptor->ImportAddressTableRVA, + "expected %x > %x\n", pd->DelayloadDescriptor->ImportNameTableRVA, + pd->DelayloadDescriptor->ImportAddressTableRVA); + ok(pd->DelayloadDescriptor->BoundImportAddressTableRVA == 0, + "expected 0, got %x\n", pd->DelayloadDescriptor->BoundImportAddressTableRVA); + ok(pd->DelayloadDescriptor->UnloadInformationTableRVA == 0, + "expected 0, got %x\n", pd->DelayloadDescriptor->UnloadInformationTableRVA); + ok(pd->DelayloadDescriptor->TimeDateStamp == 0, + "expected 0, got %x\n", pd->DelayloadDescriptor->TimeDateStamp); + } + + ok(!!pd->ThunkAddress, "no ThunkAddress supplied\n"); + if (pd->ThunkAddress) + ok(pd->ThunkAddress->u1.Ordinal == 0, "expected 0, got %x\n", (UINT)pd->ThunkAddress->u1.Ordinal); + + ok(!!pd->TargetDllName, "no TargetDllName supplied\n"); + if (pd->TargetDllName) + ok(!strcmp(pd->TargetDllName, "secur32.dll"), + "expected \"secur32.dll\", got \"%s\"\n", pd->TargetDllName); + + ok(pd->TargetApiDescriptor.ImportDescribedByName == 0, + "expected 0, got %x\n", pd->TargetApiDescriptor.ImportDescribedByName); + ok(pd->TargetApiDescriptor.Description.Ordinal == 0 || + pd->TargetApiDescriptor.Description.Ordinal == 999, + "expected 0, got %x\n", pd->TargetApiDescriptor.Description.Ordinal); + + ok(!!pd->TargetModuleBase, "no TargetModuleBase supplied\n"); + ok(pd->Unused == NULL, "expected NULL, got %p\n", pd->Unused); + ok(pd->LastError, "no LastError supplied\n"); + } cb_count++; - return NULL; + return (void*)0xdeadbeef; } static void test_ResolveDelayLoadedAPI(void) @@ -2228,6 +2275,9 @@ static void test_ResolveDelayLoadedAPI(void) { FALSE, IMAGE_ORDINAL_FLAG | 0, FALSE }, + { + FALSE, IMAGE_ORDINAL_FLAG | 999, FALSE + }, }; if (!pResolveDelayLoadedAPI) @@ -2433,7 +2483,7 @@ static void test_ResolveDelayLoadedAPI(void) } else { - ok(ret == NULL, "Test %u: ResolveDelayLoadedAPI succeeded\n", i); + ok(ret == (void*)0xdeadbeef, "Test %u: ResolveDelayLoadedAPI succeeded with %p\n", i, ret); ok(cb_count, "Test %u: Wrong callback count: %d\n", i, cb_count); } }
1
0
0
0
André Hentschel : include: Add more vfw error codes.
by Alexandre Julliard
12 Nov '13
12 Nov '13
Module: wine Branch: master Commit: e218462fd996a27aef6c1ac7fde03f2c33d44752 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e218462fd996a27aef6c1ac7f…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Mon Nov 11 22:23:25 2013 +0100 include: Add more vfw error codes. --- include/vfwmsgs.h | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/include/vfwmsgs.h b/include/vfwmsgs.h index 660ee40..be5ff84 100644 --- a/include/vfwmsgs.h +++ b/include/vfwmsgs.h @@ -155,8 +155,18 @@ #define VFW_E_VMR_NOT_IN_MIXER_MODE ((HRESULT)0x80040296) #define VFW_E_VMR_NO_AP_SUPPLIED ((HRESULT)0x80040297) #define VFW_E_VMR_NO_DEINTERLACE_HW ((HRESULT)0x80040298) +#define VFW_E_VMR_NO_PROCAMP_HW ((HRESULT)0x80040299) #define VFW_E_DVD_VMR9_INCOMPATIBLEDEC ((HRESULT)0x8004029A) #define VFW_E_NO_COPP_HW ((HRESULT)0x8004029B) +#define VFW_E_DVD_NONBLOCKING ((HRESULT)0x8004029C) +#define VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH ((HRESULT)0x8004029D) +#define VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH ((HRESULT)0x8004029E) +#define VFW_E_DVD_RESOLUTION_ERROR ((HRESULT)0x8004029F) +#define VFW_E_CODECAPI_LINEAR_RANGE ((HRESULT)0x80040310) +#define VFW_E_CODECAPI_ENUMERATED ((HRESULT)0x80040311) +#define VFW_E_CODECAPI_NO_DEFAULT ((HRESULT)0x80040313) +#define VFW_E_CODECAPI_NO_CURRENT_VALUE ((HRESULT)0x80040314) +#define VFW_E_DVD_CHAPTER_DOES_NOT_EXIST ((HRESULT)0x80040315) #define VFW_E_BAD_KEY ((HRESULT)0x800403F2) #ifndef E_PROP_ID_UNSUPPORTED
1
0
0
0
Andrey Gusev : Add uk news folder
by Jeremy Newman
12 Nov '13
12 Nov '13
Module: website Branch: master Commit: 4b071ff3965e49bc30f92b4a6943416aba0749bf URL:
http://source.winehq.org/git/website.git/?a=commit;h=4b071ff3965e49bc30f92b…
Author: Andrey Gusev <andrey.goosev(a)gmail.com> Date: Mon Nov 11 21:21:59 2013 +0200 Add uk news folder --- news/uk/2013110801.xml | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) diff --git a/news/uk/2013110801.xml b/news/uk/2013110801.xml new file mode 100644 index 0000000..a775ab9 --- /dev/null +++ b/news/uk/2013110801.xml @@ -0,0 +1,15 @@ +<news> +<date>8 листопада, 2013</date> +<title>Випущено Wine 1.7.6</title> +<body> +<p> Розробницький реліз Wine 1.7.6 наразі доступний.</p> +<p> <a href="{$root}/announce/1.7.6">Що нового</a> в цьому релізі: +<ul> + <li>Переписано алгоритм BiDi для повної підтримки Unicode 6.3.</li> + <li>Підтримка Video Mixing Renderer 7-ої версії.</li> + <li>Покращена обробка вікна в драйвері Mac.</li> + <li>Виправлення різних помилок.</li> +</ul> +<p>Вихідний код <a href="
http://prdownloads.sourceforge.net/wine/wine-1.7.6.tar.bz2
">вже доступний</a>. +Готові пакунки в процесі створення і в найближчий час будуть доступні у відповідних <a href="{$root}/download">місцях</a>. +</p></body></news>
1
0
0
0
Andrey Gusev : Add uk templates folder
by Jeremy Newman
12 Nov '13
12 Nov '13
Module: website Branch: master Commit: 35ba3e0399655763f8c4c2f207d808331cb6d485 URL:
http://source.winehq.org/git/website.git/?a=commit;h=35ba3e0399655763f8c4c2…
Author: Andrey Gusev <andrey.goosev(a)gmail.com> Date: Mon Nov 11 21:20:54 2013 +0200 Add uk templates folder --- templates/uk/.gitignore | 2 + templates/uk/announce.template | 7 + templates/uk/download.template | 190 ++++++++++++++++++++ templates/uk/download/debian.template | 22 +++ templates/uk/download/ubuntu.template | 57 ++++++ templates/uk/global/404.template | 16 ++ templates/uk/global/fatal_error.template | 25 +++ templates/uk/global/google_analytics.template | 10 + templates/uk/global/lang_row.template | 3 + templates/uk/global/themes/winehq/content.template | 74 ++++++++ .../uk/global/themes/winehq/content_nobox.template | 76 ++++++++ .../uk/global/themes/winehq/content_print.template | 18 ++ templates/uk/home.template | 90 +++++++++ templates/uk/interview.template | 8 + templates/uk/lang.template | 12 ++ templates/uk/news.template | 16 ++ templates/uk/search.template | 26 +++ 17 files changed, 652 insertions(+), 0 deletions(-) Diff:
http://source.winehq.org/git/website.git/?a=commitdiff;h=35ba3e0399655763f8…
1
0
0
0
Nikolay Sivov : ole32: Added activation context support for OleRegGetMiscStatus().
by Alexandre Julliard
11 Nov '13
11 Nov '13
Module: wine Branch: master Commit: d0bf7f4eafb8295e3ad773e791cd16e914a51414 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=d0bf7f4eafb8295e3ad773e79…
Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Mon Nov 11 22:02:58 2013 +0400 ole32: Added activation context support for OleRegGetMiscStatus(). --- dlls/ole32/compobj.c | 74 ++++++++++++++++++++++++++++++++++++++++++ dlls/ole32/compobj_private.h | 2 + dlls/ole32/ole2.c | 2 + dlls/ole32/tests/compobj.c | 5 +-- 4 files changed, 79 insertions(+), 4 deletions(-) diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c index fd7cc48..d3f4804 100644 --- a/dlls/ole32/compobj.c +++ b/dlls/ole32/compobj.c @@ -99,6 +99,15 @@ enum comclass_threadingmodel ThreadingModel_Neutral = 5 }; +enum comclass_miscfields +{ + MiscStatus = 1, + MiscStatusIcon = 2, + MiscStatusContent = 4, + MiscStatusThumbnail = 8, + MiscStatusDocPrint = 16 +}; + struct comclassredirect_data { ULONG size; @@ -218,6 +227,71 @@ static CRITICAL_SECTION_DEBUG class_cs_debug = }; static CRITICAL_SECTION csRegisteredClassList = { &class_cs_debug, -1, 0, 0, 0, 0 }; +static inline enum comclass_miscfields dvaspect_to_miscfields(DWORD aspect) +{ + switch (aspect) + { + case DVASPECT_CONTENT: + return MiscStatusContent; + case DVASPECT_THUMBNAIL: + return MiscStatusThumbnail; + case DVASPECT_ICON: + return MiscStatusIcon; + case DVASPECT_DOCPRINT: + return MiscStatusDocPrint; + default: + return MiscStatus; + }; +} + +BOOL actctx_get_miscstatus(const CLSID *clsid, DWORD aspect, DWORD *status) +{ + ACTCTX_SECTION_KEYED_DATA data; + + data.cbSize = sizeof(data); + if (FindActCtxSectionGuid(0, NULL, ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, + clsid, &data)) + { + struct comclassredirect_data *comclass = (struct comclassredirect_data*)data.lpData; + enum comclass_miscfields misc = dvaspect_to_miscfields(aspect); + + if (!(comclass->miscmask & misc)) + { + if (!(comclass->miscmask & MiscStatus)) + { + *status = 0; + return TRUE; + } + misc = MiscStatus; + } + + switch (misc) + { + case MiscStatus: + *status = comclass->miscstatus; + break; + case MiscStatusIcon: + *status = comclass->miscstatusicon; + break; + case MiscStatusContent: + *status = comclass->miscstatuscontent; + break; + case MiscStatusThumbnail: + *status = comclass->miscstatusthumbnail; + break; + case MiscStatusDocPrint: + *status = comclass->miscstatusdocprint; + break; + default: + ; + }; + + return TRUE; + } + else + return FALSE; +} + /* wrapper for NtCreateKey that creates the key recursively if necessary */ static NTSTATUS create_key( HKEY *retkey, ACCESS_MASK access, OBJECT_ATTRIBUTES *attr ) { diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h index 0f4519b..933b71c 100644 --- a/dlls/ole32/compobj_private.h +++ b/dlls/ole32/compobj_private.h @@ -315,6 +315,8 @@ extern UINT ole_private_data_clipboard_format DECLSPEC_HIDDEN; extern LSTATUS create_classes_key(HKEY, const WCHAR *, REGSAM, HKEY *) DECLSPEC_HIDDEN; extern LSTATUS open_classes_key(HKEY, const WCHAR *, REGSAM, HKEY *) DECLSPEC_HIDDEN; +extern BOOL actctx_get_miscstatus(const CLSID*, DWORD, DWORD*) DECLSPEC_HIDDEN; + static inline void *heap_alloc(size_t len) { return HeapAlloc(GetProcessHeap(), 0, len); diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index 0994a5f..5e789f2 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -895,6 +895,8 @@ HRESULT WINAPI OleRegGetMiscStatus( *pdwStatus = 0; + if (actctx_get_miscstatus(clsid, dwAspect, pdwStatus)) return S_OK; + /* * Open the class id Key */ diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 3deedf3..8c4d6a8 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -1889,21 +1889,18 @@ static void test_OleRegGetMiscStatus(void) { status = 0; hr = OleRegGetMiscStatus(&CLSID_Testclass, DVASPECT_ICON, &status); -todo_wine { ok(hr == S_OK, "got 0x%08x\n", hr); ok(status == OLEMISC_RECOMPOSEONRESIZE, "got 0x%08x\n", status); -} + /* context data takes precedence over registration info */ status = 0; hr = OleRegGetMiscStatus(&CLSID_StdFont, DVASPECT_ICON, &status); ok(hr == S_OK, "got 0x%08x\n", hr); -todo_wine ok(status == OLEMISC_RECOMPOSEONRESIZE, "got 0x%08x\n", status); /* there's no such attribute in context */ status = -1; hr = OleRegGetMiscStatus(&CLSID_Testclass, DVASPECT_DOCPRINT, &status); -todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); ok(status == 0, "got 0x%08x\n", status);
1
0
0
0
Alexandre Julliard : comctl32/tests: Fix a test that fails on Windows.
by Alexandre Julliard
11 Nov '13
11 Nov '13
Module: wine Branch: master Commit: 4242c437a26326a033e3a99cc1f211f6a8c4c945 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4242c437a26326a033e3a99cc…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Mon Nov 11 20:48:51 2013 +0100 comctl32/tests: Fix a test that fails on Windows. --- dlls/comctl32/tests/tooltips.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c index c894dd1..d5f97b3 100644 --- a/dlls/comctl32/tests/tooltips.c +++ b/dlls/comctl32/tests/tooltips.c @@ -420,7 +420,7 @@ static void test_gettext(void) toolinfoW.lParam = 0xdeadbeef; GetClientRect(hwnd, &toolinfoW.rect); r = SendMessageW(hwnd, TTM_ADDTOOLW, 0, (LPARAM)&toolinfoW); - ok(r, "Adding the tool to the tooltip failed\n"); + todo_wine ok(!r, "Adding the tool to the tooltip failed\n"); if (0) /* crashes on NT4 */ {
1
0
0
0
Michael Müller : quartz: Improve stubs for AMCertifiedOutputProtection.
by Alexandre Julliard
11 Nov '13
11 Nov '13
Module: wine Branch: master Commit: 1b5026424b767d699c8c9f1ac743ddb357d16ae3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1b5026424b767d699c8c9f1ac…
Author: Michael Müller <michael(a)fds-team.de> Date: Sun Nov 10 20:44:10 2013 +0100 quartz: Improve stubs for AMCertifiedOutputProtection. --- dlls/quartz/vmr9.c | 8 ++++---- include/vfwmsgs.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index cd1e139..dc6b4fc 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -1120,7 +1120,7 @@ static HRESULT WINAPI AMCertifiedOutputProtection_KeyExchange(IAMCertifiedOutput struct quartz_vmr *This = impl_from_IAMCertifiedOutputProtection(iface); FIXME("(%p/%p)->(%p, %p, %p) stub\n", iface, This, pRandom, VarLenCertGH, pdwLengthCertGH); - return E_NOTIMPL; + return VFW_E_NO_COPP_HW; } static HRESULT WINAPI AMCertifiedOutputProtection_SessionSequenceStart(IAMCertifiedOutputProtection *iface, @@ -1129,7 +1129,7 @@ static HRESULT WINAPI AMCertifiedOutputProtection_SessionSequenceStart(IAMCertif struct quartz_vmr *This = impl_from_IAMCertifiedOutputProtection(iface); FIXME("(%p/%p)->(%p) stub\n", iface, This, pSig); - return E_NOTIMPL; + return VFW_E_NO_COPP_HW; } static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionCommand(IAMCertifiedOutputProtection *iface, @@ -1138,7 +1138,7 @@ static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionCommand(IAMCertified struct quartz_vmr *This = impl_from_IAMCertifiedOutputProtection(iface); FIXME("(%p/%p)->(%p) stub\n", iface, This, cmd); - return E_NOTIMPL; + return VFW_E_NO_COPP_HW; } static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionStatus(IAMCertifiedOutputProtection *iface, @@ -1148,7 +1148,7 @@ static HRESULT WINAPI AMCertifiedOutputProtection_ProtectionStatus(IAMCertifiedO struct quartz_vmr *This = impl_from_IAMCertifiedOutputProtection(iface); FIXME("(%p/%p)->(%p, %p) stub\n", iface, This, pStatusInput, pStatusOutput); - return E_NOTIMPL; + return VFW_E_NO_COPP_HW; } static const IAMCertifiedOutputProtectionVtbl IAMCertifiedOutputProtection_Vtbl = diff --git a/include/vfwmsgs.h b/include/vfwmsgs.h index 16b25c3..660ee40 100644 --- a/include/vfwmsgs.h +++ b/include/vfwmsgs.h @@ -156,6 +156,7 @@ #define VFW_E_VMR_NO_AP_SUPPLIED ((HRESULT)0x80040297) #define VFW_E_VMR_NO_DEINTERLACE_HW ((HRESULT)0x80040298) #define VFW_E_DVD_VMR9_INCOMPATIBLEDEC ((HRESULT)0x8004029A) +#define VFW_E_NO_COPP_HW ((HRESULT)0x8004029B) #define VFW_E_BAD_KEY ((HRESULT)0x800403F2) #ifndef E_PROP_ID_UNSUPPORTED
1
0
0
0
Sebastian Lackner : winex11: Implement additional XEMBED events.
by Alexandre Julliard
11 Nov '13
11 Nov '13
Module: wine Branch: master Commit: df6dc091e6524581549d65c04c61f5ccd22dfe48 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=df6dc091e6524581549d65c04…
Author: Sebastian Lackner <sebastian(a)fds-team.de> Date: Sat Oct 26 18:34:32 2013 +0200 winex11: Implement additional XEMBED events. --- dlls/winex11.drv/event.c | 145 ++++++++++++++++++++++++++++++--------------- dlls/winex11.drv/window.c | 2 +- 2 files changed, 98 insertions(+), 49 deletions(-) diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 4218949..64188bc 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -748,34 +748,22 @@ static void X11DRV_FocusIn( HWND hwnd, XEvent *xev ) else SetForegroundWindow( hwnd ); } - /********************************************************************** - * X11DRV_FocusOut - * - * Note: only top-level windows get FocusOut events. + * focus_out */ -static void X11DRV_FocusOut( HWND hwnd, XEvent *xev ) -{ - XFocusChangeEvent *event = &xev->xfocus; + static void focus_out( Display *display , HWND hwnd ) + { HWND hwnd_tmp; Window focus_win; int revert; XIC xic; - TRACE( "win %p xwin %lx detail=%s\n", hwnd, event->window, focus_details[event->detail] ); - - if (event->detail == NotifyPointer) - { - if (!hwnd && event->window == x11drv_thread_data()->clip_window) reset_clipping_window(); - return; - } - if (!hwnd) return; if (ximInComposeMode) return; x11drv_thread_data()->last_focus = hwnd; if ((xic = X11DRV_get_ic( hwnd ))) XUnsetICFocus( xic ); - if (root_window != DefaultRootWindow(event->display)) + if (root_window != DefaultRootWindow(display)) { if (hwnd == GetDesktopWindow()) reset_clipping_window(); return; @@ -786,10 +774,10 @@ static void X11DRV_FocusOut( HWND hwnd, XEvent *xev ) /* don't reset the foreground window, if the window which is getting the focus is a Wine window */ - XGetInputFocus( event->display, &focus_win, &revert ); + XGetInputFocus( display, &focus_win, &revert ); if (focus_win) { - if (XFindContext( event->display, focus_win, winContext, (char **)&hwnd_tmp ) != 0) + if (XFindContext( display, focus_win, winContext, (char **)&hwnd_tmp ) != 0) focus_win = 0; } @@ -805,6 +793,26 @@ static void X11DRV_FocusOut( HWND hwnd, XEvent *xev ) SetForegroundWindow( GetDesktopWindow() ); } } + } + +/********************************************************************** + * X11DRV_FocusOut + * + * Note: only top-level windows get FocusOut events. + */ +static void X11DRV_FocusOut( HWND hwnd, XEvent *xev ) +{ + XFocusChangeEvent *event = &xev->xfocus; + + TRACE( "win %p xwin %lx detail=%s\n", hwnd, event->window, focus_details[event->detail] ); + + if (event->detail == NotifyPointer) + { + if (!hwnd && event->window == x11drv_thread_data()->clip_window) reset_clipping_window(); + return; + } + if (!hwnd) return; + focus_out( event->display, hwnd ); } @@ -940,6 +948,37 @@ static BOOL is_net_wm_state_maximized( Display *display, struct x11drv_win_data return (ret == 2); } +/*********************************************************************** + * reparent_notify + */ +static void reparent_notify( Display *display, HWND hwnd, Window xparent, int x, int y ) +{ + HWND parent, old_parent; + DWORD style; + + style = GetWindowLongW( hwnd, GWL_STYLE ); + if (xparent == root_window) + { + parent = GetDesktopWindow(); + style = (style & ~WS_CHILD) | WS_POPUP; + } + else + { + if (!(parent = create_foreign_window( display, xparent ))) return; + style = (style & ~WS_POPUP) | WS_CHILD; + } + + ShowWindow( hwnd, SW_HIDE ); + old_parent = SetParent( hwnd, parent ); + SetWindowLongW( hwnd, GWL_STYLE, style ); + SetWindowPos( hwnd, HWND_TOP, x, y, 0, 0, + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOCOPYBITS | + ((style & WS_VISIBLE) ? SWP_SHOWWINDOW : 0) ); + + /* make old parent destroy itself if it no longer has children */ + if (old_parent != GetDesktopWindow()) PostMessageW( old_parent, WM_CLOSE, 0, 0 ); +} + /*********************************************************************** * X11DRV_ReparentNotify @@ -948,8 +987,6 @@ static void X11DRV_ReparentNotify( HWND hwnd, XEvent *xev ) { XReparentEvent *event = &xev->xreparent; struct x11drv_win_data *data; - HWND parent, old_parent; - DWORD style; if (!(data = get_win_data( hwnd ))) return; @@ -975,27 +1012,7 @@ static void X11DRV_ReparentNotify( HWND hwnd, XEvent *xev ) TRACE( "%p/%lx reparented to %lx\n", hwnd, data->whole_window, event->parent ); release_win_data( data ); - style = GetWindowLongW( hwnd, GWL_STYLE ); - if (event->parent == root_window) - { - parent = GetDesktopWindow(); - style = (style & ~WS_CHILD) | WS_POPUP; - } - else - { - if (!(parent = create_foreign_window( event->display, event->parent ))) return; - style = (style & ~WS_POPUP) | WS_CHILD; - } - - ShowWindow( hwnd, SW_HIDE ); - old_parent = SetParent( hwnd, parent ); - SetWindowLongW( hwnd, GWL_STYLE, style ); - SetWindowPos( hwnd, HWND_TOP, event->x, event->y, 0, 0, - SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOCOPYBITS | - ((style & WS_VISIBLE) ? SWP_SHOWWINDOW : 0) ); - - /* make old parent destroy itself if it no longer has children */ - if (old_parent != GetDesktopWindow()) PostMessageW( old_parent, WM_CLOSE, 0, 0 ); + reparent_notify( event->display, hwnd, event->parent, event->x, event->y ); } @@ -1594,22 +1611,54 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event ) */ static void handle_xembed_protocol( HWND hwnd, XClientMessageEvent *event ) { - struct x11drv_win_data *data = get_win_data( hwnd ); - - if (!data) return; - switch (event->data.l[1]) { case XEMBED_EMBEDDED_NOTIFY: - TRACE( "win %p/%lx XEMBED_EMBEDDED_NOTIFY owner %lx\n", hwnd, event->window, event->data.l[3] ); - data->embedder = event->data.l[3]; + { + struct x11drv_win_data *data = get_win_data( hwnd ); + if (!data) break; + + TRACE( "win %p/%lx XEMBED_EMBEDDED_NOTIFY owner %lx\n", hwnd, event->window, event->data.l[3] ); + data->embedder = event->data.l[3]; + + /* window has been marked as embedded before (e.g. systray) */ + if (data->embedded) + { + release_win_data( data ); + break; + } + + make_window_embedded( data ); + release_win_data( data ); + reparent_notify( event->display, hwnd, event->data.l[3], 0, 0 ); + } + break; + + case XEMBED_WINDOW_DEACTIVATE: + TRACE( "win %p/%lx XEMBED_WINDOW_DEACTIVATE message\n", hwnd, event->window ); + focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) ); + break; + + case XEMBED_FOCUS_OUT: + TRACE( "win %p/%lx XEMBED_FOCUS_OUT message\n", hwnd, event->window ); + focus_out( event->display, GetAncestor( hwnd, GA_ROOT ) ); break; + + case XEMBED_MODALITY_ON: + TRACE( "win %p/%lx XEMBED_MODALITY_ON message\n", hwnd, event->window ); + EnableWindow( hwnd, FALSE ); + break; + + case XEMBED_MODALITY_OFF: + TRACE( "win %p/%lx XEMBED_MODALITY_OFF message\n", hwnd, event->window ); + EnableWindow( hwnd, TRUE ); + break; + default: TRACE( "win %p/%lx XEMBED message %lu(%lu)\n", hwnd, event->window, event->data.l[1], event->data.l[2] ); break; } - release_win_data( data ); } diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index a76e80d..e78f226 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -1137,7 +1137,7 @@ void make_window_embedded( struct x11drv_win_data *data ) data->embedded = TRUE; data->managed = TRUE; sync_window_style( data ); - set_xembed_flags( data, data->mapped ? XEMBED_MAPPED : 0 ); + set_xembed_flags( data, (data->mapped || data->embedder) ? XEMBED_MAPPED : 0 ); }
1
0
0
0
Jacek Caban : mshtml: Added IHTMLBodyElement:: scroll attribute implementation.
by Alexandre Julliard
11 Nov '13
11 Nov '13
Module: wine Branch: master Commit: ea24a5b1f42bf7cc90ea042370eb1628dec35b98 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ea24a5b1f42bf7cc90ea04237…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Mon Nov 11 14:36:43 2013 +0100 mshtml: Added IHTMLBodyElement::scroll attribute implementation. --- dlls/mshtml/htmlbody.c | 57 +++++++++++++++++++++++++++++++++++++++++++--- dlls/mshtml/htmlstyle.c | 47 +++++++++++++++++++++++++++++++++++--- dlls/mshtml/htmlstyle.h | 3 ++ dlls/mshtml/tests/dom.c | 30 ++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 8 deletions(-) diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index bb5ee34..2b98cf4 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -30,6 +30,7 @@ #include "mshtml_private.h" #include "htmlevent.h" +#include "htmlstyle.h" WINE_DEFAULT_DEBUG_CHANNEL(mshtml); @@ -602,18 +603,66 @@ static HRESULT WINAPI HTMLBodyElement_get_onunload(IHTMLBodyElement *iface, VARI return E_NOTIMPL; } +static const WCHAR autoW[] = {'a','u','t','o',0}; +static const WCHAR hiddenW[] = {'h','i','d','d','e','n',0}; +static const WCHAR scrollW[] = {'s','c','r','o','l','l',0}; +static const WCHAR visibleW[] = {'v','i','s','i','b','l','e',0}; +static const WCHAR yesW[] = {'y','e','s',0}; +static const WCHAR noW[] = {'n','o',0}; + static HRESULT WINAPI HTMLBodyElement_put_scroll(IHTMLBodyElement *iface, BSTR v) { HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(v)); - return E_NOTIMPL; + static const WCHAR *val; + + TRACE("(%p)->(%s)\n", This, debugstr_w(v)); + + /* Emulate with CSS visibility attribute */ + if(!strcmpW(v, yesW)) { + val = scrollW; + }else if(!strcmpW(v, autoW)) { + val = visibleW; + }else if(!strcmpW(v, noW)) { + val = hiddenW; + }else { + WARN("Invalid argument %s\n", debugstr_w(v)); + return E_INVALIDARG; + } + + return set_elem_style(&This->textcont.element, STYLEID_OVERFLOW, val); } static HRESULT WINAPI HTMLBodyElement_get_scroll(IHTMLBodyElement *iface, BSTR *p) { HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + const WCHAR *ret; + BSTR overflow; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, p); + + /* Emulate with CSS visibility attribute */ + hres = get_elem_style(&This->textcont.element, STYLEID_OVERFLOW, &overflow); + if(FAILED(hres)) + return hres; + + if(!overflow || !*overflow) { + *p = NULL; + return S_OK; + }else if(!strcmpW(overflow, visibleW) || !strcmpW(overflow, autoW)) { + ret = autoW; + }else if(!strcmpW(overflow, scrollW)) { + ret = yesW; + }else if(!strcmpW(overflow, hiddenW)) { + ret = noW; + }else { + TRACE("Defaulting %s to NULL", debugstr_w(overflow)); + *p = NULL; + return S_OK; + } + + *p = SysAllocString(ret); + return *p ? S_OK : E_OUTOFMEMORY; } static HRESULT WINAPI HTMLBodyElement_put_onselect(IHTMLBodyElement *iface, VARIANT v) diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c index 5f4fc67..c85e4db 100644 --- a/dlls/mshtml/htmlstyle.c +++ b/dlls/mshtml/htmlstyle.c @@ -3115,11 +3115,9 @@ static dispex_static_data_t HTMLStyle_dispex = { HTMLStyle_iface_tids }; -HRESULT HTMLStyle_Create(HTMLElement *elem, HTMLStyle **ret) +static HRESULT get_style_from_elem(HTMLElement *elem, nsIDOMCSSStyleDeclaration **ret) { nsIDOMElementCSSInlineStyle *nselemstyle; - nsIDOMCSSStyleDeclaration *nsstyle; - HTMLStyle *style; nsresult nsres; if(!elem->nselem) { @@ -3131,13 +3129,26 @@ HRESULT HTMLStyle_Create(HTMLElement *elem, HTMLStyle **ret) (void**)&nselemstyle); assert(nsres == NS_OK); - nsres = nsIDOMElementCSSInlineStyle_GetStyle(nselemstyle, &nsstyle); + nsres = nsIDOMElementCSSInlineStyle_GetStyle(nselemstyle, ret); nsIDOMElementCSSInlineStyle_Release(nselemstyle); if(NS_FAILED(nsres)) { ERR("GetStyle failed: %08x\n", nsres); return E_FAIL; } + return S_OK; +} + +HRESULT HTMLStyle_Create(HTMLElement *elem, HTMLStyle **ret) +{ + nsIDOMCSSStyleDeclaration *nsstyle; + HTMLStyle *style; + HRESULT hres; + + hres = get_style_from_elem(elem, &nsstyle); + if(FAILED(hres)) + return hres; + style = heap_alloc_zero(sizeof(HTMLStyle)); if(!style) { nsIDOMCSSStyleDeclaration_Release(nsstyle); @@ -3158,3 +3169,31 @@ HRESULT HTMLStyle_Create(HTMLElement *elem, HTMLStyle **ret) *ret = style; return S_OK; } + +HRESULT get_elem_style(HTMLElement *elem, styleid_t styleid, BSTR *ret) +{ + nsIDOMCSSStyleDeclaration *style; + HRESULT hres; + + hres = get_style_from_elem(elem, &style); + if(FAILED(hres)) + return hres; + + hres = get_nsstyle_attr(style, styleid, ret, 0); + nsIDOMCSSStyleDeclaration_Release(style); + return hres; +} + +HRESULT set_elem_style(HTMLElement *elem, styleid_t styleid, const WCHAR *val) +{ + nsIDOMCSSStyleDeclaration *style; + HRESULT hres; + + hres = get_style_from_elem(elem, &style); + if(FAILED(hres)) + return hres; + + hres = set_nsstyle_attr(style, styleid, val, 0); + nsIDOMCSSStyleDeclaration_Release(style); + return hres; +} diff --git a/dlls/mshtml/htmlstyle.h b/dlls/mshtml/htmlstyle.h index 382a226..9294015 100644 --- a/dlls/mshtml/htmlstyle.h +++ b/dlls/mshtml/htmlstyle.h @@ -120,6 +120,9 @@ HRESULT set_nsstyle_attr(nsIDOMCSSStyleDeclaration*,styleid_t,LPCWSTR,DWORD) DEC HRESULT set_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, VARIANT *value, DWORD flags) DECLSPEC_HIDDEN; HRESULT get_nsstyle_attr_var(nsIDOMCSSStyleDeclaration *nsstyle, styleid_t sid, VARIANT *p, DWORD flags) DECLSPEC_HIDDEN; +HRESULT get_elem_style(HTMLElement*,styleid_t,BSTR*) DECLSPEC_HIDDEN; +HRESULT set_elem_style(HTMLElement*,styleid_t,const WCHAR*) DECLSPEC_HIDDEN; + #define ATTR_FIX_PX 0x0001 #define ATTR_FIX_URL 0x0002 #define ATTR_STR_TO_INT 0x0004 diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index f1155d8..e43c754 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -5171,6 +5171,31 @@ static void test_default_body(IHTMLBodyElement *body) VariantClear(&v); } +#define test_body_scroll(a,b) _test_body_scroll(__LINE__,a,b) +static void _test_body_scroll(unsigned line, IHTMLBodyElement *body, const char *ex) +{ + BSTR str; + HRESULT hres; + + hres = IHTMLBodyElement_get_scroll(body, &str); + ok_(__FILE__,line)(hres == S_OK, "get_scroll failed: %08x\n", hres); + ok_(__FILE__,line)(ex ? !strcmp_wa(str, ex) : !str, "scroll = %s\n", wine_dbgstr_w(str)); + SysFreeString(str); +} + +#define set_body_scroll(a,b) _set_body_scroll(__LINE__,a,b) +static void _set_body_scroll(unsigned line, IHTMLBodyElement *body, const char *val) +{ + BSTR str = a2bstr(val); + HRESULT hres; + + hres = IHTMLBodyElement_put_scroll(body, str); + ok_(__FILE__,line)(hres == S_OK, "put_scroll failed: %08x\n", hres); + SysFreeString(str); + + _test_body_scroll(line, body, val); +} + static void test_body_funs(IHTMLBodyElement *body) { VARIANT vbg, vDefaultbg; @@ -5197,6 +5222,11 @@ static void test_body_funs(IHTMLBodyElement *body) hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg); ok(hres == S_OK, "put_bgColor failed: %08x\n", hres); VariantClear(&vDefaultbg); + + test_body_scroll(body, NULL); + set_body_scroll(body, "yes"); + set_body_scroll(body, "no"); + set_body_scroll(body, "auto"); } static void test_history(IHTMLWindow2 *window)
1
0
0
0
← Newer
1
...
35
36
37
38
39
40
41
...
57
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Results per page:
10
25
50
100
200