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