From 573abf839890afdd616307fbf644a15606cc6aee Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Thu, 20 May 2010 00:24:28 +0200 Subject: [PATCH] mciqtz32: Handle window visibility better. Video Window only needs to be created on play, so defer until then. --- dlls/mciqtz32/mciqtz.c | 31 ++++++++++++++++++++++++------- dlls/mciqtz32/mciqtz_private.h | 2 +- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c index 4c9baf54451..599a6f0c68a 100644 --- a/dlls/mciqtz32/mciqtz.c +++ b/dlls/mciqtz32/mciqtz.c @@ -199,19 +199,21 @@ static DWORD MCIQTZ_mciOpen(UINT wDevID, DWORD dwFlags, DWORD style; RECT rc = { 0, 0, 0, 0 }; IVideoWindow_put_AutoShow(vidwin, OAFALSE); + IVideoWindow_put_Visible(vidwin, OAFALSE); style = 0; if (dwFlags & MCI_DGV_OPEN_WS) style |= lpOpenParms->dwStyle; if (dwFlags & MCI_DGV_OPEN_PARENT) { - style |= WS_CHILD; IVideoWindow_put_MessageDrain(vidwin, (OAHWND)lpOpenParms->hWndParent); IVideoWindow_put_WindowState(vidwin, SW_HIDE); + IVideoWindow_put_WindowStyle(vidwin, WS_CHILD); IVideoWindow_put_Owner(vidwin, (OAHWND)lpOpenParms->hWndParent); + wma->parent = (HWND)lpOpenParms->hWndParent; } - IVideoWindow_put_WindowStyle(vidwin, style); + else if (style) + IVideoWindow_put_WindowStyle(vidwin, style); IBasicVideo_GetVideoSize(vidbasic, &rc.right, &rc.bottom); IVideoWindow_SetWindowPosition(vidwin, rc.left, rc.top, rc.right, rc.bottom); - IVideoWindow_put_Visible(vidwin, OATRUE); IBasicVideo_Release(vidbasic); } if (vidwin) @@ -284,7 +286,14 @@ static DWORD MCIQTZ_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms return MCIERR_INTERNAL; } - wma->started = TRUE; + if (!wma->parent) { + IVideoWindow *vidwin; + IFilterGraph2_QueryInterface(wma->pgraph, &IID_IVideoWindow, (void**)&vidwin); + if (vidwin) { + IVideoWindow_put_Visible(vidwin, OATRUE); + IVideoWindow_Release(vidwin); + } + } return 0; } @@ -358,7 +367,7 @@ static DWORD MCIQTZ_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPa if (!wma) return MCIERR_INVALID_DEVICE_ID; - if (!wma->started) + if (!wma->opened) return 0; hr = IMediaControl_Stop(wma->pmctrl); @@ -367,7 +376,14 @@ static DWORD MCIQTZ_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpPa return MCIERR_INTERNAL; } - wma->started = FALSE; + if (!wma->parent) { + IVideoWindow *vidwin; + IFilterGraph2_QueryInterface(wma->pgraph, &IID_IVideoWindow, (void**)&vidwin); + if (vidwin) { + IVideoWindow_put_Visible(vidwin, OAFALSE); + IVideoWindow_Release(vidwin); + } + } return 0; } @@ -793,7 +809,8 @@ out: if (vidbasic) IBasicVideo_Release(vidbasic); if (vidwin) { - IVideoWindow_put_Visible(vidwin, OATRUE); + if (wma->parent) + IVideoWindow_put_Visible(vidwin, OATRUE); IVideoWindow_Release(vidwin); } } diff --git a/dlls/mciqtz32/mciqtz_private.h b/dlls/mciqtz32/mciqtz_private.h index 2269c423ba9..2fdef7341ee 100644 --- a/dlls/mciqtz32/mciqtz_private.h +++ b/dlls/mciqtz32/mciqtz_private.h @@ -31,9 +31,9 @@ typedef struct { BOOL uninit; IGraphBuilder* pgraph; IMediaControl* pmctrl; - BOOL started; DWORD time_format; UINT command_table; + HWND parent; } WINE_MCIQTZ; #endif /* __WINE_PRIVATE_MCIQTZ_H */ -- 2.11.4.GIT