Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
2b706a00
Commit
2b706a00
authored
Nov 27, 2022
by
Rémi Bernon
Committed by
Alexandre Julliard
Nov 29, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
joy.cpl: Move the device effect list to static global scope.
parent
905821fc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
30 deletions
+35
-30
main.c
dlls/joy.cpl/main.c
+35
-30
No files found.
dlls/joy.cpl/main.c
View file @
2b706a00
...
@@ -78,9 +78,6 @@ struct effect
...
@@ -78,9 +78,6 @@ struct effect
struct
Joystick
struct
Joystick
{
{
IDirectInputDevice8W
*
device
;
IDirectInputDevice8W
*
device
;
struct
list
effects
;
IDirectInputEffect
*
effect_selected
;
};
};
struct
Graphics
struct
Graphics
...
@@ -114,6 +111,9 @@ static CRITICAL_SECTION_DEBUG joy_cs_debug =
...
@@ -114,6 +111,9 @@ static CRITICAL_SECTION_DEBUG joy_cs_debug =
};
};
static
CRITICAL_SECTION
joy_cs
=
{
&
joy_cs_debug
,
-
1
,
0
,
0
,
0
,
0
};
static
CRITICAL_SECTION
joy_cs
=
{
&
joy_cs_debug
,
-
1
,
0
,
0
,
0
,
0
};
static
struct
list
effects
=
LIST_INIT
(
effects
);
static
IDirectInputEffect
*
effect_selected
;
/*********************************************************************
/*********************************************************************
* DllMain
* DllMain
*/
*/
...
@@ -217,32 +217,46 @@ static BOOL CALLBACK enum_effects( const DIEFFECTINFOW *info, void *context )
...
@@ -217,32 +217,46 @@ static BOOL CALLBACK enum_effects( const DIEFFECTINFOW *info, void *context )
}
}
entry
->
effect
=
effect
;
entry
->
effect
=
effect
;
list_add_tail
(
&
joystick
->
effects
,
&
entry
->
entry
);
list_add_tail
(
&
effects
,
&
entry
->
entry
);
return
DIENUM_CONTINUE
;
return
DIENUM_CONTINUE
;
}
}
static
void
set_selected_effect
(
struct
Joystick
*
joystick
,
IDirectInputEffect
*
effect
)
static
void
set_selected_effect
(
IDirectInputEffect
*
effect
)
{
{
IDirectInputEffect
*
previous
;
IDirectInputEffect
*
previous
;
EnterCriticalSection
(
&
joy_cs
);
EnterCriticalSection
(
&
joy_cs
);
if
((
previous
=
joystick
->
effect_selected
))
IDirectInputEffect_Release
(
previous
);
if
((
previous
=
effect_selected
))
IDirectInputEffect_Release
(
previous
);
if
((
joystick
->
effect_selected
=
effect
))
IDirectInput_AddRef
(
effect
);
if
((
effect_selected
=
effect
))
IDirectInput_AddRef
(
effect
);
LeaveCriticalSection
(
&
joy_cs
);
LeaveCriticalSection
(
&
joy_cs
);
}
}
static
IDirectInputEffect
*
get_selected_effect
(
struct
Joystick
*
joystick
)
static
IDirectInputEffect
*
get_selected_effect
(
void
)
{
{
IDirectInputEffect
*
effect
;
IDirectInputEffect
*
effect
;
EnterCriticalSection
(
&
joy_cs
);
EnterCriticalSection
(
&
joy_cs
);
if
((
effect
=
joystick
->
effect_selected
))
IDirectInputEffect_AddRef
(
effect
);
if
((
effect
=
effect_selected
))
IDirectInputEffect_AddRef
(
effect
);
LeaveCriticalSection
(
&
joy_cs
);
LeaveCriticalSection
(
&
joy_cs
);
return
effect
;
return
effect
;
}
}
static
void
clear_effects
(
void
)
{
struct
effect
*
effect
,
*
next
;
set_selected_effect
(
NULL
);
LIST_FOR_EACH_ENTRY_SAFE
(
effect
,
next
,
&
effects
,
struct
effect
,
entry
)
{
list_remove
(
&
effect
->
entry
);
IDirectInputEffect_Release
(
effect
->
effect
);
free
(
effect
);
}
}
static
BOOL
CALLBACK
enum_callback
(
const
DIDEVICEINSTANCEW
*
instance
,
void
*
context
)
static
BOOL
CALLBACK
enum_callback
(
const
DIDEVICEINSTANCEW
*
instance
,
void
*
context
)
{
{
DIDEVCAPS
caps
=
{.
dwSize
=
sizeof
(
DIDEVCAPS
)};
DIDEVCAPS
caps
=
{.
dwSize
=
sizeof
(
DIDEVCAPS
)};
...
@@ -262,9 +276,6 @@ static BOOL CALLBACK enum_callback(const DIDEVICEINSTANCEW *instance, void *cont
...
@@ -262,9 +276,6 @@ static BOOL CALLBACK enum_callback(const DIDEVICEINSTANCEW *instance, void *cont
IDirectInput8_CreateDevice
(
data
->
di
,
&
instance
->
guidInstance
,
&
joystick
->
device
,
NULL
);
IDirectInput8_CreateDevice
(
data
->
di
,
&
instance
->
guidInstance
,
&
joystick
->
device
,
NULL
);
IDirectInputDevice8_SetDataFormat
(
joystick
->
device
,
&
c_dfDIJoystick
);
IDirectInputDevice8_SetDataFormat
(
joystick
->
device
,
&
c_dfDIJoystick
);
list_init
(
&
joystick
->
effects
);
joystick
->
effect_selected
=
NULL
;
IDirectInputDevice8_GetCapabilities
(
joystick
->
device
,
&
caps
);
IDirectInputDevice8_GetCapabilities
(
joystick
->
device
,
&
caps
);
if
(
caps
.
dwFlags
&
DIDC_FORCEFEEDBACK
)
data
->
num_ff
++
;
if
(
caps
.
dwFlags
&
DIDC_FORCEFEEDBACK
)
data
->
num_ff
++
;
...
@@ -277,7 +288,6 @@ static BOOL CALLBACK enum_callback(const DIDEVICEINSTANCEW *instance, void *cont
...
@@ -277,7 +288,6 @@ static BOOL CALLBACK enum_callback(const DIDEVICEINSTANCEW *instance, void *cont
proprange
.
lMax
=
TEST_AXIS_MAX
;
proprange
.
lMax
=
TEST_AXIS_MAX
;
IDirectInputDevice_SetProperty
(
joystick
->
device
,
DIPROP_RANGE
,
&
proprange
.
diph
);
IDirectInputDevice_SetProperty
(
joystick
->
device
,
DIPROP_RANGE
,
&
proprange
.
diph
);
IDirectInputDevice8_EnumEffects
(
joystick
->
device
,
enum_effects
,
(
void
*
)
joystick
,
0
);
return
DIENUM_CONTINUE
;
return
DIENUM_CONTINUE
;
}
}
...
@@ -305,17 +315,6 @@ static void destroy_joysticks(struct JoystickData *data)
...
@@ -305,17 +315,6 @@ static void destroy_joysticks(struct JoystickData *data)
for
(
i
=
0
;
i
<
data
->
num_joysticks
;
i
++
)
for
(
i
=
0
;
i
<
data
->
num_joysticks
;
i
++
)
{
{
struct
effect
*
effect
,
*
next_effect
;
set_selected_effect
(
&
data
->
joysticks
[
i
],
NULL
);
LIST_FOR_EACH_ENTRY_SAFE
(
effect
,
next_effect
,
&
data
->
joysticks
[
i
].
effects
,
struct
effect
,
entry
)
{
list_remove
(
&
effect
->
entry
);
IDirectInputEffect_Release
(
effect
->
effect
);
free
(
effect
);
}
IDirectInputDevice8_Unacquire
(
data
->
joysticks
[
i
].
device
);
IDirectInputDevice8_Unacquire
(
data
->
joysticks
[
i
].
device
);
IDirectInputDevice8_Release
(
data
->
joysticks
[
i
].
device
);
IDirectInputDevice8_Release
(
data
->
joysticks
[
i
].
device
);
}
}
...
@@ -394,6 +393,7 @@ static void refresh_joystick_list(HWND hwnd, struct JoystickData *data)
...
@@ -394,6 +393,7 @@ static void refresh_joystick_list(HWND hwnd, struct JoystickData *data)
LSTATUS
status
;
LSTATUS
status
;
DWORD
i
;
DWORD
i
;
clear_effects
();
destroy_joysticks
(
data
);
destroy_joysticks
(
data
);
initialize_joysticks
(
data
);
initialize_joysticks
(
data
);
...
@@ -873,9 +873,13 @@ static void initialize_effects_list(HWND hwnd, struct Joystick* joy)
...
@@ -873,9 +873,13 @@ static void initialize_effects_list(HWND hwnd, struct Joystick* joy)
{
{
struct
effect
*
effect
;
struct
effect
*
effect
;
clear_effects
();
IDirectInputDevice8_EnumEffects
(
joy
->
device
,
enum_effects
,
(
void
*
)
joy
,
0
);
SendDlgItemMessageW
(
hwnd
,
IDC_FFEFFECTLIST
,
LB_RESETCONTENT
,
0
,
0
);
SendDlgItemMessageW
(
hwnd
,
IDC_FFEFFECTLIST
,
LB_RESETCONTENT
,
0
,
0
);
LIST_FOR_EACH_ENTRY
(
effect
,
&
joy
->
effects
,
struct
effect
,
entry
)
LIST_FOR_EACH_ENTRY
(
effect
,
&
effects
,
struct
effect
,
entry
)
{
{
DIEFFECTINFOW
info
=
{.
dwSize
=
sizeof
(
DIEFFECTINFOW
)};
DIEFFECTINFOW
info
=
{.
dwSize
=
sizeof
(
DIEFFECTINFOW
)};
GUID
guid
;
GUID
guid
;
...
@@ -899,16 +903,16 @@ static void ff_handle_effectchange(HWND hwnd, struct Joystick *joy)
...
@@ -899,16 +903,16 @@ static void ff_handle_effectchange(HWND hwnd, struct Joystick *joy)
struct
list
*
entry
;
struct
list
*
entry
;
int
sel
;
int
sel
;
set_selected_effect
(
joy
,
NULL
);
set_selected_effect
(
NULL
);
sel
=
SendDlgItemMessageW
(
hwnd
,
IDC_FFEFFECTLIST
,
LB_GETCURSEL
,
0
,
0
);
sel
=
SendDlgItemMessageW
(
hwnd
,
IDC_FFEFFECTLIST
,
LB_GETCURSEL
,
0
,
0
);
if
(
sel
<
0
)
return
;
if
(
sel
<
0
)
return
;
entry
=
list_head
(
&
joy
->
effects
);
entry
=
list_head
(
&
effects
);
while
(
sel
--
&&
entry
)
entry
=
list_next
(
&
joy
->
effects
,
entry
);
while
(
sel
--
&&
entry
)
entry
=
list_next
(
&
effects
,
entry
);
if
(
!
entry
)
return
;
if
(
!
entry
)
return
;
set_selected_effect
(
joy
,
LIST_ENTRY
(
entry
,
struct
effect
,
entry
)
->
effect
);
set_selected_effect
(
LIST_ENTRY
(
entry
,
struct
effect
,
entry
)
->
effect
);
IDirectInputDevice8_Unacquire
(
joy
->
device
);
IDirectInputDevice8_Unacquire
(
joy
->
device
);
IDirectInputDevice8_SetCooperativeLevel
(
joy
->
device
,
GetAncestor
(
hwnd
,
GA_ROOT
),
DISCL_BACKGROUND
|
DISCL_EXCLUSIVE
);
IDirectInputDevice8_SetCooperativeLevel
(
joy
->
device
,
GetAncestor
(
hwnd
,
GA_ROOT
),
DISCL_BACKGROUND
|
DISCL_EXCLUSIVE
);
...
@@ -942,7 +946,7 @@ static DWORD WINAPI ff_input_thread(void *param)
...
@@ -942,7 +946,7 @@ static DWORD WINAPI ff_input_thread(void *param)
Sleep
(
TEST_POLL_TIME
);
Sleep
(
TEST_POLL_TIME
);
if
(
!
(
effect
=
get_selected_effect
(
joy
)))
continue
;
if
(
!
(
effect
=
get_selected_effect
()))
continue
;
poll_input
(
joy
,
&
state
);
poll_input
(
joy
,
&
state
);
...
@@ -1207,6 +1211,7 @@ LONG CALLBACK CPlApplet(HWND hwnd, UINT command, LPARAM lParam1, LPARAM lParam2)
...
@@ -1207,6 +1211,7 @@ LONG CALLBACK CPlApplet(HWND hwnd, UINT command, LPARAM lParam1, LPARAM lParam2)
break
;
break
;
case
CPL_STOP
:
case
CPL_STOP
:
clear_effects
();
destroy_joysticks
(
&
data
);
destroy_joysticks
(
&
data
);
/* And destroy dinput too */
/* And destroy dinput too */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment