WPF's MediaPlayer class expects those not to fail
Signed-off-by: Anton Romanov theli.ua@gmail.com --- dlls/wmp/oleobj.c | 2 +- dlls/wmp/player.c | 37 ++++++++++++++++++++++++++++--------- dlls/wmp/tests/oleobj.c | 32 ++++++++++++++++++++++++++++++++ dlls/wmp/wmp_private.h | 7 ++++++- 4 files changed, 67 insertions(+), 11 deletions(-)
diff --git a/dlls/wmp/oleobj.c b/dlls/wmp/oleobj.c index 1baf45a439..25787fa759 100644 --- a/dlls/wmp/oleobj.c +++ b/dlls/wmp/oleobj.c @@ -898,7 +898,7 @@ HRESULT WINAPI WMPFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
wmp->ref = 1;
- init_player_ifaces(wmp); + init_player(wmp);
ConnectionPointContainer_Init(wmp); hdc = GetDC(0); diff --git a/dlls/wmp/player.c b/dlls/wmp/player.c index d15538a721..3edbb74877 100644 --- a/dlls/wmp/player.c +++ b/dlls/wmp/player.c @@ -756,15 +756,19 @@ static HRESULT WINAPI WMPSettings_get_isAvailable(IWMPSettings *iface, BSTR item static HRESULT WINAPI WMPSettings_get_autoStart(IWMPSettings *iface, VARIANT_BOOL *p) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, p); + if (!p) + return E_POINTER; + *p = This->autoStart; + return S_OK; }
static HRESULT WINAPI WMPSettings_put_autoStart(IWMPSettings *iface, VARIANT_BOOL v) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + TRACE("(%p)->(%x)\n", This, v); + This->autoStart = v; + return S_OK; }
static HRESULT WINAPI WMPSettings_get_baseURL(IWMPSettings *iface, BSTR *p) @@ -798,15 +802,21 @@ static HRESULT WINAPI WMPSettings_put_defaultFrame(IWMPSettings *iface, BSTR v) static HRESULT WINAPI WMPSettings_get_invokeURLs(IWMPSettings *iface, VARIANT_BOOL *p) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); + /* Leaving as FIXME as we don't currently use this */ FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + if (!p) + return E_POINTER; + *p = This->invokeURLs; + return S_OK; }
static HRESULT WINAPI WMPSettings_put_invokeURLs(IWMPSettings *iface, VARIANT_BOOL v) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); + /* Leaving as FIXME as we don't currently use this */ FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + This->invokeURLs = v; + return S_OK; }
static HRESULT WINAPI WMPSettings_get_mute(IWMPSettings *iface, VARIANT_BOOL *p) @@ -896,15 +906,21 @@ static HRESULT WINAPI WMPSettings_setMode(IWMPSettings *iface, BSTR mode, VARIAN static HRESULT WINAPI WMPSettings_get_enableErrorDialogs(IWMPSettings *iface, VARIANT_BOOL *p) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); + /* Leaving as FIXME as we don't currently use this */ FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + if (!p) + return E_POINTER; + *p = This->enableErrorDialogs; + return S_OK; }
static HRESULT WINAPI WMPSettings_put_enableErrorDialogs(IWMPSettings *iface, VARIANT_BOOL v) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); + /* Leaving as FIXME as we don't currently use this */ FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + This->enableErrorDialogs = v; + return S_OK; }
static const IWMPSettingsVtbl WMPSettingsVtbl = { @@ -1139,10 +1155,13 @@ static const IWMPControlsVtbl WMPControlsVtbl = { WMPControls_playItem, };
-void init_player_ifaces(WindowsMediaPlayer *wmp) +void init_player(WindowsMediaPlayer *wmp) { wmp->IWMPPlayer4_iface.lpVtbl = &WMPPlayer4Vtbl; wmp->IWMPPlayer_iface.lpVtbl = &WMPPlayerVtbl; wmp->IWMPSettings_iface.lpVtbl = &WMPSettingsVtbl; wmp->IWMPControls_iface.lpVtbl = &WMPControlsVtbl; + + wmp->invokeURLs = VARIANT_TRUE; + wmp->autoStart = VARIANT_TRUE; } diff --git a/dlls/wmp/tests/oleobj.c b/dlls/wmp/tests/oleobj.c index a004337749..0127d10d3b 100644 --- a/dlls/wmp/tests/oleobj.c +++ b/dlls/wmp/tests/oleobj.c @@ -860,6 +860,7 @@ static void test_wmp_ifaces(IOleObject *oleobj) IWMPPlayer4 *player4; IWMPPlayer *player; IWMPControls *controls; + VARIANT_BOOL vbool, vbool2; HRESULT hres;
hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer4, (void**)&player4); @@ -887,6 +888,37 @@ static void test_wmp_ifaces(IOleObject *oleobj) ok(settings == settings_qi, "settings != settings_qi\n"); IWMPSettings_Release(settings_qi);
+ /* Test few settings put/gets */ + hres = IWMPSettings_get_autoStart(settings, &vbool2); + ok(hres == S_OK, "Could not get autoStart from IWMPSettings: %08x\n", hres); + ok(vbool2, "Default autoStart is not TRUE\n"); + vbool = 0; + hres = IWMPSettings_put_autoStart(settings, vbool); + ok(hres == S_OK, "Could not put autoStart in IWMPSettings: %08x\n", hres); + hres = IWMPSettings_get_autoStart(settings, &vbool2); + ok(hres == S_OK, "Could not get autoStart from IWMPSettings: %08x\n", hres); + ok(vbool2 == vbool, "Did not preserve autoStart\n"); + + hres = IWMPSettings_get_invokeURLs(settings, &vbool2); + ok(hres == S_OK, "Could not get invokeURLs from IWMPSettings: %08x\n", hres); + ok(vbool2 == VARIANT_TRUE, "Default invokeURLs is not TRUE\n"); + vbool = VARIANT_FALSE; + hres = IWMPSettings_put_invokeURLs(settings, vbool); + ok(hres == S_OK, "Could not put invokeURLs in IWMPSettings: %08x\n", hres); + hres = IWMPSettings_get_invokeURLs(settings, &vbool2); + ok(hres == S_OK, "Could not get invokeURLs from IWMPSettings: %08x\n", hres); + ok(vbool2 == vbool, "Did not preserve invokeURLs\n"); + + hres = IWMPSettings_get_enableErrorDialogs(settings, &vbool2); + ok(hres == S_OK, "Could not get enableErrorDialogs from IWMPSettings: %08x\n", hres); + ok(vbool2 == VARIANT_FALSE, "Default enableErrorDialogs is not FALSE\n"); + vbool = VARIANT_TRUE; + hres = IWMPSettings_put_enableErrorDialogs(settings, vbool); + ok(hres == S_OK, "Could not put enableErrorDialogs in IWMPSettings: %08x\n", hres); + hres = IWMPSettings_get_enableErrorDialogs(settings, &vbool2); + ok(hres == S_OK, "Could not get enableErrorDialogs from IWMPSettings: %08x\n", hres); + ok(vbool2 == vbool, "Did not preserve enableErrorDialogs\n"); + IWMPSettings_Release(settings); IWMPPlayer4_Release(player4);
diff --git a/dlls/wmp/wmp_private.h b/dlls/wmp/wmp_private.h index 65de6bbd09..477dca4b10 100644 --- a/dlls/wmp/wmp_private.h +++ b/dlls/wmp/wmp_private.h @@ -52,10 +52,15 @@ struct WindowsMediaPlayer { HWND hwnd; SIZEL extent;
+ /* Settings */ + VARIANT_BOOL autoStart; + VARIANT_BOOL invokeURLs; + VARIANT_BOOL enableErrorDialogs; + ConnectionPoint *wmpocx; };
-void init_player_ifaces(WindowsMediaPlayer*) DECLSPEC_HIDDEN; +void init_player(WindowsMediaPlayer*) DECLSPEC_HIDDEN; void ConnectionPointContainer_Init(WindowsMediaPlayer *wmp) DECLSPEC_HIDDEN; void ConnectionPointContainer_Destroy(WindowsMediaPlayer *wmp) DECLSPEC_HIDDEN;