Maarten Lankhorst : mciqtz32: Handle window visibility better.
Alexandre Julliard
julliard at winehq.org
Thu May 20 11:02:57 CDT 2010
Module: wine
Branch: master
Commit: 573abf839890afdd616307fbf644a15606cc6aee
URL: http://source.winehq.org/git/wine.git/?a=commit;h=573abf839890afdd616307fbf644a15606cc6aee
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Thu May 20 00:24:28 2010 +0200
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 4c9baf5..599a6f0 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 2269c42..2fdef73 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 */
More information about the wine-cvs
mailing list