ReactOS 0.4.16-dev-1133-g947c03e
shellbrowser.cpp
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#include "precomp.h"
22
23#include <shellapi.h>
24#include <htiframe.h>
25#include <strsafe.h>
26#include <shdocvw_undoc.h>
27
28extern HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow);
29
30#include "newatlinterfaces.h"
31
32/*
33TODO:
34 **Provide implementation of new and delete that use LocalAlloc
35 **Persist history for shell view isn't working correctly, possibly because of the mismatch between traveling and updating the travel log. The
36 view doesn't restore the selection correctly.
37 **Build explorer.exe, browseui.dll, comctl32.dll, shdocvw.dll, shell32.dll, shlwapi.dll into a directory and run them for testing...
38 **Add brand band bitmaps to shell32.dll
39 **If Go button on address bar is clicked, each time a new duplicate entry is added to travel log
40****The current entry is updated in travel log before doing the travel, which means when traveling back the update of the
41 current state overwrites the wrong entry's contents. This needs to be changed.
42****Fix close of browser window to release all objects
43****Given only a GUID in ShowBrowserBar, what is the correct way to determine if the bar is vertical or horizontal?
44 **When a new bar is added to base bar site, how is base bar told so it can resize?
45 **Does the base bar site have a classid?
46 **What should refresh command send to views to make them refresh?
47 **When new bar is created, what status notifications need to be fired?
48 **How does keyboard filtering dispatch?
49 **For deferred persist history load, how does the view connect up and get the state?
50 How does context menu send open, cut, rename commands to its site (the shell view)?
51 **Fix browser to implement IProfferService and hold onto brand band correctly - this will allow animations.
52
53 **Route View->Toolbars commands to internet toolbar
54 **Handle travel log items in View->Go
55 **Fix ShowBrowserBar to pass correct size on when bar is shown
56****Fix SetBorderSpaceDW to cascade resize to subsequent bars
57****Make ShowToolbar check if bar is already created before creating it again
58****Shell should fill in the list of explorer bars in the View submenus
59 **Add folder menu in the file menu
60 **Fix CShellBrowser::GetBorderDW to compute available size correctly
61 **When a new bar is shown, re-fire the navigate event. This makes the explorer band select the correct folder
62 **Implement support for refresh. Forward refresh to explorer bar (refresh on toolbar and in menu is dispatched different)
63 Make folders toolbar item update state appropriately
64 Read list of bands from registry on launch
65 Read list of bars from registry on launch
66 If the folders or search bars don't exist, disable the toolbar buttons
67 If the favorites or history bars don't exist, disable the toolbar butons
68 Fix Apply to all Folders in Folder Options
69 Implement close command
70 Add explorer band context menu to file menu
71 Add code to allow restore of internet toolbar from registry
72 Fix code that calls FireNavigateComplete to pass the correct new path
73
74 What are the other command ids for QueryStatus/FireCommandStateChange?
75
76 Add handler for cabinet settings change
77 Add handler for system metrics change (renegotiate border space?)
78 Add handler for theme change and forward to contained windows
79
80 When folders are shown, the status bar text should change
81 Add code to save/restore shell view settings
82 Implement tabbing between frames
83 Fix handling of focus everywhere
84 Most keyboard shortcuts don't work, such as F2 for rename, F5 for refresh (see list in "explorer keyboard shortcuts")
85
86 The status bar doesn't show help text for items owned by frame during menu tracking
87 Stub out frame command handlers
88 "Arrange icons by" group is not checked properly
89
90 When folders are hidden, icon is the same as the current shell object being displayed. When folders are shown,
91 the icon is always an open folder with magnifying glass
92 Fix bars to calculate height correctly
93 Hookup policies for everything...
94 Investigate toolbar message WM_USER+93
95 Investigate toolbar message WM_USER+100 (Adds extra padding between parts of buttons with BTNS_DROPDOWN | BTNS_SHOWTEXT style
96
97 Vertical Explorer Bar CATID_InfoBand
98 Horizontal Explorer Bar CATID_CommBand
99 Desk Band CATID_DeskBand
100
101 cache of bars
102 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021493-0000-0000-C000-000000000046}\Enum
103 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021494-0000-0000-C000-000000000046}\Enum
104
105 create key here with CLSID of bar to register tool band
106 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Toolbar
107
108*/
109
110#ifndef __GNUC__
111#pragma comment(linker, \
112 "\"/manifestdependency:type='Win32' "\
113 "name='Microsoft.Windows.Common-Controls' "\
114 "version='6.0.0.0' "\
115 "processorArchitecture='*' "\
116 "publicKeyToken='6595b64144ccf1df' "\
117 "language='*'\"")
118#endif // __GNUC__
119
120static const unsigned int folderOptionsPageCountMax = 20;
121static const long BTP_DONT_UPDATE_HISTORY = 0;
122static const long BTP_UPDATE_CUR_HISTORY = 1;
123static const long BTP_UPDATE_NEXT_HISTORY = 2;
124static const long BTP_ACTIVATE_NOFOCUS = 0x04;
125
127
128
129// this class is private to browseui.dll and is not registered externally?
130//DEFINE_GUID(CLSID_ShellFldSetExt, 0x6D5313C0, 0x8C62, 0x11D1, 0xB2, 0xCD, 0x00, 0x60, 0x97, 0xDF, 0x8C, 0x11);
131
133{
134 HMONITOR hMon = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
135 mi.cbSize = sizeof(mi);
136 if (!hMon || !GetMonitorInfo(hMon, &mi))
137 {
141 SystemParametersInfo(SPI_GETWORKAREA, 0, &mi.rcWork, 0);
142 }
143}
144
145void DeleteMenuItems(HMENU theMenu, unsigned int firstIDToDelete, unsigned int lastIDToDelete)
146{
147 MENUITEMINFO menuItemInfo;
148 int menuItemCount;
149 int curIndex;
150
151 menuItemCount = GetMenuItemCount(theMenu);
152 curIndex = 0;
153 while (curIndex < menuItemCount)
154 {
155 menuItemInfo.cbSize = sizeof(menuItemInfo);
156 menuItemInfo.fMask = MIIM_ID;
157 if (GetMenuItemInfo(theMenu, curIndex, TRUE, &menuItemInfo) &&
158 menuItemInfo.wID >= firstIDToDelete && menuItemInfo.wID <= lastIDToDelete)
159 {
160 DeleteMenu(theMenu, curIndex, MF_BYPOSITION);
161 menuItemCount--;
162 }
163 else
164 curIndex++;
165 }
166}
167
169{
170 CComPtr<IShellFolder> desktop;
171
172 HRESULT hr = ::SHGetDesktopFolder(&desktop);
174 return E_FAIL;
175 if (path == NULL || path->mkid.cb == 0)
176 {
177 *newFolder = desktop;
178 desktop.p->AddRef ();
179 return S_OK;
180 }
181 return desktop->BindToObject (path, NULL, IID_PPV_ARG(IShellFolder, newFolder));
182}
183
184static const TCHAR szCabinetWndClass[] = TEXT("CabinetWClass");
185//static const TCHAR szExploreWndClass[] = TEXT("ExploreWClass");
186
187class CDockManager;
188class CShellBrowser;
189
191 public CWindowImpl<CToolbarProxy, CWindow, CControlWinTraits>
192{
193private:
195public:
196 void Initialize(HWND parent, IUnknown *explorerToolbar);
197 void Destroy();
198private:
199
200 // message handlers
203
208};
209
211{
212 HWND myWindow = SHCreateWorkerWindowW(0, parent, 0, WS_CHILD, NULL, 0);
213 if (myWindow != NULL)
214 {
215 SubclassWindow(myWindow);
216 SetWindowPos(NULL, -32000, -32000, 0, 0, SWP_NOOWNERZORDER | SWP_NOZORDER);
217 explorerToolbar->QueryInterface(IID_PPV_ARG(IExplorerToolbar, &fExplorerToolbar));
218 }
219}
220
222{
225}
226
228{
229 long result = 0;
230 if (fExplorerToolbar.p != NULL)
231 {
232 fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 1, (long)wParam,
233 reinterpret_cast<TBADDBITMAP *>(lParam), &result, RGB(192, 192, 192));
234 fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 2, (long)wParam,
235 reinterpret_cast<TBADDBITMAP *>(lParam), &result, RGB(192, 192, 192));
236 }
237 return result;
238}
239
241{
242 LRESULT result = 0;
243 if (fExplorerToolbar.p != NULL)
244 fExplorerToolbar->SendToolbarMsg(&CGID_ShellBrowser, uMsg, wParam, lParam, &result);
245 return result;
246}
247
248/*
249Switch to a new bar when it receives an Exec(CGID_IDeskBand, 1, 1, vaIn, NULL);
250 where vaIn will be a VT_UNKNOWN with the new bar. It also sends a RB_SHOWBAND to the
251 rebar
252*/
253
257};
258
259#define BWM_ONDISPLAYCHANGEDELAYED (WM_APP)
260
262 public CWindowImpl<CShellBrowser, CWindow, CFrameWinTraits>,
263 public CComObjectRootEx<CComMultiThreadModelNoCS>,
264 public IShellBrowser,
265 public IDropTarget,
266 public IServiceProvider,
267 public IProfferServiceImpl<CShellBrowser>,
268 public IShellBrowserService,
269 public IWebBrowser2,
270 public ITravelLogClient,
271 public IPersistHistory,
272 public IDockingWindowSite,
273 public IOleCommandTarget,
274 public IBrowserService2,
275 public IConnectionPointContainerImpl<CShellBrowser>,
276 public MyIConnectionPointImpl<CShellBrowser, &DIID_DWebBrowserEvents2>,
277 public MyIConnectionPointImpl<CShellBrowser, &DIID_DWebBrowserEvents>
278{
279private:
280 enum { BSF_ROS_REGBROWSER = 0x04, BSF_ROS_KIOSK = 0x08 }; // Custom values
281
283 {
284 public:
286 {
287 memset(&borderSpace, 0, sizeof(borderSpace));
288 hwnd = NULL;
289 }
290
294 };
295 static const int BIInternetToolbar = 0;
296 static const int BIVerticalBaseBar = 1;
297 static const int BIHorizontalBaseBar = 2;
298
299 HWND fCurrentShellViewWindow; // our currently hosted shell view window
308 GUID fCurrentVertBar; //The guid of the built in vertical bar that is being shown
309 // The next three fields support persisted history for shell views.
310 // They do not need to be reference counted.
315 HACCEL m_hAccel;
321
322 enum { FSF_MBAR = 0x1, FSF_SBAR = 0x2, FSF_RESIZE = 0x4, FSF_MAXIMIZED = 0x8 };
323
324public:
325#if 0
327 {
328 OutputDebugString(_T("AddRef\n"));
330 }
332 {
333 OutputDebugString(_T("Release\n"));
335 }
336#endif
337
341public:
346 HRESULT BrowseToPath(IShellFolder *newShellFolder, LPCITEMIDLIST absolutePIDL,
347 FOLDERSETTINGS *folderSettings, long flags);
348 void SaveViewState();
349 HRESULT GetMenuBand(REFIID riid, void **shellMenu);
350 HRESULT GetBaseBar(bool vertical, REFIID riid, void **theBaseBar);
351 BOOL IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID);
352 HRESULT ShowBand(const CLSID &classID, bool vertical);
357 void RepositionBars();
359 HRESULT BuildExplorerBandCategory(HMENU hBandsMenu, CATID category, DWORD dwPos, UINT *nbFound);
360 BOOL IsBuiltinBand(CLSID &bandID);
361 virtual WNDPROC GetWindowProc() override
362 {
363 return WindowProc;
364 }
365 HRESULT FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments);
366 HRESULT FireNavigateComplete(const wchar_t *newDirectory);
367 HRESULT FireCommandStateChange(bool newState, int commandID);
369 HRESULT FireEvent_VBOOL(DISPID dispIdMember, VARIANT_BOOL Param1);
372 void UpdateGotoMenu(HMENU theMenu);
373 void UpdateViewMenu(HMENU theMenu);
375 void RefreshCabinetState();
376 void UpdateWindowTitle();
377 void SaveITBarLayout();
378
380
381/* // *** IDockingWindowFrame methods ***
382 STDMETHOD(AddToolbar)(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) override;
383 STDMETHOD(RemoveToolbar)(IUnknown *punkSrc, DWORD dwRemoveFlags) override;
384 STDMETHOD(FindToolbar)(LPCWSTR pwszItem, REFIID riid, void **ppv) override;
385 */
386
387 // *** IDockingWindowSite methods ***
388 STDMETHOD(GetBorderDW)(IUnknown* punkObj, LPRECT prcBorder) override;
389 STDMETHOD(RequestBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
390 STDMETHOD(SetBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
391
392 // *** IOleCommandTarget methods ***
393 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds,
394 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) override;
395 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID,
396 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
397
398 // *** IOleWindow methods ***
399 STDMETHOD(GetWindow)(HWND *lphwnd) override;
400 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
401
402 // *** IShellBrowser methods ***
403 STDMETHOD(InsertMenusSB)(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override;
404 STDMETHOD(SetMenuSB)(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override;
405 STDMETHOD(RemoveMenusSB)(HMENU hmenuShared) override;
406 STDMETHOD(SetStatusTextSB)(LPCOLESTR pszStatusText) override;
407 STDMETHOD(EnableModelessSB)(BOOL fEnable) override;
408 STDMETHOD(TranslateAcceleratorSB)(MSG *pmsg, WORD wID) override;
410 STDMETHOD(GetViewStateStream)(DWORD grfMode, IStream **ppStrm) override;
411 STDMETHOD(GetControlWindow)(UINT id, HWND *lphwnd) override;
413 STDMETHOD(QueryActiveShellView)(IShellView **ppshv) override;
414 STDMETHOD(OnViewWindowActive)(IShellView *ppshv) override;
415 STDMETHOD(SetToolbarItems)(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override;
416
417 // *** IDropTarget methods ***
418 STDMETHOD(DragEnter)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
419 STDMETHOD(DragOver)(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
420 STDMETHOD(DragLeave)() override;
421 STDMETHOD(Drop)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
422
423 // *** IServiceProvider methods ***
424 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
425
426 // *** IShellBrowserService methods ***
427 STDMETHOD(GetPropertyBag)(long flags, REFIID riid, void **ppvObject) override;
428
429 // *** IDispatch methods ***
430 STDMETHOD(GetTypeInfoCount)(UINT *pctinfo) override;
431 STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override;
433 REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override;
434 STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
435 DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override;
436
437 // *** IBrowserService methods ***
438 STDMETHOD(GetParentSite)(IOleInPlaceSite **ppipsite) override;
439 STDMETHOD(SetTitle)(IShellView *psv, LPCWSTR pszName) override;
440 STDMETHOD(GetTitle)(IShellView *psv, LPWSTR pszName, DWORD cchName) override;
441 STDMETHOD(GetOleObject)(IOleObject **ppobjv) override;
443 STDMETHOD(ShowControlWindow)(UINT id, BOOL fShow) override;
444 STDMETHOD(IsControlWindowShown)(UINT id, BOOL *pfShown) override;
445 STDMETHOD(IEGetDisplayName)(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) override;
446 STDMETHOD(IEParseDisplayName)(UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST *ppidlOut) override;
447 STDMETHOD(DisplayParseError)(HRESULT hres, LPCWSTR pwszPath) override;
448 STDMETHOD(NavigateToPidl)(LPCITEMIDLIST pidl, DWORD grfHLNF) override;
449 STDMETHOD(SetNavigateState)(BNSTATE bnstate) override;
450 STDMETHOD(GetNavigateState)(BNSTATE *pbnstate) override;
451 STDMETHOD(NotifyRedirect)(IShellView *psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) override;
452 STDMETHOD(UpdateWindowList)() override;
454 STDMETHOD(SetFlags)(DWORD dwFlags, DWORD dwFlagMask) override;
455 STDMETHOD(GetFlags)(DWORD *pdwFlags) override;
456 STDMETHOD(CanNavigateNow)( void) override;
457 STDMETHOD(GetPidl)(LPITEMIDLIST *ppidl) override;
458 STDMETHOD(SetReferrer)(LPCITEMIDLIST pidl) override;
460 STDMETHOD(GetBrowserByIndex)(DWORD dwID, IUnknown **ppunk) override;
461 STDMETHOD(GetHistoryObject)(IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) override;
462 STDMETHOD(SetHistoryObject)(IOleObject *pole, BOOL fIsLocalAnchor) override;
463 STDMETHOD(CacheOLEServer)(IOleObject *pole) override;
464 STDMETHOD(GetSetCodePage)(VARIANT *pvarIn, VARIANT *pvarOut) override;
465 STDMETHOD(OnHttpEquiv)(IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut) override;
466 STDMETHOD(GetPalette)(HPALETTE *hpal) override;
467 STDMETHOD(RegisterWindow)(BOOL fForceRegister, int swc) override;
468
469 // *** IBrowserService2 methods ***
472 STDMETHOD(GetViewRect)(RECT *prc) override;
473 STDMETHOD(OnSize)(WPARAM wParam) override;
474 STDMETHOD(OnCreate)(struct tagCREATESTRUCTW *pcs) override;
476 STDMETHOD(OnDestroy)() override;
477 STDMETHOD_(LRESULT, OnNotify)(struct tagNMHDR *pnm) override;
478 STDMETHOD(OnSetFocus)() override;
479 STDMETHOD(OnFrameWindowActivateBS)(BOOL fActive) override;
480 STDMETHOD(ReleaseShellView)() override;
481 STDMETHOD(ActivatePendingView)() override;
482 STDMETHOD(CreateViewWindow)(IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd) override;
484 STDMETHOD(GetViewWindow)(HWND *phwndView) override;
488 STDMETHOD(SetTopBrowser)() override;
489 STDMETHOD(Offline)(int iCmd) override;
490 STDMETHOD(AllowViewResize)(BOOL f) override;
491 STDMETHOD(SetActivateState)(UINT u) override;
492 STDMETHOD(UpdateSecureLockIcon)(int eSecureLock) override;
495 STDMETHOD(_Initialize)(HWND hwnd, IUnknown *pauto) override;
497 STDMETHOD(_CancelPendingView)() override;
498 STDMETHOD(_MaySaveChanges)() override;
499 STDMETHOD(_PauseOrResumeView)(BOOL fPaused) override;
500 STDMETHOD(_DisableModeless)() override;
501 STDMETHOD(_NavigateToPidl)(LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags) override;
502 STDMETHOD(_TryShell2Rename)(IShellView *psv, LPCITEMIDLIST pidlNew) override;
504 STDMETHOD(_ExecChildren)(IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup,
505 DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut) override;
507 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
508 STDMETHOD(GetFolderSetData)(struct tagFolderSetData *pfsd) override;
509 STDMETHOD(_OnFocusChange)(UINT itb) override;
510 STDMETHOD(v_ShowHideChildWindows)(BOOL fChildOnly) override;
512 STDMETHOD(_put_itbLastFocus)(UINT itbLastFocus) override;
513 STDMETHOD(_UIActivateView)(UINT uState) override;
515 STDMETHOD(_UpdateViewRectSize)() override;
516 STDMETHOD(_ResizeNextBorder)(UINT itb) override;
517 STDMETHOD(_ResizeView)() override;
518 STDMETHOD(_GetEffectiveClientArea)(LPRECT lprectBorder, HMONITOR hmon) override;
521 STDMETHOD(SetAcceleratorMenu)(HACCEL hacc) override;
522 STDMETHOD_(int, _GetToolbarCount)() override;
524 STDMETHOD(_SaveToolbars)(IStream *pstm) override;
525 STDMETHOD(_LoadToolbars)(IStream *pstm) override;
526 STDMETHOD(_CloseAndReleaseToolbars)(BOOL fClose) override;
528 int citb, LPTOOLBARITEM *pptbi, HWND *phwnd) override;
529 STDMETHOD(_ResizeNextBorderHelper)(UINT itb, BOOL bUseHmonitor) override;
530 STDMETHOD_(UINT, _FindTBar)(IUnknown *punkSrc) override;
531 STDMETHOD(_SetFocus)(LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) override;
532 STDMETHOD(v_MayTranslateAccelerator)(MSG *pmsg) override;
533 STDMETHOD(_GetBorderDWHelper)(IUnknown *punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) override;
535
536 // *** IWebBrowser methods ***
537 STDMETHOD(GoBack)() override;
538 STDMETHOD(GoForward)() override;
539 STDMETHOD(GoHome)() override;
540 STDMETHOD(GoSearch)() override;
541 STDMETHOD(Navigate)(BSTR URL, VARIANT *Flags, VARIANT *TargetFrameName,
542 VARIANT *PostData, VARIANT *Headers) override;
543 STDMETHOD(Refresh)() override;
544 STDMETHOD(Refresh2)(VARIANT *Level) override;
545 STDMETHOD(Stop)() override;
546 STDMETHOD(get_Application)(IDispatch **ppDisp) override;
547 STDMETHOD(get_Parent)(IDispatch **ppDisp) override;
548 STDMETHOD(get_Container)(IDispatch **ppDisp) override;
549 STDMETHOD(get_Document)(IDispatch **ppDisp) override;
551 STDMETHOD(get_Type)(BSTR *Type) override;
552 STDMETHOD(get_Left)(long *pl) override;
553 STDMETHOD(put_Left)(long Left) override;
554 STDMETHOD(get_Top)(long *pl) override;
555 STDMETHOD(put_Top)(long Top) override;
556 STDMETHOD(get_Width)(long *pl) override;
557 STDMETHOD(put_Width)(long Width) override;
558 STDMETHOD(get_Height)(long *pl) override;
559 STDMETHOD(put_Height)(long Height) override;
560 STDMETHOD(get_LocationName)(BSTR *LocationName) override;
561 STDMETHOD(get_LocationURL)(BSTR *LocationURL) override;
562 STDMETHOD(get_Busy)(VARIANT_BOOL *pBool) override;
563
564 // *** IWebBrowserApp methods ***
565 STDMETHOD(Quit)() override;
566 STDMETHOD(ClientToWindow)(int *pcx, int *pcy) override;
567 STDMETHOD(PutProperty)(BSTR Property, VARIANT vtValue) override;
568 STDMETHOD(GetProperty)(BSTR Property, VARIANT *pvtValue) override;
569 STDMETHOD(get_Name)(BSTR *Name) override;
570 STDMETHOD(get_HWND)(SHANDLE_PTR *pHWND) override;
572 STDMETHOD(get_Path)(BSTR *Path) override;
573 STDMETHOD(get_Visible)(VARIANT_BOOL *pBool) override;
575 STDMETHOD(get_StatusBar)(VARIANT_BOOL *pBool) override;
577 STDMETHOD(get_StatusText)(BSTR *StatusText) override;
578 STDMETHOD(put_StatusText)(BSTR StatusText) override;
579 STDMETHOD(get_ToolBar)(int *Value) override;
580 STDMETHOD(put_ToolBar)(int Value) override;
583 STDMETHOD(get_FullScreen)(VARIANT_BOOL *pbFullScreen) override;
584 STDMETHOD(put_FullScreen)(VARIANT_BOOL bFullScreen) override;
585
586 // *** IWebBrowser2 methods ***
587 STDMETHOD(Navigate2)(VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName,
588 VARIANT *PostData, VARIANT *Headers) override;
589 STDMETHOD(QueryStatusWB)(OLECMDID cmdID, OLECMDF *pcmdf) override;
590 STDMETHOD(ExecWB)(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt,
591 VARIANT *pvaIn, VARIANT *pvaOut) override;
592 STDMETHOD(ShowBrowserBar)(VARIANT *pvaClsid, VARIANT *pvarShow, VARIANT *pvarSize) override;
593 STDMETHOD(get_ReadyState)(READYSTATE *plReadyState) override;
594 STDMETHOD(get_Offline)(VARIANT_BOOL *pbOffline) override;
595 STDMETHOD(put_Offline)(VARIANT_BOOL bOffline) override;
596 STDMETHOD(get_Silent)(VARIANT_BOOL *pbSilent) override;
597 STDMETHOD(put_Silent)(VARIANT_BOOL bSilent) override;
598 STDMETHOD(get_RegisterAsBrowser)(VARIANT_BOOL *pbRegister) override;
599 STDMETHOD(put_RegisterAsBrowser)(VARIANT_BOOL bRegister) override;
600 STDMETHOD(get_RegisterAsDropTarget)(VARIANT_BOOL *pbRegister) override;
602 STDMETHOD(get_TheaterMode)(VARIANT_BOOL *pbRegister) override;
603 STDMETHOD(put_TheaterMode)(VARIANT_BOOL bRegister) override;
608
609 // *** ITravelLogClient methods ***
610 STDMETHOD(FindWindowByIndex)(DWORD dwID, IUnknown **ppunk) override;
611 STDMETHOD(GetWindowData)(IStream *pStream, LPWINDOWDATA pWinData) override;
612 STDMETHOD(LoadHistoryPosition)(LPWSTR pszUrlLocation, DWORD dwPosition) override;
613
614 // *** IPersist methods ***
615 STDMETHOD(GetClassID)(CLSID *pClassID) override;
616
617 // *** IPersistHistory methods ***
618 STDMETHOD(LoadHistory)(IStream *pStream, IBindCtx *pbc) override;
619 STDMETHOD(SaveHistory)(IStream *pStream) override;
620 STDMETHOD(SetPositionCookie)(DWORD dwPositioncookie) override;
621 STDMETHOD(GetPositionCookie)(DWORD *pdwPositioncookie) override;
622
623 // message handlers
634 LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
635 LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
636 LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
637 LRESULT OnDisconnectNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
638 LRESULT OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
639 LRESULT OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
640 LRESULT OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
641 LRESULT OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
642 LRESULT OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
643 LRESULT OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
644 LRESULT OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
645 LRESULT OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
646 LRESULT OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
647 LRESULT OnToggleStatusBarVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
648 LRESULT OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
649 LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
650 LRESULT OnToggleAddressBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
651 LRESULT OnToggleLinksBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
652 LRESULT OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
653 LRESULT OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
654 LRESULT OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
655 LRESULT OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
656 LRESULT OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
663
665 {
666 static ATL::CWndClassInfo wc =
667 {
669 0, 0, NULL, LoadIcon(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET)),
671 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
672 };
673 return wc;
674 }
675
687 MESSAGE_HANDLER(WM_DISPLAYCHANGE, OnDisplayChange)
722
724 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2)
725 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents)
727
729 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
730 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
732 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
733 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
734 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
735 COM_INTERFACE_ENTRY_IID(IID_IProfferService, IProfferService)
736 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService, IShellBrowserService)
739 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser, IWebBrowser)
740 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp, IWebBrowserApp)
741 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2, IWebBrowser2)
742 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient, ITravelLogClient)
744 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory, IPersistHistory)
745 COM_INTERFACE_ENTRY_IID(IID_IBrowserService, IBrowserService)
746 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2, IBrowserService2)
748};
749
751
753{
754 m_BrowserSvcFlags = BSF_RESIZABLE | BSF_CANMAXIMIZE;
755 m_Destroyed = false;
767}
768
770{
771 if (menuDsa)
773}
774
776{
777 CComPtr<IPersistStreamInit> persistStreamInit;
778 HRESULT hResult;
779 CComPtr<IUnknown> clientBar;
780
782
783 menuDsa = DSA_Create(sizeof(MenuBandInfo), 5);
784 if (!menuDsa)
785 return E_OUTOFMEMORY;
786
787 // create window
789 if (m_hWnd == NULL)
790 return E_FAIL;
791
793 if (FAILED_UNEXPECTEDLY(hResult))
794 return hResult;
795
797
798 // create interfaces
799 hResult = clientBar->QueryInterface(IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
800 if (FAILED_UNEXPECTEDLY(hResult))
801 return hResult;
802
803 hResult = IUnknown_SetSite(clientBar, static_cast<IShellBrowser *>(this));
804 if (FAILED_UNEXPECTEDLY(hResult))
805 return hResult;
806
807 hResult = IUnknown_Exec(clientBar, CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
808 if (FAILED_UNEXPECTEDLY(hResult))
809 return hResult;
810
811 CComPtr<IStream> pITBarStream;
813 hResult = SUCCEEDED(hResult) ? persistStreamInit->Load(pITBarStream) : persistStreamInit->InitNew();
814 if (FAILED_UNEXPECTEDLY(hResult))
815 return hResult;
816
817 hResult = IUnknown_ShowDW(clientBar, TRUE);
818 if (FAILED_UNEXPECTEDLY(hResult))
819 return hResult;
820
821 fToolbarProxy.Initialize(m_hWnd, clientBar);
822
823 // create status bar
826 dwStatusStyle |= WS_VISIBLE;
828 0, 0, 500, 20, m_hWnd, (HMENU)IDC_STATUSBAR,
829 _AtlBaseModule.GetModuleInstance(), 0);
830
832 UpdateWindow();
833
834 return S_OK;
835}
836
838{
839 HRESULT hr;
840 if (pSV)
841 {
843 SBFOLDERSETTINGS &sbfs = m_deffoldersettings, defsbfs;
844 if (FAILED(pSV->GetCurrentInfo(&sbfs.FolderSettings)))
845 {
846 defsbfs.InitializeDefaults();
847 sbfs = defsbfs;
848 }
850 }
851 else
852 {
855 if (SUCCEEDED(hr))
857 }
858 return hr;
859}
860
862{
863 if ((Flags & (SBSP_SAMEBROWSER | SBSP_NEWBROWSER)) == SBSP_DEFBROWSER)
864 {
866 Flags |= SBSP_SAMEBROWSER; // Force if this is the first navigation or the folder tree is present
867 else
868 Flags |= (!!gCabinetState.fNewWindowMode) ^ (GetAsyncKeyState(VK_CONTROL) < 0) ? SBSP_NEWBROWSER : SBSP_SAMEBROWSER;
869 }
870 if (Flags & (SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
871 Flags = (Flags & ~SBSP_NEWBROWSER) | SBSP_SAMEBROWSER; // Force same browser for now
872 return Flags;
873}
874
876{
877 SaveITBarLayout(); // Do this now so the new window inherits the current layout
878 // TODO: www.geoffchappell.com/studies/windows/ie/shdocvw/interfaces/inotifyappstart.htm
879 DWORD flags = (SbspFlags & SBSP_EXPLOREMODE) ? SH_EXPLORER_CMDLINE_FLAG_E : 0;
880 if ((SbspFlags & (SBSP_OPENMODE | SBSP_EXPLOREMODE)) == SBSP_DEFMODE)
882 LPITEMIDLIST pidlDir;
883 HRESULT hr = SHILClone(pidl, &pidlDir);
884 if (FAILED(hr))
885 return hr;
886 // TODO: !SBSP_NOTRANSFERHIST means we are supposed to pass the history here somehow?
888}
889
891{
892 if (SbspFlags & SBSP_RELATIVE)
893 return SHILCombine(fCurrentDirectoryPIDL, relative, ppidl);
894
895 if (SbspFlags & SBSP_PARENT)
896 {
897 HRESULT hr = GetPidl(ppidl);
898 if (FAILED(hr))
899 return hr;
900 ILRemoveLastID(*ppidl);
901 return S_OK;
902 }
903 // TODO: SBSP_NAVIGATEBACK and SBSP_NAVIGATEFORWARD?
904 return E_UNEXPECTED;
905}
906
908{
909 CComPtr<IShellFolder> newFolder;
911 HRESULT hResult;
912 CLSID clsid;
913 BOOL HasIconViewType;
914
915 // called by shell view to browse to new folder
916 // also called by explorer band to navigate to new folder
917 hResult = SHBindToFolder(pidl, &newFolder);
918 if (FAILED_UNEXPECTEDLY(hResult))
919 return hResult;
920 // HACK & FIXME: Get view mode from shellbag when fully implemented.
921 IUnknown_GetClassID(newFolder, &clsid);
922 HasIconViewType = clsid == CLSID_MyComputer || clsid == CLSID_ControlPanel ||
923 clsid == CLSID_ShellDesktop;
924
925 if (HasIconViewType)
926 newFolderSettings.ViewMode = FVM_ICON;
927 hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
928 if (FAILED_UNEXPECTEDLY(hResult))
929 return hResult;
930 return S_OK;
931}
932
934{
935 LPCITEMIDLIST pidlnext;
936 WORD length;
937 BOOL ret;
938
939 ret = TRUE;
940 if (! _ILIsDesktop(pidl))
941 {
942 length = pidl->mkid.cb;
943 pidlnext =
944 reinterpret_cast<LPCITEMIDLIST>(
945 reinterpret_cast<const BYTE *>(pidl) + length);
946 if (pidlnext->mkid.cb != 0)
947 ret = FALSE;
948 }
949 return ret;
950}
951
953 const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
954{
956 LPITEMIDLIST pidlChild;
957 LPITEMIDLIST pidlParent;
958 HRESULT hResult;
959
960 hResult = E_FAIL;
961 if (ppv == NULL)
962 return E_POINTER;
963 *ppv = NULL;
964 if (ppidlLast != NULL)
965 *ppidlLast = NULL;
966 if (_ILIsPidlSimple(pidl))
967 {
968 if (ppidlLast != NULL)
969 *ppidlLast = ILClone(pidl);
970 hResult = SHGetDesktopFolder((IShellFolder **)ppv);
971 }
972 else
973 {
974 pidlChild = ILClone(ILFindLastID(pidl));
975 pidlParent = ILClone(pidl);
976 ILRemoveLastID(pidlParent);
977 hResult = SHGetDesktopFolder(&psf);
978 if (SUCCEEDED(hResult))
979 hResult = psf->BindToObject(pidlParent, NULL, *riid, ppv);
980 if (SUCCEEDED(hResult) && ppidlLast != NULL)
981 *ppidlLast = pidlChild;
982 else
983 ILFree(pidlChild);
984 ILFree(pidlParent);
985 }
986 return hResult;
987}
988
990 LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
991{
992 CComPtr<IShellFolder> parentFolder;
993 LPITEMIDLIST childPIDL = NULL;
994 STRRET L108;
995 HRESULT hResult;
996
997 hResult = SHBindToFolderIDListParent(NULL, pidl, &IID_PPV_ARG(IShellFolder, &parentFolder), &childPIDL);
998 if (FAILED(hResult))
999 goto cleanup;
1000
1001 hResult = parentFolder->GetDisplayNameOf(childPIDL, uFlags, &L108);
1002 if (FAILED(hResult))
1003 goto cleanup;
1004
1005 StrRetToBufW(&L108, childPIDL, pszBuf, cchBuf);
1006 if (rgfInOut)
1007 {
1008 hResult = parentFolder->GetAttributesOf(1, const_cast<LPCITEMIDLIST *>(&childPIDL), rgfInOut);
1009 if (FAILED(hResult))
1010 goto cleanup;
1011 }
1012
1013 hResult = S_OK;
1014
1015cleanup:
1016 if (childPIDL)
1017 ILFree(childPIDL);
1018 return hResult;
1019}
1020
1021HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
1022{
1023 return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
1024}
1025
1027{
1028 // TODO: Also respect EBO_NOPERSISTVIEWSTATE?
1030 fCurrentShellView->SaveViewState();
1031}
1032
1034 LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
1035{
1036 CComPtr<IShellFolder> saveCurrentShellFolder;
1037 CComPtr<IShellView> saveCurrentShellView;
1038 CComPtr<IShellView> newShellView;
1039 CComPtr<ITravelLog> travelLog;
1040 HWND newShellViewWindow;
1041 BOOL windowUpdateIsLocked;
1042 RECT shellViewWindowBounds;
1043 HWND previousView;
1044 HCURSOR saveCursor;
1045 wchar_t newTitle[MAX_PATH];
1046 SHGDNF nameFlags;
1047 HRESULT hResult;
1048 //TODO: BOOL nohistory = m_BrowserSvcFlags & BSF_NAVNOHISTORY;
1049
1050 if (m_Destroyed)
1051 return S_FALSE;
1052
1053 if (newShellFolder == NULL)
1054 return E_INVALIDARG;
1055
1056 hResult = GetTravelLog(&travelLog);
1057 if (FAILED_UNEXPECTEDLY(hResult))
1058 return hResult;
1059
1060 if (FAILED_UNEXPECTEDLY(hResult = SHILClone(absolutePIDL, &absolutePIDL)))
1061 return hResult;
1062 CComHeapPtr<ITEMIDLIST> pidlAbsoluteClone(const_cast<LPITEMIDLIST>(absolutePIDL));
1063
1064 // update history
1066 {
1067 if (travelLog->CountEntries(static_cast<IDropTarget *>(this)) > 0)
1068 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1069 // what to do with error? Do we want to halt browse because state save failed?
1070 }
1071
1073 {
1074 SaveViewState();
1075 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
1076 }
1077
1078 // create view object
1079 hResult = newShellFolder->CreateViewObject(m_hWnd, IID_PPV_ARG(IShellView, &newShellView));
1080 if (FAILED_UNEXPECTEDLY(hResult))
1081 return hResult;
1082 previousView = fCurrentShellViewWindow;
1083
1084 // enter updating section
1085 saveCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
1086 windowUpdateIsLocked = LockWindowUpdate(TRUE);
1087 if (fCurrentShellView != NULL)
1089
1090 // set site
1091 hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
1092
1093 // update folder and view
1094 saveCurrentShellFolder = fCurrentShellFolder;
1095 saveCurrentShellView = fCurrentShellView;
1096 fCurrentShellFolder = newShellFolder;
1097 fCurrentShellView = newShellView;
1098
1099 // get boundary
1100 if (previousView != NULL)
1101 ::GetWindowRect(previousView, &shellViewWindowBounds);
1102 else
1103 ZeroMemory(&shellViewWindowBounds, sizeof(shellViewWindowBounds));
1104 ::MapWindowPoints(0, m_hWnd, reinterpret_cast<POINT *>(&shellViewWindowBounds), 2);
1105
1106 // update current pidl
1108 fCurrentDirectoryPIDL = pidlAbsoluteClone.Detach();
1109 /* CORE-19697: CAddressEditBox::OnWinEvent(CBN_SELCHANGE) causes CAddressEditBox to
1110 * call BrowseObject(pidlLastParsed). As part of our browsing we call FireNavigateComplete
1111 * and this in turn causes CAddressEditBox::Invoke to ILFree(pidlLastParsed)!
1112 * We then call SHBindToParent on absolutePIDL (which is really (the now invalid) pidlLastParsed) and we
1113 * end up accessing invalid memory! We therefore set absolutePIDL to be our cloned PIDL here.
1114 */
1115 absolutePIDL = fCurrentDirectoryPIDL;
1116
1117 // create view window
1118 hResult = newShellView->CreateViewWindow(saveCurrentShellView, folderSettings,
1119 this, &shellViewWindowBounds, &newShellViewWindow);
1120 if (FAILED_UNEXPECTEDLY(hResult) || newShellViewWindow == NULL)
1121 {
1122 fCurrentShellView = saveCurrentShellView;
1123 fCurrentShellFolder = saveCurrentShellFolder;
1125 if (windowUpdateIsLocked)
1127 SetCursor(saveCursor);
1128 return hResult;
1129 }
1130
1131 // update view window
1132 if (saveCurrentShellView != NULL)
1133 saveCurrentShellView->DestroyViewWindow();
1134 fCurrentShellViewWindow = newShellViewWindow;
1135
1136 if (previousView == NULL)
1137 {
1139 }
1140
1141 // no use
1142 saveCurrentShellView.Release();
1143 saveCurrentShellFolder.Release();
1144
1145 hResult = newShellView->UIActivate((flags & BTP_ACTIVATE_NOFOCUS) ? SVUIA_ACTIVATE_NOFOCUS : SVUIA_ACTIVATE_FOCUS);
1146
1147 // leave updating section
1148 if (windowUpdateIsLocked)
1150 SetCursor(saveCursor);
1151
1152 // update history
1154 {
1155 hResult = travelLog->AddEntry(static_cast<IDropTarget *>(this), FALSE);
1156 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1157 }
1158
1159 // completed
1160 nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
1161 hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
1162 sizeof(newTitle) / sizeof(wchar_t), NULL);
1163 if (SUCCEEDED(hResult))
1164 {
1165 FireNavigateComplete(newTitle);
1166 }
1167 else
1168 {
1169 FireNavigateComplete(L"ERROR");
1170 }
1171
1173
1174 LPCITEMIDLIST pidlChild;
1175 HIMAGELIST himlSmall, himlLarge;
1176
1178 hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
1179 if (SUCCEEDED(hResult))
1180 {
1181 INT indexOpen;
1182 SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
1183
1184 Shell_GetImageLists(&himlLarge, &himlSmall);
1185
1186 HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
1187 HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
1188
1189 /* Hack to make it possible to release the old icons */
1190 /* Something seems to go wrong with WM_SETICON */
1191 HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
1192 HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
1193
1194 SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
1195 SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
1196
1197 DestroyIcon(oldSmall);
1198 DestroyIcon(oldLarge);
1199 }
1200
1202 hResult = UpdateForwardBackState();
1203 hResult = UpdateUpState();
1204 return S_OK;
1205}
1206
1208{
1209 CComPtr<IBandSite> bandSite;
1210 CComPtr<IDeskBand> deskBand;
1211 HRESULT hResult;
1212
1213 if (!fClientBars[BIInternetToolbar].clientBar)
1214 return E_FAIL;
1215
1217 if (FAILED_UNEXPECTEDLY(hResult))
1218 return hResult;
1219
1220 hResult = bandSite->QueryBand(ITBBID_MENUBAND, &deskBand, NULL, NULL, 0);
1221 return FAILED(hResult) ? hResult : deskBand->QueryInterface(riid, shellMenu); // It is expected that this might fail during WM_DESTROY
1222}
1223
1224HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
1225{
1226 CComPtr<IUnknown> newBaseBar;
1227 CComPtr<IDeskBar> deskBar;
1228 CComPtr<IUnknown> newBaseBarSite;
1229 CComPtr<IDeskBarClient> deskBarClient;
1230 IUnknown **cache;
1231 HRESULT hResult;
1232
1233 if (vertical)
1235 else
1237 if (*cache == NULL)
1238 {
1239 hResult = CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBar), vertical);
1240 if (FAILED_UNEXPECTEDLY(hResult))
1241 return hResult;
1242 hResult = CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBarSite), vertical);
1243 if (FAILED_UNEXPECTEDLY(hResult))
1244 return hResult;
1245
1246 // we have to store our basebar into cache now
1247 *cache = newBaseBar;
1248 (*cache)->AddRef();
1249
1250 // tell the new base bar about the shell browser
1251 hResult = IUnknown_SetSite(newBaseBar, static_cast<IDropTarget *>(this));
1252 if (FAILED_UNEXPECTEDLY(hResult))
1253 return hResult;
1254
1255 // tell the new base bar about the new base bar site
1256 hResult = newBaseBar->QueryInterface(IID_PPV_ARG(IDeskBar, &deskBar));
1257 if (FAILED_UNEXPECTEDLY(hResult))
1258 return hResult;
1259 hResult = deskBar->SetClient(newBaseBarSite);
1260 if (FAILED_UNEXPECTEDLY(hResult))
1261 return hResult;
1262
1263 // tell the new base bar site about the new base bar
1264 hResult = newBaseBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &deskBarClient));
1265 if (FAILED_UNEXPECTEDLY(hResult))
1266 return hResult;
1267 hResult = deskBarClient->SetDeskBarSite(newBaseBar);
1268 if (FAILED_UNEXPECTEDLY(hResult))
1269 return hResult;
1270
1271 }
1272 return (*cache)->QueryInterface(riid, theBaseBar);
1273}
1274
1275BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
1276{
1277 HRESULT hResult;
1278 CComPtr<IDeskBar> deskBar;
1279 CComPtr<IUnknown> baseBarSite;
1280 CComPtr<IBandSite> bandSite;
1281 CLSID clsidTmp;
1282 DWORD numBands;
1283 DWORD dwBandID;
1284 DWORD i;
1285
1286 /* Get our basebarsite to be able to enumerate bands */
1287 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1288 if (FAILED_UNEXPECTEDLY(hResult))
1289 return FALSE;
1290 hResult = deskBar->GetClient(&baseBarSite);
1291 if (FAILED_UNEXPECTEDLY(hResult))
1292 return FALSE;
1293 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &bandSite));
1294 if (FAILED_UNEXPECTEDLY(hResult))
1295 return FALSE;
1296
1297 numBands = bandSite->EnumBands(-1, NULL);
1298 for (i = 0; i < numBands; i++)
1299 {
1300 CComPtr<IPersist> bandPersist;
1301
1302 hResult = bandSite->EnumBands(i, &dwBandID);
1303 if (FAILED_UNEXPECTEDLY(hResult))
1304 return FALSE;
1305
1306 hResult = bandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &bandPersist));
1307 if (FAILED_UNEXPECTEDLY(hResult))
1308 return FALSE;
1309 hResult = bandPersist->GetClassID(&clsidTmp);
1310 if (FAILED_UNEXPECTEDLY(hResult))
1311 return FALSE;
1312 if (IsEqualGUID(clsidBand, clsidTmp))
1313 {
1314 if (pdwBandID) *pdwBandID = dwBandID;
1315 return TRUE;
1316 }
1317 }
1318 return FALSE;
1319}
1320
1321HRESULT CShellBrowser::ShowBand(const CLSID &classID, bool vertical)
1322{
1323 CComPtr<IDockingWindow> dockingWindow;
1324 CComPtr<IUnknown> baseBarSite;
1325 CComPtr<IUnknown> newBand;
1326 CComPtr<IDeskBar> deskBar;
1327 VARIANT vaIn;
1328 HRESULT hResult;
1329 DWORD dwBandID;
1330
1331 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1332 if (FAILED_UNEXPECTEDLY(hResult))
1333 return hResult;
1334
1335 hResult = deskBar->GetClient(&baseBarSite);
1336 if (FAILED_UNEXPECTEDLY(hResult))
1337 return hResult;
1338
1339 hResult = deskBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
1340 if (FAILED_UNEXPECTEDLY(hResult))
1341 return hResult;
1342
1343 if (!IsBandLoaded(classID, vertical, &dwBandID))
1344 {
1345 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID), vertical);
1346 if (IsEqualCLSID(CLSID_ExplorerBand, classID))
1347 {
1348 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1350 if (FAILED_UNEXPECTEDLY(hResult))
1351 return hResult;
1352 }
1353 else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
1354 {
1355 TRACE("CLSID_FileSearchBand requested, building internal band.\n");
1356 hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
1357 if (FAILED_UNEXPECTEDLY(hResult))
1358 return hResult;
1359 }
1360 else
1361 {
1362 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1363 hResult = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, &newBand));
1364 if (FAILED_UNEXPECTEDLY(hResult))
1365 return hResult;
1366 }
1367 }
1368 else
1369 {
1370 CComPtr<IBandSite> pBandSite;
1371
1372 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &pBandSite));
1373 if (!SUCCEEDED(hResult))
1374 {
1375 ERR("Can't get IBandSite interface\n");
1376 return E_FAIL;
1377 }
1378 hResult = pBandSite->GetBandObject(dwBandID, IID_PPV_ARG(IUnknown, &newBand));
1379 if (!SUCCEEDED(hResult))
1380 {
1381 ERR("Can't find band object\n");
1382 return E_FAIL;
1383 }
1384
1385 // It's hackish, but we should be able to show the wanted band until we
1386 // find the proper way to do this (but it seems to work to add a new band)
1387 // Here we'll just re-add the existing band to the site, causing it to display.
1388 }
1389 V_VT(&vaIn) = VT_UNKNOWN;
1390 V_UNKNOWN(&vaIn) = newBand.p;
1391 hResult = IUnknown_Exec(baseBarSite, CGID_IDeskBand, 1, 1, &vaIn, NULL);
1392 if (FAILED_UNEXPECTEDLY(hResult))
1393 {
1394 return hResult;
1395 }
1396
1397 hResult = dockingWindow->ShowDW(TRUE);
1398 if (FAILED_UNEXPECTEDLY(hResult))
1399 return hResult;
1400
1401 if (vertical)
1402 {
1403 fCurrentVertBar = classID;
1405 }
1406
1407 return S_OK;
1408}
1409
1411{
1413 if (newDirectory == NULL)
1414 return E_OUTOFMEMORY;
1415 if (_ILIsDesktop(newDirectory))
1416 {
1417 ILFree(newDirectory);
1418 return E_INVALIDARG;
1419 }
1420 ILRemoveLastID(newDirectory);
1422 ILFree(newDirectory);
1423 if (FAILED_UNEXPECTEDLY(hResult))
1424 return hResult;
1425 return S_OK;
1426}
1427
1429{
1430 PROPSHEETHEADER* sheetInfo = reinterpret_cast<PROPSHEETHEADER*>(lParam);
1431 if (sheetInfo->nPages >= folderOptionsPageCountMax)
1432 return FALSE;
1433 sheetInfo->phpage[sheetInfo->nPages] = thePage;
1434 sheetInfo->nPages++;
1435 return TRUE;
1436}
1437
1439{
1440 CComPtr<IShellPropSheetExt> folderOptionsSheet;
1441 PROPSHEETHEADER m_PropSheet;
1443// CComPtr<IGlobalFolderSettings> globalSettings;
1444// SHELLSTATE2 shellState;
1445 HRESULT hResult;
1446
1447 memset(m_psp, 0, sizeof(m_psp));
1448 memset(&m_PropSheet, 0, sizeof(m_PropSheet));
1449
1450 // create sheet object
1451 hResult = CoCreateInstance(CLSID_ShellFldSetExt, NULL, CLSCTX_INPROC_SERVER,
1452 IID_PPV_ARG(IShellPropSheetExt, &folderOptionsSheet));
1453 if (FAILED_UNEXPECTEDLY(hResult))
1454 return E_FAIL;
1455
1456 // must set site in order for Apply to all Folders on Advanced page to be enabled
1457 hResult = IUnknown_SetSite(folderOptionsSheet, static_cast<IDispatch *>(this));
1458 m_PropSheet.phpage = m_psp;
1459
1460#if 0
1461 hResult = CoCreateInstance(CLSID_GlobalFolderSettings, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IGlobalFolderSettings, &globalSettings));
1462 if (FAILED_UNEXPECTEDLY(hResult))
1463 return E_FAIL;
1464 hResult = globalSettings->Get(&shellState, sizeof(shellState));
1465 if (FAILED_UNEXPECTEDLY(hResult))
1466 return E_FAIL;
1467#endif
1468
1469 // add pages
1470 hResult = folderOptionsSheet->AddPages(AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1471 if (FAILED_UNEXPECTEDLY(hResult))
1472 return E_FAIL;
1473
1475 {
1476 hResult = fCurrentShellView->AddPropertySheetPages(
1477 0, AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1478 if (FAILED_UNEXPECTEDLY(hResult))
1479 return E_FAIL;
1480 }
1481
1482 // show sheet
1483 CStringW strFolderOptions(MAKEINTRESOURCEW(IDS_FOLDER_OPTIONS));
1484 m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
1485 m_PropSheet.dwFlags = 0;
1486 m_PropSheet.hwndParent = m_hWnd;
1487 m_PropSheet.hInstance = _AtlBaseModule.GetResourceInstance();
1488 m_PropSheet.pszCaption = strFolderOptions;
1489 m_PropSheet.nStartPage = 0;
1490 PropertySheet(&m_PropSheet);
1491 return S_OK;
1492}
1493
1495{
1496 CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
1497 _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1498 LRESULT lResult;
1499 const _ATL_MSG *previousMessage;
1500 BOOL handled;
1501 WNDPROC saveWindowProc;
1502 HRESULT hResult;
1503
1504 hWnd = pThis->m_hWnd;
1505 previousMessage = pThis->m_pCurrentMsg;
1506 pThis->m_pCurrentMsg = &msg;
1507
1508 /* If the shell browser is initialized, let the menu band preprocess the messages */
1509 if (pThis->fCurrentDirectoryPIDL)
1510 {
1511 CComPtr<IMenuBand> menuBand;
1512 hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
1513 if (SUCCEEDED(hResult) && menuBand.p != NULL)
1514 {
1515 hResult = menuBand->TranslateMenuMessage(&msg, &lResult);
1516 if (hResult == S_OK)
1517 return lResult;
1518 uMsg = msg.message;
1519 wParam = msg.wParam;
1520 lParam = msg.lParam;
1521 }
1522 }
1523
1524 handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1525 ATLASSERT(pThis->m_pCurrentMsg == &msg);
1526 if (handled == FALSE)
1527 {
1528 if (uMsg == WM_NCDESTROY)
1529 {
1530 saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC));
1531 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1532 if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC)))
1534 pThis->m_dwState |= WINSTATE_DESTROYED;
1535 }
1536 else
1537 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1538 }
1539 pThis->m_pCurrentMsg = previousMessage;
1540 if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1541 {
1542 pThis->m_dwState &= ~WINSTATE_DESTROYED;
1543 pThis->m_hWnd = NULL;
1544 pThis->OnFinalMessage(hWnd);
1545 }
1546 return lResult;
1547}
1548
1550{
1551 RECT clientRect;
1552 RECT statusRect;
1553 int x;
1554
1555 GetClientRect(&clientRect);
1556
1558 {
1559 ::GetWindowRect(fStatusBar, &statusRect);
1560 ::SetWindowPos(fStatusBar, NULL, clientRect.left, clientRect.bottom - (statusRect.bottom - statusRect.top),
1561 clientRect.right - clientRect.left,
1562 statusRect.bottom - statusRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1563 clientRect.bottom -= statusRect.bottom - statusRect.top;
1564 }
1565
1566 for (x = 0; x < 3; x++)
1567 {
1569 RECT borderSpace = fClientBars[x].borderSpace;
1570 if (hwnd == NULL && fClientBars[x].clientBar != NULL)
1571 {
1572 IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
1574 }
1575 if (hwnd != NULL)
1576 {
1577 RECT toolbarRect = clientRect;
1578 if (borderSpace.top != 0)
1579 {
1580 toolbarRect.bottom = toolbarRect.top + borderSpace.top;
1581 }
1582 else if (borderSpace.bottom != 0)
1583 {
1584 toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
1585 }
1586 else if (borderSpace.left != 0)
1587 {
1588 toolbarRect.right = toolbarRect.left + borderSpace.left;
1589 }
1590 else if (borderSpace.right != 0)
1591 {
1592 toolbarRect.left = toolbarRect.right - borderSpace.right;
1593 }
1594
1596 toolbarRect.left,
1597 toolbarRect.top,
1598 toolbarRect.right - toolbarRect.left,
1599 toolbarRect.bottom - toolbarRect.top,
1601
1602 if (borderSpace.top != 0)
1603 {
1604 clientRect.top = toolbarRect.bottom;
1605 }
1606 else if (borderSpace.bottom != 0)
1607 {
1608 clientRect.bottom = toolbarRect.top;
1609 }
1610 else if (borderSpace.left != 0)
1611 {
1612 clientRect.left = toolbarRect.right;
1613 }
1614 else if (borderSpace.right != 0)
1615 {
1616 clientRect.right = toolbarRect.left;
1617 }
1618 }
1619 }
1620
1622 return;
1623
1624 ::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
1625 clientRect.right - clientRect.left,
1626 clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1627}
1628
1629HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
1630{
1631 DISPPARAMS params;
1634 HRESULT hResult;
1635
1636 params.rgvarg = arguments;
1637 params.rgdispidNamedArgs = NULL;
1638 params.cArgs = argCount;
1639 params.cNamedArgs = 0;
1640 IUnknown** pp = vec.begin();
1641 while (pp < vec.end())
1642 {
1643 if (*pp != NULL)
1644 {
1645 CComPtr<IDispatch> theDispatch;
1646 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1647 if (SUCCEEDED(hResult))
1648 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1649 }
1650 pp++;
1651 }
1652 pp = vec2.begin();
1653 while (pp < vec2.end())
1654 {
1655 if (*pp != NULL)
1656 {
1657 CComPtr<IDispatch> theDispatch;
1658 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1659 if (SUCCEEDED(hResult))
1660 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1661 }
1662 pp++;
1663 }
1664 return S_OK;
1665}
1666
1668{
1669 // these two variants intentionally to do use CComVariant because it would double free/release
1670 // or does not need to dispose at all
1671 VARIANT varArg[2];
1672 VARIANT varArgs;
1673 CComBSTR tempString(newDirectory);
1674
1675 V_VT(&varArgs) = VT_BSTR;
1676 V_BSTR(&varArgs) = tempString.m_str;
1677
1678 V_VT(&varArg[0]) = VT_VARIANT | VT_BYREF;
1679 V_VARIANTREF(&varArg[0]) = &varArgs;
1680 V_VT(&varArg[1]) = VT_DISPATCH;
1681 V_DISPATCH(&varArg[1]) = (IDispatch *)this;
1682
1683 return FireEvent(DISPID_NAVIGATECOMPLETE2, 2, varArg);
1684}
1685
1687{
1688 VARIANT varArg[2];
1689
1690 V_VT(&varArg[0]) = VT_BOOL;
1691 V_BOOL(&varArg[0]) = newState ? VARIANT_TRUE : VARIANT_FALSE;
1692 V_VT(&varArg[1]) = VT_I4;
1693 V_I4(&varArg[1]) = commandID;
1694
1695 return FireEvent(DISPID_COMMANDSTATECHANGE, 2, varArg);
1696}
1697
1699{
1700 return FireCommandStateChange(false, -1);
1701}
1702
1704{
1705 VARIANT vArgs[1];
1706 V_VT(&vArgs[0]) = VT_BOOL;
1707 V_BOOL(&vArgs[0]) = Param1 ? VARIANT_TRUE : VARIANT_FALSE;
1708 return FireEvent(dispIdMember, 1, vArgs);
1709}
1710
1712{
1713 CComPtr<ITravelLog> travelLog;
1714 CComPtr<ITravelEntry> unusedEntry;
1715 bool canGoBack;
1716 bool canGoForward;
1717 HRESULT hResult;
1718
1719 canGoBack = false;
1720 canGoForward = false;
1721 hResult = GetTravelLog(&travelLog);
1722 if (FAILED_UNEXPECTEDLY(hResult))
1723 return hResult;
1724 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
1725 if (SUCCEEDED(hResult))
1726 {
1727 canGoBack = true;
1728 unusedEntry.Release();
1729 }
1730 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
1731 if (SUCCEEDED(hResult))
1732 {
1733 canGoForward = true;
1734 unusedEntry.Release();
1735 }
1736 hResult = FireCommandStateChange(canGoBack, 2);
1737 hResult = FireCommandStateChange(canGoForward, 1);
1738 return S_OK;
1739}
1740
1742{
1743 bool canGoUp = !_ILIsDesktop(fCurrentDirectoryPIDL);
1744 FireCommandStateChange(canGoUp, 3);
1745 return S_OK;
1746}
1747
1749{
1750 CComPtr<ITravelLog> travelLog;
1751 CComPtr<ITravelEntry> unusedEntry;
1752 int position;
1753 MENUITEMINFO menuItemInfo;
1754 HRESULT hResult;
1755
1757
1758 position = GetMenuItemCount(theMenu);
1759 hResult = GetTravelLog(&travelLog);
1760 if (FAILED_UNEXPECTEDLY(hResult))
1761 return;
1762
1763 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1764 TLOG_BACK,
1765 &unusedEntry);
1766
1767 if (SUCCEEDED(hResult))
1768 {
1770 unusedEntry.Release();
1771 }
1772 else
1774
1775 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1776 TLOG_FORE,
1777 &unusedEntry);
1778
1779 if (SUCCEEDED(hResult))
1780 {
1782 unusedEntry.Release();
1783 }
1784 else
1786
1787 SHEnableMenuItem(theMenu,
1790
1791 hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
1793 if (SUCCEEDED(hResult))
1794 {
1795 menuItemInfo.cbSize = sizeof(menuItemInfo);
1796 menuItemInfo.fMask = MIIM_TYPE | MIIM_ID;
1797 menuItemInfo.fType = MF_SEPARATOR;
1798 menuItemInfo.wID = IDM_GOTO_TRAVEL_SEP;
1799 InsertMenuItem(theMenu, position, TRUE, &menuItemInfo);
1800 }
1801}
1802
1804{
1805 CComPtr<ITravelLog> travelLog;
1806 HMENU gotoMenu;
1807 OLECMD commandList[5];
1808 HMENU toolbarMenuBar;
1809 HMENU toolbarMenu;
1810 MENUITEMINFO menuItemInfo;
1811 HRESULT hResult;
1812
1813 gotoMenu = SHGetMenuFromID(theMenu, FCIDM_MENU_EXPLORE);
1814 if (gotoMenu != NULL)
1815 UpdateGotoMenu(gotoMenu);
1816
1817 commandList[0].cmdID = ITID_TOOLBARBANDSHOWN;
1818 commandList[1].cmdID = ITID_ADDRESSBANDSHOWN;
1819 commandList[2].cmdID = ITID_LINKSBANDSHOWN;
1820 commandList[3].cmdID = ITID_TOOLBARLOCKED;
1821 commandList[4].cmdID = ITID_CUSTOMIZEENABLED;
1822
1824 CGID_PrivCITCommands, 5, commandList, NULL);
1825 if (FAILED_UNEXPECTEDLY(hResult))
1827 else
1828 {
1829 menuItemInfo.cbSize = sizeof(menuItemInfo);
1830 menuItemInfo.fMask = MIIM_SUBMENU;
1831 GetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1832 DestroyMenu(menuItemInfo.hSubMenu);
1833
1834 toolbarMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1835 toolbarMenu = GetSubMenu(toolbarMenuBar, 0);
1836 RemoveMenu(toolbarMenuBar, 0, MF_BYPOSITION);
1837 DestroyMenu(toolbarMenuBar);
1838
1839 // TODO: Implement
1840 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_ENABLED);
1841 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_ENABLED);
1842 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_ENABLED);
1843 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_CUSTOMIZE, commandList[4].cmdf & OLECMDF_ENABLED);
1844
1845 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_LATCHED);
1846 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_LATCHED);
1847 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_LATCHED);
1848 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LOCKTOOLBARS, commandList[3].cmdf & OLECMDF_LATCHED);
1849 if ((commandList[4].cmdf & OLECMDF_ENABLED) == 0)
1853
1854 menuItemInfo.cbSize = sizeof(menuItemInfo);
1855 menuItemInfo.fMask = MIIM_SUBMENU;
1856 menuItemInfo.hSubMenu = toolbarMenu;
1857 SetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1858 }
1860
1861 // Check the menu items for Explorer bar
1862 BOOL bSearchBand = (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
1863 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
1864 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
1865 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar));
1866 BOOL bHistory = IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar);
1867 BOOL bFavorites = IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar);
1868 BOOL bFolders = IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar);
1869 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_SEARCH, bSearchBand);
1870 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_HISTORY, bHistory);
1871 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FAVORITES, bFavorites);
1872 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FOLDERS, bFolders);
1873}
1874
1876{
1877 HMENU hBandsMenu;
1878 UINT nbFound;
1879
1881 if (!hBandsMenu)
1882 {
1883 OutputDebugString(L"No menu !\n");
1884 return E_FAIL;
1885 }
1887 BuildExplorerBandCategory(hBandsMenu, CATID_InfoBand, 4, NULL);
1888 BuildExplorerBandCategory(hBandsMenu, CATID_CommBand, 20, &nbFound);
1889 if (!nbFound)
1890 {
1891 // Remove separator
1893 }
1894 // Remove media menu since XP does it (according to API Monitor)
1896 return S_OK;
1897}
1898
1900{
1901 HRESULT hr;
1902 CComPtr<IEnumGUID> pEnumGUID;
1903 WCHAR wszBandName[MAX_PATH];
1904 WCHAR wszBandGUID[MAX_PATH];
1905 WCHAR wRegKey[MAX_PATH];
1906 UINT cBands;
1907 DWORD dwRead;
1908 DWORD dwDataSize;
1909 GUID iter;
1910 MenuBandInfo mbi;
1911
1912 mbi.fVertical = IsEqualGUID(category, CATID_InfoBand);
1913 cBands = 0;
1914 hr = SHEnumClassesOfCategories(1, &category, 0, NULL, &pEnumGUID);
1916 {
1917 return hr;
1918 }
1919 do
1920 {
1921 pEnumGUID->Next(1, &iter, &dwRead);
1922 if (dwRead)
1923 {
1924 // Get the band name
1925 if (IsBuiltinBand(iter))
1926 continue;
1927 if (!StringFromGUID2(iter, wszBandGUID, MAX_PATH))
1928 continue;
1929 StringCchPrintfW(wRegKey, MAX_PATH, L"CLSID\\%s", wszBandGUID);
1930 dwDataSize = MAX_PATH;
1931 SHGetValue(HKEY_CLASSES_ROOT, wRegKey, NULL, NULL, wszBandName, &dwDataSize);
1932
1933 mbi.barGuid = iter;
1934 InsertMenu(hBandsMenu, dwPos + cBands, MF_BYPOSITION, IDM_EXPLORERBAND_BEGINCUSTOM + DSA_GetItemCount(menuDsa), wszBandName);
1935 DSA_AppendItem(menuDsa, &mbi);
1936 cBands++;
1937 }
1938 }
1939 while (dwRead > 0);
1940 if (nbFound)
1941 *nbFound = cBands;
1942 return S_OK;
1943}
1944
1946{
1947 if (IsEqualCLSID(bandID, CLSID_ExplorerBand))
1948 return TRUE;
1949 if (IsEqualCLSID(bandID, CLSID_SH_SearchBand) || IsEqualCLSID(bandID, CLSID_SearchBand))
1950 return TRUE;
1951 if (IsEqualCLSID(bandID, CLSID_IE_SearchBand) || IsEqualCLSID(bandID, CLSID_FileSearchBand))
1952 return TRUE;
1953 if (IsEqualCLSID(bandID, CLSID_SH_HistBand))
1954 return TRUE;
1955 if (IsEqualCLSID(bandID, CLSID_SH_FavBand))
1956 return TRUE;
1957 if (IsEqualCLSID(bandID, CLSID_ChannelsBand))
1958 return TRUE;
1959 return FALSE;
1960}
1961
1963{
1964 CComPtr<IObjectWithSite> objectWithSite;
1965 CComPtr<IContextMenu> contextMenu;
1966 CMINVOKECOMMANDINFO commandInfo;
1967 const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1968 HRESULT hResult;
1969
1970 // TODO: Query shell if this command is enabled first
1971
1972 memset(&commandInfo, 0, sizeof(commandInfo));
1973 commandInfo.cbSize = sizeof(commandInfo);
1974 commandInfo.hwnd = m_hWnd;
1975 commandInfo.lpParameters = searchGUID;
1976 commandInfo.nShow = SW_SHOWNORMAL;
1977
1978 hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1979 IID_PPV_ARG(IContextMenu, &contextMenu));
1980 if (FAILED_UNEXPECTEDLY(hResult))
1981 return 0;
1982 hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
1983 if (FAILED_UNEXPECTEDLY(hResult))
1984 return 0;
1985 hResult = objectWithSite->SetSite(dynamic_cast<IShellBrowser*>(this));
1986 if (FAILED_UNEXPECTEDLY(hResult))
1987 return 0;
1988 hResult = contextMenu->InvokeCommand(&commandInfo);
1989 hResult = objectWithSite->SetSite(NULL);
1990 return hResult;
1991}
1992
1994{
1995 CComPtr<IUnknown> int1Retry;
1996 CComPtr<IUnknown> int2Retry;
1997 HRESULT hResult;
1998
1999 if (int1 == int2)
2000 return true;
2001 if (int1 == NULL || int2 == NULL)
2002 return false;
2003 hResult = int1->QueryInterface(IID_PPV_ARG(IUnknown, &int1Retry));
2004 if (FAILED_UNEXPECTEDLY(hResult))
2005 return false;
2006 hResult = int2->QueryInterface(IID_PPV_ARG(IUnknown, &int2Retry));
2007 if (FAILED_UNEXPECTEDLY(hResult))
2008 return false;
2009 if (int1Retry == int2Retry)
2010 return true;
2011 return false;
2012}
2013
2015{
2016 static const INT excludeItems[] = { 1, 1, 1, IDC_STATUSBAR, 0, 0 };
2017
2018 RECT availableBounds;
2019
2020 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
2021 for (INT x = 0; x < 3; x++)
2022 {
2023 if (fClientBars[x].clientBar.p != NULL && !IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2024 {
2025 availableBounds.top += fClientBars[x].borderSpace.top;
2026 availableBounds.left += fClientBars[x].borderSpace.left;
2027 availableBounds.bottom -= fClientBars[x].borderSpace.bottom;
2028 availableBounds.right -= fClientBars[x].borderSpace.right;
2029 }
2030 }
2031 *prcBorder = availableBounds;
2032 return S_OK;
2033}
2034
2036{
2037 return S_OK;
2038}
2039
2041{
2042 for (INT x = 0; x < 3; x++)
2043 {
2044 if (IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2045 {
2046 fClientBars[x].borderSpace = *pbw;
2047 // if this bar changed size, it cascades and forces all subsequent bars to resize
2049 return S_OK;
2050 }
2051 }
2052 return E_INVALIDARG;
2053}
2054
2056 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
2057{
2058 CComPtr<IOleCommandTarget> commandTarget;
2059 HRESULT hResult;
2060
2061 if (prgCmds == NULL)
2062 return E_INVALIDARG;
2063 if (pguidCmdGroup == NULL)
2064 {
2065 if (fCurrentShellView.p != NULL)
2066 {
2067 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
2068 if (SUCCEEDED(hResult) && commandTarget.p != NULL)
2069 return commandTarget->QueryStatus(NULL, 1, prgCmds, pCmdText);
2070 }
2071 while (cCmds != 0)
2072 {
2073 prgCmds->cmdf = 0;
2074 prgCmds++;
2075 cCmds--;
2076 }
2077 }
2078 else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2079 {
2080 while (cCmds != 0)
2081 {
2082 switch (prgCmds->cmdID)
2083 {
2084 case 0x1c: // search
2086 if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
2087 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
2088 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
2089 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
2090 {
2091 prgCmds->cmdf |= OLECMDF_LATCHED;
2092 }
2093 break;
2094 case 0x1d: // history
2096 if (IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar))
2097 prgCmds->cmdf |= OLECMDF_LATCHED;
2098 break;
2099 case 0x1e: // favorites
2101 if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
2102 prgCmds->cmdf |= OLECMDF_LATCHED;
2103 break;
2104 case SBCMDID_EXPLORERBARFOLDERS: // folders
2106 if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
2107 prgCmds->cmdf |= OLECMDF_LATCHED;
2108 break;
2109 default:
2110 prgCmds->cmdf = 0;
2111 break;
2112 }
2113 prgCmds++;
2114 cCmds--;
2115 }
2116 }
2117 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2118 {
2119 while (cCmds != 0)
2120 {
2121 switch (prgCmds->cmdID)
2122 {
2124 prgCmds->cmdf = OLECMDF_SUPPORTED;
2126 prgCmds->cmdf |= OLECMDF_ENABLED;
2127 break;
2128 }
2129 prgCmds++;
2130 cCmds--;
2131 }
2132 }
2133 return S_OK;
2134}
2135
2137 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
2138{
2139 if (!pguidCmdGroup)
2140 {
2141 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut);
2142 return E_NOTIMPL;
2143 }
2144 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2145 {
2146 switch (nCmdID)
2147 {
2148 case 0x1c: //Toggle Search
2149 case 0x1d: //Toggle History
2150 case 0x1e: //Toggle Favorites
2151 case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
2152 const GUID* pclsid;
2153 if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
2154 else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
2155 else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
2156 else pclsid = &CLSID_ExplorerBand;
2157
2158 if (IsEqualCLSID(*pclsid, fCurrentVertBar))
2159 {
2163 }
2164 else
2165 {
2166 ShowBand(*pclsid, true);
2167 }
2168 return S_OK;
2169 case 0x22:
2170 //Sent when a band closes
2171 if (V_VT(pvaIn) != VT_UNKNOWN)
2172 return E_INVALIDARG;
2173
2174 if (IUnknownIsEqual(V_UNKNOWN(pvaIn), fClientBars[BIVerticalBaseBar].clientBar.p))
2175 {
2178 }
2179 return S_OK;
2180 case 0x27:
2181 if (nCmdexecopt == 1)
2182 {
2183 // pvaIn is a VT_UNKNOWN with a band that is being hidden
2184 }
2185 else
2186 {
2187 // update zones part of the status bar
2188 }
2189 return S_OK;
2190 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
2191 V_VT(pvaOut) = VT_INT_PTR;
2192 V_INTREF(pvaOut) = reinterpret_cast<INT *>(
2193 LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU)));
2194 return S_OK;
2195 case 0x38:
2196 // indicate if this cabinet was opened as a browser
2197 return S_FALSE;
2198 default:
2199 return E_NOTIMPL;
2200 }
2201 }
2202 else if (IsEqualIID(*pguidCmdGroup, CGID_InternetButtons))
2203 {
2204 switch (nCmdID)
2205 {
2206 case 0x23:
2207 // placeholder
2208 return S_OK;
2209 }
2210 }
2211 else if (IsEqualIID(*pguidCmdGroup, CGID_Theater))
2212 {
2213 switch (nCmdID)
2214 {
2215 case 6:
2216 // what is theater mode and why do we receive this?
2217 return E_NOTIMPL;
2218 }
2219 }
2220 else if (IsEqualIID(*pguidCmdGroup, CGID_MenuBand))
2221 {
2222 switch (nCmdID)
2223 {
2224 case 14:
2225 // initialize favorites menu
2226 return S_OK;
2227 }
2228 }
2229 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView))
2230 {
2231 switch (nCmdID)
2232 {
2233 case 0x12:
2234 // refresh on toolbar clicked
2235 return S_OK;
2236 case 0x26:
2237 // called for unknown bands ?
2238 return S_OK;
2239 case 0x4d:
2240 // tell the view if it should hide the task pane or not
2241 return (fClientBars[BIVerticalBaseBar].clientBar.p == NULL) ? S_FALSE : S_OK;
2242 }
2243 }
2244 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2245 {
2246 switch (nCmdID)
2247 {
2248 case 40994:
2249 return NavigateToParent();
2252 break;
2253 }
2254 }
2255 else if (IsEqualIID(*pguidCmdGroup, CGID_IExplorerToolbar))
2256 {
2257 switch (nCmdID)
2258 {
2259 case 0x7063:
2260 return DoFolderOptions();
2261 }
2262 }
2263 else if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
2264 {
2265 switch (nCmdID)
2266 {
2270 break;
2271 }
2272 }
2273 else
2274 {
2275 return E_NOTIMPL;
2276 }
2277 return E_NOTIMPL;
2278}
2279
2281{
2282 if (lphwnd == NULL)
2283 return E_POINTER;
2284 *lphwnd = m_hWnd;
2285 return S_OK;
2286}
2287
2289{
2290 return E_NOTIMPL;
2291}
2292
2293HRESULT STDMETHODCALLTYPE CShellBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
2294{
2295 HMENU mainMenu = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2296
2297 Shell_MergeMenus(hmenuShared, mainMenu, 0, 0, FCIDM_BROWSERLAST, MM_SUBMENUSHAVEIDS);
2298
2299 int GCCU(itemCount3) = GetMenuItemCount(hmenuShared);
2300 Unused(itemCount3);
2301
2302 DestroyMenu(mainMenu);
2303
2304 lpMenuWidths->width[0] = 2;
2305 lpMenuWidths->width[2] = 3;
2306 lpMenuWidths->width[4] = 1;
2307 return S_OK;
2308}
2309
2310HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
2311{
2312 CComPtr<IShellMenu> shellMenu;
2313 HRESULT hResult;
2314
2315 if (hmenuShared && IsMenu(hmenuShared) == FALSE)
2316 return E_FAIL;
2317 hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
2318 if (FAILED_UNEXPECTEDLY(hResult))
2319 return hResult;
2320
2321 if (!hmenuShared)
2322 {
2323 hmenuShared = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2324 }
2325 // FIXME: Figure out the proper way to do this.
2326 HMENU hMenuFavs = GetSubMenu(hmenuShared, 3);
2327 if (hMenuFavs)
2328 {
2330 }
2331
2332 hResult = shellMenu->SetMenu(hmenuShared, m_hWnd, SMSET_DONTOWN);
2333 if (FAILED_UNEXPECTEDLY(hResult))
2334 return hResult;
2335 fCurrentMenuBar = hmenuShared;
2337 return S_OK;
2338}
2339
2341{
2342 if (hmenuShared == fCurrentMenuBar)
2343 {
2344 //DestroyMenu(fCurrentMenuBar);
2346 }
2347 return S_OK;
2348}
2349
2351{
2352 //
2353 if (pszStatusText)
2354 {
2355 ::SetWindowText(fStatusBar, pszStatusText);
2356 }
2357 else
2358 {
2359
2360 }
2361 return S_OK;
2362}
2363
2365{
2366 return E_NOTIMPL;
2367}
2368
2370{
2372 return S_FALSE;
2373 return S_OK;
2374}
2375
2377{
2379 // FIXME: Should not automatically show the Explorer band
2380 if ((wFlags & SBSP_EXPLOREMODE) && !(wFlags & SBSP_NEWBROWSER))
2381 ShowBand(CLSID_ExplorerBand, true);
2382
2383 CComHeapPtr<ITEMIDLIST> pidlResolved;
2384 if (wFlags & (SBSP_RELATIVE | SBSP_PARENT))
2385 {
2386 HRESULT hr = CreateRelativeBrowsePIDL(pidl, wFlags, &pidlResolved);
2387 if (FAILED(hr))
2388 return hr;
2389 pidl = pidlResolved;
2390 }
2391
2392 if (wFlags & SBSP_NEWBROWSER)
2393 return OpenNewBrowserWindow(pidl, wFlags);
2394
2395 switch (wFlags & (SBSP_ABSOLUTE | SBSP_RELATIVE | SBSP_PARENT | SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
2396 {
2397 case SBSP_PARENT:
2398 return NavigateToParent();
2399 case SBSP_NAVIGATEBACK:
2400 return GoBack();
2401 case SBSP_NAVIGATEFORWARD:
2402 return GoForward();
2403 }
2404
2405 // TODO: SBSP_WRITENOHISTORY? SBSP_CREATENOHISTORY?
2407 if (fTravelLog)
2409 if (wFlags & SBSP_ACTIVATE_NOFOCUS)
2411 return BrowseToPIDL(pidl, flags);
2412}
2413
2415{
2416 return E_NOTIMPL;
2417}
2418
2420{
2421 if (lphwnd == NULL)
2422 return E_POINTER;
2423 *lphwnd = NULL;
2424 switch (id)
2425 {
2426 case FCW_TOOLBAR:
2427 *lphwnd = fToolbarProxy.m_hWnd;
2428 return S_OK;
2429 case FCW_STATUS:
2430 *lphwnd = fStatusBar;
2431 return S_OK;
2432 case FCW_TREE:
2433 {
2434 BOOL shown;
2435 if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
2436 return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
2437 return S_FALSE;
2438 }
2439 case FCW_PROGRESS:
2440 // is this a progress dialog?
2441 return S_OK;
2442 }
2443 return S_OK;
2444}
2445
2448{
2449 LPARAM result;
2450
2451 if (pret != NULL)
2452 *pret = 0;
2453 switch (id)
2454 {
2455 case FCW_TOOLBAR:
2457 if (pret != NULL)
2458 *pret = result;
2459 break;
2460 case FCW_STATUS:
2462 if (pret != NULL)
2463 *pret = result;
2464 break;
2465 }
2466 return S_OK;
2467}
2468
2470{
2471 if (ppshv == NULL)
2472 return E_POINTER;
2473 *ppshv = fCurrentShellView;
2474 if (fCurrentShellView.p != NULL)
2475 {
2477 return S_OK;
2478 }
2479 return E_FAIL;
2480}
2481
2483{
2484 return E_NOTIMPL;
2485}
2486
2488{
2489 return E_NOTIMPL;
2490}
2491
2493 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2494{
2495 return E_NOTIMPL;
2496}
2497
2499{
2500 return E_NOTIMPL;
2501}
2502
2504{
2505 return E_NOTIMPL;
2506}
2507
2509 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2510{
2511 return E_NOTIMPL;
2512}
2513
2515{
2516 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2517 // the returned interface has a method GetPropertyBag on it
2518 if (IsEqualIID(guidService, SID_STopLevelBrowser))
2519 return this->QueryInterface(riid, ppvObject);
2520 if (IsEqualIID(guidService, SID_SShellBrowser))
2521 return this->QueryInterface(riid, ppvObject);
2522 if (IsEqualIID(guidService, SID_ITargetFrame2))
2523 return this->QueryInterface(riid, ppvObject);
2524 if (IsEqualIID(guidService, SID_IWebBrowserApp)) // without this, the internet toolbar won't reflect notifications
2525 return this->QueryInterface(riid, ppvObject);
2526 if (IsEqualIID(guidService, SID_SProxyBrowser))
2527 return this->QueryInterface(riid, ppvObject);
2528 if (IsEqualIID(guidService, SID_IExplorerToolbar) && fClientBars[BIInternetToolbar].clientBar.p)
2529 return fClientBars[BIInternetToolbar].clientBar->QueryInterface(riid, ppvObject);
2530 if (IsEqualIID(riid, IID_IShellBrowser))
2531 return this->QueryInterface(riid, ppvObject);
2532 return E_NOINTERFACE;
2533}
2534
2536{
2539}
2540
2542{
2543 if (ppvObject == NULL)
2544 return E_POINTER;
2545
2546 *ppvObject = NULL;
2547
2548 LPITEMIDLIST pidl;
2549 HRESULT hr = GetPidl(&pidl);
2551 return E_FAIL;
2552
2553 // FIXME: pidl for Internet etc.
2554
2555 if (_ILIsNetworkPlace(pidl))
2556 flags |= SHGVSPB_ROAM;
2557
2558 hr = SHGetViewStatePropertyBag(pidl, L"Shell", flags, riid, ppvObject);
2559
2560 ILFree(pidl);
2561 return hr;
2562}
2563
2565{
2566 return E_NOTIMPL;
2567}
2568
2570{
2571 return E_NOTIMPL;
2572}
2573
2575 UINT cNames, LCID lcid, DISPID *rgDispId)
2576{
2577 return E_NOTIMPL;
2578}
2579
2581 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
2582{
2583 return E_NOTIMPL;
2584}
2585
2587{
2588 return E_NOTIMPL;
2589}
2590
2592{
2593 return E_NOTIMPL;
2594}
2595
2597{
2598 return E_NOTIMPL;
2599}
2600
2602{
2603 return E_NOTIMPL;
2604}
2605
2607{
2608 HRESULT hResult;
2609
2610 // called by toolbar when displaying tooltips
2611 if (pptl == NULL)
2612 return E_FAIL;
2613
2614 *pptl = NULL;
2615 if (fTravelLog.p == NULL)
2616 {
2618 if (FAILED_UNEXPECTEDLY(hResult))
2619 return hResult;
2620 }
2621 *pptl = fTravelLog.p;
2622 fTravelLog.p->AddRef();
2623 return S_OK;
2624}
2625
2627{
2628 BOOL shown;
2629 if (FAILED(IsControlWindowShown(id, &shown)))
2630 return E_NOTIMPL;
2631 else if (!shown == !fShow) // Negated for true boolean comparison
2632 return S_OK;
2633 else switch (id)
2634 {
2635 case FCW_STATUS:
2636 OnToggleStatusBarVisible(0, 0, NULL, shown);
2637 return S_OK;
2638 case FCW_TREE:
2639 return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
2640 case FCW_MENU:
2642 CGID_PrivCITCommands, ITID_MENUBANDSHOWN, 0, NULL, NULL);
2643 case FCW_ADDRESSBAR:
2645 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
2646 }
2647 return E_NOTIMPL;
2648}
2649
2651{
2652 HRESULT hr = S_OK;
2653 BOOL shown = FALSE;
2654 switch (id)
2655 {
2656 case FCW_STATUS:
2658 break;
2659 case FCW_TREE:
2660 {
2662 hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
2663 shown = cmd.cmdf & OLECMDF_LATCHED;
2664 break;
2665 }
2666 case FCW_MENU:
2668 break;
2669 case FCW_ADDRESSBAR:
2671 break;
2672 default:
2673 hr = E_NOTIMPL;
2674 }
2675 if (pfShown)
2676 {
2677 *pfShown = shown;
2678 return hr;
2679 }
2680 return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
2681}
2682
2684{
2685 OLECMD cmd = { ITId };
2687 CGID_PrivCITCommands, 1, &cmd, NULL);
2688 return SUCCEEDED(hr) ? (cmd.cmdf & OLECMDF_LATCHED) ? S_OK : S_FALSE : hr;
2689}
2690
2692{
2693 return E_NOTIMPL;
2694}
2695
2697{
2698 return E_NOTIMPL;
2699}
2700
2702{
2703 return E_NOTIMPL;
2704}
2705
2707{
2708 return _NavigateToPidl(pidl, grfHLNF, 0);
2709}
2710
2712{
2713 return E_NOTIMPL;
2714}
2715
2717{
2718 return E_NOTIMPL;
2719}
2720
2722{
2723 return E_NOTIMPL;
2724}
2725
2727{
2728 return E_NOTIMPL;
2729}
2730
2732{
2733 return E_NOTIMPL;
2734}
2735
2737{
2738 m_BrowserSvcFlags = (m_BrowserSvcFlags & ~dwFlagMask) | (dwFlags & dwFlagMask);
2739 return S_OK;
2740}
2741
2743{
2744 *pdwFlags = m_BrowserSvcFlags;
2745 return S_OK;
2746}
2747
2749{
2750 return E_NOTIMPL;
2751}
2752
2754{
2755 // called by explorer bar to get current pidl
2756 return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER;
2757}
2758
2760{
2761 return E_NOTIMPL;
2762}
2763
2765{
2766 return -1;
2767}
2768
2770{
2771 return E_NOTIMPL;
2772}
2773
2775{
2776 if (ppole == NULL || pstm == NULL || ppbc == NULL)
2777 return E_INVALIDARG;
2778 *ppole = fHistoryObject;
2779 if (fHistoryObject != NULL)
2781 *pstm = fHistoryStream;
2782 if (fHistoryStream != NULL)
2784 *ppbc = fHistoryBindContext;
2790 if (*ppole == NULL)
2791 return E_FAIL;
2792 return S_OK;
2793}
2794
2796{
2797 return E_NOTIMPL;
2798}
2799
2801{
2802 return E_NOTIMPL;
2803}
2804
2806{
2807 return E_NOTIMPL;
2808}
2809
2811 IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
2812{
2813 return E_NOTIMPL;
2814}
2815
2817{
2818 return E_NOTIMPL;
2819}
2820
2822{
2823 return E_NOTIMPL;
2824}
2825
2827{
2828 return E_NOTIMPL;
2829}
2830
2832{
2833 HRESULT hr = E_FAIL;
2835 {
2838 }
2839 return hr;
2840}
2841
2843{
2844 return E_NOTIMPL;
2845}
2846
2848{
2849 return E_NOTIMPL;
2850}
2851
2853{
2855 return S_OK;
2856}
2857
2859{
2860 return 0;
2861}
2862
2864{
2865 return E_NOTIMPL;
2866}
2867
2869{
2870 return 0;
2871}
2872
2874{
2875 return E_NOTIMPL;
2876}
2877
2879{
2880 return E_NOTIMPL;
2881}
2882
2884{
2885 return E_NOTIMPL;
2886}
2887
2889{
2890 return E_NOTIMPL;
2891}
2892
2894 IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd)
2895{
2896 return E_NOTIMPL;
2897}
2898
2900{
2901 return E_NOTIMPL;
2902}
2903
2905{
2906 return E_NOTIMPL;
2907}
2908
2910{
2911 return E_NOTIMPL;
2912}
2913
2915{
2916 return NULL;
2917}
2918
2920{
2921 return E_NOTIMPL;
2922}
2923
2925{
2926 SetFlags(BSF_TOPBROWSER, BSF_TOPBROWSER);
2927 return S_OK;
2928}
2929
2931{
2932 return E_NOTIMPL;
2933}
2934
2936{
2937 return E_NOTIMPL;
2938}
2939
2941{
2942 return E_NOTIMPL;
2943}
2944
2946{
2947 return E_NOTIMPL;
2948}
2949
2951{
2952 return E_NOTIMPL;
2953}
2954
2956{
2957 return E_NOTIMPL;
2958}
2959
2961{
2962 return E_NOTIMPL;
2963}
2964
2966{
2967 return E_NOTIMPL;
2968}
2969
2971{
2972 return E_NOTIMPL;
2973}
2974
2976{
2977 return E_NOTIMPL;
2978}
2979
2981{
2982 return E_NOTIMPL;
2983}
2984
2986{
2987 return E_NOTIMPL;
2988}
2989
2991{
2992 const UINT navflags = HLNF_NAVIGATINGBACK | HLNF_NAVIGATINGFORWARD;
2993 if ((grfHLNF & navflags) && grfHLNF != ~0ul)
2994 {
2995 UINT SbspFlags = (grfHLNF & HLNF_NAVIGATINGBACK) ? SBSP_NAVIGATEBACK : SBSP_NAVIGATEFORWARD;
2996 if (grfHLNF & SHHLNF_WRITENOHISTORY)
2997 SbspFlags |= SBSP_WRITENOHISTORY;
2998 if (grfHLNF & SHHLNF_NOAUTOSELECT)
2999 SbspFlags |= SBSP_NOAUTOSELECT;
3000 return BrowseObject(pidl, SbspFlags);
3001 }
3002 return E_NOTIMPL;
3003}
3004
3006{
3007 return E_NOTIMPL;
3008}
3009
3011{
3012 return E_NOTIMPL;
3013}
3014
3016 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)
3017{
3018 return E_NOTIMPL;
3019}
3020
3022 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam)
3023{
3024 return E_NOTIMPL;
3025}
3026
3028{
3029 return E_NOTIMPL;
3030}
3031
3033{
3034 return E_NOTIMPL;
3035}
3036
3038{
3039 return E_NOTIMPL;
3040}
3041
3043{
3044 return 0;
3045}
3046
3048{
3049 return E_NOTIMPL;
3050}
3051
3053{
3054 return E_NOTIMPL;
3055}
3056
3058{
3059 return E_NOTIMPL;
3060}
3061
3063{
3064 return E_NOTIMPL;
3065}
3066
3068{
3069 return E_NOTIMPL;
3070}
3071
3073{
3074 return E_NOTIMPL;
3075}
3076
3078{
3079 return E_NOTIMPL;
3080}
3081
3083{
3084 return NULL;
3085}
3086
3088{
3089 return 0;
3090}
3091
3093{
3094 return E_NOTIMPL;
3095}
3096
3098{
3099 return 0;
3100}
3101
3103{
3104 return NULL;
3105}
3106
3108{
3109 return E_NOTIMPL;
3110}
3111
3113{
3114 return E_NOTIMPL;
3115}
3116
3118{
3119 return E_NOTIMPL;
3120}
3121
3123 LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd)
3124{
3125 return E_NOTIMPL;
3126}
3127
3129{
3130 return E_NOTIMPL;
3131}
3132
3134{
3135 return 0;
3136}
3137
3139{
3140 return E_NOTIMPL;
3141}
3142
3144{
3145 for (int i = 0; i < 3; i++)
3146 {
3147 if (IUnknown_TranslateAcceleratorIO(fClientBars[i].clientBar, pmsg) == S_OK)
3148 return S_OK;
3149 }
3150
3151 if (!fCurrentShellView)
3152 return S_FALSE;
3153
3154 return fCurrentShellView->TranslateAcceleratorW(pmsg);
3155}
3156
3158{
3159 return E_NOTIMPL;
3160}
3161
3163{
3164 return E_NOTIMPL;
3165}
3166
3168{
3169 CComPtr<ITravelLog> travelLog;
3170 CComPtr<ITravelEntry> unusedEntry;
3171 HRESULT hResult;
3172
3173 hResult = GetTravelLog(&travelLog);
3174 if (FAILED_UNEXPECTEDLY(hResult))
3175 return hResult;
3176
3177 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
3178 if (SUCCEEDED(hResult))
3179 {
3180 unusedEntry.Release();
3181 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_BACK);
3182 }
3183
3184 return hResult;
3185}
3186
3188{
3189 CComPtr<ITravelLog> travelLog;
3190 CComPtr<ITravelEntry> unusedEntry;
3191 HRESULT hResult;
3192
3193 hResult = GetTravelLog(&travelLog);
3194 if (FAILED_UNEXPECTEDLY(hResult))
3195 return hResult;
3196
3197 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
3198 if (SUCCEEDED(hResult))
3199 {
3200 unusedEntry.Release();
3201 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_FORE);
3202 }
3203
3204 return hResult;
3205}
3206
3208{
3209 return E_NOTIMPL;
3210}
3211
3213{
3214 return E_NOTIMPL;
3215}
3216
3218 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3219{
3221 HRESULT hResult;
3222 CComPtr<IShellFolder> pDesktop;
3223
3224 hResult = SHGetDesktopFolder(&pDesktop);
3225 if (FAILED_UNEXPECTEDLY(hResult))
3226 return hResult;
3227 hResult = pDesktop->ParseDisplayName(NULL, NULL, URL, NULL, &pidl, NULL);
3228 if (FAILED_UNEXPECTEDLY(hResult))
3229 return hResult;
3230 return BrowseObject(pidl, 1);
3231}
3232
3234{
3235 VARIANT level;
3236
3237 V_VT(&level) = VT_I4;
3238 V_I4(&level) = 4;
3239 return Refresh2(&level);
3240}
3241
3243{
3244 CComPtr<IOleCommandTarget> oleCommandTarget;
3245 HRESULT hResult;
3246
3247 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
3248 if (FAILED_UNEXPECTEDLY(hResult))
3249 return hResult;
3250 return oleCommandTarget->Exec(NULL, 22, 1, Level, NULL);
3251}
3252
3254{
3255 return E_NOTIMPL;
3256}
3257
3259{
3260 return E_NOTIMPL;
3261}
3262
3264{
3265 return E_NOTIMPL;
3266}
3267
3269{
3270 return E_NOTIMPL;
3271}
3272
3274{
3275 return E_NOTIMPL;
3276}
3277
3279{
3280 return E_NOTIMPL;
3281}
3282
3284{
3285 return E_NOTIMPL;
3286}
3287#ifdef __exdisp_h__
3288#define long LONG
3289#endif
3291{
3292 return E_NOTIMPL;
3293}
3294
3296{
3297 return E_NOTIMPL;
3298}
3299
3301{
3302 return E_NOTIMPL;
3303}
3304
3306{
3307 return E_NOTIMPL;
3308}
3309
3311{
3312 return E_NOTIMPL;
3313}
3314
3316{
3317 return E_NOTIMPL;
3318}
3319
3321{
3322 return E_NOTIMPL;
3323}
3324
3326{
3327 return E_NOTIMPL;
3328}
3329#ifdef __exdisp_h__
3330#undef long
3331#endif
3333{
3334 return E_NOTIMPL;
3335}
3336
3338{
3339 return E_NOTIMPL;
3340}
3341
3343{
3344 return E_NOTIMPL;
3345}
3346
3348{
3350 return S_OK;
3351}
3352
3354{
3355 return E_NOTIMPL;
3356}
3357
3359{
3360 return E_NOTIMPL;
3361}
3362
3364{
3365 return E_NOTIMPL;
3366}
3367
3369{
3370 return E_NOTIMPL;
3371}
3372
3374{
3376 return *pHWND ? S_OK : E_UNEXPECTED;
3377}
3378
3380{
3381 return E_NOTIMPL;
3382}
3383
3385{
3386 return E_NOTIMPL;
3387}
3388
3390{
3392 *pBool = hWnd && ::IsWindowVisible(hWnd) ? VARIANT_TRUE : VARIANT_FALSE;
3393 return S_OK;
3394}
3395
3397{
3399 {
3401 if (Value)
3404 }
3405 return S_OK;
3406}
3407
3409{
3410 *pBool = IsControlWindowShown(FCW_STATUS, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3411 return S_OK;
3412}
3413
3415{
3416 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3417 HRESULT hr = ShowControlWindow(FCW_STATUS, Value != VARIANT_FALSE);
3419 return hr;
3420}
3421
3423{
3424 return E_NOTIMPL;
3425}
3426
3428{
3429 SendControlMsg(FCW_STATUS, SB_SETTEXTW, 0, (LPARAM)StatusText, NULL);
3430 return S_OK;
3431}
3432
3434{
3435 *Value = IsControlWindowShown(FCW_INTERNETBAR, NULL) == S_OK;
3436 if (!*Value && IsControlWindowShown(FCW_TOOLBAR, NULL) == S_OK)
3437 *Value = FCW_TOOLBAR;
3438 return S_OK;
3439}
3440
3442{
3443 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3444 ShowControlWindow(FCW_INTERNETBAR, Value != VARIANT_FALSE && Value != FCW_TOOLBAR);
3445 ShowControlWindow(FCW_TOOLBAR, Value == FCW_TOOLBAR);
3447 return S_OK;
3448}
3449
3451{
3452 *Value = IsControlWindowShown(FCW_MENU, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3453 return S_OK;
3454}
3455
3457{
3458 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3459 HRESULT hr = ShowControlWindow(FCW_MENU, Value != VARIANT_FALSE);
3461 return hr;
3462}
3463
3465{
3466 *pbFullScreen = (m_BrowserSvcFlags & BSF_ROS_KIOSK) ? VARIANT_TRUE : VARIANT_FALSE;
3467 return S_OK;
3468}
3469
3471{
3472 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3473 SetFlags(bFullScreen ? BSF_ROS_KIOSK : 0, BSF_ROS_KIOSK);
3474 put_TheaterMode(bFullScreen);
3476 return S_OK;
3477}
3478
3480 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3481{
3482 LPITEMIDLIST pidl = NULL;
3483 HRESULT hResult;
3484 // called from drive combo box to navigate to a directory
3485 // Also called by search band to display shell results folder view
3486
3487 if (V_VT(URL) == VT_BSTR)
3488 {
3489 return this->Navigate(V_BSTR(URL), Flags, TargetFrameName, PostData, Headers);
3490 }
3491 if (V_VT(URL) == (VT_ARRAY | VT_UI1))
3492 {
3493 if (V_ARRAY(URL)->cDims != 1 || V_ARRAY(URL)->cbElements != 1)
3494 return E_INVALIDARG;
3495
3496 pidl = static_cast<LPITEMIDLIST>(V_ARRAY(URL)->pvData);
3497 }
3499 if (FAILED_UNEXPECTEDLY(hResult))
3500 return hResult;
3501 return S_OK;
3502}
3503
3505{
3506 OLECMD cmd = { (ULONG)cmdID, (DWORD)(*pcmdf) };
3507 HRESULT hr = QueryStatus(NULL, 1, &cmd, NULL);
3508 *pcmdf = (OLECMDF)cmd.cmdf;
3509 return hr;
3510}
3511
3513 VARIANT *pvaIn, VARIANT *pvaOut)
3514{
3518 if (SUCCEEDED(hr))
3519 hr = pOCT->Exec(NULL, cmdID, cmdexecopt, pvaIn, pvaOut);
3520 return hr;
3521}
3522
3524{
3525 CLSID classID;
3526 bool vertical;
3527
3528 // called to show search bar
3529 if (V_VT(pvaClsid) != VT_BSTR)
3530 return E_INVALIDARG;
3531 CLSIDFromString(V_BSTR(pvaClsid), &classID);
3532 // TODO: properly compute the value of vertical
3533 vertical = true;
3534 return ShowBand(classID, vertical);
3535}
3536
3538{
3539 return E_NOTIMPL;
3540}
3541
3543{
3544 return E_NOTIMPL;
3545}
3546
3548{
3549 return E_NOTIMPL;
3550}
3551
3553{
3554 return E_NOTIMPL;
3555}
3556
3558{
3559 return E_NOTIMPL;
3560}
3561
3563{
3564 *pbRegister = (m_BrowserSvcFlags & BSF_ROS_REGBROWSER) ? VARIANT_TRUE : VARIANT_FALSE;
3565 return S_OK;
3566}
3567
3569{
3570 if (!bRegister)
3571 return E_UNEXPECTED;
3573 return RegisterWindow(TRUE, SWC_3RDPARTY);
3574}
3575
3577{
3578 *pbRegister = (m_BrowserSvcFlags & BSF_REGISTERASDROPTARGET) ? VARIANT_TRUE : VARIANT_FALSE;
3579 return S_OK;
3580}
3581
3583{
3584 SetFlags(bRegister ? BSF_REGISTERASDROPTARGET : 0, BSF_REGISTERASDROPTARGET);
3585 return S_OK;
3586}
3587
3589{
3590 *pbRegister = (m_BrowserSvcFlags & BSF_THEATERMODE) ? VARIANT_TRUE : VARIANT_FALSE;
3591 return S_OK;
3592}
3593
3595{
3596 BOOL handled;
3597 OnToggleFullscreen(bRegister, 0, NULL, handled);
3598 return S_OK;
3599}
3600
3602{
3603 *Value = IsControlWindowShown(FCW_ADDRESSBAR, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3604 return S_OK;
3605}
3606
3608{
3609 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3610 HRESULT hr = ShowControlWindow(FCW_ADDRESSBAR, Value != VARIANT_FALSE);
3612 return hr;
3613}
3614
3616{
3617 *Value = (m_BrowserSvcFlags & BSF_RESIZABLE) ? VARIANT_TRUE : VARIANT_FALSE;
3618 return E_NOTIMPL;
3619}
3620
3622{
3623 SetFlags(Value ? (BSF_RESIZABLE | BSF_CANMAXIMIZE) : 0, (BSF_RESIZABLE | BSF_CANMAXIMIZE));
3624 return S_OK;
3625}
3626
3628{
3629 return E_NOTIMPL;
3630}
3631
3633{
3634 if (pWinData == NULL)
3635 return E_POINTER;
3636
3637 pWinData->dwWindowID = -1;
3638 pWinData->uiCP = 0;
3639 pWinData->pidl = ILClone(fCurrentDirectoryPIDL);
3640 pWinData->lpszUrl = NULL;
3641 pWinData->lpszUrlLocation = NULL;
3642 pWinData->lpszTitle = NULL;
3643 return S_OK;
3644}
3645
3647{
3648 return E_NOTIMPL;
3649}
3650
3652{
3653 return E_NOTIMPL;
3654}
3655
3657{
3658 CComPtr<IPersistHistory> viewPersistHistory;
3659 CComPtr<IOleObject> viewHistoryObject;
3660 persistState oldState;
3661 ULONG numRead;
3662 LPITEMIDLIST pidl;
3663 HRESULT hResult;
3664
3665 hResult = pStream->Read(&oldState, sizeof(oldState), &numRead);
3666 if (FAILED_UNEXPECTEDLY(hResult))
3667 return hResult;
3668 if (numRead != sizeof(oldState) || oldState.dwSize != sizeof(oldState))
3669 return E_FAIL;
3670 if (oldState.browseType != 2)
3671 return E_FAIL;
3672 pidl = static_cast<LPITEMIDLIST>(CoTaskMemAlloc(oldState.pidlSize));
3673 if (pidl == NULL)
3674 return E_OUTOFMEMORY;
3675 hResult = pStream->Read(pidl, oldState.pidlSize, &numRead);
3676 if (FAILED_UNEXPECTEDLY(hResult))
3677 {
3678 ILFree(pidl);
3679 return hResult;
3680 }
3681 if (numRead != oldState.pidlSize)
3682 {
3683 ILFree(pidl);
3684 return E_FAIL;
3685 }
3686 hResult = CoCreateInstance(oldState.persistClass, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER,
3687 IID_PPV_ARG(IOleObject, &viewHistoryObject));
3688 fHistoryObject = viewHistoryObject;
3689 fHistoryStream = pStream;
3690 fHistoryBindContext = pbc;
3691 hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
3695 ILFree(pidl);
3696 if (FAILED_UNEXPECTEDLY(hResult))
3697 return hResult;
3698 return S_OK;
3699}
3700
3702{
3703 CComPtr<IPersistHistory> viewPersistHistory;
3704 persistState newState;
3705 HRESULT hResult;
3706
3707 hResult = fCurrentShellView->GetItemObject(
3708 SVGIO_BACKGROUND, IID_PPV_ARG(IPersistHistory, &viewPersistHistory));
3709 memset(&newState, 0, sizeof(newState));
3710 newState.dwSize = sizeof(newState);
3711 newState.browseType = 2;
3712 newState.browserIndex = GetBrowserIndex();
3713 if (viewPersistHistory.p != NULL)
3714 {
3715 hResult = viewPersistHistory->GetClassID(&newState.persistClass);
3716 if (FAILED_UNEXPECTEDLY(hResult))
3717 return hResult;
3718 }
3720 hResult = pStream->Write(&newState, sizeof(newState), NULL);
3721 if (FAILED_UNEXPECTEDLY(hResult))
3722 return hResult;
3723 hResult = pStream->Write(fCurrentDirectoryPIDL, newState.pidlSize, NULL);
3724 if (FAILED_UNEXPECTEDLY(hResult))
3725 return hResult;
3726 if (viewPersistHistory.p != NULL)
3727 {
3728 hResult = viewPersistHistory->SaveHistory(pStream);
3729 if (FAILED_UNEXPECTEDLY(hResult))
3730 return hResult;
3731 }
3732 return S_OK;
3733}
3734
3736{
3737 return E_NOTIMPL;
3738}
3739
3741{
3742 return E_NOTIMPL;
3743}
3744
3746{
3747 OnCreate(reinterpret_cast<LPCREATESTRUCT> (lParam));
3748 return 0;
3749}
3750
3752{
3753 HRESULT hr;
3754 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK))
3755 {
3757 put_MenuBar(VARIANT_TRUE);
3759 put_StatusBar(VARIANT_TRUE);
3760 }
3761 SaveViewState();
3762
3763 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
3765
3766 // TODO: rip down everything
3767 {
3768 m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction
3769 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
3771 fCurrentShellView->DestroyViewWindow();
3772
3773 for (int i = 0; i < 3; i++)
3774 {
3777 CComPtr<IUnknown> pBarSite;
3778
3779 if (fClientBars[i].clientBar == NULL)
3780 continue;
3781
3782 hr = fClientBars[i].clientBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pdw));
3784 continue;
3785
3786 /* We should destroy our basebarsite too */
3787 hr = pdw->QueryInterface(IID_PPV_ARG(IDeskBar, &bar));
3788 if (SUCCEEDED(hr))
3789 {
3790 hr = bar->GetClient(&pBarSite);
3791 if (SUCCEEDED(hr) && pBarSite)
3792 {
3794 hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient));
3795 if (SUCCEEDED(hr))
3796 pClient->SetDeskBarSite(NULL);
3797 }
3798 }
3799 pdw->CloseDW(0);
3800
3801 pBarSite = NULL;
3802 pdw = NULL;
3803 bar = NULL;
3804 ReleaseCComPtrExpectZero(fClientBars[i].clientBar);
3805 }
3806 ReleaseCComPtrExpectZero(fCurrentShellView);
3807 ReleaseCComPtrExpectZero(fTravelLog);
3808
3814 }
3815 PostQuitMessage(0);
3816 return 0;
3817}
3818
3820{
3821 CComPtr<IDockingWindow> dockingWindow;
3822 RECT availableBounds;
3823 static const INT excludeItems[] = {1, 1, 1, IDC_STATUSBAR, 0, 0};
3824 HRESULT hResult;
3825
3826 if (wParam != SIZE_MINIMIZED)
3827 {
3828 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
3829 for (INT x = 0; x < 3; x++)
3830 {
3831 if (fClientBars[x].clientBar)
3832 {
3833 hResult = fClientBars[x].clientBar->QueryInterface(
3834 IID_PPV_ARG(IDockingWindow, &dockingWindow));
3835 if (SUCCEEDED(hResult) && dockingWindow != NULL)
3836 {
3837 hResult = dockingWindow->ResizeBorderDW(
3838 &availableBounds, static_cast<IDropTarget *>(this), TRUE);
3839 break;
3840 }
3841 }
3842 }
3844 }
3845 return 1;
3846}
3847
3849{
3850 HMENU theMenu;
3851 LPARAM menuIndex = lParam;
3852
3853 theMenu = reinterpret_cast<HMENU>(wParam);
3854
3856 {
3857 menuIndex = 0;
3858 }
3859 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_EDIT))
3860 {
3861 menuIndex = 1;
3862 }
3863 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_VIEW))
3864 {
3865 UpdateViewMenu(theMenu);
3866 menuIndex = 2;
3867 }
3869 {
3870 menuIndex = 3;
3871 }
3872 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_TOOLS))
3873 {
3874 // FIXME: Remove once implemented
3877 menuIndex = 4;
3878 }
3879 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
3880 {
3881 menuIndex = 5;
3882 }
3883
3884 LRESULT ret = RelayMsgToShellView(uMsg, wParam, menuIndex, bHandled);
3885
3886 return ret;
3887}
3888
3890{
3892 return 0;
3893}
3894
3896{
3899 return 0;
3900}
3901
3903{
3906 return 0;
3907}
3908
3910{
3912 return 0;
3913}
3914
3915LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3916{
3917 return SendMessage(WM_CLOSE);
3918}
3919
3920LRESULT CShellBrowser::OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3921{
3922 HRESULT hResult = DoFolderOptions();
3923 if (FAILED(hResult))
3924 TRACE("DoFolderOptions failed with hResult=%08lx\n", hResult);
3925 return 0;
3926}
3927
3928LRESULT CShellBrowser::OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3929{
3930#ifndef __REACTOS__
3932#endif /* __REACTOS__ */
3933 return 0;
3934}
3935
3937{
3939 return 0;
3940}
3941
3942LRESULT CShellBrowser::OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3943{
3944 ShellAbout(m_hWnd, _T("ReactOS"), NULL, NULL);
3945 return 0;
3946}
3947
3948LRESULT CShellBrowser::OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3949{
3950 HRESULT hResult = GoBack();
3951 if (FAILED(hResult))
3952 TRACE("GoBack failed with hResult=%08lx\n", hResult);
3953 return 0;
3954}
3955
3956LRESULT CShellBrowser::OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3957{
3958 HRESULT hResult = GoForward();
3959 if (FAILED(hResult))
3960 TRACE("GoForward failed with hResult=%08lx\n", hResult);
3961 return 0;
3962}
3963
3964LRESULT CShellBrowser::OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3965{
3966 HRESULT hResult = NavigateToParent();
3967 if (FAILED(hResult))
3968 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3969 return 0;
3970}
3971
3972LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3973{
3974 HRESULT hResult = GoHome();
3975 if (FAILED(hResult))
3976 TRACE("GoHome failed with hResult=%08lx\n", hResult);
3977 return 0;
3978}
3979
3980LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3981{
3982 HRESULT hResult;
3983 if (LOBYTE(GetVersion()) < 6)
3984 hResult = NavigateToParent();
3985 else if (FAILED(hResult = GoBack()))
3986 hResult = GoForward();
3987
3988 if (FAILED(hResult))
3989 TRACE("Backspace navigation failed with hResult=%08lx\n", hResult);
3990 return 0;
3991}
3992
3994{
3996 if (FAILED(hr))
3998
3999 return hr;
4000}
4001
4002LRESULT CShellBrowser::OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4003{
4005 LPCITEMIDLIST pidlLast;
4008 return hr;
4009
4010 STRRET strret;
4011 hr = pParent->GetDisplayNameOf(pidlLast, SHGDN_FORPARSING, &strret);
4013 return 0;
4014
4015 CComHeapPtr<WCHAR> pszURL;
4016 hr = StrRetToStrW(&strret, NULL, &pszURL);
4018 return 0;
4019
4020 AddUrlToFavorites(m_hWnd, pszURL, NULL, TRUE);
4021 return 0;
4022}
4023
4024LRESULT CShellBrowser::OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4025{
4026 CComPtr<IShellFolder> psfDesktop;
4027 LPITEMIDLIST pidlFavs;
4028 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
4030 return 0;
4031
4032 hr = SHGetDesktopFolder(&psfDesktop);
4034 {
4035 ILFree(pidlFavs);
4036 return 0;
4037 }
4038
4039 hr = SHInvokeDefaultCommand(m_hWnd, psfDesktop, pidlFavs);
4040 ILFree(pidlFavs);
4042 return 0;
4043
4044 return 0;
4045}
4046
4048{
4050 m_settings.Save();
4052 return 0;
4053}
4054
4055LRESULT CShellBrowser::OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4056{
4057 HRESULT hResult;
4058 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4059 CGID_PrivCITCommands, ITID_TOOLBARLOCKED, 0, NULL, NULL);
4060 return 0;
4061}
4062
4064{
4065 HRESULT hResult;
4066 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4067 CGID_PrivCITCommands, ITID_TOOLBARBANDSHOWN, 0, NULL, NULL);
4068 return 0;
4069}
4070
4072{
4073 HRESULT hResult;
4074 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4075 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
4076 return 0;
4077}
4078
4080{
4081 HRESULT hResult;
4082 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4083 CGID_PrivCITCommands, ITID_LINKSBANDSHOWN, 0, NULL, NULL);
4084 return 0;
4085}
4086
4087LRESULT CShellBrowser::OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4088{
4089 HRESULT hResult;
4090 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4091 CGID_PrivCITCommands, ITID_TEXTLABELS, 0, NULL, NULL);
4092 return 0;
4093}
4094
4095LRESULT CShellBrowser::OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4096{
4097 HRESULT hResult;
4098 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4099 CGID_PrivCITCommands, ITID_CUSTOMIZEENABLED, 0, NULL, NULL);
4100 return 0;
4101}
4102
4103LRESULT CShellBrowser::OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4104{
4106 fCurrentShellView->Refresh();
4107 return 0;
4108}
4109
4110LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4111{
4112 return 0;
4113}
4114
4115LRESULT CShellBrowser::OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4116{
4117 // TODO: HACK ! use the proper mechanism to show the band (i.e. pass the BSTR to basebar)
4119 {
4120 MenuBandInfo *mbi;
4122 if (!mbi)
4123 return 0;
4124 ShowBand(mbi->barGuid, mbi->fVertical);
4125 bHandled = TRUE;
4126 return 1;
4127 }
4128 switch (wID)
4129 {
4131 ShowBand(CLSID_FileSearchBand, true);
4132 break;
4134 ShowBand(CLSID_ExplorerBand, true);
4135 break;
4137 ShowBand(CLSID_SH_HistBand, true);
4138 break;
4140 ShowBand(CLSID_SH_FavBand, true);
4141 break;
4142 default:
4143 WARN("Unknown id %x\n", wID);
4144 }
4145 bHandled = TRUE;
4146 return 1;
4147}
4148
4150{
4153 return 0;
4154}
4155
4157{
4159 return 0;
4160}
4161
4163{
4164 /* Refresh child windows */
4166
4167 /* Refresh status bar */
4168 if (fStatusBar)
4169 {
4172 }
4173
4174 return 0;
4175}
4176
4178{
4179 if (!lParam)
4181
4183 return NO_ERROR;
4184}
4185
4186// WM_APPCOMMAND
4188{
4189 UINT uCmd = GET_APPCOMMAND_LPARAM(lParam), uExecCmd = 0;
4190 switch (uCmd)
4191 {
4192 case APPCOMMAND_BROWSER_BACKWARD: uExecCmd = IDM_GOTO_BACK; break;
4193 case APPCOMMAND_BROWSER_FORWARD: uExecCmd = IDM_GOTO_FORWARD; break;
4194 case APPCOMMAND_BROWSER_REFRESH: uExecCmd = IDM_VIEW_REFRESH; break;
4195 case APPCOMMAND_BROWSER_STOP: uExecCmd = FCIDM_BROWSER_STOP; break; // TODO: Handle Stop()
4196 case APPCOMMAND_BROWSER_SEARCH: uExecCmd = IDM_EXPLORERBAR_SEARCH; break;
4197 case APPCOMMAND_BROWSER_FAVORITES: uExecCmd = IDM_EXPLORERBAR_FAVORITES; break;
4198 case APPCOMMAND_BROWSER_HOME: uExecCmd = IDM_GOTO_HOMEPAGE; break;
4199 }
4200 if (uExecCmd)
4201 {
4202 SendMessage(WM_COMMAND, uExecCmd, 0);
4203 bHandled = TRUE;
4204 return TRUE;
4205 }
4206 return 0;
4207}
4208
4209LRESULT CShellBrowser::OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4210{
4211 const UINT OrgUiSetAuto = m_BrowserSvcFlags & BSF_UISETBYAUTOMATION;
4212 const BOOL fCurrentlyFullscreen = (m_BrowserSvcFlags & BSF_THEATERMODE);
4213 const BOOL fEnter = wID ? !fCurrentlyFullscreen : wNotifyCode;
4215 if (fEnter)
4216 {
4217 VARIANT_BOOL varb;
4218 m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? FSF_RESIZE : 0;
4219 m_NonFullscreenState |= (FAILED(get_MenuBar(&varb)) || varb) ? FSF_MBAR : 0;
4220 m_NonFullscreenState |= (FAILED(get_StatusBar(&varb)) || varb) ? FSF_SBAR : 0;
4222 SetFlags(BSF_THEATERMODE, BSF_THEATERMODE);
4223 put_MenuBar(VARIANT_FALSE);
4224 put_StatusBar(VARIANT_FALSE);
4230 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4231 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4233 }
4234 else
4235 {
4236 SetFlags(0, BSF_THEATERMODE);
4237 put_MenuBar((m_NonFullscreenState & FSF_MBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4238 put_StatusBar((m_NonFullscreenState & FSF_SBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4241 SHSetWindowBits(hWnd, GWL_STYLE, styles | WS_THICKFRAME, styles);
4246 }
4247 SetFlags(OrgUiSetAuto, BSF_UISETBYAUTOMATION);
4249 return 0;
4250}
4251
4253{
4255 return 0;
4256}
4257
4259{
4260 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK)) // Resize fullscreen on resolution change (CORE-20072)
4261 {
4265 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4266 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4268 }
4269 return 0;
4270}
4271
4273{
4274 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
4275}
4276
4278{
4281}
4282
4284{
4286 SHGDNF flags = SHGDN_FORADDRESSBAR;
4287
4289 flags |= SHGDN_FORPARSING;
4290
4293}
4294
4296{
4297 if (!gCabinetState.fSaveLocalView || (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_UISETBYAUTOMATION)))
4298 return;
4299#if 0 // If CDesktopBrowser aggregates us, skip saving
4301 if (fCurrentShellView && SUCCEEDED(fCurrentShellView->GetCurrentInfo(&fs)) && (fs.fFlags & FWF_DESKTOP))
4302 return;
4303#endif
4304
4306 CComPtr<IStream> pITBarStream;
4307 if (!fClientBars[BIInternetToolbar].clientBar.p)
4308 return;
4310 if (FAILED(hr))
4311 return;
4313 return;
4314 pPSI->Save(pITBarStream, TRUE);
4315}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
#define ATLASSERT(x)
Definition: CComVariant.cpp:10
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
HRESULT WINAPI SHEnumClassesOfCategories(ULONG cImplemented, CATID *pImplemented, ULONG cRequired, CATID *pRequired, IEnumGUID **out)
PRTL_UNICODE_STRING_BUFFER Path
Type
Definition: Type.h:7
#define msg(x)
Definition: auth_time.c:54
#define IDM_HELP_ABOUT
Definition: resource.h:387
HWND hWnd
Definition: settings.c:17
#define IDC_STATUSBAR
Definition: resource.h:12
@ Create
Definition: registry.c:563
static LPHIST_ENTRY Top
Definition: history.c:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define IDI_CABINET
Definition: resource.h:10
HRESULT CBaseBarSite_CreateInstance(REFIID riid, void **ppv, BOOL bVertical)
long SHANDLE_PTR
Definition: basetsd.h:77
#define HandleToLong(h)
Definition: basetsd.h:80
#define STDMETHOD_(t, m)
Definition: basetyps.h:63
#define STDMETHOD(m)
Definition: basetyps.h:62
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
HRESULT CInternetToolbar_CreateInstance(REFIID riid, void **ppv)
Definition: browseui.cpp:78
HRESULT CExplorerBand_CreateInstance(REFIID riid, LPVOID *ppv)
Definition: browseui.cpp:69
HRESULT CSearchBar_CreateInstance(REFIID riid, LPVOID *ppv)
Definition: browseui.cpp:60
HRESULT CTravelLog_CreateInstance(REFIID riid, void **ppv)
Definition: travellog.cpp:632
HRESULT CBaseBar_CreateInstance(REFIID riid, void **ppv, BOOL vertical)
Definition: CBaseBar.cpp:564
#define SH_EXPLORER_CMDLINE_FLAG_NEWWND
#define FCW_MENU
#define SH_EXPLORER_CMDLINE_FLAG_NOREUSE
#define FCW_ADDRESSBAR
#define SH_EXPLORER_CMDLINE_FLAG_E
IUnknown ** end()
Definition: atlcom.h:1128
IUnknown ** begin()
Definition: atlcom.h:1123
void Release()
Definition: atlcomcli.h:170
virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
static LRESULT CALLBACK StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1619
virtual void OnFinalMessage(HWND)
Definition: atlwin.h:1548
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1612
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1540
const _ATL_MSG * m_pCurrentMsg
Definition: atlwin.h:1380
HWND SetFocus()
Definition: atlwin.h:1198
BOOL DestroyWindow()
Definition: atlwin.h:462
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1116
BOOL IsWindowVisible() const
Definition: atlwin.h:958
BOOL UpdateWindow()
Definition: atlwin.h:1345
HWND m_hWnd
Definition: atlwin.h:273
static HRESULT ResetBrowserSettings()
static HRESULT SaveBrowserSettings(const SBFOLDERSETTINGS &sbfs)
T * Detach()
Definition: atlalloc.h:168
static HRESULT GetStream(UINT StreamFor, DWORD Stgm, IStream **ppS)
CComPtr< IUnknown > clientBar
static ATL::CWndClassInfo & GetWndClassInfo()
static const int BIInternetToolbar
STDMETHOD() _ResizeView() override
HWND fCurrentShellViewWindow
STDMETHOD() put_TheaterMode(VARIANT_BOOL bRegister) override
STDMETHOD() BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override
STDMETHOD() put_StatusBar(VARIANT_BOOL Value) override
STDMETHOD() _SetFocus(LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) override
STDMETHOD() SetReferrer(LPCITEMIDLIST pidl) override
STDMETHOD() ActivatePendingView() override
UINT ApplyNewBrowserFlag(UINT Flags)
STDMETHOD() get_Height(long *pl) override
STDMETHOD() get_Document(IDispatch **ppDisp) override
STDMETHOD() get_Top(long *pl) override
HRESULT BrowseToPath(IShellFolder *newShellFolder, LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
STDMETHOD() LoadHistory(IStream *pStream, IBindCtx *pbc) override
BOOL IsBuiltinBand(CLSID &bandID)
LRESULT RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
STDMETHOD() CanNavigateNow(void) override
HRESULT BrowseToPIDL(LPCITEMIDLIST pidl, long flags)
STDMETHOD() GetFlags(DWORD *pdwFlags) override
STDMETHOD() _CloseAndReleaseToolbars(BOOL fClose) override
STDMETHOD() _ResizeNextBorder(UINT itb) override
STDMETHOD() GetBrowserByIndex(DWORD dwID, IUnknown **ppunk) override
STDMETHOD() InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override
LRESULT OnToggleStatusBarVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() v_CheckZoneCrossing(LPCITEMIDLIST pidl) override
STDMETHOD_(int, _GetToolbarCount)() override
STDMETHOD() _ResizeNextBorderHelper(UINT itb, BOOL bUseHmonitor) override
LRESULT OnDisplayChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
DWORD m_BrowserSvcFlags
HRESULT UpdateUpState()
STDMETHOD() v_MayTranslateAccelerator(MSG *pmsg) override
LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() UpdateWindowList() override
STDMETHOD() GetFolderSetData(struct tagFolderSetData *pfsd) override
STDMETHOD() SetFlags(DWORD dwFlags, DWORD dwFlagMask) override
STDMETHOD() Navigate(BSTR URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers) override
LRESULT OnSettingsChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() _SendChildren(HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHOD() Navigate2(VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers) override
STDMETHOD() CreateViewWindow(IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd) override
STDMETHOD() _PauseOrResumeView(BOOL fPaused) override
STDMETHOD_(LPBASEBROWSERDATA, PutBaseBrowserData)(void) override
STDMETHOD() Offline(int iCmd) override
STDMETHOD() NotifyRedirect(IShellView *psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) override
STDMETHOD() put_Silent(VARIANT_BOOL bSilent) override
STDMETHOD() IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) override
STDMETHOD() get_Parent(IDispatch **ppDisp) override
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() get_ReadyState(READYSTATE *plReadyState) override
STDMETHOD() CreateBrowserPropSheetExt(REFIID riid, void **ppv) override
LRESULT RelayCommands(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
SBFOLDERSETTINGS m_deffoldersettings
STDMETHOD() GetNavigateState(BNSTATE *pbnstate) override
STDMETHOD() InitializeDownloadManager() override
HRESULT BuildExplorerBandMenu()
STDMETHOD() ReleaseShellView() override
CComPtr< IShellFolder > fCurrentShellFolder
STDMETHOD() get_FullScreen(VARIANT_BOOL *pbFullScreen) override
STDMETHOD() GetPidl(LPITEMIDLIST *ppidl) override
HRESULT FireNavigateComplete(const wchar_t *newDirectory)
virtual WNDPROC GetWindowProc() override
IStream * fHistoryStream
HRESULT IsInternetToolbarBandShown(UINT ITId)
HRESULT GetMenuBand(REFIID riid, void **shellMenu)
IOleObject * fHistoryObject
STDMETHOD() ClientToWindow(int *pcx, int *pcy) override
STDMETHOD() SetTitle(IShellView *psv, LPCWSTR pszName) override
LRESULT OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() Refresh2(VARIANT *Level) override
static const int BIVerticalBaseBar
LRESULT OnGetSettingsPtr(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override
STDMETHOD() GetTitle(IShellView *psv, LPWSTR pszName, DWORD cchName) override
STDMETHOD_(LPTOOLBARITEM, _GetToolbarItem)(int itb) override
LRESULT OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnToggleAddressBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnToggleLinksBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnAppCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
HWND GetTopLevelBrowserWindow()
STDMETHOD_(UINT, _get_itbLastFocus)() override
STDMETHOD() _SaveToolbars(IStream *pstm) override
LRESULT OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
HRESULT OpenNewBrowserWindow(LPCITEMIDLIST pidl, UINT SbspFlags)
STDMETHOD() RemoveMenusSB(HMENU hmenuShared) override
STDMETHOD() InitializeTransitionSite() override
HRESULT OnSearch()
STDMETHOD() Stop() override
ShellSettings m_settings
STDMETHOD() put_StatusText(BSTR StatusText) override
STDMETHOD() get_Busy(VARIANT_BOOL *pBool) override
STDMETHOD() IEParseDisplayName(UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST *ppidlOut) override
STDMETHOD() OnHttpEquiv(IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut) override
STDMETHOD() Refresh() override
HRESULT CreateRelativeBrowsePIDL(LPCITEMIDLIST relative, UINT SbspFlags, LPITEMIDLIST *ppidl)
STDMETHOD() QueryStatusWB(OLECMDID cmdID, OLECMDF *pcmdf) override
STDMETHOD() put_Left(long Left) override
STDMETHOD() ShowControlWindow(UINT id, BOOL fShow) override
STDMETHOD() GetPalette(HPALETTE *hpal) override
STDMETHOD() UpdateBackForwardState() override
UINT WPARAM wParam
LRESULT OnInitMenuPopup(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
STDMETHOD() OnFrameWindowActivateBS(BOOL fActive) override
STDMETHOD() LoadHistoryPosition(LPWSTR pszUrlLocation, DWORD dwPosition) override
STDMETHOD() PutProperty(BSTR Property, VARIANT vtValue) override
STDMETHOD() EnableModelessSB(BOOL fEnable) override
STDMETHOD() GetOleObject(IOleObject **ppobjv) override
LRESULT OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
void RefreshCabinetState()
CComPtr< IShellView > fCurrentShellView
LRESULT OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
void UpdateWindowTitle()
HRESULT NavigateToParent()
STDMETHOD() get_ToolBar(int *Value) override
STDMETHOD() GetPropertyBag(long flags, REFIID riid, void **ppvObject) override
void UpdateViewMenu(HMENU theMenu)
LRESULT OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() get_Container(IDispatch **ppDisp) override
STDMETHOD() GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override
STDMETHOD() OnViewWindowActive(IShellView *ppshv) override
STDMETHOD() _GetViewBorderRect(RECT *prc) override
STDMETHOD() SaveHistory(IStream *pStream) override
STDMETHOD() get_MenuBar(VARIANT_BOOL *Value) override
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() GetControlWindow(UINT id, HWND *lphwnd) override
void UpdateGotoMenu(HMENU theMenu)
STDMETHOD() OnCreate(struct tagCREATESTRUCTW *pcs) override
STDMETHOD() _GetEffectiveClientArea(LPRECT lprectBorder, HMONITOR hmon) override
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
STDMETHOD() put_Width(long Width) override
HRESULT GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
BYTE m_NonFullscreenState
STDMETHOD() SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override
STDMETHOD() get_Left(long *pl) override
STDMETHOD() v_ShowHideChildWindows(BOOL fChildOnly) override
STDMETHOD() get_LocationName(BSTR *LocationName) override
STDMETHOD() get_Visible(VARIANT_BOOL *pBool) override
STDMETHOD() DisplayParseError(HRESULT hres, LPCWSTR pwszPath) override
LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() OnSize(WPARAM wParam) override
STDMETHOD() get_TheaterMode(VARIANT_BOOL *pbRegister) override
LRESULT OnDisconnectNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() RequestBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw) override
STDMETHOD() NavigateToPidl(LPCITEMIDLIST pidl, DWORD grfHLNF) override
STDMETHOD() DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() SetHistoryObject(IOleObject *pole, BOOL fIsLocalAnchor) override
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
STDMETHOD() DragLeave() override
STDMETHOD() DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() _TryShell2Rename(IShellView *psv, LPCITEMIDLIST pidlNew) override
STDMETHOD_(UINT, _FindTBar)(IUnknown *punkSrc) override
LRESULT OnCabinetStateChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CComPtr< ITravelLog > fTravelLog
STDMETHOD() get_FullName(BSTR *FullName) override
STDMETHOD_(LRESULT, OnNotify)(struct tagNMHDR *pnm) override
STDMETHOD() RegisterWindow(BOOL fForceRegister, int swc) override
LRESULT OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() get_RegisterAsBrowser(VARIANT_BOOL *pbRegister) override
STDMETHOD() GetViewRect(RECT *prc) override
HRESULT UpdateForwardBackState()
STDMETHOD() _SwitchActivationNow() override
STDMETHOD() _NavigateToPidl(LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags) override
HRESULT ApplyBrowserDefaultFolderSettings(IShellView *pSV)
STDMETHOD() SetStatusTextSB(LPCOLESTR pszStatusText) override
STDMETHOD() ContextSensitiveHelp(BOOL fEnterMode) override
STDMETHOD() get_Width(long *pl) override
HRESULT DoFolderOptions()
STDMETHOD() OnSetFocus() override
STDMETHOD() GoBack() override
LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() ShowBrowserBar(VARIANT *pvaClsid, VARIANT *pvarShow, VARIANT *pvarSize) override
LPITEMIDLIST fCurrentDirectoryPIDL
HRESULT ShowBand(const CLSID &classID, bool vertical)
STDMETHOD() GetTypeInfoCount(UINT *pctinfo) override
STDMETHOD() get_Silent(VARIANT_BOOL *pbSilent) override
STDMETHOD() get_RegisterAsDropTarget(VARIANT_BOOL *pbRegister) override
STDMETHOD() GetBorderDW(IUnknown *punkObj, LPRECT prcBorder) override
STDMETHOD() put_Visible(VARIANT_BOOL Value) override
STDMETHOD() Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
STDMETHOD() _GetBorderDWHelper(IUnknown *punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) override
STDMETHOD() get_StatusBar(VARIANT_BOOL *pBool) override
STDMETHOD() AllowViewResize(BOOL f) override
STDMETHOD() GetTravelLog(ITravelLog **pptl) override
STDMETHOD() _LoadToolbars(IStream *pstm) override
STDMETHOD() _UpdateViewRectSize() override
STDMETHOD() put_RegisterAsDropTarget(VARIANT_BOOL bRegister) override
STDMETHOD() _OnFocusChange(UINT itb) override
STDMETHOD() put_Height(long Height) override
LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() _DisableModeless() override
HRESULT FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
STDMETHOD() SetNavigateState(BNSTATE bnstate) override
static const int BIHorizontalBaseBar
STDMETHOD() get_LocationURL(BSTR *LocationURL) override
STDMETHOD() get_Application(IDispatch **ppDisp) override
STDMETHOD() _CancelPendingView() override
STDMETHOD() get_TopLevelContainer(VARIANT_BOOL *pBool) override
barInfo fClientBars[3]
STDMETHOD() FindWindowByIndex(DWORD dwID, IUnknown **ppunk) override
STDMETHOD() GetViewStateStream(DWORD grfMode, IStream **ppStrm) override
STDMETHOD() SetTopBrowser() override
STDMETHOD() GoHome() override
STDMETHOD_(DWORD, GetBrowserIndex)() override
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText) override
STDMETHOD() Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override
STDMETHOD() QueryActiveShellView(IShellView **ppshv) override
STDMETHOD() GetProperty(BSTR Property, VARIANT *pvtValue) override
STDMETHOD() put_RegisterAsBrowser(VARIANT_BOOL bRegister) override
STDMETHOD() GetClassID(CLSID *pClassID) override
STDMETHOD() put_Top(long Top) override
STDMETHOD() v_MayGetNextToolbarFocus(LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd) override
LRESULT OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() get_Resizable(VARIANT_BOOL *Value) override
STDMETHOD() _MaySaveChanges() override
HRESULT BuildExplorerBandCategory(HMENU hBandsMenu, CATID category, DWORD dwPos, UINT *nbFound)
STDMETHOD() _Initialize(HWND hwnd, IUnknown *pauto) override
STDMETHOD() get_Type(BSTR *Type) override
STDMETHOD() get_StatusText(BSTR *StatusText) override
LRESULT OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() OnDestroy() override
STDMETHOD() Quit() override
STDMETHOD() get_Name(BSTR *Name) override
STDMETHOD() GetViewWindow(HWND *phwndView) override
STDMETHOD() put_ToolBar(int Value) override
STDMETHOD() GetWindow(HWND *lphwnd) override
HRESULT Initialize()
HRESULT FireCommandStateChangeAll()
STDMETHOD() put_Resizable(VARIANT_BOOL Value) override
STDMETHOD() get_AddressBar(VARIANT_BOOL *Value) override
STDMETHOD() SetBorderSpaceDW(IUnknown *punkObj, LPCBORDERWIDTHS pbw) override
STDMETHOD() put_AddressBar(VARIANT_BOOL Value) override
LRESULT OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() GetSetCodePage(VARIANT *pvarIn, VARIANT *pvarOut) override
STDMETHOD() put_FullScreen(VARIANT_BOOL bFullScreen) override
STDMETHOD() GoForward() override
IBindCtx * fHistoryBindContext
STDMETHOD() put_MenuBar(VARIANT_BOOL Value) override
STDMETHOD() _CancelPendingNavigationAsync(void) override
STDMETHOD() CacheOLEServer(IOleObject *pole) override
STDMETHOD() SetAsDefFolderSettings() override
STDMETHOD() SetAcceleratorMenu(HACCEL hacc) override
STDMETHOD() TranslateAcceleratorSB(MSG *pmsg, WORD wID) override
STDMETHOD() get_Offline(VARIANT_BOOL *pbOffline) override
STDMETHOD() IsControlWindowShown(UINT id, BOOL *pfShown) override
STDMETHOD() GetPositionCookie(DWORD *pdwPositioncookie) override
STDMETHOD() InitializeTravelLog(ITravelLog *ptl, DWORD dw) override
void SaveITBarLayout()
LRESULT OnDisplayChangeDelayed(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CToolbarProxy fToolbarProxy
STDMETHOD() _UIActivateView(UINT uState) override
STDMETHOD() _put_itbLastFocus(UINT itbLastFocus) override
STDMETHOD() SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override
STDMETHOD() GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override
STDMETHOD() GetBaseBrowserData(LPCBASEBROWSERDATA *pbbd) override
STDMETHOD() _ExecChildren(IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut) override
STDMETHOD() SetActivateState(UINT u) override
STDMETHOD() get_Path(BSTR *Path) override
BOOL IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
STDMETHOD() get_HWND(SHANDLE_PTR *pHWND) override
STDMETHOD() UpdateSecureLockIcon(int eSecureLock) override
STDMETHOD() SetPositionCookie(DWORD dwPositioncookie) override
HRESULT FireEvent_VBOOL(DISPID dispIdMember, VARIANT_BOOL Param1)
STDMETHOD() GoSearch() override
LRESULT OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() GetHistoryObject(IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) override
STDMETHOD() put_Offline(VARIANT_BOOL bOffline) override
HRESULT FireCommandStateChange(bool newState, int commandID)
STDMETHOD() GetParentSite(IOleInPlaceSite **ppipsite) override
STDMETHOD() GetWindowData(IStream *pStream, LPWINDOWDATA pWinData) override
LRESULT OnForwardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
CComPtr< IExplorerToolbar > fExplorerToolbar
void Initialize(HWND parent, IUnknown *explorerToolbar)
LRESULT OnAddBitmap(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
VOID WINAPI GetEffectiveClientRect(HWND hwnd, LPRECT lpRect, const INT *lpInfo)
Definition: commctrl.c:629
#define NO_ERROR
Definition: dderror.h:5
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
LPWSTR Name
Definition: desk.c:124
HRESULT WINAPI SHOpenNewFrame(LPITEMIDLIST pidl, IUnknown *paramC, long param10, DWORD dwFlags)
Definition: desktopipc.cpp:591
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT uFlags
Definition: api.c:59
#define IDM_VIEW_TOOLBARS
Definition: resource.h:30
#define IDM_GOTO_TRAVEL_SEP
Definition: resource.h:87
#define IDM_TOOLS_DISCONNECTNETWORKDRIVE
Definition: resource.h:55
#define IDM_TOOLBARS_LOCKTOOLBARS
Definition: resource.h:34
#define IDM_EXPLORERBAR_FOLDERS
Definition: resource.h:44
#define IDM_TOOLS_FOLDEROPTIONS
Definition: resource.h:57
#define IDM_EXPLORERBAND_BEGINCUSTOM
Definition: resource.h:82
#define IDM_GOTO_UPONELEVEL
Definition: resource.h:48
#define IDM_TOOLBARS_TEXTLABELS
Definition: resource.h:36
#define IDM_VIEW_REFRESH
Definition: resource.h:50
#define IDM_TOOLBARS_STANDARDBUTTONS
Definition: resource.h:31
#define IDM_EXPLORERBAR_MEDIA
Definition: resource.h:42
#define IDM_EXPLORERBAR_FAVORITES
Definition: resource.h:41
#define IDM_GOTO_TRAVEL_FIRST
Definition: resource.h:85
#define IDM_NOTIFYITBARDIRTY
Definition: resource.h:79
#define IDM_GOTO_FORWARD
Definition: resource.h:47
#define IDM_EXPLORERBAR_HISTORY
Definition: resource.h:43
#define IDM_TOOLS_MAPNETWORKDRIVE
Definition: resource.h:54
#define IDM_CABINET_CONTEXTMENU
Definition: resource.h:91
#define IDM_FILE_CLOSE
Definition: resource.h:24
#define IDM_VIEW_EXPLORERBAR
Definition: resource.h:39
#define IDM_GOTO_TRAVEL_LAST
Definition: resource.h:86
#define IDM_GOTO_HOMEPAGE
Definition: resource.h:49
#define IDM_TOOLBARS_GOBUTTON
Definition: resource.h:37
#define IDM_FAVORITES_EMPTY
Definition: resource.h:53
#define IDM_TOOLBARS_CUSTOMIZE
Definition: resource.h:35
#define IDM_EXPLORERBAND_ENDCUSTOM
Definition: resource.h:83
#define IDS_FOLDER_OPTIONS
Definition: resource.h:135
#define IDM_TOOLS_SYNCHRONIZE
Definition: resource.h:56
#define IDM_GOTO_TRAVEL_LASTTARGET
Definition: resource.h:89
#define IDM_FAVORITES_ORGANIZEFAVORITES
Definition: resource.h:52
#define IDM_GOTO_BACK
Definition: resource.h:46
#define IDM_GOTO_TRAVEL_FIRSTTARGET
Definition: resource.h:88
#define FCIDM_BROWSER_TOGGLEFULLSCREEN
Definition: resource.h:68
#define IDM_EXPLORERBAR_SEARCH
Definition: resource.h:40
#define IDM_BACKSPACE
Definition: resource.h:26
#define FCIDM_BROWSER_STOP
Definition: resource.h:67
#define IDM_EXPLORERBAR_SEPARATOR
Definition: resource.h:45
#define IDM_VIEW_STATUSBAR
Definition: resource.h:38
#define IDM_CABINET_MAINMENU
Definition: resource.h:92
#define IDM_TOOLBARS_ADDRESSBAR
Definition: resource.h:32
#define IDM_FAVORITES_ADDTOFAVORITES
Definition: resource.h:51
#define IDM_TOOLBARS_LINKSBAR
Definition: resource.h:33
CabinetStateSettings gCabinetState
Definition: settings.cpp:10
#define BWM_GETSETTINGSPTR
Definition: settings.h:11
#define BWM_SETTINGCHANGE
Definition: settings.h:10
HRESULT CreateProgressDialog(REFIID riid, void **ppv)
HRESULT GetFavsLocation(HWND hWnd, LPITEMIDLIST *pPidl)
static const long BTP_ACTIVATE_NOFOCUS
BOOL createNewStuff
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
BOOL CALLBACK AddFolderOptionsPage(HPROPSHEETPAGE thePage, LPARAM lParam)
void DeleteMenuItems(HMENU theMenu, unsigned int firstIDToDelete, unsigned int lastIDToDelete)
HRESULT WINAPI SHBindToFolder(LPCITEMIDLIST path, IShellFolder **newFolder)
static const long BTP_UPDATE_NEXT_HISTORY
static const long BTP_UPDATE_CUR_HISTORY
static BOOL _ILIsNetworkPlace(LPCITEMIDLIST pidl)
static const long BTP_DONT_UPDATE_HISTORY
static const TCHAR szCabinetWndClass[]
static const unsigned int folderOptionsPageCountMax
HRESULT IEGetNameAndFlagsEx(LPITEMIDLIST pidl, SHGDNF uFlags, long param10, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
static void GetWindowMonitorInfo(HWND hWnd, MONITORINFO &mi)
HRESULT WINAPI SHBindToFolderIDListParent(IShellFolder *unused, LPCITEMIDLIST pidl, const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
bool IUnknownIsEqual(IUnknown *int1, IUnknown *int2)
HRESULT IUnknown_ShowDW(IUnknown *punk, BOOL fShow)
#define BWM_ONDISPLAYCHANGEDELAYED
HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv)
HICON WINAPI ImageList_GetIcon(HIMAGELIST himl, INT i, UINT fStyle)
Definition: imagelist.c:1981
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
short VARIANT_BOOL
Definition: compat.h:2290
@ VT_BSTR
Definition: compat.h:2303
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_BYREF
Definition: compat.h:2342
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
@ VT_BOOL
Definition: compat.h:2306
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:65
static void cleanup(void)
Definition: main.c:1335
HRESULT WINAPI OleFlushClipboard(void)
Definition: clipboard.c:2293
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
EXTERN_C HRESULT WINAPI AddUrlToFavorites(_In_ HWND hwnd, _In_ LPCWSTR pszUrlW, _In_opt_ LPCWSTR pszTitleW, _In_ BOOL fDisplayUI)
Definition: utility.cpp:192
HRESULT SHILClone(_In_opt_ LPCITEMIDLIST pidl, _Outptr_ LPITEMIDLIST *ppidl)
Definition: utils.cpp:133
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3384
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4300
LONG WINAPI SHSetWindowBits(HWND hwnd, INT offset, UINT mask, UINT flags)
Definition: ordinal.c:1130
HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:1997
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1048
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1800
BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: ordinal.c:3472
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1781
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1087
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3060
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3004
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
void WINAPI SHPropagateMessage(HWND hWnd, UINT uiMsgId, WPARAM wParam, LPARAM lParam, BOOL bSend)
Definition: ordinal.c:1719
HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name, DWORD flags, REFIID riid, void **ppv)
Definition: ordinal.c:5243
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath)
Definition: path.c:2272
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
Definition: string.c:1631
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:71
r parent
Definition: btrfs.c:3010
LPVOID WINAPI DSA_GetItemPtr(HDSA hdsa, INT nIndex)
Definition: dsa.c:162
BOOL WINAPI DSA_DeleteAllItems(HDSA hdsa)
Definition: dsa.c:367
BOOL WINAPI DSA_Destroy(HDSA hdsa)
Definition: dsa.c:103
HDSA WINAPI DSA_Create(INT nSize, INT nGrow)
Definition: dsa.c:71
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
void bar()
Definition: ehthrow.cxx:142
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FT_Vector * vec
Definition: ftbbox.c:470
FxObject * pParent
Definition: fxdpcapi.cpp:86
GLint level
Definition: gl.h:1546
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLfloat f
Definition: glext.h:7540
GLenum const GLfloat * params
Definition: glext.h:5645
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLuint64EXT * result
Definition: glext.h:11304
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLuint id
Definition: glext.h:5910
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define fs
Definition: i386-dis.c:444
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:689
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40
UINT _FindTBar([in] IUnknown *punkSrc)
LRESULT ForwardViewMsg([in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
LRESULT WndProcBS([in] HWND hwnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
UINT _get_itbLastFocus()
LPTOOLBARITEM _GetToolbarItem([in] int itb)
LPBASEBROWSERDATA PutBaseBrowserData()
LRESULT OnNotify([in, out] struct tagNMHDR *pnm)
LRESULT OnCommand([in] WPARAM wParam, [in] LPARAM lParam)
IStream * v_GetViewStream([in] PCIDLIST_ABSOLUTE pidl, [in] DWORD grfMode, [in] LPCWSTR pwszName)
DWORD GetBrowserIndex()
struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
struct IOleCommandTarget::_tagOLECMD OLECMD
HRESULT Write([in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten)
HRESULT Read([out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead)
HRESULT CreateViewObject([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS lpfs)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define ITBARSTREAM_EXPLORER
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define LOBYTE(W)
Definition: jmemdos.c:487
#define TEXT(s)
Definition: k32.h:26
#define f
Definition: ke_i.h:83
#define GUID_NULL
Definition: ks.h:106
_In_opt_ PVOID _Out_ BOOLEAN * Stop
Definition: ldrtypes.h:258
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Definition: atlcom.h:609
#define BEGIN_CONNECTION_POINT_MAP(x)
Definition: atlcom.h:1483
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define CONNECTION_POINT_ENTRY(iid)
Definition: atlcom.h:1494
#define END_CONNECTION_POINT_MAP()
Definition: atlcom.h:1488
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
#define GCCU(x)
Definition: atlwin.h:27
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1953
#define Unused(x)
Definition: atlwin.h:28
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define MESSAGE_RANGE_HANDLER(msgFirst, msgLast, func)
Definition: atlwin.h:1935
#define COMMAND_RANGE_HANDLER(idFirst, idLast, func)
Definition: atlwin.h:1971
static HANDLE hmon
Definition: localmon.c:41
LPCWSTR szPath
Definition: env.c:37
static HICON
Definition: imagelist.c:80
static BYTE int1[]
Definition: cert.c:3154
static BYTE int2[]
Definition: cert.c:3155
HRESULT hres
Definition: protocol.c:465
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static VARIANTARG static DISPID
Definition: ordinal.c:52
static MONITORINFO mi
Definition: win.c:7338
WORD unused[29]
Definition: crypt.c:1155
REFCLSID clsid
Definition: msctf.c:82
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
HMONITOR WINAPI MonitorFromWindow(HWND, DWORD)
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define L(x)
Definition: ntvdm.h:50
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define STGM_WRITE
Definition: objbase.h:918
#define STGM_READ
Definition: objbase.h:917
#define V_BOOL(A)
Definition: oleauto.h:224
#define V_ARRAY(A)
Definition: oleauto.h:222
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_VARIANTREF(A)
Definition: oleauto.h:283
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
#define V_INTREF(A)
Definition: oleauto.h:252
#define V_DISPATCH(A)
Definition: oleauto.h:239
OLECMDF cmdf
Definition: olecmd.c:716
const GUID IID_IConnectionPointContainer
const GUID IID_IOleWindow
const GUID IID_IDispatch
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_CAPTION
Definition: pedump.c:624
#define WS_MAXIMIZE
Definition: pedump.c:623
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_DLGFRAME
Definition: pedump.c:626
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_THICKFRAME
Definition: pedump.c:630
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1497
const GUID IID_IPersist
Definition: proxy.cpp:14
#define PROPSHEETHEADER
Definition: prsht.h:392
#define PropertySheet
Definition: prsht.h:400
static char title[]
Definition: ps.c:92
#define SBARS_TOOLTIPS
Definition: commctrl.h:1929
#define DSA_AppendItem(hdsa, pitem)
Definition: commctrl.h:4832
#define STATUSCLASSNAMEW
Definition: commctrl.h:1941
#define DSA_GetItemCount(hdsa)
Definition: commctrl.h:4831
#define SB_SETTEXTW
Definition: commctrl.h:1947
#define SBARS_SIZEGRIP
Definition: commctrl.h:1928
#define TB_ADDBITMAP
Definition: commctrl.h:1056
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
void SaveHistory(void)
Definition: readln.c:642
void LoadHistory(void)
Definition: readln.c:606
DWORD WINAPI GetVersion()
Definition: redirtest.c:5
DWORD LCID
Definition: nls.h:13
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
#define memset(x, y, z)
Definition: compat.h:39
enum tagBNSTATE BNSTATE
#define ShellAbout
Definition: shellapi.h:732
#define ILGetSize
Definition: shellclasses.h:638
HRESULT hr
Definition: shlfolder.c:183
#define SID_SShellBrowser
Definition: shlguid.h:128
#define CGID_InternetButtons
Definition: shlguid.h:248
#define SID_IBandSite
#define CGID_IDeskBand
#define CGID_IExplorerToolbar
#define SID_IExplorerToolbar
#define CGID_MenuBand
#define SID_ITargetFrame2
#define SID_IWebBrowserApp
UINT WINAPI Shell_MergeMenus(HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags)
Definition: shlmenu.c:856
#define FCIDM_BROWSERLAST
Definition: shlobj.h:631
#define CSIDL_FAVORITES
Definition: shlobj.h:2187
#define TLMENUF_BACKANDFORTH
Definition: shlobj.h:2752
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2211
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2537
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:647
#define FCIDM_MENU_HELP
Definition: shlobj.h:644
#define FCIDM_MENU_FILE
Definition: shlobj.h:638
#define TLOG_FORE
Definition: shlobj.h:2746
#define FCIDM_MENU_TOOLS
Definition: shlobj.h:642
#define TLMENUF_CHECKCURRENT
Definition: shlobj.h:2749
#define FCIDM_MENU_EXPLORE
Definition: shlobj.h:646
#define FCIDM_MENU_VIEW
Definition: shlobj.h:640
#define TLOG_BACK
Definition: shlobj.h:2745
#define FCIDM_MENU_EDIT
Definition: shlobj.h:639
@ REST_NOSAVESET
Definition: shlobj.h:1653
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:622
#define SBCMDID_EXPLORERBARFOLDERS
Definition: shlobj_undoc.h:53
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:78
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:79
#define SHGetValue
Definition: shlwapi.h:79
@ FWF_DESKTOP
Definition: shobjidl.idl:647
@ FVM_ICON
Definition: shobjidl.idl:679
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define GetWindowData(hwnd, type)
Definition: sndvol32.c:39
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
BOOL fNewWindowMode
Definition: shlobj.h:2400
BOOL fSaveLocalView
Definition: shlobj.h:2396
BOOL fFullPathTitle
Definition: shlobj.h:2395
FOLDERSETTINGS FolderSettings
void Save()
Definition: settings.cpp:12
void Reset()
Definition: settings.h:21
void Load()
Definition: settings.cpp:24
BOOL fStatusBarVisible
Definition: settings.h:17
Definition: dsa.c:45
Definition: scsiwmi.h:51
DWORD dwWindowID
Definition: tlogstg.idl:24
LPWSTR lpszTitle
Definition: tlogstg.idl:29
LPWSTR lpszUrlLocation
Definition: tlogstg.idl:28
UINT uiCP
Definition: tlogstg.idl:25
PIDLIST_ABSOLUTE pidl
Definition: tlogstg.idl:26
LPWSTR lpszUrl
Definition: tlogstg.idl:27
Definition: cache.c:49
Definition: ftp_var.h:139
Definition: ffs.h:70
CLSID persistClass
Definition: shlobj_undoc.h:46
long browserIndex
Definition: shlobj_undoc.h:45
ULONG pidlSize
Definition: shlobj_undoc.h:47
RECT rcMonitor
Definition: winuser.h:3796
DWORD cbSize
Definition: winuser.h:3795
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define ITID_LINKSBANDSHOWN
Definition: undocshell.h:895
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:893
#define ITID_TEXTLABELS
Definition: undocshell.h:892
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:896
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:898
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:894
#define CWM_STATECHANGE
Definition: undocshell.h:241
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:899
#define ITBBID_MENUBAND
Definition: undocshell.h:884
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
#define _T(x)
Definition: vfdio.h:22
int ret
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define DISPID_ONSTATUSBAR
Definition: webchild.h:59
#define DISPID_ONTOOLBAR
Definition: webchild.h:57
#define DISPID_ONADDRESSBAR
Definition: webchild.h:63
#define DISPID_ONFULLSCREEN
Definition: webchild.h:60
#define DISPID_ONVISIBLE
Definition: webchild.h:56
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_ONMENUBAR
Definition: webchild.h:58
#define DISPID_COMMANDSTATECHANGE
Definition: webchild.h:40
#define ZeroMemory
Definition: winbase.h:1743
#define GetModuleHandle
Definition: winbase.h:3858
#define OutputDebugString
Definition: winbase.h:3921
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2798
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ POINTL * pptl
Definition: winddi.h:3741
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HICON HCURSOR
Definition: windef.h:299
#define WINAPI
Definition: msvc.h:6
#define SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:542
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define E_UNEXPECTED
Definition: winerror.h:2456
#define E_POINTER
Definition: winerror.h:2365
#define RESOURCETYPE_DISK
Definition: winnetwk.h:64
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define SW_SHOWMAXIMIZED
Definition: winuser.h:784
#define GetMonitorInfo
Definition: winuser.h:5811
#define SW_HIDE
Definition: winuser.h:779
#define WM_CLOSE
Definition: winuser.h:1632
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define SWP_FRAMECHANGED
Definition: winuser.h:1251
#define MIIM_ID
Definition: winuser.h:733
#define COLOR_WINDOW
Definition: winuser.h:929
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
#define HWND_TOPMOST
Definition: winuser.h:1219
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1619
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WM_SIZE
Definition: winuser.h:1622
#define SWP_NOMOVE
Definition: winuser.h:1255
#define WM_COMMAND
Definition: winuser.h:1751
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define IDC_ARROW
Definition: winuser.h:695
#define WM_APPCOMMAND
Definition: winuser.h:1893
#define VK_CONTROL
Definition: winuser.h:2214
#define InsertMenuItem
Definition: winuser.h:5824
#define SW_SHOWNOACTIVATE
Definition: winuser.h:785
#define WM_SETFOCUS
Definition: winuser.h:1624
#define SetMenuItemInfo
Definition: winuser.h:5870
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SWP_NOSIZE
Definition: winuser.h:1256
#define RDW_UPDATENOW
Definition: winuser.h:1231
#define SIZE_MINIMIZED
Definition: winuser.h:2517
BOOL WINAPI IsMenu(_In_ HMENU)
#define CS_DBLCLKS
Definition: winuser.h:659
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1637
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define WM_DRAWITEM
Definition: winuser.h:1656
#define SM_CXFULLSCREEN
Definition: winuser.h:988
#define HWND_DESKTOP
Definition: winuser.h:1220
#define WM_SETTINGCHANGE
Definition: winuser.h:1640
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define HWND_TOP
Definition: winuser.h:1218
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
BOOL WINAPI LockWindowUpdate(_In_opt_ HWND)
#define MIIM_SUBMENU
Definition: winuser.h:734
#define WM_INITMENUPOPUP
Definition: winuser.h:1757
#define MF_SEPARATOR
Definition: winuser.h:137
#define SWP_NOCOPYBITS
Definition: winuser.h:1254
#define RDW_ALLCHILDREN
Definition: winuser.h:1232
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define MF_BYPOSITION
Definition: winuser.h:203
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define LoadIcon
Definition: winuser.h:5833
#define RDW_FRAME
Definition: winuser.h:1223
#define SendMessage
Definition: winuser.h:5863
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define LoadCursor
Definition: winuser.h:5832
#define SM_CYFULLSCREEN
Definition: winuser.h:989
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5739
#define LoadMenu
Definition: winuser.h:5837
#define WM_MEASUREITEM
Definition: winuser.h:1657
#define PostMessage
Definition: winuser.h:5852
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define WM_NCDESTROY
Definition: winuser.h:1695
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_USER
Definition: winuser.h:1906
#define IDC_WAIT
Definition: winuser.h:697
#define SW_SHOW
Definition: winuser.h:786
#define WM_DESTROY
Definition: winuser.h:1620
#define SetWindowText
Definition: winuser.h:5877
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2917
#define SWP_NOZORDER
Definition: winuser.h:1258
#define SystemParametersInfo
Definition: winuser.h:5878
#define GWL_STYLE
Definition: winuser.h:863
#define InsertMenu
Definition: winuser.h:5823
#define GetMenuItemInfo
Definition: winuser.h:5808
#define WM_MENUSELECT
Definition: winuser.h:1758
int WINAPI GetSystemMetrics(_In_ int)
#define MIIM_TYPE
Definition: winuser.h:736
#define RDW_INVALIDATE
Definition: winuser.h:1225
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GWL_EXSTYLE
Definition: winuser.h:862
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2390
#define WM_SETREDRAW
Definition: winuser.h:1627
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56
DWORD WINAPI WNetConnectionDialog(HWND hwnd, DWORD dwType)
Definition: wnet.c:2913
DWORD WINAPI WNetDisconnectDialog(HWND hwnd, DWORD dwType)
Definition: wnet.c:2954
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_In_ PSTRING FullName
Definition: rtlfuncs.h:1665
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
char TCHAR
Definition: xmlstorage.h:189
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193