343{
353
355
358
360
361
362 if(
wFlags & SBSP_RELATIVE)
363 {
364
365
366 if (
FAILED(hRes = IShellFolder_BindToObject(fodInfos->
Shell.FOIShellFolder,
367 pidl,
NULL, &IID_IShellFolder, (
void **)&
folder)))
368 {
369 ERR(
"bind to object failed\n");
370 return hRes;
371 }
372
374 }
375 else if(
wFlags & SBSP_PARENT)
376 {
377
380 }
381 else
382 {
383
386 }
387
389 {
390 ERR(
"could not browse to folder\n");
393 }
394
395
396
398 {
399 IShellFolder_Release(
folder);
401 TRACE(
"keep current folder\n");
403 }
404
405
406 if (fodInfos->
Shell.FOIDataObject)
407 {
408 IDataObject_Release(fodInfos->
Shell.FOIDataObject);
410 }
411
412
413 TRACE(
"create view object\n");
415 &IID_IShellView, (void **)&psvTmp)))
416 {
417 IShellFolder_Release(
folder);
419 return hRes;
420 }
421
422
424
425
426 if(fodInfos->
Shell.FOIShellView)
427 IShellView_GetCurrentInfo(fodInfos->
Shell.FOIShellView, &fodInfos->
ShellInfos.folderSettings);
428
429
430
431
432 if(fodInfos->
Shell.FOIShellView)
433 {
434 IShellView_DestroyViewWindow(fodInfos->
Shell.FOIShellView);
435 IShellView_Release(fodInfos->
Shell.FOIShellView);
436 }
437 fodInfos->
Shell.FOIShellView = psvTmp;
438
439
440 if (fodInfos->
Shell.FOIShellFolder)
441 IShellFolder_Release(fodInfos->
Shell.FOIShellFolder);
443
444
446 fodInfos->
ShellInfos.pidlAbsCurrent = pidlTmp;
447
449
452
453
454 TRACE(
"create view window\n");
455 if (
FAILED(hRes = IShellView_CreateViewWindow(psvTmp,
NULL,
457 &rectView, &hwndView)))
458 {
459 WARN(
"Failed to create view window, hr %#lx.\n", hRes);
460 return hRes;
461 }
462
464
465
468
469
471
472
475
476
477 if (bViewHasFocus)
479
480 return hRes;
481}
LPITEMIDLIST GetParentPidl(LPITEMIDLIST pidl)
FileOpenDlgInfos * get_filedlg_infoptr(HWND hwnd)
IShellFolder * GetShellFolderFromPidl(LPITEMIDLIST pidlAbs)
int FILEDLG95_LOOKIN_SelectItem(HWND hwnd, LPITEMIDLIST pidl)
static void COMDLG32_UpdateCurrentDir(const FileOpenDlgInfos *fodInfos)
static void COMDLG32_DumpSBSPFlags(UINT uflags)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
HWND WINAPI GetFocus(void)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
HWND WINAPI GetParent(_In_ HWND)
#define SetWindowLongPtrW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
struct FileOpenDlgInfos::@433 DlgInfos
struct FileOpenDlgInfos::@431 Shell
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags