ReactOS 0.4.15-dev-8434-g155a7c7
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
616 LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
617 LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
618 LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
619 LRESULT OnDisconnectNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
620 LRESULT OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
621 LRESULT OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
622 LRESULT OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
623 LRESULT OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
624 LRESULT OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
625 LRESULT OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
626 LRESULT OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
627 LRESULT OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
628 LRESULT OnToggleStatusBarVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
629 LRESULT OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
630 LRESULT OnToggleToolbarBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
631 LRESULT OnToggleAddressBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
632 LRESULT OnToggleLinksBandVisible(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
633 LRESULT OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
634 LRESULT OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
635 LRESULT OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
636 LRESULT OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
637 LRESULT OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
644
646 {
647 static ATL::CWndClassInfo wc =
648 {
650 0, 0, NULL, LoadIcon(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDI_CABINET)),
652 NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
653 };
654 return wc;
655 }
656
699
701 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents2)
702 CONNECTION_POINT_ENTRY(DIID_DWebBrowserEvents)
704
706 COM_INTERFACE_ENTRY_IID(IID_IDockingWindowSite, IDockingWindowSite)
707 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
709 COM_INTERFACE_ENTRY_IID(IID_IShellBrowser, IShellBrowser)
710 COM_INTERFACE_ENTRY_IID(IID_IDropTarget, IDropTarget)
711 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
712 COM_INTERFACE_ENTRY_IID(IID_IProfferService, IProfferService)
713 COM_INTERFACE_ENTRY_IID(IID_IShellBrowserService, IShellBrowserService)
716 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser, IWebBrowser)
717 COM_INTERFACE_ENTRY_IID(IID_IWebBrowserApp, IWebBrowserApp)
718 COM_INTERFACE_ENTRY_IID(IID_IWebBrowser2, IWebBrowser2)
719 COM_INTERFACE_ENTRY_IID(IID_ITravelLogClient, ITravelLogClient)
721 COM_INTERFACE_ENTRY_IID(IID_IPersistHistory, IPersistHistory)
722 COM_INTERFACE_ENTRY_IID(IID_IBrowserService, IBrowserService)
723 COM_INTERFACE_ENTRY_IID(IID_IBrowserService2, IBrowserService2)
725};
726
728
730{
731 m_BrowserSvcFlags = BSF_RESIZABLE | BSF_CANMAXIMIZE;
732 m_Destroyed = false;
744}
745
747{
748 if (menuDsa)
750}
751
753{
754 CComPtr<IPersistStreamInit> persistStreamInit;
755 HRESULT hResult;
756 CComPtr<IUnknown> clientBar;
757
759
760 menuDsa = DSA_Create(sizeof(MenuBandInfo), 5);
761 if (!menuDsa)
762 return E_OUTOFMEMORY;
763
764 // create window
766 if (m_hWnd == NULL)
767 return E_FAIL;
768
770 if (FAILED_UNEXPECTEDLY(hResult))
771 return hResult;
772
774
775 // create interfaces
776 hResult = clientBar->QueryInterface(IID_PPV_ARG(IPersistStreamInit, &persistStreamInit));
777 if (FAILED_UNEXPECTEDLY(hResult))
778 return hResult;
779
780 hResult = IUnknown_SetSite(clientBar, static_cast<IShellBrowser *>(this));
781 if (FAILED_UNEXPECTEDLY(hResult))
782 return hResult;
783
784 hResult = IUnknown_Exec(clientBar, CGID_PrivCITCommands, 1, 1 /* or 0 */, NULL, NULL);
785 if (FAILED_UNEXPECTEDLY(hResult))
786 return hResult;
787
788 CComPtr<IStream> pITBarStream;
790 hResult = SUCCEEDED(hResult) ? persistStreamInit->Load(pITBarStream) : persistStreamInit->InitNew();
791 if (FAILED_UNEXPECTEDLY(hResult))
792 return hResult;
793
794 hResult = IUnknown_ShowDW(clientBar, TRUE);
795 if (FAILED_UNEXPECTEDLY(hResult))
796 return hResult;
797
798 fToolbarProxy.Initialize(m_hWnd, clientBar);
799
800 // create status bar
803 dwStatusStyle |= WS_VISIBLE;
805 0, 0, 500, 20, m_hWnd, (HMENU)IDC_STATUSBAR,
806 _AtlBaseModule.GetModuleInstance(), 0);
807
809 UpdateWindow();
810
811 return S_OK;
812}
813
815{
816 HRESULT hr;
817 if (pvs)
818 {
820 SBFOLDERSETTINGS &sbfs = m_deffoldersettings, defsbfs;
821 if (FAILED(pvs->GetCurrentInfo(&sbfs.FolderSettings)))
822 {
823 defsbfs.InitializeDefaults();
824 sbfs = defsbfs;
825 }
827 }
828 else
829 {
832 if (SUCCEEDED(hr))
834 }
835 return hr;
836}
837
839{
840 if ((Flags & (SBSP_SAMEBROWSER | SBSP_NEWBROWSER)) == SBSP_DEFBROWSER)
841 {
843 Flags |= SBSP_SAMEBROWSER; // Force if this is the first navigation or the folder tree is present
844 else
845 Flags |= (!!gCabinetState.fNewWindowMode) ^ (GetAsyncKeyState(VK_CONTROL) < 0) ? SBSP_NEWBROWSER : SBSP_SAMEBROWSER;
846 }
847 if (Flags & (SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
848 Flags = (Flags & ~SBSP_NEWBROWSER) | SBSP_SAMEBROWSER; // Force same browser for now
849 return Flags;
850}
851
853{
854 SaveITBarLayout(); // Do this now so the new window inherits the current layout
855 // TODO: www.geoffchappell.com/studies/windows/ie/shdocvw/interfaces/inotifyappstart.htm
856 DWORD flags = (SbspFlags & SBSP_EXPLOREMODE) ? SH_EXPLORER_CMDLINE_FLAG_E : 0;
857 if ((SbspFlags & (SBSP_OPENMODE | SBSP_EXPLOREMODE)) == SBSP_DEFMODE)
859 LPITEMIDLIST pidlDir;
860 HRESULT hr = SHILClone(pidl, &pidlDir);
861 if (FAILED(hr))
862 return hr;
863 // TODO: !SBSP_NOTRANSFERHIST means we are supposed to pass the history here somehow?
865}
866
868{
869 if (SbspFlags & SBSP_RELATIVE)
870 return SHILCombine(fCurrentDirectoryPIDL, relative, ppidl);
871
872 if (SbspFlags & SBSP_PARENT)
873 {
874 HRESULT hr = GetPidl(ppidl);
875 if (FAILED(hr))
876 return hr;
877 ILRemoveLastID(*ppidl);
878 return S_OK;
879 }
880 // TODO: SBSP_NAVIGATEBACK and SBSP_NAVIGATEFORWARD?
881 return E_UNEXPECTED;
882}
883
885{
886 CComPtr<IShellFolder> newFolder;
888 HRESULT hResult;
889 CLSID clsid;
890 BOOL HasIconViewType;
891
892 // called by shell view to browse to new folder
893 // also called by explorer band to navigate to new folder
894 hResult = SHBindToFolder(pidl, &newFolder);
895 if (FAILED_UNEXPECTEDLY(hResult))
896 return hResult;
897 // HACK & FIXME: Get view mode from shellbag when fully implemented.
898 IUnknown_GetClassID(newFolder, &clsid);
899 HasIconViewType = clsid == CLSID_MyComputer || clsid == CLSID_ControlPanel ||
900 clsid == CLSID_ShellDesktop;
901
902 if (HasIconViewType)
903 newFolderSettings.ViewMode = FVM_ICON;
904 hResult = BrowseToPath(newFolder, pidl, &newFolderSettings, flags);
905 if (FAILED_UNEXPECTEDLY(hResult))
906 return hResult;
907 return S_OK;
908}
909
911{
912 LPCITEMIDLIST pidlnext;
913 WORD length;
914 BOOL ret;
915
916 ret = TRUE;
917 if (! _ILIsDesktop(pidl))
918 {
919 length = pidl->mkid.cb;
920 pidlnext =
921 reinterpret_cast<LPCITEMIDLIST>(
922 reinterpret_cast<const BYTE *>(pidl) + length);
923 if (pidlnext->mkid.cb != 0)
924 ret = FALSE;
925 }
926 return ret;
927}
928
930 const IID *riid, LPVOID *ppv, LPITEMIDLIST *ppidlLast)
931{
933 LPITEMIDLIST pidlChild;
934 LPITEMIDLIST pidlParent;
935 HRESULT hResult;
936
937 hResult = E_FAIL;
938 if (ppv == NULL)
939 return E_POINTER;
940 *ppv = NULL;
941 if (ppidlLast != NULL)
942 *ppidlLast = NULL;
943 if (_ILIsPidlSimple(pidl))
944 {
945 if (ppidlLast != NULL)
946 *ppidlLast = ILClone(pidl);
947 hResult = SHGetDesktopFolder((IShellFolder **)ppv);
948 }
949 else
950 {
951 pidlChild = ILClone(ILFindLastID(pidl));
952 pidlParent = ILClone(pidl);
953 ILRemoveLastID(pidlParent);
954 hResult = SHGetDesktopFolder(&psf);
955 if (SUCCEEDED(hResult))
956 hResult = psf->BindToObject(pidlParent, NULL, *riid, ppv);
957 if (SUCCEEDED(hResult) && ppidlLast != NULL)
958 *ppidlLast = pidlChild;
959 else
960 ILFree(pidlChild);
961 ILFree(pidlParent);
962 }
963 return hResult;
964}
965
967 LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
968{
969 CComPtr<IShellFolder> parentFolder;
970 LPITEMIDLIST childPIDL = NULL;
971 STRRET L108;
972 HRESULT hResult;
973
974 hResult = SHBindToFolderIDListParent(NULL, pidl, &IID_PPV_ARG(IShellFolder, &parentFolder), &childPIDL);
975 if (FAILED(hResult))
976 goto cleanup;
977
978 hResult = parentFolder->GetDisplayNameOf(childPIDL, uFlags, &L108);
979 if (FAILED(hResult))
980 goto cleanup;
981
982 StrRetToBufW(&L108, childPIDL, pszBuf, cchBuf);
983 if (rgfInOut)
984 {
985 hResult = parentFolder->GetAttributesOf(1, const_cast<LPCITEMIDLIST *>(&childPIDL), rgfInOut);
986 if (FAILED(hResult))
987 goto cleanup;
988 }
989
990 hResult = S_OK;
991
992cleanup:
993 if (childPIDL)
994 ILFree(childPIDL);
995 return hResult;
996}
997
998HRESULT IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cchBuf, SFGAOF *rgfInOut)
999{
1000 return IEGetNameAndFlagsEx(pidl, uFlags, 0, pszBuf, cchBuf, rgfInOut);
1001}
1002
1004{
1005 // TODO: Also respect EBO_NOPERSISTVIEWSTATE?
1007 fCurrentShellView->SaveViewState();
1008}
1009
1011 LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
1012{
1013 CComPtr<IShellFolder> saveCurrentShellFolder;
1014 CComPtr<IShellView> saveCurrentShellView;
1015 CComPtr<IShellView> newShellView;
1016 CComPtr<ITravelLog> travelLog;
1017 HWND newShellViewWindow;
1018 BOOL windowUpdateIsLocked;
1019 RECT shellViewWindowBounds;
1020 HWND previousView;
1021 HCURSOR saveCursor;
1022 wchar_t newTitle[MAX_PATH];
1023 SHGDNF nameFlags;
1024 HRESULT hResult;
1025 //TODO: BOOL nohistory = m_BrowserSvcFlags & BSF_NAVNOHISTORY;
1026
1027 if (m_Destroyed)
1028 return S_FALSE;
1029
1030 if (newShellFolder == NULL)
1031 return E_INVALIDARG;
1032
1033 hResult = GetTravelLog(&travelLog);
1034 if (FAILED_UNEXPECTEDLY(hResult))
1035 return hResult;
1036
1037 // update history
1039 {
1040 if (travelLog->CountEntries(static_cast<IDropTarget *>(this)) > 0)
1041 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1042 // what to do with error? Do we want to halt browse because state save failed?
1043 }
1044
1046 {
1047 SaveViewState();
1048 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
1049 }
1050
1051 // create view object
1052 hResult = newShellFolder->CreateViewObject(m_hWnd, IID_PPV_ARG(IShellView, &newShellView));
1053 if (FAILED_UNEXPECTEDLY(hResult))
1054 return hResult;
1055 previousView = fCurrentShellViewWindow;
1056
1057 // enter updating section
1058 saveCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
1059 windowUpdateIsLocked = LockWindowUpdate(TRUE);
1060 if (fCurrentShellView != NULL)
1062
1063 // set site
1064 hResult = IUnknown_SetSite(newShellView, static_cast<IDropTarget *>(this));
1065
1066 // update folder and view
1067 saveCurrentShellFolder = fCurrentShellFolder;
1068 saveCurrentShellView = fCurrentShellView;
1069 fCurrentShellFolder = newShellFolder;
1070 fCurrentShellView = newShellView;
1071
1072 // get boundary
1073 if (previousView != NULL)
1074 ::GetWindowRect(previousView, &shellViewWindowBounds);
1075 else
1076 ZeroMemory(&shellViewWindowBounds, sizeof(shellViewWindowBounds));
1077 ::MapWindowPoints(0, m_hWnd, reinterpret_cast<POINT *>(&shellViewWindowBounds), 2);
1078
1079 // update current pidl
1081 fCurrentDirectoryPIDL = ILClone(absolutePIDL);
1082
1083 // create view window
1084 hResult = newShellView->CreateViewWindow(saveCurrentShellView, folderSettings,
1085 this, &shellViewWindowBounds, &newShellViewWindow);
1086 if (FAILED_UNEXPECTEDLY(hResult) || newShellViewWindow == NULL)
1087 {
1088 fCurrentShellView = saveCurrentShellView;
1089 fCurrentShellFolder = saveCurrentShellFolder;
1091 if (windowUpdateIsLocked)
1093 SetCursor(saveCursor);
1094 return hResult;
1095 }
1096
1097 // update view window
1098 if (saveCurrentShellView != NULL)
1099 saveCurrentShellView->DestroyViewWindow();
1100 fCurrentShellViewWindow = newShellViewWindow;
1101
1102 if (previousView == NULL)
1103 {
1105 }
1106
1107 // no use
1108 saveCurrentShellView.Release();
1109 saveCurrentShellFolder.Release();
1110
1111 hResult = newShellView->UIActivate((flags & BTP_ACTIVATE_NOFOCUS) ? SVUIA_ACTIVATE_NOFOCUS : SVUIA_ACTIVATE_FOCUS);
1112
1113 // leave updating section
1114 if (windowUpdateIsLocked)
1116 SetCursor(saveCursor);
1117
1118 // update history
1120 {
1121 hResult = travelLog->AddEntry(static_cast<IDropTarget *>(this), FALSE);
1122 hResult = travelLog->UpdateEntry(static_cast<IDropTarget *>(this), FALSE);
1123 }
1124
1125 // completed
1126 nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
1127 hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
1128 sizeof(newTitle) / sizeof(wchar_t), NULL);
1129 if (SUCCEEDED(hResult))
1130 {
1131 FireNavigateComplete(newTitle);
1132 }
1133 else
1134 {
1135 FireNavigateComplete(L"ERROR");
1136 }
1137
1139
1140 LPCITEMIDLIST pidlChild;
1141 INT index, indexOpen;
1142 HIMAGELIST himlSmall, himlLarge;
1143
1145 hResult = SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
1146 if (SUCCEEDED(hResult))
1147 {
1148 index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
1149
1150 Shell_GetImageLists(&himlLarge, &himlSmall);
1151
1152 HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
1153 HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
1154
1155 /* Hack to make it possible to release the old icons */
1156 /* Something seems to go wrong with WM_SETICON */
1157 HICON oldSmall = (HICON)SendMessage(WM_GETICON, ICON_SMALL, 0);
1158 HICON oldLarge = (HICON)SendMessage(WM_GETICON, ICON_BIG, 0);
1159
1160 SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
1161 SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
1162
1163 DestroyIcon(oldSmall);
1164 DestroyIcon(oldLarge);
1165 }
1166
1168 hResult = UpdateForwardBackState();
1169 hResult = UpdateUpState();
1170 return S_OK;
1171}
1172
1174{
1175 CComPtr<IBandSite> bandSite;
1176 CComPtr<IDeskBand> deskBand;
1177 HRESULT hResult;
1178
1179 if (!fClientBars[BIInternetToolbar].clientBar)
1180 return E_FAIL;
1181
1183 if (FAILED_UNEXPECTEDLY(hResult))
1184 return hResult;
1185
1186 hResult = bandSite->QueryBand(1, &deskBand, NULL, NULL, 0);
1187 if (FAILED_UNEXPECTEDLY(hResult))
1188 return hResult;
1189
1190 return deskBand->QueryInterface(riid, shellMenu);
1191}
1192
1193HRESULT CShellBrowser::GetBaseBar(bool vertical, REFIID riid, void **theBaseBar)
1194{
1195 CComPtr<IUnknown> newBaseBar;
1196 CComPtr<IDeskBar> deskBar;
1197 CComPtr<IUnknown> newBaseBarSite;
1198 CComPtr<IDeskBarClient> deskBarClient;
1199 IUnknown **cache;
1200 HRESULT hResult;
1201
1202 if (vertical)
1204 else
1206 if (*cache == NULL)
1207 {
1208 hResult = CBaseBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBar), vertical);
1209 if (FAILED_UNEXPECTEDLY(hResult))
1210 return hResult;
1211 hResult = CBaseBarSite_CreateInstance(IID_PPV_ARG(IUnknown, &newBaseBarSite), vertical);
1212 if (FAILED_UNEXPECTEDLY(hResult))
1213 return hResult;
1214
1215 // we have to store our basebar into cache now
1216 *cache = newBaseBar;
1217 (*cache)->AddRef();
1218
1219 // tell the new base bar about the shell browser
1220 hResult = IUnknown_SetSite(newBaseBar, static_cast<IDropTarget *>(this));
1221 if (FAILED_UNEXPECTEDLY(hResult))
1222 return hResult;
1223
1224 // tell the new base bar about the new base bar site
1225 hResult = newBaseBar->QueryInterface(IID_PPV_ARG(IDeskBar, &deskBar));
1226 if (FAILED_UNEXPECTEDLY(hResult))
1227 return hResult;
1228 hResult = deskBar->SetClient(newBaseBarSite);
1229 if (FAILED_UNEXPECTEDLY(hResult))
1230 return hResult;
1231
1232 // tell the new base bar site about the new base bar
1233 hResult = newBaseBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &deskBarClient));
1234 if (FAILED_UNEXPECTEDLY(hResult))
1235 return hResult;
1236 hResult = deskBarClient->SetDeskBarSite(newBaseBar);
1237 if (FAILED_UNEXPECTEDLY(hResult))
1238 return hResult;
1239
1240 }
1241 return (*cache)->QueryInterface(riid, theBaseBar);
1242}
1243
1244BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pdwBandID)
1245{
1246 HRESULT hResult;
1247 CComPtr<IDeskBar> deskBar;
1248 CComPtr<IUnknown> baseBarSite;
1249 CComPtr<IBandSite> bandSite;
1250 CLSID clsidTmp;
1251 DWORD numBands;
1252 DWORD dwBandID;
1253 DWORD i;
1254
1255 /* Get our basebarsite to be able to enumerate bands */
1256 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1257 if (FAILED_UNEXPECTEDLY(hResult))
1258 return FALSE;
1259 hResult = deskBar->GetClient(&baseBarSite);
1260 if (FAILED_UNEXPECTEDLY(hResult))
1261 return FALSE;
1262 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &bandSite));
1263 if (FAILED_UNEXPECTEDLY(hResult))
1264 return FALSE;
1265
1266 hResult = bandSite->EnumBands(-1, &numBands);
1267 if (FAILED_UNEXPECTEDLY(hResult))
1268 return FALSE;
1269
1270 for(i = 0; i < numBands; i++)
1271 {
1272 CComPtr<IPersist> bandPersist;
1273
1274 hResult = bandSite->EnumBands(i, &dwBandID);
1275 if (FAILED_UNEXPECTEDLY(hResult))
1276 return FALSE;
1277
1278 hResult = bandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &bandPersist));
1279 if (FAILED_UNEXPECTEDLY(hResult))
1280 return FALSE;
1281 hResult = bandPersist->GetClassID(&clsidTmp);
1282 if (FAILED_UNEXPECTEDLY(hResult))
1283 return FALSE;
1284 if (IsEqualGUID(clsidBand, clsidTmp))
1285 {
1286 if (pdwBandID) *pdwBandID = dwBandID;
1287 return TRUE;
1288 }
1289 }
1290 return FALSE;
1291}
1292
1293HRESULT CShellBrowser::ShowBand(const CLSID &classID, bool vertical)
1294{
1295 CComPtr<IDockingWindow> dockingWindow;
1296 CComPtr<IUnknown> baseBarSite;
1297 CComPtr<IUnknown> newBand;
1298 CComPtr<IDeskBar> deskBar;
1299 VARIANT vaIn;
1300 HRESULT hResult;
1301 DWORD dwBandID;
1302
1303 hResult = GetBaseBar(vertical, IID_PPV_ARG(IDeskBar, &deskBar));
1304 if (FAILED_UNEXPECTEDLY(hResult))
1305 return hResult;
1306
1307 hResult = deskBar->GetClient(&baseBarSite);
1308 if (FAILED_UNEXPECTEDLY(hResult))
1309 return hResult;
1310
1311 hResult = deskBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
1312 if (FAILED_UNEXPECTEDLY(hResult))
1313 return hResult;
1314
1315 if (!IsBandLoaded(classID, vertical, &dwBandID))
1316 {
1317 TRACE("ShowBand called for CLSID %s, vertical=%d...\n", wine_dbgstr_guid(&classID), vertical);
1318 if (IsEqualCLSID(CLSID_ExplorerBand, classID))
1319 {
1320 TRACE("CLSID_ExplorerBand requested, building internal band.\n");
1322 if (FAILED_UNEXPECTEDLY(hResult))
1323 return hResult;
1324 }
1325 else if (IsEqualCLSID(classID, CLSID_FileSearchBand))
1326 {
1327 TRACE("CLSID_FileSearchBand requested, building internal band.\n");
1328 hResult = CSearchBar_CreateInstance(IID_PPV_ARG(IUnknown, &newBand));
1329 if (FAILED_UNEXPECTEDLY(hResult))
1330 return hResult;
1331 }
1332 else
1333 {
1334 TRACE("A different CLSID requested, using CoCreateInstance.\n");
1335 hResult = CoCreateInstance(classID, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IUnknown, &newBand));
1336 if (FAILED_UNEXPECTEDLY(hResult))
1337 return hResult;
1338 }
1339 }
1340 else
1341 {
1342 CComPtr<IBandSite> pBandSite;
1343
1344 hResult = baseBarSite->QueryInterface(IID_PPV_ARG(IBandSite, &pBandSite));
1345 if (!SUCCEEDED(hResult))
1346 {
1347 ERR("Can't get IBandSite interface\n");
1348 return E_FAIL;
1349 }
1350 hResult = pBandSite->GetBandObject(dwBandID, IID_PPV_ARG(IUnknown, &newBand));
1351 if (!SUCCEEDED(hResult))
1352 {
1353 ERR("Can't find band object\n");
1354 return E_FAIL;
1355 }
1356
1357 // It's hackish, but we should be able to show the wanted band until we
1358 // find the proper way to do this (but it seems to work to add a new band)
1359 // Here we'll just re-add the existing band to the site, causing it to display.
1360 }
1361 V_VT(&vaIn) = VT_UNKNOWN;
1362 V_UNKNOWN(&vaIn) = newBand.p;
1363 hResult = IUnknown_Exec(baseBarSite, CGID_IDeskBand, 1, 1, &vaIn, NULL);
1364 if (FAILED_UNEXPECTEDLY(hResult))
1365 {
1366 return hResult;
1367 }
1368
1369 hResult = dockingWindow->ShowDW(TRUE);
1370 if (FAILED_UNEXPECTEDLY(hResult))
1371 return hResult;
1372
1373 if (vertical)
1374 {
1375 fCurrentVertBar = classID;
1377 }
1378
1379 return S_OK;
1380}
1381
1383{
1385 if (newDirectory == NULL)
1386 return E_OUTOFMEMORY;
1387 if (_ILIsDesktop(newDirectory))
1388 {
1389 ILFree(newDirectory);
1390 return E_INVALIDARG;
1391 }
1392 ILRemoveLastID(newDirectory);
1394 ILFree(newDirectory);
1395 if (FAILED_UNEXPECTEDLY(hResult))
1396 return hResult;
1397 return S_OK;
1398}
1399
1401{
1402 PROPSHEETHEADER* sheetInfo = reinterpret_cast<PROPSHEETHEADER*>(lParam);
1403 if (sheetInfo->nPages >= folderOptionsPageCountMax)
1404 return FALSE;
1405 sheetInfo->phpage[sheetInfo->nPages] = thePage;
1406 sheetInfo->nPages++;
1407 return TRUE;
1408}
1409
1411{
1412 CComPtr<IShellPropSheetExt> folderOptionsSheet;
1413 PROPSHEETHEADER m_PropSheet;
1415// CComPtr<IGlobalFolderSettings> globalSettings;
1416// SHELLSTATE2 shellState;
1417 HRESULT hResult;
1418
1419 memset(m_psp, 0, sizeof(m_psp));
1420 memset(&m_PropSheet, 0, sizeof(m_PropSheet));
1421
1422 // create sheet object
1423 hResult = CoCreateInstance(CLSID_ShellFldSetExt, NULL, CLSCTX_INPROC_SERVER,
1424 IID_PPV_ARG(IShellPropSheetExt, &folderOptionsSheet));
1425 if (FAILED_UNEXPECTEDLY(hResult))
1426 return E_FAIL;
1427
1428 // must set site in order for Apply to all Folders on Advanced page to be enabled
1429 hResult = IUnknown_SetSite(folderOptionsSheet, static_cast<IDispatch *>(this));
1430 m_PropSheet.phpage = m_psp;
1431
1432#if 0
1433 hResult = CoCreateInstance(CLSID_GlobalFolderSettings, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IGlobalFolderSettings, &globalSettings));
1434 if (FAILED_UNEXPECTEDLY(hResult))
1435 return E_FAIL;
1436 hResult = globalSettings->Get(&shellState, sizeof(shellState));
1437 if (FAILED_UNEXPECTEDLY(hResult))
1438 return E_FAIL;
1439#endif
1440
1441 // add pages
1442 hResult = folderOptionsSheet->AddPages(AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1443 if (FAILED_UNEXPECTEDLY(hResult))
1444 return E_FAIL;
1445
1447 {
1448 hResult = fCurrentShellView->AddPropertySheetPages(
1449 0, AddFolderOptionsPage, reinterpret_cast<LPARAM>(&m_PropSheet));
1450 if (FAILED_UNEXPECTEDLY(hResult))
1451 return E_FAIL;
1452 }
1453
1454 // show sheet
1455 CStringW strFolderOptions(MAKEINTRESOURCEW(IDS_FOLDER_OPTIONS));
1456 m_PropSheet.dwSize = sizeof(PROPSHEETHEADER);
1457 m_PropSheet.dwFlags = 0;
1458 m_PropSheet.hwndParent = m_hWnd;
1459 m_PropSheet.hInstance = _AtlBaseModule.GetResourceInstance();
1460 m_PropSheet.pszCaption = strFolderOptions;
1461 m_PropSheet.nStartPage = 0;
1462 PropertySheet(&m_PropSheet);
1463 return S_OK;
1464}
1465
1467{
1468 CShellBrowser *pThis = reinterpret_cast<CShellBrowser *>(hWnd);
1469 _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1470 LRESULT lResult;
1471 const _ATL_MSG *previousMessage;
1472 BOOL handled;
1473 WNDPROC saveWindowProc;
1474 HRESULT hResult;
1475
1476 hWnd = pThis->m_hWnd;
1477 previousMessage = pThis->m_pCurrentMsg;
1478 pThis->m_pCurrentMsg = &msg;
1479
1480 /* If the shell browser is initialized, let the menu band preprocess the messages */
1481 if (pThis->fCurrentDirectoryPIDL)
1482 {
1483 CComPtr<IMenuBand> menuBand;
1484 hResult = pThis->GetMenuBand(IID_PPV_ARG(IMenuBand, &menuBand));
1485 if (SUCCEEDED(hResult) && menuBand.p != NULL)
1486 {
1487 hResult = menuBand->TranslateMenuMessage(&msg, &lResult);
1488 if (hResult == S_OK)
1489 return lResult;
1490 uMsg = msg.message;
1491 wParam = msg.wParam;
1492 lParam = msg.lParam;
1493 }
1494 menuBand.Release();
1495 }
1496
1497 handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1498 ATLASSERT(pThis->m_pCurrentMsg == &msg);
1499 if (handled == FALSE)
1500 {
1501 if (uMsg == WM_NCDESTROY)
1502 {
1503 saveWindowProc = reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC));
1504 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1505 if (saveWindowProc == reinterpret_cast<WNDPROC>(::GetWindowLongPtr(hWnd, GWLP_WNDPROC)))
1507 pThis->m_dwState |= WINSTATE_DESTROYED;
1508 }
1509 else
1510 lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1511 }
1512 pThis->m_pCurrentMsg = previousMessage;
1513 if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1514 {
1515 pThis->m_dwState &= ~WINSTATE_DESTROYED;
1516 pThis->m_hWnd = NULL;
1517 pThis->OnFinalMessage(hWnd);
1518 }
1519 return lResult;
1520}
1521
1523{
1524 RECT clientRect;
1525 RECT statusRect;
1526 int x;
1527
1528 GetClientRect(&clientRect);
1529
1531 {
1532 ::GetWindowRect(fStatusBar, &statusRect);
1533 ::SetWindowPos(fStatusBar, NULL, clientRect.left, clientRect.bottom - (statusRect.bottom - statusRect.top),
1534 clientRect.right - clientRect.left,
1535 statusRect.bottom - statusRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1536 clientRect.bottom -= statusRect.bottom - statusRect.top;
1537 }
1538
1539 for (x = 0; x < 3; x++)
1540 {
1542 RECT borderSpace = fClientBars[x].borderSpace;
1543 if (hwnd == NULL && fClientBars[x].clientBar != NULL)
1544 {
1545 IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
1547 }
1548 if (hwnd != NULL)
1549 {
1550 RECT toolbarRect = clientRect;
1551 if (borderSpace.top != 0)
1552 {
1553 toolbarRect.bottom = toolbarRect.top + borderSpace.top;
1554 }
1555 else if (borderSpace.bottom != 0)
1556 {
1557 toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
1558 }
1559 else if (borderSpace.left != 0)
1560 {
1561 toolbarRect.right = toolbarRect.left + borderSpace.left;
1562 }
1563 else if (borderSpace.right != 0)
1564 {
1565 toolbarRect.left = toolbarRect.right - borderSpace.right;
1566 }
1567
1569 toolbarRect.left,
1570 toolbarRect.top,
1571 toolbarRect.right - toolbarRect.left,
1572 toolbarRect.bottom - toolbarRect.top,
1574
1575 if (borderSpace.top != 0)
1576 {
1577 clientRect.top = toolbarRect.bottom;
1578 }
1579 else if (borderSpace.bottom != 0)
1580 {
1581 clientRect.bottom = toolbarRect.top;
1582 }
1583 else if (borderSpace.left != 0)
1584 {
1585 clientRect.left = toolbarRect.right;
1586 }
1587 else if (borderSpace.right != 0)
1588 {
1589 clientRect.right = toolbarRect.left;
1590 }
1591 }
1592 }
1593 ::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
1594 clientRect.right - clientRect.left,
1595 clientRect.bottom - clientRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
1596}
1597
1598HRESULT CShellBrowser::FireEvent(DISPID dispIdMember, int argCount, VARIANT *arguments)
1599{
1600 DISPPARAMS params;
1603 HRESULT hResult;
1604
1605 params.rgvarg = arguments;
1606 params.rgdispidNamedArgs = NULL;
1607 params.cArgs = argCount;
1608 params.cNamedArgs = 0;
1609 IUnknown** pp = vec.begin();
1610 while (pp < vec.end())
1611 {
1612 if (*pp != NULL)
1613 {
1614 CComPtr<IDispatch> theDispatch;
1615
1616 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1617 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1618 }
1619 pp++;
1620 }
1621 pp = vec2.begin();
1622 while (pp < vec2.end())
1623 {
1624 if (*pp != NULL)
1625 {
1626 CComPtr<IDispatch> theDispatch;
1627
1628 hResult = (*pp)->QueryInterface(IID_PPV_ARG(IDispatch, &theDispatch));
1629 hResult = theDispatch->Invoke(dispIdMember, GUID_NULL, 0, DISPATCH_METHOD, &params, NULL, NULL, NULL);
1630 }
1631 pp++;
1632 }
1633 return S_OK;
1634}
1635
1637{
1638 // these two variants intentionally to do use CComVariant because it would double free/release
1639 // or does not need to dispose at all
1640 VARIANT varArg[2];
1641 VARIANT varArgs;
1642 CComBSTR tempString(newDirectory);
1643
1644 V_VT(&varArgs) = VT_BSTR;
1645 V_BSTR(&varArgs) = tempString.m_str;
1646
1647 V_VT(&varArg[0]) = VT_VARIANT | VT_BYREF;
1648 V_VARIANTREF(&varArg[0]) = &varArgs;
1649 V_VT(&varArg[1]) = VT_DISPATCH;
1650 V_DISPATCH(&varArg[1]) = (IDispatch *)this;
1651
1652 return FireEvent(DISPID_NAVIGATECOMPLETE2, 2, varArg);
1653}
1654
1656{
1657 VARIANT varArg[2];
1658
1659 V_VT(&varArg[0]) = VT_BOOL;
1660 V_BOOL(&varArg[0]) = newState ? VARIANT_TRUE : VARIANT_FALSE;
1661 V_VT(&varArg[1]) = VT_I4;
1662 V_I4(&varArg[1]) = commandID;
1663
1664 return FireEvent(DISPID_COMMANDSTATECHANGE, 2, varArg);
1665}
1666
1668{
1669 return FireCommandStateChange(false, -1);
1670}
1671
1673{
1674 CComPtr<ITravelLog> travelLog;
1675 CComPtr<ITravelEntry> unusedEntry;
1676 bool canGoBack;
1677 bool canGoForward;
1678 HRESULT hResult;
1679
1680 canGoBack = false;
1681 canGoForward = false;
1682 hResult = GetTravelLog(&travelLog);
1683 if (FAILED_UNEXPECTEDLY(hResult))
1684 return hResult;
1685 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_BACK, &unusedEntry);
1686 if (SUCCEEDED(hResult))
1687 {
1688 canGoBack = true;
1689 unusedEntry.Release();
1690 }
1691 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this), TLOG_FORE, &unusedEntry);
1692 if (SUCCEEDED(hResult))
1693 {
1694 canGoForward = true;
1695 unusedEntry.Release();
1696 }
1697 hResult = FireCommandStateChange(canGoBack, 2);
1698 hResult = FireCommandStateChange(canGoForward, 1);
1699 return S_OK;
1700}
1701
1703{
1704 bool canGoUp;
1705 HRESULT hResult;
1706
1707 canGoUp = true;
1709 canGoUp = false;
1710 hResult = FireCommandStateChange(canGoUp, 3);
1711 return S_OK;
1712}
1713
1715{
1716 CComPtr<ITravelLog> travelLog;
1717 CComPtr<ITravelEntry> unusedEntry;
1718 int position;
1719 MENUITEMINFO menuItemInfo;
1720 HRESULT hResult;
1721
1723
1724 position = GetMenuItemCount(theMenu);
1725 hResult = GetTravelLog(&travelLog);
1726 if (FAILED_UNEXPECTEDLY(hResult))
1727 return;
1728
1729 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1730 TLOG_BACK,
1731 &unusedEntry);
1732
1733 if (SUCCEEDED(hResult))
1734 {
1736 unusedEntry.Release();
1737 }
1738 else
1740
1741 hResult = travelLog->GetTravelEntry(static_cast<IDropTarget *>(this),
1742 TLOG_FORE,
1743 &unusedEntry);
1744
1745 if (SUCCEEDED(hResult))
1746 {
1748 unusedEntry.Release();
1749 }
1750 else
1752
1753 SHEnableMenuItem(theMenu,
1756
1757 hResult = travelLog->InsertMenuEntries(static_cast<IDropTarget *>(this), theMenu, position,
1759 if (SUCCEEDED(hResult))
1760 {
1761 menuItemInfo.cbSize = sizeof(menuItemInfo);
1762 menuItemInfo.fMask = MIIM_TYPE | MIIM_ID;
1763 menuItemInfo.fType = MF_SEPARATOR;
1764 menuItemInfo.wID = IDM_GOTO_TRAVEL_SEP;
1765 InsertMenuItem(theMenu, position, TRUE, &menuItemInfo);
1766 }
1767}
1768
1770{
1771 CComPtr<ITravelLog> travelLog;
1772 HMENU gotoMenu;
1773 OLECMD commandList[5];
1774 HMENU toolbarMenuBar;
1775 HMENU toolbarMenu;
1776 MENUITEMINFO menuItemInfo;
1777 HRESULT hResult;
1778
1779 gotoMenu = SHGetMenuFromID(theMenu, FCIDM_MENU_EXPLORE);
1780 if (gotoMenu != NULL)
1781 UpdateGotoMenu(gotoMenu);
1782
1783 commandList[0].cmdID = ITID_TOOLBARBANDSHOWN;
1784 commandList[1].cmdID = ITID_ADDRESSBANDSHOWN;
1785 commandList[2].cmdID = ITID_LINKSBANDSHOWN;
1786 commandList[3].cmdID = ITID_TOOLBARLOCKED;
1787 commandList[4].cmdID = ITID_CUSTOMIZEENABLED;
1788
1790 CGID_PrivCITCommands, 5, commandList, NULL);
1791 if (FAILED_UNEXPECTEDLY(hResult))
1793 else
1794 {
1795 menuItemInfo.cbSize = sizeof(menuItemInfo);
1796 menuItemInfo.fMask = MIIM_SUBMENU;
1797 GetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1798 DestroyMenu(menuItemInfo.hSubMenu);
1799
1800 toolbarMenuBar = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_CONTEXTMENU));
1801 toolbarMenu = GetSubMenu(toolbarMenuBar, 0);
1802 RemoveMenu(toolbarMenuBar, 0, MF_BYPOSITION);
1803 DestroyMenu(toolbarMenuBar);
1804
1805 // TODO: Implement
1806 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_ENABLED);
1807 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_ENABLED);
1808 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_ENABLED);
1809 SHEnableMenuItem(toolbarMenu, IDM_TOOLBARS_CUSTOMIZE, commandList[4].cmdf & OLECMDF_ENABLED);
1810
1811 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_STANDARDBUTTONS, commandList[0].cmdf & OLECMDF_LATCHED);
1812 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_ADDRESSBAR, commandList[1].cmdf & OLECMDF_LATCHED);
1813 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LINKSBAR, commandList[2].cmdf & OLECMDF_LATCHED);
1814 SHCheckMenuItem(toolbarMenu, IDM_TOOLBARS_LOCKTOOLBARS, commandList[3].cmdf & OLECMDF_LATCHED);
1815 if ((commandList[4].cmdf & OLECMDF_ENABLED) == 0)
1819
1820 menuItemInfo.cbSize = sizeof(menuItemInfo);
1821 menuItemInfo.fMask = MIIM_SUBMENU;
1822 menuItemInfo.hSubMenu = toolbarMenu;
1823 SetMenuItemInfo(theMenu, IDM_VIEW_TOOLBARS, FALSE, &menuItemInfo);
1824 }
1826}
1827
1829{
1830 HMENU hBandsMenu;
1831 UINT nbFound;
1832
1834 if (!hBandsMenu)
1835 {
1836 OutputDebugString(L"No menu !\n");
1837 return E_FAIL;
1838 }
1840 BuildExplorerBandCategory(hBandsMenu, CATID_InfoBand, 4, NULL);
1841 BuildExplorerBandCategory(hBandsMenu, CATID_CommBand, 20, &nbFound);
1842 if (!nbFound)
1843 {
1844 // Remove separator
1846 }
1847 // Remove media menu since XP does it (according to API Monitor)
1849 return S_OK;
1850}
1851
1853{
1854 HRESULT hr;
1855 CComPtr<IEnumGUID> pEnumGUID;
1856 WCHAR wszBandName[MAX_PATH];
1857 WCHAR wszBandGUID[MAX_PATH];
1858 WCHAR wRegKey[MAX_PATH];
1859 UINT cBands;
1860 DWORD dwRead;
1861 DWORD dwDataSize;
1862 GUID iter;
1863 MenuBandInfo mbi;
1864
1865 mbi.fVertical = IsEqualGUID(category, CATID_InfoBand);
1866 cBands = 0;
1867 hr = SHEnumClassesOfCategories(1, &category, 0, NULL, &pEnumGUID);
1869 {
1870 return hr;
1871 }
1872 do
1873 {
1874 pEnumGUID->Next(1, &iter, &dwRead);
1875 if (dwRead)
1876 {
1877 // Get the band name
1878 if (IsBuiltinBand(iter))
1879 continue;
1880 if (!StringFromGUID2(iter, wszBandGUID, MAX_PATH))
1881 continue;
1882 StringCchPrintfW(wRegKey, MAX_PATH, L"CLSID\\%s", wszBandGUID);
1883 dwDataSize = MAX_PATH;
1884 SHGetValue(HKEY_CLASSES_ROOT, wRegKey, NULL, NULL, wszBandName, &dwDataSize);
1885
1886 mbi.barGuid = iter;
1887 InsertMenu(hBandsMenu, dwPos + cBands, MF_BYPOSITION, IDM_EXPLORERBAND_BEGINCUSTOM + DSA_GetItemCount(menuDsa), wszBandName);
1888 DSA_AppendItem(menuDsa, &mbi);
1889 cBands++;
1890 }
1891 }
1892 while (dwRead > 0);
1893 if (nbFound)
1894 *nbFound = cBands;
1895 return S_OK;
1896}
1897
1899{
1900 if (IsEqualCLSID(bandID, CLSID_ExplorerBand))
1901 return TRUE;
1902 if (IsEqualCLSID(bandID, CLSID_SH_SearchBand) || IsEqualCLSID(bandID, CLSID_SearchBand))
1903 return TRUE;
1904 if (IsEqualCLSID(bandID, CLSID_IE_SearchBand) || IsEqualCLSID(bandID, CLSID_FileSearchBand))
1905 return TRUE;
1906 if (IsEqualCLSID(bandID, CLSID_SH_HistBand))
1907 return TRUE;
1908 if (IsEqualCLSID(bandID, CLSID_SH_FavBand))
1909 return TRUE;
1910 if (IsEqualCLSID(bandID, CLSID_ChannelsBand))
1911 return TRUE;
1912 return FALSE;
1913}
1914
1916{
1917 CComPtr<IObjectWithSite> objectWithSite;
1918 CComPtr<IContextMenu> contextMenu;
1919 CMINVOKECOMMANDINFO commandInfo;
1920 const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}";
1921 HRESULT hResult;
1922
1923 // TODO: Query shell if this command is enabled first
1924
1925 memset(&commandInfo, 0, sizeof(commandInfo));
1926 commandInfo.cbSize = sizeof(commandInfo);
1927 commandInfo.hwnd = m_hWnd;
1928 commandInfo.lpParameters = searchGUID;
1929 commandInfo.nShow = SW_SHOWNORMAL;
1930
1931 hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER,
1932 IID_PPV_ARG(IContextMenu, &contextMenu));
1933 if (FAILED_UNEXPECTEDLY(hResult))
1934 return 0;
1935 hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite));
1936 if (FAILED_UNEXPECTEDLY(hResult))
1937 return 0;
1938 hResult = objectWithSite->SetSite(dynamic_cast<IShellBrowser*>(this));
1939 if (FAILED_UNEXPECTEDLY(hResult))
1940 return 0;
1941 hResult = contextMenu->InvokeCommand(&commandInfo);
1942 hResult = objectWithSite->SetSite(NULL);
1943 return hResult;
1944}
1945
1947{
1948 CComPtr<IUnknown> int1Retry;
1949 CComPtr<IUnknown> int2Retry;
1950 HRESULT hResult;
1951
1952 if (int1 == int2)
1953 return true;
1954 if (int1 == NULL || int2 == NULL)
1955 return false;
1956 hResult = int1->QueryInterface(IID_PPV_ARG(IUnknown, &int1Retry));
1957 if (FAILED_UNEXPECTEDLY(hResult))
1958 return false;
1959 hResult = int2->QueryInterface(IID_PPV_ARG(IUnknown, &int2Retry));
1960 if (FAILED_UNEXPECTEDLY(hResult))
1961 return false;
1962 if (int1Retry == int2Retry)
1963 return true;
1964 return false;
1965}
1966
1968{
1969 static const INT excludeItems[] = { 1, 1, 1, IDC_STATUSBAR, 0, 0 };
1970
1971 RECT availableBounds;
1972
1973 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
1974 for (INT x = 0; x < 3; x++)
1975 {
1976 if (fClientBars[x].clientBar.p != NULL && !IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
1977 {
1978 availableBounds.top += fClientBars[x].borderSpace.top;
1979 availableBounds.left += fClientBars[x].borderSpace.left;
1980 availableBounds.bottom -= fClientBars[x].borderSpace.bottom;
1981 availableBounds.right -= fClientBars[x].borderSpace.right;
1982 }
1983 }
1984 *prcBorder = availableBounds;
1985 return S_OK;
1986}
1987
1989{
1990 return S_OK;
1991}
1992
1994{
1995 for (INT x = 0; x < 3; x++)
1996 {
1997 if (IUnknownIsEqual(fClientBars[x].clientBar, punkObj))
1998 {
1999 fClientBars[x].borderSpace = *pbw;
2000 // if this bar changed size, it cascades and forces all subsequent bars to resize
2002 return S_OK;
2003 }
2004 }
2005 return E_INVALIDARG;
2006}
2007
2009 ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText)
2010{
2011 CComPtr<IOleCommandTarget> commandTarget;
2012 HRESULT hResult;
2013
2014 if (prgCmds == NULL)
2015 return E_INVALIDARG;
2016 if (pguidCmdGroup == NULL)
2017 {
2018 if (fCurrentShellView.p != NULL)
2019 {
2020 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &commandTarget));
2021 if (SUCCEEDED(hResult) && commandTarget.p != NULL)
2022 return commandTarget->QueryStatus(NULL, 1, prgCmds, pCmdText);
2023 }
2024 while (cCmds != 0)
2025 {
2026 prgCmds->cmdf = 0;
2027 prgCmds++;
2028 cCmds--;
2029 }
2030 }
2031 else if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2032 {
2033 while (cCmds != 0)
2034 {
2035 switch (prgCmds->cmdID)
2036 {
2037 case 0x1c: // search
2039 if (IsEqualCLSID(CLSID_SH_SearchBand, fCurrentVertBar) ||
2040 IsEqualCLSID(CLSID_SearchBand, fCurrentVertBar) ||
2041 IsEqualCLSID(CLSID_IE_SearchBand, fCurrentVertBar) ||
2042 IsEqualCLSID(CLSID_FileSearchBand, fCurrentVertBar))
2043 {
2044 prgCmds->cmdf |= OLECMDF_LATCHED;
2045 }
2046 break;
2047 case 0x1d: // history
2049 if (IsEqualCLSID(CLSID_SH_HistBand, fCurrentVertBar))
2050 prgCmds->cmdf |= OLECMDF_LATCHED;
2051 break;
2052 case 0x1e: // favorites
2054 if (IsEqualCLSID(CLSID_SH_FavBand, fCurrentVertBar))
2055 prgCmds->cmdf |= OLECMDF_LATCHED;
2056 break;
2057 case SBCMDID_EXPLORERBARFOLDERS: // folders
2059 if (IsEqualCLSID(CLSID_ExplorerBand, fCurrentVertBar))
2060 prgCmds->cmdf |= OLECMDF_LATCHED;
2061 break;
2062 default:
2063 prgCmds->cmdf = 0;
2064 break;
2065 }
2066 prgCmds++;
2067 cCmds--;
2068 }
2069 }
2070 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2071 {
2072 while (cCmds != 0)
2073 {
2074 switch (prgCmds->cmdID)
2075 {
2077 prgCmds->cmdf = OLECMDF_SUPPORTED;
2078 if (fCurrentDirectoryPIDL->mkid.cb != 0)
2079 prgCmds->cmdf |= OLECMDF_ENABLED;
2080 break;
2081 }
2082 prgCmds++;
2083 cCmds--;
2084 }
2085 }
2086 return S_OK;
2087}
2088
2090 DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
2091{
2092 HRESULT hResult;
2093
2094 if (!pguidCmdGroup)
2095 {
2096 TRACE("Unhandled null CGID %d %d %p %p\n", nCmdID, nCmdexecopt, pvaIn, pvaOut);
2097 return E_NOTIMPL;
2098 }
2099 if (IsEqualIID(*pguidCmdGroup, CGID_Explorer))
2100 {
2101 switch (nCmdID)
2102 {
2103 case 0x1c: //Toggle Search
2104 case 0x1d: //Toggle History
2105 case 0x1e: //Toggle Favorites
2106 case SBCMDID_EXPLORERBARFOLDERS: //Toggle Folders
2107 const GUID* pclsid;
2108 if (nCmdID == 0x1c) pclsid = &CLSID_FileSearchBand;
2109 else if (nCmdID == 0x1d) pclsid = &CLSID_SH_HistBand;
2110 else if (nCmdID == 0x1e) pclsid = &CLSID_SH_FavBand;
2111 else pclsid = &CLSID_ExplorerBand;
2112
2113 if (IsEqualCLSID(*pclsid, fCurrentVertBar))
2114 {
2115 hResult = IUnknown_ShowDW(fClientBars[BIVerticalBaseBar].clientBar.p, FALSE);
2118 }
2119 else
2120 {
2121 hResult = ShowBand(*pclsid, true);
2122 }
2123 return S_OK;
2124 case 0x22:
2125 //Sent when a band closes
2126 if (V_VT(pvaIn) != VT_UNKNOWN)
2127 return E_INVALIDARG;
2128
2129 if (IUnknownIsEqual(V_UNKNOWN(pvaIn), fClientBars[BIVerticalBaseBar].clientBar.p))
2130 {
2133 }
2134 return S_OK;
2135 case 0x27:
2136 if (nCmdexecopt == 1)
2137 {
2138 // pvaIn is a VT_UNKNOWN with a band that is being hidden
2139 }
2140 else
2141 {
2142 // update zones part of the status bar
2143 }
2144 return S_OK;
2145 case 0x35: // don't do this, and the internet toolbar doesn't create a menu band
2146 V_VT(pvaOut) = VT_INT_PTR;
2147 V_INTREF(pvaOut) = reinterpret_cast<INT *>(
2148 LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU)));
2149 return S_OK;
2150 case 0x38:
2151 // indicate if this cabinet was opened as a browser
2152 return S_FALSE;
2153 default:
2154 return E_NOTIMPL;
2155 }
2156 }
2157 else if (IsEqualIID(*pguidCmdGroup, CGID_InternetButtons))
2158 {
2159 switch (nCmdID)
2160 {
2161 case 0x23:
2162 // placeholder
2163 return S_OK;
2164 }
2165 }
2166 else if (IsEqualIID(*pguidCmdGroup, CGID_Theater))
2167 {
2168 switch (nCmdID)
2169 {
2170 case 6:
2171 // what is theater mode and why do we receive this?
2172 return E_NOTIMPL;
2173 }
2174 }
2175 else if (IsEqualIID(*pguidCmdGroup, CGID_MenuBand))
2176 {
2177 switch (nCmdID)
2178 {
2179 case 14:
2180 // initialize favorites menu
2181 return S_OK;
2182 }
2183 }
2184 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellDocView))
2185 {
2186 switch (nCmdID)
2187 {
2188 case 0x12:
2189 // refresh on toolbar clicked
2190 return S_OK;
2191 case 0x26:
2192 // called for unknown bands ?
2193 return S_OK;
2194 case 0x4d:
2195 // tell the view if it should hide the task pane or not
2196 return (fClientBars[BIVerticalBaseBar].clientBar.p == NULL) ? S_FALSE : S_OK;
2197 }
2198 }
2199 else if (IsEqualIID(*pguidCmdGroup, CGID_ShellBrowser))
2200 {
2201 switch (nCmdID)
2202 {
2203 case 40994:
2204 return NavigateToParent();
2207 break;
2208 }
2209 }
2210 else if (IsEqualIID(*pguidCmdGroup, CGID_IExplorerToolbar))
2211 {
2212 switch (nCmdID)
2213 {
2214 case 0x7063:
2215 return DoFolderOptions();
2216 }
2217 }
2218 else if (IsEqualIID(*pguidCmdGroup, CGID_DefView))
2219 {
2220 switch (nCmdID)
2221 {
2225 break;
2226 }
2227 }
2228 else
2229 {
2230 return E_NOTIMPL;
2231 }
2232 return E_NOTIMPL;
2233}
2234
2236{
2237 if (lphwnd == NULL)
2238 return E_POINTER;
2239 *lphwnd = m_hWnd;
2240 return S_OK;
2241}
2242
2244{
2245 return E_NOTIMPL;
2246}
2247
2248HRESULT STDMETHODCALLTYPE CShellBrowser::InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
2249{
2250 HMENU mainMenu = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2251
2252 Shell_MergeMenus(hmenuShared, mainMenu, 0, 0, FCIDM_BROWSERLAST, MM_SUBMENUSHAVEIDS);
2253
2254 int GCCU(itemCount3) = GetMenuItemCount(hmenuShared);
2255 Unused(itemCount3);
2256
2257 DestroyMenu(mainMenu);
2258
2259 lpMenuWidths->width[0] = 2;
2260 lpMenuWidths->width[2] = 3;
2261 lpMenuWidths->width[4] = 1;
2262 return S_OK;
2263}
2264
2265HRESULT STDMETHODCALLTYPE CShellBrowser::SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject)
2266{
2267 CComPtr<IShellMenu> shellMenu;
2268 HRESULT hResult;
2269
2270 if (hmenuShared && IsMenu(hmenuShared) == FALSE)
2271 return E_FAIL;
2272 hResult = GetMenuBand(IID_PPV_ARG(IShellMenu, &shellMenu));
2273 if (FAILED_UNEXPECTEDLY(hResult))
2274 return hResult;
2275
2276 if (!hmenuShared)
2277 {
2278 hmenuShared = LoadMenu(_AtlBaseModule.GetResourceInstance(), MAKEINTRESOURCE(IDM_CABINET_MAINMENU));
2279 }
2280 // FIXME: Figure out the proper way to do this.
2281 HMENU hMenuFavs = GetSubMenu(hmenuShared, 3);
2282 if (hMenuFavs)
2283 {
2285 }
2286
2287 hResult = shellMenu->SetMenu(hmenuShared, m_hWnd, SMSET_DONTOWN);
2288 if (FAILED_UNEXPECTEDLY(hResult))
2289 return hResult;
2290 fCurrentMenuBar = hmenuShared;
2292 return S_OK;
2293}
2294
2296{
2297 if (hmenuShared == fCurrentMenuBar)
2298 {
2299 //DestroyMenu(fCurrentMenuBar);
2301 }
2302 return S_OK;
2303}
2304
2306{
2307 //
2308 if (pszStatusText)
2309 {
2310 ::SetWindowText(fStatusBar, pszStatusText);
2311 }
2312 else
2313 {
2314
2315 }
2316 return S_OK;
2317}
2318
2320{
2321 return E_NOTIMPL;
2322}
2323
2325{
2327 return S_FALSE;
2328 return S_OK;
2329}
2330
2332{
2334 // FIXME: Should not automatically show the Explorer band
2335 if ((wFlags & SBSP_EXPLOREMODE) && !(wFlags & SBSP_NEWBROWSER))
2336 ShowBand(CLSID_ExplorerBand, true);
2337
2338 CComHeapPtr<ITEMIDLIST> pidlResolved;
2339 if (wFlags & (SBSP_RELATIVE | SBSP_PARENT))
2340 {
2341 HRESULT hr = CreateRelativeBrowsePIDL(pidl, wFlags, &pidlResolved);
2342 if (FAILED(hr))
2343 return hr;
2344 pidl = pidlResolved;
2345 }
2346
2347 if (wFlags & SBSP_NEWBROWSER)
2348 return OpenNewBrowserWindow(pidl, wFlags);
2349
2350 switch (wFlags & (SBSP_ABSOLUTE | SBSP_RELATIVE | SBSP_PARENT | SBSP_NAVIGATEBACK | SBSP_NAVIGATEFORWARD))
2351 {
2352 case SBSP_PARENT:
2353 return NavigateToParent();
2354 case SBSP_NAVIGATEBACK:
2355 return GoBack();
2356 case SBSP_NAVIGATEFORWARD:
2357 return GoForward();
2358 }
2359
2360 // TODO: SBSP_WRITENOHISTORY? SBSP_CREATENOHISTORY?
2362 if (fTravelLog)
2364 if (wFlags & SBSP_ACTIVATE_NOFOCUS)
2366 return BrowseToPIDL(pidl, flags);
2367}
2368
2370{
2371 return E_NOTIMPL;
2372}
2373
2375{
2376 if (lphwnd == NULL)
2377 return E_POINTER;
2378 *lphwnd = NULL;
2379 switch (id)
2380 {
2381 case FCW_TOOLBAR:
2382 *lphwnd = fToolbarProxy.m_hWnd;
2383 return S_OK;
2384 case FCW_STATUS:
2385 *lphwnd = fStatusBar;
2386 return S_OK;
2387 case FCW_TREE:
2388 {
2389 BOOL shown;
2390 if (SUCCEEDED(IsControlWindowShown(id, &shown)) && shown)
2391 return IUnknown_GetWindow(fClientBars[BIVerticalBaseBar].clientBar.p, lphwnd);
2392 return S_FALSE;
2393 }
2394 case FCW_PROGRESS:
2395 // is this a progress dialog?
2396 return S_OK;
2397 }
2398 return S_OK;
2399}
2400
2403{
2404 LPARAM result;
2405
2406 if (pret != NULL)
2407 *pret = 0;
2408 switch (id)
2409 {
2410 case FCW_TOOLBAR:
2412 if (pret != NULL)
2413 *pret = result;
2414 break;
2415 case FCW_STATUS:
2417 if (pret != NULL)
2418 *pret = result;
2419 break;
2420 }
2421 return S_OK;
2422}
2423
2425{
2426 if (ppshv == NULL)
2427 return E_POINTER;
2428 *ppshv = fCurrentShellView;
2429 if (fCurrentShellView.p != NULL)
2430 {
2432 return S_OK;
2433 }
2434 return E_FAIL;
2435}
2436
2438{
2439 return E_NOTIMPL;
2440}
2441
2443{
2444 return E_NOTIMPL;
2445}
2446
2448 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2449{
2450 return E_NOTIMPL;
2451}
2452
2454{
2455 return E_NOTIMPL;
2456}
2457
2459{
2460 return E_NOTIMPL;
2461}
2462
2464 IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
2465{
2466 return E_NOTIMPL;
2467}
2468
2470{
2471 // view does a query for SID_STopLevelBrowser, IID_IShellBrowserService
2472 // the returned interface has a method GetPropertyBag on it
2473 if (IsEqualIID(guidService, SID_STopLevelBrowser))
2474 return this->QueryInterface(riid, ppvObject);
2475 if (IsEqualIID(guidService, SID_SShellBrowser))
2476 return this->QueryInterface(riid, ppvObject);
2477 if (IsEqualIID(guidService, SID_ITargetFrame2))
2478 return this->QueryInterface(riid, ppvObject);
2479 if (IsEqualIID(guidService, SID_IWebBrowserApp)) // without this, the internet toolbar won't reflect notifications
2480 return this->QueryInterface(riid, ppvObject);
2481 if (IsEqualIID(guidService, SID_SProxyBrowser))
2482 return this->QueryInterface(riid, ppvObject);
2483 if (IsEqualIID(guidService, SID_IExplorerToolbar) && fClientBars[BIInternetToolbar].clientBar.p)
2484 return fClientBars[BIInternetToolbar].clientBar->QueryInterface(riid, ppvObject);
2485 if (IsEqualIID(riid, IID_IShellBrowser))
2486 return this->QueryInterface(riid, ppvObject);
2487 return E_NOINTERFACE;
2488}
2489
2491{
2494}
2495
2497{
2498 if (ppvObject == NULL)
2499 return E_POINTER;
2500
2501 *ppvObject = NULL;
2502
2503 LPITEMIDLIST pidl;
2504 HRESULT hr = GetPidl(&pidl);
2506 return E_FAIL;
2507
2508 // FIXME: pidl for Internet etc.
2509
2510 if (_ILIsNetworkPlace(pidl))
2511 flags |= SHGVSPB_ROAM;
2512
2513 hr = SHGetViewStatePropertyBag(pidl, L"Shell", flags, riid, ppvObject);
2514
2515 ILFree(pidl);
2516 return hr;
2517}
2518
2520{
2521 return E_NOTIMPL;
2522}
2523
2525{
2526 return E_NOTIMPL;
2527}
2528
2530 UINT cNames, LCID lcid, DISPID *rgDispId)
2531{
2532 return E_NOTIMPL;
2533}
2534
2536 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
2537{
2538 return E_NOTIMPL;
2539}
2540
2542{
2543 return E_NOTIMPL;
2544}
2545
2547{
2548 return E_NOTIMPL;
2549}
2550
2552{
2553 return E_NOTIMPL;
2554}
2555
2557{
2558 return E_NOTIMPL;
2559}
2560
2562{
2563 HRESULT hResult;
2564
2565 // called by toolbar when displaying tooltips
2566 if (pptl == NULL)
2567 return E_FAIL;
2568
2569 *pptl = NULL;
2570 if (fTravelLog.p == NULL)
2571 {
2573 if (FAILED_UNEXPECTEDLY(hResult))
2574 return hResult;
2575 }
2576 *pptl = fTravelLog.p;
2577 fTravelLog.p->AddRef();
2578 return S_OK;
2579}
2580
2582{
2583 BOOL shown;
2584 if (FAILED(IsControlWindowShown(id, &shown)))
2585 return E_NOTIMPL;
2586 else if (!shown == !fShow) // Negated for true boolean comparison
2587 return S_OK;
2588 else switch (id)
2589 {
2590 case FCW_STATUS:
2591 OnToggleStatusBarVisible(0, 0, NULL, shown);
2592 return S_OK;
2593 case FCW_TREE:
2594 return Exec(&CGID_Explorer, SBCMDID_EXPLORERBARFOLDERS, 0, NULL, NULL);
2595 case FCW_ADDRESSBAR:
2597 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
2598 }
2599 return E_NOTIMPL;
2600}
2601
2603{
2604 HRESULT hr = S_OK;
2605 BOOL shown = FALSE;
2606 switch (id)
2607 {
2608 case FCW_STATUS:
2610 break;
2611 case FCW_TREE:
2612 {
2614 hr = QueryStatus(&CGID_Explorer, 1, &cmd, NULL);
2615 shown = cmd.cmdf & OLECMDF_LATCHED;
2616 break;
2617 }
2618 case FCW_ADDRESSBAR:
2620 shown = hr == S_OK;
2621 break;
2622 default:
2623 hr = E_NOTIMPL;
2624 }
2625 if (pfShown)
2626 {
2627 *pfShown = shown;
2628 return hr;
2629 }
2630 return SUCCEEDED(hr) ? (shown ? S_OK : S_FALSE) : hr;
2631}
2632
2634{
2635 OLECMD cmd = { ITId };
2637 CGID_PrivCITCommands, 1, &cmd, NULL);
2638 return SUCCEEDED(hr) ? (cmd.cmdf & OLECMDF_LATCHED) ? S_OK : S_FALSE : hr;
2639}
2640
2642{
2643 return E_NOTIMPL;
2644}
2645
2647{
2648 return E_NOTIMPL;
2649}
2650
2652{
2653 return E_NOTIMPL;
2654}
2655
2657{
2658 return _NavigateToPidl(pidl, grfHLNF, 0);
2659}
2660
2662{
2663 return E_NOTIMPL;
2664}
2665
2667{
2668 return E_NOTIMPL;
2669}
2670
2672{
2673 return E_NOTIMPL;
2674}
2675
2677{
2678 return E_NOTIMPL;
2679}
2680
2682{
2683 return E_NOTIMPL;
2684}
2685
2687{
2688 m_BrowserSvcFlags = (m_BrowserSvcFlags & ~dwFlagMask) | (dwFlags & dwFlagMask);
2689 return S_OK;
2690}
2691
2693{
2694 *pdwFlags = m_BrowserSvcFlags;
2695 return S_OK;
2696}
2697
2699{
2700 return E_NOTIMPL;
2701}
2702
2704{
2705 // called by explorer bar to get current pidl
2706 return ppidl ? SHILClone(fCurrentDirectoryPIDL, ppidl) : E_POINTER;
2707}
2708
2710{
2711 return E_NOTIMPL;
2712}
2713
2715{
2716 return -1;
2717}
2718
2720{
2721 return E_NOTIMPL;
2722}
2723
2725{
2726 if (ppole == NULL || pstm == NULL || ppbc == NULL)
2727 return E_INVALIDARG;
2728 *ppole = fHistoryObject;
2729 if (fHistoryObject != NULL)
2731 *pstm = fHistoryStream;
2732 if (fHistoryStream != NULL)
2734 *ppbc = fHistoryBindContext;
2740 if (*ppole == NULL)
2741 return E_FAIL;
2742 return S_OK;
2743}
2744
2746{
2747 return E_NOTIMPL;
2748}
2749
2751{
2752 return E_NOTIMPL;
2753}
2754
2756{
2757 return E_NOTIMPL;
2758}
2759
2761 IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
2762{
2763 return E_NOTIMPL;
2764}
2765
2767{
2768 return E_NOTIMPL;
2769}
2770
2772{
2773 return E_NOTIMPL;
2774}
2775
2777{
2778 return E_NOTIMPL;
2779}
2780
2782{
2783 HRESULT hr = E_FAIL;
2785 {
2788 }
2789 return hr;
2790}
2791
2793{
2794 return E_NOTIMPL;
2795}
2796
2798{
2799 return E_NOTIMPL;
2800}
2801
2803{
2805 return S_OK;
2806}
2807
2809{
2810 return 0;
2811}
2812
2814{
2815 return E_NOTIMPL;
2816}
2817
2819{
2820 return 0;
2821}
2822
2824{
2825 return E_NOTIMPL;
2826}
2827
2829{
2830 return E_NOTIMPL;
2831}
2832
2834{
2835 return E_NOTIMPL;
2836}
2837
2839{
2840 return E_NOTIMPL;
2841}
2842
2844 IShellView *psvNew, IShellView *psvOld, LPRECT prcView, HWND *phwnd)
2845{
2846 return E_NOTIMPL;
2847}
2848
2850{
2851 return E_NOTIMPL;
2852}
2853
2855{
2856 return E_NOTIMPL;
2857}
2858
2860{
2861 return E_NOTIMPL;
2862}
2863
2865{
2866 return NULL;
2867}
2868
2870{
2871 return E_NOTIMPL;
2872}
2873
2875{
2876 m_BrowserSvcFlags |= BSF_TOPBROWSER;
2877 return S_OK;
2878}
2879
2881{
2882 return E_NOTIMPL;
2883}
2884
2886{
2887 return E_NOTIMPL;
2888}
2889
2891{
2892 return E_NOTIMPL;
2893}
2894
2896{
2897 return E_NOTIMPL;
2898}
2899
2901{
2902 return E_NOTIMPL;
2903}
2904
2906{
2907 return E_NOTIMPL;
2908}
2909
2911{
2912 return E_NOTIMPL;
2913}
2914
2916{
2917 return E_NOTIMPL;
2918}
2919
2921{
2922 return E_NOTIMPL;
2923}
2924
2926{
2927 return E_NOTIMPL;
2928}
2929
2931{
2932 return E_NOTIMPL;
2933}
2934
2936{
2937 return E_NOTIMPL;
2938}
2939
2941{
2942 const UINT navflags = HLNF_NAVIGATINGBACK | HLNF_NAVIGATINGFORWARD;
2943 if ((grfHLNF & navflags) && grfHLNF != ~0ul)
2944 {
2945 UINT SbspFlags = (grfHLNF & HLNF_NAVIGATINGBACK) ? SBSP_NAVIGATEBACK : SBSP_NAVIGATEFORWARD;
2946 if (grfHLNF & SHHLNF_WRITENOHISTORY)
2947 SbspFlags |= SBSP_WRITENOHISTORY;
2948 if (grfHLNF & SHHLNF_NOAUTOSELECT)
2949 SbspFlags |= SBSP_NOAUTOSELECT;
2950 return BrowseObject(pidl, SbspFlags);
2951 }
2952 return E_NOTIMPL;
2953}
2954
2956{
2957 return E_NOTIMPL;
2958}
2959
2961{
2962 return E_NOTIMPL;
2963}
2964
2966 const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANTARG *pvarargIn, VARIANTARG *pvarargOut)
2967{
2968 return E_NOTIMPL;
2969}
2970
2972 HWND hwndBar, BOOL fBroadcast, UINT uMsg, WPARAM wParam, LPARAM lParam)
2973{
2974 return E_NOTIMPL;
2975}
2976
2978{
2979 return E_NOTIMPL;
2980}
2981
2983{
2984 return E_NOTIMPL;
2985}
2986
2988{
2989 return E_NOTIMPL;
2990}
2991
2993{
2994 return 0;
2995}
2996
2998{
2999 return E_NOTIMPL;
3000}
3001
3003{
3004 return E_NOTIMPL;
3005}
3006
3008{
3009 return E_NOTIMPL;
3010}
3011
3013{
3014 return E_NOTIMPL;
3015}
3016
3018{
3019 return E_NOTIMPL;
3020}
3021
3023{
3024 return E_NOTIMPL;
3025}
3026
3028{
3029 return E_NOTIMPL;
3030}
3031
3033{
3034 return NULL;
3035}
3036
3038{
3039 return 0;
3040}
3041
3043{
3044 return E_NOTIMPL;
3045}
3046
3048{
3049 return 0;
3050}
3051
3053{
3054 return NULL;
3055}
3056
3058{
3059 return E_NOTIMPL;
3060}
3061
3063{
3064 return E_NOTIMPL;
3065}
3066
3068{
3069 return E_NOTIMPL;
3070}
3071
3073 LPMSG lpMsg, UINT itbNext, int citb, LPTOOLBARITEM *pptbi, HWND *phwnd)
3074{
3075 return E_NOTIMPL;
3076}
3077
3079{
3080 return E_NOTIMPL;
3081}
3082
3084{
3085 return 0;
3086}
3087
3089{
3090 return E_NOTIMPL;
3091}
3092
3094{
3095 for (int i = 0; i < 3; i++)
3096 {
3097 if (IUnknown_TranslateAcceleratorIO(fClientBars[i].clientBar, pmsg) == S_OK)
3098 return S_OK;
3099 }
3100
3101 if (!fCurrentShellView)
3102 return S_FALSE;
3103
3104 return fCurrentShellView->TranslateAcceleratorW(pmsg);
3105}
3106
3108{
3109 return E_NOTIMPL;
3110}
3111
3113{
3114 return E_NOTIMPL;
3115}
3116
3118{
3119 CComPtr<ITravelLog> travelLog;
3120 HRESULT hResult = GetTravelLog(&travelLog);
3121 if (FAILED_UNEXPECTEDLY(hResult))
3122 return hResult;
3123 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_BACK);
3124}
3125
3127{
3128 CComPtr<ITravelLog> travelLog;
3129 HRESULT hResult = GetTravelLog(&travelLog);
3130 if (FAILED_UNEXPECTEDLY(hResult))
3131 return hResult;
3132 return travelLog->Travel(static_cast<IDropTarget *>(this), TLOG_FORE);
3133}
3134
3136{
3137 return E_NOTIMPL;
3138}
3139
3141{
3142 return E_NOTIMPL;
3143}
3144
3146 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3147{
3149 HRESULT hResult;
3150 CComPtr<IShellFolder> pDesktop;
3151
3152 hResult = SHGetDesktopFolder(&pDesktop);
3153 if (FAILED_UNEXPECTEDLY(hResult))
3154 return hResult;
3155 hResult = pDesktop->ParseDisplayName(NULL, NULL, URL, NULL, &pidl, NULL);
3156 if (FAILED_UNEXPECTEDLY(hResult))
3157 return hResult;
3158 return BrowseObject(pidl, 1);
3159}
3160
3162{
3163 VARIANT level;
3164
3165 V_VT(&level) = VT_I4;
3166 V_I4(&level) = 4;
3167 return Refresh2(&level);
3168}
3169
3171{
3172 CComPtr<IOleCommandTarget> oleCommandTarget;
3173 HRESULT hResult;
3174
3175 hResult = fCurrentShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
3176 if (FAILED_UNEXPECTEDLY(hResult))
3177 return hResult;
3178 return oleCommandTarget->Exec(NULL, 22, 1, Level, NULL);
3179}
3180
3182{
3183 return E_NOTIMPL;
3184}
3185
3187{
3188 return E_NOTIMPL;
3189}
3190
3192{
3193 return E_NOTIMPL;
3194}
3195
3197{
3198 return E_NOTIMPL;
3199}
3200
3202{
3203 return E_NOTIMPL;
3204}
3205
3207{
3208 return E_NOTIMPL;
3209}
3210
3212{
3213 return E_NOTIMPL;
3214}
3215#ifdef __exdisp_h__
3216#define long LONG
3217#endif
3219{
3220 return E_NOTIMPL;
3221}
3222
3224{
3225 return E_NOTIMPL;
3226}
3227
3229{
3230 return E_NOTIMPL;
3231}
3232
3234{
3235 return E_NOTIMPL;
3236}
3237
3239{
3240 return E_NOTIMPL;
3241}
3242
3244{
3245 return E_NOTIMPL;
3246}
3247
3249{
3250 return E_NOTIMPL;
3251}
3252
3254{
3255 return E_NOTIMPL;
3256}
3257#ifdef __exdisp_h__
3258#undef long
3259#endif
3261{
3262 return E_NOTIMPL;
3263}
3264
3266{
3267 return E_NOTIMPL;
3268}
3269
3271{
3272 return E_NOTIMPL;
3273}
3274
3276{
3277 return E_NOTIMPL;
3278}
3279
3281{
3282 return E_NOTIMPL;
3283}
3284
3286{
3287 return E_NOTIMPL;
3288}
3289
3291{
3292 return E_NOTIMPL;
3293}
3294
3296{
3297 return E_NOTIMPL;
3298}
3299
3301{
3302 return E_NOTIMPL;
3303}
3304
3306{
3307 return E_NOTIMPL;
3308}
3309
3311{
3312 return E_NOTIMPL;
3313}
3314
3316{
3317 return E_NOTIMPL;
3318}
3319
3321{
3322 return E_NOTIMPL;
3323}
3324
3326{
3327 return E_NOTIMPL;
3328}
3329
3331{
3332 return E_NOTIMPL;
3333}
3334
3336{
3337 return E_NOTIMPL;
3338}
3339
3341{
3342 return E_NOTIMPL;
3343}
3344
3346{
3347 return E_NOTIMPL;
3348}
3349
3351{
3352 return E_NOTIMPL;
3353}
3354
3356{
3357 return E_NOTIMPL;
3358}
3359
3361{
3362 return E_NOTIMPL;
3363}
3364
3366{
3367 return E_NOTIMPL;
3368}
3369
3371{
3372 return E_NOTIMPL;
3373}
3374
3376 VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
3377{
3378 LPITEMIDLIST pidl = NULL;
3379 HRESULT hResult;
3380 // called from drive combo box to navigate to a directory
3381 // Also called by search band to display shell results folder view
3382
3383 if (V_VT(URL) == VT_BSTR)
3384 {
3385 return this->Navigate(V_BSTR(URL), Flags, TargetFrameName, PostData, Headers);
3386 }
3387 if (V_VT(URL) == (VT_ARRAY | VT_UI1))
3388 {
3389 if (V_ARRAY(URL)->cDims != 1 || V_ARRAY(URL)->cbElements != 1)
3390 return E_INVALIDARG;
3391
3392 pidl = static_cast<LPITEMIDLIST>(V_ARRAY(URL)->pvData);
3393 }
3395 if (FAILED_UNEXPECTEDLY(hResult))
3396 return hResult;
3397 return S_OK;
3398}
3399
3401{
3402 return E_NOTIMPL;
3403}
3404
3406 VARIANT *pvaIn, VARIANT *pvaOut)
3407{
3408 return E_NOTIMPL;
3409}
3410
3412{
3413 CLSID classID;
3414 bool vertical;
3415
3416 // called to show search bar
3417 if (V_VT(pvaClsid) != VT_BSTR)
3418 return E_INVALIDARG;
3419 CLSIDFromString(V_BSTR(pvaClsid), &classID);
3420 // TODO: properly compute the value of vertical
3421 vertical = true;
3422 return ShowBand(classID, vertical);
3423}
3424
3426{
3427 return E_NOTIMPL;
3428}
3429
3431{
3432 return E_NOTIMPL;
3433}
3434
3436{
3437 return E_NOTIMPL;
3438}
3439
3441{
3442 return E_NOTIMPL;
3443}
3444
3446{
3447 return E_NOTIMPL;
3448}
3449
3451{
3452 return E_NOTIMPL;
3453}
3454
3456{
3457 return E_NOTIMPL;
3458}
3459
3461{
3462 return E_NOTIMPL;
3463}
3464
3466{
3467 return E_NOTIMPL;
3468}
3469
3471{
3472 return E_NOTIMPL;
3473}
3474
3476{
3477 return E_NOTIMPL;
3478}
3479
3481{
3482 return E_NOTIMPL;
3483}
3484
3486{
3487 return E_NOTIMPL;
3488}
3489
3491{
3492 return E_NOTIMPL;
3493}
3494
3496{
3497 return E_NOTIMPL;
3498}
3499
3501{
3502 return E_NOTIMPL;
3503}
3504
3506{
3507 if (pWinData == NULL)
3508 return E_POINTER;
3509
3510 pWinData->dwWindowID = -1;
3511 pWinData->uiCP = 0;
3512 pWinData->pidl = ILClone(fCurrentDirectoryPIDL);
3513 pWinData->lpszUrl = NULL;
3514 pWinData->lpszUrlLocation = NULL;
3515 pWinData->lpszTitle = NULL;
3516 return S_OK;
3517}
3518
3520{
3521 return E_NOTIMPL;
3522}
3523
3525{
3526 return E_NOTIMPL;
3527}
3528
3530{
3531 CComPtr<IPersistHistory> viewPersistHistory;
3532 CComPtr<IOleObject> viewHistoryObject;
3533 persistState oldState;
3534 ULONG numRead;
3535 LPITEMIDLIST pidl;
3536 HRESULT hResult;
3537
3538 hResult = pStream->Read(&oldState, sizeof(oldState), &numRead);
3539 if (FAILED_UNEXPECTEDLY(hResult))
3540 return hResult;
3541 if (numRead != sizeof(oldState) || oldState.dwSize != sizeof(oldState))
3542 return E_FAIL;
3543 if (oldState.browseType != 2)
3544 return E_FAIL;
3545 pidl = static_cast<LPITEMIDLIST>(CoTaskMemAlloc(oldState.pidlSize));
3546 if (pidl == NULL)
3547 return E_OUTOFMEMORY;
3548 hResult = pStream->Read(pidl, oldState.pidlSize, &numRead);
3549 if (FAILED_UNEXPECTEDLY(hResult))
3550 {
3551 ILFree(pidl);
3552 return hResult;
3553 }
3554 if (numRead != oldState.pidlSize)
3555 {
3556 ILFree(pidl);
3557 return E_FAIL;
3558 }
3559 hResult = CoCreateInstance(oldState.persistClass, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_SERVER,
3560 IID_PPV_ARG(IOleObject, &viewHistoryObject));
3561 fHistoryObject = viewHistoryObject;
3562 fHistoryStream = pStream;
3563 fHistoryBindContext = pbc;
3564 hResult = BrowseToPIDL(pidl, BTP_DONT_UPDATE_HISTORY);
3568 ILFree(pidl);
3569 if (FAILED_UNEXPECTEDLY(hResult))
3570 return hResult;
3571 return S_OK;
3572}
3573
3575{
3576 CComPtr<IPersistHistory> viewPersistHistory;
3577 persistState newState;
3578 HRESULT hResult;
3579
3580 hResult = fCurrentShellView->GetItemObject(
3581 SVGIO_BACKGROUND, IID_PPV_ARG(IPersistHistory, &viewPersistHistory));
3582 memset(&newState, 0, sizeof(newState));
3583 newState.dwSize = sizeof(newState);
3584 newState.browseType = 2;
3585 newState.browserIndex = GetBrowserIndex();
3586 if (viewPersistHistory.p != NULL)
3587 {
3588 hResult = viewPersistHistory->GetClassID(&newState.persistClass);
3589 if (FAILED_UNEXPECTEDLY(hResult))
3590 return hResult;
3591 }
3593 hResult = pStream->Write(&newState, sizeof(newState), NULL);
3594 if (FAILED_UNEXPECTEDLY(hResult))
3595 return hResult;
3596 hResult = pStream->Write(fCurrentDirectoryPIDL, newState.pidlSize, NULL);
3597 if (FAILED_UNEXPECTEDLY(hResult))
3598 return hResult;
3599 if (viewPersistHistory.p != NULL)
3600 {
3601 hResult = viewPersistHistory->SaveHistory(pStream);
3602 if (FAILED_UNEXPECTEDLY(hResult))
3603 return hResult;
3604 }
3605 return S_OK;
3606}
3607
3609{
3610 return E_NOTIMPL;
3611}
3612
3614{
3615 return E_NOTIMPL;
3616}
3617
3619{
3620 OnCreate(reinterpret_cast<LPCREATESTRUCT> (lParam));
3621 return 0;
3622}
3623
3625{
3626 HRESULT hr;
3627 SaveViewState();
3628
3629 /* The current thread is about to go down so render any IDataObject that may be left in the clipboard */
3631
3632 // TODO: rip down everything
3633 {
3634 m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction
3636 fCurrentShellView->DestroyViewWindow();
3637 fCurrentShellView->UIActivate(SVUIA_DEACTIVATE);
3638
3639 for (int i = 0; i < 3; i++)
3640 {
3643 CComPtr<IUnknown> pBarSite;
3645
3646 if (fClientBars[i].clientBar == NULL)
3647 continue;
3648
3649 hr = fClientBars[i].clientBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pdw));
3651 continue;
3652
3653 /* We should destroy our basebarsite too */
3654 hr = pdw->QueryInterface(IID_PPV_ARG(IDeskBar, &bar));
3655 if (SUCCEEDED(hr))
3656 {
3657 hr = bar->GetClient(&pBarSite);
3658 if (SUCCEEDED(hr) && pBarSite)
3659 {
3660 hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient));
3661 if (SUCCEEDED(hr))
3662 pClient->SetDeskBarSite(NULL);
3663 }
3664 }
3665 pdw->CloseDW(0);
3666
3667 pClient = NULL;
3668 pBarSite = NULL;
3669 pdw = NULL;
3670 bar = NULL;
3671 ReleaseCComPtrExpectZero(fClientBars[i].clientBar);
3672 }
3673 ReleaseCComPtrExpectZero(fCurrentShellView);
3674 ReleaseCComPtrExpectZero(fTravelLog);
3675
3680 }
3681 PostQuitMessage(0);
3682 return 0;
3683}
3684
3686{
3687 CComPtr<IDockingWindow> dockingWindow;
3688 RECT availableBounds;
3689 static const INT excludeItems[] = {1, 1, 1, IDC_STATUSBAR, 0, 0};
3690 HRESULT hResult;
3691
3692 if (wParam != SIZE_MINIMIZED)
3693 {
3694 GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems);
3695 for (INT x = 0; x < 3; x++)
3696 {
3697 if (fClientBars[x].clientBar != NULL)
3698 {
3699 hResult = fClientBars[x].clientBar->QueryInterface(
3700 IID_PPV_ARG(IDockingWindow, &dockingWindow));
3701 if (SUCCEEDED(hResult) && dockingWindow != NULL)
3702 {
3703 hResult = dockingWindow->ResizeBorderDW(
3704 &availableBounds, static_cast<IDropTarget *>(this), TRUE);
3705 break;
3706 }
3707 }
3708 }
3710 }
3711 return 1;
3712}
3713
3715{
3716 HMENU theMenu;
3717 LPARAM menuIndex = lParam;
3718
3719 theMenu = reinterpret_cast<HMENU>(wParam);
3720
3722 {
3723 menuIndex = 0;
3724 }
3725 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_EDIT))
3726 {
3727 menuIndex = 1;
3728 }
3729 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_VIEW))
3730 {
3731 UpdateViewMenu(theMenu);
3732 menuIndex = 2;
3733 }
3735 {
3736 menuIndex = 3;
3737 }
3738 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_TOOLS))
3739 {
3740 // FIXME: Remove once implemented
3743 menuIndex = 4;
3744 }
3745 else if (theMenu == SHGetMenuFromID(fCurrentMenuBar, FCIDM_MENU_HELP))
3746 {
3747 menuIndex = 5;
3748 }
3749
3750 LRESULT ret = RelayMsgToShellView(uMsg, wParam, menuIndex, bHandled);
3751
3752 return ret;
3753}
3754
3756{
3758 return 0;
3759}
3760
3762{
3765 return 0;
3766}
3767
3769{
3772 return 0;
3773}
3774
3775LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3776{
3777 return SendMessage(WM_CLOSE);
3778}
3779
3780LRESULT CShellBrowser::OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3781{
3782 HRESULT hResult = DoFolderOptions();
3783 if (FAILED(hResult))
3784 TRACE("DoFolderOptions failed with hResult=%08lx\n", hResult);
3785 return 0;
3786}
3787
3788LRESULT CShellBrowser::OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3789{
3790#ifndef __REACTOS__
3792#endif /* __REACTOS__ */
3793 return 0;
3794}
3795
3797{
3799 return 0;
3800}
3801
3802LRESULT CShellBrowser::OnAboutReactOS(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3803{
3804 ShellAbout(m_hWnd, _T("ReactOS"), NULL, NULL);
3805 return 0;
3806}
3807
3808LRESULT CShellBrowser::OnGoBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3809{
3810 HRESULT hResult = GoBack();
3811 if (FAILED(hResult))
3812 TRACE("GoBack failed with hResult=%08lx\n", hResult);
3813 return 0;
3814}
3815
3816LRESULT CShellBrowser::OnGoForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3817{
3818 HRESULT hResult = GoForward();
3819 if (FAILED(hResult))
3820 TRACE("GoForward failed with hResult=%08lx\n", hResult);
3821 return 0;
3822}
3823
3824LRESULT CShellBrowser::OnGoUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3825{
3826 HRESULT hResult = NavigateToParent();
3827 if (FAILED(hResult))
3828 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3829 return 0;
3830}
3831
3832LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3833{
3834 HRESULT hResult = GoHome();
3835 if (FAILED(hResult))
3836 TRACE("GoHome failed with hResult=%08lx\n", hResult);
3837 return 0;
3838}
3839
3840LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3841{
3842 // FIXME: This does not appear to be what windows does.
3843 HRESULT hResult = NavigateToParent();
3844 if (FAILED(hResult))
3845 TRACE("NavigateToParent failed with hResult=%08lx\n", hResult);
3846 return 0;
3847}
3848
3849static BOOL
3851 IN LPCWSTR pszLnkFileName,
3852 IN LPCITEMIDLIST pidl,
3853 IN LPCWSTR pszDescription OPTIONAL)
3854{
3855 IPersistFile *pPF;
3856 IShellLinkW *pSL;
3858 if (FAILED(hr))
3859 return hr;
3860
3861 hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
3862 IID_IShellLinkW, (LPVOID*)&pSL);
3863 if (SUCCEEDED(hr))
3864 {
3865 pSL->SetIDList(pidl);
3866
3867 if (pszDescription)
3868 pSL->SetDescription(pszDescription);
3869
3870 hr = pSL->QueryInterface(IID_IPersistFile, (LPVOID*)&pPF);
3871 if (SUCCEEDED(hr))
3872 {
3873 hr = pPF->Save(pszLnkFileName, TRUE);
3874 pPF->Release();
3875 }
3876 pSL->Release();
3877 }
3878
3880
3881 return SUCCEEDED(hr);
3882}
3883
3885{
3887 if (FAILED(hr))
3889
3890 return hr;
3891}
3892
3893LRESULT CShellBrowser::OnAddToFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3894{
3895 LPITEMIDLIST pidlFavs;
3896 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
3898 return 0;
3899
3900 SHFILEINFOW fileInfo = { NULL };
3901 if (!SHGetFileInfoW((LPCWSTR)fCurrentDirectoryPIDL, 0, &fileInfo, sizeof(fileInfo),
3903 {
3904 return 0;
3905 }
3906
3908 SHGetPathFromIDListW(pidlFavs, szPath);
3909 PathAppendW(szPath, fileInfo.szDisplayName);
3910 PathAddExtensionW(szPath, L".lnk");
3911
3913 return 0;
3914}
3915
3916LRESULT CShellBrowser::OnOrganizeFavorites(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3917{
3918 CComPtr<IShellFolder> psfDesktop;
3919 LPITEMIDLIST pidlFavs;
3920 HRESULT hr = GetFavsLocation(m_hWnd, &pidlFavs);
3922 return 0;
3923
3924 hr = SHGetDesktopFolder(&psfDesktop);
3926 {
3927 ILFree(pidlFavs);
3928 return 0;
3929 }
3930
3931 hr = SHInvokeDefaultCommand(m_hWnd, psfDesktop, pidlFavs);
3932 ILFree(pidlFavs);
3934 return 0;
3935
3936 return 0;
3937}
3938
3940{
3942 m_settings.Save();
3944 return 0;
3945}
3946
3947LRESULT CShellBrowser::OnToggleToolbarLock(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3948{
3949 HRESULT hResult;
3950 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3951 CGID_PrivCITCommands, ITID_TOOLBARLOCKED, 0, NULL, NULL);
3952 return 0;
3953}
3954
3956{
3957 HRESULT hResult;
3958 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3959 CGID_PrivCITCommands, ITID_TOOLBARBANDSHOWN, 0, NULL, NULL);
3960 return 0;
3961}
3962
3964{
3965 HRESULT hResult;
3966 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3967 CGID_PrivCITCommands, ITID_ADDRESSBANDSHOWN, 0, NULL, NULL);
3968 return 0;
3969}
3970
3972{
3973 HRESULT hResult;
3974 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3975 CGID_PrivCITCommands, ITID_LINKSBANDSHOWN, 0, NULL, NULL);
3976 return 0;
3977}
3978
3979LRESULT CShellBrowser::OnToggleTextLabels(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3980{
3981 HRESULT hResult;
3982 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3983 CGID_PrivCITCommands, ITID_TEXTLABELS, 0, NULL, NULL);
3984 return 0;
3985}
3986
3987LRESULT CShellBrowser::OnToolbarCustomize(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3988{
3989 HRESULT hResult;
3990 hResult = IUnknown_Exec(fClientBars[BIInternetToolbar].clientBar,
3991 CGID_PrivCITCommands, ITID_CUSTOMIZEENABLED, 0, NULL, NULL);
3992 return 0;
3993}
3994
3995LRESULT CShellBrowser::OnRefresh(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
3996{
3998 fCurrentShellView->Refresh();
3999 return 0;
4000}
4001
4002LRESULT CShellBrowser::OnGoTravel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4003{
4004 return 0;
4005}
4006
4007LRESULT CShellBrowser::OnExplorerBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
4008{
4009 // TODO: HACK ! use the proper mechanism to show the band (i.e. pass the BSTR to basebar)
4011 {
4012 MenuBandInfo *mbi;
4014 if (!mbi)
4015 return 0;
4016 ShowBand(mbi->barGuid, mbi->fVertical);
4017 bHandled = TRUE;
4018 return 1;
4019 }
4020 switch (wID)
4021 {
4023 ShowBand(CLSID_FileSearchBand, true);
4024 break;
4026 ShowBand(CLSID_ExplorerBand, true);
4027 break;
4029 ShowBand(CLSID_SH_HistBand, true);
4030 break;
4032 ShowBand(CLSID_SH_FavBand, true);
4033 break;
4034 default:
4035 WARN("Unknown id %x\n", wID);
4036 }
4037 bHandled = TRUE;
4038 return 1;
4039}
4040
4042{
4045 return 0;
4046}
4047
4049{
4051 return 0;
4052}
4053
4055{
4056 /* Refresh child windows */
4058
4059 /* Refresh status bar */
4060 if (fStatusBar)
4061 {
4064 }
4065
4066 return 0;
4067}
4068
4070{
4071 if (!lParam)
4073
4075 return NO_ERROR;
4076}
4077
4078// WM_APPCOMMAND
4080{
4081 UINT uCmd = GET_APPCOMMAND_LPARAM(lParam);
4082 switch (uCmd)
4083 {
4084 case APPCOMMAND_BROWSER_BACKWARD:
4085 GoBack();
4086 break;
4087
4088 case APPCOMMAND_BROWSER_FORWARD:
4089 GoForward();
4090 break;
4091
4092 default:
4093 FIXME("uCmd: %u\n", uCmd);
4094 break;
4095 }
4096 return 0;
4097}
4098
4100{
4101 return ShellObjectCreatorInit<CShellBrowser>(riid, ppv);
4102}
4103
4105{
4108}
4109
4111{
4113 SHGDNF flags = SHGDN_FORADDRESSBAR;
4114
4116 flags |= SHGDN_FORPARSING;
4117
4120}
4121
4123{
4124 if (!gCabinetState.fSaveLocalView || (m_BrowserSvcFlags & (BSF_THEATERMODE | BSF_UISETBYAUTOMATION)))
4125 return;
4126#if 0 // If CDesktopBrowser aggregates us, skip saving
4128 if (fCurrentShellView && SUCCEEDED(fCurrentShellView->GetCurrentInfo(&fs)) && (fs.fFlags & FWF_DESKTOP))
4129 return;
4130#endif
4131
4133 CComPtr<IStream> pITBarStream;
4134 if (!fClientBars[BIInternetToolbar].clientBar.p)
4135 return;
4137 if (FAILED(hr))
4138 return;
4140 return;
4141 pPSI->Save(pITBarStream, TRUE);
4142}
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)
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
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:134
#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:1963
#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:13
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:3260
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
Definition: ordinal.c:4263
HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID)
Definition: ordinal.c:1993
HRESULT WINAPI IUnknown_QueryStatus(IUnknown *lpUnknown, REFGUID pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText)
Definition: ordinal.c:1044
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
Definition: ordinal.c:1796
BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: ordinal.c:3464
UINT WINAPI SHEnableMenuItem(HMENU hMenu, UINT wItemID, BOOL bEnable)
Definition: ordinal.c:1777
HRESULT WINAPI IUnknown_QueryService(IUnknown *, REFGUID, REFIID, LPVOID *)
Definition: ordinal.c:1497
HRESULT WINAPI IUnknown_Exec(IUnknown *lpUnknown, REFGUID pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: ordinal.c:1083
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1453
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:3056
HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle, DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
Definition: ordinal.c:3000
HRESULT WINAPI IUnknown_GetWindow(IUnknown *lpUnknown, HWND *lphWnd)
Definition: ordinal.c:1332
void WINAPI SHPropagateMessage(HWND hWnd, UINT uiMsgId, WPARAM wParam, LPARAM lParam, BOOL bSend)
Definition: ordinal.c:1715
HRESULT WINAPI SHGetViewStatePropertyBag(LPCITEMIDLIST pidl, LPWSTR bag_name, DWORD flags, REFIID riid, void **ppv)
Definition: ordinal.c:5206
HRESULT WINAPI IUnknown_SetSite(IUnknown *obj, IUnknown *site)
Definition: ordinal.c:1407
BOOL WINAPI PathIsUNCW(LPCWSTR lpszPath)
Definition: path.c:2266
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:683
int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder *sh, LPCITEMIDLIST pidl, int *pIndex)
Definition: iconcache.cpp:766
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:241
#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:84
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:940
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:1350
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1342
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:1924
#define DSA_AppendItem(hdsa, pitem)
Definition: commctrl.h:4827
#define STATUSCLASSNAMEW
Definition: commctrl.h:1936
#define DSA_GetItemCount(hdsa)
Definition: commctrl.h:4826
#define SBARS_SIZEGRIP
Definition: commctrl.h:1923
#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:415
#define SHGFI_DISPLAYNAME
Definition: shellapi.h:166
#define SHGFI_PIDL
Definition: shellapi.h:180
#define ShellAbout
Definition: shellapi.h:692
#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:247
#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:2178
#define TLMENUF_BACKANDFORTH
Definition: shlobj.h:2743
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2202
#define MM_SUBMENUSHAVEIDS
Definition: shlobj.h:2528
#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:2737
#define FCIDM_MENU_TOOLS
Definition: shlobj.h:634
#define TLMENUF_CHECKCURRENT
Definition: shlobj.h:2740
#define FCIDM_MENU_EXPLORE
Definition: shlobj.h:638
#define FCIDM_MENU_VIEW
Definition: shlobj.h:632
#define TLOG_BACK
Definition: shlobj.h:2736
#define FCIDM_MENU_EDIT
Definition: shlobj.h:631
@ REST_NOSAVESET
Definition: shlobj.h:1644
#define FCIDM_SHVIEWLAST
Definition: shlobj.h:614
#define SBCMDID_EXPLORERBARFOLDERS
Definition: shlobj_undoc.h:64
#define DVCMDID_SET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:89
#define DVCMDID_RESET_DEFAULTFOLDER_SETTINGS
Definition: shlobj_undoc.h:90
#define SHGetValue
Definition: shlwapi.h:70
@ FWF_DESKTOP
Definition: shobjidl.idl:646
@ FVM_ICON
Definition: shobjidl.idl:678
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:2391
BOOL fSaveLocalView
Definition: shlobj.h:2387
BOOL fFullPathTitle
Definition: shlobj.h:2386
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:375
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:57
long browserIndex
Definition: shlobj_undoc.h:56
ULONG pidlSize
Definition: shlobj_undoc.h:58
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:829
#define ITID_TOOLBARBANDSHOWN
Definition: undocshell.h:827
#define ITID_TEXTLABELS
Definition: undocshell.h:826
#define ITID_CUSTOMIZEENABLED
Definition: undocshell.h:832
#define ITID_ADDRESSBANDSHOWN
Definition: undocshell.h:828
#define CWM_STATECHANGE
Definition: undocshell.h:208
#define ITID_TOOLBARLOCKED
Definition: undocshell.h:833
_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:1712
#define GetModuleHandle
Definition: winbase.h:3827
#define OutputDebugString
Definition: winbase.h:3890
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2767
_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:770
#define SW_HIDE
Definition: winuser.h:768
#define WM_CLOSE
Definition: winuser.h:1621
#define MF_BYCOMMAND
Definition: winuser.h:202
#define MIIM_ID
Definition: winuser.h:722
#define COLOR_WINDOW
Definition: winuser.h:918
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:1608
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:1611
#define WM_COMMAND
Definition: winuser.h:1740
#define IDC_ARROW
Definition: winuser.h:687
#define WM_APPCOMMAND
Definition: winuser.h:1882
#define VK_CONTROL
Definition: winuser.h:2203
#define InsertMenuItem
Definition: winuser.h:5813
#define WM_SETFOCUS
Definition: winuser.h:1613
#define SetMenuItemInfo
Definition: winuser.h:5859
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SIZE_MINIMIZED
Definition: winuser.h:2506
BOOL WINAPI IsMenu(_In_ HMENU)
#define CS_DBLCLKS
Definition: winuser.h:651
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:1645
#define HWND_DESKTOP
Definition: winuser.h:1209
#define WM_SETTINGCHANGE
Definition: winuser.h:1629
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:723
#define WM_INITMENUPOPUP
Definition: winuser.h:1746
#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:5822
#define SendMessage
Definition: winuser.h:5852
#define LoadCursor
Definition: winuser.h:5821
WNDCLASSEXA WNDCLASSEX
Definition: winuser.h:5728
#define LoadMenu
Definition: winuser.h:5826
#define WM_MEASUREITEM
Definition: winuser.h:1646
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define WM_NCDESTROY
Definition: winuser.h:1684
#define SWP_NOOWNERZORDER
Definition: winuser.h:1249
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define WM_USER
Definition: winuser.h:1895
#define IDC_WAIT
Definition: winuser.h:689
#define SW_SHOW
Definition: winuser.h:775
#define WM_DESTROY
Definition: winuser.h:1609
#define SetWindowText
Definition: winuser.h:5866
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
#define SWP_NOZORDER
Definition: winuser.h:1247
#define InsertMenu
Definition: winuser.h:5812
#define GetMenuItemInfo
Definition: winuser.h:5797
#define WM_MENUSELECT
Definition: winuser.h:1747
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define MIIM_TYPE
Definition: winuser.h:725
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2097
#define WM_SETREDRAW
Definition: winuser.h:1616
_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:1648
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