]> git.sesse.net Git - vlc/blobdiff - activex/oleinplaceobject.cpp
Better credits for FLAC 1.1.3
[vlc] / activex / oleinplaceobject.cpp
index 80c4a519b35493ea2a259f8d4bff8b91ccc876fb..5ea9b39722aff87665b9d0c0c84b27115518bea2 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * oleinplaceobject.cpp: ActiveX control for VLC
  *****************************************************************************
- * Copyright (C) 2005 VideoLAN
+ * Copyright (C) 2005 the VideoLAN team
  *
  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
  *
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #include "plugin.h"
@@ -30,18 +30,15 @@ using namespace std;
 STDMETHODIMP VLCOleInPlaceObject::GetWindow(HWND *pHwnd)
 {
     if( NULL == pHwnd )
-        return E_INVALIDARG;
+        return E_POINTER;
 
+    *pHwnd = NULL;
     if( _p_instance->isInPlaceActive() )
     {
         if( NULL != (*pHwnd = _p_instance->getInPlaceWindow()) )
             return S_OK;
-
-        return E_FAIL;
     }
-    *pHwnd = NULL;
-
-    return E_UNEXPECTED;
+    return E_FAIL;
 };
 
 STDMETHODIMP VLCOleInPlaceObject::ContextSensitiveHelp(BOOL fEnterMode)
@@ -54,6 +51,7 @@ STDMETHODIMP VLCOleInPlaceObject::InPlaceDeactivate(void)
     if( _p_instance->isInPlaceActive() )
     {
         UIDeactivate();
+
         _p_instance->onInPlaceDeactivate();
 
         LPOLEOBJECT p_oleObject;
@@ -83,28 +81,45 @@ STDMETHODIMP VLCOleInPlaceObject::UIDeactivate(void)
     if( _p_instance->isInPlaceActive() )
     {
         if( _p_instance->hasFocus() )
-        {
             _p_instance->setFocus(FALSE);
 
-            LPOLEOBJECT p_oleObject;
-            if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) 
+        LPOLEOBJECT p_oleObject;
+        if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) 
+        {
+            LPOLECLIENTSITE p_clientSite;
+            if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
             {
-                LPOLECLIENTSITE p_clientSite;
-                if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
+                LPOLEINPLACESITE p_inPlaceSite;
+
+                if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
                 {
-                    LPOLEINPLACESITE p_inPlaceSite;
+                    LPOLEINPLACEFRAME p_inPlaceFrame;
+                    LPOLEINPLACEUIWINDOW p_inPlaceUIWindow;
+                    OLEINPLACEFRAMEINFO oleFrameInfo;
+                    RECT posRect, clipRect;
 
-                    if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
+                    oleFrameInfo.cb = sizeof(OLEINPLACEFRAMEINFO);
+                    if( SUCCEEDED(p_inPlaceSite->GetWindowContext(&p_inPlaceFrame, &p_inPlaceUIWindow, &posRect, &clipRect, &oleFrameInfo)) )
                     {
-                        p_inPlaceSite->OnUIDeactivate(FALSE);
-                        p_inPlaceSite->Release();
+                        if( p_inPlaceFrame )
+                        {
+                            p_inPlaceFrame->SetActiveObject(NULL, NULL);
+                            p_inPlaceFrame->Release();
+                        }
+                        if( p_inPlaceUIWindow )
+                        {
+                            p_inPlaceUIWindow->SetActiveObject(NULL, NULL);
+                            p_inPlaceUIWindow->Release();
+                        }
                     }
-                    p_clientSite->Release();
+                    p_inPlaceSite->OnUIDeactivate(FALSE);
+                    p_inPlaceSite->Release();
                 }
-                p_oleObject->Release();
+                p_clientSite->Release();
             }
-            return S_OK;
+            p_oleObject->Release();
         }
+        return S_OK;
     }
     return E_UNEXPECTED;
 };