Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
1dae4c68
Commit
1dae4c68
authored
Oct 15, 2006
by
Vitaliy Margolen
Committed by
Alexandre Julliard
Oct 17, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dinput: Move SetCooperativeLevel into base class.
parent
af34ef12
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
60 deletions
+46
-60
device.c
dlls/dinput/device.c
+34
-7
device_private.h
dlls/dinput/device_private.h
+2
-0
mouse.c
dlls/dinput/mouse.c
+10
-53
No files found.
dlls/dinput/device.c
View file @
1dae4c68
...
...
@@ -463,15 +463,42 @@ HRESULT WINAPI IDirectInputDevice2AImpl_SetDataFormat(
return
DI_OK
;
}
/******************************************************************************
* SetCooperativeLevel
*
* Set cooperative level and the source window for the events.
*/
HRESULT
WINAPI
IDirectInputDevice2AImpl_SetCooperativeLevel
(
LPDIRECTINPUTDEVICE8A
iface
,
HWND
hwnd
,
DWORD
dwflags
)
{
LPDIRECTINPUTDEVICE8A
iface
,
HWND
hwnd
,
DWORD
dwflags
)
{
IDirectInputDevice2AImpl
*
This
=
(
IDirectInputDevice2AImpl
*
)
iface
;
TRACE
(
"(this=%p,%p,0x%08x)
\n
"
,
This
,
hwnd
,
dwflags
);
if
(
TRACE_ON
(
dinput
))
{
TRACE
(
" cooperative level : "
);
_dump_cooperativelevel_DI
(
dwflags
);
}
TRACE
(
"(%p) %p,0x%08x
\n
"
,
This
,
hwnd
,
dwflags
);
TRACE
(
" cooperative level : "
);
_dump_cooperativelevel_DI
(
dwflags
);
if
((
dwflags
&
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
))
==
0
||
(
dwflags
&
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
))
==
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
)
||
(
dwflags
&
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
==
0
||
(
dwflags
&
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
==
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
return
DIERR_INVALIDPARAM
;
if
(
dwflags
==
(
DISCL_NONEXCLUSIVE
|
DISCL_BACKGROUND
))
hwnd
=
GetDesktopWindow
();
if
(
!
hwnd
)
return
E_HANDLE
;
/* For security reasons native does not allow exclusive background level
for mouse and keyboard only */
if
(
dwflags
&
DISCL_EXCLUSIVE
&&
dwflags
&
DISCL_BACKGROUND
&&
(
IsEqualGUID
(
&
This
->
guid
,
&
GUID_SysMouse
)
||
IsEqualGUID
(
&
This
->
guid
,
&
GUID_SysKeyboard
)))
return
DIERR_UNSUPPORTED
;
/* Store the window which asks for the mouse */
This
->
win
=
hwnd
;
This
->
dwCoopLevel
=
dwflags
;
return
DI_OK
;
}
...
...
dlls/dinput/device_private.h
View file @
1dae4c68
...
...
@@ -34,6 +34,8 @@ struct IDirectInputDevice2AImpl
LONG
ref
;
GUID
guid
;
HANDLE
hEvent
;
DWORD
dwCoopLevel
;
HWND
win
;
};
/* Routines to do DataFormat / WineFormat conversions */
...
...
dlls/dinput/mouse.c
View file @
1dae4c68
...
...
@@ -124,8 +124,6 @@ struct SysMouseImpl
LONG
prevX
,
prevY
;
/* These are used in case of relative -> absolute transitions */
POINT
org_coords
;
HWND
win
;
DWORD
dwCoopLevel
;
POINT
mapped_center
;
DWORD
win_centerX
,
win_centerY
;
LPDIDEVICEOBJECTDATA
data_queue
;
...
...
@@ -250,6 +248,7 @@ static SysMouseImpl *alloc_device(REFGUID rguid, const void *mvt, IDirectInputIm
newDevice
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
SysMouseImpl
));
newDevice
->
base
.
lpVtbl
=
mvt
;
newDevice
->
base
.
ref
=
1
;
newDevice
->
base
.
dwCoopLevel
=
DISCL_NONEXCLUSIVE
|
DISCL_BACKGROUND
;
memcpy
(
&
newDevice
->
base
.
guid
,
rguid
,
sizeof
(
*
rguid
));
InitializeCriticalSection
(
&
(
newDevice
->
crit
));
...
...
@@ -261,7 +260,6 @@ static SysMouseImpl *alloc_device(REFGUID rguid, const void *mvt, IDirectInputIm
newDevice
->
wine_df
->
internal_format_size
=
Wine_InternalMouseFormat
.
dwDataSize
;
newDevice
->
wine_df
->
dt
=
NULL
;
newDevice
->
dinput
=
dinput
;
newDevice
->
dwCoopLevel
=
DISCL_NONEXCLUSIVE
|
DISCL_BACKGROUND
;
return
newDevice
;
}
...
...
@@ -344,47 +342,6 @@ static ULONG WINAPI SysMouseAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
return
0
;
}
/******************************************************************************
* SetCooperativeLevel : store the window in which we will do our
* grabbing.
*/
static
HRESULT
WINAPI
SysMouseAImpl_SetCooperativeLevel
(
LPDIRECTINPUTDEVICE8A
iface
,
HWND
hwnd
,
DWORD
dwflags
)
{
SysMouseImpl
*
This
=
(
SysMouseImpl
*
)
iface
;
TRACE
(
"(this=%p,%p,0x%08x)
\n
"
,
This
,
hwnd
,
dwflags
);
if
(
TRACE_ON
(
dinput
))
{
TRACE
(
" cooperative level : "
);
_dump_cooperativelevel_DI
(
dwflags
);
}
if
((
dwflags
&
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
))
==
0
||
(
dwflags
&
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
))
==
(
DISCL_EXCLUSIVE
|
DISCL_NONEXCLUSIVE
)
||
(
dwflags
&
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
==
0
||
(
dwflags
&
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
==
(
DISCL_FOREGROUND
|
DISCL_BACKGROUND
))
return
DIERR_INVALIDPARAM
;
if
(
dwflags
==
(
DISCL_NONEXCLUSIVE
|
DISCL_BACKGROUND
))
hwnd
=
GetDesktopWindow
();
if
(
!
hwnd
)
return
E_HANDLE
;
if
(
dwflags
&
DISCL_EXCLUSIVE
&&
dwflags
&
DISCL_BACKGROUND
)
{
return
DIERR_UNSUPPORTED
;
}
/* Store the window which asks for the mouse */
This
->
win
=
hwnd
;
This
->
dwCoopLevel
=
dwflags
;
return
DI_OK
;
}
/******************************************************************************
* SetDataFormat : the application can choose the format of the data
* the device driver sends back with GetDeviceState.
...
...
@@ -430,7 +387,7 @@ static LRESULT CALLBACK dinput_mouse_hook( int code, WPARAM wparam, LPARAM lpara
if
(
code
!=
HC_ACTION
)
return
CallNextHookEx
(
0
,
code
,
wparam
,
lparam
);
EnterCriticalSection
(
&
(
This
->
crit
));
dwCoop
=
This
->
dwCoopLevel
;
dwCoop
=
This
->
base
.
dwCoopLevel
;
if
(
wparam
==
WM_MOUSEMOVE
)
{
if
(
This
->
absolute
)
{
...
...
@@ -553,7 +510,7 @@ static BOOL dinput_window_check(SysMouseImpl* This) {
DWORD
centerX
,
centerY
;
/* make sure the window hasn't moved */
if
(
!
GetWindowRect
(
This
->
win
,
&
rect
))
if
(
!
GetWindowRect
(
This
->
base
.
win
,
&
rect
))
return
FALSE
;
centerX
=
(
rect
.
right
-
rect
.
left
)
/
2
;
centerY
=
(
rect
.
bottom
-
rect
.
top
)
/
2
;
...
...
@@ -563,7 +520,7 @@ static BOOL dinput_window_check(SysMouseImpl* This) {
}
This
->
mapped_center
.
x
=
This
->
win_centerX
;
This
->
mapped_center
.
y
=
This
->
win_centerY
;
MapWindowPoints
(
This
->
win
,
HWND_DESKTOP
,
&
This
->
mapped_center
,
1
);
MapWindowPoints
(
This
->
base
.
win
,
HWND_DESKTOP
,
&
This
->
mapped_center
,
1
);
return
TRUE
;
}
...
...
@@ -605,12 +562,12 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
This
->
m_state
.
rgbButtons
[
2
]
=
GetKeyState
(
VK_MBUTTON
)
&
0x80
;
/* Install our mouse hook */
if
(
This
->
dwCoopLevel
&
DISCL_EXCLUSIVE
)
if
(
This
->
base
.
dwCoopLevel
&
DISCL_EXCLUSIVE
)
ShowCursor
(
FALSE
);
/* hide cursor */
set_dinput_hook
(
WH_MOUSE_LL
,
dinput_mouse_hook
);
/* Get the window dimension and find the center */
GetWindowRect
(
This
->
win
,
&
rect
);
GetWindowRect
(
This
->
base
.
win
,
&
rect
);
This
->
win_centerX
=
(
rect
.
right
-
rect
.
left
)
/
2
;
This
->
win_centerY
=
(
rect
.
bottom
-
rect
.
top
)
/
2
;
...
...
@@ -618,7 +575,7 @@ static HRESULT WINAPI SysMouseAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
if
(
This
->
absolute
==
0
)
{
This
->
mapped_center
.
x
=
This
->
win_centerX
;
This
->
mapped_center
.
y
=
This
->
win_centerY
;
MapWindowPoints
(
This
->
win
,
HWND_DESKTOP
,
&
This
->
mapped_center
,
1
);
MapWindowPoints
(
This
->
base
.
win
,
HWND_DESKTOP
,
&
This
->
mapped_center
,
1
);
TRACE
(
"Warping mouse to %d - %d
\n
"
,
This
->
mapped_center
.
x
,
This
->
mapped_center
.
y
);
SetCursorPos
(
This
->
mapped_center
.
x
,
This
->
mapped_center
.
y
);
This
->
last_warped
=
GetCurrentTime
();
...
...
@@ -647,7 +604,7 @@ static HRESULT WINAPI SysMouseAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface)
}
set_dinput_hook
(
WH_MOUSE_LL
,
NULL
);
if
(
This
->
dwCoopLevel
&
DISCL_EXCLUSIVE
)
if
(
This
->
base
.
dwCoopLevel
&
DISCL_EXCLUSIVE
)
ShowCursor
(
TRUE
);
/* show cursor */
/* No more locks */
...
...
@@ -1091,7 +1048,7 @@ static const IDirectInputDevice8AVtbl SysMouseAvt =
SysMouseAImpl_GetDeviceData
,
SysMouseAImpl_SetDataFormat
,
IDirectInputDevice2AImpl_SetEventNotification
,
SysMouse
AImpl_SetCooperativeLevel
,
IDirectInputDevice2
AImpl_SetCooperativeLevel
,
IDirectInputDevice2AImpl_GetObjectInfo
,
SysMouseAImpl_GetDeviceInfo
,
IDirectInputDevice2AImpl_RunControlPanel
,
...
...
@@ -1133,7 +1090,7 @@ static const IDirectInputDevice8WVtbl SysMouseWvt =
XCAST
(
GetDeviceData
)
SysMouseAImpl_GetDeviceData
,
XCAST
(
SetDataFormat
)
SysMouseAImpl_SetDataFormat
,
XCAST
(
SetEventNotification
)
IDirectInputDevice2AImpl_SetEventNotification
,
XCAST
(
SetCooperativeLevel
)
SysMouse
AImpl_SetCooperativeLevel
,
XCAST
(
SetCooperativeLevel
)
IDirectInputDevice2
AImpl_SetCooperativeLevel
,
IDirectInputDevice2WImpl_GetObjectInfo
,
SysMouseWImpl_GetDeviceInfo
,
XCAST
(
RunControlPanel
)
IDirectInputDevice2AImpl_RunControlPanel
,
...
...
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