]> git.sesse.net Git - vlc/blobdiff - activex/plugin.cpp
main.cpp: fixed bug regarding TypeLib registration
[vlc] / activex / plugin.cpp
index a419037bb3ae0cccaa944ebcfba47b48186b026d..416fb2b7256a62baec0f2891f1c86ba326e5e042 100644 (file)
@@ -484,11 +484,15 @@ void VLCPlugin::calcPositionChange(LPRECT lprPosRect, LPCRECT lprcClipRect)
     }
 };
 
-HRESULT VLCPlugin::onInitNew(void)
+HRESULT VLCPlugin::onInit(BOOL isNew)
 {
     if( 0 == _i_vlc )
     {
+#ifdef ACTIVEX_DEBUG
+        char *ppsz_argv[] = { "vlc", "-vvv", "--fast-mutex", "--win9x-cv-method=1" };
+#else
         char *ppsz_argv[] = { "vlc", "-vv" };
+#endif
         HKEY h_key;
         DWORD i_type, i_data = MAX_PATH + 1;
         char p_data[MAX_PATH + 1];
@@ -512,18 +516,65 @@ HRESULT VLCPlugin::onInitNew(void)
 #endif
 
         _i_vlc = VLC_Create();
-        
+
         if( VLC_Init(_i_vlc, sizeof(ppsz_argv)/sizeof(char*), ppsz_argv) )
         {
             VLC_Destroy(_i_vlc);
             _i_vlc = 0;
             return E_FAIL;
         }
+
+        if( isNew )
+        {
+            /*
+            ** object has fully initialized,
+            ** try to activate in place if container is ready
+            */
+            LPOLECLIENTSITE pActiveSite;
+
+            if( SUCCEEDED(vlcOleObject->GetClientSite(&pActiveSite)) && (NULL != pActiveSite) )
+            {
+                vlcOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pActiveSite, 0, NULL, NULL);
+                pActiveSite->Release();
+            }
+        }
         return S_OK;
     }
     return E_UNEXPECTED;
 };
-    
+
+HRESULT VLCPlugin::onLoad(void)
+{
+    /*
+    ** object has fully initialized,
+    ** try to activate in place if container is ready
+    */
+    LPOLECLIENTSITE pActiveSite;
+
+    if( SUCCEEDED(vlcOleObject->GetClientSite(&pActiveSite)) && (NULL != pActiveSite) )
+    {
+        vlcOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pActiveSite, 0, NULL, NULL);
+        pActiveSite->Release();
+    }
+    return S_OK;
+};
+
+HRESULT VLCPlugin::onClientSiteChanged(LPOLECLIENTSITE pActiveSite)
+{
+    if( NULL != pActiveSite )
+    {
+        /*
+        ** object is embedded in container 
+        ** try to activate in place if it has initialized
+        */
+        if( _i_vlc )
+        {
+            vlcOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, pActiveSite, 0, NULL, NULL);
+        }
+    }
+    return S_OK;
+};
+
 HRESULT VLCPlugin::onClose(DWORD dwSaveOption)
 {
     if( _i_vlc )