WPF's MediaPlayer class expects those not to fail
Signed-off-by: Anton Romanov <theli.ua(a)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;
--
2.16.2