1 /* 2 * Copyright 2012 Jacek Caban for CodeWeavers 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #include "ieframe.h" 20 21 #include "wine/debug.h" 22 23 WINE_DEFAULT_DEBUG_CHANNEL(ieframe); 24 25 struct ShellUIHelper { 26 IShellUIHelper2 IShellUIHelper2_iface; 27 LONG ref; 28 }; 29 30 static inline ShellUIHelper *impl_from_IShellUIHelper2(IShellUIHelper2 *iface) 31 { 32 return CONTAINING_RECORD(iface, ShellUIHelper, IShellUIHelper2_iface); 33 } 34 35 static HRESULT WINAPI ShellUIHelper2_QueryInterface(IShellUIHelper2 *iface, REFIID riid, void **ppv) 36 { 37 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 38 39 if(IsEqualGUID(&IID_IUnknown, riid)) { 40 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); 41 *ppv = &This->IShellUIHelper2_iface; 42 }else if(IsEqualGUID(&IID_IDispatch, riid)) { 43 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); 44 *ppv = &This->IShellUIHelper2_iface; 45 }else if(IsEqualGUID(&IID_IShellUIHelper, riid)) { 46 TRACE("(%p)->(IID_IShellUIHelper %p)\n", This, ppv); 47 *ppv = &This->IShellUIHelper2_iface; 48 }else if(IsEqualGUID(&IID_IShellUIHelper2, riid)) { 49 TRACE("(%p)->(IID_IShellUIHelper2 %p)\n", This, ppv); 50 *ppv = &This->IShellUIHelper2_iface; 51 }else { 52 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); 53 *ppv = NULL; 54 return E_NOINTERFACE; 55 } 56 57 IUnknown_AddRef((IUnknown*)*ppv); 58 return S_OK; 59 } 60 61 static ULONG WINAPI ShellUIHelper2_AddRef(IShellUIHelper2 *iface) 62 { 63 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 64 LONG ref = InterlockedIncrement(&This->ref); 65 66 TRACE("(%p) ref=%d\n", This, ref); 67 68 return ref; 69 } 70 71 static ULONG WINAPI ShellUIHelper2_Release(IShellUIHelper2 *iface) 72 { 73 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 74 LONG ref = InterlockedDecrement(&This->ref); 75 76 TRACE("(%p) ref=%d\n", This, ref); 77 78 if(!ref) 79 heap_free(This); 80 81 return ref; 82 } 83 84 static HRESULT WINAPI ShellUIHelper2_GetTypeInfoCount(IShellUIHelper2 *iface, UINT *pctinfo) 85 { 86 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 87 88 TRACE("(%p)->(%p)\n", This, pctinfo); 89 90 *pctinfo = 1; 91 return S_OK; 92 } 93 94 static HRESULT WINAPI ShellUIHelper2_GetTypeInfo(IShellUIHelper2 *iface, UINT iTInfo, LCID lcid, LPTYPEINFO *ppTInfo) 95 { 96 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 97 FIXME("(%p)->(%d %d %p)\n", This, iTInfo, lcid, ppTInfo); 98 return E_NOTIMPL; 99 } 100 101 static HRESULT WINAPI ShellUIHelper2_GetIDsOfNames(IShellUIHelper2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, 102 LCID lcid, DISPID *rgDispId) 103 { 104 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 105 unsigned i; 106 107 FIXME("(%p)->(%s %p %d %d %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId); 108 for(i = 0; i < cNames; i++) 109 FIXME("%s\n", debugstr_w(rgszNames[i])); 110 111 return DISP_E_UNKNOWNNAME; 112 } 113 114 static HRESULT WINAPI ShellUIHelper2_Invoke(IShellUIHelper2 *iface, DISPID dispIdMember, 115 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, 116 EXCEPINFO *pExepInfo, UINT *puArgErr) 117 { 118 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 119 FIXME("(%p)->(%d %s %d %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), 120 lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); 121 return E_NOTIMPL; 122 } 123 124 static HRESULT WINAPI ShellUIHelper2_ResetFirstBootMode(IShellUIHelper2 *iface) 125 { 126 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 127 FIXME("(%p)->()\n", This); 128 return E_NOTIMPL; 129 } 130 131 static HRESULT WINAPI ShellUIHelper2_ResetSafeMode(IShellUIHelper2 *iface) 132 { 133 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 134 FIXME("(%p)->()\n", This); 135 return E_NOTIMPL; 136 } 137 138 static HRESULT WINAPI ShellUIHelper2_RefreshOfflineDesktop(IShellUIHelper2 *iface) 139 { 140 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 141 FIXME("(%p)->()\n", This); 142 return E_NOTIMPL; 143 } 144 145 static HRESULT WINAPI ShellUIHelper2_AddFavourite(IShellUIHelper2 *iface, BSTR URL, VARIANT *Title) 146 { 147 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 148 FIXME("(%p)->(%s %s)\n", This, debugstr_w(URL), debugstr_variant(Title)); 149 return E_NOTIMPL; 150 } 151 152 static HRESULT WINAPI ShellUIHelper2_AddChannel(IShellUIHelper2 *iface, BSTR URL) 153 { 154 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 155 FIXME("(%p)->(%s)\n", This, debugstr_w(URL)); 156 return E_NOTIMPL; 157 } 158 159 static HRESULT WINAPI ShellUIHelper2_AddDesktopComponent(IShellUIHelper2 *iface, BSTR URL, BSTR Type, 160 VARIANT *Left, VARIANT *Top, VARIANT *Width, VARIANT *Height) 161 { 162 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 163 FIXME("(%p)->(%s %s %s %s %s %s)\n", This, debugstr_w(URL), debugstr_w(Type), debugstr_variant(Left), 164 debugstr_variant(Top), debugstr_variant(Width), debugstr_variant(Height)); 165 return E_NOTIMPL; 166 } 167 168 static HRESULT WINAPI ShellUIHelper2_IsSubscribed(IShellUIHelper2 *iface, BSTR URL, VARIANT_BOOL *pBool) 169 { 170 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 171 FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pBool); 172 return E_NOTIMPL; 173 } 174 175 static HRESULT WINAPI ShellUIHelper2_NavigateAndFind(IShellUIHelper2 *iface, BSTR URL, BSTR strQuery, VARIANT *varTargetFrame) 176 { 177 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 178 FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(URL), debugstr_w(strQuery), debugstr_variant(varTargetFrame)); 179 return E_NOTIMPL; 180 } 181 182 static HRESULT WINAPI ShellUIHelper2_ImportExportFavourites(IShellUIHelper2 *iface, VARIANT_BOOL fImport, BSTR strImpExpPath) 183 { 184 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 185 FIXME("(%p)->(%x %s)\n", This, fImport, debugstr_w(strImpExpPath)); 186 return E_NOTIMPL; 187 } 188 189 static HRESULT WINAPI ShellUIHelper2_AutoCompleteSaveForm(IShellUIHelper2 *iface, VARIANT *Form) 190 { 191 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 192 FIXME("(%p)->(%s)\n", This, debugstr_variant(Form)); 193 return E_NOTIMPL; 194 } 195 196 static HRESULT WINAPI ShellUIHelper2_AutoScan(IShellUIHelper2 *iface, BSTR strSearch, BSTR strFailureUrl, VARIANT *pvarTargetFrame) 197 { 198 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 199 FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(strSearch), debugstr_w(strFailureUrl), debugstr_variant(pvarTargetFrame)); 200 return E_NOTIMPL; 201 } 202 203 static HRESULT WINAPI ShellUIHelper2_AutoCompleteAttach(IShellUIHelper2 *iface, VARIANT *Reserved) 204 { 205 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 206 FIXME("(%p)->(%s)\n", This, debugstr_variant(Reserved)); 207 return E_NOTIMPL; 208 } 209 210 static HRESULT WINAPI ShellUIHelper2_ShowBrowserUI(IShellUIHelper2 *iface, BSTR bstrName, VARIANT *pvarIn, VARIANT *pvarOut) 211 { 212 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 213 FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(bstrName), debugstr_variant(pvarIn), pvarOut); 214 return E_NOTIMPL; 215 } 216 217 static HRESULT WINAPI ShellUIHelper2_AddSearchProvider(IShellUIHelper2 *iface, BSTR URL) 218 { 219 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 220 FIXME("(%p)->(%s)\n", This, debugstr_w(URL)); 221 return E_NOTIMPL; 222 } 223 224 static HRESULT WINAPI ShellUIHelper2_RunOnceShown(IShellUIHelper2 *iface) 225 { 226 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 227 FIXME("(%p)->()\n", This); 228 return E_NOTIMPL; 229 } 230 231 static HRESULT WINAPI ShellUIHelper2_SkipRunOnce(IShellUIHelper2 *iface) 232 { 233 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 234 FIXME("(%p)->()\n", This); 235 return E_NOTIMPL; 236 } 237 238 static HRESULT WINAPI ShellUIHelper2_CustomizeSettings(IShellUIHelper2 *iface, VARIANT_BOOL fSQM, 239 VARIANT_BOOL fPhishing, BSTR bstrLocale) 240 { 241 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 242 FIXME("(%p)->(%x %x %s)\n", This, fSQM, fPhishing, debugstr_w(bstrLocale)); 243 return E_NOTIMPL; 244 } 245 246 static HRESULT WINAPI ShellUIHelper2_SqmEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled) 247 { 248 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 249 FIXME("(%p)->(%p)\n", This, pfEnabled); 250 return E_NOTIMPL; 251 } 252 253 static HRESULT WINAPI ShellUIHelper2_PhishingEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled) 254 { 255 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 256 FIXME("(%p)->(%p)\n", This, pfEnabled); 257 return E_NOTIMPL; 258 } 259 260 static HRESULT WINAPI ShellUIHelper2_BrandImageUri(IShellUIHelper2 *iface, BSTR *pbstrUri) 261 { 262 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 263 FIXME("(%p)->(%p)\n", This, pbstrUri); 264 return E_NOTIMPL; 265 } 266 267 static HRESULT WINAPI ShellUIHelper2_SkipTabsWelcome(IShellUIHelper2 *iface) 268 { 269 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 270 FIXME("(%p)->()\n", This); 271 return E_NOTIMPL; 272 } 273 274 static HRESULT WINAPI ShellUIHelper2_DiagnoseConnection(IShellUIHelper2 *iface) 275 { 276 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 277 FIXME("(%p)->()\n", This); 278 return E_NOTIMPL; 279 } 280 281 static HRESULT WINAPI ShellUIHelper2_CustomizeClearType(IShellUIHelper2 *iface, VARIANT_BOOL fSet) 282 { 283 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 284 FIXME("(%p)->(%x)\n", This, fSet); 285 return E_NOTIMPL; 286 } 287 288 static HRESULT WINAPI ShellUIHelper2_IsSearchProviderInstalled(IShellUIHelper2 *iface, BSTR URL, DWORD *pdwResult) 289 { 290 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 291 FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pdwResult); 292 return E_NOTIMPL; 293 } 294 295 static HRESULT WINAPI ShellUIHelper2_IsSearchMigrated(IShellUIHelper2 *iface, VARIANT_BOOL *pfMigrated) 296 { 297 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 298 FIXME("(%p)->(%p)\n", This, pfMigrated); 299 return E_NOTIMPL; 300 } 301 302 static HRESULT WINAPI ShellUIHelper2_DefaultSearchProvider(IShellUIHelper2 *iface, BSTR *pbstrName) 303 { 304 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 305 FIXME("(%p)->(%p)\n", This, pbstrName); 306 return E_NOTIMPL; 307 } 308 309 static HRESULT WINAPI ShellUIHelper2_RunOnceRequiredSettingsComplete(IShellUIHelper2 *iface, VARIANT_BOOL fComplete) 310 { 311 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 312 FIXME("(%p)->(%x)\n", This, fComplete); 313 return E_NOTIMPL; 314 } 315 316 static HRESULT WINAPI ShellUIHelper2_RunOnceHasShown(IShellUIHelper2 *iface, VARIANT_BOOL *pfShown) 317 { 318 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 319 FIXME("(%p)->(%p)\n", This, pfShown); 320 return E_NOTIMPL; 321 } 322 323 static HRESULT WINAPI ShellUIHelper2_SearchGuideUrl(IShellUIHelper2 *iface, BSTR *pbstrUrl) 324 { 325 ShellUIHelper *This = impl_from_IShellUIHelper2(iface); 326 FIXME("(%p)->(%p)\n", This, pbstrUrl); 327 return E_NOTIMPL; 328 } 329 330 static const IShellUIHelper2Vtbl ShellUIHelper2Vtbl = { 331 ShellUIHelper2_QueryInterface, 332 ShellUIHelper2_AddRef, 333 ShellUIHelper2_Release, 334 ShellUIHelper2_GetTypeInfoCount, 335 ShellUIHelper2_GetTypeInfo, 336 ShellUIHelper2_GetIDsOfNames, 337 ShellUIHelper2_Invoke, 338 ShellUIHelper2_ResetFirstBootMode, 339 ShellUIHelper2_ResetSafeMode, 340 ShellUIHelper2_RefreshOfflineDesktop, 341 ShellUIHelper2_AddFavourite, 342 ShellUIHelper2_AddChannel, 343 ShellUIHelper2_AddDesktopComponent, 344 ShellUIHelper2_IsSubscribed, 345 ShellUIHelper2_NavigateAndFind, 346 ShellUIHelper2_ImportExportFavourites, 347 ShellUIHelper2_AutoCompleteSaveForm, 348 ShellUIHelper2_AutoScan, 349 ShellUIHelper2_AutoCompleteAttach, 350 ShellUIHelper2_ShowBrowserUI, 351 ShellUIHelper2_AddSearchProvider, 352 ShellUIHelper2_RunOnceShown, 353 ShellUIHelper2_SkipRunOnce, 354 ShellUIHelper2_CustomizeSettings, 355 ShellUIHelper2_SqmEnabled, 356 ShellUIHelper2_PhishingEnabled, 357 ShellUIHelper2_BrandImageUri, 358 ShellUIHelper2_SkipTabsWelcome, 359 ShellUIHelper2_DiagnoseConnection, 360 ShellUIHelper2_CustomizeClearType, 361 ShellUIHelper2_IsSearchProviderInstalled, 362 ShellUIHelper2_IsSearchMigrated, 363 ShellUIHelper2_DefaultSearchProvider, 364 ShellUIHelper2_RunOnceRequiredSettingsComplete, 365 ShellUIHelper2_RunOnceHasShown, 366 ShellUIHelper2_SearchGuideUrl 367 }; 368 369 HRESULT create_shell_ui_helper(IShellUIHelper2 **_ret) 370 { 371 ShellUIHelper *ret; 372 373 ret = heap_alloc(sizeof(*ret)); 374 if(!ret) 375 return E_OUTOFMEMORY; 376 377 ret->IShellUIHelper2_iface.lpVtbl = &ShellUIHelper2Vtbl; 378 ret->ref = 1; 379 380 *_ret = &ret->IShellUIHelper2_iface; 381 return S_OK; 382 } 383