ReactOS 0.4.16-dev-1489-g8fbbb41
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;
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);
657 LRESULT OnToggleExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
664
666 {
667 static ATL::CWndClassInfo wc =
668 {
670 0, 0, NULL, LoadIcon(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET)),
672 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
673 };
674 return wc;
675 }
676
688 MESSAGE_HANDLER(WM_DISPLAYCHANGE, OnDisplayChange)
723
725 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2)
726 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents)
728
730 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
731 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
733 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
734 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
735 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
736 COM_INTERFACE_ENTRY_IID(IID_IProfferService, IProfferService)
737 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService, IShellBrowserService)
740 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser, IWebBrowser)
741 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp, IWebBrowserApp)
742 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2, IWebBrowser2)
743 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient, ITravelLogClient)
745 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory, IPersistHistory)
746 COM_INTERFACE_ENTRY_IID(IID_IBrowserService, IBrowserService)
747 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2, IBrowserService2)
749};
750
752
754{
755 m_BrowserSvcFlags = BSF_RESIZABLE | BSF_CANMAXIMIZE;
756 m_Destroyed = false;
768}
769
771{
772 if (menuDsa)
774}
775
777{
778 CComPtr<IPersistStreamInit> persistStreamInit;
779 HRESULT hResult;
780 CComPtr<IUnknown> clientBar;
781
783
784 menuDsa = DSA_Create(sizeof(MenuBandInfo), 5);
785 if (!menuDsa)
786 return E_OUTOFMEMORY;
787
788 // create window
790 if (m_hWnd == NULL)
791 return E_FAIL;
792
794 if (FAILED_UNEXPECTEDLY(hResult))
795 return hResult;
796
798
799 // create interfaces
800 hResult = clientBar->QueryInterface(IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
801 if (FAILED_UNEXPECTEDLY(hResult))
802 return hResult;
803
804 hResult = IUnknown_SetSite(clientBar, static_cast<IShellBrowser *>(this));
805 if (FAILED_UNEXPECTEDLY(hResult))
806 return hResult;
807
808 hResult = IUnknown_Exec(clientBar, CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
809 if (FAILED_UNEXPECTEDLY(hResult))
810 return hResult;
811
812 CComPtr<IStream> pITBarStream;
814 hResult = SUCCEEDED(hResult) ? persistStreamInit->Load(pITBarStream) : persistStreamInit->InitNew();
815 if (FAILED_UNEXPECTEDLY(hResult))
816 return hResult;
817
818 hResult = IUnknown_ShowDW(clientBar, TRUE);
819 if (FAILED_UNEXPECTEDLY(hResult))
820 return hResult;
821
822 fToolbarProxy.Initialize(m_hWnd, clientBar);
823
824 // create status bar
827 dwStatusStyle |= WS_VISIBLE;
829 0, 0, 500, 20, m_hWnd, (HMENU)IDC_STATUSBAR,
830 _AtlBaseModule.GetModuleInstance(), 0);
831
833 UpdateWindow();
834
835 return S_OK;
836}
837
839{
840 HRESULT hr;
841 if (pSV)
842 {
844 SBFOLDERSETTINGS &sbfs = m_deffoldersettings, defsbfs;
845 if (FAILED(pSV->GetCurrentInfo(&sbfs.FolderSettings)))
846 {
847 defsbfs.InitializeDefaults();
848 sbfs = defsbfs;
849 }
851 }
852 else
853 {
856 if (SUCCEEDED(hr))
858 }
859 return hr;
860}
861
863{
864 if ((Flags & (SBSP_SAMEBROWSER | SBSP_NEWBROWSER)) == SBSP_DEFBROWSER)
865 {
867 Flags |= SBSP_SAMEBROWSER; // Force if this is the first navigation or the folder tree is present
868 else
869 Flags |= (!!gCabinetState.fNewWindowMode) ^ (GetAsyncKeyState(VK_CONTROL) < 0) ? SBSP_NEWBROWSER : SBSP_SAMEBROWSER;
870 }
871 if (Flags & (SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
872 Flags = (Flags & ~SBSP_NEWBROWSER) | SBSP_SAMEBROWSER; // Force same browser for now
873 return Flags;
874}
875
877{
878 SaveITBarLayout(); // Do this now so the new window inherits the current layout
879 // TODO: www.geoffchappell.com/studies/windows/ie/shdocvw/interfaces/inotifyappstart.htm
880 DWORD flags = (SbspFlags & SBSP_EXPLOREMODE) ? SH_EXPLORER_CMDLINE_FLAG_E : 0;
881 if ((SbspFlags & (SBSP_OPENMODE | SBSP_EXPLOREMODE)) == SBSP_DEFMODE)
883 LPITEMIDLIST pidlDir;
884 HRESULT hr = SHILClone(pidl, &pidlDir);
885 if (FAILED(hr))
886 return hr;
887 // TODO: !SBSP_NOTRANSFERHIST means we are supposed to pass the history here somehow?
889}
890
892{
893 if (SbspFlags & SBSP_RELATIVE)
894 return SHILCombine(fCurrentDirectoryPIDL, relative, ppidl);
895
896 if (SbspFlags & SBSP_PARENT)
897 {
898 HRESULT hr = GetPidl(ppidl);
899 if (FAILED(hr))
900 return hr;
901 ILRemoveLastID(*ppidl);
902 return S_OK;
903 }
904 // TODO: SBSP_NAVIGATEBACK and SBSP_NAVIGATEFORWARD?
905 return E_UNEXPECTED;
906}
907
909{
910 CComPtr<IShellFolder> newFolder;
912 HRESULT hResult;
913 CLSID clsid;
914 BOOL HasIconViewType;
915
916 // called by shell view to browse to new folder
917 // also called by explorer band to navigate to new folder
918 hResult = SHBindToFolder(pidl, &newFolder);
919 if (FAILED_UNEXPECTEDLY(hResult))
920 return hResult;
921 // HACK & FIXME: Get view mode from shellbag when fully implemented.
922 IUnknown_GetClassID(newFolder, &clsid);
923 HasIconViewType = clsid == CLSID_MyComputer || clsid == CLSID_ControlPanel ||
924 clsid == CLSID_ShellDesktop;
925
926 if (HasIconViewType)
927 newFolderSettings.ViewMode = FVM_ICON;
928 hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
929 if (FAILED_UNEXPECTEDLY(hResult))
930 return hResult;
931 return S_OK;
932}
933
935{
936 LPCITEMIDLIST pidlnext;
937 WORD length;
938 BOOL ret;
939
940 ret = TRUE;
941 if (! _ILIsDesktop(pidl))
942 {
943 length = pidl->mkid.cb;
944 pidlnext =
945 reinterpret_cast<LPCITEMIDLIST>(
946 reinterpret_cast<const BYTE *>(pidl) + length);
947 if (pidlnext->mkid.cb != 0)
948 ret = FALSE;
949 }
950 return ret;
951}
952
954 const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
955{
957 LPITEMIDLIST pidlChild;
958 LPITEMIDLIST pidlParent;
959 HRESULT hResult;
960
961 hResult = E_FAIL;
962 if (ppv == NULL)
963 return E_POINTER;
964 *ppv = NULL;
965 if (ppidlLast != NULL)
966 *ppidlLast = NULL;
967 if (_ILIsPidlSimple(pidl))
968 {
969 if (ppidlLast != NULL)
970 *ppidlLast = ILClone(pidl);
971 hResult = SHGetDesktopFolder((IShellFolder **)ppv);
972 }
973 else
974 {
975 pidlChild = ILClone(ILFindLastID(pidl));
976 pidlParent = ILClone(pidl);
977 ILRemoveLastID(pidlParent);
978 hResult = SHGetDesktopFolder(&psf);
979 if (SUCCEEDED(hResult))
980 hResult = psf->BindToObject(pidlParent, NULL, *riid, ppv);
981 if (SUCCEEDED(hResult) && ppidlLast != NULL)
982 *ppidlLast = pidlChild;
983 else
984 ILFree(pidlChild);
985 ILFree(pidlParent);
986 }
987 return hResult;
988}
989
991 LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
992{
993 CComPtr<IShellFolder> parentFolder;
994 LPITEMIDLIST childPIDL = NULL;
995 STRRET L108;
996 HRESULT hResult;
997
998 hResult = SHBindToFolderIDListParent(NULL, pidl, &IID_PPV_ARG(IShellFolder, &parentFolder), &childPIDL);
999 if (FAILED(hResult))
1000 goto cleanup;
1001
1002 hResult = parentFolder->GetDisplayNameOf(childPIDL, uFlags, &L108);
1003 if (FAILED(hResult))
1004 goto cleanup;
1005
1006 StrRetToBufW(&L108, childPIDL, pszBuf, cchBuf);
1007 if (rgfInOut)
1008 {
1009 hResult = parentFolder->GetAttributesOf(1, const_cast<LPCITEMIDLIST *>(&childPIDL), rgfInOut);
1010 if (FAILED(hResult))
1011 goto cleanup;
1012 }
1013
1014 hResult = S_OK;
1015
1016cleanup:
1017 if (childPIDL)
1018 ILFree(childPIDL);
1019 return hResult;
1020}
1021
1022HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
1023{
1024 return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
1025}
1026
1028{
1029 // TODO: Also respect EBO_NOPERSISTVIEWSTATE?
1031 fCurrentShellView->SaveViewState();
1032}
1033
1035 LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
1036{
1037 CComPtr<IShellFolder> saveCurrentShellFolder;
1038 CComPtr<IShellView> saveCurrentShellView;
1039 CComPtr<IShellView> newShellView;
1040 CComPtr<ITravelLog> travelLog;
1041 HWND newShellViewWindow;
1042 BOOL windowUpdateIsLocked;
1043 RECT shellViewWindowBounds;
1044 HWND previousView;
1045 HCURSOR saveCursor;
1046 wchar_t newTitle[MAX_PATH];
1047 SHGDNF nameFlags;
1048 HRESULT hResult;
1049 //TODO: BOOL nohistory = m_BrowserSvcFlags & BSF_NAVNOHISTORY;
1050
1051 if (m_Destroyed)
1052 return S_FALSE;
1053
1054 if (newShellFolder == NULL)
1055 return E_INVALIDARG;
1056
1057 hResult = GetTravelLog(&travelLog);
1058 if (FAILED_UNEXPECTEDLY(hResult))
1059 return hResult;
1060
1061 if (FAILED_UNEXPECTEDLY(hResult = SHILClone(absolutePIDL, &absolutePIDL)))
1062 return hResult;
1063 CComHeapPtr<ITEMIDLIST> pidlAbsoluteClone(const_cast<LPITEMIDLIST>(absolutePIDL));
1064
1065 // update history
1067 {
1068 if (travelLog->CountEntries(static_cast<IDropTarget *>(this)) > 0)
1069 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1070 // what to do with error? Do we want to halt browse because state save failed?
1071 }
1072
1074 {
1075 SaveViewState();
1076 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
1077 }
1078
1079 // create view object
1080 hResult = newShellFolder->CreateViewObject(m_hWnd, IID_PPV_ARG(IShellView, &newShellView));
1081 if (FAILED_UNEXPECTEDLY(hResult))
1082 return hResult;
1083 previousView = fCurrentShellViewWindow;
1084
1085 // enter updating section
1086 saveCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
1087 windowUpdateIsLocked = LockWindowUpdate(TRUE);
1088 if (fCurrentShellView != NULL)
1090
1091 // set site
1092 hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
1093
1094 // update folder and view
1095 saveCurrentShellFolder = fCurrentShellFolder;
1096 saveCurrentShellView = fCurrentShellView;
1097 fCurrentShellFolder = newShellFolder;
1098 fCurrentShellView = newShellView;
1099
1100 // get boundary
1101 if (previousView != NULL)
1102 ::GetWindowRect(previousView, &shellViewWindowBounds);
1103 else
1104 ZeroMemory(&shellViewWindowBounds, sizeof(shellViewWindowBounds));
1105 ::MapWindowPoints(0, m_hWnd, reinterpret_cast<POINT *>(&shellViewWindowBounds), 2);
1106
1107 // update current pidl
1109 fCurrentDirectoryPIDL = pidlAbsoluteClone.Detach();
1110 /* CORE-19697: CAddressEditBox::OnWinEvent(CBN_SELCHANGE) causes CAddressEditBox to
1111 * call BrowseObject(pidlLastParsed). As part of our browsing we call FireNavigateComplete
1112 * and this in turn causes CAddressEditBox::Invoke to ILFree(pidlLastParsed)!
1113 * We then call SHBindToParent on absolutePIDL (which is really (the now invalid) pidlLastParsed) and we
1114 * end up accessing invalid memory! We therefore set absolutePIDL to be our cloned PIDL here.
1115 */
1116 absolutePIDL = fCurrentDirectoryPIDL;
1117
1118 // create view window
1119 hResult = newShellView->CreateViewWindow(saveCurrentShellView, folderSettings,
1120 this, &shellViewWindowBounds, &newShellViewWindow);
1121 if (FAILED_UNEXPECTEDLY(hResult) || newShellViewWindow == NULL)
1122 {
1123 fCurrentShellView = saveCurrentShellView;
1124 fCurrentShellFolder = saveCurrentShellFolder;
1126 if (windowUpdateIsLocked)
1128 SetCursor(saveCursor);
1129 return hResult;
1130 }
1131
1132 // update view window
1133 if (saveCurrentShellView != NULL)
1134 saveCurrentShellView->DestroyViewWindow();
1135 fCurrentShellViewWindow = newShellViewWindow;
1136
1137 if (previousView == NULL)
1138 {
1140 }
1141
1142 // no use
1143 saveCurrentShellView.Release();
1144 saveCurrentShellFolder.Release();
1145
1146 hResult = newShellView->UIActivate((flags & BTP_ACTIVATE_NOFOCUS) ? SVUIA_ACTIVATE_NOFOCUS : SVUIA_ACTIVATE_FOCUS);
1147
1148 // leave updating section
1149 if (windowUpdateIsLocked)
1151 SetCursor(saveCursor);
1152
1153 // update history
1155 {
1156 hResult = travelLog->AddEntry(static_cast<IDropTarget *>(this), FALSE);
1157 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1158 }
1159
1160 // completed
1161 nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
1162 hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
1163 sizeof(newTitle) / sizeof(wchar_t), NULL);
1164 if (SUCCEEDED(hResult))
1165 {
1166 FireNavigateComplete(newTitle);
1167 }
1168 else
1169 {
1170 FireNavigateComplete(L"ERROR");
1171 }
1172
1174
1175 LPCITEMIDLIST pidlChild;
1176 HIMAGELIST himlSmall, himlLarge;
1177
1179 hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
1180 if (SUCCEEDED(hResult))
1181 {
1182 INT indexOpen;
1183 SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
1184
1185 Shell_GetImageLists(&himlLarge, &himlSmall);
1186
1187 HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
1188 HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
1189
1190 /* Hack to make it possible to release the old icons */
1191 /* Something seems to go wrong with WM_SETICON */
1192 HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
1193 HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
1194
1195 SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
1196 SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
1197
1198 DestroyIcon(oldSmall);
1199 DestroyIcon(oldLarge);
1200 }
1201
1203 hResult = UpdateForwardBackState();
1204 hResult = UpdateUpState();
1205 return S_OK;
1206}
1207
1209{
1210 CComPtr<IBandSite> bandSite;
1211 CComPtr<IDeskBand> deskBand;
1212 HRESULT hResult;
1213
1214 if (!fClientBars[BIInternetToolbar].clientBar)
1215 return E_FAIL;
1216
1218 if (FAILED_UNEXPECTEDLY(hResult))
1219 return hResult;
1220
1221 hResult = bandSite->QueryBand(ITBBID_MENUBAND, &deskBand, NULL, NULL, 0);
1222 return FAILED(hResult) ? hResult : deskBand->QueryInterface(riid, shellMenu); // It is expected that this might fail during WM_DESTROY
1223}
1224
1225HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
1226{
1227 CComPtr<IUnknown> newBaseBar;
1228 CComPtr<IDeskBar> deskBar;
1229 CComPtr<IUnknown> newBaseBarSite;
1230 CComPtr<IDeskBarClient> deskBarClient;
1231 IUnknown **cache;
1232 HRESULT hResult;
1233
1234 if (vertical)
1236 else
1238 if (*cache == NULL)
1239 {
1240 hResult = CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBar), vertical);
1241 if (FAILED_UNEXPECTEDLY(hResult))
1242 return hResult;
1243 hResult = CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBarSite), vertical);
1244 if (FAILED_UNEXPECTEDLY(hResult))
1245 return hResult;
1246
1247 // we have to store our basebar into cache now
1248 *cache = newBaseBar;
1249 (*cache)->AddRef();
1250
1251 // tell the new base bar about the shell browser
1252 hResult = IUnknown_SetSite(newBaseBar, static_cast<IDropTarget *>(this));
1253 if (FAILED_UNEXPECTEDLY(hResult))
1254 return hResult;
1255
1256 // tell the new base bar about the new base bar site
1257 hResult = newBaseBar->QueryInterface(IID_PPV_ARG(IDeskBar, &deskBar));
1258 if (FAILED_UNEXPECTEDLY(hResult))
1259 return hResult;
1260 hResult = deskBar->SetClient(newBaseBarSite);
1261 if (FAILED_UNEXPECTEDLY(hResult))
1262 return hResult;
1263
1264 // tell the new base bar site about the new base bar
1265 hResult = newBaseBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &deskBarClient));
1266 if (FAILED_UNEXPECTEDLY(hResult))
1267 return hResult;
1268 hResult = deskBarClient->SetDeskBarSite(newBaseBar);
1269 if (FAILED_UNEXPECTEDLY(hResult))
1270 return hResult;
1271
1272 }
1273 return (*cache)->QueryInterface(riid, theBaseBar);
1274}
1275
1276BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
1277{
1278 HRESULT hResult;
1279 CComPtr<IDeskBar> deskBar;
1280 CComPtr<IUnknown> baseBarSite;
1281 CComPtr<IBandSite> bandSite;
1282 CLSID clsidTmp;
1283 DWORD numBands;
1284 DWORD dwBandID;
1285 DWORD i;
1286
1287 /* Get our basebarsite to be able to enumerate bands */
1288 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1289 if (FAILED_UNEXPECTEDLY(hResult))
1290 return FALSE;
1291 hResult = deskBar->GetClient(&baseBarSite);
1292 if (FAILED_UNEXPECTEDLY(hResult))
1293 return FALSE;
1294 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &bandSite));
1295 if (FAILED_UNEXPECTEDLY(hResult))
1296 return FALSE;
1297
1298 numBands = bandSite->EnumBands(-1, NULL);
1299 for (i = 0; i < numBands; i++)
1300 {
1301 CComPtr<IPersist> bandPersist;
1302
1303 hResult = bandSite->EnumBands(i, &dwBandID);
1304 if (FAILED_UNEXPECTEDLY(hResult))
1305 return FALSE;
1306
1307 hResult = bandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &bandPersist));
1308 if (FAILED_UNEXPECTEDLY(hResult))
1309 return FALSE;
1310 hResult = bandPersist->GetClassID(&clsidTmp);
1311 if (FAILED_UNEXPECTEDLY(hResult))
1312 return FALSE;
1313 if (IsEqualGUID(clsidBand, clsidTmp))
1314 {
1315 if (pdwBandID) *pdwBandID = dwBandID;
1316 return TRUE;
1317 }
1318 }
1319 return FALSE;
1320}
1321
1322HRESULT CShellBrowser::ShowBand(const CLSID &classID, bool vertical)
1323{
1324 CComPtr<IDockingWindow> dockingWindow;
1325 CComPtr<IUnknown> baseBarSite;
1326 CComPtr<IUnknown> newBand;
1327 CComPtr<IDeskBar> deskBar;
1328 VARIANT vaIn;
1329 HRESULT hResult;
1330 DWORD dwBandID;
1331
1332 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1333 if (FAILED_UNEXPECTEDLY(hResult))
1334 return hResult;
1335
1336 hResult = deskBar->GetClient(&baseBarSite);
1337 if (FAILED_UNEXPECTEDLY(hResult))
1338 return hResult;
1339
1340 hResult = deskBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
1341 if (FAILED_UNEXPECTEDLY(hResult))
1342 return hResult;
1343
1344 if (!IsBandLoaded(classID, vertical, &dwBandID))
1345 {
1346 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID), vertical);
1347 if (IsEqualCLSID(CLSID_ExplorerBand, classID))
1348 {
1349 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1351 if (FAILED_UNEXPECTEDLY(hResult))
1352 return hResult;
1353 }
1354 else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
1355 {
1356 TRACE("CLSID_FileSearchBand requested, building internal band.\n");
1357 hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
1358 if (FAILED_UNEXPECTEDLY(hResult))
1359 return hResult;
1360 }
1361 else
1362 {
1363 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1364 hResult = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, &newBand));
1365 if (FAILED_UNEXPECTEDLY(hResult))
1366 return hResult;
1367 }
1368 }
1369 else
1370 {
1371 CComPtr<IBandSite> pBandSite;
1372
1373 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &pBandSite));
1374 if (!SUCCEEDED(hResult))
1375 {
1376 ERR("Can't get IBandSite interface\n");
1377 return E_FAIL;
1378 }
1379 hResult = pBandSite->GetBandObject(dwBandID, IID_PPV_ARG(IUnknown, &newBand));
1380 if (!SUCCEEDED(hResult))
1381 {
1382 ERR("Can't find band object\n");
1383 return E_FAIL;
1384 }
1385
1386 // It's hackish, but we should be able to show the wanted band until we
1387 // find the proper way to do this (but it seems to work to add a new band)
1388 // Here we'll just re-add the existing band to the site, causing it to display.
1389 }
1390 V_VT(&vaIn) = VT_UNKNOWN;
1391 V_UNKNOWN(&vaIn) = newBand.p;
1392 hResult = IUnknown_Exec(baseBarSite, CGID_IDeskBand, 1, 1, &vaIn, NULL);
1393 if (FAILED_UNEXPECTEDLY(hResult))
1394 {
1395 return hResult;
1396 }
1397
1398 hResult = dockingWindow->ShowDW(TRUE);
1399 if (FAILED_UNEXPECTEDLY(hResult))
1400 return hResult;
1401
1402 if (vertical)
1403 {
1404 fCurrentVertBar = classID;
1406 }
1407
1408 return S_OK;
1409}
1410
1412{
1414 if (newDirectory == NULL)
1415 return E_OUTOFMEMORY;
1416 if (_ILIsDesktop(newDirectory))
1417 {
1418 ILFree(newDirectory);
1419 return E_INVALIDARG;
1420 }
1421 ILRemoveLastID(newDirectory);
1423 ILFree(newDirectory);
1424 if (FAILED_UNEXPECTEDLY(hResult))
1425 return hResult;
1426 return S_OK;
1427}
1428
1430{
1431 PROPSHEETHEADER* sheetInfo = reinterpret_cast<PROPSHEETHEADER*>(lParam);
1432 if (sheetInfo->nPages >= folderOptionsPageCountMax)
1433 return FALSE;
1434 sheetInfo->phpage[sheetInfo->nPages] = thePage;
1435 sheetInfo->nPages++;
1436 return TRUE;
1437}
1438
1440{
1441 CComPtr<IShellPropSheetExt> folderOptionsSheet;
1442 PROPSHEETHEADER m_PropSheet;
1444// CComPtr<IGlobalFolderSettings> globalSettings;
1445// SHELLSTATE2 shellState;
1446 HRESULT hResult;
1447
1448 memset(m_psp, 0, sizeof(m_psp));
1449 memset(&m_PropSheet, 0, sizeof(m_PropSheet));
1450
1451 // create sheet object
1452 hResult = CoCreateInstance(CLSID_ShellFldSetExt, NULL, CLSCTX_INPROC_SERVER,
1453 IID_PPV_ARG(IShellPropSheetExt, &folderOptionsSheet));
1454 if (FAILED_UNEXPECTEDLY(hResult))
1455 return E_FAIL;
1456
1457 // must set site in order for Apply to all Folders on Advanced page to be enabled
1458 hResult = IUnknown_SetSite(folderOptionsSheet, static_cast<IDispatch *>(this));
1459 m_PropSheet.phpage = m_psp;
1460
1461#if 0
1462 hResult = CoCreateInstance(CLSID_GlobalFolderSettings, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IGlobalFolderSettings, &globalSettings));
1463 if (FAILED_UNEXPECTEDLY(hResult))
1464 return E_FAIL;
1465 hResult = globalSettings->Get(&shellState, sizeof(shellState));
1466 if (FAILED_UNEXPECTEDLY(hResult))
1467 return E_FAIL;
1468#endif
1469
1470 // add pages
1471 hResult = folderOptionsSheet->AddPages(AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1472 if (FAILED_UNEXPECTEDLY(hResult))
1473 return E_FAIL;
1474
1476 {
1477 hResult = fCurrentShellView->AddPropertySheetPages(
1478 0, AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1479 if (FAILED_UNEXPECTEDLY(hResult))
1480 return E_FAIL;
1481 }
1482
1483 // show sheet
1484 CStringW strFolderOptions(MAKEINTRESOURCEW(IDS_FOLDER_OPTIONS));
1485 m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
1486 m_PropSheet.dwFlags = 0;
1487 m_PropSheet.hwndParent = m_hWnd;
1488 m_PropSheet.hInstance = _AtlBaseModule.GetResourceInstance();
1489 m_PropSheet.pszCaption = strFolderOptions;
1490 m_PropSheet.nStartPage = 0;
1491 PropertySheet(&m_PropSheet);
1492 return S_OK;
1493}
1494
1496{
1497 CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
1498 _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1499 LRESULT lResult;
1500 const _ATL_MSG *previousMessage;
1501 BOOL handled;
1502 WNDPROC saveWindowProc;
1503 HRESULT hResult;
1504
1505 hWnd = pThis->m_hWnd;
1506 previousMessage = pThis->m_pCurrentMsg;
1507 pThis->m_pCurrentMsg = &msg;
1508
1509 /* If the shell browser is initialized, let the menu band preprocess the messages */
1510 if (pThis->fCurrentDirectoryPIDL)
1511 {
1512 CComPtr<IMenuBand> menuBand;
1513 hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
1514 if (SUCCEEDED(hResult) && menuBand.p != NULL)
1515 {
1516 hResult = menuBand->TranslateMenuMessage(&msg, &lResult);
1517 if (hResult == S_OK)
1518 return lResult;
1519 uMsg = msg.message;
1520 wParam = msg.wParam;
1521 lParam = msg.lParam;
1522 }
1523 }
1524
1525 handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1526 ATLASSERT(pThis->m_pCurrentMsg == &msg);
1527 if (handled == FALSE)
1528 {
1529 if (uMsg == WM_NCDESTROY)
1530 {
1531 saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC));
1532 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1533 if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC)))
1535 pThis->m_dwState |= WINSTATE_DESTROYED;
1536 }
1537 else
1538 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1539 }
1540 pThis->m_pCurrentMsg = previousMessage;
1541 if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1542 {
1543 pThis->m_dwState &= ~WINSTATE_DESTROYED;
1544 pThis->m_hWnd = NULL;
1545 pThis->OnFinalMessage(hWnd);
1546 }
1547 return lResult;
1548}
1549
1551{
1552 RECT clientRect;
1553 RECT statusRect;
1554 int x;
1555
1556 GetClientRect(&clientRect);
1557
1559 {
1560 ::GetWindowRect(fStatusBar, &statusRect);
1561 ::SetWindowPos(fStatusBar, NULL, clientRect.left, clientRect.bottom - (statusRect.bottom - statusRect.top),
1562 clientRect.right - clientRect.left,
1563 statusRect.bottom - statusRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1564 clientRect.bottom -= statusRect.bottom - statusRect.top;
1565 }
1566
1567 for (x = 0; x < 3; x++)
1568 {
1570 RECT borderSpace = fClientBars[x].borderSpace;
1571 if (hwnd == NULL && fClientBars[x].clientBar != NULL)
1572 {
1573 IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
1575 }
1576 if (hwnd != NULL)
1577 {
1578 RECT toolbarRect = clientRect;
1579 if (borderSpace.top != 0)
1580 {
1581 toolbarRect.bottom = toolbarRect.top + borderSpace.top;
1582 }
1583 else if (borderSpace.bottom != 0)
1584 {
1585 toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
1586 }
1587 else if (borderSpace.left != 0)
1588 {
1589 toolbarRect.right = toolbarRect.left + borderSpace.left;
1590 }
1591 else if (borderSpace.right != 0)
1592 {
1593 toolbarRect.left = toolbarRect.right - borderSpace.right;
1594 }
1595
1597 toolbarRect.left,
1598 toolbarRect.top,
1599 toolbarRect.right - toolbarRect.left,
1600 toolbarRect.bottom - toolbarRect.top,
1602
1603 if (borderSpace.top != 0)
1604 {
1605 clientRect.top = toolbarRect.bottom;
1606 }
1607 else if (borderSpace.bottom != 0)
1608 {
1609 clientRect.bottom = toolbarRect.top;
1610 }
1611 else if (borderSpace.left != 0)
1612 {
1613 clientRect.left = toolbarRect.right;
1614 }
1615 else if (borderSpace.right != 0)
1616 {
1617 clientRect.right = toolbarRect.left;
1618 }
1619 }
1620 }
1621
1623 return;
1624
1625 ::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
1626 clientRect.right - clientRect.left,
1627 clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1628}
1629
1630HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
1631{
1632 DISPPARAMS params;
1635 HRESULT hResult;
1636
1637 params.rgvarg = arguments;
1638 params.rgdispidNamedArgs = NULL;
1639 params.cArgs = argCount;
1640 params.cNamedArgs = 0;
1641 IUnknown** pp = vec.begin();
1642 while (pp < vec.end())
1643 {
1644 if (*pp != NULL)
1645 {
1646 CComPtr<IDispatch> theDispatch;
1647 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1648 if (SUCCEEDED(hResult))
1649 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1650 }
1651 pp++;
1652 }
1653 pp = vec2.begin();
1654 while (pp < vec2.end())
1655 {
1656 if (*pp != NULL)
1657 {
1658 CComPtr<IDispatch> theDispatch;
1659 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1660 if (SUCCEEDED(hResult))
1661 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1662 }
1663 pp++;
1664 }
1665 return S_OK;
1666}
1667
1669{
1670 // these two variants intentionally to do use CComVariant because it would double free/release
1671 // or does not need to dispose at all
1672 VARIANT varArg[2];
1673 VARIANT varArgs;
1674 CComBSTR tempString(newDirectory);
1675
1676 V_VT(&varArgs) = VT_BSTR;
1677 V_BSTR(&varArgs) = tempString.m_str;
1678
1679 V_VT(&varArg[0]) = VT_VARIANT | VT_BYREF;
1680 V_VARIANTREF(&varArg[0]) = &varArgs;
1681 V_VT(&varArg[1]) = VT_DISPATCH;
1682 V_DISPATCH(&varArg[1]) = (IDispatch *)this;
1683
1684 return FireEvent(DISPID_NAVIGATECOMPLETE2, 2, varArg);
1685}
1686
1688{
1689 VARIANT varArg[2];
1690
1691 V_VT(&varArg[0]) = VT_BOOL;
1692 V_BOOL(&varArg[0]) = newState ? VARIANT_TRUE : VARIANT_FALSE;
1693 V_VT(&varArg[1]) = VT_I4;
1694 V_I4(&varArg[1]) = commandID;
1695
1696 return FireEvent(DISPID_COMMANDSTATECHANGE, 2, varArg);
1697}
1698
1700{
1701 return FireCommandStateChange(false, -1);
1702}
1703
1705{
1706 VARIANT vArgs[1];
1707 V_VT(&vArgs[0]) = VT_BOOL;
1708 V_BOOL(&vArgs[0]) = Param1 ? VARIANT_TRUE : VARIANT_FALSE;
1709 return FireEvent(dispIdMember, 1, vArgs);
1710}
1711
1713{
1714 CComPtr<ITravelLog> travelLog;
1715 CComPtr<ITravelEntry> unusedEntry;
1716 bool canGoBack;
1717 bool canGoForward;
1718 HRESULT hResult;
1719
1720 canGoBack = false;
1721 canGoForward = false;
1722 hResult = GetTravelLog(&travelLog);
1723 if (FAILED_UNEXPECTEDLY(hResult))
1724 return hResult;
1725 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
1726 if (SUCCEEDED(hResult))
1727 {
1728 canGoBack = true;
1729 unusedEntry.Release();
1730 }
1731 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
1732 if (SUCCEEDED(hResult))
1733 {
1734 canGoForward = true;
1735 unusedEntry.Release();
1736 }
1737 hResult = FireCommandStateChange(canGoBack, 2);
1738 hResult = FireCommandStateChange(canGoForward, 1);
1739 return S_OK;
1740}
1741
1743{
1744 bool canGoUp = !_ILIsDesktop(fCurrentDirectoryPIDL);
1745 FireCommandStateChange(canGoUp, 3);
1746 return S_OK;
1747}
1748
1750{
1751 CComPtr<ITravelLog> travelLog;
1752 CComPtr<ITravelEntry> unusedEntry;
1753 int position;
1754 MENUITEMINFO menuItemInfo;
1755 HRESULT hResult;
1756
1758
1759 position = GetMenuItemCount(theMenu);
1760 hResult = GetTravelLog(&travelLog);
1761 if (FAILED_UNEXPECTEDLY(hResult))
1762 return;
1763
1764 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1765 TLOG_BACK,
1766 &unusedEntry);
1767
1768 if (SUCCEEDED(hResult))
1769 {
1771 unusedEntry.Release();
1772 }
1773 else
1775
1776 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1777 TLOG_FORE,
1778 &unusedEntry);
1779
1780 if (SUCCEEDED(hResult))
1781 {
1783 unusedEntry.Release();
1784 }
1785 else
1787
1788 SHEnableMenuItem(theMenu,
1791
1792 hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
1794 if (SUCCEEDED(hResult))
1795 {
1796 menuItemInfo.cbSize = sizeof(menuItemInfo);
1797 menuItemInfo.fMask = MIIM_TYPE | MIIM_ID;
1798 menuItemInfo.fType = MF_SEPARATOR;
1799 menuItemInfo.wID = IDM_GOTO_TRAVEL_SEP;
1800 InsertMenuItem(theMenu, position, TRUE, &menuItemInfo);
1801 }
1802}
1803
1805{
1806 CComPtr<ITravelLog> travelLog;
1807 HMENU gotoMenu;
1808 OLECMD commandList[5];
1809 HMENU toolbarMenuBar;
1810 HMENU toolbarMenu;
1811 MENUITEMINFO menuItemInfo;
1812 HRESULT hResult;
1813
1814 gotoMenu = SHGetMenuFromID(theMenu, FCIDM_MENU_EXPLORE);
1815 if (gotoMenu != NULL)
1816 UpdateGotoMenu(gotoMenu);
1817
1818 commandList[0].cmdID = ITID_TOOLBARBANDSHOWN;
1819 commandList[1].cmdID = ITID_ADDRESSBANDSHOWN;
1820 commandList[2].cmdID = ITID_LINKSBANDSHOWN;
1821 commandList[3].cmdID = ITID_TOOLBARLOCKED;
1822 commandList[4].cmdID = ITID_CUSTOMIZEENABLED;
1823
1825 CGID_PrivCITCommands, 5, commandList, NULL);
1826 if (FAILED_UNEXPECTEDLY(hResult))
1828 else
1829 {
1830 menuItemInfo.cbSize = sizeof(menuItemInfo);
1831 menuItemInfo.fMask = MIIM_SUBMENU;
1832 GetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1833 DestroyMenu(menuItemInfo.hSubMenu);
1834
1835 toolbarMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1836 toolbarMenu = GetSubMenu(toolbarMenuBar, 0);
1837 RemoveMenu(toolbarMenuBar, 0, MF_BYPOSITION);
1838 DestroyMenu(toolbarMenuBar);
1839
1840 // TODO: Implement
1841 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_ENABLED);
1842 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_ENABLED);
1843 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_ENABLED);
1844 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_CUSTOMIZE, commandList[4].cmdf & OLECMDF_ENABLED);
1845
1846 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_LATCHED);
1847 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_LATCHED);
1848 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_LATCHED);
1849 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LOCKTOOLBARS, commandList[3].cmdf & OLECMDF_LATCHED);
1850 if ((commandList[4].cmdf & OLECMDF_ENABLED) == 0)
1854
1855 menuItemInfo.cbSize = sizeof(menuItemInfo);
1856 menuItemInfo.fMask = MIIM_SUBMENU;
1857 menuItemInfo.hSubMenu = toolbarMenu;
1858 SetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1859 }
1861
1862 // Check the menu items for Explorer bar
1863 BOOL bSearchBand = (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
1864 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
1865 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
1866 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar));
1867 BOOL bHistory = IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar);
1868 BOOL bFavorites = IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar);
1869 BOOL bFolders = IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar);
1870 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_SEARCH, bSearchBand);
1871 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_HISTORY, bHistory);
1872 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FAVORITES, bFavorites);
1873 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FOLDERS, bFolders);
1874}
1875
1877{
1878 HMENU hBandsMenu;
1879 UINT nbFound;
1880
1882 if (!hBandsMenu)
1883 {
1884 OutputDebugString(L"No menu !\n");
1885 return E_FAIL;
1886 }
1888 BuildExplorerBandCategory(hBandsMenu, CATID_InfoBand, 4, NULL);
1889 BuildExplorerBandCategory(hBandsMenu, CATID_CommBand, 20, &nbFound);
1890 if (!nbFound)
1891 {
1892 // Remove separator
1894 }
1895 // Remove media menu since XP does it (according to API Monitor)
1897 return S_OK;
1898}
1899
1901{
1902 HRESULT hr;
1903 CComPtr<IEnumGUID> pEnumGUID;
1904 WCHAR wszBandName[MAX_PATH];
1905 WCHAR wszBandGUID[MAX_PATH];
1906 WCHAR wRegKey[MAX_PATH];
1907 UINT cBands;
1908 DWORD dwRead;
1909 DWORD dwDataSize;
1910 GUID iter;
1911 MenuBandInfo mbi;
1912
1913 mbi.fVertical = IsEqualGUID(category, CATID_InfoBand);
1914 cBands = 0;
1915 hr = SHEnumClassesOfCategories(1, &category, 0, NULL, &pEnumGUID);
1917 {
1918 return hr;
1919 }
1920 do
1921 {
1922 pEnumGUID->Next(1, &iter, &dwRead);
1923 if (dwRead)
1924 {
1925 // Get the band name
1926 if (IsBuiltinBand(iter))
1927 continue;
1928 if (!StringFromGUID2(iter, wszBandGUID, MAX_PATH))
1929 continue;
1930 StringCchPrintfW(wRegKey, MAX_PATH, L"CLSID\\%s", wszBandGUID);
1931 dwDataSize = MAX_PATH;
1932 SHGetValue(HKEY_CLASSES_ROOT, wRegKey, NULL, NULL, wszBandName, &dwDataSize);
1933
1934 mbi.barGuid = iter;
1935 InsertMenu(hBandsMenu, dwPos + cBands, MF_BYPOSITION, IDM_EXPLORERBAND_BEGINCUSTOM + DSA_GetItemCount(menuDsa), wszBandName);
1936 DSA_AppendItem(menuDsa, &mbi);
1937 cBands++;
1938 }
1939 }
1940 while (dwRead > 0);
1941 if (nbFound)
1942 *nbFound = cBands;
1943 return S_OK;
1944}
1945
1947{
1948 if (IsEqualCLSID(bandID, CLSID_ExplorerBand))
1949 return TRUE;
1950 if (IsEqualCLSID(bandID, CLSID_SH_SearchBand) || IsEqualCLSID(bandID, CLSID_SearchBand))
1951 return TRUE;
1952 if (IsEqualCLSID(bandID, CLSID_IE_SearchBand) || IsEqualCLSID(bandID, CLSID_FileSearchBand))
1953 return TRUE;
1954 if (IsEqualCLSID(bandID, CLSID_SH_HistBand))
1955 return TRUE;
1956 if (IsEqualCLSID(bandID, CLSID_SH_FavBand))
1957 return TRUE;
1958 if (IsEqualCLSID(bandID, CLSID_ChannelsBand))
1959 return TRUE;
1960 return FALSE;
1961}
1962
1964{
1965 CComPtr<IObjectWithSite> objectWithSite;
1966 CComPtr<IContextMenu> contextMenu;
1967 CMINVOKECOMMANDINFO commandInfo;
1968 const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1969 HRESULT hResult;
1970
1971 // TODO: Query shell if this command is enabled first
1972
1973 memset(&commandInfo, 0, sizeof(commandInfo));
1974 commandInfo.cbSize = sizeof(commandInfo);
1975 commandInfo.hwnd = m_hWnd;
1976 commandInfo.lpParameters = searchGUID;
1977 commandInfo.nShow = SW_SHOWNORMAL;
1978
1979 hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1980 IID_PPV_ARG(IContextMenu, &contextMenu));
1981 if (FAILED_UNEXPECTEDLY(hResult))
1982 return 0;
1983 hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
1984 if (FAILED_UNEXPECTEDLY(hResult))
1985 return 0;
1986 hResult = objectWithSite->SetSite(dynamic_cast<IShellBrowser*>(this));
1987 if (FAILED_UNEXPECTEDLY(hResult))
1988 return 0;
1989 hResult = contextMenu->InvokeCommand(&commandInfo);
1990 hResult = objectWithSite->SetSite(NULL);
1991 return hResult;
1992}
1993
1995{
1996 CComPtr<IUnknown> int1Retry;
1997 CComPtr<IUnknown> int2Retry;
1998 HRESULT hResult;
1999
2000 if (int1 == int2)
2001 return true;
2002 if (int1 == NULL || int2 == NULL)
2003 return false;
2004 hResult = int1->QueryInterface(IID_PPV_ARG(IUnknown, &int1Retry));
2005 if (FAILED_UNEXPECTEDLY(hResult))
2006 return false;
2007 hResult = int2->QueryInterface(IID_PPV_ARG(IUnknown, &int2Retry));
2008 if (FAILED_UNEXPECTEDLY(hResult))
2009 return false;
2010 if (int1Retry == int2Retry)
2011 return true;
2012 return false;
2013}
2014
2016{
2017 static const INT excludeItems[] = { 1, 1, 1, IDC_STATUSBAR, 0, 0 };
2018
2019 RECT availableBounds;
2020
2021 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
2022 for (INT x = 0; x < 3; x++)
2023 {
2024 if (fClientBars[x].clientBar.p != NULL && !IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2025 {
2026 availableBounds.top += fClientBars[x].borderSpace.top;
2027 availableBounds.left += fClientBars[x].borderSpace.left;
2028 availableBounds.bottom -= fClientBars[x].borderSpace.bottom;
2029 availableBounds.right -= fClientBars[x].borderSpace.right;
2030 }
2031 }
2032 *prcBorder = availableBounds;
2033 return S_OK;
2034}
2035
2037{
2038 return S_OK;
2039}
2040
2042{
2043 for (INT x = 0; x < 3; x++)
2044 {
2045 if (IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2046 {
2047 fClientBars[x].borderSpace = *pbw;
2048 // if this bar changed size, it cascades and forces all subsequent bars to resize
2050 return S_OK;
2051 }
2052 }
2053 return E_INVALIDARG;
2054}
2055
2057 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
2058{
2059 CComPtr<IOleCommandTarget> commandTarget;
2060 HRESULT hResult;
2061
2062 if (prgCmds == NULL)
2063 return E_INVALIDARG;
2064 if (pguidCmdGroup == NULL)
2065 {
2066 if (fCurrentShellView.p != NULL)
2067 {
2068 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
2069 if (SUCCEEDED(hResult) && commandTarget.p != NULL)
2070 return commandTarget->QueryStatus(NULL, 1, prgCmds, pCmdText);
2071 }
2072 while (cCmds != 0)
2073 {
2074 prgCmds->cmdf = 0;
2075 prgCmds++;
2076 cCmds--;
2077 }
2078 }
2079 else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2080 {
2081 while (cCmds != 0)
2082 {
2083 switch (prgCmds->cmdID)
2084 {
2085 case 0x1c: // search
2087 if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
2088 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
2089 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
2090 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
2091 {
2092 prgCmds->cmdf |= OLECMDF_LATCHED;
2093 }
2094 break;
2095 case 0x1d: // history
2097 if (IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar))
2098 prgCmds->cmdf |= OLECMDF_LATCHED;
2099 break;
2100 case 0x1e: // favorites
2102 if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
2103 prgCmds->cmdf |= OLECMDF_LATCHED;
2104 break;
2105 case SBCMDID_EXPLORERBARFOLDERS: // folders
2107 if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
2108 prgCmds->cmdf |= OLECMDF_LATCHED;
2109 break;
2110 default:
2111 prgCmds->cmdf = 0;
2112 break;
2113 }
2114 prgCmds++;
2115 cCmds--;
2116 }
2117 }
2118 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2119 {
2120 while (cCmds != 0)
2121 {
2122 switch (prgCmds->cmdID)
2123 {
2125 prgCmds->cmdf = OLECMDF_SUPPORTED;
2127 prgCmds->cmdf |= OLECMDF_ENABLED;
2128 break;
2129 }
2130 prgCmds++;
2131 cCmds--;
2132 }
2133 }
2134 return S_OK;
2135}
2136
2138 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
2139{
2140 if (!pguidCmdGroup)
2141 {
2142 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut);
2143 return E_NOTIMPL;
2144 }
2145 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2146 {
2147 switch (nCmdID)
2148 {
2149 case 0x1c: //Toggle Search
2150 case 0x1d: //Toggle History
2151 case 0x1e: //Toggle Favorites
2152 case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
2153 const GUID* pclsid;
2154 if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
2155 else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
2156 else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
2157 else pclsid = &CLSID_ExplorerBand;
2158
2159 if (IsEqualCLSID(*pclsid, fCurrentVertBar))
2160 {
2164 }
2165 else
2166 {
2167 ShowBand(*pclsid, true);
2168 }
2169 return S_OK;
2170 case 0x22:
2171 //Sent when a band closes
2172 if (V_VT(pvaIn) != VT_UNKNOWN)
2173 return E_INVALIDARG;
2174
2175 if (IUnknownIsEqual(V_UNKNOWN(pvaIn), fClientBars[BIVerticalBaseBar].clientBar.p))
2176 {
2179 }
2180 return S_OK;
2181 case 0x27:
2182 if (nCmdexecopt == 1)
2183 {
2184 // pvaIn is a VT_UNKNOWN with a band that is being hidden
2185 }
2186 else
2187 {
2188 // update zones part of the status bar
2189 }
2190 return S_OK;
2191 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
2192 V_VT(pvaOut) = VT_INT_PTR;
2193 V_INTREF(pvaOut) = reinterpret_cast<INT *>(
2194 LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU)));
2195 return S_OK;
2196 case 0x38:
2197 // indicate if this cabinet was opened as a browser
2198 return S_FALSE;
2199 default:
2200 return E_NOTIMPL;
2201 }
2202 }
2203 else if (IsEqualIID(*pguidCmdGroup, CGID_InternetButtons))
2204 {
2205 switch (nCmdID)
2206 {
2207 case 0x23:
2208 // placeholder
2209 return S_OK;
2210 }
2211 }
2212 else if (IsEqualIID(*pguidCmdGroup, CGID_Theater))
2213 {
2214 switch (nCmdID)
2215 {
2216 case 6:
2217 // what is theater mode and why do we receive this?
2218 return E_NOTIMPL;
2219 }
2220 }
2221 else if (IsEqualIID(*pguidCmdGroup, CGID_MenuBand))
2222 {
2223 switch (nCmdID)
2224 {
2225 case 14:
2226 // initialize favorites menu
2227 return S_OK;
2228 }
2229 }
2230 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView))
2231 {
2232 switch (nCmdID)
2233 {
2234 case 0x12:
2235 // refresh on toolbar clicked
2236 return S_OK;
2237 case 0x26:
2238 // called for unknown bands ?
2239 return S_OK;
2240 case 0x4d:
2241 // tell the view if it should hide the task pane or not
2242 return (fClientBars[BIVerticalBaseBar].clientBar.p == NULL) ? S_FALSE : S_OK;
2243 }
2244 }
2245 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2246 {
2247 switch (nCmdID)
2248 {
2249 case 40994:
2250 return NavigateToParent();
2253 break;
2254 }
2255 }
2256 else if (IsEqualIID(*pguidCmdGroup, CGID_IExplorerToolbar))
2257 {
2258 switch (nCmdID)
2259 {
2260 case 0x7063:
2261 return DoFolderOptions();
2262 }
2263 }
2264 else if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
2265 {
2266 switch (nCmdID)
2267 {
2271 break;
2272 }
2273 }
2274 else
2275 {
2276 return E_NOTIMPL;
2277 }
2278 return E_NOTIMPL;
2279}
2280
2282{
2283 if (lphwnd == NULL)
2284 return E_POINTER;
2285 *lphwnd = m_hWnd;
2286 return S_OK;
2287}
2288
2290{
2291 return E_NOTIMPL;
2292}
2293
2294HRESULT STDMETHODCALLTYPE CShellBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
2295{
2296 HMENU mainMenu = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2297
2298 Shell_MergeMenus(hmenuShared, mainMenu, 0, 0, FCIDM_BROWSERLAST, MM_SUBMENUSHAVEIDS);
2299
2300 int GCCU(itemCount3) = GetMenuItemCount(hmenuShared);
2301 Unused(itemCount3);
2302
2303 DestroyMenu(mainMenu);
2304
2305 lpMenuWidths->width[0] = 2;
2306 lpMenuWidths->width[2] = 3;
2307 lpMenuWidths->width[4] = 1;
2308 return S_OK;
2309}
2310
2311HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
2312{
2313 CComPtr<IShellMenu> shellMenu;
2314 HRESULT hResult;
2315
2316 if (hmenuShared && IsMenu(hmenuShared) == FALSE)
2317 return E_FAIL;
2318 hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
2319 if (FAILED_UNEXPECTEDLY(hResult))
2320 return hResult;
2321
2322 if (!hmenuShared)
2323 {
2324 hmenuShared = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2325 }
2326 // FIXME: Figure out the proper way to do this.
2327 HMENU hMenuFavs = GetSubMenu(hmenuShared, 3);
2328 if (hMenuFavs)
2329 {
2331 }
2332
2333 hResult = shellMenu->SetMenu(hmenuShared, m_hWnd, SMSET_DONTOWN);
2334 if (FAILED_UNEXPECTEDLY(hResult))
2335 return hResult;
2336 fCurrentMenuBar = hmenuShared;
2338 return S_OK;
2339}
2340
2342{
2343 if (hmenuShared == fCurrentMenuBar)
2344 {
2345 //DestroyMenu(fCurrentMenuBar);
2347 }
2348 return S_OK;
2349}
2350
2352{
2353 //
2354 if (pszStatusText)
2355 {
2356 ::SetWindowText(fStatusBar, pszStatusText);
2357 }
2358 else
2359 {
2360
2361 }
2362 return S_OK;
2363}
2364
2366{
2367 return E_NOTIMPL;
2368}
2369
2371{
2373 return S_FALSE;
2374 return S_OK;
2375}
2376
2378{
2380 // FIXME: Should not automatically show the Explorer band
2381 if ((wFlags & SBSP_EXPLOREMODE) && !(wFlags & SBSP_NEWBROWSER))
2382 ShowBand(CLSID_ExplorerBand, true);
2383
2384 CComHeapPtr<ITEMIDLIST> pidlResolved;
2385 if (wFlags & (SBSP_RELATIVE | SBSP_PARENT))
2386 {
2387 HRESULT hr = CreateRelativeBrowsePIDL(pidl, wFlags, &pidlResolved);
2388 if (FAILED(hr))
2389 return hr;
2390 pidl = pidlResolved;
2391 }
2392
2393 if (wFlags & SBSP_NEWBROWSER)
2394 return OpenNewBrowserWindow(pidl, wFlags);
2395
2396 switch (wFlags & (SBSP_ABSOLUTE | SBSP_RELATIVE | SBSP_PARENT | SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
2397 {
2398 case SBSP_PARENT:
2399 return NavigateToParent();
2400 case SBSP_NAVIGATEBACK:
2401 return GoBack();
2402 case SBSP_NAVIGATEFORWARD:
2403 return GoForward();
2404 }
2405
2406 // TODO: SBSP_WRITENOHISTORY? SBSP_CREATENOHISTORY?
2408 if (fTravelLog)
2410 if (wFlags & SBSP_ACTIVATE_NOFOCUS)
2412 return BrowseToPIDL(pidl, flags);
2413}
2414
2416{
2417 return E_NOTIMPL;
2418}
2419
2421{
2422 if (lphwnd == NULL)
2423 return E_POINTER;
2424 *lphwnd = NULL;
2425 switch (id)
2426 {
2427 case FCW_TOOLBAR:
2428 *lphwnd = fToolbarProxy.m_hWnd;
2429 return S_OK;
2430 case FCW_STATUS:
2431 *lphwnd = fStatusBar;
2432 return S_OK;
2433 case FCW_TREE:
2434 {
2435 BOOL shown;
2436 if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
2437 return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
2438 return S_FALSE;
2439 }
2440 case FCW_PROGRESS:
2441 // is this a progress dialog?
2442 return S_OK;
2443 }
2444 return S_OK;
2445}
2446
2449{
2450 LPARAM result;
2451
2452 if (pret != NULL)
2453 *pret = 0;
2454 switch (id)
2455 {
2456 case FCW_TOOLBAR:
2458 if (pret != NULL)
2459 *pret = result;
2460 break;
2461 case FCW_STATUS:
2463 if (pret != NULL)
2464 *pret = result;
2465 break;
2466 }
2467 return S_OK;
2468}
2469
2471{
2472 if (ppshv == NULL)
2473 return E_POINTER;
2474 *ppshv = fCurrentShellView;
2475 if (fCurrentShellView.p != NULL)
2476 {
2478 return S_OK;
2479 }
2480 return E_FAIL;
2481}
2482
2484{
2485 return E_NOTIMPL;
2486}
2487
2489{
2490 return E_NOTIMPL;
2491}
2492
2494 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2495{
2496 return E_NOTIMPL;
2497}
2498
2500{
2501 return E_NOTIMPL;
2502}
2503
2505{
2506 return E_NOTIMPL;
2507}
2508
2510 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2511{
2512 return E_NOTIMPL;
2513}
2514
2516{
2517 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2518 // the returned interface has a method GetPropertyBag on it
2519 if (IsEqualIID(guidService, SID_STopLevelBrowser))
2520 return this->QueryInterface(riid, ppvObject);
2521 if (IsEqualIID(guidService, SID_SShellBrowser))
2522 return this->QueryInterface(riid, ppvObject);
2523 if (IsEqualIID(guidService, SID_ITargetFrame2))
2524 return this->QueryInterface(riid, ppvObject);
2525 if (IsEqualIID(guidService, SID_IWebBrowserApp)) // without this, the internet toolbar won't reflect notifications
2526 return this->QueryInterface(riid, ppvObject);
2527 if (IsEqualIID(guidService, SID_SProxyBrowser))
2528 return this->QueryInterface(riid, ppvObject);
2529 if (IsEqualIID(guidService, SID_IExplorerToolbar) && fClientBars[BIInternetToolbar].clientBar.p)
2530 return fClientBars[BIInternetToolbar].clientBar->QueryInterface(riid, ppvObject);
2531 if (IsEqualIID(riid, IID_IShellBrowser))
2532 return this->QueryInterface(riid, ppvObject);
2533 return E_NOINTERFACE;
2534}
2535
2537{
2540}
2541
2543{
2544 if (ppvObject == NULL)
2545 return E_POINTER;
2546
2547 *ppvObject = NULL;
2548
2549 LPITEMIDLIST pidl;
2550 HRESULT hr = GetPidl(&pidl);
2552 return E_FAIL;
2553
2554 // FIXME: pidl for Internet etc.
2555
2556 if (_ILIsNetworkPlace(pidl))
2557 flags |= SHGVSPB_ROAM;
2558
2559 hr = SHGetViewStatePropertyBag(pidl, L"Shell", flags, riid, ppvObject);
2560
2561 ILFree(pidl);
2562 return hr;
2563}
2564
2566{
2567 return E_NOTIMPL;
2568}
2569
2571{
2572 return E_NOTIMPL;
2573}
2574
2576 UINT cNames, LCID lcid, DISPID *rgDispId)
2577{
2578 return E_NOTIMPL;
2579}
2580
2582 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
2583{
2584 return E_NOTIMPL;
2585}
2586
2588{
2589 return E_NOTIMPL;
2590}
2591
2593{
2594 return E_NOTIMPL;
2595}
2596
2598{
2599 return E_NOTIMPL;
2600}
2601
2603{
2604 return E_NOTIMPL;
2605}
2606
2608{
2609 HRESULT hResult;
2610
2611 // called by toolbar when displaying tooltips
2612 if (pptl == NULL)
2613 return E_FAIL;
2614
2615 *pptl = NULL;
2616 if (fTravelLog.p == NULL)
2617 {
2619 if (FAILED_UNEXPECTEDLY(hResult))
2620 return hResult;
2621 }
2622 *pptl = fTravelLog.p;
2623 fTravelLog.p->AddRef();
2624 return S_OK;
2625}
2626
2628{
2629 BOOL shown;
2630 if (FAILED(IsControlWindowShown(id, &shown)))
2631 return E_NOTIMPL;
2632 else if (!shown == !fShow) // Negated for true boolean comparison
2633 return S_OK;
2634 else switch (id)
2635 {
2636 case FCW_STATUS:
2637 OnToggleStatusBarVisible(0, 0, NULL, shown);
2638 return S_OK;
2639 case FCW_TREE:
2640 return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
2641 case FCW_MENU:
2643 CGID_PrivCITCommands, ITID_MENUBANDSHOWN, 0, NULL, NULL);
2644 case FCW_ADDRESSBAR:
2646 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
2647 }
2648 return E_NOTIMPL;
2649}
2650
2652{
2653 HRESULT hr = S_OK;
2654 BOOL shown = FALSE;
2655 switch (id)
2656 {
2657 case FCW_STATUS:
2659 break;
2660 case FCW_TREE:
2661 {
2663 hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
2664 shown = cmd.cmdf & OLECMDF_LATCHED;
2665 break;
2666 }
2667 case FCW_MENU:
2669 break;
2670 case FCW_ADDRESSBAR:
2672 break;
2673 default:
2674 hr = E_NOTIMPL;
2675 }
2676 if (pfShown)
2677 {
2678 *pfShown = shown;
2679 return hr;
2680 }
2681 return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
2682}
2683
2685{
2686 OLECMD cmd = { ITId };
2688 CGID_PrivCITCommands, 1, &cmd, NULL);
2689 return SUCCEEDED(hr) ? (cmd.cmdf & OLECMDF_LATCHED) ? S_OK : S_FALSE : hr;
2690}
2691
2693{
2694 return E_NOTIMPL;
2695}
2696
2698{
2699 return E_NOTIMPL;
2700}
2701
2703{
2704 return E_NOTIMPL;
2705}
2706
2708{
2709 return _NavigateToPidl(pidl, grfHLNF, 0);
2710}
2711
2713{
2714 return E_NOTIMPL;
2715}
2716
2718{
2719 return E_NOTIMPL;
2720}
2721
2723{
2724 return E_NOTIMPL;
2725}
2726
2728{
2729 return E_NOTIMPL;
2730}
2731
2733{
2734 return E_NOTIMPL;
2735}
2736
2738{
2739 m_BrowserSvcFlags = (m_BrowserSvcFlags & ~dwFlagMask) | (dwFlags & dwFlagMask);
2740 return S_OK;
2741}
2742
2744{
2745 *pdwFlags = m_BrowserSvcFlags;
2746 return S_OK;
2747}
2748
2750{
2751 return E_NOTIMPL;
2752}
2753
2755{
2756 // called by explorer bar to get current pidl
2757 return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER;
2758}
2759
2761{
2762 return E_NOTIMPL;
2763}
2764
2766{
2767 return -1;
2768}
2769
2771{
2772 return E_NOTIMPL;
2773}
2774
2776{
2777 if (ppole == NULL || pstm == NULL || ppbc == NULL)
2778 return E_INVALIDARG;
2779 *ppole = fHistoryObject;
2780 if (fHistoryObject != NULL)
2782 *pstm = fHistoryStream;
2783 if (fHistoryStream != NULL)
2785 *ppbc = fHistoryBindContext;
2791 if (*ppole == NULL)
2792 return E_FAIL;
2793 return S_OK;
2794}
2795
2797{
2798 return E_NOTIMPL;
2799}
2800
2802{
2803 return E_NOTIMPL;
2804}
2805
2807{
2808 return E_NOTIMPL;
2809}
2810
2812 IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
2813{
2814 return E_NOTIMPL;
2815}
2816
2818{
2819 return E_NOTIMPL;
2820}
2821
2823{
2824 return E_NOTIMPL;
2825}
2826
2828{
2829 return E_NOTIMPL;
2830}
2831
2833{
2834 HRESULT hr = E_FAIL;
2836 {
2839 }
2840 return hr;
2841}
2842
2844{
2845 return E_NOTIMPL;
2846}
2847
2849{
2850 return E_NOTIMPL;
2851}
2852
2854{
2856 return S_OK;
2857}
2858
2860{
2862}
2863
2865{
2866 return E_NOTIMPL;
2867}
2868
2870{
2871 return 0;
2872}
2873
2875{
2876 return E_NOTIMPL;
2877}
2878
2880{
2881 return E_NOTIMPL;
2882}
2883
2885{
2886 return E_NOTIMPL;
2887}
2888
2890{
2891 return E_NOTIMPL;
2892}
2893
2895 IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd)
2896{
2897 return E_NOTIMPL;
2898}
2899
2901{
2902 return E_NOTIMPL;
2903}
2904
2906{
2907 return E_NOTIMPL;
2908}
2909
2911{
2912 return E_NOTIMPL;
2913}
2914
2916{
2917 return NULL;
2918}
2919
2921{
2922 return E_NOTIMPL;
2923}
2924
2926{
2927 SetFlags(BSF_TOPBROWSER, BSF_TOPBROWSER);
2928 return S_OK;
2929}
2930
2932{
2933 return E_NOTIMPL;
2934}
2935
2937{
2938 return E_NOTIMPL;
2939}
2940
2942{
2943 return E_NOTIMPL;
2944}
2945
2947{
2948 return E_NOTIMPL;
2949}
2950
2952{
2953 return E_NOTIMPL;
2954}
2955
2957{
2958 return E_NOTIMPL;
2959}
2960
2962{
2963 return E_NOTIMPL;
2964}
2965
2967{
2968 return E_NOTIMPL;
2969}
2970
2972{
2973 return E_NOTIMPL;
2974}
2975
2977{
2978 return E_NOTIMPL;
2979}
2980
2982{
2983 return E_NOTIMPL;
2984}
2985
2987{
2988 return E_NOTIMPL;
2989}
2990
2992{
2993 const UINT navflags = HLNF_NAVIGATINGBACK | HLNF_NAVIGATINGFORWARD;
2994 if ((grfHLNF & navflags) && grfHLNF != ~0ul)
2995 {
2996 UINT SbspFlags = (grfHLNF & HLNF_NAVIGATINGBACK) ? SBSP_NAVIGATEBACK : SBSP_NAVIGATEFORWARD;
2997 if (grfHLNF & SHHLNF_WRITENOHISTORY)
2998 SbspFlags |= SBSP_WRITENOHISTORY;
2999 if (grfHLNF & SHHLNF_NOAUTOSELECT)
3000 SbspFlags |= SBSP_NOAUTOSELECT;
3001 return BrowseObject(pidl, SbspFlags);
3002 }
3003 return E_NOTIMPL;
3004}
3005
3007{
3008 return E_NOTIMPL;
3009}
3010
3012{
3013 return E_NOTIMPL;
3014}
3015
3017 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)
3018{
3019 return E_NOTIMPL;
3020}
3021
3023 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam)
3024{
3025 return E_NOTIMPL;
3026}
3027
3029{
3030 return E_NOTIMPL;
3031}
3032
3034{
3035 return E_NOTIMPL;
3036}
3037
3039{
3040 return E_NOTIMPL;
3041}
3042
3044{
3045 return 0;
3046}
3047
3049{
3050 return E_NOTIMPL;
3051}
3052
3054{
3055 return E_NOTIMPL;
3056}
3057
3059{
3060 return E_NOTIMPL;
3061}
3062
3064{
3065 return E_NOTIMPL;
3066}
3067
3069{
3070 return E_NOTIMPL;
3071}
3072
3074{
3075 return E_NOTIMPL;
3076}
3077
3079{
3080 return E_NOTIMPL;
3081}
3082
3084{
3085 return NULL;
3086}
3087
3089{
3090 return 0;
3091}
3092
3094{
3095 return E_NOTIMPL;
3096}
3097
3099{
3100 return 0;
3101}
3102
3104{
3105 return NULL;
3106}
3107
3109{
3110 return E_NOTIMPL;
3111}
3112
3114{
3115 return E_NOTIMPL;
3116}
3117
3119{
3120 return E_NOTIMPL;
3121}
3122
3124 LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd)
3125{
3126 return E_NOTIMPL;
3127}
3128
3130{
3131 return E_NOTIMPL;
3132}
3133
3135{
3136 return 0;
3137}
3138
3140{
3141 return E_NOTIMPL;
3142}
3143
3145{
3146 for (int i = 0; i < 3; i++)
3147 {
3148 if (IUnknown_TranslateAcceleratorIO(fClientBars[i].clientBar, pmsg) == S_OK)
3149 return S_OK;
3150 }
3151
3152 if (!fCurrentShellView)
3153 return S_FALSE;
3154
3155 return fCurrentShellView->TranslateAcceleratorW(pmsg);
3156}
3157
3159{
3160 return E_NOTIMPL;
3161}
3162
3164{
3165 return E_NOTIMPL;
3166}
3167
3169{
3170 CComPtr<ITravelLog> travelLog;
3171 CComPtr<ITravelEntry> unusedEntry;
3172 HRESULT hResult;
3173
3174 hResult = GetTravelLog(&travelLog);
3175 if (FAILED_UNEXPECTEDLY(hResult))
3176 return hResult;
3177
3178 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
3179 if (SUCCEEDED(hResult))
3180 {
3181 unusedEntry.Release();
3182 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_BACK);
3183 }
3184
3185 return hResult;
3186}
3187
3189{
3190 CComPtr<ITravelLog> travelLog;
3191 CComPtr<ITravelEntry> unusedEntry;
3192 HRESULT hResult;
3193
3194 hResult = GetTravelLog(&travelLog);
3195 if (FAILED_UNEXPECTEDLY(hResult))
3196 return hResult;
3197
3198 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
3199 if (SUCCEEDED(hResult))
3200 {
3201 unusedEntry.Release();
3202 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_FORE);
3203 }
3204
3205 return hResult;
3206}
3207
3209{
3210 return E_NOTIMPL;
3211}
3212
3214{
3215 return E_NOTIMPL;
3216}
3217
3219 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3220{
3222 HRESULT hResult;
3223 CComPtr<IShellFolder> pDesktop;
3224
3225 hResult = SHGetDesktopFolder(&pDesktop);
3226 if (FAILED_UNEXPECTEDLY(hResult))
3227 return hResult;
3228 hResult = pDesktop->ParseDisplayName(NULL, NULL, URL, NULL, &pidl, NULL);
3229 if (FAILED_UNEXPECTEDLY(hResult))
3230 return hResult;
3231 return BrowseObject(pidl, 1);
3232}
3233
3235{
3236 VARIANT level;
3237
3238 V_VT(&level) = VT_I4;
3239 V_I4(&level) = 4;
3240 return Refresh2(&level);
3241}
3242
3244{
3245 CComPtr<IOleCommandTarget> oleCommandTarget;
3246 HRESULT hResult;
3247
3248 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
3249 if (FAILED_UNEXPECTEDLY(hResult))
3250 return hResult;
3251 return oleCommandTarget->Exec(NULL, 22, 1, Level, NULL);
3252}
3253
3255{
3256 return E_NOTIMPL;
3257}
3258
3260{
3261 return E_NOTIMPL;
3262}
3263
3265{
3266 return E_NOTIMPL;
3267}
3268
3270{
3271 return E_NOTIMPL;
3272}
3273
3275{
3276 return E_NOTIMPL;
3277}
3278
3280{
3281 return E_NOTIMPL;
3282}
3283
3285{
3286 return E_NOTIMPL;
3287}
3288#ifdef __exdisp_h__
3289#define long LONG
3290#endif
3292{
3293 return E_NOTIMPL;
3294}
3295
3297{
3298 return E_NOTIMPL;
3299}
3300
3302{
3303 return E_NOTIMPL;
3304}
3305
3307{
3308 return E_NOTIMPL;
3309}
3310
3312{
3313 return E_NOTIMPL;
3314}
3315
3317{
3318 return E_NOTIMPL;
3319}
3320
3322{
3323 return E_NOTIMPL;
3324}
3325
3327{
3328 return E_NOTIMPL;
3329}
3330#ifdef __exdisp_h__
3331#undef long
3332#endif
3334{
3335 return E_NOTIMPL;
3336}
3337
3339{
3340 return E_NOTIMPL;
3341}
3342
3344{
3345 return E_NOTIMPL;
3346}
3347
3349{
3351 return S_OK;
3352}
3353
3355{
3356 return E_NOTIMPL;
3357}
3358
3360{
3361 return E_NOTIMPL;
3362}
3363
3365{
3366 return E_NOTIMPL;
3367}
3368
3370{
3371 return E_NOTIMPL;
3372}
3373
3375{
3377 return *pHWND ? S_OK : E_UNEXPECTED;
3378}
3379
3381{
3382 return E_NOTIMPL;
3383}
3384
3386{
3387 return E_NOTIMPL;
3388}
3389
3391{
3393 *pBool = hWnd && ::IsWindowVisible(hWnd) ? VARIANT_TRUE : VARIANT_FALSE;
3394 return S_OK;
3395}
3396
3398{
3400 {
3402 if (Value)
3405 }
3406 return S_OK;
3407}
3408
3410{
3411 *pBool = IsControlWindowShown(FCW_STATUS, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3412 return S_OK;
3413}
3414
3416{
3417 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3418 HRESULT hr = ShowControlWindow(FCW_STATUS, Value != VARIANT_FALSE);
3420 return hr;
3421}
3422
3424{
3425 return E_NOTIMPL;
3426}
3427
3429{
3430 SendControlMsg(FCW_STATUS, SB_SETTEXTW, 0, (LPARAM)StatusText, NULL);
3431 return S_OK;
3432}
3433
3435{
3436 *Value = IsControlWindowShown(FCW_INTERNETBAR, NULL) == S_OK;
3437 if (!*Value && IsControlWindowShown(FCW_TOOLBAR, NULL) == S_OK)
3438 *Value = FCW_TOOLBAR;
3439 return S_OK;
3440}
3441
3443{
3444 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3445 ShowControlWindow(FCW_INTERNETBAR, Value != VARIANT_FALSE && Value != FCW_TOOLBAR);
3446 ShowControlWindow(FCW_TOOLBAR, Value == FCW_TOOLBAR);
3448 return S_OK;
3449}
3450
3452{
3453 *Value = IsControlWindowShown(FCW_MENU, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3454 return S_OK;
3455}
3456
3458{
3459 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3460 HRESULT hr = ShowControlWindow(FCW_MENU, Value != VARIANT_FALSE);
3462 return hr;
3463}
3464
3466{
3467 *pbFullScreen = (m_BrowserSvcFlags & BSF_ROS_KIOSK) ? VARIANT_TRUE : VARIANT_FALSE;
3468 return S_OK;
3469}
3470
3472{
3473 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3474 SetFlags(bFullScreen ? BSF_ROS_KIOSK : 0, BSF_ROS_KIOSK);
3475 put_TheaterMode(bFullScreen);
3477 return S_OK;
3478}
3479
3481 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3482{
3483 LPITEMIDLIST pidl = NULL;
3484 HRESULT hResult;
3485 // called from drive combo box to navigate to a directory
3486 // Also called by search band to display shell results folder view
3487
3488 if (V_VT(URL) == VT_BSTR)
3489 {
3490 return this->Navigate(V_BSTR(URL), Flags, TargetFrameName, PostData, Headers);
3491 }
3492 if (V_VT(URL) == (VT_ARRAY | VT_UI1))
3493 {
3494 if (V_ARRAY(URL)->cDims != 1 || V_ARRAY(URL)->cbElements != 1)
3495 return E_INVALIDARG;
3496
3497 pidl = static_cast<LPITEMIDLIST>(V_ARRAY(URL)->pvData);
3498 }
3500 if (FAILED_UNEXPECTEDLY(hResult))
3501 return hResult;
3502 return S_OK;
3503}
3504
3506{
3507 OLECMD cmd = { (ULONG)cmdID, (DWORD)(*pcmdf) };
3508 HRESULT hr = QueryStatus(NULL, 1, &cmd, NULL);
3509 *pcmdf = (OLECMDF)cmd.cmdf;
3510 return hr;
3511}
3512
3514 VARIANT *pvaIn, VARIANT *pvaOut)
3515{
3519 if (SUCCEEDED(hr))
3520 hr = pOCT->Exec(NULL, cmdID, cmdexecopt, pvaIn, pvaOut);
3521 return hr;
3522}
3523
3525{
3526 CLSID classID;
3527 bool vertical;
3528
3529 // called to show search bar
3530 if (V_VT(pvaClsid) != VT_BSTR)
3531 return E_INVALIDARG;
3532 CLSIDFromString(V_BSTR(pvaClsid), &classID);
3533 // TODO: properly compute the value of vertical
3534 vertical = true;
3535 return ShowBand(classID, vertical);
3536}
3537
3539{
3540 return E_NOTIMPL;
3541}
3542
3544{
3545 return E_NOTIMPL;
3546}
3547
3549{
3550 return E_NOTIMPL;
3551}
3552
3554{
3555 return E_NOTIMPL;
3556}
3557
3559{
3560 return E_NOTIMPL;
3561}
3562
3564{
3565 *pbRegister = (m_BrowserSvcFlags & BSF_ROS_REGBROWSER) ? VARIANT_TRUE : VARIANT_FALSE;
3566 return S_OK;
3567}
3568
3570{
3571 if (!bRegister)
3572 return E_UNEXPECTED;
3574 return RegisterWindow(TRUE, SWC_3RDPARTY);
3575}
3576
3578{
3579 *pbRegister = (m_BrowserSvcFlags & BSF_REGISTERASDROPTARGET) ? VARIANT_TRUE : VARIANT_FALSE;
3580 return S_OK;
3581}
3582
3584{
3585 SetFlags(bRegister ? BSF_REGISTERASDROPTARGET : 0, BSF_REGISTERASDROPTARGET);
3586 return S_OK;
3587}
3588
3590{
3591 *pbRegister = (m_BrowserSvcFlags & BSF_THEATERMODE) ? VARIANT_TRUE : VARIANT_FALSE;
3592 return S_OK;
3593}
3594
3596{
3597 BOOL handled;
3598 OnToggleFullscreen(bRegister, 0, NULL, handled);
3599 return S_OK;
3600}
3601
3603{
3604 *Value = IsControlWindowShown(FCW_ADDRESSBAR, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3605 return S_OK;
3606}
3607
3609{
3610 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3611 HRESULT hr = ShowControlWindow(FCW_ADDRESSBAR, Value != VARIANT_FALSE);
3613 return hr;
3614}
3615
3617{
3618 *Value = (m_BrowserSvcFlags & BSF_RESIZABLE) ? VARIANT_TRUE : VARIANT_FALSE;
3619 return E_NOTIMPL;
3620}
3621
3623{
3624 SetFlags(Value ? (BSF_RESIZABLE | BSF_CANMAXIMIZE) : 0, (BSF_RESIZABLE | BSF_CANMAXIMIZE));
3625 return S_OK;
3626}
3627
3629{
3630 return E_NOTIMPL;
3631}
3632
3634{
3635 if (pWinData == NULL)
3636 return E_POINTER;
3637
3638 pWinData->dwWindowID = -1;
3639 pWinData->uiCP = 0;
3640 pWinData->pidl = ILClone(fCurrentDirectoryPIDL);
3641 pWinData->lpszUrl = NULL;
3642 pWinData->lpszUrlLocation = NULL;
3643 pWinData->lpszTitle = NULL;
3644 return S_OK;
3645}
3646
3648{
3649 return E_NOTIMPL;
3650}
3651
3653{
3654 return E_NOTIMPL;
3655}
3656
3658{
3659 CComPtr<IPersistHistory> viewPersistHistory;
3660 CComPtr<IOleObject> viewHistoryObject;
3661 persistState oldState;
3662 ULONG numRead;
3663 LPITEMIDLIST pidl;
3664 HRESULT hResult;
3665
3666 hResult = pStream->Read(&oldState, sizeof(oldState), &numRead);
3667 if (FAILED_UNEXPECTEDLY(hResult))
3668 return hResult;
3669 if (numRead != sizeof(oldState) || oldState.dwSize != sizeof(oldState))
3670 return E_FAIL;
3671 if (oldState.browseType != 2)
3672 return E_FAIL;
3673 pidl = static_cast<LPITEMIDLIST>(CoTaskMemAlloc(oldState.pidlSize));
3674 if (pidl == NULL)
3675 return E_OUTOFMEMORY;
3676 hResult = pStream->Read(pidl, oldState.pidlSize, &numRead);
3677 if (FAILED_UNEXPECTEDLY(hResult))
3678 {
3679 ILFree(pidl);
3680 return hResult;
3681 }
3682 if (numRead != oldState.pidlSize)
3683 {
3684 ILFree(pidl);
3685 return E_FAIL;
3686 }
3687 hResult = CoCreateInstance(oldState.persistClass, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER,
3688 IID_PPV_ARG(IOleObject, &viewHistoryObject));
3689 fHistoryObject = viewHistoryObject;
3690 fHistoryStream = pStream;
3691 fHistoryBindContext = pbc;
3692 hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
3696 ILFree(pidl);
3697 if (FAILED_UNEXPECTEDLY(hResult))
3698 return hResult;
3699 return S_OK;
3700}
3701
3703{
3704 CComPtr<IPersistHistory> viewPersistHistory;
3705 persistState newState;
3706 HRESULT hResult;
3707
3708 hResult = fCurrentShellView->GetItemObject(
3709 SVGIO_BACKGROUND, IID_PPV_ARG(IPersistHistory, &viewPersistHistory));
3710 memset(&newState, 0, sizeof(newState));
3711 newState.dwSize = sizeof(newState);
3712 newState.browseType = 2;
3713 newState.browserIndex = GetBrowserIndex();
3714 if (viewPersistHistory.p != NULL)
3715 {
3716 hResult = viewPersistHistory->GetClassID(&newState.persistClass);
3717 if (FAILED_UNEXPECTEDLY(hResult))
3718 return hResult;
3719 }
3721 hResult = pStream->Write(&newState, sizeof(newState), NULL);
3722 if (FAILED_UNEXPECTEDLY(hResult))
3723 return hResult;
3724 hResult = pStream->Write(fCurrentDirectoryPIDL, newState.pidlSize, NULL);
3725 if (FAILED_UNEXPECTEDLY(hResult))
3726 return hResult;
3727 if (viewPersistHistory.p != NULL)
3728 {
3729 hResult = viewPersistHistory->SaveHistory(pStream);
3730 if (FAILED_UNEXPECTEDLY(hResult))
3731 return hResult;
3732 }
3733 return S_OK;
3734}
3735
3737{
3738 return E_NOTIMPL;
3739}
3740
3742{
3743 return E_NOTIMPL;
3744}
3745
3747{
3748 OnCreate(reinterpret_cast<LPCREATESTRUCT> (lParam));
3749 return 0;
3750}
3751
3753{
3754 HRESULT hr;
3755 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK))
3756 {
3758 put_MenuBar(VARIANT_TRUE);
3760 put_StatusBar(VARIANT_TRUE);
3761 }
3762 SaveViewState();
3763
3764 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
3766
3767 // TODO: rip down everything
3768 {
3769 m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction
3770 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
3772 fCurrentShellView->DestroyViewWindow();
3773
3774 for (int i = 0; i < 3; i++)
3775 {
3778 CComPtr<IUnknown> pBarSite;
3779
3780 if (fClientBars[i].clientBar == NULL)
3781 continue;
3782
3783 hr = fClientBars[i].clientBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pdw));
3785 continue;
3786
3787 /* We should destroy our basebarsite too */
3788 hr = pdw->QueryInterface(IID_PPV_ARG(IDeskBar, &bar));
3789 if (SUCCEEDED(hr))
3790 {
3791 hr = bar->GetClient(&pBarSite);
3792 if (SUCCEEDED(hr) && pBarSite)
3793 {
3795 hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient));
3796 if (SUCCEEDED(hr))
3797 pClient->SetDeskBarSite(NULL);
3798 }
3799 }
3800 pdw->CloseDW(0);
3801
3802 pBarSite = NULL;
3803 pdw = NULL;
3804 bar = NULL;
3805 ReleaseCComPtrExpectZero(fClientBars[i].clientBar);
3806 }
3807 ReleaseCComPtrExpectZero(fCurrentShellView);
3808 ReleaseCComPtrExpectZero(fTravelLog);
3809
3815 }
3816 PostQuitMessage(0);
3817 return 0;
3818}
3819
3821{
3822 CComPtr<IDockingWindow> dockingWindow;
3823 RECT availableBounds;
3824 static const INT excludeItems[] = {1, 1, 1, IDC_STATUSBAR, 0, 0};
3825 HRESULT hResult;
3826
3827 if (wParam != SIZE_MINIMIZED)
3828 {
3829 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
3830 for (INT x = 0; x < 3; x++)
3831 {
3832 if (fClientBars[x].clientBar)
3833 {
3834 hResult = fClientBars[x].clientBar->QueryInterface(
3835 IID_PPV_ARG(IDockingWindow, &dockingWindow));
3836 if (SUCCEEDED(hResult) && dockingWindow != NULL)
3837 {
3838 hResult = dockingWindow->ResizeBorderDW(
3839 &availableBounds, static_cast<IDropTarget *>(this), TRUE);
3840 break;
3841 }
3842 }
3843 }
3845 }
3846 return 1;
3847}
3848
3850{
3851 HMENU theMenu;
3852 LPARAM menuIndex = lParam;
3853
3854 theMenu = reinterpret_cast<HMENU>(wParam);
3855
3857 {
3858 menuIndex = 0;
3859 }
3860 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_EDIT))
3861 {
3862 menuIndex = 1;
3863 }
3864 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_VIEW))
3865 {
3866 UpdateViewMenu(theMenu);
3867 menuIndex = 2;
3868 }
3870 {
3871 menuIndex = 3;
3872 }
3873 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_TOOLS))
3874 {
3875 // FIXME: Remove once implemented
3878 menuIndex = 4;
3879 }
3880 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
3881 {
3882 menuIndex = 5;
3883 }
3884
3885 LRESULT ret = RelayMsgToShellView(uMsg, wParam, menuIndex, bHandled);
3886
3887 return ret;
3888}
3889
3891{
3893 return 0;
3894}
3895
3897{
3900 return 0;
3901}
3902
3904{
3907 return 0;
3908}
3909
3911{
3913 return 0;
3914}
3915
3916LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3917{
3918 return SendMessage(WM_CLOSE);
3919}
3920
3921LRESULT CShellBrowser::OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3922{
3924 HRESULT hResult = DoFolderOptions();
3925 if (FAILED(hResult))
3926 TRACE("DoFolderOptions failed with hResult=%08lx\n", hResult);
3927 return 0;
3928}
3929
3930LRESULT CShellBrowser::OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3931{
3932#ifndef __REACTOS__
3934#endif /* __REACTOS__ */
3935 return 0;
3936}
3937
3939{
3941 return 0;
3942}
3943
3944LRESULT CShellBrowser::OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3945{
3946 ShellAbout(m_hWnd, _T("ReactOS"), NULL, NULL);
3947 return 0;
3948}
3949
3950LRESULT CShellBrowser::OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3951{
3952 HRESULT hResult = GoBack();
3953 if (FAILED(hResult))
3954 TRACE("GoBack failed with hResult=%08lx\n", hResult);
3955 return 0;
3956}
3957
3958LRESULT CShellBrowser::OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3959{
3960 HRESULT hResult = GoForward();
3961 if (FAILED(hResult))
3962 TRACE("GoForward failed with hResult=%08lx\n", hResult);
3963 return 0;
3964}
3965
3966LRESULT CShellBrowser::OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3967{
3968 HRESULT hResult = NavigateToParent();
3969 if (FAILED(hResult))
3970 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3971 return 0;
3972}
3973
3974LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3975{
3976 HRESULT hResult = GoHome();
3977 if (FAILED(hResult))
3978 TRACE("GoHome failed with hResult=%08lx\n", hResult);
3979 return 0;
3980}
3981
3982LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3983{
3984 HRESULT hResult;
3985 if (LOBYTE(GetVersion()) < 6)
3986 hResult = NavigateToParent();
3987 else if (FAILED(hResult = GoBack()))
3988 hResult = GoForward();
3989
3990 if (FAILED(hResult))
3991 TRACE("Backspace navigation failed with hResult=%08lx\n", hResult);
3992 return 0;
3993}
3994
3996{
3998 if (FAILED(hr))
4000
4001 return hr;
4002}
4003
4004LRESULT CShellBrowser::OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4005{
4007 LPCITEMIDLIST pidlLast;
4010 return hr;
4011
4012 STRRET strret;
4013 hr = pParent->GetDisplayNameOf(pidlLast, SHGDN_FORPARSING, &strret);
4015 return 0;
4016
4017 CComHeapPtr<WCHAR> pszURL;
4018 hr = StrRetToStrW(&strret, NULL, &pszURL);
4020 return 0;
4021
4022 AddUrlToFavorites(m_hWnd, pszURL, NULL, TRUE);
4023 return 0;
4024}
4025
4026LRESULT CShellBrowser::OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4027{
4028 CComPtr<IShellFolder> psfDesktop;
4029 LPITEMIDLIST pidlFavs;
4030 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
4032 return 0;
4033
4034 hr = SHGetDesktopFolder(&psfDesktop);
4036 {
4037 ILFree(pidlFavs);
4038 return 0;
4039 }
4040
4041 hr = SHInvokeDefaultCommand(m_hWnd, psfDesktop, pidlFavs);
4042 ILFree(pidlFavs);
4044 return 0;
4045
4046 return 0;
4047}
4048
4050{
4052 m_settings.Save();
4054 return 0;
4055}
4056
4057LRESULT CShellBrowser::OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4058{
4059 HRESULT hResult;
4060 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4061 CGID_PrivCITCommands, ITID_TOOLBARLOCKED, 0, NULL, NULL);
4062 return 0;
4063}
4064
4066{
4067 HRESULT hResult;
4068 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4069 CGID_PrivCITCommands, ITID_TOOLBARBANDSHOWN, 0, NULL, NULL);
4070 return 0;
4071}
4072
4074{
4075 HRESULT hResult;
4076 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4077 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
4078 return 0;
4079}
4080
4082{
4083 HRESULT hResult;
4084 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4085 CGID_PrivCITCommands, ITID_LINKSBANDSHOWN, 0, NULL, NULL);
4086 return 0;
4087}
4088
4089LRESULT CShellBrowser::OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4090{
4091 HRESULT hResult;
4092 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4093 CGID_PrivCITCommands, ITID_TEXTLABELS, 0, NULL, NULL);
4094 return 0;
4095}
4096
4097LRESULT CShellBrowser::OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4098{
4099 HRESULT hResult;
4100 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4101 CGID_PrivCITCommands, ITID_CUSTOMIZEENABLED, 0, NULL, NULL);
4102 return 0;
4103}
4104
4105LRESULT CShellBrowser::OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4106{
4109 fCurrentShellView->Refresh();
4110 return 0;
4111}
4112
4113LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4114{
4115 return 0;
4116}
4117
4118LRESULT CShellBrowser::OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4119{
4120 // TODO: HACK ! use the proper mechanism to show the band (i.e. pass the BSTR to basebar)
4122 {
4123 MenuBandInfo *mbi;
4125 if (!mbi)
4126 return 0;
4127 ShowBand(mbi->barGuid, mbi->fVertical);
4128 bHandled = TRUE;
4129 return 1;
4130 }
4131 return 0;
4132}
4133
4134LRESULT CShellBrowser::OnToggleExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4135{
4136 UINT sbci = 0;
4137 switch (wID)
4138 {
4139 case IDM_EXPLORERBAR_SEARCH: sbci = 0x1c; break;
4140 case IDM_EXPLORERBAR_FAVORITES: sbci = 0x1e; break;
4141 case IDM_EXPLORERBAR_HISTORY: sbci = 0x1d; break;
4143 default: WARN("Unknown id %x\n", wID);
4144 }
4145 if (sbci)
4146 {
4147 this->Exec(&CGID_Explorer, sbci, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
4148 bHandled = TRUE;
4149 }
4150 return TRUE;
4151}
4152
4154{
4156 switch (LOWORD(wParam))
4157 {
4160 break;
4165 BrowseObject(pidl, SBSP_ABSOLUTE | SBSP_SAMEBROWSER | SBSP_ACTIVATE_NOFOCUS);
4166 return 0;
4167#if 0 // TODO: Toggle entire itbar(rebar) after LPTOOLBARITEM->fShow support is added
4169 break;
4170#endif
4171 }
4172
4175 return 0;
4176}
4177
4179{
4181 return 0;
4182}
4183
4185{
4186 /* Refresh child windows */
4188
4189 /* Refresh status bar */
4190 if (fStatusBar)
4191 {
4194 }
4195
4196 return 0;
4197}
4198
4200{
4201 if (!lParam)
4203
4205 return NO_ERROR;
4206}
4207
4208// WM_APPCOMMAND
4210{
4211 UINT uCmd = GET_APPCOMMAND_LPARAM(lParam), uExecCmd = 0;
4212 switch (uCmd)
4213 {
4214 case APPCOMMAND_BROWSER_BACKWARD: uExecCmd = IDM_GOTO_BACK; break;
4215 case APPCOMMAND_BROWSER_FORWARD: uExecCmd = IDM_GOTO_FORWARD; break;
4216 case APPCOMMAND_BROWSER_REFRESH: uExecCmd = IDM_VIEW_REFRESH; break;
4217 case APPCOMMAND_BROWSER_STOP: uExecCmd = FCIDM_BROWSER_STOP; break; // TODO: Handle Stop()
4218 case APPCOMMAND_BROWSER_SEARCH: uExecCmd = IDM_EXPLORERBAR_SEARCH; break;
4219 case APPCOMMAND_BROWSER_FAVORITES: uExecCmd = IDM_EXPLORERBAR_FAVORITES; break;
4220 case APPCOMMAND_BROWSER_HOME: uExecCmd = IDM_GOTO_HOMEPAGE; break;
4221 }
4222 if (uExecCmd)
4223 {
4224 SendMessage(WM_COMMAND, uExecCmd, 0);
4225 bHandled = TRUE;
4226 return TRUE;
4227 }
4228 return 0;
4229}
4230
4231LRESULT CShellBrowser::OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4232{
4233 const UINT OrgUiSetAuto = m_BrowserSvcFlags & BSF_UISETBYAUTOMATION;
4234 const BOOL fCurrentlyFullscreen = (m_BrowserSvcFlags & BSF_THEATERMODE);
4235 const BOOL fEnter = wID ? !fCurrentlyFullscreen : wNotifyCode;
4237 if (fEnter)
4238 {
4239 VARIANT_BOOL varb;
4240 m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? FSF_RESIZE : 0;
4241 m_NonFullscreenState |= (FAILED(get_MenuBar(&varb)) || varb) ? FSF_MBAR : 0;
4242 m_NonFullscreenState |= (FAILED(get_StatusBar(&varb)) || varb) ? FSF_SBAR : 0;
4244 SetFlags(BSF_THEATERMODE, BSF_THEATERMODE);
4245 put_MenuBar(VARIANT_FALSE);
4246 put_StatusBar(VARIANT_FALSE);
4252 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4253 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4255 }
4256 else
4257 {
4258 SetFlags(0, BSF_THEATERMODE);
4259 put_MenuBar((m_NonFullscreenState & FSF_MBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4260 put_StatusBar((m_NonFullscreenState & FSF_SBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4263 SHSetWindowBits(hWnd, GWL_STYLE, styles | WS_THICKFRAME, styles);
4268 }
4269 SetFlags(OrgUiSetAuto, BSF_UISETBYAUTOMATION);
4271 return 0;
4272}
4273
4275{
4277 return 0;
4278}
4279
4281{
4282 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK)) // Resize fullscreen on resolution change (CORE-20072)
4283 {
4287 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4288 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4290 }
4291 return 0;
4292}
4293
4295{
4296 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
4297}
4298
4300{
4303}
4304
4306{
4308 SHGDNF flags = SHGDN_FORADDRESSBAR;
4309
4311 flags |= SHGDN_FORPARSING;
4312
4315}
4316
4318{
4319 if (!gCabinetState.fSaveLocalView || (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_UISETBYAUTOMATION)))
4320 return;
4321#if 0 // If CDesktopBrowser aggregates us, skip saving
4323 if (fCurrentShellView && SUCCEEDED(fCurrentShellView->GetCurrentInfo(&fs)) && (fs.fFlags & FWF_DESKTOP))
4324 return;
4325#endif
4326
4328 CComPtr<IStream> pITBarStream;
4329 if (!fClientBars[BIInternetToolbar].clientBar.p)
4330 return;
4332 if (FAILED(hr))
4333 return;
4335 return;
4336 pPSI->Save(pITBarStream, TRUE);
4337}
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
LRESULT OnToggleExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
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
static void cleanup(void)
Definition: main.c:1335
LCID lcid
Definition: locale.c:5656
BOOL WINAPI PathIsUNCW(const WCHAR *path)
Definition: path.c:1013
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
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:4419
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:3591
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:3179
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3123
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:5410
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
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 FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:71
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
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
@ OLECMDEXECOPT_DONTPROMPTUSER
Definition: docobj.idl:207
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 C_ASSERT(e)
Definition: intsafe.h:73
#define LOBYTE(W)
Definition: jmemdos.c:487
#define TEXT(s)
Definition: k32.h:28
#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 LPCWSTR LPCWSTR DWORD dwFlags
Definition: env.c:37
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 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:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1498
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 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:731
#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:628
#define CSIDL_FAVORITES
Definition: shlobj.h:2185
#define TLMENUF_BACKANDFORTH
Definition: shlobj.h:2750
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2209
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2535
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:644
#define FCIDM_MENU_HELP
Definition: shlobj.h:641
#define FCIDM_MENU_FILE
Definition: shlobj.h:635
#define TLOG_FORE
Definition: shlobj.h:2744
#define FCIDM_MENU_TOOLS
Definition: shlobj.h:639
#define TLMENUF_CHECKCURRENT
Definition: shlobj.h:2747
#define FCIDM_MENU_EXPLORE
Definition: shlobj.h:643
#define FCIDM_MENU_VIEW
Definition: shlobj.h:637
#define CSIDL_DRIVES
Definition: shlobj.h:2195
#define TLOG_BACK
Definition: shlobj.h:2743
#define FCIDM_MENU_EDIT
Definition: shlobj.h:636
@ REST_NOSAVESET
Definition: shlobj.h:1650
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:619
#define SBCMDID_EXPLORERBARFOLDERS
Definition: shlobj_undoc.h:93
#define FCIDM_SHBROWSER_REFRESH
Definition: shlobj_undoc.h:73
#define FCIDM_SHBROWSER_OPTIONS
Definition: shlobj_undoc.h:77
#define FCIDM_SHBROWSER_FINDFILES
Definition: shlobj_undoc.h:76
#define FCIDM_CABINET_NT5_GOTO_DRIVES
Definition: shlobj_undoc.h:78
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:115
#define FCIDM_CABINET_REFRESH
Definition: shlobj_undoc.h:81
#define FCIDM_CABINET_TOGGLEITBAR
Definition: shlobj_undoc.h:79
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:116
#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
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:889
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:2398
BOOL fSaveLocalView
Definition: shlobj.h:2394
BOOL fFullPathTitle
Definition: shlobj.h:2393
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:3887
DWORD cbSize
Definition: winuser.h:3886
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:922
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:920
#define ITID_TEXTLABELS
Definition: undocshell.h:919
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:923
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:925
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:921
#define CWM_STATECHANGE
Definition: undocshell.h:244
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:926
#define ITBBID_MENUBAND
Definition: undocshell.h:911
_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
_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:1753
#define GetModuleHandle
Definition: winbase.h:3868
#define OutputDebugString
Definition: winbase.h:3931
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2808
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
_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:5902
#define SW_HIDE
Definition: winuser.h:779
#define WM_CLOSE
Definition: winuser.h:1649
#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:1636
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:1639
#define SWP_NOMOVE
Definition: winuser.h:1255
#define WM_COMMAND
Definition: winuser.h:1768
BOOL WINAPI SetForegroundWindow(_In_ HWND)
#define IDC_ARROW
Definition: winuser.h:695
#define WM_APPCOMMAND
Definition: winuser.h:1910
#define VK_CONTROL
Definition: winuser.h:2239
#define InsertMenuItem
Definition: winuser.h:5915
#define SW_SHOWNOACTIVATE
Definition: winuser.h:785
#define WM_SETFOCUS
Definition: winuser.h:1641
#define SetMenuItemInfo
Definition: winuser.h:5961
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:2542
BOOL WINAPI IsMenu(_In_ HMENU)
#define CS_DBLCLKS
Definition: winuser.h:659
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1654
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:1673
#define SM_CXFULLSCREEN
Definition: winuser.h:988
#define HWND_DESKTOP
Definition: winuser.h:1220
#define WM_SETTINGCHANGE
Definition: winuser.h:1657
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:1774
#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:5924
#define RDW_FRAME
Definition: winuser.h:1223
#define SendMessage
Definition: winuser.h:5954
#define WS_EX_WINDOWEDGE
Definition: winuser.h:407
#define LoadCursor
Definition: winuser.h:5923
#define SM_CYFULLSCREEN
Definition: winuser.h:989
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5830
#define LoadMenu
Definition: winuser.h:5928
#define WM_MEASUREITEM
Definition: winuser.h:1674
#define PostMessage
Definition: winuser.h:5943
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define WM_NCDESTROY
Definition: winuser.h:1712
#define SWP_NOOWNERZORDER
Definition: winuser.h:1260
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_USER
Definition: winuser.h:1923
#define IDC_WAIT
Definition: winuser.h:697
#define SW_SHOW
Definition: winuser.h:786
#define WM_DESTROY
Definition: winuser.h:1637
#define SetWindowText
Definition: winuser.h:5968
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:3008
#define SWP_NOZORDER
Definition: winuser.h:1258
#define SystemParametersInfo
Definition: winuser.h:5969
#define GWL_STYLE
Definition: winuser.h:863
#define InsertMenu
Definition: winuser.h:5914
#define GetMenuItemInfo
Definition: winuser.h:5899
#define WM_MENUSELECT
Definition: winuser.h:1775
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:2405
#define WM_SETREDRAW
Definition: winuser.h:1644
_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