ReactOS 0.4.16-dev-1946-g52006dd
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
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 // Called by shell view to browse to new folder
911 // also called by explorer band to navigate to new folder
912 CComPtr<IShellFolder> newFolder;
914
915 HRESULT hr = SHBindToFolder(pidl, &newFolder);
917 return hr;
918
919 hr = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
921 return hr;
922 return S_OK;
923}
924
926{
927 LPCITEMIDLIST pidlnext;
928 WORD length;
929 BOOL ret;
930
931 ret = TRUE;
932 if (! _ILIsDesktop(pidl))
933 {
934 length = pidl->mkid.cb;
935 pidlnext =
936 reinterpret_cast<LPCITEMIDLIST>(
937 reinterpret_cast<const BYTE *>(pidl) + length);
938 if (pidlnext->mkid.cb != 0)
939 ret = FALSE;
940 }
941 return ret;
942}
943
945 const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
946{
948 LPITEMIDLIST pidlChild;
949 LPITEMIDLIST pidlParent;
950 HRESULT hResult;
951
952 hResult = E_FAIL;
953 if (ppv == NULL)
954 return E_POINTER;
955 *ppv = NULL;
956 if (ppidlLast != NULL)
957 *ppidlLast = NULL;
958 if (_ILIsPidlSimple(pidl))
959 {
960 if (ppidlLast != NULL)
961 *ppidlLast = ILClone(pidl);
962 hResult = SHGetDesktopFolder((IShellFolder **)ppv);
963 }
964 else
965 {
966 pidlChild = ILClone(ILFindLastID(pidl));
967 pidlParent = ILClone(pidl);
968 ILRemoveLastID(pidlParent);
969 hResult = SHGetDesktopFolder(&psf);
970 if (SUCCEEDED(hResult))
971 hResult = psf->BindToObject(pidlParent, NULL, *riid, ppv);
972 if (SUCCEEDED(hResult) && ppidlLast != NULL)
973 *ppidlLast = pidlChild;
974 else
975 ILFree(pidlChild);
976 ILFree(pidlParent);
977 }
978 return hResult;
979}
980
982 LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
983{
984 CComPtr<IShellFolder> parentFolder;
985 LPITEMIDLIST childPIDL = NULL;
986 STRRET L108;
987 HRESULT hResult;
988
989 hResult = SHBindToFolderIDListParent(NULL, pidl, &IID_PPV_ARG(IShellFolder, &parentFolder), &childPIDL);
990 if (FAILED(hResult))
991 goto cleanup;
992
993 hResult = parentFolder->GetDisplayNameOf(childPIDL, uFlags, &L108);
994 if (FAILED(hResult))
995 goto cleanup;
996
997 StrRetToBufW(&L108, childPIDL, pszBuf, cchBuf);
998 if (rgfInOut)
999 {
1000 hResult = parentFolder->GetAttributesOf(1, const_cast<LPCITEMIDLIST *>(&childPIDL), rgfInOut);
1001 if (FAILED(hResult))
1002 goto cleanup;
1003 }
1004
1005 hResult = S_OK;
1006
1007cleanup:
1008 if (childPIDL)
1009 ILFree(childPIDL);
1010 return hResult;
1011}
1012
1014{
1015 return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
1016}
1017
1019{
1020 // TODO: Also respect EBO_NOPERSISTVIEWSTATE?
1022 fCurrentShellView->SaveViewState();
1023}
1024
1026 LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
1027{
1028 CComPtr<IShellFolder> saveCurrentShellFolder;
1029 CComPtr<IShellView> saveCurrentShellView;
1030 CComPtr<IShellView> newShellView;
1031 CComPtr<ITravelLog> travelLog;
1032 HWND newShellViewWindow;
1033 BOOL windowUpdateIsLocked;
1034 RECT shellViewWindowBounds;
1035 HWND previousView;
1036 HCURSOR saveCursor;
1037 wchar_t newTitle[MAX_PATH];
1038 SHGDNF nameFlags;
1039 HRESULT hResult;
1040 //TODO: BOOL nohistory = m_BrowserSvcFlags & BSF_NAVNOHISTORY;
1041
1042 if (m_Destroyed)
1043 return S_FALSE;
1044
1045 if (newShellFolder == NULL)
1046 return E_INVALIDARG;
1047
1048 hResult = GetTravelLog(&travelLog);
1049 if (FAILED_UNEXPECTEDLY(hResult))
1050 return hResult;
1051
1052 if (FAILED_UNEXPECTEDLY(hResult = SHILClone(absolutePIDL, &absolutePIDL)))
1053 return hResult;
1054 CComHeapPtr<ITEMIDLIST> pidlAbsoluteClone(const_cast<LPITEMIDLIST>(absolutePIDL));
1055
1056 // update history
1058 {
1059 if (travelLog->CountEntries(static_cast<IDropTarget *>(this)) > 0)
1060 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1061 // what to do with error? Do we want to halt browse because state save failed?
1062 }
1063
1065 {
1066 SaveViewState();
1067 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
1068 }
1069
1070 // create view object
1071 hResult = newShellFolder->CreateViewObject(m_hWnd, IID_PPV_ARG(IShellView, &newShellView));
1072 if (FAILED_UNEXPECTEDLY(hResult))
1073 return hResult;
1074 previousView = fCurrentShellViewWindow;
1075
1076 // enter updating section
1077 saveCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
1078 windowUpdateIsLocked = LockWindowUpdate(TRUE);
1079 if (fCurrentShellView != NULL)
1081
1082 // set site
1083 hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
1084
1085 // update folder and view
1086 saveCurrentShellFolder = fCurrentShellFolder;
1087 saveCurrentShellView = fCurrentShellView;
1088 fCurrentShellFolder = newShellFolder;
1089 fCurrentShellView = newShellView;
1090
1091 // get boundary
1092 if (previousView != NULL)
1093 ::GetWindowRect(previousView, &shellViewWindowBounds);
1094 else
1095 ZeroMemory(&shellViewWindowBounds, sizeof(shellViewWindowBounds));
1096 ::MapWindowPoints(0, m_hWnd, reinterpret_cast<POINT *>(&shellViewWindowBounds), 2);
1097
1098 // update current pidl
1100 fCurrentDirectoryPIDL = pidlAbsoluteClone.Detach();
1101 /* CORE-19697: CAddressEditBox::OnWinEvent(CBN_SELCHANGE) causes CAddressEditBox to
1102 * call BrowseObject(pidlLastParsed). As part of our browsing we call FireNavigateComplete
1103 * and this in turn causes CAddressEditBox::Invoke to ILFree(pidlLastParsed)!
1104 * We then call SHBindToParent on absolutePIDL (which is really (the now invalid) pidlLastParsed) and we
1105 * end up accessing invalid memory! We therefore set absolutePIDL to be our cloned PIDL here.
1106 */
1107 absolutePIDL = fCurrentDirectoryPIDL;
1108
1109 // create view window
1110 SHELLVIEWID vid;
1111 SV2CVW2_PARAMS cvw2 = { sizeof(cvw2), saveCurrentShellView, folderSettings, this, &shellViewWindowBounds, NULL };
1112
1113 CComPtr<IShellView2> newShellView2;
1114 if (SUCCEEDED(newShellView->QueryInterface(IID_PPV_ARG(IShellView2, &newShellView2))))
1115 {
1116 if (SUCCEEDED(newShellView2->GetView(&vid, SV2GV_DEFAULTVIEW)))
1117 cvw2.pvid = &vid;
1118 hResult = newShellView2->CreateViewWindow2(&cvw2);
1119 }
1120 else
1121 {
1122 hResult = newShellView->CreateViewWindow(cvw2.psvPrev, cvw2.pfs, this, cvw2.prcView, &cvw2.hwndView);
1123 }
1124 newShellViewWindow = cvw2.hwndView;
1125
1126 if (FAILED_UNEXPECTEDLY(hResult) || newShellViewWindow == NULL)
1127 {
1128 fCurrentShellView = saveCurrentShellView;
1129 fCurrentShellFolder = saveCurrentShellFolder;
1131 if (windowUpdateIsLocked)
1133 SetCursor(saveCursor);
1134 return hResult;
1135 }
1136
1137 // update view window
1138 if (saveCurrentShellView != NULL)
1139 saveCurrentShellView->DestroyViewWindow();
1140 fCurrentShellViewWindow = newShellViewWindow;
1141
1142 if (previousView == NULL)
1143 {
1145 }
1146
1147 // no use
1148 saveCurrentShellView.Release();
1149 saveCurrentShellFolder.Release();
1150
1151 hResult = newShellView->UIActivate((flags & BTP_ACTIVATE_NOFOCUS) ? SVUIA_ACTIVATE_NOFOCUS : SVUIA_ACTIVATE_FOCUS);
1152
1153 // leave updating section
1154 if (windowUpdateIsLocked)
1156 SetCursor(saveCursor);
1157
1158 // update history
1160 {
1161 hResult = travelLog->AddEntry(static_cast<IDropTarget *>(this), FALSE);
1162 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1163 }
1164
1165 // completed
1166 nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
1167 hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
1168 sizeof(newTitle) / sizeof(wchar_t), NULL);
1169 if (SUCCEEDED(hResult))
1170 {
1171 FireNavigateComplete(newTitle);
1172 }
1173 else
1174 {
1175 FireNavigateComplete(L"ERROR");
1176 }
1177
1179
1180 LPCITEMIDLIST pidlChild;
1181 HIMAGELIST himlSmall, himlLarge;
1182
1184 hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
1185 if (SUCCEEDED(hResult))
1186 {
1187 INT indexOpen;
1188 SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
1189
1190 Shell_GetImageLists(&himlLarge, &himlSmall);
1191
1192 HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
1193 HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
1194
1195 /* Hack to make it possible to release the old icons */
1196 /* Something seems to go wrong with WM_SETICON */
1197 HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
1198 HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
1199
1200 SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
1201 SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
1202
1203 DestroyIcon(oldSmall);
1204 DestroyIcon(oldLarge);
1205 }
1206
1208 hResult = UpdateForwardBackState();
1209 hResult = UpdateUpState();
1210 return S_OK;
1211}
1212
1214{
1215 CComPtr<IBandSite> bandSite;
1216 CComPtr<IDeskBand> deskBand;
1217 HRESULT hResult;
1218
1219 if (!fClientBars[BIInternetToolbar].clientBar)
1220 return E_FAIL;
1221
1223 if (FAILED_UNEXPECTEDLY(hResult))
1224 return hResult;
1225
1226 hResult = bandSite->QueryBand(ITBBID_MENUBAND, &deskBand, NULL, NULL, 0);
1227 return FAILED(hResult) ? hResult : deskBand->QueryInterface(riid, shellMenu); // It is expected that this might fail during WM_DESTROY
1228}
1229
1230HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
1231{
1232 CComPtr<IUnknown> newBaseBar;
1233 CComPtr<IDeskBar> deskBar;
1234 CComPtr<IUnknown> newBaseBarSite;
1235 CComPtr<IDeskBarClient> deskBarClient;
1236 IUnknown **cache;
1237 HRESULT hResult;
1238
1239 if (vertical)
1241 else
1243 if (*cache == NULL)
1244 {
1245 hResult = CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBar), vertical);
1246 if (FAILED_UNEXPECTEDLY(hResult))
1247 return hResult;
1248 hResult = CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBarSite), vertical);
1249 if (FAILED_UNEXPECTEDLY(hResult))
1250 return hResult;
1251
1252 // we have to store our basebar into cache now
1253 *cache = newBaseBar;
1254 (*cache)->AddRef();
1255
1256 // tell the new base bar about the shell browser
1257 hResult = IUnknown_SetSite(newBaseBar, static_cast<IDropTarget *>(this));
1258 if (FAILED_UNEXPECTEDLY(hResult))
1259 return hResult;
1260
1261 // tell the new base bar about the new base bar site
1262 hResult = newBaseBar->QueryInterface(IID_PPV_ARG(IDeskBar, &deskBar));
1263 if (FAILED_UNEXPECTEDLY(hResult))
1264 return hResult;
1265 hResult = deskBar->SetClient(newBaseBarSite);
1266 if (FAILED_UNEXPECTEDLY(hResult))
1267 return hResult;
1268
1269 // tell the new base bar site about the new base bar
1270 hResult = newBaseBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &deskBarClient));
1271 if (FAILED_UNEXPECTEDLY(hResult))
1272 return hResult;
1273 hResult = deskBarClient->SetDeskBarSite(newBaseBar);
1274 if (FAILED_UNEXPECTEDLY(hResult))
1275 return hResult;
1276
1277 }
1278 return (*cache)->QueryInterface(riid, theBaseBar);
1279}
1280
1281BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
1282{
1283 HRESULT hResult;
1284 CComPtr<IDeskBar> deskBar;
1285 CComPtr<IUnknown> baseBarSite;
1286 CComPtr<IBandSite> bandSite;
1287 CLSID clsidTmp;
1288 DWORD numBands;
1289 DWORD dwBandID;
1290 DWORD i;
1291
1292 /* Get our basebarsite to be able to enumerate bands */
1293 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1294 if (FAILED_UNEXPECTEDLY(hResult))
1295 return FALSE;
1296 hResult = deskBar->GetClient(&baseBarSite);
1297 if (FAILED_UNEXPECTEDLY(hResult))
1298 return FALSE;
1299 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &bandSite));
1300 if (FAILED_UNEXPECTEDLY(hResult))
1301 return FALSE;
1302
1303 numBands = bandSite->EnumBands(-1, NULL);
1304 for (i = 0; i < numBands; i++)
1305 {
1306 CComPtr<IPersist> bandPersist;
1307
1308 hResult = bandSite->EnumBands(i, &dwBandID);
1309 if (FAILED_UNEXPECTEDLY(hResult))
1310 return FALSE;
1311
1312 hResult = bandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &bandPersist));
1313 if (FAILED_UNEXPECTEDLY(hResult))
1314 return FALSE;
1315 hResult = bandPersist->GetClassID(&clsidTmp);
1316 if (FAILED_UNEXPECTEDLY(hResult))
1317 return FALSE;
1318 if (IsEqualGUID(clsidBand, clsidTmp))
1319 {
1320 if (pdwBandID) *pdwBandID = dwBandID;
1321 return TRUE;
1322 }
1323 }
1324 return FALSE;
1325}
1326
1327HRESULT CShellBrowser::ShowBand(const CLSID &classID, bool vertical)
1328{
1329 CComPtr<IDockingWindow> dockingWindow;
1330 CComPtr<IUnknown> baseBarSite;
1331 CComPtr<IUnknown> newBand;
1332 CComPtr<IDeskBar> deskBar;
1333 VARIANT vaIn;
1334 HRESULT hResult;
1335 DWORD dwBandID;
1336
1337 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1338 if (FAILED_UNEXPECTEDLY(hResult))
1339 return hResult;
1340
1341 hResult = deskBar->GetClient(&baseBarSite);
1342 if (FAILED_UNEXPECTEDLY(hResult))
1343 return hResult;
1344
1345 hResult = deskBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
1346 if (FAILED_UNEXPECTEDLY(hResult))
1347 return hResult;
1348
1349 if (!IsBandLoaded(classID, vertical, &dwBandID))
1350 {
1351 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID), vertical);
1352 if (IsEqualCLSID(CLSID_ExplorerBand, classID))
1353 {
1354 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1356 if (FAILED_UNEXPECTEDLY(hResult))
1357 return hResult;
1358 }
1359 else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
1360 {
1361 TRACE("CLSID_FileSearchBand requested, building internal band.\n");
1362 hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
1363 if (FAILED_UNEXPECTEDLY(hResult))
1364 return hResult;
1365 }
1366 else
1367 {
1368 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1369 hResult = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, &newBand));
1370 if (FAILED_UNEXPECTEDLY(hResult))
1371 return hResult;
1372 }
1373 }
1374 else
1375 {
1376 CComPtr<IBandSite> pBandSite;
1377
1378 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &pBandSite));
1379 if (!SUCCEEDED(hResult))
1380 {
1381 ERR("Can't get IBandSite interface\n");
1382 return E_FAIL;
1383 }
1384 hResult = pBandSite->GetBandObject(dwBandID, IID_PPV_ARG(IUnknown, &newBand));
1385 if (!SUCCEEDED(hResult))
1386 {
1387 ERR("Can't find band object\n");
1388 return E_FAIL;
1389 }
1390
1391 // It's hackish, but we should be able to show the wanted band until we
1392 // find the proper way to do this (but it seems to work to add a new band)
1393 // Here we'll just re-add the existing band to the site, causing it to display.
1394 }
1395 V_VT(&vaIn) = VT_UNKNOWN;
1396 V_UNKNOWN(&vaIn) = newBand.p;
1397 hResult = IUnknown_Exec(baseBarSite, CGID_IDeskBand, 1, 1, &vaIn, NULL);
1398 if (FAILED_UNEXPECTEDLY(hResult))
1399 {
1400 return hResult;
1401 }
1402
1403 hResult = dockingWindow->ShowDW(TRUE);
1404 if (FAILED_UNEXPECTEDLY(hResult))
1405 return hResult;
1406
1407 if (vertical)
1408 {
1409 fCurrentVertBar = classID;
1411 }
1412
1413 return S_OK;
1414}
1415
1417{
1419 if (newDirectory == NULL)
1420 return E_OUTOFMEMORY;
1421 if (_ILIsDesktop(newDirectory))
1422 {
1423 ILFree(newDirectory);
1424 return E_INVALIDARG;
1425 }
1426 ILRemoveLastID(newDirectory);
1428 ILFree(newDirectory);
1429 if (FAILED_UNEXPECTEDLY(hResult))
1430 return hResult;
1431 return S_OK;
1432}
1433
1435{
1436 PROPSHEETHEADER* sheetInfo = reinterpret_cast<PROPSHEETHEADER*>(lParam);
1437 if (sheetInfo->nPages >= folderOptionsPageCountMax)
1438 return FALSE;
1439 sheetInfo->phpage[sheetInfo->nPages] = thePage;
1440 sheetInfo->nPages++;
1441 return TRUE;
1442}
1443
1445{
1446 CComPtr<IShellPropSheetExt> folderOptionsSheet;
1447 PROPSHEETHEADER m_PropSheet;
1449// CComPtr<IGlobalFolderSettings> globalSettings;
1450// SHELLSTATE2 shellState;
1451 HRESULT hResult;
1452
1453 memset(m_psp, 0, sizeof(m_psp));
1454 memset(&m_PropSheet, 0, sizeof(m_PropSheet));
1455
1456 // create sheet object
1457 hResult = CoCreateInstance(CLSID_ShellFldSetExt, NULL, CLSCTX_INPROC_SERVER,
1458 IID_PPV_ARG(IShellPropSheetExt, &folderOptionsSheet));
1459 if (FAILED_UNEXPECTEDLY(hResult))
1460 return E_FAIL;
1461
1462 // must set site in order for Apply to all Folders on Advanced page to be enabled
1463 hResult = IUnknown_SetSite(folderOptionsSheet, static_cast<IDispatch *>(this));
1464 m_PropSheet.phpage = m_psp;
1465
1466#if 0
1467 hResult = CoCreateInstance(CLSID_GlobalFolderSettings, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IGlobalFolderSettings, &globalSettings));
1468 if (FAILED_UNEXPECTEDLY(hResult))
1469 return E_FAIL;
1470 hResult = globalSettings->Get(&shellState, sizeof(shellState));
1471 if (FAILED_UNEXPECTEDLY(hResult))
1472 return E_FAIL;
1473#endif
1474
1475 // add pages
1476 hResult = folderOptionsSheet->AddPages(AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1477 if (FAILED_UNEXPECTEDLY(hResult))
1478 return E_FAIL;
1479
1481 {
1482 hResult = fCurrentShellView->AddPropertySheetPages(
1483 0, AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1484 if (FAILED_UNEXPECTEDLY(hResult))
1485 return E_FAIL;
1486 }
1487
1488 // show sheet
1489 CStringW strFolderOptions(MAKEINTRESOURCEW(IDS_FOLDER_OPTIONS));
1490 m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
1491 m_PropSheet.dwFlags = 0;
1492 m_PropSheet.hwndParent = m_hWnd;
1493 m_PropSheet.hInstance = _AtlBaseModule.GetResourceInstance();
1494 m_PropSheet.pszCaption = strFolderOptions;
1495 m_PropSheet.nStartPage = 0;
1496 PropertySheet(&m_PropSheet);
1497 return S_OK;
1498}
1499
1501{
1502 CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
1503 _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1504 LRESULT lResult;
1505 const _ATL_MSG *previousMessage;
1506 BOOL handled;
1507 WNDPROC saveWindowProc;
1508 HRESULT hResult;
1509
1510 hWnd = pThis->m_hWnd;
1511 previousMessage = pThis->m_pCurrentMsg;
1512 pThis->m_pCurrentMsg = &msg;
1513
1514 /* If the shell browser is initialized, let the menu band preprocess the messages */
1515 if (pThis->fCurrentDirectoryPIDL)
1516 {
1517 CComPtr<IMenuBand> menuBand;
1518 hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
1519 if (SUCCEEDED(hResult) && menuBand.p != NULL)
1520 {
1521 hResult = menuBand->TranslateMenuMessage(&msg, &lResult);
1522 if (hResult == S_OK)
1523 return lResult;
1524 uMsg = msg.message;
1525 wParam = msg.wParam;
1526 lParam = msg.lParam;
1527 }
1528 }
1529
1530 handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1531 ATLASSERT(pThis->m_pCurrentMsg == &msg);
1532 if (handled == FALSE)
1533 {
1534 if (uMsg == WM_NCDESTROY)
1535 {
1536 saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC));
1537 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1538 if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC)))
1540 pThis->m_dwState |= WINSTATE_DESTROYED;
1541 }
1542 else
1543 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1544 }
1545 pThis->m_pCurrentMsg = previousMessage;
1546 if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1547 {
1548 pThis->m_dwState &= ~WINSTATE_DESTROYED;
1549 pThis->m_hWnd = NULL;
1550 pThis->OnFinalMessage(hWnd);
1551 }
1552 return lResult;
1553}
1554
1556{
1557 RECT clientRect;
1558 RECT statusRect;
1559 int x;
1560
1561 GetClientRect(&clientRect);
1562
1564 {
1565 ::GetWindowRect(fStatusBar, &statusRect);
1566 ::SetWindowPos(fStatusBar, NULL, clientRect.left, clientRect.bottom - (statusRect.bottom - statusRect.top),
1567 clientRect.right - clientRect.left,
1568 statusRect.bottom - statusRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1569 clientRect.bottom -= statusRect.bottom - statusRect.top;
1570 }
1571
1572 for (x = 0; x < 3; x++)
1573 {
1575 RECT borderSpace = fClientBars[x].borderSpace;
1576 if (hwnd == NULL && fClientBars[x].clientBar != NULL)
1577 {
1578 IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
1580 }
1581 if (hwnd != NULL)
1582 {
1583 RECT toolbarRect = clientRect;
1584 if (borderSpace.top != 0)
1585 {
1586 toolbarRect.bottom = toolbarRect.top + borderSpace.top;
1587 }
1588 else if (borderSpace.bottom != 0)
1589 {
1590 toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
1591 }
1592 else if (borderSpace.left != 0)
1593 {
1594 toolbarRect.right = toolbarRect.left + borderSpace.left;
1595 }
1596 else if (borderSpace.right != 0)
1597 {
1598 toolbarRect.left = toolbarRect.right - borderSpace.right;
1599 }
1600
1602 toolbarRect.left,
1603 toolbarRect.top,
1604 toolbarRect.right - toolbarRect.left,
1605 toolbarRect.bottom - toolbarRect.top,
1607
1608 if (borderSpace.top != 0)
1609 {
1610 clientRect.top = toolbarRect.bottom;
1611 }
1612 else if (borderSpace.bottom != 0)
1613 {
1614 clientRect.bottom = toolbarRect.top;
1615 }
1616 else if (borderSpace.left != 0)
1617 {
1618 clientRect.left = toolbarRect.right;
1619 }
1620 else if (borderSpace.right != 0)
1621 {
1622 clientRect.right = toolbarRect.left;
1623 }
1624 }
1625 }
1626
1628 return;
1629
1630 ::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
1631 clientRect.right - clientRect.left,
1632 clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1633}
1634
1635HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
1636{
1637 DISPPARAMS params;
1640 HRESULT hResult;
1641
1642 params.rgvarg = arguments;
1643 params.rgdispidNamedArgs = NULL;
1644 params.cArgs = argCount;
1645 params.cNamedArgs = 0;
1646 IUnknown** pp = vec.begin();
1647 while (pp < vec.end())
1648 {
1649 if (*pp != NULL)
1650 {
1651 CComPtr<IDispatch> theDispatch;
1652 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1653 if (SUCCEEDED(hResult))
1654 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1655 }
1656 pp++;
1657 }
1658 pp = vec2.begin();
1659 while (pp < vec2.end())
1660 {
1661 if (*pp != NULL)
1662 {
1663 CComPtr<IDispatch> theDispatch;
1664 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1665 if (SUCCEEDED(hResult))
1666 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1667 }
1668 pp++;
1669 }
1670 return S_OK;
1671}
1672
1674{
1675 // these two variants intentionally to do use CComVariant because it would double free/release
1676 // or does not need to dispose at all
1677 VARIANT varArg[2];
1678 VARIANT varArgs;
1679 CComBSTR tempString(newDirectory);
1680
1681 V_VT(&varArgs) = VT_BSTR;
1682 V_BSTR(&varArgs) = tempString.m_str;
1683
1684 V_VT(&varArg[0]) = VT_VARIANT | VT_BYREF;
1685 V_VARIANTREF(&varArg[0]) = &varArgs;
1686 V_VT(&varArg[1]) = VT_DISPATCH;
1687 V_DISPATCH(&varArg[1]) = (IDispatch *)this;
1688
1689 return FireEvent(DISPID_NAVIGATECOMPLETE2, 2, varArg);
1690}
1691
1693{
1694 VARIANT varArg[2];
1695
1696 V_VT(&varArg[0]) = VT_BOOL;
1697 V_BOOL(&varArg[0]) = newState ? VARIANT_TRUE : VARIANT_FALSE;
1698 V_VT(&varArg[1]) = VT_I4;
1699 V_I4(&varArg[1]) = commandID;
1700
1701 return FireEvent(DISPID_COMMANDSTATECHANGE, 2, varArg);
1702}
1703
1705{
1706 return FireCommandStateChange(false, -1);
1707}
1708
1710{
1711 VARIANT vArgs[1];
1712 V_VT(&vArgs[0]) = VT_BOOL;
1713 V_BOOL(&vArgs[0]) = Param1 ? VARIANT_TRUE : VARIANT_FALSE;
1714 return FireEvent(dispIdMember, 1, vArgs);
1715}
1716
1718{
1719 CComPtr<ITravelLog> travelLog;
1720 CComPtr<ITravelEntry> unusedEntry;
1721 bool canGoBack;
1722 bool canGoForward;
1723 HRESULT hResult;
1724
1725 canGoBack = false;
1726 canGoForward = false;
1727 hResult = GetTravelLog(&travelLog);
1728 if (FAILED_UNEXPECTEDLY(hResult))
1729 return hResult;
1730 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
1731 if (SUCCEEDED(hResult))
1732 {
1733 canGoBack = true;
1734 unusedEntry.Release();
1735 }
1736 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
1737 if (SUCCEEDED(hResult))
1738 {
1739 canGoForward = true;
1740 unusedEntry.Release();
1741 }
1742 hResult = FireCommandStateChange(canGoBack, 2);
1743 hResult = FireCommandStateChange(canGoForward, 1);
1744 return S_OK;
1745}
1746
1748{
1749 bool canGoUp = !_ILIsDesktop(fCurrentDirectoryPIDL);
1750 FireCommandStateChange(canGoUp, 3);
1751 return S_OK;
1752}
1753
1755{
1756 CComPtr<ITravelLog> travelLog;
1757 CComPtr<ITravelEntry> unusedEntry;
1758 int position;
1759 MENUITEMINFO menuItemInfo;
1760 HRESULT hResult;
1761
1763
1764 position = GetMenuItemCount(theMenu);
1765 hResult = GetTravelLog(&travelLog);
1766 if (FAILED_UNEXPECTEDLY(hResult))
1767 return;
1768
1769 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1770 TLOG_BACK,
1771 &unusedEntry);
1772
1773 if (SUCCEEDED(hResult))
1774 {
1776 unusedEntry.Release();
1777 }
1778 else
1780
1781 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1782 TLOG_FORE,
1783 &unusedEntry);
1784
1785 if (SUCCEEDED(hResult))
1786 {
1788 unusedEntry.Release();
1789 }
1790 else
1792
1793 SHEnableMenuItem(theMenu,
1796
1797 hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
1799 if (SUCCEEDED(hResult))
1800 {
1801 menuItemInfo.cbSize = sizeof(menuItemInfo);
1802 menuItemInfo.fMask = MIIM_TYPE | MIIM_ID;
1803 menuItemInfo.fType = MF_SEPARATOR;
1804 menuItemInfo.wID = IDM_GOTO_TRAVEL_SEP;
1805 InsertMenuItem(theMenu, position, TRUE, &menuItemInfo);
1806 }
1807}
1808
1810{
1811 CComPtr<ITravelLog> travelLog;
1812 HMENU gotoMenu;
1813 OLECMD commandList[5];
1814 HMENU toolbarMenuBar;
1815 HMENU toolbarMenu;
1816 MENUITEMINFO menuItemInfo;
1817 HRESULT hResult;
1818
1819 gotoMenu = SHGetMenuFromID(theMenu, FCIDM_MENU_EXPLORE);
1820 if (gotoMenu != NULL)
1821 UpdateGotoMenu(gotoMenu);
1822
1823 commandList[0].cmdID = ITID_TOOLBARBANDSHOWN;
1824 commandList[1].cmdID = ITID_ADDRESSBANDSHOWN;
1825 commandList[2].cmdID = ITID_LINKSBANDSHOWN;
1826 commandList[3].cmdID = ITID_TOOLBARLOCKED;
1827 commandList[4].cmdID = ITID_CUSTOMIZEENABLED;
1828
1830 CGID_PrivCITCommands, 5, commandList, NULL);
1831 if (FAILED_UNEXPECTEDLY(hResult))
1833 else
1834 {
1835 menuItemInfo.cbSize = sizeof(menuItemInfo);
1836 menuItemInfo.fMask = MIIM_SUBMENU;
1837 GetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1838 DestroyMenu(menuItemInfo.hSubMenu);
1839
1840 toolbarMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1841 toolbarMenu = GetSubMenu(toolbarMenuBar, 0);
1842 RemoveMenu(toolbarMenuBar, 0, MF_BYPOSITION);
1843 DestroyMenu(toolbarMenuBar);
1844
1845 // TODO: Implement
1846 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_ENABLED);
1847 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_ENABLED);
1848 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_ENABLED);
1849 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_CUSTOMIZE, commandList[4].cmdf & OLECMDF_ENABLED);
1850
1851 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_LATCHED);
1852 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_LATCHED);
1853 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_LATCHED);
1854 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LOCKTOOLBARS, commandList[3].cmdf & OLECMDF_LATCHED);
1855 if ((commandList[4].cmdf & OLECMDF_ENABLED) == 0)
1859
1860 menuItemInfo.cbSize = sizeof(menuItemInfo);
1861 menuItemInfo.fMask = MIIM_SUBMENU;
1862 menuItemInfo.hSubMenu = toolbarMenu;
1863 SetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1864 }
1866
1867 // Check the menu items for Explorer bar
1868 BOOL bSearchBand = (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
1869 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
1870 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
1871 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar));
1872 BOOL bHistory = IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar);
1873 BOOL bFavorites = IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar);
1874 BOOL bFolders = IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar);
1875 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_SEARCH, bSearchBand);
1876 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_HISTORY, bHistory);
1877 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FAVORITES, bFavorites);
1878 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FOLDERS, bFolders);
1879}
1880
1882{
1883 HMENU hBandsMenu;
1884 UINT nbFound;
1885
1887 if (!hBandsMenu)
1888 {
1889 OutputDebugString(L"No menu !\n");
1890 return E_FAIL;
1891 }
1893 BuildExplorerBandCategory(hBandsMenu, CATID_InfoBand, 4, NULL);
1894 BuildExplorerBandCategory(hBandsMenu, CATID_CommBand, 20, &nbFound);
1895 if (!nbFound)
1896 {
1897 // Remove separator
1899 }
1900 // Remove media menu since XP does it (according to API Monitor)
1902 return S_OK;
1903}
1904
1906{
1907 HRESULT hr;
1908 CComPtr<IEnumGUID> pEnumGUID;
1909 WCHAR wszBandName[MAX_PATH];
1910 WCHAR wszBandGUID[MAX_PATH];
1911 WCHAR wRegKey[MAX_PATH];
1912 UINT cBands;
1913 DWORD dwRead;
1914 DWORD dwDataSize;
1915 GUID iter;
1916 MenuBandInfo mbi;
1917
1918 mbi.fVertical = IsEqualGUID(category, CATID_InfoBand);
1919 cBands = 0;
1920 hr = SHEnumClassesOfCategories(1, &category, 0, NULL, &pEnumGUID);
1922 {
1923 return hr;
1924 }
1925 do
1926 {
1927 pEnumGUID->Next(1, &iter, &dwRead);
1928 if (dwRead)
1929 {
1930 // Get the band name
1931 if (IsBuiltinBand(iter))
1932 continue;
1933 if (!StringFromGUID2(iter, wszBandGUID, MAX_PATH))
1934 continue;
1935 StringCchPrintfW(wRegKey, MAX_PATH, L"CLSID\\%s", wszBandGUID);
1936 dwDataSize = MAX_PATH;
1937 SHGetValue(HKEY_CLASSES_ROOT, wRegKey, NULL, NULL, wszBandName, &dwDataSize);
1938
1939 mbi.barGuid = iter;
1940 InsertMenu(hBandsMenu, dwPos + cBands, MF_BYPOSITION, IDM_EXPLORERBAND_BEGINCUSTOM + DSA_GetItemCount(menuDsa), wszBandName);
1941 DSA_AppendItem(menuDsa, &mbi);
1942 cBands++;
1943 }
1944 }
1945 while (dwRead > 0);
1946 if (nbFound)
1947 *nbFound = cBands;
1948 return S_OK;
1949}
1950
1952{
1953 if (IsEqualCLSID(bandID, CLSID_ExplorerBand))
1954 return TRUE;
1955 if (IsEqualCLSID(bandID, CLSID_SH_SearchBand) || IsEqualCLSID(bandID, CLSID_SearchBand))
1956 return TRUE;
1957 if (IsEqualCLSID(bandID, CLSID_IE_SearchBand) || IsEqualCLSID(bandID, CLSID_FileSearchBand))
1958 return TRUE;
1959 if (IsEqualCLSID(bandID, CLSID_SH_HistBand))
1960 return TRUE;
1961 if (IsEqualCLSID(bandID, CLSID_SH_FavBand))
1962 return TRUE;
1963 if (IsEqualCLSID(bandID, CLSID_ChannelsBand))
1964 return TRUE;
1965 return FALSE;
1966}
1967
1969{
1970 CComPtr<IObjectWithSite> objectWithSite;
1971 CComPtr<IContextMenu> contextMenu;
1972 CMINVOKECOMMANDINFO commandInfo;
1973 const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1974 HRESULT hResult;
1975
1976 // TODO: Query shell if this command is enabled first
1977
1978 memset(&commandInfo, 0, sizeof(commandInfo));
1979 commandInfo.cbSize = sizeof(commandInfo);
1980 commandInfo.hwnd = m_hWnd;
1981 commandInfo.lpParameters = searchGUID;
1982 commandInfo.nShow = SW_SHOWNORMAL;
1983
1984 hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1985 IID_PPV_ARG(IContextMenu, &contextMenu));
1986 if (FAILED_UNEXPECTEDLY(hResult))
1987 return 0;
1988 hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
1989 if (FAILED_UNEXPECTEDLY(hResult))
1990 return 0;
1991 hResult = objectWithSite->SetSite(dynamic_cast<IShellBrowser*>(this));
1992 if (FAILED_UNEXPECTEDLY(hResult))
1993 return 0;
1994 hResult = contextMenu->InvokeCommand(&commandInfo);
1995 hResult = objectWithSite->SetSite(NULL);
1996 return hResult;
1997}
1998
2000{
2001 CComPtr<IUnknown> int1Retry;
2002 CComPtr<IUnknown> int2Retry;
2003 HRESULT hResult;
2004
2005 if (int1 == int2)
2006 return true;
2007 if (int1 == NULL || int2 == NULL)
2008 return false;
2009 hResult = int1->QueryInterface(IID_PPV_ARG(IUnknown, &int1Retry));
2010 if (FAILED_UNEXPECTEDLY(hResult))
2011 return false;
2012 hResult = int2->QueryInterface(IID_PPV_ARG(IUnknown, &int2Retry));
2013 if (FAILED_UNEXPECTEDLY(hResult))
2014 return false;
2015 if (int1Retry == int2Retry)
2016 return true;
2017 return false;
2018}
2019
2021{
2022 static const INT excludeItems[] = { 1, 1, 1, IDC_STATUSBAR, 0, 0 };
2023
2024 RECT availableBounds;
2025
2026 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
2027 for (INT x = 0; x < 3; x++)
2028 {
2029 if (fClientBars[x].clientBar.p != NULL && !IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2030 {
2031 availableBounds.top += fClientBars[x].borderSpace.top;
2032 availableBounds.left += fClientBars[x].borderSpace.left;
2033 availableBounds.bottom -= fClientBars[x].borderSpace.bottom;
2034 availableBounds.right -= fClientBars[x].borderSpace.right;
2035 }
2036 }
2037 *prcBorder = availableBounds;
2038 return S_OK;
2039}
2040
2042{
2043 return S_OK;
2044}
2045
2047{
2048 for (INT x = 0; x < 3; x++)
2049 {
2050 if (IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2051 {
2052 fClientBars[x].borderSpace = *pbw;
2053 // if this bar changed size, it cascades and forces all subsequent bars to resize
2055 return S_OK;
2056 }
2057 }
2058 return E_INVALIDARG;
2059}
2060
2062 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
2063{
2064 CComPtr<IOleCommandTarget> commandTarget;
2065 HRESULT hResult;
2066
2067 if (prgCmds == NULL)
2068 return E_INVALIDARG;
2069 if (pguidCmdGroup == NULL)
2070 {
2071 if (fCurrentShellView.p != NULL)
2072 {
2073 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
2074 if (SUCCEEDED(hResult) && commandTarget.p != NULL)
2075 return commandTarget->QueryStatus(NULL, 1, prgCmds, pCmdText);
2076 }
2077 while (cCmds != 0)
2078 {
2079 prgCmds->cmdf = 0;
2080 prgCmds++;
2081 cCmds--;
2082 }
2083 }
2084 else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2085 {
2086 while (cCmds != 0)
2087 {
2088 switch (prgCmds->cmdID)
2089 {
2090 case 0x1c: // search
2092 if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
2093 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
2094 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
2095 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
2096 {
2097 prgCmds->cmdf |= OLECMDF_LATCHED;
2098 }
2099 break;
2100 case 0x1d: // history
2102 if (IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar))
2103 prgCmds->cmdf |= OLECMDF_LATCHED;
2104 break;
2105 case 0x1e: // favorites
2107 if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
2108 prgCmds->cmdf |= OLECMDF_LATCHED;
2109 break;
2110 case SBCMDID_EXPLORERBARFOLDERS: // folders
2112 if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
2113 prgCmds->cmdf |= OLECMDF_LATCHED;
2114 break;
2115 default:
2116 prgCmds->cmdf = 0;
2117 break;
2118 }
2119 prgCmds++;
2120 cCmds--;
2121 }
2122 }
2123 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2124 {
2125 while (cCmds != 0)
2126 {
2127 switch (prgCmds->cmdID)
2128 {
2130 prgCmds->cmdf = OLECMDF_SUPPORTED;
2132 prgCmds->cmdf |= OLECMDF_ENABLED;
2133 break;
2134 }
2135 prgCmds++;
2136 cCmds--;
2137 }
2138 }
2139 return S_OK;
2140}
2141
2143 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
2144{
2145 if (!pguidCmdGroup)
2146 {
2147 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut);
2148 return E_NOTIMPL;
2149 }
2150 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2151 {
2152 switch (nCmdID)
2153 {
2154 case 0x1c: //Toggle Search
2155 case 0x1d: //Toggle History
2156 case 0x1e: //Toggle Favorites
2157 case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
2158 const GUID* pclsid;
2159 if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
2160 else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
2161 else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
2162 else pclsid = &CLSID_ExplorerBand;
2163
2164 if (IsEqualCLSID(*pclsid, fCurrentVertBar))
2165 {
2169 }
2170 else
2171 {
2172 ShowBand(*pclsid, true);
2173 }
2174 return S_OK;
2175 case 0x22:
2176 //Sent when a band closes
2177 if (V_VT(pvaIn) != VT_UNKNOWN)
2178 return E_INVALIDARG;
2179
2180 if (IUnknownIsEqual(V_UNKNOWN(pvaIn), fClientBars[BIVerticalBaseBar].clientBar.p))
2181 {
2184 }
2185 return S_OK;
2186 case 0x27:
2187 if (nCmdexecopt == 1)
2188 {
2189 // pvaIn is a VT_UNKNOWN with a band that is being hidden
2190 }
2191 else
2192 {
2193 // update zones part of the status bar
2194 }
2195 return S_OK;
2196 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
2197 V_VT(pvaOut) = VT_INT_PTR;
2198 V_INTREF(pvaOut) = reinterpret_cast<INT *>(
2199 LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU)));
2200 return S_OK;
2201 case 0x38:
2202 // indicate if this cabinet was opened as a browser
2203 return S_FALSE;
2204 default:
2205 return E_NOTIMPL;
2206 }
2207 }
2208 else if (IsEqualIID(*pguidCmdGroup, CGID_InternetButtons))
2209 {
2210 switch (nCmdID)
2211 {
2212 case 0x23:
2213 // placeholder
2214 return S_OK;
2215 }
2216 }
2217 else if (IsEqualIID(*pguidCmdGroup, CGID_Theater))
2218 {
2219 switch (nCmdID)
2220 {
2221 case 6:
2222 // what is theater mode and why do we receive this?
2223 return E_NOTIMPL;
2224 }
2225 }
2226 else if (IsEqualIID(*pguidCmdGroup, CGID_MenuBand))
2227 {
2228 switch (nCmdID)
2229 {
2230 case 14:
2231 // initialize favorites menu
2232 return S_OK;
2233 }
2234 }
2235 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView))
2236 {
2237 switch (nCmdID)
2238 {
2239 case 0x12:
2240 // refresh on toolbar clicked
2241 return S_OK;
2242 case 0x26:
2243 // called for unknown bands ?
2244 return S_OK;
2245 case 0x4d:
2246 // tell the view if it should hide the task pane or not
2247 return (fClientBars[BIVerticalBaseBar].clientBar.p == NULL) ? S_FALSE : S_OK;
2248 }
2249 }
2250 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2251 {
2252 switch (nCmdID)
2253 {
2254 case 40994:
2255 return NavigateToParent();
2258 break;
2259 }
2260 }
2261 else if (IsEqualIID(*pguidCmdGroup, CGID_IExplorerToolbar))
2262 {
2263 switch (nCmdID)
2264 {
2265 case 0x7063:
2266 return DoFolderOptions();
2267 }
2268 }
2269 else if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
2270 {
2271 switch (nCmdID)
2272 {
2276 break;
2277 }
2278 }
2279 else
2280 {
2281 return E_NOTIMPL;
2282 }
2283 return E_NOTIMPL;
2284}
2285
2287{
2288 if (lphwnd == NULL)
2289 return E_POINTER;
2290 *lphwnd = m_hWnd;
2291 return S_OK;
2292}
2293
2295{
2296 return E_NOTIMPL;
2297}
2298
2299HRESULT STDMETHODCALLTYPE CShellBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
2300{
2301 HMENU mainMenu = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2302
2303 Shell_MergeMenus(hmenuShared, mainMenu, 0, 0, FCIDM_BROWSERLAST, MM_SUBMENUSHAVEIDS);
2304
2305 int GCCU(itemCount3) = GetMenuItemCount(hmenuShared);
2306 Unused(itemCount3);
2307
2308 DestroyMenu(mainMenu);
2309
2310 lpMenuWidths->width[0] = 2;
2311 lpMenuWidths->width[2] = 3;
2312 lpMenuWidths->width[4] = 1;
2313 return S_OK;
2314}
2315
2316HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
2317{
2318 CComPtr<IShellMenu> shellMenu;
2319 HRESULT hResult;
2320
2321 if (hmenuShared && IsMenu(hmenuShared) == FALSE)
2322 return E_FAIL;
2323 hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
2324 if (FAILED_UNEXPECTEDLY(hResult))
2325 return hResult;
2326
2327 if (!hmenuShared)
2328 {
2329 hmenuShared = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2330 }
2331 // FIXME: Figure out the proper way to do this.
2332 HMENU hMenuFavs = GetSubMenu(hmenuShared, 3);
2333 if (hMenuFavs)
2334 {
2336 }
2337
2338 hResult = shellMenu->SetMenu(hmenuShared, m_hWnd, SMSET_DONTOWN);
2339 if (FAILED_UNEXPECTEDLY(hResult))
2340 return hResult;
2341 fCurrentMenuBar = hmenuShared;
2343 return S_OK;
2344}
2345
2347{
2348 if (hmenuShared == fCurrentMenuBar)
2349 {
2350 //DestroyMenu(fCurrentMenuBar);
2352 }
2353 return S_OK;
2354}
2355
2357{
2358 //
2359 if (pszStatusText)
2360 {
2361 ::SetWindowText(fStatusBar, pszStatusText);
2362 }
2363 else
2364 {
2365
2366 }
2367 return S_OK;
2368}
2369
2371{
2372 return E_NOTIMPL;
2373}
2374
2376{
2378 return S_FALSE;
2379 return S_OK;
2380}
2381
2383{
2385 // FIXME: Should not automatically show the Explorer band
2386 if ((wFlags & SBSP_EXPLOREMODE) && !(wFlags & SBSP_NEWBROWSER))
2387 ShowBand(CLSID_ExplorerBand, true);
2388
2389 CComHeapPtr<ITEMIDLIST> pidlResolved;
2390 if (wFlags & (SBSP_RELATIVE | SBSP_PARENT))
2391 {
2392 HRESULT hr = CreateRelativeBrowsePIDL(pidl, wFlags, &pidlResolved);
2393 if (FAILED(hr))
2394 return hr;
2395 pidl = pidlResolved;
2396 }
2397
2398 if (wFlags & SBSP_NEWBROWSER)
2399 return OpenNewBrowserWindow(pidl, wFlags);
2400
2401 switch (wFlags & (SBSP_ABSOLUTE | SBSP_RELATIVE | SBSP_PARENT | SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
2402 {
2403 case SBSP_PARENT:
2404 return NavigateToParent();
2405 case SBSP_NAVIGATEBACK:
2406 return GoBack();
2407 case SBSP_NAVIGATEFORWARD:
2408 return GoForward();
2409 }
2410
2411 // TODO: SBSP_WRITENOHISTORY? SBSP_CREATENOHISTORY?
2413 if (fTravelLog)
2415 if (wFlags & SBSP_ACTIVATE_NOFOCUS)
2417 return BrowseToPIDL(pidl, flags);
2418}
2419
2421{
2422 return E_NOTIMPL;
2423}
2424
2426{
2427 if (lphwnd == NULL)
2428 return E_POINTER;
2429 *lphwnd = NULL;
2430 switch (id)
2431 {
2432 case FCW_TOOLBAR:
2433 *lphwnd = fToolbarProxy.m_hWnd;
2434 return S_OK;
2435 case FCW_STATUS:
2436 *lphwnd = fStatusBar;
2437 return S_OK;
2438 case FCW_TREE:
2439 {
2440 BOOL shown;
2441 if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
2442 return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
2443 return S_FALSE;
2444 }
2445 case FCW_PROGRESS:
2446 // is this a progress dialog?
2447 return S_OK;
2448 }
2449 return S_OK;
2450}
2451
2454{
2455 LPARAM result;
2456
2457 if (pret != NULL)
2458 *pret = 0;
2459 switch (id)
2460 {
2461 case FCW_TOOLBAR:
2463 if (pret != NULL)
2464 *pret = result;
2465 break;
2466 case FCW_STATUS:
2468 if (pret != NULL)
2469 *pret = result;
2470 break;
2471 }
2472 return S_OK;
2473}
2474
2476{
2477 if (ppshv == NULL)
2478 return E_POINTER;
2479 *ppshv = fCurrentShellView;
2480 if (fCurrentShellView.p != NULL)
2481 {
2483 return S_OK;
2484 }
2485 return E_FAIL;
2486}
2487
2489{
2490 return E_NOTIMPL;
2491}
2492
2494{
2495 return E_NOTIMPL;
2496}
2497
2499 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2500{
2501 return E_NOTIMPL;
2502}
2503
2505{
2506 return E_NOTIMPL;
2507}
2508
2510{
2511 return E_NOTIMPL;
2512}
2513
2515 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2516{
2517 return E_NOTIMPL;
2518}
2519
2521{
2522 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2523 // the returned interface has a method GetPropertyBag on it
2524 if (IsEqualIID(guidService, SID_STopLevelBrowser))
2525 return this->QueryInterface(riid, ppvObject);
2526 if (IsEqualIID(guidService, SID_SShellBrowser))
2527 return this->QueryInterface(riid, ppvObject);
2528 if (IsEqualIID(guidService, SID_ITargetFrame2))
2529 return this->QueryInterface(riid, ppvObject);
2530 if (IsEqualIID(guidService, SID_IWebBrowserApp)) // without this, the internet toolbar won't reflect notifications
2531 return this->QueryInterface(riid, ppvObject);
2532 if (IsEqualIID(guidService, SID_SProxyBrowser))
2533 return this->QueryInterface(riid, ppvObject);
2534 if (IsEqualIID(guidService, SID_IExplorerToolbar) && fClientBars[BIInternetToolbar].clientBar.p)
2535 return fClientBars[BIInternetToolbar].clientBar->QueryInterface(riid, ppvObject);
2536 if (IsEqualIID(riid, IID_IShellBrowser))
2537 return this->QueryInterface(riid, ppvObject);
2538 return E_NOINTERFACE;
2539}
2540
2542{
2545}
2546
2548{
2549 if (ppvObject == NULL)
2550 return E_POINTER;
2551
2552 *ppvObject = NULL;
2553
2554 LPITEMIDLIST pidl;
2555 HRESULT hr = GetPidl(&pidl);
2557 return E_FAIL;
2558
2559 // FIXME: pidl for Internet etc.
2560
2561 if (_ILIsNetworkPlace(pidl))
2563
2564 hr = SHGetViewStatePropertyBag(pidl, L"Shell", flags, riid, ppvObject);
2565
2566 ILFree(pidl);
2567 return hr;
2568}
2569
2571{
2572 return E_NOTIMPL;
2573}
2574
2576{
2577 return E_NOTIMPL;
2578}
2579
2581 UINT cNames, LCID lcid, DISPID *rgDispId)
2582{
2583 return E_NOTIMPL;
2584}
2585
2587 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
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 return E_NOTIMPL;
2610}
2611
2613{
2614 HRESULT hResult;
2615
2616 // called by toolbar when displaying tooltips
2617 if (pptl == NULL)
2618 return E_FAIL;
2619
2620 *pptl = NULL;
2621 if (fTravelLog.p == NULL)
2622 {
2624 if (FAILED_UNEXPECTEDLY(hResult))
2625 return hResult;
2626 }
2627 *pptl = fTravelLog.p;
2628 fTravelLog.p->AddRef();
2629 return S_OK;
2630}
2631
2633{
2634 BOOL shown;
2635 if (FAILED(IsControlWindowShown(id, &shown)))
2636 return E_NOTIMPL;
2637 else if (!shown == !fShow) // Negated for true boolean comparison
2638 return S_OK;
2639 else switch (id)
2640 {
2641 case FCW_STATUS:
2642 OnToggleStatusBarVisible(0, 0, NULL, shown);
2643 return S_OK;
2644 case FCW_TREE:
2645 return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
2646 case FCW_MENU:
2648 CGID_PrivCITCommands, ITID_MENUBANDSHOWN, 0, NULL, NULL);
2649 case FCW_ADDRESSBAR:
2651 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
2652 }
2653 return E_NOTIMPL;
2654}
2655
2657{
2658 HRESULT hr = S_OK;
2659 BOOL shown = FALSE;
2660 switch (id)
2661 {
2662 case FCW_STATUS:
2664 break;
2665 case FCW_TREE:
2666 {
2668 hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
2669 shown = cmd.cmdf & OLECMDF_LATCHED;
2670 break;
2671 }
2672 case FCW_MENU:
2674 break;
2675 case FCW_ADDRESSBAR:
2677 break;
2678 default:
2679 hr = E_NOTIMPL;
2680 }
2681 if (pfShown)
2682 {
2683 *pfShown = shown;
2684 return hr;
2685 }
2686 return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
2687}
2688
2690{
2691 OLECMD cmd = { ITId };
2693 CGID_PrivCITCommands, 1, &cmd, NULL);
2694 return SUCCEEDED(hr) ? (cmd.cmdf & OLECMDF_LATCHED) ? S_OK : S_FALSE : hr;
2695}
2696
2698{
2699 return E_NOTIMPL;
2700}
2701
2703{
2704 return E_NOTIMPL;
2705}
2706
2708{
2709 return E_NOTIMPL;
2710}
2711
2713{
2714 return _NavigateToPidl(pidl, grfHLNF, 0);
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 return E_NOTIMPL;
2740}
2741
2743{
2744 m_BrowserSvcFlags = (m_BrowserSvcFlags & ~dwFlagMask) | (dwFlags & dwFlagMask);
2745 return S_OK;
2746}
2747
2749{
2750 *pdwFlags = m_BrowserSvcFlags;
2751 return S_OK;
2752}
2753
2755{
2756 return E_NOTIMPL;
2757}
2758
2760{
2761 // called by explorer bar to get current pidl
2762 return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER;
2763}
2764
2766{
2767 return E_NOTIMPL;
2768}
2769
2771{
2772 return -1;
2773}
2774
2776{
2777 return E_NOTIMPL;
2778}
2779
2781{
2782 if (ppole == NULL || pstm == NULL || ppbc == NULL)
2783 return E_INVALIDARG;
2784 *ppole = fHistoryObject;
2785 if (fHistoryObject != NULL)
2787 *pstm = fHistoryStream;
2788 if (fHistoryStream != NULL)
2790 *ppbc = fHistoryBindContext;
2796 if (*ppole == NULL)
2797 return E_FAIL;
2798 return S_OK;
2799}
2800
2802{
2803 return E_NOTIMPL;
2804}
2805
2807{
2808 return E_NOTIMPL;
2809}
2810
2812{
2813 return E_NOTIMPL;
2814}
2815
2817 IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
2818{
2819 return E_NOTIMPL;
2820}
2821
2823{
2824 return E_NOTIMPL;
2825}
2826
2828{
2829 return E_NOTIMPL;
2830}
2831
2833{
2834 return E_NOTIMPL;
2835}
2836
2838{
2839 HRESULT hr = E_FAIL;
2841 {
2844 }
2845 return hr;
2846}
2847
2849{
2850 return E_NOTIMPL;
2851}
2852
2854{
2855 return E_NOTIMPL;
2856}
2857
2859{
2861 return S_OK;
2862}
2863
2865{
2867}
2868
2870{
2871 return E_NOTIMPL;
2872}
2873
2875{
2876 return 0;
2877}
2878
2880{
2881 return E_NOTIMPL;
2882}
2883
2885{
2886 return E_NOTIMPL;
2887}
2888
2890{
2891 return E_NOTIMPL;
2892}
2893
2895{
2896 return E_NOTIMPL;
2897}
2898
2900 IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd)
2901{
2902 return E_NOTIMPL;
2903}
2904
2906{
2907 return E_NOTIMPL;
2908}
2909
2911{
2912 return E_NOTIMPL;
2913}
2914
2916{
2917 return E_NOTIMPL;
2918}
2919
2921{
2922 return NULL;
2923}
2924
2926{
2927 return E_NOTIMPL;
2928}
2929
2931{
2932 SetFlags(BSF_TOPBROWSER, BSF_TOPBROWSER);
2933 return S_OK;
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 return E_NOTIMPL;
2994}
2995
2997{
2998 const UINT navflags = HLNF_NAVIGATINGBACK | HLNF_NAVIGATINGFORWARD;
2999 if ((grfHLNF & navflags) && grfHLNF != ~0ul)
3000 {
3001 UINT SbspFlags = (grfHLNF & HLNF_NAVIGATINGBACK) ? SBSP_NAVIGATEBACK : SBSP_NAVIGATEFORWARD;
3002 if (grfHLNF & SHHLNF_WRITENOHISTORY)
3003 SbspFlags |= SBSP_WRITENOHISTORY;
3004 if (grfHLNF & SHHLNF_NOAUTOSELECT)
3005 SbspFlags |= SBSP_NOAUTOSELECT;
3006 return BrowseObject(pidl, SbspFlags);
3007 }
3008 return E_NOTIMPL;
3009}
3010
3012{
3013 return E_NOTIMPL;
3014}
3015
3017{
3018 return E_NOTIMPL;
3019}
3020
3022 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)
3023{
3024 return E_NOTIMPL;
3025}
3026
3028 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam)
3029{
3030 return E_NOTIMPL;
3031}
3032
3034{
3035 return E_NOTIMPL;
3036}
3037
3039{
3040 return E_NOTIMPL;
3041}
3042
3044{
3045 return E_NOTIMPL;
3046}
3047
3049{
3050 return 0;
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 E_NOTIMPL;
3086}
3087
3089{
3090 return NULL;
3091}
3092
3094{
3095 return 0;
3096}
3097
3099{
3100 return E_NOTIMPL;
3101}
3102
3104{
3105 return 0;
3106}
3107
3109{
3110 return NULL;
3111}
3112
3114{
3115 return E_NOTIMPL;
3116}
3117
3119{
3120 return E_NOTIMPL;
3121}
3122
3124{
3125 return E_NOTIMPL;
3126}
3127
3129 LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd)
3130{
3131 return E_NOTIMPL;
3132}
3133
3135{
3136 return E_NOTIMPL;
3137}
3138
3140{
3141 return 0;
3142}
3143
3145{
3146 return E_NOTIMPL;
3147}
3148
3150{
3151 for (int i = 0; i < 3; i++)
3152 {
3153 if (IUnknown_TranslateAcceleratorIO(fClientBars[i].clientBar, pmsg) == S_OK)
3154 return S_OK;
3155 }
3156
3157 if (!fCurrentShellView)
3158 return S_FALSE;
3159
3160 return fCurrentShellView->TranslateAcceleratorW(pmsg);
3161}
3162
3164{
3165 return E_NOTIMPL;
3166}
3167
3169{
3170 return E_NOTIMPL;
3171}
3172
3174{
3175 CComPtr<ITravelLog> travelLog;
3176 CComPtr<ITravelEntry> unusedEntry;
3177 HRESULT hResult;
3178
3179 hResult = GetTravelLog(&travelLog);
3180 if (FAILED_UNEXPECTEDLY(hResult))
3181 return hResult;
3182
3183 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
3184 if (SUCCEEDED(hResult))
3185 {
3186 unusedEntry.Release();
3187 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_BACK);
3188 }
3189
3190 return hResult;
3191}
3192
3194{
3195 CComPtr<ITravelLog> travelLog;
3196 CComPtr<ITravelEntry> unusedEntry;
3197 HRESULT hResult;
3198
3199 hResult = GetTravelLog(&travelLog);
3200 if (FAILED_UNEXPECTEDLY(hResult))
3201 return hResult;
3202
3203 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
3204 if (SUCCEEDED(hResult))
3205 {
3206 unusedEntry.Release();
3207 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_FORE);
3208 }
3209
3210 return hResult;
3211}
3212
3214{
3215 return E_NOTIMPL;
3216}
3217
3219{
3220 return E_NOTIMPL;
3221}
3222
3224 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3225{
3227 HRESULT hResult;
3228 CComPtr<IShellFolder> pDesktop;
3229
3230 hResult = SHGetDesktopFolder(&pDesktop);
3231 if (FAILED_UNEXPECTEDLY(hResult))
3232 return hResult;
3233 hResult = pDesktop->ParseDisplayName(NULL, NULL, URL, NULL, &pidl, NULL);
3234 if (FAILED_UNEXPECTEDLY(hResult))
3235 return hResult;
3236 return BrowseObject(pidl, 1);
3237}
3238
3240{
3241 VARIANT level;
3242
3243 V_VT(&level) = VT_I4;
3244 V_I4(&level) = 4;
3245 return Refresh2(&level);
3246}
3247
3249{
3250 CComPtr<IOleCommandTarget> oleCommandTarget;
3251 HRESULT hResult;
3252
3253 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
3254 if (FAILED_UNEXPECTEDLY(hResult))
3255 return hResult;
3256 return oleCommandTarget->Exec(NULL, 22, 1, Level, NULL);
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
3290{
3291 return E_NOTIMPL;
3292}
3293#ifdef __exdisp_h__
3294#define long LONG
3295#endif
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
3332{
3333 return E_NOTIMPL;
3334}
3335#ifdef __exdisp_h__
3336#undef long
3337#endif
3339{
3340 return E_NOTIMPL;
3341}
3342
3344{
3345 return E_NOTIMPL;
3346}
3347
3349{
3350 return E_NOTIMPL;
3351}
3352
3354{
3356 return S_OK;
3357}
3358
3360{
3361 return E_NOTIMPL;
3362}
3363
3365{
3366 return E_NOTIMPL;
3367}
3368
3370{
3371 return E_NOTIMPL;
3372}
3373
3375{
3376 return E_NOTIMPL;
3377}
3378
3380{
3382 return *pHWND ? S_OK : E_UNEXPECTED;
3383}
3384
3386{
3387 return E_NOTIMPL;
3388}
3389
3391{
3392 return E_NOTIMPL;
3393}
3394
3396{
3398 *pBool = hWnd && ::IsWindowVisible(hWnd) ? VARIANT_TRUE : VARIANT_FALSE;
3399 return S_OK;
3400}
3401
3403{
3405 {
3407 if (Value)
3410 }
3411 return S_OK;
3412}
3413
3415{
3416 *pBool = IsControlWindowShown(FCW_STATUS, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3417 return S_OK;
3418}
3419
3421{
3422 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3423 HRESULT hr = ShowControlWindow(FCW_STATUS, Value != VARIANT_FALSE);
3425 return hr;
3426}
3427
3429{
3430 return E_NOTIMPL;
3431}
3432
3434{
3435 SendControlMsg(FCW_STATUS, SB_SETTEXTW, 0, (LPARAM)StatusText, NULL);
3436 return S_OK;
3437}
3438
3440{
3441 *Value = IsControlWindowShown(FCW_INTERNETBAR, NULL) == S_OK;
3442 if (!*Value && IsControlWindowShown(FCW_TOOLBAR, NULL) == S_OK)
3443 *Value = FCW_TOOLBAR;
3444 return S_OK;
3445}
3446
3448{
3449 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3450 ShowControlWindow(FCW_INTERNETBAR, Value != VARIANT_FALSE && Value != FCW_TOOLBAR);
3451 ShowControlWindow(FCW_TOOLBAR, Value == FCW_TOOLBAR);
3453 return S_OK;
3454}
3455
3457{
3458 *Value = IsControlWindowShown(FCW_MENU, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3459 return S_OK;
3460}
3461
3463{
3464 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3465 HRESULT hr = ShowControlWindow(FCW_MENU, Value != VARIANT_FALSE);
3467 return hr;
3468}
3469
3471{
3472 *pbFullScreen = (m_BrowserSvcFlags & BSF_ROS_KIOSK) ? VARIANT_TRUE : VARIANT_FALSE;
3473 return S_OK;
3474}
3475
3477{
3478 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3479 SetFlags(bFullScreen ? BSF_ROS_KIOSK : 0, BSF_ROS_KIOSK);
3480 put_TheaterMode(bFullScreen);
3482 return S_OK;
3483}
3484
3486 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3487{
3488 LPITEMIDLIST pidl = NULL;
3489 HRESULT hResult;
3490 // called from drive combo box to navigate to a directory
3491 // Also called by search band to display shell results folder view
3492
3493 if (V_VT(URL) == VT_BSTR)
3494 {
3495 return this->Navigate(V_BSTR(URL), Flags, TargetFrameName, PostData, Headers);
3496 }
3497 if (V_VT(URL) == (VT_ARRAY | VT_UI1))
3498 {
3499 if (V_ARRAY(URL)->cDims != 1 || V_ARRAY(URL)->cbElements != 1)
3500 return E_INVALIDARG;
3501
3502 pidl = static_cast<LPITEMIDLIST>(V_ARRAY(URL)->pvData);
3503 }
3505 if (FAILED_UNEXPECTEDLY(hResult))
3506 return hResult;
3507 return S_OK;
3508}
3509
3511{
3512 OLECMD cmd = { (ULONG)cmdID, (DWORD)(*pcmdf) };
3513 HRESULT hr = QueryStatus(NULL, 1, &cmd, NULL);
3514 *pcmdf = (OLECMDF)cmd.cmdf;
3515 return hr;
3516}
3517
3519 VARIANT *pvaIn, VARIANT *pvaOut)
3520{
3524 if (SUCCEEDED(hr))
3525 hr = pOCT->Exec(NULL, cmdID, cmdexecopt, pvaIn, pvaOut);
3526 return hr;
3527}
3528
3530{
3531 CLSID classID;
3532 bool vertical;
3533
3534 // called to show search bar
3535 if (V_VT(pvaClsid) != VT_BSTR)
3536 return E_INVALIDARG;
3537 CLSIDFromString(V_BSTR(pvaClsid), &classID);
3538 // TODO: properly compute the value of vertical
3539 vertical = true;
3540 return ShowBand(classID, vertical);
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 return E_NOTIMPL;
3566}
3567
3569{
3570 *pbRegister = (m_BrowserSvcFlags & BSF_ROS_REGBROWSER) ? VARIANT_TRUE : VARIANT_FALSE;
3571 return S_OK;
3572}
3573
3575{
3576 if (!bRegister)
3577 return E_UNEXPECTED;
3579 return RegisterWindow(TRUE, SWC_3RDPARTY);
3580}
3581
3583{
3584 *pbRegister = (m_BrowserSvcFlags & BSF_REGISTERASDROPTARGET) ? VARIANT_TRUE : VARIANT_FALSE;
3585 return S_OK;
3586}
3587
3589{
3590 SetFlags(bRegister ? BSF_REGISTERASDROPTARGET : 0, BSF_REGISTERASDROPTARGET);
3591 return S_OK;
3592}
3593
3595{
3596 *pbRegister = (m_BrowserSvcFlags & BSF_THEATERMODE) ? VARIANT_TRUE : VARIANT_FALSE;
3597 return S_OK;
3598}
3599
3601{
3602 BOOL handled;
3603 OnToggleFullscreen(bRegister, 0, NULL, handled);
3604 return S_OK;
3605}
3606
3608{
3609 *Value = IsControlWindowShown(FCW_ADDRESSBAR, NULL) == S_OK ? VARIANT_TRUE : VARIANT_FALSE;
3610 return S_OK;
3611}
3612
3614{
3615 SetFlags(BSF_UISETBYAUTOMATION, BSF_UISETBYAUTOMATION);
3616 HRESULT hr = ShowControlWindow(FCW_ADDRESSBAR, Value != VARIANT_FALSE);
3618 return hr;
3619}
3620
3622{
3623 *Value = (m_BrowserSvcFlags & BSF_RESIZABLE) ? VARIANT_TRUE : VARIANT_FALSE;
3624 return E_NOTIMPL;
3625}
3626
3628{
3629 SetFlags(Value ? (BSF_RESIZABLE | BSF_CANMAXIMIZE) : 0, (BSF_RESIZABLE | BSF_CANMAXIMIZE));
3630 return S_OK;
3631}
3632
3634{
3635 return E_NOTIMPL;
3636}
3637
3639{
3640 if (pWinData == NULL)
3641 return E_POINTER;
3642
3643 pWinData->dwWindowID = -1;
3644 pWinData->uiCP = 0;
3645 pWinData->pidl = ILClone(fCurrentDirectoryPIDL);
3646 pWinData->lpszUrl = NULL;
3647 pWinData->lpszUrlLocation = NULL;
3648 pWinData->lpszTitle = NULL;
3649 return S_OK;
3650}
3651
3653{
3654 return E_NOTIMPL;
3655}
3656
3658{
3659 return E_NOTIMPL;
3660}
3661
3663{
3664 CComPtr<IPersistHistory> viewPersistHistory;
3665 CComPtr<IOleObject> viewHistoryObject;
3666 persistState oldState;
3667 ULONG numRead;
3668 LPITEMIDLIST pidl;
3669 HRESULT hResult;
3670
3671 hResult = pStream->Read(&oldState, sizeof(oldState), &numRead);
3672 if (FAILED_UNEXPECTEDLY(hResult))
3673 return hResult;
3674 if (numRead != sizeof(oldState) || oldState.dwSize != sizeof(oldState))
3675 return E_FAIL;
3676 if (oldState.browseType != 2)
3677 return E_FAIL;
3678 pidl = static_cast<LPITEMIDLIST>(CoTaskMemAlloc(oldState.pidlSize));
3679 if (pidl == NULL)
3680 return E_OUTOFMEMORY;
3681 hResult = pStream->Read(pidl, oldState.pidlSize, &numRead);
3682 if (FAILED_UNEXPECTEDLY(hResult))
3683 {
3684 ILFree(pidl);
3685 return hResult;
3686 }
3687 if (numRead != oldState.pidlSize)
3688 {
3689 ILFree(pidl);
3690 return E_FAIL;
3691 }
3692 hResult = CoCreateInstance(oldState.persistClass, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER,
3693 IID_PPV_ARG(IOleObject, &viewHistoryObject));
3694 fHistoryObject = viewHistoryObject;
3695 fHistoryStream = pStream;
3696 fHistoryBindContext = pbc;
3697 hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
3701 ILFree(pidl);
3702 if (FAILED_UNEXPECTEDLY(hResult))
3703 return hResult;
3704 return S_OK;
3705}
3706
3708{
3709 CComPtr<IPersistHistory> viewPersistHistory;
3710 persistState newState;
3711 HRESULT hResult;
3712
3713 hResult = fCurrentShellView->GetItemObject(
3714 SVGIO_BACKGROUND, IID_PPV_ARG(IPersistHistory, &viewPersistHistory));
3715 memset(&newState, 0, sizeof(newState));
3716 newState.dwSize = sizeof(newState);
3717 newState.browseType = 2;
3718 newState.browserIndex = GetBrowserIndex();
3719 if (viewPersistHistory.p != NULL)
3720 {
3721 hResult = viewPersistHistory->GetClassID(&newState.persistClass);
3722 if (FAILED_UNEXPECTEDLY(hResult))
3723 return hResult;
3724 }
3726 hResult = pStream->Write(&newState, sizeof(newState), NULL);
3727 if (FAILED_UNEXPECTEDLY(hResult))
3728 return hResult;
3729 hResult = pStream->Write(fCurrentDirectoryPIDL, newState.pidlSize, NULL);
3730 if (FAILED_UNEXPECTEDLY(hResult))
3731 return hResult;
3732 if (viewPersistHistory.p != NULL)
3733 {
3734 hResult = viewPersistHistory->SaveHistory(pStream);
3735 if (FAILED_UNEXPECTEDLY(hResult))
3736 return hResult;
3737 }
3738 return S_OK;
3739}
3740
3742{
3743 return E_NOTIMPL;
3744}
3745
3747{
3748 return E_NOTIMPL;
3749}
3750
3752{
3753 OnCreate(reinterpret_cast<LPCREATESTRUCT> (lParam));
3754 return 0;
3755}
3756
3758{
3759 HRESULT hr;
3760 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK))
3761 {
3763 put_MenuBar(VARIANT_TRUE);
3765 put_StatusBar(VARIANT_TRUE);
3766 }
3767 SaveViewState();
3768
3769 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
3771
3772 // TODO: rip down everything
3773 {
3774 m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction
3775 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
3777 fCurrentShellView->DestroyViewWindow();
3778
3779 for (int i = 0; i < 3; i++)
3780 {
3783 CComPtr<IUnknown> pBarSite;
3784
3785 if (fClientBars[i].clientBar == NULL)
3786 continue;
3787
3788 hr = fClientBars[i].clientBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pdw));
3790 continue;
3791
3792 /* We should destroy our basebarsite too */
3793 hr = pdw->QueryInterface(IID_PPV_ARG(IDeskBar, &bar));
3794 if (SUCCEEDED(hr))
3795 {
3796 hr = bar->GetClient(&pBarSite);
3797 if (SUCCEEDED(hr) && pBarSite)
3798 {
3800 hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient));
3801 if (SUCCEEDED(hr))
3802 pClient->SetDeskBarSite(NULL);
3803 }
3804 }
3805 pdw->CloseDW(0);
3806
3807 pBarSite = NULL;
3808 pdw = NULL;
3809 bar = NULL;
3810 ReleaseCComPtrExpectZero(fClientBars[i].clientBar);
3811 }
3812 ReleaseCComPtrExpectZero(fCurrentShellView);
3813 ReleaseCComPtrExpectZero(fTravelLog);
3814
3820 }
3821 PostQuitMessage(0);
3822 return 0;
3823}
3824
3826{
3827 CComPtr<IDockingWindow> dockingWindow;
3828 RECT availableBounds;
3829 static const INT excludeItems[] = {1, 1, 1, IDC_STATUSBAR, 0, 0};
3830 HRESULT hResult;
3831
3832 if (wParam != SIZE_MINIMIZED)
3833 {
3834 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
3835 for (INT x = 0; x < 3; x++)
3836 {
3837 if (fClientBars[x].clientBar)
3838 {
3839 hResult = fClientBars[x].clientBar->QueryInterface(
3840 IID_PPV_ARG(IDockingWindow, &dockingWindow));
3841 if (SUCCEEDED(hResult) && dockingWindow != NULL)
3842 {
3843 hResult = dockingWindow->ResizeBorderDW(
3844 &availableBounds, static_cast<IDropTarget *>(this), TRUE);
3845 break;
3846 }
3847 }
3848 }
3850 }
3851 return 1;
3852}
3853
3855{
3856 HMENU theMenu;
3857 LPARAM menuIndex = lParam;
3858
3859 theMenu = reinterpret_cast<HMENU>(wParam);
3860
3862 {
3863 menuIndex = 0;
3864 }
3865 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_EDIT))
3866 {
3867 menuIndex = 1;
3868 }
3869 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_VIEW))
3870 {
3871 UpdateViewMenu(theMenu);
3872 menuIndex = 2;
3873 }
3875 {
3876 menuIndex = 3;
3877 }
3878 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_TOOLS))
3879 {
3880 // FIXME: Remove once implemented
3883 menuIndex = 4;
3884 }
3885 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
3886 {
3887 menuIndex = 5;
3888 }
3889
3890 LRESULT ret = RelayMsgToShellView(uMsg, wParam, menuIndex, bHandled);
3891
3892 return ret;
3893}
3894
3896{
3898 return 0;
3899}
3900
3902{
3905 return 0;
3906}
3907
3909{
3912 return 0;
3913}
3914
3916{
3918 return 0;
3919}
3920
3921LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3922{
3923 return SendMessage(WM_CLOSE);
3924}
3925
3926LRESULT CShellBrowser::OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3927{
3929 HRESULT hResult = DoFolderOptions();
3930 if (FAILED(hResult))
3931 TRACE("DoFolderOptions failed with hResult=%08lx\n", hResult);
3932 return 0;
3933}
3934
3935LRESULT CShellBrowser::OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3936{
3937#ifndef __REACTOS__
3939#endif /* __REACTOS__ */
3940 return 0;
3941}
3942
3944{
3946 return 0;
3947}
3948
3949LRESULT CShellBrowser::OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3950{
3951 ShellAbout(m_hWnd, _T("ReactOS"), NULL, NULL);
3952 return 0;
3953}
3954
3955LRESULT CShellBrowser::OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3956{
3957 HRESULT hResult = GoBack();
3958 if (FAILED(hResult))
3959 TRACE("GoBack failed with hResult=%08lx\n", hResult);
3960 return 0;
3961}
3962
3963LRESULT CShellBrowser::OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3964{
3965 HRESULT hResult = GoForward();
3966 if (FAILED(hResult))
3967 TRACE("GoForward failed with hResult=%08lx\n", hResult);
3968 return 0;
3969}
3970
3971LRESULT CShellBrowser::OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3972{
3973 HRESULT hResult = NavigateToParent();
3974 if (FAILED(hResult))
3975 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3976 return 0;
3977}
3978
3979LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3980{
3981 HRESULT hResult = GoHome();
3982 if (FAILED(hResult))
3983 TRACE("GoHome failed with hResult=%08lx\n", hResult);
3984 return 0;
3985}
3986
3987LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3988{
3989 HRESULT hResult;
3990 if (LOBYTE(GetVersion()) < 6)
3991 hResult = NavigateToParent();
3992 else if (FAILED(hResult = GoBack()))
3993 hResult = GoForward();
3994
3995 if (FAILED(hResult))
3996 TRACE("Backspace navigation failed with hResult=%08lx\n", hResult);
3997 return 0;
3998}
3999
4001{
4003 if (FAILED(hr))
4005
4006 return hr;
4007}
4008
4009LRESULT CShellBrowser::OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4010{
4012 LPCITEMIDLIST pidlLast;
4015 return hr;
4016
4017 STRRET strret;
4018 hr = pParent->GetDisplayNameOf(pidlLast, SHGDN_FORPARSING, &strret);
4020 return 0;
4021
4022 CComHeapPtr<WCHAR> pszURL;
4023 hr = StrRetToStrW(&strret, NULL, &pszURL);
4025 return 0;
4026
4027 AddUrlToFavorites(m_hWnd, pszURL, NULL, TRUE);
4028 return 0;
4029}
4030
4031LRESULT CShellBrowser::OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4032{
4033 CComPtr<IShellFolder> psfDesktop;
4034 LPITEMIDLIST pidlFavs;
4035 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
4037 return 0;
4038
4039 hr = SHGetDesktopFolder(&psfDesktop);
4041 {
4042 ILFree(pidlFavs);
4043 return 0;
4044 }
4045
4046 hr = SHInvokeDefaultCommand(m_hWnd, psfDesktop, pidlFavs);
4047 ILFree(pidlFavs);
4049 return 0;
4050
4051 return 0;
4052}
4053
4055{
4057 m_settings.Save();
4059 return 0;
4060}
4061
4062LRESULT CShellBrowser::OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4063{
4064 HRESULT hResult;
4065 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4066 CGID_PrivCITCommands, ITID_TOOLBARLOCKED, 0, NULL, NULL);
4067 return 0;
4068}
4069
4071{
4072 HRESULT hResult;
4073 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4074 CGID_PrivCITCommands, ITID_TOOLBARBANDSHOWN, 0, NULL, NULL);
4075 return 0;
4076}
4077
4079{
4080 HRESULT hResult;
4081 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4082 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
4083 return 0;
4084}
4085
4087{
4088 HRESULT hResult;
4089 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4090 CGID_PrivCITCommands, ITID_LINKSBANDSHOWN, 0, NULL, NULL);
4091 return 0;
4092}
4093
4094LRESULT CShellBrowser::OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4095{
4096 HRESULT hResult;
4097 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4098 CGID_PrivCITCommands, ITID_TEXTLABELS, 0, NULL, NULL);
4099 return 0;
4100}
4101
4102LRESULT CShellBrowser::OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4103{
4104 HRESULT hResult;
4105 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4106 CGID_PrivCITCommands, ITID_CUSTOMIZEENABLED, 0, NULL, NULL);
4107 return 0;
4108}
4109
4110LRESULT CShellBrowser::OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4111{
4114 fCurrentShellView->Refresh();
4115 return 0;
4116}
4117
4118LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4119{
4120 return 0;
4121}
4122
4123LRESULT CShellBrowser::OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4124{
4125 // TODO: HACK ! use the proper mechanism to show the band (i.e. pass the BSTR to basebar)
4127 {
4128 MenuBandInfo *mbi;
4130 if (!mbi)
4131 return 0;
4132 ShowBand(mbi->barGuid, mbi->fVertical);
4133 bHandled = TRUE;
4134 return 1;
4135 }
4136 return 0;
4137}
4138
4139LRESULT CShellBrowser::OnToggleExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4140{
4141 UINT sbci = 0;
4142 switch (wID)
4143 {
4144 case IDM_EXPLORERBAR_SEARCH: sbci = 0x1c; break;
4145 case IDM_EXPLORERBAR_FAVORITES: sbci = 0x1e; break;
4146 case IDM_EXPLORERBAR_HISTORY: sbci = 0x1d; break;
4148 default: WARN("Unknown id %x\n", wID);
4149 }
4150 if (sbci)
4151 {
4152 this->Exec(&CGID_Explorer, sbci, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
4153 bHandled = TRUE;
4154 }
4155 return TRUE;
4156}
4157
4159{
4161 switch (LOWORD(wParam))
4162 {
4165 break;
4170 BrowseObject(pidl, SBSP_ABSOLUTE | SBSP_SAMEBROWSER | SBSP_ACTIVATE_NOFOCUS);
4171 return 0;
4172#if 0 // TODO: Toggle entire itbar(rebar) after LPTOOLBARITEM->fShow support is added
4174 break;
4175#endif
4176 }
4177
4180 return 0;
4181}
4182
4184{
4186 return 0;
4187}
4188
4190{
4191 /* Refresh child windows */
4193
4194 /* Refresh status bar */
4195 if (fStatusBar)
4196 {
4199 }
4200
4201 return 0;
4202}
4203
4205{
4206 if (!lParam)
4208
4210 return NO_ERROR;
4211}
4212
4213// WM_APPCOMMAND
4215{
4216 UINT uCmd = GET_APPCOMMAND_LPARAM(lParam), uExecCmd = 0;
4217 switch (uCmd)
4218 {
4219 case APPCOMMAND_BROWSER_BACKWARD: uExecCmd = IDM_GOTO_BACK; break;
4220 case APPCOMMAND_BROWSER_FORWARD: uExecCmd = IDM_GOTO_FORWARD; break;
4221 case APPCOMMAND_BROWSER_REFRESH: uExecCmd = IDM_VIEW_REFRESH; break;
4222 case APPCOMMAND_BROWSER_STOP: uExecCmd = FCIDM_BROWSER_STOP; break; // TODO: Handle Stop()
4223 case APPCOMMAND_BROWSER_SEARCH: uExecCmd = IDM_EXPLORERBAR_SEARCH; break;
4224 case APPCOMMAND_BROWSER_FAVORITES: uExecCmd = IDM_EXPLORERBAR_FAVORITES; break;
4225 case APPCOMMAND_BROWSER_HOME: uExecCmd = IDM_GOTO_HOMEPAGE; break;
4226 }
4227 if (uExecCmd)
4228 {
4229 SendMessage(WM_COMMAND, uExecCmd, 0);
4230 bHandled = TRUE;
4231 return TRUE;
4232 }
4233 return 0;
4234}
4235
4236LRESULT CShellBrowser::OnToggleFullscreen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4237{
4238 const UINT OrgUiSetAuto = m_BrowserSvcFlags & BSF_UISETBYAUTOMATION;
4239 const BOOL fCurrentlyFullscreen = (m_BrowserSvcFlags & BSF_THEATERMODE);
4240 const BOOL fEnter = wID ? !fCurrentlyFullscreen : wNotifyCode;
4242 if (fEnter)
4243 {
4244 VARIANT_BOOL varb;
4245 m_NonFullscreenState = (m_BrowserSvcFlags & BSF_RESIZABLE) ? FSF_RESIZE : 0;
4246 m_NonFullscreenState |= (FAILED(get_MenuBar(&varb)) || varb) ? FSF_MBAR : 0;
4247 m_NonFullscreenState |= (FAILED(get_StatusBar(&varb)) || varb) ? FSF_SBAR : 0;
4249 SetFlags(BSF_THEATERMODE, BSF_THEATERMODE);
4250 put_MenuBar(VARIANT_FALSE);
4251 put_StatusBar(VARIANT_FALSE);
4257 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4258 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4260 }
4261 else
4262 {
4263 SetFlags(0, BSF_THEATERMODE);
4264 put_MenuBar((m_NonFullscreenState & FSF_MBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4265 put_StatusBar((m_NonFullscreenState & FSF_SBAR) ? VARIANT_TRUE : VARIANT_FALSE);
4268 SHSetWindowBits(hWnd, GWL_STYLE, styles | WS_THICKFRAME, styles);
4273 }
4274 SetFlags(OrgUiSetAuto, BSF_UISETBYAUTOMATION);
4276 return 0;
4277}
4278
4280{
4282 return 0;
4283}
4284
4286{
4287 if (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_ROS_KIOSK)) // Resize fullscreen on resolution change (CORE-20072)
4288 {
4292 int x = mi.rcMonitor.left, w = mi.rcMonitor.right - x;
4293 int y = mi.rcMonitor.top, h = mi.rcMonitor.bottom - y;
4295 }
4296 return 0;
4297}
4298
4300{
4301 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
4302}
4303
4305{
4308}
4309
4311{
4313 SHGDNF flags = SHGDN_FORADDRESSBAR;
4314
4316 flags |= SHGDN_FORPARSING;
4317
4320}
4321
4323{
4324 if (!gCabinetState.fSaveLocalView || (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_UISETBYAUTOMATION)))
4325 return;
4326#if 0 // If CDesktopBrowser aggregates us, skip saving
4328 if (fCurrentShellView && SUCCEEDED(fCurrentShellView->GetCurrentInfo(&fs)) && (fs.fFlags & FWF_DESKTOP))
4329 return;
4330#endif
4331
4333 CComPtr<IStream> pITBarStream;
4334 if (!fClientBars[BIInternetToolbar].clientBar.p)
4335 return;
4337 if (FAILED(hr))
4338 return;
4340 return;
4341 pPSI->Save(pITBarStream, TRUE);
4342}
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:71
#define HandleToLong(h)
Definition: basetsd.h:74
#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:4436
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:3595
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 SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3183
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3127
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:5427
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 short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
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
#define ZeroMemory
Definition: minwinbase.h:31
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
LPCWSTR szPath
Definition: env.c:37
static HICON
Definition: imagelist.c:80
static BYTE int1[]
Definition: cert.c:3203
static BYTE int2[]
Definition: cert.c:3204
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:60
static VARIANTARG static DISPID
Definition: ordinal.c:49
static MONITORINFO mi
Definition: win.c:7338
WORD unused[29]
Definition: crypt.c:1155
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
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
_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
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define SHGetValue
Definition: shlwapi.h:836
_In_ UINT cchBuf
Definition: shlwapi.h:378
#define SHGVSPB_ROAM
Definition: shlwapi.h:172
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
@ FWF_DESKTOP
Definition: shobjidl.idl:647
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:166
#define FCIDM_SHVIEW_REFRESH
Definition: shresdef.h:897
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
Definition: windef.h:99
LONG right
Definition: windef.h:102
LONG bottom
Definition: windef.h:103
LONG top
Definition: windef.h:101
LONG left
Definition: windef.h:100
#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:932
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:930
#define ITID_TEXTLABELS
Definition: undocshell.h:929
#define ITID_MENUBANDSHOWN
Definition: undocshell.h:933
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:935
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:931
#define CWM_STATECHANGE
Definition: undocshell.h:254
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:936
#define ITBBID_MENUBAND
Definition: undocshell.h:921
_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 GetModuleHandle
Definition: winbase.h:3576
#define OutputDebugString
Definition: winbase.h:3639
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2521
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
HICON HCURSOR
Definition: windef.h:93
#define WINAPI
Definition: msvc.h:6
#define SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:542
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_UNEXPECTED
Definition: winerror.h:3528
#define E_POINTER
Definition: winerror.h:3480
#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
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
unsigned char BYTE
Definition: xxhash.c:193