Henri Verbeet : wined3d: Acquire / release the focus window during reset.
Alexandre Julliard
julliard at winehq.org
Wed Oct 6 14:04:15 CDT 2010
Module: wine
Branch: master
Commit: a59d0f45c1ab26c4754c9eb5d8c730a5dc997ba1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a59d0f45c1ab26c4754c9eb5d8c730a5dc997ba1
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed Oct 6 12:01:29 2010 +0200
wined3d: Acquire / release the focus window during reset.
---
dlls/wined3d/device.c | 26 +++++++++++++++++++++++---
1 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 7b2b8ce..97acd5f 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -6354,15 +6354,30 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Reset(IWineD3DDevice *iface,
if (!pPresentationParameters->Windowed != !swapchain->presentParms.Windowed
|| DisplayModeChanged)
{
+ BOOL filter = This->filter_messages;
+ This->filter_messages = TRUE;
+
IWineD3DDevice_SetDisplayMode(iface, 0, &mode);
if (!pPresentationParameters->Windowed)
{
- if(swapchain->presentParms.Windowed) {
+ if (swapchain->presentParms.Windowed)
+ {
+ HWND focus_window = This->createParms.hFocusWindow;
+ if (!focus_window) focus_window = pPresentationParameters->hDeviceWindow;
+ if (FAILED(hr = IWineD3DDevice_AcquireFocusWindow(iface, focus_window)))
+ {
+ ERR("Failed to acquire focus window, hr %#x.\n", hr);
+ IWineD3DSwapChain_Release((IWineD3DSwapChain *)swapchain);
+ return hr;
+ }
+
/* switch from windowed to fs */
swapchain_setup_fullscreen_window(swapchain, pPresentationParameters->BackBufferWidth,
pPresentationParameters->BackBufferHeight);
- } else {
+ }
+ else
+ {
/* Fullscreen -> fullscreen mode change */
MoveWindow(swapchain->device_window, 0, 0,
pPresentationParameters->BackBufferWidth, pPresentationParameters->BackBufferHeight,
@@ -6373,9 +6388,14 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Reset(IWineD3DDevice *iface,
{
/* Fullscreen -> windowed switch */
swapchain_restore_fullscreen_window(swapchain);
+ IWineD3DDevice_ReleaseFocusWindow(iface);
}
swapchain->presentParms.Windowed = pPresentationParameters->Windowed;
- } else if(!pPresentationParameters->Windowed) {
+
+ This->filter_messages = filter;
+ }
+ else if (!pPresentationParameters->Windowed)
+ {
DWORD style = This->style, exStyle = This->exStyle;
/* If we're in fullscreen, and the mode wasn't changed, we have to get the window back into
* the right position. Some applications(Battlefield 2, Guild Wars) move it and then call
More information about the wine-cvs
mailing list