You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3fb6eb99a7 | ||
|
2677a11f41 | ||
|
6fd31b354c | ||
|
4eaa5b69b8 | ||
|
feb91195ff | ||
|
164b361be6 | ||
|
6bc16f96f7 | ||
|
688eeca0be | ||
|
1af920f698 | ||
|
f3fd4a3903 | ||
|
56a387bf1d | ||
|
c7f16e15e7 | ||
|
5e9626af6c |
@@ -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)
|
||||
{
|
||||
|
@@ -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
|
||||
|
@@ -1,2 +1,3 @@
|
||||
Fixes: [47326] dinput: Allow mapping of controls based of genre type.
|
||||
Depends: dinput-joy-mappings
|
||||
Disabled: True
|
||||
|
@@ -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
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [41317] dinput: Recalculated Axis after deadzone change.
|
@@ -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
|
||||
|
@@ -1 +1,2 @@
|
||||
Fixes: [34108] dinput: Improve support for user Joystick configuration.
|
||||
Disabled: True
|
||||
|
@@ -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
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [34297] dinput: Allow reconnecting to disconnected joysticks
|
@@ -1,2 +1,2 @@
|
||||
Fixes: [35815] dinput: Allow remapping of joystick buttons.
|
||||
|
||||
Disabled: True
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -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
|
@@ -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
|
||||
|
@@ -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.
|
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -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
Reference in New Issue
Block a user