ReactOS 0.4.16-dev-823-g9a093ec
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
27extern HRESULT IUnknown_ShowDW(IUnknown * punk, BOOL fShow);
28
29#include "newatlinterfaces.h"
30
31/*
32TODO:
33 **Provide implementation of new and delete that use LocalAlloc
34 **Persist history for shell view isn't working correctly, possibly because of the mismatch between traveling and updating the travel log. The
35 view doesn't restore the selection correctly.
36 **Build explorer.exe, browseui.dll, comctl32.dll, shdocvw.dll, shell32.dll, shlwapi.dll into a directory and run them for testing...
37 **Add brand band bitmaps to shell32.dll
38 **If Go button on address bar is clicked, each time a new duplicate entry is added to travel log
39****The current entry is updated in travel log before doing the travel, which means when traveling back the update of the
40 current state overwrites the wrong entry's contents. This needs to be changed.
41****Fix close of browser window to release all objects
42****Given only a GUID in ShowBrowserBar, what is the correct way to determine if the bar is vertical or horizontal?
43 **When a new bar is added to base bar site, how is base bar told so it can resize?
44 **Does the base bar site have a classid?
45 **What should refresh command send to views to make them refresh?
46 **When new bar is created, what status notifications need to be fired?
47 **How does keyboard filtering dispatch?
48 **For deferred persist history load, how does the view connect up and get the state?
49 How does context menu send open, cut, rename commands to its site (the shell view)?
50 **Fix browser to implement IProfferService and hold onto brand band correctly - this will allow animations.
51
52 **Route View->Toolbars commands to internet toolbar
53 **Handle travel log items in View->Go
54 **Fix ShowBrowserBar to pass correct size on when bar is shown
55****Fix SetBorderSpaceDW to cascade resize to subsequent bars
56****Make ShowToolbar check if bar is already created before creating it again
57****Shell should fill in the list of explorer bars in the View submenus
58 **Add folder menu in the file menu
59 **Fix CShellBrowser::GetBorderDW to compute available size correctly
60 **When a new bar is shown, re-fire the navigate event. This makes the explorer band select the correct folder
61 **Implement support for refresh. Forward refresh to explorer bar (refresh on toolbar and in menu is dispatched different)
62 Make folders toolbar item update state appropriately
63 Read list of bands from registry on launch
64 Read list of bars from registry on launch
65 If the folders or search bars don't exist, disable the toolbar buttons
66 If the favorites or history bars don't exist, disable the toolbar butons
67 Fix Apply to all Folders in Folder Options
68 Implement close command
69 Add explorer band context menu to file menu
70 Add code to allow restore of internet toolbar from registry
71 Fix code that calls FireNavigateComplete to pass the correct new path
72
73 What are the other command ids for QueryStatus/FireCommandStateChange?
74
75 Add handler for cabinet settings change
76 Add handler for system metrics change (renegotiate border space?)
77 Add handler for theme change and forward to contained windows
78
79 When folders are shown, the status bar text should change
80 Add code to save/restore shell view settings
81 Implement tabbing between frames
82 Fix handling of focus everywhere
83 Most keyboard shortcuts don't work, such as F2 for rename, F5 for refresh (see list in "explorer keyboard shortcuts")
84
85 The status bar doesn't show help text for items owned by frame during menu tracking
86 Stub out frame command handlers
87 "Arrange icons by" group is not checked properly
88
89 When folders are hidden, icon is the same as the current shell object being displayed. When folders are shown,
90 the icon is always an open folder with magnifying glass
91 Fix bars to calculate height correctly
92 Hookup policies for everything...
93 Investigate toolbar message WM_USER+93
94 Investigate toolbar message WM_USER+100 (Adds extra padding between parts of buttons with BTNS_DROPDOWN | BTNS_SHOWTEXT style
95
96 Vertical Explorer Bar CATID_InfoBand
97 Horizontal Explorer Bar CATID_CommBand
98 Desk Band CATID_DeskBand
99
100 cache of bars
101 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021493-0000-0000-C000-000000000046}\Enum
102 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021494-0000-0000-C000-000000000046}\Enum
103
104 create key here with CLSID of bar to register tool band
105 HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Toolbar
106
107*/
108
109#ifndef __GNUC__
110#pragma comment(linker, \
111 "\"/manifestdependency:type='Win32' "\
112 "name='Microsoft.Windows.Common-Controls' "\
113 "version='6.0.0.0' "\
114 "processorArchitecture='*' "\
115 "publicKeyToken='6595b64144ccf1df' "\
116 "language='*'\"")
117#endif // __GNUC__
118
119static const unsigned int folderOptionsPageCountMax = 20;
120static const long BTP_DONT_UPDATE_HISTORY = 0;
121static const long BTP_UPDATE_CUR_HISTORY = 1;
122static const long BTP_UPDATE_NEXT_HISTORY = 2;
123static const long BTP_ACTIVATE_NOFOCUS = 0x04;
124
126
127
128// this class is private to browseui.dll and is not registered externally?
129//DEFINE_GUID(CLSID_ShellFldSetExt, 0x6D5313C0, 0x8C62, 0x11D1, 0xB2, 0xCD, 0x00, 0x60, 0x97, 0xDF, 0x8C, 0x11);
130
131void DeleteMenuItems(HMENU theMenu, unsigned int firstIDToDelete, unsigned int lastIDToDelete)
132{
133 MENUITEMINFO menuItemInfo;
134 int menuItemCount;
135 int curIndex;
136
137 menuItemCount = GetMenuItemCount(theMenu);
138 curIndex = 0;
139 while (curIndex < menuItemCount)
140 {
141 menuItemInfo.cbSize = sizeof(menuItemInfo);
142 menuItemInfo.fMask = MIIM_ID;
143 if (GetMenuItemInfo(theMenu, curIndex, TRUE, &menuItemInfo) &&
144 menuItemInfo.wID >= firstIDToDelete && menuItemInfo.wID <= lastIDToDelete)
145 {
146 DeleteMenu(theMenu, curIndex, MF_BYPOSITION);
147 menuItemCount--;
148 }
149 else
150 curIndex++;
151 }
152}
153
155{
156 CComPtr<IShellFolder> desktop;
157
158 HRESULT hr = ::SHGetDesktopFolder(&desktop);
160 return E_FAIL;
161 if (path == NULL || path->mkid.cb == 0)
162 {
163 *newFolder = desktop;
164 desktop.p->AddRef ();
165 return S_OK;
166 }
167 return desktop->BindToObject (path, NULL, IID_PPV_ARG(IShellFolder, newFolder));
168}
169
170static const TCHAR szCabinetWndClass[] = TEXT("CabinetWClass");
171//static const TCHAR szExploreWndClass[] = TEXT("ExploreWClass");
172
173class CDockManager;
174class CShellBrowser;
175
177 public CWindowImpl<CToolbarProxy, CWindow, CControlWinTraits>
178{
179private:
181public:
182 void Initialize(HWND parent, IUnknown *explorerToolbar);
183 void Destroy();
184private:
185
186 // message handlers
189
194};
195
197{
198 HWND myWindow;
199 HRESULT hResult;
200
201 myWindow = SHCreateWorkerWindowW(0, parent, 0, WS_CHILD, NULL, 0);
202 if (myWindow != NULL)
203 {
204 SubclassWindow(myWindow);
205 SetWindowPos(NULL, -32000, -32000, 0, 0, SWP_NOOWNERZORDER | SWP_NOZORDER);
206 hResult = explorerToolbar->QueryInterface(
207 IID_PPV_ARG(IExplorerToolbar, &fExplorerToolbar));
208 }
209}
210
212{
215}
216
218{
219 long int result;
220 HRESULT hResult;
221
222 result = 0;
223 if (fExplorerToolbar.p != NULL)
224 {
225 hResult = fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 1, (long)wParam,
226 reinterpret_cast<TBADDBITMAP *>(lParam), &result, RGB(192, 192, 192));
227 hResult = fExplorerToolbar->AddBitmap(&CGID_ShellBrowser, 2, (long)wParam,
228 reinterpret_cast<TBADDBITMAP *>(lParam), &result, RGB(192, 192, 192));
229 }
230 return result;
231}
232
234{
236 HRESULT hResult;
237
238 result = 0;
239 if (fExplorerToolbar.p != NULL)
240 hResult = fExplorerToolbar->SendToolbarMsg(&CGID_ShellBrowser, uMsg, wParam, lParam, &result);
241 return result;
242}
243
244/*
245Switch to a new bar when it receives an Exec(CGID_IDeskBand, 1, 1, vaIn, NULL);
246 where vaIn will be a VT_UNKNOWN with the new bar. It also sends a RB_SHOWBAND to the
247 rebar
248*/
249
253};
254
256 public CWindowImpl<CShellBrowser, CWindow, CFrameWinTraits>,
257 public CComObjectRootEx<CComMultiThreadModelNoCS>,
258 public IShellBrowser,
259 public IDropTarget,
260 public IServiceProvider,
261 public IProfferServiceImpl<CShellBrowser>,
262 public IShellBrowserService,
263 public IWebBrowser2,
264 public ITravelLogClient,
265 public IPersistHistory,
266 public IDockingWindowSite,
267 public IOleCommandTarget,
268 public IBrowserService2,
269 public IConnectionPointContainerImpl<CShellBrowser>,
270 public MyIConnectionPointImpl<CShellBrowser, &DIID_DWebBrowserEvents2>,
271 public MyIConnectionPointImpl<CShellBrowser, &DIID_DWebBrowserEvents>
272{
273private:
275 {
276 public:
278 {
279 memset(&borderSpace, 0, sizeof(borderSpace));
280 hwnd = NULL;
281 }
282
286 };
287 static const int BIInternetToolbar = 0;
288 static const int BIVerticalBaseBar = 1;
289 static const int BIHorizontalBaseBar = 2;
290
291 HWND fCurrentShellViewWindow; // our currently hosted shell view window
300 GUID fCurrentVertBar; //The guid of the built in vertical bar that is being shown
301 // The next three fields support persisted history for shell views.
302 // They do not need to be reference counted.
307 HACCEL m_hAccel;
312public:
313#if 0
315 {
316 OutputDebugString(_T("AddRef\n"));
318 }
320 {
321 OutputDebugString(_T("Release\n"));
323 }
324#endif
325
329public:
334 HRESULT BrowseToPath(IShellFolder *newShellFolder, LPCITEMIDLIST absolutePIDL,
335 FOLDERSETTINGS *folderSettings, long flags);
336 void SaveViewState();
337 HRESULT GetMenuBand(REFIID riid, void **shellMenu);
338 HRESULT GetBaseBar(bool vertical, REFIID riid, void **theBaseBar);
339 BOOL IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID);
340 HRESULT ShowBand(const CLSID &classID, bool vertical);
345 void RepositionBars();
347 HRESULT BuildExplorerBandCategory(HMENU hBandsMenu, CATID category, DWORD dwPos, UINT *nbFound);
348 BOOL IsBuiltinBand(CLSID &bandID);
350 {
351 return WindowProc;
352 }
353 HRESULT FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments);
354 HRESULT FireNavigateComplete(const wchar_t *newDirectory);
355 HRESULT FireCommandStateChange(bool newState, int commandID);
359 void UpdateGotoMenu(HMENU theMenu);
360 void UpdateViewMenu(HMENU theMenu);
362 void RefreshCabinetState();
363 void UpdateWindowTitle();
364 void SaveITBarLayout();
365
366/* // *** IDockingWindowFrame methods ***
367 STDMETHOD(AddToolbar)(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags) override;
368 STDMETHOD(RemoveToolbar)(IUnknown *punkSrc, DWORD dwRemoveFlags) override;
369 STDMETHOD(FindToolbar)(LPCWSTR pwszItem, REFIID riid, void **ppv) override;
370 */
371
372 // *** IDockingWindowSite methods ***
373 STDMETHOD(GetBorderDW)(IUnknown* punkObj, LPRECT prcBorder) override;
374 STDMETHOD(RequestBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
375 STDMETHOD(SetBorderSpaceDW)(IUnknown* punkObj, LPCBORDERWIDTHS pbw) override;
376
377 // *** IOleCommandTarget methods ***
378 STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds,
379 OLECMD prgCmds[ ], OLECMDTEXT *pCmdText) override;
380 STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID,
381 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override;
382
383 // *** IOleWindow methods ***
384 STDMETHOD(GetWindow)(HWND *lphwnd) override;
385 STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode) override;
386
387 // *** IShellBrowser methods ***
388 STDMETHOD(InsertMenusSB)(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override;
389 STDMETHOD(SetMenuSB)(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override;
390 STDMETHOD(RemoveMenusSB)(HMENU hmenuShared) override;
391 STDMETHOD(SetStatusTextSB)(LPCOLESTR pszStatusText) override;
392 STDMETHOD(EnableModelessSB)(BOOL fEnable) override;
393 STDMETHOD(TranslateAcceleratorSB)(MSG *pmsg, WORD wID) override;
395 STDMETHOD(GetViewStateStream)(DWORD grfMode, IStream **ppStrm) override;
396 STDMETHOD(GetControlWindow)(UINT id, HWND *lphwnd) override;
398 STDMETHOD(QueryActiveShellView)(IShellView **ppshv) override;
399 STDMETHOD(OnViewWindowActive)(IShellView *ppshv) override;
400 STDMETHOD(SetToolbarItems)(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override;
401
402 // *** IDropTarget methods ***
403 STDMETHOD(DragEnter)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
404 STDMETHOD(DragOver)(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
405 STDMETHOD(DragLeave)() override;
406 STDMETHOD(Drop)(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override;
407
408 // *** IServiceProvider methods ***
409 STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void **ppvObject) override;
410
411 // *** IShellBrowserService methods ***
412 STDMETHOD(GetPropertyBag)(long flags, REFIID riid, void **ppvObject) override;
413
414 // *** IDispatch methods ***
415 STDMETHOD(GetTypeInfoCount)(UINT *pctinfo) override;
416 STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) override;
418 REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) override;
419 STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
420 DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) override;
421
422 // *** IBrowserService methods ***
423 STDMETHOD(GetParentSite)(IOleInPlaceSite **ppipsite) override;
424 STDMETHOD(SetTitle)(IShellView *psv, LPCWSTR pszName) override;
425 STDMETHOD(GetTitle)(IShellView *psv, LPWSTR pszName, DWORD cchName) override;
426 STDMETHOD(GetOleObject)(IOleObject **ppobjv) override;
428 STDMETHOD(ShowControlWindow)(UINT id, BOOL fShow) override;
429 STDMETHOD(IsControlWindowShown)(UINT id, BOOL *pfShown) override;
430 STDMETHOD(IEGetDisplayName)(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) override;
431 STDMETHOD(IEParseDisplayName)(UINT uiCP, LPCWSTR pwszPath, LPITEMIDLIST *ppidlOut) override;
432 STDMETHOD(DisplayParseError)(HRESULT hres, LPCWSTR pwszPath) override;
433 STDMETHOD(NavigateToPidl)(LPCITEMIDLIST pidl, DWORD grfHLNF) override;
434 STDMETHOD(SetNavigateState)(BNSTATE bnstate) override;
435 STDMETHOD(GetNavigateState)(BNSTATE *pbnstate) override;
436 STDMETHOD(NotifyRedirect)(IShellView *psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) override;
437 STDMETHOD(UpdateWindowList)() override;
439 STDMETHOD(SetFlags)(DWORD dwFlags, DWORD dwFlagMask) override;
440 STDMETHOD(GetFlags)(DWORD *pdwFlags) override;
441 STDMETHOD(CanNavigateNow)( void) override;
442 STDMETHOD(GetPidl)(LPITEMIDLIST *ppidl) override;
443 STDMETHOD(SetReferrer)(LPCITEMIDLIST pidl) override;
445 STDMETHOD(GetBrowserByIndex)(DWORD dwID, IUnknown **ppunk) override;
446 STDMETHOD(GetHistoryObject)(IOleObject **ppole, IStream **pstm, IBindCtx **ppbc) override;
447 STDMETHOD(SetHistoryObject)(IOleObject *pole, BOOL fIsLocalAnchor) override;
448 STDMETHOD(CacheOLEServer)(IOleObject *pole) override;
449 STDMETHOD(GetSetCodePage)(VARIANT *pvarIn, VARIANT *pvarOut) override;
450 STDMETHOD(OnHttpEquiv)(IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut) override;
451 STDMETHOD(GetPalette)(HPALETTE *hpal) override;
452 STDMETHOD(RegisterWindow)(BOOL fForceRegister, int swc) override;
453
454 // *** IBrowserService2 methods ***
457 STDMETHOD(GetViewRect)(RECT *prc) override;
458 STDMETHOD(OnSize)(WPARAM wParam) override;
459 STDMETHOD(OnCreate)(struct tagCREATESTRUCTW *pcs) override;
461 STDMETHOD(OnDestroy)() override;
462 STDMETHOD_(LRESULT, OnNotify)(struct tagNMHDR *pnm) override;
463 STDMETHOD(OnSetFocus)() override;
464 STDMETHOD(OnFrameWindowActivateBS)(BOOL fActive) override;
465 STDMETHOD(ReleaseShellView)() override;
466 STDMETHOD(ActivatePendingView)() override;
467 STDMETHOD(CreateViewWindow)(IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd) override;
469 STDMETHOD(GetViewWindow)(HWND *phwndView) override;
473 STDMETHOD(SetTopBrowser)() override;
474 STDMETHOD(Offline)(int iCmd) override;
475 STDMETHOD(AllowViewResize)(BOOL f) override;
476 STDMETHOD(SetActivateState)(UINT u) override;
477 STDMETHOD(UpdateSecureLockIcon)(int eSecureLock) override;
480 STDMETHOD(_Initialize)(HWND hwnd, IUnknown *pauto) override;
482 STDMETHOD(_CancelPendingView)() override;
483 STDMETHOD(_MaySaveChanges)() override;
484 STDMETHOD(_PauseOrResumeView)(BOOL fPaused) override;
485 STDMETHOD(_DisableModeless)() override;
486 STDMETHOD(_NavigateToPidl)(LPCITEMIDLIST pidl, DWORD grfHLNF, DWORD dwFlags) override;
487 STDMETHOD(_TryShell2Rename)(IShellView *psv, LPCITEMIDLIST pidlNew) override;
489 STDMETHOD(_ExecChildren)(IUnknown *punkBar, BOOL fBroadcast, const GUID *pguidCmdGroup,
490 DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut) override;
492 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
493 STDMETHOD(GetFolderSetData)(struct tagFolderSetData *pfsd) override;
494 STDMETHOD(_OnFocusChange)(UINT itb) override;
495 STDMETHOD(v_ShowHideChildWindows)(BOOL fChildOnly) override;
497 STDMETHOD(_put_itbLastFocus)(UINT itbLastFocus) override;
498 STDMETHOD(_UIActivateView)(UINT uState) override;
500 STDMETHOD(_UpdateViewRectSize)() override;
501 STDMETHOD(_ResizeNextBorder)(UINT itb) override;
502 STDMETHOD(_ResizeView)() override;
503 STDMETHOD(_GetEffectiveClientArea)(LPRECT lprectBorder, HMONITOR hmon) override;
506 STDMETHOD(SetAcceleratorMenu)(HACCEL hacc) override;
507 STDMETHOD_(int, _GetToolbarCount)() override;
509 STDMETHOD(_SaveToolbars)(IStream *pstm) override;
510 STDMETHOD(_LoadToolbars)(IStream *pstm) override;
511 STDMETHOD(_CloseAndReleaseToolbars)(BOOL fClose) override;
513 int citb, LPTOOLBARITEM *pptbi, HWND *phwnd) override;
514 STDMETHOD(_ResizeNextBorderHelper)(UINT itb, BOOL bUseHmonitor) override;
515 STDMETHOD_(UINT, _FindTBar)(IUnknown *punkSrc) override;
516 STDMETHOD(_SetFocus)(LPTOOLBARITEM ptbi, HWND hwnd, LPMSG lpMsg) override;
517 STDMETHOD(v_MayTranslateAccelerator)(MSG *pmsg) override;
518 STDMETHOD(_GetBorderDWHelper)(IUnknown *punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) override;
520
521 // *** IWebBrowser methods ***
522 STDMETHOD(GoBack)() override;
523 STDMETHOD(GoForward)() override;
524 STDMETHOD(GoHome)() override;
525 STDMETHOD(GoSearch)() override;
526 STDMETHOD(Navigate)(BSTR URL, VARIANT *Flags, VARIANT *TargetFrameName,
527 VARIANT *PostData, VARIANT *Headers) override;
528 STDMETHOD(Refresh)() override;
529 STDMETHOD(Refresh2)(VARIANT *Level) override;
530 STDMETHOD(Stop)() override;
531 STDMETHOD(get_Application)(IDispatch **ppDisp) override;
532 STDMETHOD(get_Parent)(IDispatch **ppDisp) override;
533 STDMETHOD(get_Container)(IDispatch **ppDisp) override;
534 STDMETHOD(get_Document)(IDispatch **ppDisp) override;
536 STDMETHOD(get_Type)(BSTR *Type) override;
537 STDMETHOD(get_Left)(long *pl) override;
538 STDMETHOD(put_Left)(long Left) override;
539 STDMETHOD(get_Top)(long *pl) override;
540 STDMETHOD(put_Top)(long Top) override;
541 STDMETHOD(get_Width)(long *pl) override;
542 STDMETHOD(put_Width)(long Width) override;
543 STDMETHOD(get_Height)(long *pl) override;
544 STDMETHOD(put_Height)(long Height) override;
545 STDMETHOD(get_LocationName)(BSTR *LocationName) override;
546 STDMETHOD(get_LocationURL)(BSTR *LocationURL) override;
547 STDMETHOD(get_Busy)(VARIANT_BOOL *pBool) override;
548
549 // *** IWebBrowserApp methods ***
550 STDMETHOD(Quit)() override;
551 STDMETHOD(ClientToWindow)(int *pcx, int *pcy) override;
552 STDMETHOD(PutProperty)(BSTR Property, VARIANT vtValue) override;
553 STDMETHOD(GetProperty)(BSTR Property, VARIANT *pvtValue) override;
554 STDMETHOD(get_Name)(BSTR *Name) override;
555 STDMETHOD(get_HWND)(SHANDLE_PTR *pHWND) override;
557 STDMETHOD(get_Path)(BSTR *Path) override;
558 STDMETHOD(get_Visible)(VARIANT_BOOL *pBool) override;
560 STDMETHOD(get_StatusBar)(VARIANT_BOOL *pBool) override;
562 STDMETHOD(get_StatusText)(BSTR *StatusText) override;
563 STDMETHOD(put_StatusText)(BSTR StatusText) override;
564 STDMETHOD(get_ToolBar)(int *Value) override;
565 STDMETHOD(put_ToolBar)(int Value) override;
568 STDMETHOD(get_FullScreen)(VARIANT_BOOL *pbFullScreen) override;
569 STDMETHOD(put_FullScreen)(VARIANT_BOOL bFullScreen) override;
570
571 // *** IWebBrowser2 methods ***
572 STDMETHOD(Navigate2)(VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName,
573 VARIANT *PostData, VARIANT *Headers) override;
574 STDMETHOD(QueryStatusWB)(OLECMDID cmdID, OLECMDF *pcmdf) override;
575 STDMETHOD(ExecWB)(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt,
576 VARIANT *pvaIn, VARIANT *pvaOut) override;
577 STDMETHOD(ShowBrowserBar)(VARIANT *pvaClsid, VARIANT *pvarShow, VARIANT *pvarSize) override;
578 STDMETHOD(get_ReadyState)(READYSTATE *plReadyState) override;
579 STDMETHOD(get_Offline)(VARIANT_BOOL *pbOffline) override;
580 STDMETHOD(put_Offline)(VARIANT_BOOL bOffline) override;
581 STDMETHOD(get_Silent)(VARIANT_BOOL *pbSilent) override;
582 STDMETHOD(put_Silent)(VARIANT_BOOL bSilent) override;
583 STDMETHOD(get_RegisterAsBrowser)(VARIANT_BOOL *pbRegister) override;
584 STDMETHOD(put_RegisterAsBrowser)(VARIANT_BOOL bRegister) override;
585 STDMETHOD(get_RegisterAsDropTarget)(VARIANT_BOOL *pbRegister) override;
587 STDMETHOD(get_TheaterMode)(VARIANT_BOOL *pbRegister) override;
588 STDMETHOD(put_TheaterMode)(VARIANT_BOOL bRegister) override;
593
594 // *** ITravelLogClient methods ***
595 STDMETHOD(FindWindowByIndex)(DWORD dwID, IUnknown **ppunk) override;
596 STDMETHOD(GetWindowData)(IStream *pStream, LPWINDOWDATA pWinData) override;
597 STDMETHOD(LoadHistoryPosition)(LPWSTR pszUrlLocation, DWORD dwPosition) override;
598
599 // *** IPersist methods ***
600 STDMETHOD(GetClassID)(CLSID *pClassID) override;
601
602 // *** IPersistHistory methods ***
603 STDMETHOD(LoadHistory)(IStream *pStream, IBindCtx *pbc) override;
604 STDMETHOD(SaveHistory)(IStream *pStream) override;
605 STDMETHOD(SetPositionCookie)(DWORD dwPositioncookie) override;
606 STDMETHOD(GetPositionCookie)(DWORD *pdwPositioncookie) override;
607
608 // message handlers
617 LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
618 LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
619 LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
620 LRESULT OnDisconnectNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
621 LRESULT OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
622 LRESULT OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
623 LRESULT OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
624 LRESULT OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
625 LRESULT OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
626 LRESULT OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
627 LRESULT OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
628 LRESULT OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
629 LRESULT OnToggleStatusBarVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
630 LRESULT OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
631 LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
632 LRESULT OnToggleAddressBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
633 LRESULT OnToggleLinksBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
634 LRESULT OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
635 LRESULT OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
636 LRESULT OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
637 LRESULT OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
638 LRESULT OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
645
647 {
648 static ATL::CWndClassInfo wc =
649 {
651 0, 0, NULL, LoadIcon(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET)),
653 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
654 };
655 return wc;
656 }
657
701
703 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2)
704 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents)
706
708 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
709 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
711 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
712 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
713 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
714 COM_INTERFACE_ENTRY_IID(IID_IProfferService, IProfferService)
715 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService, IShellBrowserService)
718 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser, IWebBrowser)
719 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp, IWebBrowserApp)
720 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2, IWebBrowser2)
721 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient, ITravelLogClient)
723 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory, IPersistHistory)
724 COM_INTERFACE_ENTRY_IID(IID_IBrowserService, IBrowserService)
725 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2, IBrowserService2)
727};
728
730
732{
733 m_BrowserSvcFlags = BSF_RESIZABLE | BSF_CANMAXIMIZE;
734 m_Destroyed = false;
746}
747
749{
750 if (menuDsa)
752}
753
755{
756 CComPtr<IPersistStreamInit> persistStreamInit;
757 HRESULT hResult;
758 CComPtr<IUnknown> clientBar;
759
761
762 menuDsa = DSA_Create(sizeof(MenuBandInfo), 5);
763 if (!menuDsa)
764 return E_OUTOFMEMORY;
765
766 // create window
768 if (m_hWnd == NULL)
769 return E_FAIL;
770
772 if (FAILED_UNEXPECTEDLY(hResult))
773 return hResult;
774
776
777 // create interfaces
778 hResult = clientBar->QueryInterface(IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
779 if (FAILED_UNEXPECTEDLY(hResult))
780 return hResult;
781
782 hResult = IUnknown_SetSite(clientBar, static_cast<IShellBrowser *>(this));
783 if (FAILED_UNEXPECTEDLY(hResult))
784 return hResult;
785
786 hResult = IUnknown_Exec(clientBar, CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
787 if (FAILED_UNEXPECTEDLY(hResult))
788 return hResult;
789
790 CComPtr<IStream> pITBarStream;
792 hResult = SUCCEEDED(hResult) ? persistStreamInit->Load(pITBarStream) : persistStreamInit->InitNew();
793 if (FAILED_UNEXPECTEDLY(hResult))
794 return hResult;
795
796 hResult = IUnknown_ShowDW(clientBar, TRUE);
797 if (FAILED_UNEXPECTEDLY(hResult))
798 return hResult;
799
800 fToolbarProxy.Initialize(m_hWnd, clientBar);
801
802 // create status bar
805 dwStatusStyle |= WS_VISIBLE;
807 0, 0, 500, 20, m_hWnd, (HMENU)IDC_STATUSBAR,
808 _AtlBaseModule.GetModuleInstance(), 0);
809
811 UpdateWindow();
812
813 return S_OK;
814}
815
817{
818 HRESULT hr;
819 if (pvs)
820 {
822 SBFOLDERSETTINGS &sbfs = m_deffoldersettings, defsbfs;
823 if (FAILED(pvs->GetCurrentInfo(&sbfs.FolderSettings)))
824 {
825 defsbfs.InitializeDefaults();
826 sbfs = defsbfs;
827 }
829 }
830 else
831 {
834 if (SUCCEEDED(hr))
836 }
837 return hr;
838}
839
841{
842 if ((Flags & (SBSP_SAMEBROWSER | SBSP_NEWBROWSER)) == SBSP_DEFBROWSER)
843 {
845 Flags |= SBSP_SAMEBROWSER; // Force if this is the first navigation or the folder tree is present
846 else
847 Flags |= (!!gCabinetState.fNewWindowMode) ^ (GetAsyncKeyState(VK_CONTROL) < 0) ? SBSP_NEWBROWSER : SBSP_SAMEBROWSER;
848 }
849 if (Flags & (SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
850 Flags = (Flags & ~SBSP_NEWBROWSER) | SBSP_SAMEBROWSER; // Force same browser for now
851 return Flags;
852}
853
855{
856 SaveITBarLayout(); // Do this now so the new window inherits the current layout
857 // TODO: www.geoffchappell.com/studies/windows/ie/shdocvw/interfaces/inotifyappstart.htm
858 DWORD flags = (SbspFlags & SBSP_EXPLOREMODE) ? SH_EXPLORER_CMDLINE_FLAG_E : 0;
859 if ((SbspFlags & (SBSP_OPENMODE | SBSP_EXPLOREMODE)) == SBSP_DEFMODE)
861 LPITEMIDLIST pidlDir;
862 HRESULT hr = SHILClone(pidl, &pidlDir);
863 if (FAILED(hr))
864 return hr;
865 // TODO: !SBSP_NOTRANSFERHIST means we are supposed to pass the history here somehow?
867}
868
870{
871 if (SbspFlags & SBSP_RELATIVE)
872 return SHILCombine(fCurrentDirectoryPIDL, relative, ppidl);
873
874 if (SbspFlags & SBSP_PARENT)
875 {
876 HRESULT hr = GetPidl(ppidl);
877 if (FAILED(hr))
878 return hr;
879 ILRemoveLastID(*ppidl);
880 return S_OK;
881 }
882 // TODO: SBSP_NAVIGATEBACK and SBSP_NAVIGATEFORWARD?
883 return E_UNEXPECTED;
884}
885
887{
888 CComPtr<IShellFolder> newFolder;
890 HRESULT hResult;
891 CLSID clsid;
892 BOOL HasIconViewType;
893
894 // called by shell view to browse to new folder
895 // also called by explorer band to navigate to new folder
896 hResult = SHBindToFolder(pidl, &newFolder);
897 if (FAILED_UNEXPECTEDLY(hResult))
898 return hResult;
899 // HACK & FIXME: Get view mode from shellbag when fully implemented.
900 IUnknown_GetClassID(newFolder, &clsid);
901 HasIconViewType = clsid == CLSID_MyComputer || clsid == CLSID_ControlPanel ||
902 clsid == CLSID_ShellDesktop;
903
904 if (HasIconViewType)
905 newFolderSettings.ViewMode = FVM_ICON;
906 hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
907 if (FAILED_UNEXPECTEDLY(hResult))
908 return hResult;
909 return S_OK;
910}
911
913{
914 LPCITEMIDLIST pidlnext;
915 WORD length;
916 BOOL ret;
917
918 ret = TRUE;
919 if (! _ILIsDesktop(pidl))
920 {
921 length = pidl->mkid.cb;
922 pidlnext =
923 reinterpret_cast<LPCITEMIDLIST>(
924 reinterpret_cast<const BYTE *>(pidl) + length);
925 if (pidlnext->mkid.cb != 0)
926 ret = FALSE;
927 }
928 return ret;
929}
930
932 const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
933{
935 LPITEMIDLIST pidlChild;
936 LPITEMIDLIST pidlParent;
937 HRESULT hResult;
938
939 hResult = E_FAIL;
940 if (ppv == NULL)
941 return E_POINTER;
942 *ppv = NULL;
943 if (ppidlLast != NULL)
944 *ppidlLast = NULL;
945 if (_ILIsPidlSimple(pidl))
946 {
947 if (ppidlLast != NULL)
948 *ppidlLast = ILClone(pidl);
949 hResult = SHGetDesktopFolder((IShellFolder **)ppv);
950 }
951 else
952 {
953 pidlChild = ILClone(ILFindLastID(pidl));
954 pidlParent = ILClone(pidl);
955 ILRemoveLastID(pidlParent);
956 hResult = SHGetDesktopFolder(&psf);
957 if (SUCCEEDED(hResult))
958 hResult = psf->BindToObject(pidlParent, NULL, *riid, ppv);
959 if (SUCCEEDED(hResult) && ppidlLast != NULL)
960 *ppidlLast = pidlChild;
961 else
962 ILFree(pidlChild);
963 ILFree(pidlParent);
964 }
965 return hResult;
966}
967
969 LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
970{
971 CComPtr<IShellFolder> parentFolder;
972 LPITEMIDLIST childPIDL = NULL;
973 STRRET L108;
974 HRESULT hResult;
975
976 hResult = SHBindToFolderIDListParent(NULL, pidl, &IID_PPV_ARG(IShellFolder, &parentFolder), &childPIDL);
977 if (FAILED(hResult))
978 goto cleanup;
979
980 hResult = parentFolder->GetDisplayNameOf(childPIDL, uFlags, &L108);
981 if (FAILED(hResult))
982 goto cleanup;
983
984 StrRetToBufW(&L108, childPIDL, pszBuf, cchBuf);
985 if (rgfInOut)
986 {
987 hResult = parentFolder->GetAttributesOf(1, const_cast<LPCITEMIDLIST *>(&childPIDL), rgfInOut);
988 if (FAILED(hResult))
989 goto cleanup;
990 }
991
992 hResult = S_OK;
993
994cleanup:
995 if (childPIDL)
996 ILFree(childPIDL);
997 return hResult;
998}
999
1000HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
1001{
1002 return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
1003}
1004
1006{
1007 // TODO: Also respect EBO_NOPERSISTVIEWSTATE?
1009 fCurrentShellView->SaveViewState();
1010}
1011
1013 LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
1014{
1015 CComPtr<IShellFolder> saveCurrentShellFolder;
1016 CComPtr<IShellView> saveCurrentShellView;
1017 CComPtr<IShellView> newShellView;
1018 CComPtr<ITravelLog> travelLog;
1019 HWND newShellViewWindow;
1020 BOOL windowUpdateIsLocked;
1021 RECT shellViewWindowBounds;
1022 HWND previousView;
1023 HCURSOR saveCursor;
1024 wchar_t newTitle[MAX_PATH];
1025 SHGDNF nameFlags;
1026 HRESULT hResult;
1027 //TODO: BOOL nohistory = m_BrowserSvcFlags & BSF_NAVNOHISTORY;
1028
1029 if (m_Destroyed)
1030 return S_FALSE;
1031
1032 if (newShellFolder == NULL)
1033 return E_INVALIDARG;
1034
1035 hResult = GetTravelLog(&travelLog);
1036 if (FAILED_UNEXPECTEDLY(hResult))
1037 return hResult;
1038
1039 if (FAILED_UNEXPECTEDLY(hResult = SHILClone(absolutePIDL, &absolutePIDL)))
1040 return hResult;
1041 CComHeapPtr<ITEMIDLIST> pidlAbsoluteClone(const_cast<LPITEMIDLIST>(absolutePIDL));
1042
1043 // update history
1045 {
1046 if (travelLog->CountEntries(static_cast<IDropTarget *>(this)) > 0)
1047 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1048 // what to do with error? Do we want to halt browse because state save failed?
1049 }
1050
1052 {
1053 SaveViewState();
1054 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
1055 }
1056
1057 // create view object
1058 hResult = newShellFolder->CreateViewObject(m_hWnd, IID_PPV_ARG(IShellView, &newShellView));
1059 if (FAILED_UNEXPECTEDLY(hResult))
1060 return hResult;
1061 previousView = fCurrentShellViewWindow;
1062
1063 // enter updating section
1064 saveCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
1065 windowUpdateIsLocked = LockWindowUpdate(TRUE);
1066 if (fCurrentShellView != NULL)
1068
1069 // set site
1070 hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
1071
1072 // update folder and view
1073 saveCurrentShellFolder = fCurrentShellFolder;
1074 saveCurrentShellView = fCurrentShellView;
1075 fCurrentShellFolder = newShellFolder;
1076 fCurrentShellView = newShellView;
1077
1078 // get boundary
1079 if (previousView != NULL)
1080 ::GetWindowRect(previousView, &shellViewWindowBounds);
1081 else
1082 ZeroMemory(&shellViewWindowBounds, sizeof(shellViewWindowBounds));
1083 ::MapWindowPoints(0, m_hWnd, reinterpret_cast<POINT *>(&shellViewWindowBounds), 2);
1084
1085 // update current pidl
1087 fCurrentDirectoryPIDL = pidlAbsoluteClone.Detach();
1088 /* CORE-19697: CAddressEditBox::OnWinEvent(CBN_SELCHANGE) causes CAddressEditBox to
1089 * call BrowseObject(pidlLastParsed). As part of our browsing we call FireNavigateComplete
1090 * and this in turn causes CAddressEditBox::Invoke to ILFree(pidlLastParsed)!
1091 * We then call SHBindToParent on absolutePIDL (which is really (the now invalid) pidlLastParsed) and we
1092 * end up accessing invalid memory! We therefore set absolutePIDL to be our cloned PIDL here.
1093 */
1094 absolutePIDL = fCurrentDirectoryPIDL;
1095
1096 // create view window
1097 hResult = newShellView->CreateViewWindow(saveCurrentShellView, folderSettings,
1098 this, &shellViewWindowBounds, &newShellViewWindow);
1099 if (FAILED_UNEXPECTEDLY(hResult) || newShellViewWindow == NULL)
1100 {
1101 fCurrentShellView = saveCurrentShellView;
1102 fCurrentShellFolder = saveCurrentShellFolder;
1104 if (windowUpdateIsLocked)
1106 SetCursor(saveCursor);
1107 return hResult;
1108 }
1109
1110 // update view window
1111 if (saveCurrentShellView != NULL)
1112 saveCurrentShellView->DestroyViewWindow();
1113 fCurrentShellViewWindow = newShellViewWindow;
1114
1115 if (previousView == NULL)
1116 {
1118 }
1119
1120 // no use
1121 saveCurrentShellView.Release();
1122 saveCurrentShellFolder.Release();
1123
1124 hResult = newShellView->UIActivate((flags & BTP_ACTIVATE_NOFOCUS) ? SVUIA_ACTIVATE_NOFOCUS : SVUIA_ACTIVATE_FOCUS);
1125
1126 // leave updating section
1127 if (windowUpdateIsLocked)
1129 SetCursor(saveCursor);
1130
1131 // update history
1133 {
1134 hResult = travelLog->AddEntry(static_cast<IDropTarget *>(this), FALSE);
1135 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1136 }
1137
1138 // completed
1139 nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
1140 hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
1141 sizeof(newTitle) / sizeof(wchar_t), NULL);
1142 if (SUCCEEDED(hResult))
1143 {
1144 FireNavigateComplete(newTitle);
1145 }
1146 else
1147 {
1148 FireNavigateComplete(L"ERROR");
1149 }
1150
1152
1153 LPCITEMIDLIST pidlChild;
1154 INT index, indexOpen;
1155 HIMAGELIST himlSmall, himlLarge;
1156
1158 hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
1159 if (SUCCEEDED(hResult))
1160 {
1161 index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
1162
1163 Shell_GetImageLists(&himlLarge, &himlSmall);
1164
1165 HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
1166 HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
1167
1168 /* Hack to make it possible to release the old icons */
1169 /* Something seems to go wrong with WM_SETICON */
1170 HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
1171 HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
1172
1173 SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
1174 SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
1175
1176 DestroyIcon(oldSmall);
1177 DestroyIcon(oldLarge);
1178 }
1179
1181 hResult = UpdateForwardBackState();
1182 hResult = UpdateUpState();
1183 return S_OK;
1184}
1185
1187{
1188 CComPtr<IBandSite> bandSite;
1189 CComPtr<IDeskBand> deskBand;
1190 HRESULT hResult;
1191
1192 if (!fClientBars[BIInternetToolbar].clientBar)
1193 return E_FAIL;
1194
1196 if (FAILED_UNEXPECTEDLY(hResult))
1197 return hResult;
1198
1199 hResult = bandSite->QueryBand(ITBBID_MENUBAND, &deskBand, NULL, NULL, 0);
1200 return FAILED(hResult) ? hResult : deskBand->QueryInterface(riid, shellMenu); // It is expected that this might fail during WM_DESTROY
1201}
1202
1203HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
1204{
1205 CComPtr<IUnknown> newBaseBar;
1206 CComPtr<IDeskBar> deskBar;
1207 CComPtr<IUnknown> newBaseBarSite;
1208 CComPtr<IDeskBarClient> deskBarClient;
1209 IUnknown **cache;
1210 HRESULT hResult;
1211
1212 if (vertical)
1214 else
1216 if (*cache == NULL)
1217 {
1218 hResult = CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBar), vertical);
1219 if (FAILED_UNEXPECTEDLY(hResult))
1220 return hResult;
1221 hResult = CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBarSite), vertical);
1222 if (FAILED_UNEXPECTEDLY(hResult))
1223 return hResult;
1224
1225 // we have to store our basebar into cache now
1226 *cache = newBaseBar;
1227 (*cache)->AddRef();
1228
1229 // tell the new base bar about the shell browser
1230 hResult = IUnknown_SetSite(newBaseBar, static_cast<IDropTarget *>(this));
1231 if (FAILED_UNEXPECTEDLY(hResult))
1232 return hResult;
1233
1234 // tell the new base bar about the new base bar site
1235 hResult = newBaseBar->QueryInterface(IID_PPV_ARG(IDeskBar, &deskBar));
1236 if (FAILED_UNEXPECTEDLY(hResult))
1237 return hResult;
1238 hResult = deskBar->SetClient(newBaseBarSite);
1239 if (FAILED_UNEXPECTEDLY(hResult))
1240 return hResult;
1241
1242 // tell the new base bar site about the new base bar
1243 hResult = newBaseBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &deskBarClient));
1244 if (FAILED_UNEXPECTEDLY(hResult))
1245 return hResult;
1246 hResult = deskBarClient->SetDeskBarSite(newBaseBar);
1247 if (FAILED_UNEXPECTEDLY(hResult))
1248 return hResult;
1249
1250 }
1251 return (*cache)->QueryInterface(riid, theBaseBar);
1252}
1253
1254BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
1255{
1256 HRESULT hResult;
1257 CComPtr<IDeskBar> deskBar;
1258 CComPtr<IUnknown> baseBarSite;
1259 CComPtr<IBandSite> bandSite;
1260 CLSID clsidTmp;
1261 DWORD numBands;
1262 DWORD dwBandID;
1263 DWORD i;
1264
1265 /* Get our basebarsite to be able to enumerate bands */
1266 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1267 if (FAILED_UNEXPECTEDLY(hResult))
1268 return FALSE;
1269 hResult = deskBar->GetClient(&baseBarSite);
1270 if (FAILED_UNEXPECTEDLY(hResult))
1271 return FALSE;
1272 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &bandSite));
1273 if (FAILED_UNEXPECTEDLY(hResult))
1274 return FALSE;
1275
1276 numBands = bandSite->EnumBands(-1, NULL);
1277 for (i = 0; i < numBands; i++)
1278 {
1279 CComPtr<IPersist> bandPersist;
1280
1281 hResult = bandSite->EnumBands(i, &dwBandID);
1282 if (FAILED_UNEXPECTEDLY(hResult))
1283 return FALSE;
1284
1285 hResult = bandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &bandPersist));
1286 if (FAILED_UNEXPECTEDLY(hResult))
1287 return FALSE;
1288 hResult = bandPersist->GetClassID(&clsidTmp);
1289 if (FAILED_UNEXPECTEDLY(hResult))
1290 return FALSE;
1291 if (IsEqualGUID(clsidBand, clsidTmp))
1292 {
1293 if (pdwBandID) *pdwBandID = dwBandID;
1294 return TRUE;
1295 }
1296 }
1297 return FALSE;
1298}
1299
1300HRESULT CShellBrowser::ShowBand(const CLSID &classID, bool vertical)
1301{
1302 CComPtr<IDockingWindow> dockingWindow;
1303 CComPtr<IUnknown> baseBarSite;
1304 CComPtr<IUnknown> newBand;
1305 CComPtr<IDeskBar> deskBar;
1306 VARIANT vaIn;
1307 HRESULT hResult;
1308 DWORD dwBandID;
1309
1310 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1311 if (FAILED_UNEXPECTEDLY(hResult))
1312 return hResult;
1313
1314 hResult = deskBar->GetClient(&baseBarSite);
1315 if (FAILED_UNEXPECTEDLY(hResult))
1316 return hResult;
1317
1318 hResult = deskBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
1319 if (FAILED_UNEXPECTEDLY(hResult))
1320 return hResult;
1321
1322 if (!IsBandLoaded(classID, vertical, &dwBandID))
1323 {
1324 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID), vertical);
1325 if (IsEqualCLSID(CLSID_ExplorerBand, classID))
1326 {
1327 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1329 if (FAILED_UNEXPECTEDLY(hResult))
1330 return hResult;
1331 }
1332 else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
1333 {
1334 TRACE("CLSID_FileSearchBand requested, building internal band.\n");
1335 hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
1336 if (FAILED_UNEXPECTEDLY(hResult))
1337 return hResult;
1338 }
1339 else
1340 {
1341 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1342 hResult = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, &newBand));
1343 if (FAILED_UNEXPECTEDLY(hResult))
1344 return hResult;
1345 }
1346 }
1347 else
1348 {
1349 CComPtr<IBandSite> pBandSite;
1350
1351 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &pBandSite));
1352 if (!SUCCEEDED(hResult))
1353 {
1354 ERR("Can't get IBandSite interface\n");
1355 return E_FAIL;
1356 }
1357 hResult = pBandSite->GetBandObject(dwBandID, IID_PPV_ARG(IUnknown, &newBand));
1358 if (!SUCCEEDED(hResult))
1359 {
1360 ERR("Can't find band object\n");
1361 return E_FAIL;
1362 }
1363
1364 // It's hackish, but we should be able to show the wanted band until we
1365 // find the proper way to do this (but it seems to work to add a new band)
1366 // Here we'll just re-add the existing band to the site, causing it to display.
1367 }
1368 V_VT(&vaIn) = VT_UNKNOWN;
1369 V_UNKNOWN(&vaIn) = newBand.p;
1370 hResult = IUnknown_Exec(baseBarSite, CGID_IDeskBand, 1, 1, &vaIn, NULL);
1371 if (FAILED_UNEXPECTEDLY(hResult))
1372 {
1373 return hResult;
1374 }
1375
1376 hResult = dockingWindow->ShowDW(TRUE);
1377 if (FAILED_UNEXPECTEDLY(hResult))
1378 return hResult;
1379
1380 if (vertical)
1381 {
1382 fCurrentVertBar = classID;
1384 }
1385
1386 return S_OK;
1387}
1388
1390{
1392 if (newDirectory == NULL)
1393 return E_OUTOFMEMORY;
1394 if (_ILIsDesktop(newDirectory))
1395 {
1396 ILFree(newDirectory);
1397 return E_INVALIDARG;
1398 }
1399 ILRemoveLastID(newDirectory);
1401 ILFree(newDirectory);
1402 if (FAILED_UNEXPECTEDLY(hResult))
1403 return hResult;
1404 return S_OK;
1405}
1406
1408{
1409 PROPSHEETHEADER* sheetInfo = reinterpret_cast<PROPSHEETHEADER*>(lParam);
1410 if (sheetInfo->nPages >= folderOptionsPageCountMax)
1411 return FALSE;
1412 sheetInfo->phpage[sheetInfo->nPages] = thePage;
1413 sheetInfo->nPages++;
1414 return TRUE;
1415}
1416
1418{
1419 CComPtr<IShellPropSheetExt> folderOptionsSheet;
1420 PROPSHEETHEADER m_PropSheet;
1422// CComPtr<IGlobalFolderSettings> globalSettings;
1423// SHELLSTATE2 shellState;
1424 HRESULT hResult;
1425
1426 memset(m_psp, 0, sizeof(m_psp));
1427 memset(&m_PropSheet, 0, sizeof(m_PropSheet));
1428
1429 // create sheet object
1430 hResult = CoCreateInstance(CLSID_ShellFldSetExt, NULL, CLSCTX_INPROC_SERVER,
1431 IID_PPV_ARG(IShellPropSheetExt, &folderOptionsSheet));
1432 if (FAILED_UNEXPECTEDLY(hResult))
1433 return E_FAIL;
1434
1435 // must set site in order for Apply to all Folders on Advanced page to be enabled
1436 hResult = IUnknown_SetSite(folderOptionsSheet, static_cast<IDispatch *>(this));
1437 m_PropSheet.phpage = m_psp;
1438
1439#if 0
1440 hResult = CoCreateInstance(CLSID_GlobalFolderSettings, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IGlobalFolderSettings, &globalSettings));
1441 if (FAILED_UNEXPECTEDLY(hResult))
1442 return E_FAIL;
1443 hResult = globalSettings->Get(&shellState, sizeof(shellState));
1444 if (FAILED_UNEXPECTEDLY(hResult))
1445 return E_FAIL;
1446#endif
1447
1448 // add pages
1449 hResult = folderOptionsSheet->AddPages(AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1450 if (FAILED_UNEXPECTEDLY(hResult))
1451 return E_FAIL;
1452
1454 {
1455 hResult = fCurrentShellView->AddPropertySheetPages(
1456 0, AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1457 if (FAILED_UNEXPECTEDLY(hResult))
1458 return E_FAIL;
1459 }
1460
1461 // show sheet
1462 CStringW strFolderOptions(MAKEINTRESOURCEW(IDS_FOLDER_OPTIONS));
1463 m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
1464 m_PropSheet.dwFlags = 0;
1465 m_PropSheet.hwndParent = m_hWnd;
1466 m_PropSheet.hInstance = _AtlBaseModule.GetResourceInstance();
1467 m_PropSheet.pszCaption = strFolderOptions;
1468 m_PropSheet.nStartPage = 0;
1469 PropertySheet(&m_PropSheet);
1470 return S_OK;
1471}
1472
1474{
1475 CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
1476 _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1477 LRESULT lResult;
1478 const _ATL_MSG *previousMessage;
1479 BOOL handled;
1480 WNDPROC saveWindowProc;
1481 HRESULT hResult;
1482
1483 hWnd = pThis->m_hWnd;
1484 previousMessage = pThis->m_pCurrentMsg;
1485 pThis->m_pCurrentMsg = &msg;
1486
1487 /* If the shell browser is initialized, let the menu band preprocess the messages */
1488 if (pThis->fCurrentDirectoryPIDL)
1489 {
1490 CComPtr<IMenuBand> menuBand;
1491 hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
1492 if (SUCCEEDED(hResult) && menuBand.p != NULL)
1493 {
1494 hResult = menuBand->TranslateMenuMessage(&msg, &lResult);
1495 if (hResult == S_OK)
1496 return lResult;
1497 uMsg = msg.message;
1498 wParam = msg.wParam;
1499 lParam = msg.lParam;
1500 }
1501 }
1502
1503 handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1504 ATLASSERT(pThis->m_pCurrentMsg == &msg);
1505 if (handled == FALSE)
1506 {
1507 if (uMsg == WM_NCDESTROY)
1508 {
1509 saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC));
1510 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1511 if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC)))
1513 pThis->m_dwState |= WINSTATE_DESTROYED;
1514 }
1515 else
1516 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1517 }
1518 pThis->m_pCurrentMsg = previousMessage;
1519 if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1520 {
1521 pThis->m_dwState &= ~WINSTATE_DESTROYED;
1522 pThis->m_hWnd = NULL;
1523 pThis->OnFinalMessage(hWnd);
1524 }
1525 return lResult;
1526}
1527
1529{
1530 RECT clientRect;
1531 RECT statusRect;
1532 int x;
1533
1534 GetClientRect(&clientRect);
1535
1537 {
1538 ::GetWindowRect(fStatusBar, &statusRect);
1539 ::SetWindowPos(fStatusBar, NULL, clientRect.left, clientRect.bottom - (statusRect.bottom - statusRect.top),
1540 clientRect.right - clientRect.left,
1541 statusRect.bottom - statusRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1542 clientRect.bottom -= statusRect.bottom - statusRect.top;
1543 }
1544
1545 for (x = 0; x < 3; x++)
1546 {
1548 RECT borderSpace = fClientBars[x].borderSpace;
1549 if (hwnd == NULL && fClientBars[x].clientBar != NULL)
1550 {
1551 IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
1553 }
1554 if (hwnd != NULL)
1555 {
1556 RECT toolbarRect = clientRect;
1557 if (borderSpace.top != 0)
1558 {
1559 toolbarRect.bottom = toolbarRect.top + borderSpace.top;
1560 }
1561 else if (borderSpace.bottom != 0)
1562 {
1563 toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
1564 }
1565 else if (borderSpace.left != 0)
1566 {
1567 toolbarRect.right = toolbarRect.left + borderSpace.left;
1568 }
1569 else if (borderSpace.right != 0)
1570 {
1571 toolbarRect.left = toolbarRect.right - borderSpace.right;
1572 }
1573
1575 toolbarRect.left,
1576 toolbarRect.top,
1577 toolbarRect.right - toolbarRect.left,
1578 toolbarRect.bottom - toolbarRect.top,
1580
1581 if (borderSpace.top != 0)
1582 {
1583 clientRect.top = toolbarRect.bottom;
1584 }
1585 else if (borderSpace.bottom != 0)
1586 {
1587 clientRect.bottom = toolbarRect.top;
1588 }
1589 else if (borderSpace.left != 0)
1590 {
1591 clientRect.left = toolbarRect.right;
1592 }
1593 else if (borderSpace.right != 0)
1594 {
1595 clientRect.right = toolbarRect.left;
1596 }
1597 }
1598 }
1599 ::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
1600 clientRect.right - clientRect.left,
1601 clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1602}
1603
1604HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
1605{
1606 DISPPARAMS params;
1609 HRESULT hResult;
1610
1611 params.rgvarg = arguments;
1612 params.rgdispidNamedArgs = NULL;
1613 params.cArgs = argCount;
1614 params.cNamedArgs = 0;
1615 IUnknown** pp = vec.begin();
1616 while (pp < vec.end())
1617 {
1618 if (*pp != NULL)
1619 {
1620 CComPtr<IDispatch> theDispatch;
1621
1622 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1623 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1624 }
1625 pp++;
1626 }
1627 pp = vec2.begin();
1628 while (pp < vec2.end())
1629 {
1630 if (*pp != NULL)
1631 {
1632 CComPtr<IDispatch> theDispatch;
1633
1634 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1635 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1636 }
1637 pp++;
1638 }
1639 return S_OK;
1640}
1641
1643{
1644 // these two variants intentionally to do use CComVariant because it would double free/release
1645 // or does not need to dispose at all
1646 VARIANT varArg[2];
1647 VARIANT varArgs;
1648 CComBSTR tempString(newDirectory);
1649
1650 V_VT(&varArgs) = VT_BSTR;
1651 V_BSTR(&varArgs) = tempString.m_str;
1652
1653 V_VT(&varArg[0]) = VT_VARIANT | VT_BYREF;
1654 V_VARIANTREF(&varArg[0]) = &varArgs;
1655 V_VT(&varArg[1]) = VT_DISPATCH;
1656 V_DISPATCH(&varArg[1]) = (IDispatch *)this;
1657
1658 return FireEvent(DISPID_NAVIGATECOMPLETE2, 2, varArg);
1659}
1660
1662{
1663 VARIANT varArg[2];
1664
1665 V_VT(&varArg[0]) = VT_BOOL;
1666 V_BOOL(&varArg[0]) = newState ? VARIANT_TRUE : VARIANT_FALSE;
1667 V_VT(&varArg[1]) = VT_I4;
1668 V_I4(&varArg[1]) = commandID;
1669
1670 return FireEvent(DISPID_COMMANDSTATECHANGE, 2, varArg);
1671}
1672
1674{
1675 return FireCommandStateChange(false, -1);
1676}
1677
1679{
1680 CComPtr<ITravelLog> travelLog;
1681 CComPtr<ITravelEntry> unusedEntry;
1682 bool canGoBack;
1683 bool canGoForward;
1684 HRESULT hResult;
1685
1686 canGoBack = false;
1687 canGoForward = false;
1688 hResult = GetTravelLog(&travelLog);
1689 if (FAILED_UNEXPECTEDLY(hResult))
1690 return hResult;
1691 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
1692 if (SUCCEEDED(hResult))
1693 {
1694 canGoBack = true;
1695 unusedEntry.Release();
1696 }
1697 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
1698 if (SUCCEEDED(hResult))
1699 {
1700 canGoForward = true;
1701 unusedEntry.Release();
1702 }
1703 hResult = FireCommandStateChange(canGoBack, 2);
1704 hResult = FireCommandStateChange(canGoForward, 1);
1705 return S_OK;
1706}
1707
1709{
1710 bool canGoUp;
1711 HRESULT hResult;
1712
1713 canGoUp = true;
1715 canGoUp = false;
1716 hResult = FireCommandStateChange(canGoUp, 3);
1717 return S_OK;
1718}
1719
1721{
1722 CComPtr<ITravelLog> travelLog;
1723 CComPtr<ITravelEntry> unusedEntry;
1724 int position;
1725 MENUITEMINFO menuItemInfo;
1726 HRESULT hResult;
1727
1729
1730 position = GetMenuItemCount(theMenu);
1731 hResult = GetTravelLog(&travelLog);
1732 if (FAILED_UNEXPECTEDLY(hResult))
1733 return;
1734
1735 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1736 TLOG_BACK,
1737 &unusedEntry);
1738
1739 if (SUCCEEDED(hResult))
1740 {
1742 unusedEntry.Release();
1743 }
1744 else
1746
1747 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1748 TLOG_FORE,
1749 &unusedEntry);
1750
1751 if (SUCCEEDED(hResult))
1752 {
1754 unusedEntry.Release();
1755 }
1756 else
1758
1759 SHEnableMenuItem(theMenu,
1762
1763 hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
1765 if (SUCCEEDED(hResult))
1766 {
1767 menuItemInfo.cbSize = sizeof(menuItemInfo);
1768 menuItemInfo.fMask = MIIM_TYPE | MIIM_ID;
1769 menuItemInfo.fType = MF_SEPARATOR;
1770 menuItemInfo.wID = IDM_GOTO_TRAVEL_SEP;
1771 InsertMenuItem(theMenu, position, TRUE, &menuItemInfo);
1772 }
1773}
1774
1776{
1777 CComPtr<ITravelLog> travelLog;
1778 HMENU gotoMenu;
1779 OLECMD commandList[5];
1780 HMENU toolbarMenuBar;
1781 HMENU toolbarMenu;
1782 MENUITEMINFO menuItemInfo;
1783 HRESULT hResult;
1784
1785 gotoMenu = SHGetMenuFromID(theMenu, FCIDM_MENU_EXPLORE);
1786 if (gotoMenu != NULL)
1787 UpdateGotoMenu(gotoMenu);
1788
1789 commandList[0].cmdID = ITID_TOOLBARBANDSHOWN;
1790 commandList[1].cmdID = ITID_ADDRESSBANDSHOWN;
1791 commandList[2].cmdID = ITID_LINKSBANDSHOWN;
1792 commandList[3].cmdID = ITID_TOOLBARLOCKED;
1793 commandList[4].cmdID = ITID_CUSTOMIZEENABLED;
1794
1796 CGID_PrivCITCommands, 5, commandList, NULL);
1797 if (FAILED_UNEXPECTEDLY(hResult))
1799 else
1800 {
1801 menuItemInfo.cbSize = sizeof(menuItemInfo);
1802 menuItemInfo.fMask = MIIM_SUBMENU;
1803 GetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1804 DestroyMenu(menuItemInfo.hSubMenu);
1805
1806 toolbarMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1807 toolbarMenu = GetSubMenu(toolbarMenuBar, 0);
1808 RemoveMenu(toolbarMenuBar, 0, MF_BYPOSITION);
1809 DestroyMenu(toolbarMenuBar);
1810
1811 // TODO: Implement
1812 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_ENABLED);
1813 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_ENABLED);
1814 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_ENABLED);
1815 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_CUSTOMIZE, commandList[4].cmdf & OLECMDF_ENABLED);
1816
1817 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_LATCHED);
1818 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_LATCHED);
1819 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_LATCHED);
1820 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LOCKTOOLBARS, commandList[3].cmdf & OLECMDF_LATCHED);
1821 if ((commandList[4].cmdf & OLECMDF_ENABLED) == 0)
1825
1826 menuItemInfo.cbSize = sizeof(menuItemInfo);
1827 menuItemInfo.fMask = MIIM_SUBMENU;
1828 menuItemInfo.hSubMenu = toolbarMenu;
1829 SetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1830 }
1832
1833 // Check the menu items for Explorer bar
1834 BOOL bSearchBand = (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
1835 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
1836 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
1837 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar));
1838 BOOL bHistory = IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar);
1839 BOOL bFavorites = IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar);
1840 BOOL bFolders = IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar);
1841 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_SEARCH, bSearchBand);
1842 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_HISTORY, bHistory);
1843 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FAVORITES, bFavorites);
1844 SHCheckMenuItem(theMenu, IDM_EXPLORERBAR_FOLDERS, bFolders);
1845}
1846
1848{
1849 HMENU hBandsMenu;
1850 UINT nbFound;
1851
1853 if (!hBandsMenu)
1854 {
1855 OutputDebugString(L"No menu !\n");
1856 return E_FAIL;
1857 }
1859 BuildExplorerBandCategory(hBandsMenu, CATID_InfoBand, 4, NULL);
1860 BuildExplorerBandCategory(hBandsMenu, CATID_CommBand, 20, &nbFound);
1861 if (!nbFound)
1862 {
1863 // Remove separator
1865 }
1866 // Remove media menu since XP does it (according to API Monitor)
1868 return S_OK;
1869}
1870
1872{
1873 HRESULT hr;
1874 CComPtr<IEnumGUID> pEnumGUID;
1875 WCHAR wszBandName[MAX_PATH];
1876 WCHAR wszBandGUID[MAX_PATH];
1877 WCHAR wRegKey[MAX_PATH];
1878 UINT cBands;
1879 DWORD dwRead;
1880 DWORD dwDataSize;
1881 GUID iter;
1882 MenuBandInfo mbi;
1883
1884 mbi.fVertical = IsEqualGUID(category, CATID_InfoBand);
1885 cBands = 0;
1886 hr = SHEnumClassesOfCategories(1, &category, 0, NULL, &pEnumGUID);
1888 {
1889 return hr;
1890 }
1891 do
1892 {
1893 pEnumGUID->Next(1, &iter, &dwRead);
1894 if (dwRead)
1895 {
1896 // Get the band name
1897 if (IsBuiltinBand(iter))
1898 continue;
1899 if (!StringFromGUID2(iter, wszBandGUID, MAX_PATH))
1900 continue;
1901 StringCchPrintfW(wRegKey, MAX_PATH, L"CLSID\\%s", wszBandGUID);
1902 dwDataSize = MAX_PATH;
1903 SHGetValue(HKEY_CLASSES_ROOT, wRegKey, NULL, NULL, wszBandName, &dwDataSize);
1904
1905 mbi.barGuid = iter;
1906 InsertMenu(hBandsMenu, dwPos + cBands, MF_BYPOSITION, IDM_EXPLORERBAND_BEGINCUSTOM + DSA_GetItemCount(menuDsa), wszBandName);
1907 DSA_AppendItem(menuDsa, &mbi);
1908 cBands++;
1909 }
1910 }
1911 while (dwRead > 0);
1912 if (nbFound)
1913 *nbFound = cBands;
1914 return S_OK;
1915}
1916
1918{
1919 if (IsEqualCLSID(bandID, CLSID_ExplorerBand))
1920 return TRUE;
1921 if (IsEqualCLSID(bandID, CLSID_SH_SearchBand) || IsEqualCLSID(bandID, CLSID_SearchBand))
1922 return TRUE;
1923 if (IsEqualCLSID(bandID, CLSID_IE_SearchBand) || IsEqualCLSID(bandID, CLSID_FileSearchBand))
1924 return TRUE;
1925 if (IsEqualCLSID(bandID, CLSID_SH_HistBand))
1926 return TRUE;
1927 if (IsEqualCLSID(bandID, CLSID_SH_FavBand))
1928 return TRUE;
1929 if (IsEqualCLSID(bandID, CLSID_ChannelsBand))
1930 return TRUE;
1931 return FALSE;
1932}
1933
1935{
1936 CComPtr<IObjectWithSite> objectWithSite;
1937 CComPtr<IContextMenu> contextMenu;
1938 CMINVOKECOMMANDINFO commandInfo;
1939 const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1940 HRESULT hResult;
1941
1942 // TODO: Query shell if this command is enabled first
1943
1944 memset(&commandInfo, 0, sizeof(commandInfo));
1945 commandInfo.cbSize = sizeof(commandInfo);
1946 commandInfo.hwnd = m_hWnd;
1947 commandInfo.lpParameters = searchGUID;
1948 commandInfo.nShow = SW_SHOWNORMAL;
1949
1950 hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1951 IID_PPV_ARG(IContextMenu, &contextMenu));
1952 if (FAILED_UNEXPECTEDLY(hResult))
1953 return 0;
1954 hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
1955 if (FAILED_UNEXPECTEDLY(hResult))
1956 return 0;
1957 hResult = objectWithSite->SetSite(dynamic_cast<IShellBrowser*>(this));
1958 if (FAILED_UNEXPECTEDLY(hResult))
1959 return 0;
1960 hResult = contextMenu->InvokeCommand(&commandInfo);
1961 hResult = objectWithSite->SetSite(NULL);
1962 return hResult;
1963}
1964
1966{
1967 CComPtr<IUnknown> int1Retry;
1968 CComPtr<IUnknown> int2Retry;
1969 HRESULT hResult;
1970
1971 if (int1 == int2)
1972 return true;
1973 if (int1 == NULL || int2 == NULL)
1974 return false;
1975 hResult = int1->QueryInterface(IID_PPV_ARG(IUnknown, &int1Retry));
1976 if (FAILED_UNEXPECTEDLY(hResult))
1977 return false;
1978 hResult = int2->QueryInterface(IID_PPV_ARG(IUnknown, &int2Retry));
1979 if (FAILED_UNEXPECTEDLY(hResult))
1980 return false;
1981 if (int1Retry == int2Retry)
1982 return true;
1983 return false;
1984}
1985
1987{
1988 static const INT excludeItems[] = { 1, 1, 1, IDC_STATUSBAR, 0, 0 };
1989
1990 RECT availableBounds;
1991
1992 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
1993 for (INT x = 0; x < 3; x++)
1994 {
1995 if (fClientBars[x].clientBar.p != NULL && !IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
1996 {
1997 availableBounds.top += fClientBars[x].borderSpace.top;
1998 availableBounds.left += fClientBars[x].borderSpace.left;
1999 availableBounds.bottom -= fClientBars[x].borderSpace.bottom;
2000 availableBounds.right -= fClientBars[x].borderSpace.right;
2001 }
2002 }
2003 *prcBorder = availableBounds;
2004 return S_OK;
2005}
2006
2008{
2009 return S_OK;
2010}
2011
2013{
2014 for (INT x = 0; x < 3; x++)
2015 {
2016 if (IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
2017 {
2018 fClientBars[x].borderSpace = *pbw;
2019 // if this bar changed size, it cascades and forces all subsequent bars to resize
2021 return S_OK;
2022 }
2023 }
2024 return E_INVALIDARG;
2025}
2026
2028 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
2029{
2030 CComPtr<IOleCommandTarget> commandTarget;
2031 HRESULT hResult;
2032
2033 if (prgCmds == NULL)
2034 return E_INVALIDARG;
2035 if (pguidCmdGroup == NULL)
2036 {
2037 if (fCurrentShellView.p != NULL)
2038 {
2039 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
2040 if (SUCCEEDED(hResult) && commandTarget.p != NULL)
2041 return commandTarget->QueryStatus(NULL, 1, prgCmds, pCmdText);
2042 }
2043 while (cCmds != 0)
2044 {
2045 prgCmds->cmdf = 0;
2046 prgCmds++;
2047 cCmds--;
2048 }
2049 }
2050 else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2051 {
2052 while (cCmds != 0)
2053 {
2054 switch (prgCmds->cmdID)
2055 {
2056 case 0x1c: // search
2058 if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
2059 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
2060 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
2061 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
2062 {
2063 prgCmds->cmdf |= OLECMDF_LATCHED;
2064 }
2065 break;
2066 case 0x1d: // history
2068 if (IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar))
2069 prgCmds->cmdf |= OLECMDF_LATCHED;
2070 break;
2071 case 0x1e: // favorites
2073 if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
2074 prgCmds->cmdf |= OLECMDF_LATCHED;
2075 break;
2076 case SBCMDID_EXPLORERBARFOLDERS: // folders
2078 if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
2079 prgCmds->cmdf |= OLECMDF_LATCHED;
2080 break;
2081 default:
2082 prgCmds->cmdf = 0;
2083 break;
2084 }
2085 prgCmds++;
2086 cCmds--;
2087 }
2088 }
2089 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2090 {
2091 while (cCmds != 0)
2092 {
2093 switch (prgCmds->cmdID)
2094 {
2096 prgCmds->cmdf = OLECMDF_SUPPORTED;
2098 prgCmds->cmdf |= OLECMDF_ENABLED;
2099 break;
2100 }
2101 prgCmds++;
2102 cCmds--;
2103 }
2104 }
2105 return S_OK;
2106}
2107
2109 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
2110{
2111 HRESULT hResult;
2112
2113 if (!pguidCmdGroup)
2114 {
2115 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut);
2116 return E_NOTIMPL;
2117 }
2118 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2119 {
2120 switch (nCmdID)
2121 {
2122 case 0x1c: //Toggle Search
2123 case 0x1d: //Toggle History
2124 case 0x1e: //Toggle Favorites
2125 case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
2126 const GUID* pclsid;
2127 if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
2128 else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
2129 else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
2130 else pclsid = &CLSID_ExplorerBand;
2131
2132 if (IsEqualCLSID(*pclsid, fCurrentVertBar))
2133 {
2134 hResult = IUnknown_ShowDW(fClientBars[BIVerticalBaseBar].clientBar.p, FALSE);
2137 }
2138 else
2139 {
2140 hResult = ShowBand(*pclsid, true);
2141 }
2142 return S_OK;
2143 case 0x22:
2144 //Sent when a band closes
2145 if (V_VT(pvaIn) != VT_UNKNOWN)
2146 return E_INVALIDARG;
2147
2148 if (IUnknownIsEqual(V_UNKNOWN(pvaIn), fClientBars[BIVerticalBaseBar].clientBar.p))
2149 {
2152 }
2153 return S_OK;
2154 case 0x27:
2155 if (nCmdexecopt == 1)
2156 {
2157 // pvaIn is a VT_UNKNOWN with a band that is being hidden
2158 }
2159 else
2160 {
2161 // update zones part of the status bar
2162 }
2163 return S_OK;
2164 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
2165 V_VT(pvaOut) = VT_INT_PTR;
2166 V_INTREF(pvaOut) = reinterpret_cast<INT *>(
2167 LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU)));
2168 return S_OK;
2169 case 0x38:
2170 // indicate if this cabinet was opened as a browser
2171 return S_FALSE;
2172 default:
2173 return E_NOTIMPL;
2174 }
2175 }
2176 else if (IsEqualIID(*pguidCmdGroup, CGID_InternetButtons))
2177 {
2178 switch (nCmdID)
2179 {
2180 case 0x23:
2181 // placeholder
2182 return S_OK;
2183 }
2184 }
2185 else if (IsEqualIID(*pguidCmdGroup, CGID_Theater))
2186 {
2187 switch (nCmdID)
2188 {
2189 case 6:
2190 // what is theater mode and why do we receive this?
2191 return E_NOTIMPL;
2192 }
2193 }
2194 else if (IsEqualIID(*pguidCmdGroup, CGID_MenuBand))
2195 {
2196 switch (nCmdID)
2197 {
2198 case 14:
2199 // initialize favorites menu
2200 return S_OK;
2201 }
2202 }
2203 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView))
2204 {
2205 switch (nCmdID)
2206 {
2207 case 0x12:
2208 // refresh on toolbar clicked
2209 return S_OK;
2210 case 0x26:
2211 // called for unknown bands ?
2212 return S_OK;
2213 case 0x4d:
2214 // tell the view if it should hide the task pane or not
2215 return (fClientBars[BIVerticalBaseBar].clientBar.p == NULL) ? S_FALSE : S_OK;
2216 }
2217 }
2218 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2219 {
2220 switch (nCmdID)
2221 {
2222 case 40994:
2223 return NavigateToParent();
2226 break;
2227 }
2228 }
2229 else if (IsEqualIID(*pguidCmdGroup, CGID_IExplorerToolbar))
2230 {
2231 switch (nCmdID)
2232 {
2233 case 0x7063:
2234 return DoFolderOptions();
2235 }
2236 }
2237 else if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
2238 {
2239 switch (nCmdID)
2240 {
2244 break;
2245 }
2246 }
2247 else
2248 {
2249 return E_NOTIMPL;
2250 }
2251 return E_NOTIMPL;
2252}
2253
2255{
2256 if (lphwnd == NULL)
2257 return E_POINTER;
2258 *lphwnd = m_hWnd;
2259 return S_OK;
2260}
2261
2263{
2264 return E_NOTIMPL;
2265}
2266
2267HRESULT STDMETHODCALLTYPE CShellBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
2268{
2269 HMENU mainMenu = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2270
2271 Shell_MergeMenus(hmenuShared, mainMenu, 0, 0, FCIDM_BROWSERLAST, MM_SUBMENUSHAVEIDS);
2272
2273 int GCCU(itemCount3) = GetMenuItemCount(hmenuShared);
2274 Unused(itemCount3);
2275
2276 DestroyMenu(mainMenu);
2277
2278 lpMenuWidths->width[0] = 2;
2279 lpMenuWidths->width[2] = 3;
2280 lpMenuWidths->width[4] = 1;
2281 return S_OK;
2282}
2283
2284HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
2285{
2286 CComPtr<IShellMenu> shellMenu;
2287 HRESULT hResult;
2288
2289 if (hmenuShared && IsMenu(hmenuShared) == FALSE)
2290 return E_FAIL;
2291 hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
2292 if (FAILED_UNEXPECTEDLY(hResult))
2293 return hResult;
2294
2295 if (!hmenuShared)
2296 {
2297 hmenuShared = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2298 }
2299 // FIXME: Figure out the proper way to do this.
2300 HMENU hMenuFavs = GetSubMenu(hmenuShared, 3);
2301 if (hMenuFavs)
2302 {
2304 }
2305
2306 hResult = shellMenu->SetMenu(hmenuShared, m_hWnd, SMSET_DONTOWN);
2307 if (FAILED_UNEXPECTEDLY(hResult))
2308 return hResult;
2309 fCurrentMenuBar = hmenuShared;
2311 return S_OK;
2312}
2313
2315{
2316 if (hmenuShared == fCurrentMenuBar)
2317 {
2318 //DestroyMenu(fCurrentMenuBar);
2320 }
2321 return S_OK;
2322}
2323
2325{
2326 //
2327 if (pszStatusText)
2328 {
2329 ::SetWindowText(fStatusBar, pszStatusText);
2330 }
2331 else
2332 {
2333
2334 }
2335 return S_OK;
2336}
2337
2339{
2340 return E_NOTIMPL;
2341}
2342
2344{
2346 return S_FALSE;
2347 return S_OK;
2348}
2349
2351{
2353 // FIXME: Should not automatically show the Explorer band
2354 if ((wFlags & SBSP_EXPLOREMODE) && !(wFlags & SBSP_NEWBROWSER))
2355 ShowBand(CLSID_ExplorerBand, true);
2356
2357 CComHeapPtr<ITEMIDLIST> pidlResolved;
2358 if (wFlags & (SBSP_RELATIVE | SBSP_PARENT))
2359 {
2360 HRESULT hr = CreateRelativeBrowsePIDL(pidl, wFlags, &pidlResolved);
2361 if (FAILED(hr))
2362 return hr;
2363 pidl = pidlResolved;
2364 }
2365
2366 if (wFlags & SBSP_NEWBROWSER)
2367 return OpenNewBrowserWindow(pidl, wFlags);
2368
2369 switch (wFlags & (SBSP_ABSOLUTE | SBSP_RELATIVE | SBSP_PARENT | SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
2370 {
2371 case SBSP_PARENT:
2372 return NavigateToParent();
2373 case SBSP_NAVIGATEBACK:
2374 return GoBack();
2375 case SBSP_NAVIGATEFORWARD:
2376 return GoForward();
2377 }
2378
2379 // TODO: SBSP_WRITENOHISTORY? SBSP_CREATENOHISTORY?
2381 if (fTravelLog)
2383 if (wFlags & SBSP_ACTIVATE_NOFOCUS)
2385 return BrowseToPIDL(pidl, flags);
2386}
2387
2389{
2390 return E_NOTIMPL;
2391}
2392
2394{
2395 if (lphwnd == NULL)
2396 return E_POINTER;
2397 *lphwnd = NULL;
2398 switch (id)
2399 {
2400 case FCW_TOOLBAR:
2401 *lphwnd = fToolbarProxy.m_hWnd;
2402 return S_OK;
2403 case FCW_STATUS:
2404 *lphwnd = fStatusBar;
2405 return S_OK;
2406 case FCW_TREE:
2407 {
2408 BOOL shown;
2409 if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
2410 return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
2411 return S_FALSE;
2412 }
2413 case FCW_PROGRESS:
2414 // is this a progress dialog?
2415 return S_OK;
2416 }
2417 return S_OK;
2418}
2419
2422{
2423 LPARAM result;
2424
2425 if (pret != NULL)
2426 *pret = 0;
2427 switch (id)
2428 {
2429 case FCW_TOOLBAR:
2431 if (pret != NULL)
2432 *pret = result;
2433 break;
2434 case FCW_STATUS:
2436 if (pret != NULL)
2437 *pret = result;
2438 break;
2439 }
2440 return S_OK;
2441}
2442
2444{
2445 if (ppshv == NULL)
2446 return E_POINTER;
2447 *ppshv = fCurrentShellView;
2448 if (fCurrentShellView.p != NULL)
2449 {
2451 return S_OK;
2452 }
2453 return E_FAIL;
2454}
2455
2457{
2458 return E_NOTIMPL;
2459}
2460
2462{
2463 return E_NOTIMPL;
2464}
2465
2467 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2468{
2469 return E_NOTIMPL;
2470}
2471
2473{
2474 return E_NOTIMPL;
2475}
2476
2478{
2479 return E_NOTIMPL;
2480}
2481
2483 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2484{
2485 return E_NOTIMPL;
2486}
2487
2489{
2490 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2491 // the returned interface has a method GetPropertyBag on it
2492 if (IsEqualIID(guidService, SID_STopLevelBrowser))
2493 return this->QueryInterface(riid, ppvObject);
2494 if (IsEqualIID(guidService, SID_SShellBrowser))
2495 return this->QueryInterface(riid, ppvObject);
2496 if (IsEqualIID(guidService, SID_ITargetFrame2))
2497 return this->QueryInterface(riid, ppvObject);
2498 if (IsEqualIID(guidService, SID_IWebBrowserApp)) // without this, the internet toolbar won't reflect notifications
2499 return this->QueryInterface(riid, ppvObject);
2500 if (IsEqualIID(guidService, SID_SProxyBrowser))
2501 return this->QueryInterface(riid, ppvObject);
2502 if (IsEqualIID(guidService, SID_IExplorerToolbar) && fClientBars[BIInternetToolbar].clientBar.p)
2503 return fClientBars[BIInternetToolbar].clientBar->QueryInterface(riid, ppvObject);
2504 if (IsEqualIID(riid, IID_IShellBrowser))
2505 return this->QueryInterface(riid, ppvObject);
2506 return E_NOINTERFACE;
2507}
2508
2510{
2513}
2514
2516{
2517 if (ppvObject == NULL)
2518 return E_POINTER;
2519
2520 *ppvObject = NULL;
2521
2522 LPITEMIDLIST pidl;
2523 HRESULT hr = GetPidl(&pidl);
2525 return E_FAIL;
2526
2527 // FIXME: pidl for Internet etc.
2528
2529 if (_ILIsNetworkPlace(pidl))
2530 flags |= SHGVSPB_ROAM;
2531
2532 hr = SHGetViewStatePropertyBag(pidl, L"Shell", flags, riid, ppvObject);
2533
2534 ILFree(pidl);
2535 return hr;
2536}
2537
2539{
2540 return E_NOTIMPL;
2541}
2542
2544{
2545 return E_NOTIMPL;
2546}
2547
2549 UINT cNames, LCID lcid, DISPID *rgDispId)
2550{
2551 return E_NOTIMPL;
2552}
2553
2555 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
2556{
2557 return E_NOTIMPL;
2558}
2559
2561{
2562 return E_NOTIMPL;
2563}
2564
2566{
2567 return E_NOTIMPL;
2568}
2569
2571{
2572 return E_NOTIMPL;
2573}
2574
2576{
2577 return E_NOTIMPL;
2578}
2579
2581{
2582 HRESULT hResult;
2583
2584 // called by toolbar when displaying tooltips
2585 if (pptl == NULL)
2586 return E_FAIL;
2587
2588 *pptl = NULL;
2589 if (fTravelLog.p == NULL)
2590 {
2592 if (FAILED_UNEXPECTEDLY(hResult))
2593 return hResult;
2594 }
2595 *pptl = fTravelLog.p;
2596 fTravelLog.p->AddRef();
2597 return S_OK;
2598}
2599
2601{
2602 BOOL shown;
2603 if (FAILED(IsControlWindowShown(id, &shown)))
2604 return E_NOTIMPL;
2605 else if (!shown == !fShow) // Negated for true boolean comparison
2606 return S_OK;
2607 else switch (id)
2608 {
2609 case FCW_STATUS:
2610 OnToggleStatusBarVisible(0, 0, NULL, shown);
2611 return S_OK;
2612 case FCW_TREE:
2613 return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
2614 case FCW_ADDRESSBAR:
2616 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
2617 }
2618 return E_NOTIMPL;
2619}
2620
2622{
2623 HRESULT hr = S_OK;
2624 BOOL shown = FALSE;
2625 switch (id)
2626 {
2627 case FCW_STATUS:
2629 break;
2630 case FCW_TREE:
2631 {
2633 hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
2634 shown = cmd.cmdf & OLECMDF_LATCHED;
2635 break;
2636 }
2637 case FCW_ADDRESSBAR:
2639 shown = hr == S_OK;
2640 break;
2641 default:
2642 hr = E_NOTIMPL;
2643 }
2644 if (pfShown)
2645 {
2646 *pfShown = shown;
2647 return hr;
2648 }
2649 return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
2650}
2651
2653{
2654 OLECMD cmd = { ITId };
2656 CGID_PrivCITCommands, 1, &cmd, NULL);
2657 return SUCCEEDED(hr) ? (cmd.cmdf & OLECMDF_LATCHED) ? S_OK : S_FALSE : hr;
2658}
2659
2661{
2662 return E_NOTIMPL;
2663}
2664
2666{
2667 return E_NOTIMPL;
2668}
2669
2671{
2672 return E_NOTIMPL;
2673}
2674
2676{
2677 return _NavigateToPidl(pidl, grfHLNF, 0);
2678}
2679
2681{
2682 return E_NOTIMPL;
2683}
2684
2686{
2687 return E_NOTIMPL;
2688}
2689
2691{
2692 return E_NOTIMPL;
2693}
2694
2696{
2697 return E_NOTIMPL;
2698}
2699
2701{
2702 return E_NOTIMPL;
2703}
2704
2706{
2707 m_BrowserSvcFlags = (m_BrowserSvcFlags & ~dwFlagMask) | (dwFlags & dwFlagMask);
2708 return S_OK;
2709}
2710
2712{
2713 *pdwFlags = m_BrowserSvcFlags;
2714 return S_OK;
2715}
2716
2718{
2719 return E_NOTIMPL;
2720}
2721
2723{
2724 // called by explorer bar to get current pidl
2725 return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER;
2726}
2727
2729{
2730 return E_NOTIMPL;
2731}
2732
2734{
2735 return -1;
2736}
2737
2739{
2740 return E_NOTIMPL;
2741}
2742
2744{
2745 if (ppole == NULL || pstm == NULL || ppbc == NULL)
2746 return E_INVALIDARG;
2747 *ppole = fHistoryObject;
2748 if (fHistoryObject != NULL)
2750 *pstm = fHistoryStream;
2751 if (fHistoryStream != NULL)
2753 *ppbc = fHistoryBindContext;
2759 if (*ppole == NULL)
2760 return E_FAIL;
2761 return S_OK;
2762}
2763
2765{
2766 return E_NOTIMPL;
2767}
2768
2770{
2771 return E_NOTIMPL;
2772}
2773
2775{
2776 return E_NOTIMPL;
2777}
2778
2780 IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
2781{
2782 return E_NOTIMPL;
2783}
2784
2786{
2787 return E_NOTIMPL;
2788}
2789
2791{
2792 return E_NOTIMPL;
2793}
2794
2796{
2797 return E_NOTIMPL;
2798}
2799
2801{
2802 HRESULT hr = E_FAIL;
2804 {
2807 }
2808 return hr;
2809}
2810
2812{
2813 return E_NOTIMPL;
2814}
2815
2817{
2818 return E_NOTIMPL;
2819}
2820
2822{
2824 return S_OK;
2825}
2826
2828{
2829 return 0;
2830}
2831
2833{
2834 return E_NOTIMPL;
2835}
2836
2838{
2839 return 0;
2840}
2841
2843{
2844 return E_NOTIMPL;
2845}
2846
2848{
2849 return E_NOTIMPL;
2850}
2851
2853{
2854 return E_NOTIMPL;
2855}
2856
2858{
2859 return E_NOTIMPL;
2860}
2861
2863 IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd)
2864{
2865 return E_NOTIMPL;
2866}
2867
2869{
2870 return E_NOTIMPL;
2871}
2872
2874{
2875 return E_NOTIMPL;
2876}
2877
2879{
2880 return E_NOTIMPL;
2881}
2882
2884{
2885 return NULL;
2886}
2887
2889{
2890 return E_NOTIMPL;
2891}
2892
2894{
2895 m_BrowserSvcFlags |= BSF_TOPBROWSER;
2896 return S_OK;
2897}
2898
2900{
2901 return E_NOTIMPL;
2902}
2903
2905{
2906 return E_NOTIMPL;
2907}
2908
2910{
2911 return E_NOTIMPL;
2912}
2913
2915{
2916 return E_NOTIMPL;
2917}
2918
2920{
2921 return E_NOTIMPL;
2922}
2923
2925{
2926 return E_NOTIMPL;
2927}
2928
2930{
2931 return E_NOTIMPL;
2932}
2933
2935{
2936 return E_NOTIMPL;
2937}
2938
2940{
2941 return E_NOTIMPL;
2942}
2943
2945{
2946 return E_NOTIMPL;
2947}
2948
2950{
2951 return E_NOTIMPL;
2952}
2953
2955{
2956 return E_NOTIMPL;
2957}
2958
2960{
2961 const UINT navflags = HLNF_NAVIGATINGBACK | HLNF_NAVIGATINGFORWARD;
2962 if ((grfHLNF & navflags) && grfHLNF != ~0ul)
2963 {
2964 UINT SbspFlags = (grfHLNF & HLNF_NAVIGATINGBACK) ? SBSP_NAVIGATEBACK : SBSP_NAVIGATEFORWARD;
2965 if (grfHLNF & SHHLNF_WRITENOHISTORY)
2966 SbspFlags |= SBSP_WRITENOHISTORY;
2967 if (grfHLNF & SHHLNF_NOAUTOSELECT)
2968 SbspFlags |= SBSP_NOAUTOSELECT;
2969 return BrowseObject(pidl, SbspFlags);
2970 }
2971 return E_NOTIMPL;
2972}
2973
2975{
2976 return E_NOTIMPL;
2977}
2978
2980{
2981 return E_NOTIMPL;
2982}
2983
2985 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)
2986{
2987 return E_NOTIMPL;
2988}
2989
2991 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam)
2992{
2993 return E_NOTIMPL;
2994}
2995
2997{
2998 return E_NOTIMPL;
2999}
3000
3002{
3003 return E_NOTIMPL;
3004}
3005
3007{
3008 return E_NOTIMPL;
3009}
3010
3012{
3013 return 0;
3014}
3015
3017{
3018 return E_NOTIMPL;
3019}
3020
3022{
3023 return E_NOTIMPL;
3024}
3025
3027{
3028 return E_NOTIMPL;
3029}
3030
3032{
3033 return E_NOTIMPL;
3034}
3035
3037{
3038 return E_NOTIMPL;
3039}
3040
3042{
3043 return E_NOTIMPL;
3044}
3045
3047{
3048 return E_NOTIMPL;
3049}
3050
3052{
3053 return NULL;
3054}
3055
3057{
3058 return 0;
3059}
3060
3062{
3063 return E_NOTIMPL;
3064}
3065
3067{
3068 return 0;
3069}
3070
3072{
3073 return NULL;
3074}
3075
3077{
3078 return E_NOTIMPL;
3079}
3080
3082{
3083 return E_NOTIMPL;
3084}
3085
3087{
3088 return E_NOTIMPL;
3089}
3090
3092 LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd)
3093{
3094 return E_NOTIMPL;
3095}
3096
3098{
3099 return E_NOTIMPL;
3100}
3101
3103{
3104 return 0;
3105}
3106
3108{
3109 return E_NOTIMPL;
3110}
3111
3113{
3114 for (int i = 0; i < 3; i++)
3115 {
3116 if (IUnknown_TranslateAcceleratorIO(fClientBars[i].clientBar, pmsg) == S_OK)
3117 return S_OK;
3118 }
3119
3120 if (!fCurrentShellView)
3121 return S_FALSE;
3122
3123 return fCurrentShellView->TranslateAcceleratorW(pmsg);
3124}
3125
3127{
3128 return E_NOTIMPL;
3129}
3130
3132{
3133 return E_NOTIMPL;
3134}
3135
3137{
3138 CComPtr<ITravelLog> travelLog;
3139 HRESULT hResult = GetTravelLog(&travelLog);
3140 if (FAILED_UNEXPECTEDLY(hResult))
3141 return hResult;
3142 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_BACK);
3143}
3144
3146{
3147 CComPtr<ITravelLog> travelLog;
3148 HRESULT hResult = GetTravelLog(&travelLog);
3149 if (FAILED_UNEXPECTEDLY(hResult))
3150 return hResult;
3151 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_FORE);
3152}
3153
3155{
3156 return E_NOTIMPL;
3157}
3158
3160{
3161 return E_NOTIMPL;
3162}
3163
3165 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3166{
3168 HRESULT hResult;
3169 CComPtr<IShellFolder> pDesktop;
3170
3171 hResult = SHGetDesktopFolder(&pDesktop);
3172 if (FAILED_UNEXPECTEDLY(hResult))
3173 return hResult;
3174 hResult = pDesktop->ParseDisplayName(NULL, NULL, URL, NULL, &pidl, NULL);
3175 if (FAILED_UNEXPECTEDLY(hResult))
3176 return hResult;
3177 return BrowseObject(pidl, 1);
3178}
3179
3181{
3182 VARIANT level;
3183
3184 V_VT(&level) = VT_I4;
3185 V_I4(&level) = 4;
3186 return Refresh2(&level);
3187}
3188
3190{
3191 CComPtr<IOleCommandTarget> oleCommandTarget;
3192 HRESULT hResult;
3193
3194 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
3195 if (FAILED_UNEXPECTEDLY(hResult))
3196 return hResult;
3197 return oleCommandTarget->Exec(NULL, 22, 1, Level, NULL);
3198}
3199
3201{
3202 return E_NOTIMPL;
3203}
3204
3206{
3207 return E_NOTIMPL;
3208}
3209
3211{
3212 return E_NOTIMPL;
3213}
3214
3216{
3217 return E_NOTIMPL;
3218}
3219
3221{
3222 return E_NOTIMPL;
3223}
3224
3226{
3227 return E_NOTIMPL;
3228}
3229
3231{
3232 return E_NOTIMPL;
3233}
3234#ifdef __exdisp_h__
3235#define long LONG
3236#endif
3238{
3239 return E_NOTIMPL;
3240}
3241
3243{
3244 return E_NOTIMPL;
3245}
3246
3248{
3249 return E_NOTIMPL;
3250}
3251
3253{
3254 return E_NOTIMPL;
3255}
3256
3258{
3259 return E_NOTIMPL;
3260}
3261
3263{
3264 return E_NOTIMPL;
3265}
3266
3268{
3269 return E_NOTIMPL;
3270}
3271
3273{
3274 return E_NOTIMPL;
3275}
3276#ifdef __exdisp_h__
3277#undef long
3278#endif
3280{
3281 return E_NOTIMPL;
3282}
3283
3285{
3286 return E_NOTIMPL;
3287}
3288
3290{
3291 return E_NOTIMPL;
3292}
3293
3295{
3296 return E_NOTIMPL;
3297}
3298
3300{
3301 return E_NOTIMPL;
3302}
3303
3305{
3306 return E_NOTIMPL;
3307}
3308
3310{
3311 return E_NOTIMPL;
3312}
3313
3315{
3316 return E_NOTIMPL;
3317}
3318
3320{
3321 return E_NOTIMPL;
3322}
3323
3325{
3326 return E_NOTIMPL;
3327}
3328
3330{
3331 return E_NOTIMPL;
3332}
3333
3335{
3336 return E_NOTIMPL;
3337}
3338
3340{
3341 return E_NOTIMPL;
3342}
3343
3345{
3346 return E_NOTIMPL;
3347}
3348
3350{
3351 return E_NOTIMPL;
3352}
3353
3355{
3356 return E_NOTIMPL;
3357}
3358
3360{
3361 return E_NOTIMPL;
3362}
3363
3365{
3366 return E_NOTIMPL;
3367}
3368
3370{
3371 return E_NOTIMPL;
3372}
3373
3375{
3376 return E_NOTIMPL;
3377}
3378
3380{
3381 return E_NOTIMPL;
3382}
3383
3385{
3386 return E_NOTIMPL;
3387}
3388
3390{
3391 return E_NOTIMPL;
3392}
3393
3395 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3396{
3397 LPITEMIDLIST pidl = NULL;
3398 HRESULT hResult;
3399 // called from drive combo box to navigate to a directory
3400 // Also called by search band to display shell results folder view
3401
3402 if (V_VT(URL) == VT_BSTR)
3403 {
3404 return this->Navigate(V_BSTR(URL), Flags, TargetFrameName, PostData, Headers);
3405 }
3406 if (V_VT(URL) == (VT_ARRAY | VT_UI1))
3407 {
3408 if (V_ARRAY(URL)->cDims != 1 || V_ARRAY(URL)->cbElements != 1)
3409 return E_INVALIDARG;
3410
3411 pidl = static_cast<LPITEMIDLIST>(V_ARRAY(URL)->pvData);
3412 }
3414 if (FAILED_UNEXPECTEDLY(hResult))
3415 return hResult;
3416 return S_OK;
3417}
3418
3420{
3421 return E_NOTIMPL;
3422}
3423
3425 VARIANT *pvaIn, VARIANT *pvaOut)
3426{
3427 return E_NOTIMPL;
3428}
3429
3431{
3432 CLSID classID;
3433 bool vertical;
3434
3435 // called to show search bar
3436 if (V_VT(pvaClsid) != VT_BSTR)
3437 return E_INVALIDARG;
3438 CLSIDFromString(V_BSTR(pvaClsid), &classID);
3439 // TODO: properly compute the value of vertical
3440 vertical = true;
3441 return ShowBand(classID, vertical);
3442}
3443
3445{
3446 return E_NOTIMPL;
3447}
3448
3450{
3451 return E_NOTIMPL;
3452}
3453
3455{
3456 return E_NOTIMPL;
3457}
3458
3460{
3461 return E_NOTIMPL;
3462}
3463
3465{
3466 return E_NOTIMPL;
3467}
3468
3470{
3471 return E_NOTIMPL;
3472}
3473
3475{
3476 return E_NOTIMPL;
3477}
3478
3480{
3481 return E_NOTIMPL;
3482}
3483
3485{
3486 return E_NOTIMPL;
3487}
3488
3490{
3491 return E_NOTIMPL;
3492}
3493
3495{
3496 return E_NOTIMPL;
3497}
3498
3500{
3501 return E_NOTIMPL;
3502}
3503
3505{
3506 return E_NOTIMPL;
3507}
3508
3510{
3511 return E_NOTIMPL;
3512}
3513
3515{
3516 return E_NOTIMPL;
3517}
3518
3520{
3521 return E_NOTIMPL;
3522}
3523
3525{
3526 if (pWinData == NULL)
3527 return E_POINTER;
3528
3529 pWinData->dwWindowID = -1;
3530 pWinData->uiCP = 0;
3531 pWinData->pidl = ILClone(fCurrentDirectoryPIDL);
3532 pWinData->lpszUrl = NULL;
3533 pWinData->lpszUrlLocation = NULL;
3534 pWinData->lpszTitle = NULL;
3535 return S_OK;
3536}
3537
3539{
3540 return E_NOTIMPL;
3541}
3542
3544{
3545 return E_NOTIMPL;
3546}
3547
3549{
3550 CComPtr<IPersistHistory> viewPersistHistory;
3551 CComPtr<IOleObject> viewHistoryObject;
3552 persistState oldState;
3553 ULONG numRead;
3554 LPITEMIDLIST pidl;
3555 HRESULT hResult;
3556
3557 hResult = pStream->Read(&oldState, sizeof(oldState), &numRead);
3558 if (FAILED_UNEXPECTEDLY(hResult))
3559 return hResult;
3560 if (numRead != sizeof(oldState) || oldState.dwSize != sizeof(oldState))
3561 return E_FAIL;
3562 if (oldState.browseType != 2)
3563 return E_FAIL;
3564 pidl = static_cast<LPITEMIDLIST>(CoTaskMemAlloc(oldState.pidlSize));
3565 if (pidl == NULL)
3566 return E_OUTOFMEMORY;
3567 hResult = pStream->Read(pidl, oldState.pidlSize, &numRead);
3568 if (FAILED_UNEXPECTEDLY(hResult))
3569 {
3570 ILFree(pidl);
3571 return hResult;
3572 }
3573 if (numRead != oldState.pidlSize)
3574 {
3575 ILFree(pidl);
3576 return E_FAIL;
3577 }
3578 hResult = CoCreateInstance(oldState.persistClass, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER,
3579 IID_PPV_ARG(IOleObject, &viewHistoryObject));
3580 fHistoryObject = viewHistoryObject;
3581 fHistoryStream = pStream;
3582 fHistoryBindContext = pbc;
3583 hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
3587 ILFree(pidl);
3588 if (FAILED_UNEXPECTEDLY(hResult))
3589 return hResult;
3590 return S_OK;
3591}
3592
3594{
3595 CComPtr<IPersistHistory> viewPersistHistory;
3596 persistState newState;
3597 HRESULT hResult;
3598
3599 hResult = fCurrentShellView->GetItemObject(
3600 SVGIO_BACKGROUND, IID_PPV_ARG(IPersistHistory, &viewPersistHistory));
3601 memset(&newState, 0, sizeof(newState));
3602 newState.dwSize = sizeof(newState);
3603 newState.browseType = 2;
3604 newState.browserIndex = GetBrowserIndex();
3605 if (viewPersistHistory.p != NULL)
3606 {
3607 hResult = viewPersistHistory->GetClassID(&newState.persistClass);
3608 if (FAILED_UNEXPECTEDLY(hResult))
3609 return hResult;
3610 }
3612 hResult = pStream->Write(&newState, sizeof(newState), NULL);
3613 if (FAILED_UNEXPECTEDLY(hResult))
3614 return hResult;
3615 hResult = pStream->Write(fCurrentDirectoryPIDL, newState.pidlSize, NULL);
3616 if (FAILED_UNEXPECTEDLY(hResult))
3617 return hResult;
3618 if (viewPersistHistory.p != NULL)
3619 {
3620 hResult = viewPersistHistory->SaveHistory(pStream);
3621 if (FAILED_UNEXPECTEDLY(hResult))
3622 return hResult;
3623 }
3624 return S_OK;
3625}
3626
3628{
3629 return E_NOTIMPL;
3630}
3631
3633{
3634 return E_NOTIMPL;
3635}
3636
3638{
3639 OnCreate(reinterpret_cast<LPCREATESTRUCT> (lParam));
3640 return 0;
3641}
3642
3644{
3645 HRESULT hr;
3646 SaveViewState();
3647
3648 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
3650
3651 // TODO: rip down everything
3652 {
3653 m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction
3654 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
3656 fCurrentShellView->DestroyViewWindow();
3657
3658 for (int i = 0; i < 3; i++)
3659 {
3662 CComPtr<IUnknown> pBarSite;
3663
3664 if (fClientBars[i].clientBar == NULL)
3665 continue;
3666
3667 hr = fClientBars[i].clientBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pdw));
3669 continue;
3670
3671 /* We should destroy our basebarsite too */
3672 hr = pdw->QueryInterface(IID_PPV_ARG(IDeskBar, &bar));
3673 if (SUCCEEDED(hr))
3674 {
3675 hr = bar->GetClient(&pBarSite);
3676 if (SUCCEEDED(hr) && pBarSite)
3677 {
3679 hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient));
3680 if (SUCCEEDED(hr))
3681 pClient->SetDeskBarSite(NULL);
3682 }
3683 }
3684 pdw->CloseDW(0);
3685
3686 pBarSite = NULL;
3687 pdw = NULL;
3688 bar = NULL;
3689 ReleaseCComPtrExpectZero(fClientBars[i].clientBar);
3690 }
3691 ReleaseCComPtrExpectZero(fCurrentShellView);
3692 ReleaseCComPtrExpectZero(fTravelLog);
3693
3699 }
3700 PostQuitMessage(0);
3701 return 0;
3702}
3703
3705{
3706 CComPtr<IDockingWindow> dockingWindow;
3707 RECT availableBounds;
3708 static const INT excludeItems[] = {1, 1, 1, IDC_STATUSBAR, 0, 0};
3709 HRESULT hResult;
3710
3711 if (wParam != SIZE_MINIMIZED)
3712 {
3713 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
3714 for (INT x = 0; x < 3; x++)
3715 {
3716 if (fClientBars[x].clientBar)
3717 {
3718 hResult = fClientBars[x].clientBar->QueryInterface(
3719 IID_PPV_ARG(IDockingWindow, &dockingWindow));
3720 if (SUCCEEDED(hResult) && dockingWindow != NULL)
3721 {
3722 hResult = dockingWindow->ResizeBorderDW(
3723 &availableBounds, static_cast<IDropTarget *>(this), TRUE);
3724 break;
3725 }
3726 }
3727 }
3729 }
3730 return 1;
3731}
3732
3734{
3735 HMENU theMenu;
3736 LPARAM menuIndex = lParam;
3737
3738 theMenu = reinterpret_cast<HMENU>(wParam);
3739
3741 {
3742 menuIndex = 0;
3743 }
3744 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_EDIT))
3745 {
3746 menuIndex = 1;
3747 }
3748 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_VIEW))
3749 {
3750 UpdateViewMenu(theMenu);
3751 menuIndex = 2;
3752 }
3754 {
3755 menuIndex = 3;
3756 }
3757 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_TOOLS))
3758 {
3759 // FIXME: Remove once implemented
3762 menuIndex = 4;
3763 }
3764 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
3765 {
3766 menuIndex = 5;
3767 }
3768
3769 LRESULT ret = RelayMsgToShellView(uMsg, wParam, menuIndex, bHandled);
3770
3771 return ret;
3772}
3773
3775{
3777 return 0;
3778}
3779
3781{
3784 return 0;
3785}
3786
3788{
3791 return 0;
3792}
3793
3795{
3797 return 0;
3798}
3799
3800LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3801{
3802 return SendMessage(WM_CLOSE);
3803}
3804
3805LRESULT CShellBrowser::OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3806{
3807 HRESULT hResult = DoFolderOptions();
3808 if (FAILED(hResult))
3809 TRACE("DoFolderOptions failed with hResult=%08lx\n", hResult);
3810 return 0;
3811}
3812
3813LRESULT CShellBrowser::OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3814{
3815#ifndef __REACTOS__
3817#endif /* __REACTOS__ */
3818 return 0;
3819}
3820
3822{
3824 return 0;
3825}
3826
3827LRESULT CShellBrowser::OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3828{
3829 ShellAbout(m_hWnd, _T("ReactOS"), NULL, NULL);
3830 return 0;
3831}
3832
3833LRESULT CShellBrowser::OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3834{
3835 HRESULT hResult = GoBack();
3836 if (FAILED(hResult))
3837 TRACE("GoBack failed with hResult=%08lx\n", hResult);
3838 return 0;
3839}
3840
3841LRESULT CShellBrowser::OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3842{
3843 HRESULT hResult = GoForward();
3844 if (FAILED(hResult))
3845 TRACE("GoForward failed with hResult=%08lx\n", hResult);
3846 return 0;
3847}
3848
3849LRESULT CShellBrowser::OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3850{
3851 HRESULT hResult = NavigateToParent();
3852 if (FAILED(hResult))
3853 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3854 return 0;
3855}
3856
3857LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3858{
3859 HRESULT hResult = GoHome();
3860 if (FAILED(hResult))
3861 TRACE("GoHome failed with hResult=%08lx\n", hResult);
3862 return 0;
3863}
3864
3865LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3866{
3867 // FIXME: This does not appear to be what windows does.
3868 HRESULT hResult = NavigateToParent();
3869 if (FAILED(hResult))
3870 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3871 return 0;
3872}
3873
3874static BOOL
3876 IN LPCWSTR pszLnkFileName,
3877 IN LPCITEMIDLIST pidl,
3878 IN LPCWSTR pszDescription OPTIONAL)
3879{
3880 IPersistFile *pPF;
3881 IShellLinkW *pSL;
3883 if (FAILED(hr))
3884 return hr;
3885
3886 hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
3887 IID_IShellLinkW, (LPVOID*)&pSL);
3888 if (SUCCEEDED(hr))
3889 {
3890 pSL->SetIDList(pidl);
3891
3892 if (pszDescription)
3893 pSL->SetDescription(pszDescription);
3894
3895 hr = pSL->QueryInterface(IID_IPersistFile, (LPVOID*)&pPF);
3896 if (SUCCEEDED(hr))
3897 {
3898 hr = pPF->Save(pszLnkFileName, TRUE);
3899 pPF->Release();
3900 }
3901 pSL->Release();
3902 }
3903
3905
3906 return SUCCEEDED(hr);
3907}
3908
3910{
3912 if (FAILED(hr))
3914
3915 return hr;
3916}
3917
3918LRESULT CShellBrowser::OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3919{
3920 LPITEMIDLIST pidlFavs;
3921 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
3923 return 0;
3924
3925 SHFILEINFOW fileInfo = { NULL };
3926 if (!SHGetFileInfoW((LPCWSTR)fCurrentDirectoryPIDL, 0, &fileInfo, sizeof(fileInfo),
3928 {
3929 return 0;
3930 }
3931
3933 SHGetPathFromIDListW(pidlFavs, szPath);
3934 PathAppendW(szPath, fileInfo.szDisplayName);
3935 PathAddExtensionW(szPath, L".lnk");
3936
3938 return 0;
3939}
3940
3941LRESULT CShellBrowser::OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3942{
3943 CComPtr<IShellFolder> psfDesktop;
3944 LPITEMIDLIST pidlFavs;
3945 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
3947 return 0;
3948
3949 hr = SHGetDesktopFolder(&psfDesktop);
3951 {
3952 ILFree(pidlFavs);
3953 return 0;
3954 }
3955
3956 hr = SHInvokeDefaultCommand(m_hWnd, psfDesktop, pidlFavs);
3957 ILFree(pidlFavs);
3959 return 0;
3960
3961 return 0;
3962}
3963
3965{
3967 m_settings.Save();
3969 return 0;
3970}
3971
3972LRESULT CShellBrowser::OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3973{
3974 HRESULT hResult;
3975 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3976 CGID_PrivCITCommands, ITID_TOOLBARLOCKED, 0, NULL, NULL);
3977 return 0;
3978}
3979
3981{
3982 HRESULT hResult;
3983 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3984 CGID_PrivCITCommands, ITID_TOOLBARBANDSHOWN, 0, NULL, NULL);
3985 return 0;
3986}
3987
3989{
3990 HRESULT hResult;
3991 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3992 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
3993 return 0;
3994}
3995
3997{
3998 HRESULT hResult;
3999 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4000 CGID_PrivCITCommands, ITID_LINKSBANDSHOWN, 0, NULL, NULL);
4001 return 0;
4002}
4003
4004LRESULT CShellBrowser::OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4005{
4006 HRESULT hResult;
4007 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4008 CGID_PrivCITCommands, ITID_TEXTLABELS, 0, NULL, NULL);
4009 return 0;
4010}
4011
4012LRESULT CShellBrowser::OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4013{
4014 HRESULT hResult;
4015 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
4016 CGID_PrivCITCommands, ITID_CUSTOMIZEENABLED, 0, NULL, NULL);
4017 return 0;
4018}
4019
4020LRESULT CShellBrowser::OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4021{
4023 fCurrentShellView->Refresh();
4024 return 0;
4025}
4026
4027LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4028{
4029 return 0;
4030}
4031
4032LRESULT CShellBrowser::OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4033{
4034 // TODO: HACK ! use the proper mechanism to show the band (i.e. pass the BSTR to basebar)
4036 {
4037 MenuBandInfo *mbi;
4039 if (!mbi)
4040 return 0;
4041 ShowBand(mbi->barGuid, mbi->fVertical);
4042 bHandled = TRUE;
4043 return 1;
4044 }
4045 switch (wID)
4046 {
4048 ShowBand(CLSID_FileSearchBand, true);
4049 break;
4051 ShowBand(CLSID_ExplorerBand, true);
4052 break;
4054 ShowBand(CLSID_SH_HistBand, true);
4055 break;
4057 ShowBand(CLSID_SH_FavBand, true);
4058 break;
4059 default:
4060 WARN("Unknown id %x\n", wID);
4061 }
4062 bHandled = TRUE;
4063 return 1;
4064}
4065
4067{
4070 return 0;
4071}
4072
4074{
4076 return 0;
4077}
4078
4080{
4081 /* Refresh child windows */
4083
4084 /* Refresh status bar */
4085 if (fStatusBar)
4086 {
4089 }
4090
4091 return 0;
4092}
4093
4095{
4096 if (!lParam)
4098
4100 return NO_ERROR;
4101}
4102
4103// WM_APPCOMMAND
4105{
4106 UINT uCmd = GET_APPCOMMAND_LPARAM(lParam);
4107 switch (uCmd)
4108 {
4109 case APPCOMMAND_BROWSER_BACKWARD:
4110 GoBack();
4111 break;
4112
4113 case APPCOMMAND_BROWSER_FORWARD:
4114 GoForward();
4115 break;
4116
4117 default:
4118 FIXME("uCmd: %u\n", uCmd);
4119 break;
4120 }
4121 return 0;
4122}
4123
4125{
4126 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
4127}
4128
4130{
4133}
4134
4136{
4138 SHGDNF flags = SHGDN_FORADDRESSBAR;
4139
4141 flags |= SHGDN_FORPARSING;
4142
4145}
4146
4148{
4149 if (!gCabinetState.fSaveLocalView || (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_UISETBYAUTOMATION)))
4150 return;
4151#if 0 // If CDesktopBrowser aggregates us, skip saving
4153 if (fCurrentShellView && SUCCEEDED(fCurrentShellView->GetCurrentInfo(&fs)) && (fs.fFlags & FWF_DESKTOP))
4154 return;
4155#endif
4156
4158 CComPtr<IStream> pITBarStream;
4159 if (!fClientBars[BIInternetToolbar].clientBar.p)
4160 return;
4162 if (FAILED(hr))
4163 return;
4165 return;
4166 pPSI->Save(pITBarStream, TRUE);
4167}
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
struct NameRec_ * Name
Definition: cdprocs.h:460
#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
#define index(s, c)
Definition: various.h:29
@ Create
Definition: registry.c:563
static LPHIST_ENTRY Top
Definition: history.c:53
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define IDI_CABINET
Definition: resource.h:10
HRESULT CBaseBarSite_CreateInstance(REFIID riid, void **ppv, BOOL bVertical)
long SHANDLE_PTR
Definition: basetsd.h:77
#define 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 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 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
virtual WNDPROC GetWindowProc()
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
DWORD m_BrowserSvcFlags
HRESULT UpdateUpState()
STDMETHOD() v_MayTranslateAccelerator(MSG *pmsg) override
LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
LRESULT OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
STDMETHOD() UpdateWindowList() override
STDMETHOD() GetFolderSetData(struct tagFolderSetData *pfsd) override
STDMETHOD() SetFlags(DWORD dwFlags, DWORD dwFlagMask) override
STDMETHOD() Navigate(BSTR URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers) override
LRESULT OnSettingsChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() _SendChildren(HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHOD() Navigate2(VARIANT *URL, VARIANT *Flags, VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers) override
STDMETHOD() CreateViewWindow(IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd) override
STDMETHOD() _PauseOrResumeView(BOOL fPaused) override
STDMETHOD_(LPBASEBROWSERDATA, PutBaseBrowserData)(void) override
STDMETHOD() Offline(int iCmd) override
STDMETHOD() NotifyRedirect(IShellView *psv, LPCITEMIDLIST pidl, BOOL *pfDidBrowse) override
STDMETHOD() put_Silent(VARIANT_BOOL bSilent) override
STDMETHOD() IEGetDisplayName(LPCITEMIDLIST pidl, LPWSTR pwszName, UINT uFlags) override
STDMETHOD() get_Parent(IDispatch **ppDisp) override
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
STDMETHOD() get_ReadyState(READYSTATE *plReadyState) override
STDMETHOD() CreateBrowserPropSheetExt(REFIID riid, void **ppv) override
LRESULT RelayCommands(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
SBFOLDERSETTINGS m_deffoldersettings
STDMETHOD() GetNavigateState(BNSTATE *pbnstate) override
STDMETHOD() InitializeDownloadManager() override
HRESULT BuildExplorerBandMenu()
STDMETHOD() ReleaseShellView() override
CComPtr< IShellFolder > fCurrentShellFolder
STDMETHOD() get_FullScreen(VARIANT_BOOL *pbFullScreen) override
STDMETHOD() GetPidl(LPITEMIDLIST *ppidl) override
HRESULT FireNavigateComplete(const wchar_t *newDirectory)
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 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)
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)
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
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
HRESULT ApplyBrowserDefaultFolderSettings(IShellView *pvs)
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()
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
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
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:29
#define IDM_GOTO_TRAVEL_SEP
Definition: resource.h:84
#define IDM_TOOLS_DISCONNECTNETWORKDRIVE
Definition: resource.h:54
#define IDM_TOOLBARS_LOCKTOOLBARS
Definition: resource.h:33
#define IDM_EXPLORERBAR_FOLDERS
Definition: resource.h:43
#define IDM_TOOLS_FOLDEROPTIONS
Definition: resource.h:56
#define IDM_EXPLORERBAND_BEGINCUSTOM
Definition: resource.h:79
#define IDM_GOTO_UPONELEVEL
Definition: resource.h:47
#define IDM_TOOLBARS_TEXTLABELS
Definition: resource.h:35
#define IDM_VIEW_REFRESH
Definition: resource.h:49
#define IDM_TOOLBARS_STANDARDBUTTONS
Definition: resource.h:30
#define IDM_EXPLORERBAR_MEDIA
Definition: resource.h:41
#define IDM_EXPLORERBAR_FAVORITES
Definition: resource.h:40
#define IDM_GOTO_TRAVEL_FIRST
Definition: resource.h:82
#define IDM_NOTIFYITBARDIRTY
Definition: resource.h:76
#define IDM_GOTO_FORWARD
Definition: resource.h:46
#define IDM_EXPLORERBAR_HISTORY
Definition: resource.h:42
#define IDM_TOOLS_MAPNETWORKDRIVE
Definition: resource.h:53
#define IDM_CABINET_CONTEXTMENU
Definition: resource.h:88
#define IDM_FILE_CLOSE
Definition: resource.h:23
#define IDM_VIEW_EXPLORERBAR
Definition: resource.h:38
#define IDM_GOTO_TRAVEL_LAST
Definition: resource.h:83
#define IDM_GOTO_HOMEPAGE
Definition: resource.h:48
#define IDM_TOOLBARS_GOBUTTON
Definition: resource.h:36
#define IDM_FAVORITES_EMPTY
Definition: resource.h:52
#define IDM_TOOLBARS_CUSTOMIZE
Definition: resource.h:34
#define IDM_EXPLORERBAND_ENDCUSTOM
Definition: resource.h:80
#define IDS_FOLDER_OPTIONS
Definition: resource.h:132
#define IDM_TOOLS_SYNCHRONIZE
Definition: resource.h:55
#define IDM_GOTO_TRAVEL_LASTTARGET
Definition: resource.h:86
#define IDM_FAVORITES_ORGANIZEFAVORITES
Definition: resource.h:51
#define IDM_GOTO_BACK
Definition: resource.h:45
#define IDM_GOTO_TRAVEL_FIRSTTARGET
Definition: resource.h:85
#define IDM_EXPLORERBAR_SEARCH
Definition: resource.h:39
#define IDM_BACKSPACE
Definition: resource.h:25
#define IDM_EXPLORERBAR_SEPARATOR
Definition: resource.h:44
#define IDM_VIEW_STATUSBAR
Definition: resource.h:37
#define IDM_CABINET_MAINMENU
Definition: resource.h:89
#define IDM_TOOLBARS_ADDRESSBAR
Definition: resource.h:31
#define IDM_FAVORITES_ADDTOFAVORITES
Definition: resource.h:50
#define IDM_TOOLBARS_LINKSBAR
Definition: resource.h:32
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)
static BOOL CreateShortcut(IN LPCWSTR pszLnkFileName, IN LPCITEMIDLIST pidl, IN LPCWSTR pszDescription OPTIONAL)
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)
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)
HRESULT CShellBrowser_CreateInstance(REFIID riid, void **ppv)
HICON WINAPI ImageList_GetIcon(HIMAGELIST himl, INT i, UINT fStyle)
Definition: imagelist.c:1981
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
short VARIANT_BOOL
Definition: compat.h:2290
@ VT_BSTR
Definition: compat.h:2303
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_BYREF
Definition: compat.h:2342
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I4
Definition: compat.h:2298
@ VT_INT_PTR
Definition: compat.h:2327
@ VT_BOOL
Definition: compat.h:2306
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
static void cleanup(void)
Definition: main.c:1335
HRESULT WINAPI OleFlushClipboard(void)
Definition: clipboard.c:2293
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
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:3257
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4279
HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:1997
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1048
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1800
BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: ordinal.c:3472
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1781
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1501
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1087
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3060
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3004
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1336
void WINAPI SHPropagateMessage(HWND hWnd, UINT uiMsgId, WPARAM wParam, LPARAM lParam, BOOL bSend)
Definition: ordinal.c:1719
HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name, DWORD flags, REFIID riid, void **ppv)
Definition: ordinal.c:5222
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1411
BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath)
Definition: path.c:2272
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:71
r parent
Definition: btrfs.c:3010
LPVOID WINAPI DSA_GetItemPtr(HDSA hdsa, INT nIndex)
Definition: dsa.c:162
BOOL WINAPI DSA_DeleteAllItems(HDSA hdsa)
Definition: dsa.c:367
BOOL WINAPI DSA_Destroy(HDSA hdsa)
Definition: dsa.c:103
HDSA WINAPI DSA_Create(INT nSize, INT nGrow)
Definition: dsa.c:71
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
void bar()
Definition: ehthrow.cxx:142
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
FT_Vector * vec
Definition: ftbbox.c:448
GLint level
Definition: gl.h:1546
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint index
Definition: glext.h:6031
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
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define fs
Definition: i386-dis.c:444
BOOL WINAPI Shell_GetImageLists(HIMAGELIST *lpBigList, HIMAGELIST *lpSmallList)
Definition: iconcache.cpp:689
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:772
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40
UINT _FindTBar([in] IUnknown *punkSrc)
LRESULT ForwardViewMsg([in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
LRESULT WndProcBS([in] HWND hwnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam)
UINT _get_itbLastFocus()
LPTOOLBARITEM _GetToolbarItem([in] int itb)
LPBASEBROWSERDATA PutBaseBrowserData()
LRESULT OnNotify([in, out] struct tagNMHDR *pnm)
LRESULT OnCommand([in] WPARAM wParam, [in] LPARAM lParam)
IStream * v_GetViewStream([in] PCIDLIST_ABSOLUTE pidl, [in] DWORD grfMode, [in] LPCWSTR pwszName)
DWORD GetBrowserIndex()
struct IOleCommandTarget::_tagOLECMDTEXT OLECMDTEXT
struct IOleCommandTarget::_tagOLECMD OLECMD
HRESULT Write([in, size_is(cb)] const void *pv, [in] ULONG cb, [out] ULONG *pcbWritten)
HRESULT Read([out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead)
HRESULT CreateViewObject([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
HRESULT SetIDList([in] PCIDLIST_ABSOLUTE pidl)
HRESULT SetDescription([in] LPCWSTR pszName)
HRESULT GetCurrentInfo([out] LPFOLDERSETTINGS lpfs)
ULONG AddRef()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt Release()
#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 TEXT(s)
Definition: k32.h:26
#define f
Definition: ke_i.h:83
#define GUID_NULL
Definition: ks.h:106
_In_opt_ PVOID _Out_ BOOLEAN * Stop
Definition: ldrtypes.h:258
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Definition: atlcom.h:609
#define BEGIN_CONNECTION_POINT_MAP(x)
Definition: atlcom.h:1483
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define CONNECTION_POINT_ENTRY(iid)
Definition: atlcom.h:1494
#define END_CONNECTION_POINT_MAP()
Definition: atlcom.h:1488
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define END_COM_MAP()
Definition: atlcom.h:592
#define GCCU(x)
Definition: atlwin.h:27
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1926
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1898
#define COMMAND_ID_HANDLER(id, func)
Definition: atlwin.h:1953
#define Unused(x)
Definition: atlwin.h:28
#define END_MSG_MAP()
Definition: atlwin.h:1917
#define MESSAGE_RANGE_HANDLER(msgFirst, msgLast, func)
Definition: atlwin.h:1935
#define COMMAND_RANGE_HANDLER(idFirst, idLast, func)
Definition: atlwin.h:1971
static HANDLE hmon
Definition: localmon.c:41
LPCWSTR szPath
Definition: env.c:37
static HICON
Definition: imagelist.c:80
static BYTE int1[]
Definition: cert.c:3154
static BYTE int2[]
Definition: cert.c:3155
HRESULT hres
Definition: protocol.c:465
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static VARIANTARG static DISPID
Definition: ordinal.c:52
WORD unused[29]
Definition: crypt.c:1155
REFCLSID clsid
Definition: msctf.c:82
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
_Out_ LPRECT prc
Definition: ntgdi.h:1658
#define L(x)
Definition: ntvdm.h:50
#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
const GUID IID_IPersistFile
#define PathAddExtensionW
Definition: pathcch.h:305
#define PathAppendW
Definition: pathcch.h:309
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1044
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:198
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
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 SBARS_SIZEGRIP
Definition: commctrl.h:1928
#define TB_ADDBITMAP
Definition: commctrl.h:1056
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
void SaveHistory(void)
Definition: readln.c:642
void LoadHistory(void)
Definition: readln.c:606
DWORD LCID
Definition: nls.h:13
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
#define memset(x, y, z)
Definition: compat.h:39
enum tagBNSTATE BNSTATE
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:167
#define SHGFI_PIDL
Definition: shellapi.h:181
#define ShellAbout
Definition: shellapi.h:715
#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:623
#define CSIDL_FAVORITES
Definition: shlobj.h:2179
#define TLMENUF_BACKANDFORTH
Definition: shlobj.h:2744
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2203
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2529
#define FCIDM_MENU_FAVORITES
Definition: shlobj.h:639
#define FCIDM_MENU_HELP
Definition: shlobj.h:636
#define FCIDM_MENU_FILE
Definition: shlobj.h:630
#define TLOG_FORE
Definition: shlobj.h:2738
#define FCIDM_MENU_TOOLS
Definition: shlobj.h:634
#define TLMENUF_CHECKCURRENT
Definition: shlobj.h:2741
#define FCIDM_MENU_EXPLORE
Definition: shlobj.h:638
#define FCIDM_MENU_VIEW
Definition: shlobj.h:632
#define TLOG_BACK
Definition: shlobj.h:2737
#define FCIDM_MENU_EDIT
Definition: shlobj.h:631
@ REST_NOSAVESET
Definition: shlobj.h:1645
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:614
#define SBCMDID_EXPLORERBARFOLDERS
Definition: shlobj_undoc.h:53
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:78
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:79
#define SHGetValue
Definition: shlwapi.h:79
@ FWF_DESKTOP
Definition: shobjidl.idl:647
@ FVM_ICON
Definition: shobjidl.idl:679
DWORD WINAPI SHRestricted(RESTRICTIONS rest)
Definition: shpolicy.c:150
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
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
BOOL fNewWindowMode
Definition: shlobj.h:2392
BOOL fSaveLocalView
Definition: shlobj.h:2388
BOOL fFullPathTitle
Definition: shlobj.h:2387
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
WCHAR szDisplayName[MAX_PATH]
Definition: shellapi.h:376
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
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_WNDPROC
Definition: treelist.c:66
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
#define ITID_LINKSBANDSHOWN
Definition: undocshell.h:886
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:884
#define ITID_TEXTLABELS
Definition: undocshell.h:883
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:889
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:885
#define CWM_STATECHANGE
Definition: undocshell.h:232
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:890
#define ITBBID_MENUBAND
Definition: undocshell.h:875
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
#define _T(x)
Definition: vfdio.h:22
int ret
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_COMMANDSTATECHANGE
Definition: webchild.h:40
#define ZeroMemory
Definition: winbase.h:1737
#define GetModuleHandle
Definition: winbase.h:3852
#define OutputDebugString
Definition: winbase.h:3915
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2792
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
_In_ POINTL * pptl
Definition: winddi.h:3741
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HICON HCURSOR
Definition: windef.h:299
#define WINAPI
Definition: msvc.h:6
#define SubclassWindow(hwnd, lpfn)
Definition: windowsx.h:542
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define E_UNEXPECTED
Definition: winerror.h:2456
#define E_POINTER
Definition: winerror.h:2365
#define RESOURCETYPE_DISK
Definition: winnetwk.h:64
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define SW_SHOWNORMAL
Definition: winuser.h:773
#define SW_HIDE
Definition: winuser.h:771
#define WM_CLOSE
Definition: winuser.h:1624
#define MF_BYCOMMAND
Definition: winuser.h:202
#define MIIM_ID
Definition: winuser.h:725
#define COLOR_WINDOW
Definition: winuser.h:921
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1611
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:1614
#define WM_COMMAND
Definition: winuser.h:1743
#define IDC_ARROW
Definition: winuser.h:687
#define WM_APPCOMMAND
Definition: winuser.h:1885
#define VK_CONTROL
Definition: winuser.h:2206
#define InsertMenuItem
Definition: winuser.h:5816
#define WM_SETFOCUS
Definition: winuser.h:1616
#define SetMenuItemInfo
Definition: winuser.h:5862
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SIZE_MINIMIZED
Definition: winuser.h:2509
BOOL WINAPI IsMenu(_In_ HMENU)
#define CS_DBLCLKS
Definition: winuser.h:651
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1629
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:1648
#define HWND_DESKTOP
Definition: winuser.h:1212
#define WM_SETTINGCHANGE
Definition: winuser.h:1632
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
BOOL WINAPI LockWindowUpdate(_In_opt_ HWND)
#define MIIM_SUBMENU
Definition: winuser.h:726
#define WM_INITMENUPOPUP
Definition: winuser.h:1749
#define MF_SEPARATOR
Definition: winuser.h:137
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:5825
#define SendMessage
Definition: winuser.h:5855
#define LoadCursor
Definition: winuser.h:5824
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5731
#define LoadMenu
Definition: winuser.h:5829
#define WM_MEASUREITEM
Definition: winuser.h:1649
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define WM_NCDESTROY
Definition: winuser.h:1687
#define SWP_NOOWNERZORDER
Definition: winuser.h:1252
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_USER
Definition: winuser.h:1898
#define IDC_WAIT
Definition: winuser.h:689
#define SW_SHOW
Definition: winuser.h:778
#define WM_DESTROY
Definition: winuser.h:1612
#define SetWindowText
Definition: winuser.h:5869
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2909
#define SWP_NOZORDER
Definition: winuser.h:1250
#define InsertMenu
Definition: winuser.h:5815
#define GetMenuItemInfo
Definition: winuser.h:5800
#define WM_MENUSELECT
Definition: winuser.h:1750
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define MIIM_TYPE
Definition: winuser.h:728
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2139
#define WM_SETREDRAW
Definition: winuser.h:1619
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56
DWORD WINAPI WNetConnectionDialog(HWND hwnd, DWORD dwType)
Definition: wnet.c:2913
DWORD WINAPI WNetDisconnectDialog(HWND hwnd, DWORD dwType)
Definition: wnet.c:2954
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_In_ PSTRING FullName
Definition: rtlfuncs.h:1665
static void Initialize()
Definition: xlate.c:212
#define IID_PPV_ARG(Itype, ppType)
char TCHAR
Definition: xmlstorage.h:189
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193