]> git.sesse.net Git - vlc/blobdiff - activex/oleinplaceactiveobject.cpp
Add v4l2 section in extended pannel. The code isn't v4l2 specific at all so it could...
[vlc] / activex / oleinplaceactiveobject.cpp
index e73a2b95990a8f90f2d00401941c929a402e6ab8..11b267227868696d616ea2c8e87500ab0574f347 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * oleinplaceactiveobject.cpp: ActiveX control for VLC
  *****************************************************************************
- * Copyright (C) 2005 VideoLAN (Centrale Réseaux) and its contributors
+ * 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"
@@ -28,23 +28,20 @@ using namespace std;
 STDMETHODIMP VLCOleInPlaceActiveObject::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 VLCOleInPlaceActiveObject::EnableModeless(BOOL fEnable)
 {
-    return E_NOTIMPL;
+    return S_OK;
 };
 
 STDMETHODIMP VLCOleInPlaceActiveObject::ContextSensitiveHelp(BOOL fEnterMode)
@@ -54,21 +51,41 @@ STDMETHODIMP VLCOleInPlaceActiveObject::ContextSensitiveHelp(BOOL fEnterMode)
 
 STDMETHODIMP VLCOleInPlaceActiveObject::TranslateAccelerator(LPMSG lpmsg)
 {
-    return E_NOTIMPL;
+    HRESULT hr = S_FALSE;
+    LPOLEOBJECT oleObj;
+    if( SUCCEEDED(QueryInterface(IID_IOleObject, (LPVOID *)&oleObj)) )
+    {
+        LPOLECLIENTSITE clientSite;
+        if( SUCCEEDED(oleObj->GetClientSite(&clientSite)) && (NULL != clientSite) )
+        {
+            IOleControlSite *controlSite;
+            if( SUCCEEDED(clientSite->QueryInterface(IID_IOleControlSite, (LPVOID *)&controlSite)) )
+            {
+                hr = controlSite->TranslateAccelerator(lpmsg,
+                    ((GetKeyState(VK_SHIFT) >> 15) & 1) |
+                    ((GetKeyState(VK_CONTROL) >> 14) & 2) |
+                    ((GetKeyState(VK_MENU) >> 13) & 4) );
+                controlSite->Release();
+            }
+            clientSite->Release();
+        }
+        oleObj->Release();
+    }
+    return hr;
 };
 
 STDMETHODIMP VLCOleInPlaceActiveObject::OnFrameWindowActivate(BOOL fActivate)
 {
-    return E_NOTIMPL;
+    return S_OK;
 };
 
 STDMETHODIMP VLCOleInPlaceActiveObject::OnDocWindowActivate(BOOL fActivate)
 {
-    return E_NOTIMPL;
+    return S_OK;
 };
 
 STDMETHODIMP VLCOleInPlaceActiveObject::ResizeBorder(LPCRECT prcBorder, LPOLEINPLACEUIWINDOW pUIWindow, BOOL fFrameWindow)
 {
-    return E_NOTIMPL;
+    return S_OK;
 };