[PATCH 3/5] mciqtz32: Fix Window visibility

Maarten Lankhorst m.b.lankhorst at gmail.com
Fri May 21 15:14:54 CDT 2010


---
 dlls/mciqtz32/mciqtz.c |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c
index dd66a00..598b375 100644
--- a/dlls/mciqtz32/mciqtz.c
+++ b/dlls/mciqtz32/mciqtz.c
@@ -804,15 +804,12 @@ static DWORD MCIQTZ_mciWindow(UINT wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMS
         return 0;
 
     if (dwFlags & MCI_DGV_WINDOW_HWND && (IsWindow(lpParms->hWnd) || !lpParms->hWnd)) {
-        LONG style = 0;
         TRACE("Setting hWnd to %p\n", lpParms->hWnd);
         IVideoWindow_put_Visible(vidwin, OAFALSE);
-        IVideoWindow_get_WindowStyle(vidwin, &style);
-        style &= ~WS_CHILD;
         if (lpParms->hWnd)
-            IVideoWindow_put_WindowStyle(vidwin, style|WS_CHILD);
+            IVideoWindow_put_WindowStyle(vidwin, WS_CHILD);
         else
-            IVideoWindow_put_WindowStyle(vidwin, style);
+            IVideoWindow_put_WindowStyle(vidwin, 0);
         IVideoWindow_put_Owner(vidwin, (OAHWND)lpParms->hWnd);
         IVideoWindow_put_Visible(vidwin, OATRUE);
         wma->parent = lpParms->hWnd;
@@ -847,6 +844,7 @@ static DWORD MCIQTZ_mciUpdate(UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS
         return MCIERR_INVALID_DEVICE_ID;
 
     if (dwFlags & MCI_DGV_UPDATE_HDC) {
+        LONG old_state = State_Paused;
         IBasicVideo *vidbasic;
         IVideoWindow *vidwin;
         res = MCIERR_INTERNAL;
@@ -862,8 +860,9 @@ static DWORD MCIQTZ_mciUpdate(UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS
             /* If in stopped state, nothing has been drawn to screen
              * moving to pause, which is needed for the old dib renderer, will result
              * in a single frame drawn, so hide the window here */
-            IVideoWindow_put_Visible(vidwin, OAFALSE);
-            /* FIXME: Should we check the original state and restore it? */
+            if (old_state == State_Stopped)
+                IVideoWindow_put_Visible(vidwin, OAFALSE);
+            IMediaControl_GetState(wma->pmctrl, -1, &old_state);
             IMediaControl_Pause(wma->pmctrl);
             IMediaControl_GetState(wma->pmctrl, -1, &state);
             if (FAILED(hr = IBasicVideo_GetCurrentImage(vidbasic, &size, NULL))) {
@@ -881,10 +880,12 @@ static DWORD MCIQTZ_mciUpdate(UINT wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS
                   dest.left, dest.top, dest.right + dest.left, dest.bottom + dest.top,
                   src.left, src.top, src.right + src.left, src.bottom + src.top,
                   data, info, DIB_RGB_COLORS, SRCCOPY);
-            HeapFree(GetProcessHeap(), 0, data);
+            CoTaskMemFree(data);
         }
         res = 0;
 out:
+        if (old_state == State_Running)
+            IMediaControl_Run(wma->pmctrl);
         if (vidbasic)
             IBasicVideo_Release(vidbasic);
         if (vidwin) {
-- 
1.7.0.4




More information about the wine-patches mailing list