Compare commits

..

12 Commits

Author SHA1 Message Date
Alistair Leslie-Hughes
ae1f954ed1 Release 4.0-rc4 2018-12-29 15:45:37 +11:00
Alistair Leslie-Hughes
ccad76f64a Rebase against 2058505cebc7bb069e1e2d0d738353336e943b7b 2018-12-28 19:56:47 +11:00
Alistair Leslie-Hughes
b1066c7064 Release 4.0-rc3 2018-12-22 14:09:01 +11:00
Alistair Leslie-Hughes
b636153ec4 Added mf-MFCreateSequencerSource patchset 2018-12-21 08:56:45 +11:00
Alistair Leslie-Hughes
f8064b4dbe Rebase against f6896e062d30d6d5d6d94a34e3a622c83aa9d3f1 2018-12-21 08:16:38 +11:00
Zebediah Figura
b7a4aade29 user32-minimized_windows: Add patch set. 2018-12-20 12:40:39 -06:00
Alistair Leslie-Hughes
9e8d000f35 Rebase against 5a8e430b96ab429a85f82f26ba9d2de4729954c2 2018-12-18 11:02:25 +11:00
Alistair Leslie-Hughes
42b756066b Added winex11-ime-check-thread-data patchset 2018-12-18 08:44:19 +11:00
Alistair Leslie-Hughes
ee381d1ad0 Added imm32-message_on_focus patchset 2018-12-18 08:37:38 +11:00
Alistair Leslie-Hughes
9a858d4f4c Added wined3d-WINED3D_TEXF_ANISOTROPIC patchset 2018-12-17 16:26:32 +11:00
Alistair Leslie-Hughes
3878c8eb1b Updated uianimation-stubs patchset 2018-12-17 16:10:10 +11:00
Alistair Leslie-Hughes
5020088406 Added mfplat-MFGetSystemTime patchset 2018-12-17 11:36:45 +11:00
39 changed files with 3493 additions and 762 deletions

View File

@@ -1,4 +1,4 @@
From 8397d7b777db5ef44825b639d4009f6e372ca9ad Mon Sep 17 00:00:00 2001
From 1b741a4b555ad98a769fdb9fa659134b83293a4e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 4 Mar 2016 22:22:42 +0100
Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
@@ -12,10 +12,10 @@ Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
5 files changed, 106 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 8247214..d70f2e2 100644
index fad185e..ebf91b3 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -1544,6 +1544,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
@@ -1543,6 +1543,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
caps.dwCaps |= DDCAPS_ALIGNSTRIDE;
caps.dwAlignStrideAlign = DDRAW_STRIDE_ALIGNMENT;
@@ -25,10 +25,10 @@ index 8247214..d70f2e2 100644
if(DriverCaps)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 1f93a97..9a862e1 100644
index 59d07b7..5d81abb 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -11543,6 +11543,31 @@ static void test_execute_data(void)
@@ -11581,6 +11581,31 @@ static void test_execute_data(void)
DestroyWindow(window);
}
@@ -60,7 +60,7 @@ index 1f93a97..9a862e1 100644
static void test_viewport(void)
{
static struct
@@ -12030,6 +12055,7 @@ START_TEST(ddraw1)
@@ -12068,6 +12093,7 @@ START_TEST(ddraw1)
test_depth_readback();
test_clear();
test_enum_surfaces();
@@ -69,10 +69,10 @@ index 1f93a97..9a862e1 100644
test_viewport();
test_find_device();
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 95cdf8b..d317cc1 100644
index 8b9b249..b9b964d 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -12805,6 +12805,31 @@ static void test_enum_surfaces(void)
@@ -12862,6 +12862,31 @@ static void test_enum_surfaces(void)
IDirectDraw2_Release(ddraw);
}
@@ -104,7 +104,7 @@ index 95cdf8b..d317cc1 100644
static void test_viewport(void)
{
static struct
@@ -13321,6 +13346,7 @@ START_TEST(ddraw2)
@@ -13378,6 +13403,7 @@ START_TEST(ddraw2)
test_depth_readback();
test_clear();
test_enum_surfaces();
@@ -113,11 +113,11 @@ index 95cdf8b..d317cc1 100644
test_find_device();
test_killfocus();
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index a62aaf0..e11ec0c 100644
index 1c48418..306f233 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -15318,6 +15318,31 @@ static void test_killfocus(void)
UnregisterClassA("ddraw_killfocus_wndproc_wc", GetModuleHandleA(NULL));
@@ -15472,6 +15472,31 @@ static void test_sysmem_draw(void)
DestroyWindow(window);
}
+static void test_caps(void)
@@ -148,7 +148,7 @@ index a62aaf0..e11ec0c 100644
START_TEST(ddraw4)
{
DDDEVICEIDENTIFIER identifier;
@@ -15443,6 +15468,7 @@ START_TEST(ddraw4)
@@ -15597,6 +15622,7 @@ START_TEST(ddraw4)
test_depth_readback();
test_clear();
test_enum_surfaces();
@@ -157,11 +157,11 @@ index a62aaf0..e11ec0c 100644
test_find_device();
test_killfocus();
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 04048d4..ad4f63d 100644
index a125200..da777d8 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -15106,6 +15106,31 @@ static void test_killfocus(void)
UnregisterClassA("ddraw_killfocus_wndproc_wc", GetModuleHandleA(NULL));
@@ -15198,6 +15198,31 @@ static void test_sysmem_draw(void)
DestroyWindow(window);
}
+static void test_caps(void)
@@ -192,14 +192,14 @@ index 04048d4..ad4f63d 100644
START_TEST(ddraw7)
{
DDDEVICEIDENTIFIER2 identifier;
@@ -15243,6 +15268,7 @@ START_TEST(ddraw7)
@@ -15335,6 +15360,7 @@ START_TEST(ddraw7)
test_enum_surfaces();
test_viewport();
test_device_load();
+ test_caps();
test_color_vertex();
test_killfocus();
}
test_sysmem_draw();
--
1.9.1

View File

@@ -1,8 +1,8 @@
From ed8b8ed961c31b68abc5fb266d872f7228e02b93 Mon Sep 17 00:00:00 2001
From 93ec896e73fe1b9ad7100e4ea22086e940eb8ef4 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 15 Aug 2015 07:41:17 +0200
Subject: gdi32: Perform lazy initialization of fonts to improve startup
performance.
Subject: [PATCH] gdi32: Perform lazy initialization of fonts to improve
startup performance.
---
dlls/gdi32/dc.c | 8 +++-----
@@ -10,10 +10,10 @@ Subject: gdi32: Perform lazy initialization of fonts to improve startup
2 files changed, 37 insertions(+), 20 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 5146f5b..91ad953 100644
index 8ee8a52..208c220 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -147,11 +147,9 @@ DC *alloc_dc_ptr( WORD magic )
@@ -148,11 +148,9 @@ DC *alloc_dc_ptr( WORD magic )
}
dc->nulldrv.hdc = dc->hSelf;
@@ -29,7 +29,7 @@ index 5146f5b..91ad953 100644
}
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index de40d9f..d4eb837 100644
index 9f6bdfe..492d29e 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -110,6 +110,9 @@
@@ -42,7 +42,7 @@ index de40d9f..d4eb837 100644
#ifdef HAVE_FREETYPE
#ifndef HAVE_FT_TRUETYPEENGINETYPE
@@ -3176,6 +3179,7 @@ INT WineEngAddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
@@ -3264,6 +3267,7 @@ INT WineEngAddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
{
INT ret = 0;
@@ -50,7 +50,7 @@ index de40d9f..d4eb837 100644
GDI_CheckNotLock();
if (ft_handle) /* do it only if we have freetype up and running */
@@ -3218,6 +3222,7 @@ INT WineEngAddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
@@ -3306,6 +3310,7 @@ INT WineEngAddFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
*/
HANDLE WineEngAddFontMemResourceEx(PVOID pbFont, DWORD cbFont, PVOID pdv, DWORD *pcFonts)
{
@@ -58,7 +58,7 @@ index de40d9f..d4eb837 100644
GDI_CheckNotLock();
if (ft_handle) /* do it only if we have freetype up and running */
@@ -3256,6 +3261,7 @@ BOOL WineEngRemoveFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
@@ -3344,6 +3349,7 @@ BOOL WineEngRemoveFontResourceEx(LPCWSTR file, DWORD flags, PVOID pdv)
{
INT ret = 0;
@@ -66,7 +66,7 @@ index de40d9f..d4eb837 100644
GDI_CheckNotLock();
if (ft_handle) /* do it only if we have freetype up and running */
@@ -3577,10 +3583,13 @@ static BOOL create_fot( const WCHAR *resource, const WCHAR *font_file, const str
@@ -3665,10 +3671,13 @@ static BOOL create_fot( const WCHAR *resource, const WCHAR *font_file, const str
BOOL WineEngCreateScalableFontResource( DWORD hidden, LPCWSTR resource,
LPCWSTR font_file, LPCWSTR font_path )
{
@@ -81,7 +81,7 @@ index de40d9f..d4eb837 100644
if (!unix_name || !get_fontdir( unix_name, &fontdir ))
SetLastError( ERROR_INVALID_PARAMETER );
else
@@ -4012,8 +4021,6 @@ static BOOL init_freetype(void)
@@ -4174,8 +4183,6 @@ static BOOL init_freetype(void)
FT_SimpleVersion = ((FT_Version.major << 16) & 0xff0000) |
((FT_Version.minor << 8) & 0x00ff00) |
((FT_Version.patch ) & 0x0000ff);
@@ -90,8 +90,8 @@ index de40d9f..d4eb837 100644
return TRUE;
sym_not_found:
@@ -4200,21 +4207,13 @@ static void reorder_font_list(void)
set_default( default_sans_list );
@@ -4361,21 +4368,13 @@ static void reorder_font_list(void)
default_sans = set_default( default_sans_list );
}
-/*************************************************************
@@ -114,7 +114,7 @@ index de40d9f..d4eb837 100644
#ifdef SONAME_LIBFONTCONFIG
init_fontconfig();
@@ -4240,7 +4239,7 @@ BOOL WineEngInit(void)
@@ -4401,7 +4400,7 @@ BOOL WineEngInit(void)
if((font_mutex = CreateMutexW(NULL, FALSE, font_mutex_nameW)) == NULL)
{
ERR("Failed to create font mutex\n");
@@ -123,7 +123,7 @@ index de40d9f..d4eb837 100644
}
WaitForSingleObject(font_mutex, INFINITE);
@@ -4267,6 +4266,21 @@ BOOL WineEngInit(void)
@@ -4428,6 +4427,21 @@ BOOL WineEngInit(void)
return TRUE;
}
@@ -145,7 +145,7 @@ index de40d9f..d4eb837 100644
/* Some fonts have large usWinDescent values, as a result of storing signed short
in unsigned field. That's probably caused by sTypoDescent vs usWinDescent confusion in
some font generation tools. */
@@ -4948,8 +4962,12 @@ static BOOL select_charmap(FT_Face ft_face, FT_Encoding encoding)
@@ -5124,8 +5138,12 @@ static BOOL select_charmap(FT_Face ft_face, FT_Encoding encoding)
static BOOL freetype_CreateDC( PHYSDEV *dev, LPCWSTR driver, LPCWSTR device,
LPCWSTR output, const DEVMODEW *devmode )
{
@@ -159,7 +159,7 @@ index de40d9f..d4eb837 100644
if (!physdev) return FALSE;
push_dc_driver( dev, &physdev->dev, &freetype_funcs );
return TRUE;
@@ -8218,6 +8236,7 @@ static BOOL freetype_FontIsLinked( PHYSDEV dev )
@@ -8627,6 +8645,7 @@ static BOOL freetype_FontIsLinked( PHYSDEV dev )
*/
BOOL WINAPI GetRasterizerCaps( LPRASTERIZER_STATUS lprs, UINT cbNumBytes)
{
@@ -168,5 +168,5 @@ index de40d9f..d4eb837 100644
lprs->wFlags = TT_AVAILABLE | TT_ENABLED;
lprs->nLanguageID = 0;
--
2.5.1
1.9.1

View File

@@ -0,0 +1,34 @@
From 117673ffe8bd5a8aae060307bcf6af83b4da011e Mon Sep 17 00:00:00 2001
From: Gijs Vermeulen <gijsvrm@gmail.com>
Date: Mon, 17 Dec 2018 11:49:26 +1100
Subject: [PATCH] imm32: Only generate 'WM_IME_SETCONTEXT' message if window
has focus
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31157
---
dlls/imm32/imm.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 28eb00f..4255e98 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -608,9 +608,12 @@ HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
if (!hIMC)
return old;
- SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, FALSE, ISC_SHOWUIALL);
- data->IMC.hWnd = hWnd;
- SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, TRUE, ISC_SHOWUIALL);
+ if(GetActiveWindow() == data->IMC.hWnd)
+ {
+ SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, FALSE, ISC_SHOWUIALL);
+ data->IMC.hWnd = hWnd;
+ SendMessageW(data->IMC.hWnd, WM_IME_SETCONTEXT, TRUE, ISC_SHOWUIALL);
+ }
return old;
}
--
1.9.1

View File

@@ -0,0 +1,5 @@
# I suspect that bug #28861,#46263 are related to this issue as well.
# Both of these hint that the szwWineIMCProperty doesn't the correct value
# and thus goes down invalid path leading to a crash.
#
Fixes: [31157] imm32: Only generate 'WM_IME_SETCONTEXT' message if window has focus.

View File

@@ -1,48 +0,0 @@
From d246bb6bbadaa959d49a29dc28d1288473ca8375 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 17 May 2017 11:58:20 +0200
Subject: urlmon/tests: Add test for opening cache file with DELETE access.
---
dlls/urlmon/tests/url.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/dlls/urlmon/tests/url.c b/dlls/urlmon/tests/url.c
index cd1d855032d..70234ff3fd7 100644
--- a/dlls/urlmon/tests/url.c
+++ b/dlls/urlmon/tests/url.c
@@ -182,6 +182,7 @@ static HRESULT abort_hres;
static BOOL have_IHttpNegotiate2, use_bscex, is_async_prot;
static BOOL test_redirect, use_cache_file, callback_read, no_callback, test_abort;
static WCHAR cache_file_name[MAX_PATH];
+static WCHAR http_cache_file[MAX_PATH];
static BOOL only_check_prot_args = FALSE;
static BOOL invalid_cn_accepted = FALSE;
static BOOL abort_start = FALSE;
@@ -1927,6 +1928,14 @@ static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallbackEx *iface, HRES
ok( WaitForSingleObject(complete_event2, 90000) == WAIT_OBJECT_0, "wait timed out\n" );
}
+ if(test_protocol == HTTP_TEST && !emulate_protocol && http_cache_file[0]) {
+ HANDLE file = CreateFileW(http_cache_file, DELETE, FILE_SHARE_DELETE, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ ok(file == INVALID_HANDLE_VALUE, "expected INVALID_HANDLE_VALUE, got %p\n", file);
+ ok(GetLastError() == ERROR_SHARING_VIOLATION, "expected ERROR_SHARING_VIOLATION, got %u\n", GetLastError());
+ http_cache_file[0] = 0;
+ }
+
return S_OK;
}
@@ -2083,6 +2092,8 @@ static HRESULT WINAPI statusclb_OnDataAvailable(IBindStatusCallbackEx *iface, DW
else if(emulate_protocol)
ok(!lstrcmpW(pstgmed->u.lpszFileName, cache_fileW),
"unexpected file name %s\n", wine_dbgstr_w(pstgmed->u.lpszFileName));
+ else if(test_protocol == HTTP_TEST)
+ lstrcpyW(http_cache_file, pstgmed->u.lpszFileName);
else
ok(pstgmed->u.lpszFileName != NULL, "lpszFileName == NULL\n");
}
--
2.12.2

View File

@@ -1,25 +0,0 @@
From fcb6d21ede52ef770a04c59ea6bd5b9483c31f32 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 17 May 2017 12:03:15 +0200
Subject: appwiz.cpl: Copy addons to cache instead of moving.
---
dlls/appwiz.cpl/addons.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index c3847b54948..91cd485b026 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -510,7 +510,7 @@ static HRESULT WINAPI InstallCallback_OnStopBinding(IBindStatusCallback *iface,
cache_file_name = get_cache_file_name(TRUE);
if(cache_file_name) {
- MoveFileW(msi_file, cache_file_name);
+ CopyFileW(msi_file, cache_file_name, FALSE);
heap_free(cache_file_name);
}
}else {
--
2.12.2

View File

@@ -1 +0,0 @@
Fixes: [14901] MoveFile with source == dest should succeed.

View File

@@ -0,0 +1,240 @@
From a6148704ad3c09339872975b1f129c37c3d35aa3 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 20 Dec 2018 13:54:47 +1100
Subject: [PATCH] mf: Implement MFCreateSequencerSource
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46105
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/mf/main.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++
dlls/mf/mf.spec | 2 +-
dlls/mf/tests/Makefile.in | 2 +-
dlls/mf/tests/mf.c | 18 ++++++
include/mfidl.idl | 1 +
5 files changed, 161 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/main.c b/dlls/mf/main.c
index 73cd6aa..1ef13b5 100644
--- a/dlls/mf/main.c
+++ b/dlls/mf/main.c
@@ -74,3 +74,143 @@ HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID riid, void
IMFGetService_Release(gs);
return hr;
}
+
+typedef struct seqsource
+{
+ IMFSequencerSource IMFSequencerSource_iface;
+ LONG ref;
+} seqsource;
+
+static inline seqsource *impl_from_IMFSequencerSource(IMFSequencerSource *iface)
+{
+ return CONTAINING_RECORD(iface, seqsource, IMFSequencerSource_iface);
+}
+
+static HRESULT WINAPI seqsource_QueryInterface(IMFSequencerSource *iface, REFIID riid, void **out)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), out);
+
+ if ( IsEqualIID(riid, &IID_IMFSequencerSource) ||
+ IsEqualIID(riid, &IID_IUnknown))
+ {
+ *out = &This->IMFSequencerSource_iface;
+ }
+ else
+ {
+ FIXME("(%s, %p)\n", debugstr_guid(riid), out);
+ *out = NULL;
+ return E_NOINTERFACE;
+ }
+
+ IUnknown_AddRef((IUnknown*)*out);
+ return S_OK;
+}
+
+static ULONG WINAPI seqsource_AddRef(IMFSequencerSource *iface)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI seqsource_Release(IMFSequencerSource *iface)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%u\n", This, ref);
+
+ if (!ref)
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+}
+
+static HRESULT WINAPI seqsource_AppendTopology(IMFSequencerSource *iface, IMFTopology *topology, DWORD flags, MFSequencerElementId *element)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ FIXME("%p, %p, %x, %p\n", This, topology, flags, element);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI seqsource_DeleteTopology(IMFSequencerSource *iface, MFSequencerElementId element)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ FIXME("%p, %d\n", This, element);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI seqsource_GetPresentationContext(IMFSequencerSource *iface, IMFPresentationDescriptor *pd, MFSequencerElementId *id,
+ IMFTopology **topology)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ FIXME("%p, %p, %p, %p\n", This, pd, id, topology);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI seqsource_UpdateTopology(IMFSequencerSource *iface, MFSequencerElementId id, IMFTopology *topology)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ FIXME("%p, %d, %p\n", This, id, topology);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI seqsource_UpdateTopologyFlags(IMFSequencerSource *iface, MFSequencerElementId id, DWORD flags)
+{
+ seqsource *This = impl_from_IMFSequencerSource(iface);
+
+ FIXME("%p, %d, %x\n", This, id, flags);
+
+ return E_NOTIMPL;
+}
+
+static const IMFSequencerSourceVtbl seqsrc_vtbl =
+{
+ seqsource_QueryInterface,
+ seqsource_AddRef,
+ seqsource_Release,
+ seqsource_AppendTopology,
+ seqsource_DeleteTopology,
+ seqsource_GetPresentationContext,
+ seqsource_UpdateTopology,
+ seqsource_UpdateTopologyFlags
+};
+
+/***********************************************************************
+ * MFCreateSequencerSource (mf.@)
+ */
+HRESULT WINAPI MFCreateSequencerSource(IUnknown *reserved, IMFSequencerSource **sequencer)
+{
+ seqsource *object;
+
+ TRACE("(%p, %p)\n", reserved, sequencer);
+
+ if (!sequencer)
+ return E_POINTER;
+
+ object = HeapAlloc(GetProcessHeap(), 0, sizeof(*object));
+ if (!object)
+ return E_OUTOFMEMORY;
+
+ object->IMFSequencerSource_iface.lpVtbl = &seqsrc_vtbl;
+ object->ref = 1;
+
+ *sequencer = &object->IMFSequencerSource_iface;
+
+ return S_OK;
+}
diff --git a/dlls/mf/mf.spec b/dlls/mf/mf.spec
index deb9057..b46c905 100644
--- a/dlls/mf/mf.spec
+++ b/dlls/mf/mf.spec
@@ -54,7 +54,7 @@
@ stub MFCreateSampleGrabberSinkActivate
@ stub MFCreateSecureHttpSchemePlugin
@ stub MFCreateSequencerSegmentOffset
-@ stub MFCreateSequencerSource
+@ stdcall MFCreateSequencerSource(ptr ptr)
@ stub MFCreateSequencerSourceRemoteStream
@ stub MFCreateSimpleTypeHandler
@ stdcall MFCreateSourceResolver(ptr) mfplat.MFCreateSourceResolver
diff --git a/dlls/mf/tests/Makefile.in b/dlls/mf/tests/Makefile.in
index f989baa..f233cff 100644
--- a/dlls/mf/tests/Makefile.in
+++ b/dlls/mf/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = mf.dll
-IMPORTS = mf
+IMPORTS = mf mfplat
C_SRCS = \
mf.c
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 76e092a..ca10233 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -28,6 +28,7 @@
#include "initguid.h"
#include "mfidl.h"
+#include "mfapi.h"
#include "wine/test.h"
@@ -170,8 +171,25 @@ static void test_MFGetService(void)
ok(unk == (void *)0xdeadbeef, "Unexpected out object.\n");
}
+static void test_MFCreateSequencerSource(void)
+{
+ HRESULT hr;
+ IMFSequencerSource *seq;
+
+ hr = MFStartup(MF_VERSION, MFSTARTUP_FULL);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = MFCreateSequencerSource(NULL, &seq);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ IMFSequencerSource_Release(seq);
+
+ MFShutdown();
+}
+
START_TEST(mf)
{
test_topology();
test_MFGetService();
+ test_MFCreateSequencerSource();
}
diff --git a/include/mfidl.idl b/include/mfidl.idl
index 2373e41..39dc394 100644
--- a/include/mfidl.idl
+++ b/include/mfidl.idl
@@ -307,6 +307,7 @@ interface IMFSequencerSource : IUnknown
cpp_quote("HRESULT WINAPI MFCreateMediaSession(IMFAttributes *config, IMFMediaSession **session);")
cpp_quote("HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **bytestream);" )
+cpp_quote("HRESULT WINAPI MFCreateSequencerSource(IUnknown *reserved, IMFSequencerSource **sequencer);" )
cpp_quote("HRESULT WINAPI MFCreateSourceResolver(IMFSourceResolver **resolver);")
cpp_quote("HRESULT WINAPI MFCreateStreamDescriptor(DWORD identifier, DWORD cMediaTypes,")
cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);")
--
1.9.1

View File

@@ -0,0 +1 @@
Fixes: [46105] mf: Implement MFCreateSequencerSource

View File

@@ -0,0 +1,69 @@
From 544deb6c0d9ae04d3b82d241f7ffe6a21fa3835f Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 17 Dec 2018 11:21:48 +1100
Subject: [PATCH] mfplat: Implement MFGetSystemTime
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=46300
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/mfplat/main.c | 17 +++++++++++++++++
dlls/mfplat/mfplat.spec | 2 +-
include/mfidl.idl | 1 +
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index c7c3465..1e8e2ea 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -248,6 +248,23 @@ HRESULT WINAPI MFTUnregisterLocal(IClassFactory *factory)
return S_OK;
}
+MFTIME WINAPI MFGetSystemTime()
+{
+ SYSTEMTIME st;
+ FILETIME ft;
+ MFTIME mf;
+
+ TRACE("()\n");
+
+ GetSystemTime(&st);
+
+ SystemTimeToFileTime(&st, &ft);
+
+ memcpy(&mf, &ft, sizeof(FILETIME));
+
+ return mf;
+}
+
static BOOL match_type(const WCHAR *clsid_str, const WCHAR *type_str, MFT_REGISTER_TYPE_INFO *type)
{
HKEY htransform, hfilter;
diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec
index c828aea..349b926 100644
--- a/dlls/mfplat/mfplat.spec
+++ b/dlls/mfplat/mfplat.spec
@@ -98,7 +98,7 @@
@ stub MFGetPrivateWorkqueues
@ stub MFGetSockaddrFromNumericName
@ stub MFGetStrideForBitmapInfoHeader
-@ stub MFGetSystemTime
+@ stdcall MFGetSystemTime()
@ stub MFGetTimerPeriodicity
@ stub MFGetUncompressedVideoFormat
@ stub MFGetWorkQueueMMCSSClass
diff --git a/include/mfidl.idl b/include/mfidl.idl
index 2373e41..2fdb288 100644
--- a/include/mfidl.idl
+++ b/include/mfidl.idl
@@ -313,6 +313,7 @@ cpp_quote(" IMFMediaType **types, IMFStreamDescriptor **descriptor);")
cpp_quote("HRESULT WINAPI MFCreateTopology(IMFTopology **topology);")
cpp_quote("HRESULT WINAPI MFGetSupportedMimeTypes(PROPVARIANT *array);")
cpp_quote("HRESULT WINAPI MFGetService(IUnknown *object, REFGUID service, REFIID iid, void **obj);")
+cpp_quote("MFTIME WINAPI MFGetSystemTime(void);")
[
object,
--
1.9.1

View File

@@ -0,0 +1 @@
Fixes: [46300] mfplat: Implement MFGetSystemTime

View File

@@ -52,13 +52,13 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "4397d9497608a3df45a5c519a37f5dcde5cc2301"
echo "2058505cebc7bb069e1e2d0d738353336e943b7b"
}
# Show version information
version()
{
echo "Wine Staging 4.0-rc2"
echo "Wine Staging 4.0-rc4"
echo "Copyright (C) 2014-2018 the Wine Staging project authors."
echo "Copyright (C) 2018 Alistair Leslie-Hughes"
echo ""
@@ -152,6 +152,7 @@ patch_enable_all ()
enable_imagehlp_BindImageEx="$1"
enable_imagehlp_Cleanup="$1"
enable_imagehlp_ImageLoad="$1"
enable_imm32_message_on_focus="$1"
enable_include_winsock="$1"
enable_inseng_Implementation="$1"
enable_iphlpapi_System_Ping="$1"
@@ -161,7 +162,6 @@ patch_enable_all ()
enable_kernel32_FindFirstFile="$1"
enable_kernel32_Job_Tests="$1"
enable_kernel32_K32GetPerformanceInfo="$1"
enable_kernel32_MoveFile="$1"
enable_kernel32_NeedCurrentDirectoryForExePath="$1"
enable_kernel32_NormalizeString="$1"
enable_kernel32_PE_Loader_Fixes="$1"
@@ -172,6 +172,8 @@ patch_enable_all ()
enable_krnl386_exe16_Invalid_Console_Handles="$1"
enable_libs_Debug_Channel="$1"
enable_libs_Unicode_Collation="$1"
enable_mf_MFCreateSequencerSource="$1"
enable_mfplat_MFGetSystemTime="$1"
enable_mmsystem_dll16_MIDIHDR_Refcount="$1"
enable_mountmgr_DosDevices="$1"
enable_mscoree_CorValidateImage="$1"
@@ -315,7 +317,7 @@ patch_enable_all ()
enable_user32_Refresh_MDI_Menus="$1"
enable_user32_ScrollWindowEx="$1"
enable_user32_ShowWindow="$1"
enable_user32_dialog_focus="$1"
enable_user32_minimized_windows="$1"
enable_user32_msgbox_Support_WM_COPY_mesg="$1"
enable_uxtheme_CloseThemeClass="$1"
enable_uxtheme_GTK_Theming="$1"
@@ -352,6 +354,7 @@ patch_enable_all ()
enable_wined3d_UAV_Counters="$1"
enable_wined3d_WINED3DFMT_B8G8R8X8_UNORM="$1"
enable_wined3d_WINED3D_RS_COLORWRITEENABLE="$1"
enable_wined3d_WINED3D_TEXF_ANISOTROPIC="$1"
enable_wined3d_mesa_texture_download="$1"
enable_wined3d_wined3d_guess_gl_vendor="$1"
enable_winedbg_Process_Arguments="$1"
@@ -371,6 +374,7 @@ patch_enable_all ()
enable_winex11_Window_Style="$1"
enable_winex11_XEMBED="$1"
enable_winex11__NET_ACTIVE_WINDOW="$1"
enable_winex11_ime_check_thread_data="$1"
enable_winex11_key_translation="$1"
enable_winex11_mouse_movements="$1"
enable_winex11_wglShareLists="$1"
@@ -612,6 +616,9 @@ patch_enable ()
imagehlp-ImageLoad)
enable_imagehlp_ImageLoad="$2"
;;
imm32-message_on_focus)
enable_imm32_message_on_focus="$2"
;;
include-winsock)
enable_include_winsock="$2"
;;
@@ -639,9 +646,6 @@ patch_enable ()
kernel32-K32GetPerformanceInfo)
enable_kernel32_K32GetPerformanceInfo="$2"
;;
kernel32-MoveFile)
enable_kernel32_MoveFile="$2"
;;
kernel32-NeedCurrentDirectoryForExePath)
enable_kernel32_NeedCurrentDirectoryForExePath="$2"
;;
@@ -672,6 +676,12 @@ patch_enable ()
libs-Unicode_Collation)
enable_libs_Unicode_Collation="$2"
;;
mf-MFCreateSequencerSource)
enable_mf_MFCreateSequencerSource="$2"
;;
mfplat-MFGetSystemTime)
enable_mfplat_MFGetSystemTime="$2"
;;
mmsystem.dll16-MIDIHDR_Refcount)
enable_mmsystem_dll16_MIDIHDR_Refcount="$2"
;;
@@ -1101,8 +1111,8 @@ patch_enable ()
user32-ShowWindow)
enable_user32_ShowWindow="$2"
;;
user32-dialog_focus)
enable_user32_dialog_focus="$2"
user32-minimized_windows)
enable_user32_minimized_windows="$2"
;;
user32-msgbox-Support-WM_COPY-mesg)
enable_user32_msgbox_Support_WM_COPY_mesg="$2"
@@ -1212,6 +1222,9 @@ patch_enable ()
wined3d-WINED3D_RS_COLORWRITEENABLE)
enable_wined3d_WINED3D_RS_COLORWRITEENABLE="$2"
;;
wined3d-WINED3D_TEXF_ANISOTROPIC)
enable_wined3d_WINED3D_TEXF_ANISOTROPIC="$2"
;;
wined3d-mesa_texture_download)
enable_wined3d_mesa_texture_download="$2"
;;
@@ -1269,6 +1282,9 @@ patch_enable ()
winex11-_NET_ACTIVE_WINDOW)
enable_winex11__NET_ACTIVE_WINDOW="$2"
;;
winex11-ime-check-thread-data)
enable_winex11_ime_check_thread_data="$2"
;;
winex11-key_translation)
enable_winex11_key_translation="$2"
;;
@@ -3675,6 +3691,21 @@ if test "$enable_imagehlp_ImageLoad" -eq 1; then
) >> "$patchlist"
fi
# Patchset imm32-message_on_focus
# |
# | This patchset fixes the following Wine bugs:
# | * [#31157] imm32: Only generate 'WM_IME_SETCONTEXT' message if window has focus.
# |
# | Modified files:
# | * dlls/imm32/imm.c
# |
if test "$enable_imm32_message_on_focus" -eq 1; then
patch_apply imm32-message_on_focus/0001-imm32-Only-generate-WM_IME_SETCONTEXT-message-if-win.patch
(
printf '%s\n' '+ { "Gijs Vermeulen", "imm32: Only generate '\''WM_IME_SETCONTEXT'\'' message if window has focus.", 1 },';
) >> "$patchlist"
fi
# Patchset include-winsock
# |
# | Modified files:
@@ -3853,23 +3884,6 @@ if test "$enable_kernel32_K32GetPerformanceInfo" -eq 1; then
) >> "$patchlist"
fi
# Patchset kernel32-MoveFile
# |
# | This patchset fixes the following Wine bugs:
# | * [#14901] MoveFile with source == dest should succeed.
# |
# | Modified files:
# | * dlls/appwiz.cpl/addons.c, dlls/urlmon/tests/url.c
# |
if test "$enable_kernel32_MoveFile" -eq 1; then
patch_apply kernel32-MoveFile/0006-urlmon-tests-Add-test-for-opening-cache-file-with-DE.patch
patch_apply kernel32-MoveFile/0007-appwiz.cpl-Copy-addons-to-cache-instead-of-moving.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "urlmon/tests: Add test for opening cache file with DELETE access.", 1 },';
printf '%s\n' '+ { "Sebastian Lackner", "appwiz.cpl: Copy addons to cache instead of moving.", 1 },';
) >> "$patchlist"
fi
# Patchset kernel32-NeedCurrentDirectoryForExePath
# |
# | This patchset fixes the following Wine bugs:
@@ -4045,6 +4059,36 @@ if test "$enable_libs_Unicode_Collation" -eq 1; then
) >> "$patchlist"
fi
# Patchset mf-MFCreateSequencerSource
# |
# | This patchset fixes the following Wine bugs:
# | * [#46105] mf: Implement MFCreateSequencerSource
# |
# | Modified files:
# | * dlls/mf/main.c, dlls/mf/mf.spec, dlls/mf/tests/Makefile.in, dlls/mf/tests/mf.c, include/mfidl.idl
# |
if test "$enable_mf_MFCreateSequencerSource" -eq 1; then
patch_apply mf-MFCreateSequencerSource/0001-mf-Implement-MFCreateSequencerSource.patch
(
printf '%s\n' '+ { "Alistair Leslie-Hughes", "mf: Implement MFCreateSequencerSource.", 1 },';
) >> "$patchlist"
fi
# Patchset mfplat-MFGetSystemTime
# |
# | This patchset fixes the following Wine bugs:
# | * [#46300] mfplat: Implement MFGetSystemTime
# |
# | Modified files:
# | * dlls/mfplat/main.c, dlls/mfplat/mfplat.spec, include/mfidl.idl
# |
if test "$enable_mfplat_MFGetSystemTime" -eq 1; then
patch_apply mfplat-MFGetSystemTime/0001-mfplat-Implement-MFGetSystemTime.patch
(
printf '%s\n' '+ { "Alistair Leslie-Hughes", "mfplat: Implement MFGetSystemTime.", 1 },';
) >> "$patchlist"
fi
# Patchset mmsystem.dll16-MIDIHDR_Refcount
# |
# | This patchset fixes the following Wine bugs:
@@ -6223,11 +6267,15 @@ fi
# | dlls/uianimation/uianimation_typelib.idl, include/uianimation.idl
# |
if test "$enable_uianimation_stubs" -eq 1; then
patch_apply uianimation-stubs/0001-uianimation.idl-add-more-interfaces.patch
patch_apply uianimation-stubs/0002-uianimation-add-stub-dll.patch
patch_apply uianimation-stubs/0001-uianimation.idl-Add-more-interfaces.patch
patch_apply uianimation-stubs/0002-uianimation-Add-stub-dll.patch
patch_apply uianimation-stubs/0003-uianimation-Implement-IUIAnimationManager-CreateStor.patch
patch_apply uianimation-stubs/0004-uianimation-Implement-IUIAnimationManager-CreateAnim.patch
(
printf '%s\n' '+ { "Louis Lenders", "uianimation.idl: Add more interfaces.", 1 },';
printf '%s\n' '+ { "Louis Lenders", "uianimation: Add stub dll.", 1 },';
printf '%s\n' '+ { "Louis Lenders", "uianimation: Implement IUIAnimationManager CreateStoryboard.", 1 },';
printf '%s\n' '+ { "Louis Lenders", "uianimation: Implement IUIAnimationManager CreateAnimationVariable.", 1 },';
) >> "$patchlist"
fi
@@ -6470,18 +6518,48 @@ if test "$enable_user32_ShowWindow" -eq 1; then
) >> "$patchlist"
fi
# Patchset user32-dialog_focus
# Patchset user32-minimized_windows
# |
# | This patchset fixes the following Wine bugs:
# | * [#46215] File Open Dialog fails to set focus to Filename text box
# | * [#7287] Redundant "tabs" appear with tabbed MDI (test with LTSpice)
# |
# | Modified files:
# | * dlls/user32/dialog.c, dlls/user32/tests/dialog.c
# | * dlls/user32/controls.h, dlls/user32/icontitle.c, dlls/user32/nonclient.c, dlls/user32/tests/win.c, dlls/user32/win.c,
# | dlls/user32/win.h, dlls/user32/winpos.c, dlls/wineandroid.drv/window.c, dlls/wineandroid.drv/wineandroid.drv.spec,
# | dlls/winemac.drv/window.c, dlls/winex11.drv/window.c
# |
if test "$enable_user32_dialog_focus" -eq 1; then
patch_apply user32-dialog_focus/0001-user32-Dont-reset-focus-if-current-control-is-a-chil.patch
if test "$enable_user32_minimized_windows" -eq 1; then
patch_apply user32-minimized_windows/0001-user32-tests-Add-tests-for-GetWindowPlacement-and-Se.patch
patch_apply user32-minimized_windows/0002-user32-SetWindowPos-shouldn-t-change-the-client-rect.patch
patch_apply user32-minimized_windows/0003-user32-Correctly-calculate-the-client-size-of-a-mini.patch
patch_apply user32-minimized_windows/0004-user32-Use-the-C-XY-MINIMIZED-rather-than-C-XY-ICON-.patch
patch_apply user32-minimized_windows/0005-user32-AdjustWindowRect-shouldn-t-ignore-WS_MINIMIZE.patch
patch_apply user32-minimized_windows/0006-user32-tests-Add-tests-for-maximizing-and-minimizing.patch
patch_apply user32-minimized_windows/0007-user32-tests-Add-tests-for-maximizing-and-minimizing.patch
patch_apply user32-minimized_windows/0008-user32-tests-Add-tests-for-maximizing-and-minimizing.patch
patch_apply user32-minimized_windows/0009-user32-tests-Add-tests-for-ArrangeIconicWindows.patch
patch_apply user32-minimized_windows/0010-user32-Reimplement-ArrangeIconicWindows-using-minimi.patch
patch_apply user32-minimized_windows/0011-user32-Correctly-place-minimized-windows.patch
patch_apply user32-minimized_windows/0012-user32-Paint-title-bars-for-minimized-windows.patch
patch_apply user32-minimized_windows/0013-user32-Allow-clicking-the-restore-and-maximize-boxes.patch
patch_apply user32-minimized_windows/0014-user32-Get-rid-of-icon-titles.patch
patch_apply user32-minimized_windows/0015-user32-Move-iconic-windows-as-their-border-instead-o.patch
(
printf '%s\n' '+ { "Alistair Leslie-Hughes", "user32: Dont reset focus if current dialog is a child.", 2 },';
printf '%s\n' '+ { "Zebediah Figura", "user32/tests: Add tests for GetWindowPlacement() and SetWindowPlacement().", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: SetWindowPos() shouldn'\''t change the client rect of a minimized window.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Correctly calculate the client size of a minimized window.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Use the C[XY]MINIMIZED rather than C[XY]ICON size for minimized windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: AdjustWindowRect() shouldn'\''t ignore WS_MINIMIZE.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32/tests: Add tests for maximizing and minimizing owned windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32/tests: Add tests for maximizing and minimizing child windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32/tests: Add tests for maximizing and minimizing MDI child windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32/tests: Add tests for ArrangeIconicWindows().", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Reimplement ArrangeIconicWindows() using minimized metrics.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Correctly place minimized windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Paint title bars for minimized windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Allow clicking the restore and maximize boxes for on minimized windows.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Get rid of icon titles.", 1 },';
printf '%s\n' '+ { "Zebediah Figura", "user32: Move iconic windows as their border instead of their icon.", 1 },';
) >> "$patchlist"
fi
@@ -7112,6 +7190,21 @@ if test "$enable_wined3d_Restore_DirectX10_Support" -eq 1; then
) >> "$patchlist"
fi
# Patchset wined3d-WINED3D_TEXF_ANISOTROPIC
# |
# | This patchset fixes the following Wine bugs:
# | * [#41929] wined3d: Multiple games need WINED3D_TEXF_ANISOTROPIC filter mode
# |
# | Modified files:
# | * dlls/wined3d/surface.c
# |
if test "$enable_wined3d_WINED3D_TEXF_ANISOTROPIC" -eq 1; then
patch_apply wined3d-WINED3D_TEXF_ANISOTROPIC/0001-wined3d-Multiple-games-need-WINED3D_TEXF_ANISOTROPIC.patch
(
printf '%s\n' '+ { "JĂłzef Kucia", "wined3d: Multiple games need WINED3D_TEXF_ANISOTROPIC filter mode.", 1 },';
) >> "$patchlist"
fi
# Patchset wined3d-mesa_texture_download
# |
# | This patchset fixes the following Wine bugs:
@@ -7429,6 +7522,22 @@ if test "$enable_winex11_XEMBED" -eq 1; then
) >> "$patchlist"
fi
# Patchset winex11-ime-check-thread-data
# |
# | This patchset fixes the following Wine bugs:
# | * [#46263] Final Fantasy XI crashes after accepting EULA when using Ashita
# | * [#28861] Final Fantasy XI hangs after character selection
# |
# | Modified files:
# | * dlls/winex11.drv/window.c
# |
if test "$enable_winex11_ime_check_thread_data" -eq 1; then
patch_apply winex11-ime-check-thread-data/0001-winex11.drv-handle-missing-thread-data-in-X11DRV_get_ic.patch
(
printf '%s\n' '+ { "Enrico Horn", "winex11.drv: Handle missing thread data in X11DRV_get_ic.", 1 },';
) >> "$patchlist"
fi
# Patchset winex11-key_translation
# |
# | This patchset fixes the following Wine bugs:

View File

@@ -1,15 +1,15 @@
From 38a99520ce2f97b4a9a6deb1a5d7ba3b4c3819bd Mon Sep 17 00:00:00 2001
From e42a57bc5ee1a09cfa7ad1fa672a0d3b565c1424 Mon Sep 17 00:00:00 2001
From: Louis Lenders <xerox.xerox2000x@gmail.com>
Date: Thu, 7 Jun 2018 11:52:54 +0200
Subject: [PATCH] uianimation.idl: add more interfaces
Subject: [PATCH] uianimation.idl: Add more interfaces
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
---
include/uianimation.idl | 271 +++++++++++++++++++++++++++++++++++++++-
include/uianimation.idl | 271 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 270 insertions(+), 1 deletion(-)
diff --git a/include/uianimation.idl b/include/uianimation.idl
index 6c026a6ced..557d931d3a 100644
index 6c026a6..54bc490 100644
--- a/include/uianimation.idl
+++ b/include/uianimation.idl
@@ -20,6 +20,13 @@ import "unknwn.idl";
@@ -61,11 +61,10 @@ index 6c026a6ced..557d931d3a 100644
[
local,
object,
@@ -334,6 +369,212 @@ interface IUIAnimationTimer : IUnknown
[in] UINT32 fps);
@@ -335,16 +370,250 @@ interface IUIAnimationTimer : IUnknown
}
+[
[
+ local,
+ object,
+ uuid(9169896c-ac8d-4e7d-94e5-67fa4dc2f2e8),
@@ -74,24 +73,24 @@ index 6c026a6ced..557d931d3a 100644
+interface IUIAnimationManager : IUnknown
+{
+ HRESULT CreateAnimationVariable(
+ [in] double initialvalue,
+ [in] UI_ANIMATION_SECONDS initialvalue,
+ [out, retval] IUIAnimationVariable **variable);
+
+ HRESULT ScheduleTransition(
+ [in] IUIAnimationVariable *variable,
+ [in] IUIAnimationTransition *transition,
+ [in] double timenow);
+ [in] UI_ANIMATION_SECONDS timenow);
+
+ HRESULT CreateStoryboard(
+ [out, retval] IUIAnimationStoryboard **storyboard);
+
+ HRESULT FinishAllStoryboards(
+ [in] double deadline);
+ [in] UI_ANIMATION_SECONDS deadline);
+
+ HRESULT AbandonAllStoryboards();
+
+ HRESULT Update(
+ [in] double timenow,
+ [in] UI_ANIMATION_SECONDS timenow,
+ [out, defaultvalue(0)] UI_ANIMATION_UPDATE_RESULT *updateresult);
+
+ HRESULT GetVariableFromTag(
@@ -130,7 +129,7 @@ index 6c026a6ced..557d931d3a 100644
+ [in] IUIAnimationPriorityComparison *comparison);
+
+ HRESULT SetDefaultLongestAcceptableDelay(
+ [in] double delay);
+ [in] UI_ANIMATION_SECONDS delay);
+
+ HRESULT Shutdown();
+}
@@ -175,20 +174,20 @@ index 6c026a6ced..557d931d3a 100644
+ [in] double initialvelocity);
+
+ HRESULT SetDuration(
+ [in] double duration);
+ [in] UI_ANIMATION_SECONDS duration);
+
+ HRESULT GetDuration(
+ [out, retval] double *duration);
+ [out, retval] UI_ANIMATION_SECONDS *duration);
+
+ HRESULT GetFinalValue(
+ [out, retval] double *value);
+
+ HRESULT InterpolateValue(
+ [in] double offset,
+ [in] UI_ANIMATION_SECONDS offset,
+ [out, retval] double *value);
+
+ HRESULT InterpolateVelocity(
+ [in] double offset,
+ [in] UI_ANIMATION_SECONDS offset,
+ [out, retval] double *velocity);
+
+ HRESULT GetDependencies(
@@ -210,17 +209,17 @@ index 6c026a6ced..557d931d3a 100644
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateConstantTransition(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateDiscreteTransition(
+ [in] double delay,
+ [in] UI_ANIMATION_SECONDS delay,
+ [in] double finalvalue,
+ [in] double hold,
+ [in] UI_ANIMATION_SECONDS hold,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateLinearTransition(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [in] double finalvalue,
+ [out, retval] IUIAnimationTransition **transition);
+
@@ -230,51 +229,51 @@ index 6c026a6ced..557d931d3a 100644
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateSinusoidalTransitionFromVelocity(
+ [in] double duration,
+ [in] double period,
+ [in] UI_ANIMATION_SECONDS duration,
+ [in] UI_ANIMATION_SECONDS period,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateSinusoidalTransitionFromRange(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [in] double minimumvalue,
+ [in] double maximumvalue,
+ [in] double period,
+ [in] UI_ANIMATION_SECONDS period,
+ [in] UI_ANIMATION_SLOPE slope,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateAccelerateDecelerateTransition(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [in] double finalvalue,
+ [in] double accelerationratio,
+ [in] double decelerationratio,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateReversalTransition(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateCubicTransition(
+ [in] double duration,
+ [in] UI_ANIMATION_SECONDS duration,
+ [in] double finalvalue,
+ [in] double finalvelocity,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateSmoothStopTransition(
+ [in] double maximumduration,
+ [in] UI_ANIMATION_SECONDS maximumduration,
+ [in] double finalvalue,
+ [out, retval] IUIAnimationTransition **transition);
+
+ HRESULT CreateParabolicTransitionFromAcceleration(
+ [in] double finalvalue,
+ [in] UI_ANIMATION_SECONDS finalvalue,
+ [in] double finalvelocity,
+ [in] double acceleration,
+ [out, retval] IUIAnimationTransition **transition);
+}
+
[
+[
uuid(44ca24db-1a92-4149-bab5-fb14d64b401e),
version(1.0)
@@ -341,10 +582,38 @@ interface IUIAnimationTimer : IUnknown
]
library UIAnimation
{
[
@@ -300,7 +299,7 @@ index 6c026a6ced..557d931d3a 100644
+ uuid(8a9b1cdd-fcd7-419c-8b44-42fd17db1887),
+ threading(both)
+ ]
+ coclass UIAnimationTransitionFactory
+ coclass UIAnimationTransitionFactory
+ {
+ [default] interface IUIAnimationTransitionFactory;
+ }
@@ -309,11 +308,11 @@ index 6c026a6ced..557d931d3a 100644
+ uuid(1d6322ad-aa85-4ef5-a828-86d71067d145),
+ threading(both)
+ ]
+ coclass UIAnimationTransitionLibrary
+ coclass UIAnimationTransitionLibrary
+ {
+ [default] interface IUIAnimationTransitionLibrary;
+ }
}
--
2.17.1
1.9.1

View File

@@ -0,0 +1,254 @@
From e0d49da97e6b83da2de26dacc7932dd0094c6c2a Mon Sep 17 00:00:00 2001
From: Louis Lenders <xerox.xerox2000x@gmail.com>
Date: Mon, 17 Dec 2018 15:40:25 +1100
Subject: [PATCH] uianimation: Implement IUIAnimationManager
CreateStoryboard
---
dlls/uianimation/main.c | 223 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 221 insertions(+), 2 deletions(-)
diff --git a/dlls/uianimation/main.c b/dlls/uianimation/main.c
index 6101827..7a6c68c 100644
--- a/dlls/uianimation/main.c
+++ b/dlls/uianimation/main.c
@@ -106,6 +106,225 @@ static const struct IClassFactoryVtbl class_factory_vtbl =
};
/***********************************************************************
+ * IUIAnimationStoryboard
+ */
+struct animation_storyboard
+{
+ IUIAnimationStoryboard IUIAnimationStoryboard_iface;
+ LONG ref;
+};
+
+struct animation_storyboard *impl_from_IUIAnimationStoryboard( IUIAnimationStoryboard *iface )
+{
+ return CONTAINING_RECORD( iface, struct animation_storyboard, IUIAnimationStoryboard_iface );
+}
+
+static HRESULT WINAPI WINAPI animation_storyboard_QueryInterface( IUIAnimationStoryboard *iface,
+ REFIID iid, void **obj )
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+
+ TRACE( "(%p)->(%s %p)\n", This, debugstr_guid( iid ), obj );
+
+ if (IsEqualIID( iid, &IID_IUnknown ) ||
+ IsEqualIID( iid, &IID_IUIAnimationStoryboard ))
+ {
+ IUIAnimationStoryboard_AddRef( iface );
+ *obj = iface;
+ return S_OK;
+ }
+
+ FIXME( "interface %s not implemented\n", debugstr_guid( iid ) );
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI animation_storyboard_AddRef( IUIAnimationStoryboard *iface )
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ ULONG ref = InterlockedIncrement( &This->ref );
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+ return ref;
+}
+
+static ULONG WINAPI animation_storyboard_Release( IUIAnimationStoryboard *iface )
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+
+ if (!ref)
+ heap_free( This );
+
+ return ref;
+}
+
+static HRESULT WINAPI animation_storyboard_AddTransition (IUIAnimationStoryboard *iface, IUIAnimationVariable *variable,
+ IUIAnimationTransition *transition)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+static HRESULT WINAPI animation_storyboard_AddKeyframeAtOffset (IUIAnimationStoryboard *iface, UI_ANIMATION_KEYFRAME existingframe,
+ UI_ANIMATION_SECONDS offset, UI_ANIMATION_KEYFRAME *keyframe)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_AddKeyframeAfterTransition (IUIAnimationStoryboard *iface,IUIAnimationTransition *transition,
+ UI_ANIMATION_KEYFRAME *keyframe)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+static HRESULT WINAPI animation_storyboard_AddTransitionAtKeyframe (IUIAnimationStoryboard *iface, IUIAnimationVariable *variable,
+ IUIAnimationTransition *transition, UI_ANIMATION_KEYFRAME start_key)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_AddTransitionBetweenKeyframes (IUIAnimationStoryboard *iface, IUIAnimationVariable *variable,
+ IUIAnimationTransition *transition, UI_ANIMATION_KEYFRAME start_key, UI_ANIMATION_KEYFRAME end_key)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_RepeatBetweenKeyframes (IUIAnimationStoryboard *iface, UI_ANIMATION_KEYFRAME start_key,
+ UI_ANIMATION_KEYFRAME end_key, INT32 count)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+static HRESULT WINAPI animation_storyboard_HoldVariable (IUIAnimationStoryboard *iface, IUIAnimationVariable *variable)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_SetLongestAcceptableDelay (IUIAnimationStoryboard *iface, UI_ANIMATION_SECONDS delay)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_Schedule (IUIAnimationStoryboard *iface, UI_ANIMATION_SECONDS now,
+ UI_ANIMATION_SCHEDULING_RESULT *result)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return 0;
+}
+
+static HRESULT WINAPI animation_storyboard_Conclude (IUIAnimationStoryboard *iface)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_Finish (IUIAnimationStoryboard *iface, UI_ANIMATION_SECONDS deadline)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_Abandon (IUIAnimationStoryboard *iface)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_SetTag(IUIAnimationStoryboard *iface, IUnknown *object, UINT32 id)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_GetTag (IUIAnimationStoryboard *iface, IUnknown **object, UINT32 *id)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_GetStatus (IUIAnimationStoryboard *iface, UI_ANIMATION_STORYBOARD_STATUS *status)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_GetElapsedTime (IUIAnimationStoryboard *iface, UI_ANIMATION_SECONDS *elapsed)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_storyboard_SetStoryboardEventHandler (IUIAnimationStoryboard *iface, IUIAnimationStoryboardEventHandler *handler)
+{
+ struct animation_storyboard *This = impl_from_IUIAnimationStoryboard( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+const struct IUIAnimationStoryboardVtbl animation_storyboard_vtbl =
+{
+ animation_storyboard_QueryInterface,
+ animation_storyboard_AddRef,
+ animation_storyboard_Release,
+ animation_storyboard_AddTransition,
+ animation_storyboard_AddKeyframeAtOffset,
+ animation_storyboard_AddKeyframeAfterTransition,
+ animation_storyboard_AddTransitionAtKeyframe,
+ animation_storyboard_AddTransitionBetweenKeyframes,
+ animation_storyboard_RepeatBetweenKeyframes,
+ animation_storyboard_HoldVariable,
+ animation_storyboard_SetLongestAcceptableDelay,
+ animation_storyboard_Schedule ,
+ animation_storyboard_Conclude ,
+ animation_storyboard_Finish ,
+ animation_storyboard_Abandon,
+ animation_storyboard_SetTag,
+ animation_storyboard_GetTag ,
+ animation_storyboard_GetStatus ,
+ animation_storyboard_GetElapsedTime,
+ animation_storyboard_SetStoryboardEventHandler
+};
+
+static HRESULT animation_storyboard_create( IUIAnimationStoryboard **obj )
+{
+ struct animation_storyboard *This = heap_alloc( sizeof(*This) );
+
+ if (!This) return E_OUTOFMEMORY;
+ This->IUIAnimationStoryboard_iface.lpVtbl = &animation_storyboard_vtbl;
+ This->ref = 1;
+
+ *obj = &This->IUIAnimationStoryboard_iface;
+
+ return S_OK;
+}
+
+/***********************************************************************
* IUIAnimationManager
*/
struct manager
@@ -179,8 +398,8 @@ static HRESULT WINAPI manager_ScheduleTransition( IUIAnimationManager *iface, IU
static HRESULT WINAPI manager_CreateStoryboard( IUIAnimationManager *iface, IUIAnimationStoryboard **storyboard )
{
struct manager *This = impl_from_IUIAnimationManager( iface );
- FIXME( "stub (%p)->( )\n", This );
- return E_NOTIMPL;
+ TRACE( "(%p)->(%p)\n", This, storyboard );
+ return animation_storyboard_create(storyboard);
}
static HRESULT WINAPI manager_FinishAllStoryboards( IUIAnimationManager *iface, UI_ANIMATION_SECONDS max_time )
--
1.9.1

View File

@@ -0,0 +1,226 @@
From 364510214da84841cbf9b8cb4546ab7c84824115 Mon Sep 17 00:00:00 2001
From: Louis Lenders <xerox.xerox2000x@gmail.com>
Date: Mon, 17 Dec 2018 15:44:49 +1100
Subject: [PATCH] uianimation: Implement IUIAnimationManager
CreateAnimationVariable
---
dlls/uianimation/main.c | 195 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 193 insertions(+), 2 deletions(-)
diff --git a/dlls/uianimation/main.c b/dlls/uianimation/main.c
index 7a6c68c..3dc9e30 100644
--- a/dlls/uianimation/main.c
+++ b/dlls/uianimation/main.c
@@ -325,6 +325,197 @@ static HRESULT animation_storyboard_create( IUIAnimationStoryboard **obj )
}
/***********************************************************************
+ * IUIAnimationVariable
+ */
+struct animation_var
+{
+ IUIAnimationVariable IUIAnimationVariable_iface;
+ LONG ref;
+ DOUBLE initial;
+};
+
+struct animation_var *impl_from_IUIAnimationVariable( IUIAnimationVariable *iface )
+{
+ return CONTAINING_RECORD( iface, struct animation_var, IUIAnimationVariable_iface );
+}
+
+static HRESULT WINAPI WINAPI animation_var_QueryInterface( IUIAnimationVariable *iface,
+ REFIID iid, void **obj )
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+
+ TRACE( "(%p)->(%s %p)\n", This, debugstr_guid( iid ), obj );
+
+ if (IsEqualIID( iid, &IID_IUnknown ) ||
+ IsEqualIID( iid, &IID_IUIAnimationVariable ))
+ {
+ IUIAnimationVariable_AddRef( iface );
+ *obj = iface;
+ return S_OK;
+ }
+
+ FIXME( "interface %s not implemented\n", debugstr_guid( iid ) );
+ *obj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI animation_var_AddRef( IUIAnimationVariable *iface )
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ ULONG ref = InterlockedIncrement( &This->ref );
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+ return ref;
+}
+
+static ULONG WINAPI animation_var_Release( IUIAnimationVariable *iface )
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE( "(%p) ref = %u\n", This, ref );
+
+ if (!ref)
+ heap_free( This );
+
+ return ref;
+}
+
+static HRESULT WINAPI animation_var_GetValue ( IUIAnimationVariable *iface, DOUBLE *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetFinalValue ( IUIAnimationVariable *iface, DOUBLE *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetPreviousValue ( IUIAnimationVariable *iface, DOUBLE *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetIntegerValue ( IUIAnimationVariable *iface, INT32 *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetFinalIntegerValue ( IUIAnimationVariable *iface, INT32 *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetPreviousIntegerValue ( IUIAnimationVariable *iface, INT32 *value)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetCurrentStoryboard ( IUIAnimationVariable *iface, IUIAnimationStoryboard **storyboard)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_SetLowerBound ( IUIAnimationVariable *iface, DOUBLE bound)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_SetUpperBound ( IUIAnimationVariable *iface, DOUBLE bound)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_SetRoundingMode ( IUIAnimationVariable *iface,UI_ANIMATION_ROUNDING_MODE mode)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+static HRESULT WINAPI animation_var_SetTag ( IUIAnimationVariable *iface, IUnknown *object, UINT32 id)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_GetTag ( IUIAnimationVariable *iface, IUnknown **object, UINT32 *id)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI animation_var_SetVariableChangeHandler ( IUIAnimationVariable *iface, IUIAnimationVariableChangeHandler *handler)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+static HRESULT WINAPI animation_var_SetVariableIntegerChangeHandler ( IUIAnimationVariable *iface,
+ IUIAnimationVariableIntegerChangeHandler *handler)
+{
+ struct animation_var *This = impl_from_IUIAnimationVariable( iface );
+ FIXME( "stub (%p)->( )\n", This );
+ return S_OK;
+}
+
+const struct IUIAnimationVariableVtbl animation_var_vtbl =
+{
+ animation_var_QueryInterface,
+ animation_var_AddRef,
+ animation_var_Release,
+ animation_var_GetValue,
+ animation_var_GetFinalValue,
+ animation_var_GetPreviousValue,
+ animation_var_GetIntegerValue,
+ animation_var_GetFinalIntegerValue,
+ animation_var_GetPreviousIntegerValue,
+ animation_var_GetCurrentStoryboard,
+ animation_var_SetLowerBound,
+ animation_var_SetUpperBound,
+ animation_var_SetRoundingMode,
+ animation_var_SetTag,
+ animation_var_GetTag,
+ animation_var_SetVariableChangeHandler,
+ animation_var_SetVariableIntegerChangeHandler,
+};
+
+static HRESULT animation_var_create(DOUBLE initial, IUIAnimationVariable **obj )
+{
+ struct animation_var *This = heap_alloc( sizeof(*This) );
+
+ if (!This) return E_OUTOFMEMORY;
+ This->IUIAnimationVariable_iface.lpVtbl = &animation_var_vtbl;
+ This->ref = 1;
+ This->initial = initial;
+
+ *obj = &This->IUIAnimationVariable_iface;
+
+ return S_OK;
+}
+
+/***********************************************************************
* IUIAnimationManager
*/
struct manager
@@ -384,8 +575,8 @@ static ULONG WINAPI manager_Release( IUIAnimationManager *iface )
static HRESULT WINAPI manager_CreateAnimationVariable( IUIAnimationManager *iface, DOUBLE initial_value, IUIAnimationVariable **variable )
{
struct manager *This = impl_from_IUIAnimationManager( iface );
- FIXME( "stub (%p)->( )\n", This );
- return E_NOTIMPL;
+ TRACE( "(%p)->(%p)\n", This, variable );
+ return animation_var_create(initial_value, variable);
}
static HRESULT WINAPI manager_ScheduleTransition( IUIAnimationManager *iface, IUIAnimationVariable *variable, IUIAnimationTransition *transition, UI_ANIMATION_SECONDS current_time )
--
1.9.1

View File

@@ -1,127 +0,0 @@
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Subject: [PATCH v2] user32: Dont reset focus if current dialog is a child.
Message-Id: <PS2P216MB0066A5295ACFD65599E9D23E93A10@PS2P216MB0066.KORP216.PROD.OUTLOOK.COM>
Date: Fri, 14 Dec 2018 04:00:43 +0000
Regression of 44f89322ba8825a8e4851aaaf7de89910701ca75
The standard File Open Dialog, creates an empty WS_EX_CONTROLPARENT
child dialog which shouldn't receive focus.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46215
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/user32/dialog.c | 5 +++-
dlls/user32/tests/dialog.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 76 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index 0b33a57..72e6eee 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -692,7 +692,10 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
SetFocus( focus );
}
else
- SetFocus( hwnd );
+ {
+ if (!(template.style & WS_CHILD))
+ SetFocus( hwnd );
+ }
}
}
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
index 631f3d3..ff6052f 100644
--- a/dlls/user32/tests/dialog.c
+++ b/dlls/user32/tests/dialog.c
@@ -907,6 +907,55 @@ static INT_PTR CALLBACK focusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam,
return FALSE;
}
+static INT_PTR CALLBACK EmptyProcUserTemplate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch(uMsg) {
+ case WM_INITDIALOG:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+HWND hChildDlg = NULL;
+static INT_PTR CALLBACK focusChildDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam,
+ LPARAM lParam)
+{
+ switch (uiMsg)
+ {
+ case WM_INITDIALOG:
+ {
+ RECT rectHwnd;
+ struct {
+ DLGTEMPLATE tmplate;
+ WORD menu,class,title;
+ } temp;
+
+ SetFocus( GetDlgItem(hwnd, 200) );
+
+ GetClientRect(hwnd,&rectHwnd);
+ temp.tmplate.style = WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | DS_CONTROL | DS_3DLOOK;
+ temp.tmplate.dwExtendedStyle = 0;
+ temp.tmplate.cdit = 0;
+ temp.tmplate.x = 0;
+ temp.tmplate.y = 0;
+ temp.tmplate.cx = 0;
+ temp.tmplate.cy = 0;
+ temp.menu = temp.class = temp.title = 0;
+
+ hChildDlg = CreateDialogIndirectParamA(g_hinst, &temp.tmplate,
+ hwnd, (DLGPROC)EmptyProcUserTemplate, 0);
+ ok(hChildDlg != 0, "Failed to create test dialog.\n");
+
+ return FALSE;
+ }
+ case WM_CLOSE:
+ DestroyWindow(hChildDlg);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/* Helper for InitialFocusTest */
static const char * GetHwndString(HWND hw)
{
@@ -1093,6 +1142,29 @@ static void test_focus(void)
DestroyWindow(hDlg);
}
+
+ /* Test 6:
+ * Select textbox's text on creation when WM_INITDIALOG creates a child dialog. */
+ {
+ HWND hDlg;
+ HRSRC hResource;
+ HANDLE hTemplate;
+ DLGTEMPLATE* pTemplate;
+ HWND edit;
+
+ hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG_3", (LPCSTR)RT_DIALOG);
+ hTemplate = LoadResource(g_hinst, hResource);
+ pTemplate = LockResource(hTemplate);
+
+ hDlg = CreateDialogIndirectParamA(g_hinst, pTemplate, NULL, focusChildDlgWinProc, 0);
+ ok(hDlg != 0, "Failed to create test dialog.\n");
+ edit = GetDlgItem(hDlg, 200);
+
+ ok(GetFocus() == edit, "Focus not set to edit, focus=%p, dialog=%p, edit=%p\n",
+ GetFocus(), hDlg, edit);
+
+ DestroyWindow(hDlg);
+ }
}
static void test_GetDlgItemText(void)
--
1.9.1

View File

@@ -1 +0,0 @@
Fixes: [46215] File Open Dialog fails to set focus to Filename text box

View File

@@ -0,0 +1,224 @@
From b80ed82abdd82dcf8fe40c7618db978ebb094ecc Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 19 Dec 2018 10:31:22 -0600
Subject: [PATCH 01/15] user32/tests: Add tests for GetWindowPlacement() and
SetWindowPlacement().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/user32/tests/win.c | 192 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 192 insertions(+)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 94eff5ee4f..85b2b3a514 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -10721,6 +10721,197 @@ static void test_IsWindowEnabled(void)
DestroyWindow(hwnd);
}
+static void test_window_placement(void)
+{
+ RECT orig = {100, 200, 300, 400}, orig2 = {200, 300, 400, 500}, rect;
+ WINDOWPLACEMENT wp = {sizeof(wp)};
+ HWND hwnd;
+ BOOL ret;
+
+ hwnd = CreateWindowA("MainWindowClass", "wp", WS_OVERLAPPEDWINDOW,
+ orig.left, orig.top, orig.right - orig.left, orig.bottom - orig.top, 0, 0, 0, 0);
+ ok(!!hwnd, "failed to create window, error %u\n", GetLastError());
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWNORMAL, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -1 && wp.ptMinPosition.y == -1,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_MINIMIZE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(!wp.flags, "got flags %#x\n", wp.flags);
+ ok(wp.showCmd == SW_SHOWMINIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_RESTORE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWNORMAL, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_MAXIMIZE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWMAXIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ SetWindowPos(hwnd, 0, 100, 100, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWMAXIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+ ok(wp.ptMaxPosition.x == 100 && wp.ptMaxPosition.y == 100,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_MINIMIZE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.flags == WPF_RESTORETOMAXIMIZED, "got flags %#x\n", wp.flags);
+ ok(wp.showCmd == SW_SHOWMINIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_RESTORE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWMAXIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_RESTORE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWNORMAL, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ wp.flags = WPF_SETMINPOSITION;
+ wp.ptMinPosition.x = wp.ptMinPosition.y = 100;
+ wp.ptMaxPosition.x = wp.ptMaxPosition.y = 100;
+ wp.rcNormalPosition = orig2;
+ ret = SetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to set window placement, error %u\n", GetLastError());
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWNORMAL, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == 100 && wp.ptMinPosition.y == 100,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig2), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+ GetWindowRect(hwnd, &rect);
+ ok(EqualRect(&rect, &orig2), "got window rect %s\n", wine_dbgstr_rect(&rect));
+
+ ShowWindow(hwnd, SW_MINIMIZE);
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(!wp.flags, "got flags %#x\n", wp.flags);
+ ok(wp.showCmd == SW_SHOWMINIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig2), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_RESTORE);
+
+ wp.flags = WPF_SETMINPOSITION;
+ wp.showCmd = SW_MINIMIZE;
+ wp.ptMinPosition.x = wp.ptMinPosition.y = 100;
+ wp.ptMaxPosition.x = wp.ptMaxPosition.y = 100;
+ wp.rcNormalPosition = orig;
+ ret = SetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to set window placement, error %u\n", GetLastError());
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(!wp.flags, "got flags %#x\n", wp.flags);
+ ok(wp.showCmd == SW_SHOWMINIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == -32000 && wp.ptMinPosition.y == -32000,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ ShowWindow(hwnd, SW_RESTORE);
+
+ wp.flags = WPF_SETMINPOSITION;
+ wp.showCmd = SW_MAXIMIZE;
+ wp.ptMinPosition.x = wp.ptMinPosition.y = 100;
+ wp.ptMaxPosition.x = wp.ptMaxPosition.y = 100;
+ wp.rcNormalPosition = orig;
+ ret = SetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to set window placement, error %u\n", GetLastError());
+
+ ret = GetWindowPlacement(hwnd, &wp);
+ ok(ret, "failed to get window placement, error %u\n", GetLastError());
+ ok(wp.showCmd == SW_SHOWMAXIMIZED, "got show cmd %u\n", wp.showCmd);
+ ok(wp.ptMinPosition.x == 100 && wp.ptMinPosition.y == 100,
+ "got minimized pos (%d,%d)\n", wp.ptMinPosition.x, wp.ptMinPosition.y);
+todo_wine
+ ok(wp.ptMaxPosition.x == -1 && wp.ptMaxPosition.y == -1,
+ "got maximized pos (%d,%d)\n", wp.ptMaxPosition.x, wp.ptMaxPosition.y);
+ ok(EqualRect(&wp.rcNormalPosition, &orig), "got normal pos %s\n",
+ wine_dbgstr_rect(&wp.rcNormalPosition));
+
+ DestroyWindow(hwnd);
+}
+
START_TEST(win)
{
char **argv;
@@ -10878,6 +11069,7 @@ START_TEST(win)
test_minimize_window(hwndMain);
test_destroy_quit();
test_IsWindowEnabled();
+ test_window_placement();
/* add the tests above this line */
if (hhook) UnhookWindowsHookEx(hhook);
--
2.19.2

View File

@@ -0,0 +1,51 @@
From dfa57f43321be68d80204bcc960e62b1f341b5ad Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 20 Dec 2017 23:51:26 -0600
Subject: [PATCH 02/15] user32: SetWindowPos() shouldn't change the client rect
of a minimized window.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
dlls/user32/tests/win.c | 12 ++++++++++++
dlls/user32/winpos.c | 2 +-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 85b2b3a514..5f34b11e4b 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -6503,6 +6503,18 @@ static void test_ShowWindow(void)
wine_dbgstr_rect(&rcMinimized), wine_dbgstr_rect(&rc));
GetClientRect(hwnd, &rc);
todo_wine
+ ok(EqualRect(&rcEmpty, &rc), "expected %s, got %s\n",
+ wine_dbgstr_rect(&rcEmpty), wine_dbgstr_rect(&rc));
+ /* SetWindowPos shouldn't affect the client rect */
+ ret = SetWindowPos(hwnd, 0, 0, 0, 0, 0,
+ SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
+ ok(ret, "not expected ret: %lu\n", ret);
+ GetWindowRect(hwnd, &rc);
+ todo_wine
+ ok(EqualRect(&rcMinimized, &rc), "expected %s, got %s\n",
+ wine_dbgstr_rect(&rcMinimized), wine_dbgstr_rect(&rc));
+ GetClientRect(hwnd, &rc);
+ todo_wine
ok(EqualRect(&rcEmpty, &rc), "expected %s, got %s\n",
wine_dbgstr_rect(&rcEmpty), wine_dbgstr_rect(&rc));
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index 4b39d0aa39..38444b243f 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -1699,7 +1699,7 @@ static BOOL SWP_DoWinPosChanging( WINDOWPOS *pWinpos, RECT *old_window_rect, REC
WIN_GetRectangles( pWinpos->hwnd, COORDS_PARENT, old_window_rect, old_client_rect );
*new_window_rect = *old_window_rect;
- *new_client_rect = (wndPtr->dwStyle & WS_MINIMIZE) ? *old_window_rect : *old_client_rect;
+ *new_client_rect = *old_client_rect;
if (!(pWinpos->flags & SWP_NOSIZE))
{
--
2.19.2

Some files were not shown because too many files have changed in this diff Show More