diff --git a/patches/dwmapi-DwmGetTransportAttributes/0001-dwmapi-return-DWM_E_COMPOSITIONDISABLED-instead-of-ENOTIMPL-in-DwmGetTransportAttributes.patch b/patches/dwmapi-DwmGetTransportAttributes/0001-dwmapi-return-DWM_E_COMPOSITIONDISABLED-instead-of-ENOTIMPL-in-DwmGetTransportAttributes.patch new file mode 100644 index 00000000..14a9f8ea --- /dev/null +++ b/patches/dwmapi-DwmGetTransportAttributes/0001-dwmapi-return-DWM_E_COMPOSITIONDISABLED-instead-of-ENOTIMPL-in-DwmGetTransportAttributes.patch @@ -0,0 +1,43 @@ +From: Louis Lenders <xerox.xerox2000x@gmail.com> +Subject: [PATCH 1/2] dwmapi: return DWM_E_COMPOSITIONDISABLED instead of E_NOTIMPL in DwmGetTransportAttributes +Message-Id: <20181205121826.2124-1-xerox.xerox2000x@gmail.com> +Date: Wed, 5 Dec 2018 13:18:25 +0100 + +This versioh is with tests; + +Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com> +--- + dlls/dwmapi/dwmapi_main.c | 2 +- + include/winerror.h | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c +index c1ee067122..eb06d15507 100644 +--- a/dlls/dwmapi/dwmapi_main.c ++++ b/dlls/dwmapi/dwmapi_main.c +@@ -146,7 +146,7 @@ HRESULT WINAPI DwmGetTransportAttributes(BOOL *pfIsRemoting, BOOL *pfIsConnected + { + FIXME("(%p, %p, %p) stub\n", pfIsRemoting, pfIsConnected, pDwGeneration); + +- return E_NOTIMPL; ++ return DWM_E_COMPOSITIONDISABLED; + } + + /********************************************************************** +diff --git a/include/winerror.h b/include/winerror.h +index d78c91e84e..a97b405c34 100644 +--- a/include/winerror.h ++++ b/include/winerror.h +@@ -3090,6 +3090,8 @@ static inline HRESULT HRESULT_FROM_WIN32(unsigned int x) + #define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY _HRESULT_TYPEDEF_(0x80072f8e) + #define WININET_E_DECODING_FAILED _HRESULT_TYPEDEF_(0x80072f8f) + ++#define DWM_E_COMPOSITIONDISABLED _HRESULT_TYPEDEF_(0x80263001) ++ + #define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS _HRESULT_TYPEDEF_(0x887c0001) + #define D3D11_ERROR_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0x887c0002) + #define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS _HRESULT_TYPEDEF_(0x887c0003) + +-- +2.17.1 + diff --git a/patches/dwmapi-DwmGetTransportAttributes/0002-dwmapi-add-initial-tests.patch b/patches/dwmapi-DwmGetTransportAttributes/0002-dwmapi-add-initial-tests.patch new file mode 100644 index 00000000..fe2dcbee --- /dev/null +++ b/patches/dwmapi-DwmGetTransportAttributes/0002-dwmapi-add-initial-tests.patch @@ -0,0 +1,185 @@ +From: Louis Lenders <xerox.xerox2000x@gmail.com> +Subject: [PATCH 2/2] dwampi: add initial tests +Message-Id: <20181205121826.2124-2-xerox.xerox2000x@gmail.com> +Date: Wed, 5 Dec 2018 13:18:26 +0100 +In-Reply-To: <20181205121826.2124-1-xerox.xerox2000x@gmail.com> +References: <20181205121826.2124-1-xerox.xerox2000x@gmail.com> + +Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com> +--- + configure | 1 + + configure.ac | 1 + + dlls/dwmapi/tests/Makefile.in | 5 ++ + dlls/dwmapi/tests/dwmapi.c | 108 ++++++++++++++++++++++++++++++++++ + include/dwmapi.h | 3 + + 5 files changed, 118 insertions(+) + create mode 100644 dlls/dwmapi/tests/Makefile.in + create mode 100644 dlls/dwmapi/tests/dwmapi.c + +diff --git a/configure b/configure +index d00057ba2f..e1dde1813b 100755 +--- a/configure ++++ b/configure +@@ -19392,6 +19392,7 @@ wine_fn_config_makefile dlls/dssenh/tests enable_tests + wine_fn_config_makefile dlls/dswave enable_dswave + wine_fn_config_makefile dlls/dswave/tests enable_tests + wine_fn_config_makefile dlls/dwmapi enable_dwmapi ++wine_fn_config_makefile dlls/dwmapi/tests enable_tests + wine_fn_config_makefile dlls/dwrite enable_dwrite + wine_fn_config_makefile dlls/dwrite/tests enable_tests + wine_fn_config_makefile dlls/dx8vb enable_dx8vb +diff --git a/configure.ac b/configure.ac +index 50cf9a0bd0..607a46f5a9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3255,6 +3255,7 @@ WINE_CONFIG_MAKEFILE(dlls/dssenh/tests) + WINE_CONFIG_MAKEFILE(dlls/dswave) + WINE_CONFIG_MAKEFILE(dlls/dswave/tests) + WINE_CONFIG_MAKEFILE(dlls/dwmapi) ++WINE_CONFIG_MAKEFILE(dlls/dwmapi/tests) + WINE_CONFIG_MAKEFILE(dlls/dwrite) + WINE_CONFIG_MAKEFILE(dlls/dwrite/tests) + WINE_CONFIG_MAKEFILE(dlls/dx8vb) +diff --git a/dlls/dwmapi/tests/Makefile.in b/dlls/dwmapi/tests/Makefile.in +new file mode 100644 +index 0000000000..f365f96c72 +--- /dev/null ++++ b/dlls/dwmapi/tests/Makefile.in +@@ -0,0 +1,5 @@ ++TESTDLL = dwmapi.dll ++IMPORTS = dwmapi ++ ++C_SRCS = \ ++ dwmapi.c +diff --git a/dlls/dwmapi/tests/dwmapi.c b/dlls/dwmapi/tests/dwmapi.c +new file mode 100644 +index 0000000000..fe5ee33996 +--- /dev/null ++++ b/dlls/dwmapi/tests/dwmapi.c +@@ -0,0 +1,108 @@ ++/* ++ * Unit tests for dwmapi ++ * ++ * Copyright 2018 Louis Lenders ++ * ++ * 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 ++ * ++ */ ++ ++#include "dwmapi.h" ++ ++#include "wine/test.h" ++ ++static HRESULT (WINAPI *pDwmIsCompositionEnabled)(BOOL*); ++static HRESULT (WINAPI *pDwmEnableComposition)(UINT); ++static HRESULT (WINAPI *pDwmGetTransportAttributes)(BOOL*,BOOL*,DWORD*); ++ ++BOOL dwmenabled; ++ ++static void test_isdwmenabled(void) ++{ ++ HRESULT res; ++ BOOL ret; ++ ++ ret = -1; ++ res = pDwmIsCompositionEnabled(&ret); ++ ok((res == S_OK && ret == TRUE) || (res == S_OK && ret == FALSE), "got %x and %d\n", res, ret); ++ ++ if (res == S_OK && ret == TRUE) ++ dwmenabled = TRUE; ++ else ++ dwmenabled = FALSE; ++ /*tested on win7 by enabling/disabling DWM service via services.msc*/ ++ if (dwmenabled) ++ { ++ res = pDwmEnableComposition(DWM_EC_DISABLECOMPOSITION); /* try disable and reenable dwm*/ ++ ok(res == S_OK, "got %x expected S_OK\n", res); ++ ++ ret = -1; ++ res = pDwmIsCompositionEnabled(&ret); ++ ok((res == S_OK && ret == FALSE) /*wvista win7*/ || (res == S_OK && ret == TRUE) /*>win7*/, "got %x and %d\n", res, ret); ++ ++ res = pDwmEnableComposition(DWM_EC_ENABLECOMPOSITION); ++ ok(res == S_OK, "got %x\n", res); ++ ++ ret = -1; ++ res = pDwmIsCompositionEnabled(&ret); ++ todo_wine ok(res == S_OK && ret == TRUE, "got %x and %d\n", res, ret); ++ } ++ else ++ { ++ res = pDwmEnableComposition(DWM_EC_ENABLECOMPOSITION); /*cannot enable DWM composition this way*/ ++ ok(res == S_OK /*win7 testbot*/ || res == DWM_E_COMPOSITIONDISABLED /*win7 laptop*/, "got %x\n", res); ++ if (winetest_debug > 1) ++ trace("returning %x\n", res); ++ ++ ret = -1; ++ res = pDwmIsCompositionEnabled(&ret); ++ ok(res == S_OK && ret == FALSE, "got %x and %d\n", res, ret); ++ } ++} ++ ++static void test_dwm_get_transport_attributes(void) ++{ ++ BOOL isremoting, isconnected; ++ DWORD generation; ++ HRESULT res; ++ ++ res = pDwmGetTransportAttributes(&isremoting, &isconnected, &generation); ++ if (dwmenabled) ++ ok(res == S_OK, "got %x\n", res); ++ else ++ { ++ ok(res == S_OK /*win7 testbot*/ || res == DWM_E_COMPOSITIONDISABLED /*win7 laptop*/, "got %x\n", res); ++ if (winetest_debug > 1) ++ trace("returning %x\n", res); ++ } ++} ++ ++START_TEST(dwmapi) ++{ ++ HMODULE hmod = LoadLibraryA("dwmapi.dll"); ++ ++ if (!hmod) ++ { ++ trace("dwmapi not found, skipping tests\n"); ++ return; ++ } ++ ++ pDwmIsCompositionEnabled = (void *)GetProcAddress(hmod, "DwmIsCompositionEnabled"); ++ pDwmEnableComposition = (void *)GetProcAddress(hmod, "DwmEnableComposition"); ++ pDwmGetTransportAttributes = (void *)GetProcAddress(hmod, "DwmGetTransportAttributes"); ++ ++ test_isdwmenabled(); ++ test_dwm_get_transport_attributes(); ++} +diff --git a/include/dwmapi.h b/include/dwmapi.h +index b2f39deae5..12527aee62 100644 +--- a/include/dwmapi.h ++++ b/include/dwmapi.h +@@ -101,6 +101,9 @@ typedef struct _MilMatrix3x2D + DOUBLE DY; + } MilMatrix3x2D; + ++#define DWM_EC_DISABLECOMPOSITION 0 ++#define DWM_EC_ENABLECOMPOSITION 1 ++ + #define DWM_BB_ENABLE 0x00000001 + #define DWM_BB_BLURREGION 0x00000002 + #define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004 + +-- +2.17.1 + diff --git a/patches/dwmapi-DwmGetTransportAttributes/definition b/patches/dwmapi-DwmGetTransportAttributes/definition new file mode 100644 index 00000000..0aa45a7e --- /dev/null +++ b/patches/dwmapi-DwmGetTransportAttributes/definition @@ -0,0 +1 @@ +Fixes: [31350] T-Online Mediencenter Assistent (.NET 3.5 WPF app) installer fails ('dwmapi.dll' stubs insufficient in Vista/Win7 mode) diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index e04c18ec..1cc0fd95 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -136,6 +136,7 @@ patch_enable_all () enable_dinput_Initialize="$1" enable_dsound_EAX="$1" enable_dsound_Fast_Mixer="$1" + enable_dwmapi_DwmGetTransportAttributes="$1" enable_dwrite_FontFallback="$1" enable_dxdiagn_Enumerate_DirectSound="$1" enable_dxdiagn_GetChildContainer_Leaf_Nodes="$1" @@ -562,6 +563,9 @@ patch_enable () dsound-Fast_Mixer) enable_dsound_Fast_Mixer="$2" ;; + dwmapi-DwmGetTransportAttributes) + enable_dwmapi_DwmGetTransportAttributes="$2" + ;; dwrite-FontFallback) enable_dwrite_FontFallback="$2" ;; @@ -3371,6 +3375,25 @@ if test "$enable_dsound_EAX" -eq 1; then ) >> "$patchlist" fi +# Patchset dwmapi-DwmGetTransportAttributes +# | +# | This patchset fixes the following Wine bugs: +# | * [#31350] T-Online Mediencenter Assistent (.NET 3.5 WPF app) installer fails ('dwmapi.dll' stubs insufficient in +# | Vista/Win7 mode) +# | +# | Modified files: +# | * configure, configure.ac, dlls/dwmapi/dwmapi_main.c, dlls/dwmapi/tests/Makefile.in, dlls/dwmapi/tests/dwmapi.c, +# | include/dwmapi.h, include/winerror.h +# | +if test "$enable_dwmapi_DwmGetTransportAttributes" -eq 1; then + patch_apply dwmapi-DwmGetTransportAttributes/0001-dwmapi-return-DWM_E_COMPOSITIONDISABLED-instead-of-ENOTIMPL-in-DwmGetTransportAttributes.patch + patch_apply dwmapi-DwmGetTransportAttributes/0002-dwmapi-add-initial-tests.patch + ( + printf '%s\n' '+ { "Louis Lenders", "dwmapi: Return DWM_E_COMPOSITIONDISABLED instead of E_NOTIMPL in DwmGetTransportAttributes.", 1 },'; + printf '%s\n' '+ { "Louis Lenders", "dwampi: Add initial tests.", 1 },'; + ) >> "$patchlist" +fi + # Patchset dwrite-FontFallback # | # | This patchset fixes the following Wine bugs: