Compare commits

..

13 Commits
v6.19 ... v6.20

Author SHA1 Message Date
Alistair Leslie-Hughes
3fb6eb99a7 Release v6.20 2021-10-23 09:02:51 +11:00
Alistair Leslie-Hughes
2677a11f41 Rebase against faf645d01632e4cf7ef056a86a675a12df39a80e. 2021-10-23 09:00:13 +11:00
Alistair Leslie-Hughes
6fd31b354c Rebase against fdc2d415b0dd5c12c83156bd41161ff135d25105. 2021-10-22 11:53:53 +11:00
Zebediah Figura
4eaa5b69b8 ntdll-NtAlertThreadByThreadId: Make Win32 futexes fair.
Resident Evil 8 depends on this.
2021-10-20 22:25:15 -05:00
Alistair Leslie-Hughes
feb91195ff Rebase against f712a98d12d091c5437159a291857dfb9f0cea7c. 2021-10-21 09:41:51 +11:00
Alistair Leslie-Hughes
164b361be6 Rebase against 530c1839603bd3caa1b9d17fe458b5bd341ccfc9. 2021-10-19 10:42:04 +11:00
Zebediah Figura
6bc16f96f7 Rebase against 0925a730272ed0c97f64c3365ebe542401f60d7c. 2021-10-17 00:03:09 -05:00
Alistair Leslie-Hughes
688eeca0be Rebase against 6d307e2a647e71c21106feb0d62e371b3e55ab38. 2021-10-14 08:51:40 +11:00
Alistair Leslie-Hughes
1af920f698 Rebase against 50f889fd19d329bef7c001f9eafd1030fc1e3a56. 2021-10-13 09:41:59 +11:00
Alistair Leslie-Hughes
f3fd4a3903 Remove re-implemented dinput patchsets
The HID code for handling devices, make it possible to remove some
of the existing patchset.
2021-10-12 11:52:05 +11:00
Alistair Leslie-Hughes
56a387bf1d Restore change after rebase 2021-10-12 10:39:18 +11:00
Alistair Leslie-Hughes
c7f16e15e7 Rebase against dfeded6460ce067fe1c0540306c2964a170bed2a. 2021-10-12 09:22:48 +11:00
Zebediah Figura
5e9626af6c eventfd_synchronization: Include unistd.h in files using close(2).
Something on Linux pulls this in, but not on Mac.
2021-10-10 12:38:19 -05:00
68 changed files with 557 additions and 8145 deletions

View File

@@ -1,4 +1,4 @@
From 281b0621aa872330ab61f927750deb0753417ec8 Mon Sep 17 00:00:00 2001
From 34109c1adac6293a87db004d60d342faeb33fcfe Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 8 Jun 2021 09:34:28 +1000
Subject: [PATCH] d3d10: Avoid implicit cast of interface pointer.
@@ -8,10 +8,10 @@ Subject: [PATCH] d3d10: Avoid implicit cast of interface pointer.
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/d3d10/effect.c b/dlls/d3d10/effect.c
index 5a5f9f37e6d..c127cb2bd2d 100644
index 3b4050460a0..b03ed2d6c89 100644
--- a/dlls/d3d10/effect.c
+++ b/dlls/d3d10/effect.c
@@ -131,7 +131,7 @@ static inline struct d3d10_effect_variable *impl_from_ID3D10EffectVariable(ID3D1
@@ -147,7 +147,7 @@ static inline struct d3d10_effect_variable *impl_from_ID3D10EffectVariable(ID3D1
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectShaderVariable(ID3D10EffectShaderVariable *iface)
{
@@ -19,8 +19,8 @@ index 5a5f9f37e6d..c127cb2bd2d 100644
+ return CONTAINING_RECORD((ID3D10EffectVariable*)iface, struct d3d10_effect_variable, ID3D10EffectVariable_iface);
}
enum d3d10_effect_container_type
@@ -4969,7 +4969,7 @@ static void read_variable_array_from_buffer(struct d3d10_effect_variable *variab
static struct d3d10_effect_variable * d3d10_array_get_element(struct d3d10_effect_variable *v,
@@ -4876,7 +4876,7 @@ static void read_variable_array_from_buffer(struct d3d10_effect_variable *variab
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectScalarVariable(ID3D10EffectScalarVariable *iface)
{
@@ -29,7 +29,7 @@ index 5a5f9f37e6d..c127cb2bd2d 100644
}
static BOOL STDMETHODCALLTYPE d3d10_effect_scalar_variable_IsValid(ID3D10EffectScalarVariable *iface)
@@ -5305,7 +5305,7 @@ static const struct ID3D10EffectScalarVariableVtbl d3d10_effect_scalar_variable_
@@ -5212,7 +5212,7 @@ static const struct ID3D10EffectScalarVariableVtbl d3d10_effect_scalar_variable_
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectVectorVariable(ID3D10EffectVectorVariable *iface)
{
@@ -38,7 +38,7 @@ index 5a5f9f37e6d..c127cb2bd2d 100644
}
static BOOL STDMETHODCALLTYPE d3d10_effect_vector_variable_IsValid(ID3D10EffectVectorVariable *iface)
@@ -5792,7 +5792,7 @@ static void read_matrix_variable_array_from_buffer(struct d3d10_effect_variable
@@ -5699,7 +5699,7 @@ static void read_matrix_variable_array_from_buffer(struct d3d10_effect_variable
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectMatrixVariable(ID3D10EffectMatrixVariable *iface)
{
@@ -47,7 +47,7 @@ index 5a5f9f37e6d..c127cb2bd2d 100644
}
static BOOL STDMETHODCALLTYPE d3d10_effect_matrix_variable_IsValid(ID3D10EffectMatrixVariable *iface)
@@ -6315,7 +6315,7 @@ static void set_shader_resource_variable(ID3D10ShaderResourceView **src, ID3D10S
@@ -6222,7 +6222,7 @@ static void set_shader_resource_variable(ID3D10ShaderResourceView **src, ID3D10S
static inline struct d3d10_effect_variable *impl_from_ID3D10EffectShaderResourceVariable(
ID3D10EffectShaderResourceVariable *iface)
{

View File

@@ -1,4 +1,4 @@
From f73bf747238e157fc73f8b62941d3d8aa4b6bb33 Mon Sep 17 00:00:00 2001
From b094a7cf3f804ea40e5bd05ad738c48b5464e0bb Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 6 Oct 2014 05:06:06 +0200
Subject: [PATCH] dbghelp: Always check for debug symbols in BINDIR.
@@ -9,12 +9,13 @@ Subject: [PATCH] dbghelp: Always check for debug symbols in BINDIR.
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/dbghelp/Makefile.in b/dlls/dbghelp/Makefile.in
index b2a5e2037e9..7140cc9f181 100644
index 22be2612eeb..f3f31eb3671 100644
--- a/dlls/dbghelp/Makefile.in
+++ b/dlls/dbghelp/Makefile.in
@@ -1,6 +1,6 @@
MODULE = dbghelp.dll
@@ -2,7 +2,7 @@ MODULE = dbghelp.dll
IMPORTLIB = dbghelp
IMPORTS = $(ZLIB_PE_LIBS)
EXTRAINCL = $(ZLIB_PE_CFLAGS)
-EXTRADEFS = -D_IMAGEHLP_SOURCE_
+EXTRADEFS = -D_IMAGEHLP_SOURCE_ -DBINDIR="L\"${bindir}\""
DELAYIMPORTS = version

View File

@@ -1,2 +1,3 @@
Fixes: [47326] dinput: Allow mapping of controls based of genre type.
Depends: dinput-joy-mappings
Disabled: True

View File

@@ -1,214 +0,0 @@
From 24829b2ba6d5efd950f178b8282dda826c4d1df0 Mon Sep 17 00:00:00 2001
From: Bruno Jesus <bjesus@codeweavers.com>
Date: Thu, 28 Feb 2019 15:56:18 +1100
Subject: [PATCH] dinput: Recalculated Axis after deadzone change.
Wine-bugs: https://bugs.winehq.org/show_bug.cgi?id=41317
---
dlls/dinput/joystick.c | 149 ++++++++++++++++++++++-------------------
1 file changed, 80 insertions(+), 69 deletions(-)
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
index 433348cd04..c150528e3d 100644
--- a/dlls/dinput/joystick.c
+++ b/dlls/dinput/joystick.c
@@ -312,6 +312,76 @@ BOOL is_xinput_device(const DIDEVCAPS *devcaps, WORD vid, WORD pid)
return (devcaps->dwAxes == 6 && devcaps->dwButtons >= 14);
}
+static void remap_init(JoystickGenericImpl *This, int obj, ObjProps *remap_props)
+{
+ /* Configure as if nothing changed so the helper functions can only change
+ * what they need, thus reducing code duplication. */
+ remap_props->lDevMin = remap_props->lMin = This->props[obj].lMin;
+ remap_props->lDevMax = remap_props->lMax = This->props[obj].lMax;
+
+ remap_props->lDeadZone = This->props[obj].lDeadZone;
+ remap_props->lSaturation = This->props[obj].lSaturation;
+}
+
+static void remap_apply(JoystickGenericImpl *This, int obj, ObjProps *remap_props)
+{
+ /* Many games poll the joystick immediately after setting the range
+ * for calibration purposes, so the old values need to be remapped
+ * to the new range before it does so */
+ switch (This->base.data_format.wine_df->rgodf[obj].dwOfs){
+ case DIJOFS_X : This->js.lX = joystick_map_axis(remap_props, This->js.lX); break;
+ case DIJOFS_Y : This->js.lY = joystick_map_axis(remap_props, This->js.lY); break;
+ case DIJOFS_Z : This->js.lZ = joystick_map_axis(remap_props, This->js.lZ); break;
+ case DIJOFS_RX : This->js.lRx = joystick_map_axis(remap_props, This->js.lRx); break;
+ case DIJOFS_RY : This->js.lRy = joystick_map_axis(remap_props, This->js.lRy); break;
+ case DIJOFS_RZ : This->js.lRz = joystick_map_axis(remap_props, This->js.lRz); break;
+ case DIJOFS_SLIDER(0): This->js.rglSlider[0] = joystick_map_axis(remap_props, This->js.rglSlider[0]); break;
+ case DIJOFS_SLIDER(1): This->js.rglSlider[1] = joystick_map_axis(remap_props, This->js.rglSlider[1]); break;
+ default: break;
+ }
+}
+
+static void remap_range(JoystickGenericImpl *This, int obj, LPCDIPROPRANGE pr)
+{
+ ObjProps remap_props;
+ remap_init(This, obj, &remap_props);
+
+ remap_props.lMin = pr->lMin;
+ remap_props.lMax = pr->lMax;
+
+ remap_apply(This, obj, &remap_props);
+
+ /* Store new values */
+ This->props[obj].lMin = pr->lMin;
+ This->props[obj].lMax = pr->lMax;
+}
+
+static void remap_deadzone(JoystickGenericImpl *This, int obj, LPCDIPROPDWORD pd)
+{
+ ObjProps remap_props;
+ remap_init(This, obj, &remap_props);
+
+ remap_props.lDeadZone = pd->dwData;
+
+ remap_apply(This, obj, &remap_props);
+
+ /* Store new value */
+ This->props[obj].lDeadZone = pd->dwData;
+}
+
+static void remap_saturation(JoystickGenericImpl *This, int obj, LPCDIPROPDWORD pd)
+{
+ ObjProps remap_props;
+ remap_init(This, obj, &remap_props);
+
+ remap_props.lSaturation = pd->dwData;
+
+ remap_apply(This, obj, &remap_props);
+
+ /* Store new value */
+ This->props[obj].lSaturation = pd->dwData;
+}
+
/******************************************************************************
* SetProperty : change input device properties
*/
@@ -319,7 +389,6 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
{
JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface);
DWORD i;
- ObjProps remap_props;
TRACE("(%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
@@ -336,69 +405,15 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
case (DWORD_PTR)DIPROP_RANGE: {
LPCDIPROPRANGE pr = (LPCDIPROPRANGE)ph;
if (ph->dwHow == DIPH_DEVICE) {
-
- /* Many games poll the joystick immediately after setting the range
- * for calibration purposes, so the old values need to be remapped
- * to the new range before it does so */
-
TRACE("proprange(%d,%d) all\n", pr->lMin, pr->lMax);
- for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++) {
-
- remap_props.lDevMin = This->props[i].lMin;
- remap_props.lDevMax = This->props[i].lMax;
-
- remap_props.lDeadZone = This->props[i].lDeadZone;
- remap_props.lSaturation = This->props[i].lSaturation;
-
- remap_props.lMin = pr->lMin;
- remap_props.lMax = pr->lMax;
-
- switch (This->base.data_format.wine_df->rgodf[i].dwOfs) {
- case DIJOFS_X : This->js.lX = joystick_map_axis(&remap_props, This->js.lX); break;
- case DIJOFS_Y : This->js.lY = joystick_map_axis(&remap_props, This->js.lY); break;
- case DIJOFS_Z : This->js.lZ = joystick_map_axis(&remap_props, This->js.lZ); break;
- case DIJOFS_RX : This->js.lRx = joystick_map_axis(&remap_props, This->js.lRx); break;
- case DIJOFS_RY : This->js.lRy = joystick_map_axis(&remap_props, This->js.lRy); break;
- case DIJOFS_RZ : This->js.lRz = joystick_map_axis(&remap_props, This->js.lRz); break;
- case DIJOFS_SLIDER(0): This->js.rglSlider[0] = joystick_map_axis(&remap_props, This->js.rglSlider[0]); break;
- case DIJOFS_SLIDER(1): This->js.rglSlider[1] = joystick_map_axis(&remap_props, This->js.rglSlider[1]); break;
- default: break;
- }
-
- This->props[i].lMin = pr->lMin;
- This->props[i].lMax = pr->lMax;
- }
+ for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
+ remap_range(This, i, pr);
} else {
int obj = find_property(&This->base.data_format, ph);
TRACE("proprange(%d,%d) obj=%d\n", pr->lMin, pr->lMax, obj);
- if (obj >= 0) {
-
- remap_props.lDevMin = This->props[obj].lMin;
- remap_props.lDevMax = This->props[obj].lMax;
-
- remap_props.lDeadZone = This->props[obj].lDeadZone;
- remap_props.lSaturation = This->props[obj].lSaturation;
-
- remap_props.lMin = pr->lMin;
- remap_props.lMax = pr->lMax;
-
- switch (This->base.data_format.wine_df->rgodf[obj].dwOfs) {
- case DIJOFS_X : This->js.lX = joystick_map_axis(&remap_props, This->js.lX); break;
- case DIJOFS_Y : This->js.lY = joystick_map_axis(&remap_props, This->js.lY); break;
- case DIJOFS_Z : This->js.lZ = joystick_map_axis(&remap_props, This->js.lZ); break;
- case DIJOFS_RX : This->js.lRx = joystick_map_axis(&remap_props, This->js.lRx); break;
- case DIJOFS_RY : This->js.lRy = joystick_map_axis(&remap_props, This->js.lRy); break;
- case DIJOFS_RZ : This->js.lRz = joystick_map_axis(&remap_props, This->js.lRz); break;
- case DIJOFS_SLIDER(0): This->js.rglSlider[0] = joystick_map_axis(&remap_props, This->js.rglSlider[0]); break;
- case DIJOFS_SLIDER(1): This->js.rglSlider[1] = joystick_map_axis(&remap_props, This->js.rglSlider[1]); break;
- default: break;
- }
-
- This->props[obj].lMin = pr->lMin;
- This->props[obj].lMax = pr->lMax;
- return DI_OK;
- }
+ if (obj >= 0)
+ remap_range(This, obj, pr);
}
break;
}
@@ -407,15 +422,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
if (ph->dwHow == DIPH_DEVICE) {
TRACE("deadzone(%d) all\n", pd->dwData);
for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
- This->props[i].lDeadZone = pd->dwData;
+ remap_deadzone(This, i, pd);
} else {
int obj = find_property(&This->base.data_format, ph);
TRACE("deadzone(%d) obj=%d\n", pd->dwData, obj);
- if (obj >= 0) {
- This->props[obj].lDeadZone = pd->dwData;
- return DI_OK;
- }
+ if (obj >= 0)
+ remap_deadzone(This, obj, pd);
}
break;
}
@@ -424,15 +437,13 @@ HRESULT WINAPI JoystickWGenericImpl_SetProperty(LPDIRECTINPUTDEVICE8W iface, REF
if (ph->dwHow == DIPH_DEVICE) {
TRACE("saturation(%d) all\n", pd->dwData);
for (i = 0; i < This->base.data_format.wine_df->dwNumObjs; i++)
- This->props[i].lSaturation = pd->dwData;
+ remap_saturation(This, i, pd);
} else {
int obj = find_property(&This->base.data_format, ph);
TRACE("saturation(%d) obj=%d\n", pd->dwData, obj);
- if (obj >= 0) {
- This->props[obj].lSaturation = pd->dwData;
- return DI_OK;
- }
+ if (obj >= 0)
+ remap_saturation(This, obj, pd);
}
break;
}
--
2.17.1

View File

@@ -1 +0,0 @@
Fixes: [41317] dinput: Recalculated Axis after deadzone change.

View File

@@ -1,88 +0,0 @@
From 290d6b2b773e9729c38495ec8c1291b40678bc31 Mon Sep 17 00:00:00 2001
From: Jetro Jormalainen <jje-wine@jv.jetro.fi>
Date: Tue, 30 Apr 2019 09:20:20 +1000
Subject: [PATCH 1/3] dinput: Load users Joystick mappings.
---
dlls/dinput/device.c | 2 +-
dlls/dinput/device_private.h | 2 ++
dlls/dinput/joystick.c | 25 +++++++++++++++++++++++++
3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
index 28329d03b5..d1bf934a82 100644
--- a/dlls/dinput/device.c
+++ b/dlls/dinput/device.c
@@ -714,7 +714,7 @@ static HRESULT save_mapping_settings(IDirectInputDevice8W *iface, LPDIACTIONFORM
return DI_OK;
}
-static BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdiaf, const WCHAR *username)
+BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdiaf, const WCHAR *username)
{
HKEY hkey;
WCHAR *guid_str;
diff --git a/dlls/dinput/device_private.h b/dlls/dinput/device_private.h
index 27e9c26286..ea794d7396 100644
--- a/dlls/dinput/device_private.h
+++ b/dlls/dinput/device_private.h
@@ -125,6 +125,8 @@ extern const char *_dump_dinput_GUID(const GUID *guid) DECLSPEC_HIDDEN;
extern LPDIOBJECTDATAFORMAT dataformat_to_odf_by_type(LPCDIDATAFORMAT df, int n, DWORD type) DECLSPEC_HIDDEN;
+extern BOOL load_mapping_settings(IDirectInputDeviceImpl *This, LPDIACTIONFORMATW lpdiaf, const WCHAR *username) DECLSPEC_HIDDEN;
+
extern HRESULT _build_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, DWORD devMask, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN;
extern HRESULT _set_action_map(LPDIRECTINPUTDEVICE8W iface, LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags, LPCDIDATAFORMAT df) DECLSPEC_HIDDEN;
diff --git a/dlls/dinput/joystick.c b/dlls/dinput/joystick.c
index 2220b5d576..8341e0313a 100644
--- a/dlls/dinput/joystick.c
+++ b/dlls/dinput/joystick.c
@@ -28,8 +28,10 @@
#include <stdio.h>
+#include "device_private.h"
#include "joystick_private.h"
#include "wine/debug.h"
+#include "wine/heap.h"
#include "winreg.h"
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
@@ -825,9 +827,32 @@ HRESULT WINAPI JoystickWGenericImpl_BuildActionMap(LPDIRECTINPUTDEVICE8W iface,
JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface);
unsigned int i, j;
BOOL has_actions = FALSE;
+ WCHAR *username;
+ DWORD size;
+ BOOL load_success = FALSE;
FIXME("(%p)->(%p,%s,%08x): semi-stub !\n", This, lpdiaf, debugstr_w(lpszUserName), dwFlags);
+ /* Unless asked the contrary by these flags, try to load a previous mapping */
+ if (!(dwFlags & DIDBAM_HWDEFAULTS))
+ {
+ if (!lpszUserName)
+ GetUserNameW(NULL, &size);
+ else
+ size = lstrlenW(lpszUserName) + 1;
+
+ username = heap_alloc(size * sizeof(WCHAR));
+ if (!lpszUserName)
+ GetUserNameW(username, &size);
+ else
+ lstrcpynW(username, lpszUserName, size);
+
+ load_success = load_mapping_settings((IDirectInputDeviceImpl *) This, lpdiaf, username);
+ heap_free(username);
+ }
+
+ if (load_success) return DI_OK;
+
for (i=0; i < lpdiaf->dwNumActions; i++)
{
DWORD inst = (0x000000ff & (lpdiaf->rgoAction[i].dwSemantic)) - 1;
--
2.17.1

View File

@@ -1 +1,2 @@
Fixes: [34108] dinput: Improve support for user Joystick configuration.
Disabled: True

View File

@@ -1,232 +0,0 @@
From 5a3007325917b8818493fc2193019e829916b733 Mon Sep 17 00:00:00 2001
From: Andrew Church <achurch@achurch.org>
Date: Mon, 25 Feb 2019 11:23:12 +1100
Subject: [PATCH] dinput: Allow reconnecting to disconnected joysticks
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=34297
---
dlls/dinput/joystick_linuxinput.c | 152 ++++++++++++++++++++++--------
1 file changed, 115 insertions(+), 37 deletions(-)
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index 2b970271ec3..8e292904f78 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -84,6 +84,13 @@ struct wine_input_absinfo {
LONG flat;
};
+enum wine_joystick_linuxinput_fd_state {
+ WINE_FD_STATE_CLOSED = 0, /* No device has been opened yet */
+ WINE_FD_STATE_OK, /* File descriptor is open and ready for reading */
+ WINE_FD_STATE_DISCONNECTED, /* Read error occurred; might be able to reopen later */
+ WINE_FD_STATE_INVALID, /* Device is no longer available at original pathname */
+};
+
/* implemented in effect_linuxinput.c */
HRESULT linuxinput_create_effect(int* fd, REFGUID rguid, struct list *parent_list_entry, LPDIRECTINPUTEFFECT* peff);
HRESULT linuxinput_get_info_A(int fd, REFGUID rguid, LPDIEFFECTINFOA info);
@@ -122,6 +129,7 @@ struct JoystickImpl
/* joystick private */
int joyfd;
+ enum wine_joystick_linuxinput_fd_state joyfd_state;
int dev_axes_to_di[ABS_MAX];
POINTL povs[4];
@@ -411,6 +419,7 @@ static HRESULT alloc_device( REFGUID rguid, IDirectInputImpl *dinput, JoystickIm
newDevice->generic.joy_polldev = joy_polldev;
newDevice->joyfd = -1;
+ newDevice->joyfd_state = WINE_FD_STATE_CLOSED;
newDevice->joydev = &joydevs[index];
newDevice->generic.name = newDevice->joydev->name;
list_init(&newDevice->ff_effects);
@@ -589,6 +598,44 @@ static HRESULT joydev_create_device( IDirectInputImpl *dinput, REFGUID rguid, ID
return DIERR_DEVICENOTREG;
}
+static int joydev_open_evdev(JoystickImpl *This)
+{
+ int fd;
+
+ if ((fd = open(This->joydev->device, O_RDWR)) == -1)
+ {
+ if ((fd = open(This->joydev->device, O_RDONLY)) == -1)
+ {
+ /* Couldn't open the device at all */
+ }
+ else
+ {
+ /* Couldn't open in r/w but opened in read-only. */
+ WARN("Could not open %s in read-write mode. Force feedback will be disabled.\n", This->joydev->device);
+ }
+ }
+ else
+ {
+ struct input_event event;
+
+ event.type = EV_FF;
+ event.code = FF_GAIN;
+ event.value = This->ff_gain;
+ if (write(fd, &event, sizeof(event)) == -1)
+ ERR("Failed to set gain (%i): %d %s\n", This->ff_gain, errno, strerror(errno));
+ if (!This->ff_autocenter)
+ {
+ /* Disable autocenter. */
+ event.code = FF_AUTOCENTER;
+ event.value = 0;
+ if (write(fd, &event, sizeof(event)) == -1)
+ ERR("Failed disabling autocenter: %d %s\n", errno, strerror(errno));
+ }
+ }
+
+ return fd;
+}
+
const struct dinput_device joystick_linuxinput_device = {
"Wine Linux-input joystick driver",
@@ -612,40 +659,14 @@ static HRESULT WINAPI JoystickWImpl_Acquire(LPDIRECTINPUTDEVICE8W iface)
return res;
}
- if ((This->joyfd = open(This->joydev->device, O_RDWR)) == -1)
+ if ((This->joyfd = joydev_open_evdev(This)) == -1)
{
- if ((This->joyfd = open(This->joydev->device, O_RDONLY)) == -1)
- {
- /* Couldn't open the device at all */
- ERR("Failed to open device %s: %d %s\n", This->joydev->device, errno, strerror(errno));
- IDirectInputDevice2WImpl_Unacquire(iface);
- return DIERR_NOTFOUND;
- }
- else
- {
- /* Couldn't open in r/w but opened in read-only. */
- WARN("Could not open %s in read-write mode. Force feedback will be disabled.\n", This->joydev->device);
- }
- }
- else
- {
- struct input_event event;
-
- event.type = EV_FF;
- event.code = FF_GAIN;
- event.value = This->ff_gain;
- if (write(This->joyfd, &event, sizeof(event)) == -1)
- ERR("Failed to set gain (%i): %d %s\n", This->ff_gain, errno, strerror(errno));
- if (!This->ff_autocenter)
- {
- /* Disable autocenter. */
- event.code = FF_AUTOCENTER;
- event.value = 0;
- if (write(This->joyfd, &event, sizeof(event)) == -1)
- ERR("Failed disabling autocenter: %d %s\n", errno, strerror(errno));
- }
+ ERR("Failed to open device %s: %d %s\n", This->joydev->device, errno, strerror(errno));
+ IDirectInputDevice2WImpl_Unacquire(iface);
+ return DIERR_NOTFOUND;
}
+ This->joyfd_state = WINE_FD_STATE_OK;
return DI_OK;
}
@@ -677,6 +698,7 @@ static HRESULT WINAPI JoystickWImpl_Unacquire(LPDIRECTINPUTDEVICE8W iface)
close(This->joyfd);
This->joyfd = -1;
+ This->joyfd_state = WINE_FD_STATE_CLOSED;
}
return res;
}
@@ -715,23 +737,79 @@ static void joy_polldev( IDirectInputDevice8W *iface )
struct input_event ie;
JoystickImpl *This = impl_from_IDirectInputDevice8W( iface );
- if (This->joyfd==-1)
- return;
+ if (This->joyfd == -1)
+ {
+ int fd;
+ char namebuf[MAX_PATH + 8]; /* 8 == strlen(EVDEVDRIVER) */
+
+ if (This->joyfd_state != WINE_FD_STATE_DISCONNECTED)
+ return;
+ /* Try to reconnect to the device. */
+ fd = joydev_open_evdev(This);
+ if (fd == -1)
+ return;
+ namebuf[sizeof(namebuf) - strlen(EVDEVDRIVER) - 1] = 0;
+ if (ioctl(fd, EVIOCGNAME(sizeof(namebuf) - strlen(EVDEVDRIVER) - 1), namebuf) == -1)
+ {
+ /* Couldn't get the name; assume it's a different device. */
+ ERR("EVIOCGNAME(%s) failed: %d %s", This->joydev->device, errno, strerror(errno));
+ This->joyfd_state = WINE_FD_STATE_INVALID;
+ return;
+ }
+ strcat(namebuf, EVDEVDRIVER); /* Guaranteed to be safe. */
+ if (strcmp(namebuf, This->joydev->name) != 0)
+ {
+ ERR("Device %s changed from \"%s\" to \"%s\"! Can't reconnect.\n", This->joydev->device, This->joydev->name, namebuf);
+ This->joyfd_state = WINE_FD_STATE_INVALID;
+ return;
+ }
+ if (InterlockedCompareExchange(&This->joyfd, fd, -1) == -1)
+ {
+ This->joyfd_state = WINE_FD_STATE_OK;
+ TRACE("Reconnected to \"%s\" on %s", This->joydev->name, This->joydev->device);
+ }
+ else
+ {
+ /* Somebody beat us to it! Throw away our fd and use theirs. */
+ close(fd);
+ }
+ }
while (1)
{
LONG value = 0;
int inst_id = -1;
+ int result;
plfd.fd = This->joyfd;
plfd.events = POLLIN;
- if (poll(&plfd,1,0) != 1)
- return;
+ result = poll(&plfd,1,0);
+ if (result != 1)
+ {
+ if (result == -1)
+ {
+ ERR("poll failed: %d %s\n", errno, strerror(errno));
+ close(This->joyfd);
+ This->joyfd = -1;
+ This->joyfd_state = WINE_FD_STATE_DISCONNECTED;
+ }
+ return;
+ }
/* we have one event, so we can read */
- if (sizeof(ie)!=read(This->joyfd,&ie,sizeof(ie)))
- return;
+ result = read(This->joyfd,&ie,sizeof(ie));
+ if (result != sizeof(ie))
+ {
+ if (result == -1)
+ {
+ ERR("read failed: %d %s\n", errno, strerror(errno));
+ close(This->joyfd);
+ This->joyfd = -1;
+ This->joyfd_state = WINE_FD_STATE_DISCONNECTED;
+ }
+ return;
+ }
TRACE("input_event: type %d, code %d, value %d\n",ie.type,ie.code,ie.value);
switch (ie.type) {
--
2.30.2

View File

@@ -1 +0,0 @@
Fixes: [34297] dinput: Allow reconnecting to disconnected joysticks

View File

@@ -1,2 +1,2 @@
Fixes: [35815] dinput: Allow remapping of joystick buttons.
Disabled: True

View File

@@ -1,4 +1,4 @@
From 0ffe77334eaf10be9a241dae48cf772228abde3b Mon Sep 17 00:00:00 2001
From 670ee9563c1021c05993ef8525a4661daa01d3dd Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 21:01:24 -0500
Subject: [PATCH] server: Create eventfd file descriptors for event objects.
@@ -9,8 +9,8 @@ This lets system processes shut down.
---
server/esync.c | 8 ++++++++
server/esync.h | 1 +
server/event.c | 29 +++++++++++++++++++++++++++--
3 files changed, 36 insertions(+), 2 deletions(-)
server/event.c | 30 ++++++++++++++++++++++++++++--
3 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/server/esync.c b/server/esync.c
index 2b9307267f9..975e5d2ddd6 100644
@@ -41,10 +41,18 @@ index 1e12560ddd6..fcbfd0989bb 100644
void esync_wake_up( struct object *obj );
+void esync_clear( int fd );
diff --git a/server/event.c b/server/event.c
index 490fd9875bd..0938a73f648 100644
index c727bfdd1ba..69126abc096 100644
--- a/server/event.c
+++ b/server/event.c
@@ -35,6 +35,7 @@
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <unistd.h>
#include <sys/types.h>
#include "ntstatus.h"
@@ -35,6 +36,7 @@
#include "thread.h"
#include "request.h"
#include "security.h"
@@ -52,7 +60,7 @@ index 490fd9875bd..0938a73f648 100644
static const WCHAR event_name[] = {'E','v','e','n','t'};
@@ -56,13 +57,16 @@ struct event
@@ -56,13 +58,16 @@ struct event
struct list kernel_object; /* list of kernel object pointers */
int manual_reset; /* is it a manual reset event? */
int signaled; /* event has been signaled */
@@ -69,7 +77,7 @@ index 490fd9875bd..0938a73f648 100644
static const struct object_ops event_ops =
{
@@ -72,7 +76,7 @@ static const struct object_ops event_ops =
@@ -72,7 +77,7 @@ static const struct object_ops event_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
event_signaled, /* signaled */
@@ -78,7 +86,7 @@ index 490fd9875bd..0938a73f648 100644
event_satisfied, /* satisfied */
event_signal, /* signal */
no_get_fd, /* get_fd */
@@ -86,7 +90,7 @@ static const struct object_ops event_ops =
@@ -86,7 +91,7 @@ static const struct object_ops event_ops =
no_open_file, /* open_file */
event_get_kernel_obj_list, /* get_kernel_obj_list */
no_close_handle, /* close_handle */
@@ -87,7 +95,7 @@ index 490fd9875bd..0938a73f648 100644
};
@@ -152,6 +156,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
@@ -152,6 +157,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
list_init( &event->kernel_object );
event->manual_reset = manual_reset;
event->signaled = initial_state;
@@ -97,7 +105,7 @@ index 490fd9875bd..0938a73f648 100644
}
}
return event;
@@ -180,6 +187,9 @@ void set_event( struct event *event )
@@ -180,6 +188,9 @@ void set_event( struct event *event )
void reset_event( struct event *event )
{
event->signaled = 0;
@@ -107,7 +115,7 @@ index 490fd9875bd..0938a73f648 100644
}
static void event_dump( struct object *obj, int verbose )
@@ -197,6 +207,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -197,6 +208,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
return event->signaled;
}
@@ -121,7 +129,7 @@ index 490fd9875bd..0938a73f648 100644
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry )
{
struct event *event = (struct event *)obj;
@@ -225,6 +242,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
@@ -225,6 +243,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
return &event->kernel_object;
}
@@ -137,5 +145,5 @@ index 490fd9875bd..0938a73f648 100644
unsigned int attr, const struct security_descriptor *sd )
{
--
2.20.1
2.33.0

View File

@@ -1,4 +1,4 @@
From 2053200985a44de70df5b6024177927b64689954 Mon Sep 17 00:00:00 2001
From 3518ce5bf3c6010425f35bb228b3fb2b238b1726 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 9 Jun 2018 15:39:37 -0500
Subject: [PATCH] server: Create eventfd descriptors for device manager
@@ -11,14 +11,22 @@ process.
This lets drivers like mountmgr finally work, and so winecfg can open the
Drives tab.
---
server/device.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
server/device.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/server/device.c b/server/device.c
index cc9aa2358a4..b8ce131c732 100644
index 80904d33d0d..2a7727f05ae 100644
--- a/server/device.c
+++ b/server/device.c
@@ -39,6 +39,7 @@
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <unistd.h>
#include "ntstatus.h"
#define WIN32_NO_STATUS
@@ -38,6 +39,7 @@
#include "handle.h"
#include "request.h"
#include "process.h"
@@ -26,7 +34,7 @@ index cc9aa2358a4..b8ce131c732 100644
/* IRP object */
@@ -95,10 +96,12 @@ struct device_manager
@@ -93,10 +95,12 @@ struct device_manager
struct list requests; /* list of pending irps across all devices */
struct irp_call *current_call; /* call currently executed on client side */
struct wine_rb_tree kernel_objects; /* map of objects that have client side pointer associated */
@@ -39,7 +47,7 @@ index cc9aa2358a4..b8ce131c732 100644
static void device_manager_destroy( struct object *obj );
static const struct object_ops device_manager_ops =
@@ -109,7 +112,7 @@ static const struct object_ops device_manager_ops =
@@ -107,7 +111,7 @@ static const struct object_ops device_manager_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
device_manager_signaled, /* signaled */
@@ -48,7 +56,7 @@ index cc9aa2358a4..b8ce131c732 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -751,6 +754,9 @@ static void delete_file( struct device_file *file )
@@ -751,6 +755,9 @@ static void delete_file( struct device_file *file )
/* terminate all pending requests */
LIST_FOR_EACH_ENTRY_SAFE( irp, next, &file->requests, struct irp_call, dev_entry )
{
@@ -58,7 +66,7 @@ index cc9aa2358a4..b8ce131c732 100644
list_remove( &irp->mgr_entry );
set_irp_result( irp, STATUS_FILE_DELETED, NULL, 0, 0 );
}
@@ -786,6 +792,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
@@ -786,6 +793,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
return !list_empty( &manager->requests );
}
@@ -72,7 +80,7 @@ index cc9aa2358a4..b8ce131c732 100644
static void device_manager_destroy( struct object *obj )
{
struct device_manager *manager = (struct device_manager *)obj;
@@ -820,6 +833,9 @@ static void device_manager_destroy( struct object *obj )
@@ -820,6 +834,9 @@ static void device_manager_destroy( struct object *obj )
assert( !irp->file && !irp->async );
release_object( irp );
}
@@ -82,7 +90,7 @@ index cc9aa2358a4..b8ce131c732 100644
}
static struct device_manager *create_device_manager(void)
@@ -832,6 +848,9 @@ static struct device_manager *create_device_manager(void)
@@ -832,6 +849,9 @@ static struct device_manager *create_device_manager(void)
list_init( &manager->devices );
list_init( &manager->requests );
wine_rb_init( &manager->kernel_objects, compare_kernel_object );
@@ -92,7 +100,7 @@ index cc9aa2358a4..b8ce131c732 100644
}
return manager;
}
@@ -997,6 +1016,9 @@ DECL_HANDLER(get_next_device_request)
@@ -1019,6 +1039,9 @@ DECL_HANDLER(get_next_device_request)
/* we already own the object if it's only on manager queue */
if (irp->file) grab_object( irp );
manager->current_call = irp;
@@ -103,5 +111,5 @@ index cc9aa2358a4..b8ce131c732 100644
else close_handle( current->process, reply->next );
}
--
2.28.0
2.33.0

View File

@@ -1,9 +0,0 @@
# Path Of Exile has been patched to correct this issue, the underlying issue still exists in wine.
# Mailing list patch, and comments about it's issues.
# https://www.winehq.org/pipermail/wine-devel/2019-January/138404.html
# https://www.winehq.org/pipermail/wine-devel/2019-February/date.html
Fixes: [42695] Path of Exile fails - CoCreateInstance() called in uninitialized apartment
Fixes: [47387] Victor Vran has no sound
Depends: winex11-_NET_ACTIVE_WINDOW

View File

@@ -1,34 +0,0 @@
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

@@ -1,5 +0,0 @@
# 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,168 +0,0 @@
From 2c3d9dfc09ee64767347574e0bd6e8f5511a6a54 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 9 Oct 2021 13:47:39 +1100
Subject: [PATCH 02/22] Revert "wmvcore: Move the async reader implementation
to winegstreamer."
This reverts commit bf7c05d87a65b7b9999d71fc0df602e3dfa2fafa.
---
dlls/winegstreamer/Makefile.in | 1 -
dlls/winegstreamer/winegstreamer.spec | 1 -
dlls/wmvcore/Makefile.in | 1 +
.../wm_asyncreader.c => wmvcore/reader.c} | 54 +++++++++++--------
dlls/wmvcore/wmvcore_main.c | 15 ------
5 files changed, 32 insertions(+), 40 deletions(-)
rename dlls/{winegstreamer/wm_asyncreader.c => wmvcore/reader.c} (98%)
diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in
index 17311cd663c..671e3bcb7ba 100644
--- a/dlls/winegstreamer/Makefile.in
+++ b/dlls/winegstreamer/Makefile.in
@@ -13,7 +13,6 @@ C_SRCS = \
mfplat.c \
quartz_parser.c \
wg_parser.c \
- wm_asyncreader.c \
wm_syncreader.c
IDL_SRCS = \
diff --git a/dlls/winegstreamer/winegstreamer.spec b/dlls/winegstreamer/winegstreamer.spec
index bc6a390f8b1..bd9f53a7445 100644
--- a/dlls/winegstreamer/winegstreamer.spec
+++ b/dlls/winegstreamer/winegstreamer.spec
@@ -2,5 +2,4 @@
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()
-@ stdcall winegstreamer_create_wm_async_reader(ptr)
@ stdcall winegstreamer_create_wm_sync_reader(ptr)
diff --git a/dlls/wmvcore/Makefile.in b/dlls/wmvcore/Makefile.in
index 6aed828abae..d0b230dd7c0 100644
--- a/dlls/wmvcore/Makefile.in
+++ b/dlls/wmvcore/Makefile.in
@@ -6,6 +6,7 @@ DELAYIMPORTS = winegstreamer
EXTRADLLFLAGS = -Wb,--prefer-native
C_SRCS = \
+ reader.c \
wmvcore_main.c \
writer.c
diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/wmvcore/reader.c
similarity index 98%
rename from dlls/winegstreamer/wm_asyncreader.c
rename to dlls/wmvcore/reader.c
index d3fd1624f24..12ba8099ab1 100644
--- a/dlls/winegstreamer/wm_asyncreader.c
+++ b/dlls/wmvcore/reader.c
@@ -16,8 +16,11 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "gst_private.h"
+#include "wmvcore.h"
+
#include "wmsdk.h"
+#include "wine/debug.h"
+#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
@@ -150,7 +153,7 @@ static ULONG WINAPI WMReader_Release(IWMReader *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
- free(This);
+ heap_free(This);
return ref;
}
@@ -2036,31 +2039,36 @@ static const IWMPacketSize2Vtbl WMPacketSize2Vtbl =
packetsize_SetMinPacketSize
};
-HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader)
+HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader)
{
- WMReader *object;
+ WMReader *reader;
- TRACE("reader %p.\n", reader);
+ TRACE("(%p, %x, %p)\n", reserved, rights, ret_reader);
- if (!(object = calloc(1, sizeof(*object))))
+ reader = heap_alloc(sizeof(*reader));
+ if(!reader)
return E_OUTOFMEMORY;
- object->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
- object->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
- object->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
- object->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl;
- object->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
- object->IWMReader_iface.lpVtbl = &WMReaderVtbl;
- object->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl;
- object->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl;
- object->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl;
- object->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl;
- object->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl;
- object->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl;
- object->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
- object->ref = 1;
-
- TRACE("Created async reader %p.\n", object);
- *reader = (IWMReader *)&object->IWMReader_iface;
+ reader->IWMReader_iface.lpVtbl = &WMReaderVtbl;
+ reader->IWMReaderAdvanced6_iface.lpVtbl = &WMReaderAdvanced6Vtbl;
+ reader->IWMReaderAccelerator_iface.lpVtbl = &WMReaderAcceleratorVtbl;
+ reader->IWMReaderNetworkConfig2_iface.lpVtbl = &WMReaderNetworkConfig2Vtbl;
+ reader->IWMReaderStreamClock_iface.lpVtbl = &WMReaderStreamClockVtbl;
+ reader->IWMReaderTypeNegotiation_iface.lpVtbl = &WMReaderTypeNegotiationVtbl;
+ reader->IWMReaderTimecode_iface.lpVtbl = &WMReaderTimecodeVtbl;
+ reader->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl;
+ reader->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
+ reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
+ reader->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
+ reader->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
+ reader->IWMPacketSize2_iface.lpVtbl = &WMPacketSize2Vtbl;
+ reader->ref = 1;
+
+ *ret_reader = &reader->IWMReader_iface;
return S_OK;
}
+
+HRESULT WINAPI WMCreateReaderPriv(IWMReader **ret_reader)
+{
+ return WMCreateReader(NULL, 0, ret_reader);
+}
diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c
index ff837921286..8d4d4251369 100644
--- a/dlls/wmvcore/wmvcore_main.c
+++ b/dlls/wmvcore/wmvcore_main.c
@@ -25,23 +25,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
-HRESULT WINAPI winegstreamer_create_wm_async_reader(IWMReader **reader);
HRESULT WINAPI winegstreamer_create_wm_sync_reader(IWMSyncReader **reader);
-HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **reader)
-{
- TRACE("reserved %p, rights %#x, reader %p.\n", reserved, rights, reader);
-
- return winegstreamer_create_wm_async_reader(reader);
-}
-
-HRESULT WINAPI WMCreateReaderPriv(IWMReader **reader)
-{
- TRACE("reader %p.\n", reader);
-
- return winegstreamer_create_wm_async_reader(reader);
-}
-
HRESULT WINAPI WMCreateSyncReader(IUnknown *reserved, DWORD rights, IWMSyncReader **reader)
{
TRACE("reserved %p, rights %#x, reader %p.\n", reserved, rights, reader);
--
2.33.0

View File

@@ -1,161 +0,0 @@
From 59b60c9a19de54bc0f6541395ffcf49d96437b8c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 9 Oct 2021 13:47:42 +1100
Subject: [PATCH 04/22] Revert "wmvcore: Move the sync reader implementation to
winegstreamer."
This reverts commit e4767ea6126fce8b419ef10a3cfce8bf43206d6f.
---
dlls/winegstreamer/Makefile.in | 4 +--
dlls/winegstreamer/winegstreamer.spec | 1 -
dlls/wmvcore/Makefile.in | 2 +-
.../wm_syncreader.c => wmvcore/syncreader.c} | 33 ++++++++++++-------
dlls/wmvcore/wmvcore_main.c | 16 ---------
5 files changed, 23 insertions(+), 33 deletions(-)
rename dlls/{winegstreamer/wm_syncreader.c => wmvcore/syncreader.c} (96%)
diff --git a/dlls/winegstreamer/Makefile.in b/dlls/winegstreamer/Makefile.in
index 671e3bcb7ba..e35df3cf3f9 100644
--- a/dlls/winegstreamer/Makefile.in
+++ b/dlls/winegstreamer/Makefile.in
@@ -1,6 +1,5 @@
MODULE = winegstreamer.dll
UNIXLIB = winegstreamer.so
-IMPORTLIB = winegstreamer
IMPORTS = strmbase strmiids uuid ole32 mfuuid
DELAYIMPORTS = mfplat
EXTRAINCL = $(GSTREAMER_CFLAGS)
@@ -12,8 +11,7 @@ C_SRCS = \
media_source.c \
mfplat.c \
quartz_parser.c \
- wg_parser.c \
- wm_syncreader.c
+ wg_parser.c
IDL_SRCS = \
winegstreamer_classes.idl
diff --git a/dlls/winegstreamer/winegstreamer.spec b/dlls/winegstreamer/winegstreamer.spec
index bd9f53a7445..b16365d0c9f 100644
--- a/dlls/winegstreamer/winegstreamer.spec
+++ b/dlls/winegstreamer/winegstreamer.spec
@@ -2,4 +2,3 @@
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()
-@ stdcall winegstreamer_create_wm_sync_reader(ptr)
diff --git a/dlls/wmvcore/Makefile.in b/dlls/wmvcore/Makefile.in
index d0b230dd7c0..15c017f86d9 100644
--- a/dlls/wmvcore/Makefile.in
+++ b/dlls/wmvcore/Makefile.in
@@ -1,12 +1,12 @@
MODULE = wmvcore.dll
IMPORTLIB = wmvcore
IMPORTS = kernel32
-DELAYIMPORTS = winegstreamer
EXTRADLLFLAGS = -Wb,--prefer-native
C_SRCS = \
reader.c \
+ syncreader.c \
wmvcore_main.c \
writer.c
diff --git a/dlls/winegstreamer/wm_syncreader.c b/dlls/wmvcore/syncreader.c
similarity index 96%
rename from dlls/winegstreamer/wm_syncreader.c
rename to dlls/wmvcore/syncreader.c
index 75b8e021148..b245ff20d31 100644
--- a/dlls/winegstreamer/wm_syncreader.c
+++ b/dlls/wmvcore/syncreader.c
@@ -16,9 +16,11 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "gst_private.h"
-#include "initguid.h"
+#include "wmvcore.h"
+
#include "wmsdk.h"
+#include "wine/debug.h"
+#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
@@ -83,7 +85,7 @@ static ULONG WINAPI WMSyncReader_Release(IWMSyncReader2 *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
- free(This);
+ heap_free(This);
return ref;
}
@@ -603,20 +605,27 @@ static const IWMProfile3Vtbl WMProfile3Vtbl =
WMProfile3_GetExpectedPacketCount
};
-HRESULT WINAPI winegstreamer_create_wm_sync_reader(IWMSyncReader **reader)
+HRESULT WINAPI WMCreateSyncReader(IUnknown *pcert, DWORD rights, IWMSyncReader **syncreader)
{
- WMSyncReader *object;
+ WMSyncReader *sync;
+
+ TRACE("(%p, %x, %p)\n", pcert, rights, syncreader);
- TRACE("reader %p.\n", reader);
+ sync = heap_alloc(sizeof(*sync));
- if (!(object = calloc(1, sizeof(*object))))
+ if (!sync)
return E_OUTOFMEMORY;
- object->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
- object->IWMSyncReader2_iface.lpVtbl = &WMSyncReader2Vtbl;
- object->ref = 1;
+ sync->IWMProfile3_iface.lpVtbl = &WMProfile3Vtbl;
+ sync->IWMSyncReader2_iface.lpVtbl = &WMSyncReader2Vtbl;
+ sync->ref = 1;
+
+ *syncreader = (IWMSyncReader *)&sync->IWMSyncReader2_iface;
- TRACE("Created sync reader %p.\n", object);
- *reader = (IWMSyncReader *)&object->IWMSyncReader2_iface;
return S_OK;
}
+
+HRESULT WINAPI WMCreateSyncReaderPriv(IWMSyncReader **syncreader)
+{
+ return WMCreateSyncReader(NULL, 0, syncreader);
+}
diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c
index 8d4d4251369..5f93fc68e3b 100644
--- a/dlls/wmvcore/wmvcore_main.c
+++ b/dlls/wmvcore/wmvcore_main.c
@@ -25,22 +25,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
-HRESULT WINAPI winegstreamer_create_wm_sync_reader(IWMSyncReader **reader);
-
-HRESULT WINAPI WMCreateSyncReader(IUnknown *reserved, DWORD rights, IWMSyncReader **reader)
-{
- TRACE("reserved %p, rights %#x, reader %p.\n", reserved, rights, reader);
-
- return winegstreamer_create_wm_sync_reader(reader);
-}
-
-HRESULT WINAPI WMCreateSyncReaderPriv(IWMSyncReader **reader)
-{
- TRACE("reader %p.\n", reader);
-
- return winegstreamer_create_wm_sync_reader(reader);
-}
-
HRESULT WINAPI WMCheckURLExtension(const WCHAR *url)
{
FIXME("(%s): stub\n", wine_dbgstr_w(url));
--
2.33.0

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