mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 16:32:57 +00:00
[RSHELL]
* I forgot a cast and a couple IID_PPV_ARG uncommited. [BROWSEUI] * Fixed rebar flags to match windows. Adds the missing border around the toolbars. * Fix some calculations of the rebar size. * Fetch the icon of the current folder and assign it to the browse window. CORE-7330 svn path=/branches/shell-experiments/; revision=63103
This commit is contained in:
parent
fb6dcedf18
commit
dcc7bb6c0d
4 changed files with 77 additions and 33 deletions
|
@ -1341,7 +1341,7 @@ HRESULT CMenuSFToolbar::GetShellFolder(DWORD *pdwFlags, LPITEMIDLIST *ppidl, REF
|
||||||
pidl = ILClone(m_idList);
|
pidl = ILClone(m_idList);
|
||||||
if (!pidl)
|
if (!pidl)
|
||||||
{
|
{
|
||||||
(*(IUnknown**) ppv)->Release();
|
(*reinterpret_cast<IUnknown**>(ppv))->Release();
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -313,11 +313,11 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
|
||||||
/* CLSID_MergedFolder 26fdc864-be88-46e7-9235-032d8ea5162e */
|
/* CLSID_MergedFolder 26fdc864-be88-46e7-9235-032d8ea5162e */
|
||||||
/* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */
|
/* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */
|
||||||
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenuUser);
|
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenuUser);
|
||||||
hr = shellFolder->BindToObject(pidlStartMenuUser, NULL, IID_IShellFolder, (void**) &psfStartMenuUser);
|
hr = shellFolder->BindToObject(pidlStartMenuUser, NULL, IID_PPV_ARG(IShellFolder, &psfStartMenuUser));
|
||||||
|
|
||||||
#if MERGE_FOLDERS
|
#if MERGE_FOLDERS
|
||||||
hr = SHGetFolderLocation(NULL, CSIDL_COMMON_STARTMENU, 0, 0, &pidlStartMenuAll);
|
hr = SHGetFolderLocation(NULL, CSIDL_COMMON_STARTMENU, 0, 0, &pidlStartMenuAll);
|
||||||
hr = shellFolder->BindToObject(pidlStartMenuAll, NULL, IID_IShellFolder, (void**) &psfStartMenuAll);
|
hr = shellFolder->BindToObject(pidlStartMenuAll, NULL, IID_PPV_ARG(IShellFolder, &psfStartMenuAll));
|
||||||
|
|
||||||
IShellFolder * psfMerged;
|
IShellFolder * psfMerged;
|
||||||
hr = CMergedFolder_Constructor(psfStartMenuUser, psfStartMenuAll, IID_PPV_ARG(IShellFolder, &psfMerged));
|
hr = CMergedFolder_Constructor(psfStartMenuUser, psfStartMenuAll, IID_PPV_ARG(IShellFolder, &psfMerged));
|
||||||
|
|
|
@ -528,6 +528,9 @@ HRESULT CInternetToolbar::ReserveBorderSpace()
|
||||||
if (FAILED(hResult))
|
if (FAILED(hResult))
|
||||||
return hResult;
|
return hResult;
|
||||||
SendMessage(fMainReBar, RB_SIZETORECT, RBSTR_CHANGERECT, reinterpret_cast<LPARAM>(&availableBorderSpace));
|
SendMessage(fMainReBar, RB_SIZETORECT, RBSTR_CHANGERECT, reinterpret_cast<LPARAM>(&availableBorderSpace));
|
||||||
|
// RBSTR_CHANGERECT does not seem to set the proper size in the rect.
|
||||||
|
// Let's make sure we fetch the actual size properly.
|
||||||
|
GetWindowRect(fMainReBar, &availableBorderSpace);
|
||||||
neededBorderSpace.left = 0;
|
neededBorderSpace.left = 0;
|
||||||
neededBorderSpace.top = availableBorderSpace.bottom - availableBorderSpace.top;
|
neededBorderSpace.top = availableBorderSpace.bottom - availableBorderSpace.top;
|
||||||
if (!fLocked)
|
if (!fLocked)
|
||||||
|
@ -1095,7 +1098,6 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::SetSite(IUnknown *pUnkSite)
|
||||||
HWND ownerWindow;
|
HWND ownerWindow;
|
||||||
HWND dockContainer;
|
HWND dockContainer;
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
DWORD style;
|
|
||||||
|
|
||||||
if (pUnkSite == NULL)
|
if (pUnkSite == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1125,9 +1127,11 @@ HRESULT STDMETHODCALLTYPE CInternetToolbar::SetSite(IUnknown *pUnkSite)
|
||||||
SubclassWindow(dockContainer);
|
SubclassWindow(dockContainer);
|
||||||
|
|
||||||
// create rebar in dock container
|
// create rebar in dock container
|
||||||
style = WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_VARHEIGHT |
|
DWORD style = WS_VISIBLE | WS_BORDER | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
|
||||||
RBS_BANDBORDERS | RBS_REGISTERDROP | RBS_AUTOSIZE | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_TOP;
|
RBS_VARHEIGHT | RBS_BANDBORDERS | RBS_REGISTERDROP | RBS_AUTOSIZE | RBS_DBLCLKTOGGLE |
|
||||||
fMainReBar = CreateWindow(REBARCLASSNAMEW, NULL, style,
|
CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_TOP;
|
||||||
|
DWORD exStyle = WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_TOOLWINDOW;
|
||||||
|
fMainReBar = CreateWindowEx(exStyle, REBARCLASSNAMEW, NULL, style,
|
||||||
0, 0, 700, 60, dockContainer, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
|
0, 0, 700, 60, dockContainer, NULL, _AtlBaseModule.GetModuleInstance(), NULL);
|
||||||
if (fMainReBar == NULL)
|
if (fMainReBar == NULL)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#include <htiframe.h>
|
#include <htiframe.h>
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
BOOL WINAPI Shell_GetImageLists(
|
||||||
|
_In_ HIMAGELIST *phiml,
|
||||||
|
_In_ HIMAGELIST *phimlSmall
|
||||||
|
);
|
||||||
|
|
||||||
#include "newatlinterfaces.h"
|
#include "newatlinterfaces.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -708,8 +714,7 @@ CShellBrowser::CShellBrowser()
|
||||||
fCurrentDirectoryPIDL = NULL;
|
fCurrentDirectoryPIDL = NULL;
|
||||||
fStatusBar = NULL;
|
fStatusBar = NULL;
|
||||||
fStatusBarVisible = true;
|
fStatusBarVisible = true;
|
||||||
for (INT x = 0; x < 3; x++)
|
memset(fClientBars, 0, sizeof(fClientBars));
|
||||||
fClientBars[x].hwnd = NULL;
|
|
||||||
fCurrentMenuBar = NULL;
|
fCurrentMenuBar = NULL;
|
||||||
fHistoryObject = NULL;
|
fHistoryObject = NULL;
|
||||||
fHistoryStream = NULL;
|
fHistoryStream = NULL;
|
||||||
|
@ -920,7 +925,6 @@ long IEGetNameAndFlags(LPITEMIDLIST pidl, SHGDNF uFlags, LPWSTR pszBuf, UINT cch
|
||||||
HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
|
HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
|
||||||
LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
|
LPCITEMIDLIST absolutePIDL, FOLDERSETTINGS *folderSettings, long flags)
|
||||||
{
|
{
|
||||||
CComPtr<IOleCommandTarget> oleCommandTarget;
|
|
||||||
CComPtr<IObjectWithSite> objectWithSite;
|
CComPtr<IObjectWithSite> objectWithSite;
|
||||||
CComPtr<IShellFolder> saveCurrentShellFolder;
|
CComPtr<IShellFolder> saveCurrentShellFolder;
|
||||||
CComPtr<IShellView> saveCurrentShellView;
|
CComPtr<IShellView> saveCurrentShellView;
|
||||||
|
@ -1006,10 +1010,6 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
|
||||||
saveCurrentShellView->DestroyViewWindow();
|
saveCurrentShellView->DestroyViewWindow();
|
||||||
fCurrentShellViewWindow = newShellViewWindow;
|
fCurrentShellViewWindow = newShellViewWindow;
|
||||||
|
|
||||||
// get command target
|
|
||||||
oleCommandTarget.Release();
|
|
||||||
hResult = newShellView->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &oleCommandTarget));
|
|
||||||
|
|
||||||
// no use
|
// no use
|
||||||
saveCurrentShellView.Release();
|
saveCurrentShellView.Release();
|
||||||
saveCurrentShellFolder.Release();
|
saveCurrentShellFolder.Release();
|
||||||
|
@ -1029,7 +1029,18 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
|
||||||
}
|
}
|
||||||
|
|
||||||
// completed
|
// completed
|
||||||
FireNavigateComplete(L"c:\\temp"); // TODO: use real path here
|
nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
|
||||||
|
hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
|
||||||
|
sizeof(newTitle) / sizeof(wchar_t), NULL);
|
||||||
|
if (SUCCEEDED(hResult))
|
||||||
|
{
|
||||||
|
FireNavigateComplete(newTitle);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FireNavigateComplete(L"ERROR");
|
||||||
|
}
|
||||||
|
|
||||||
if (fCabinetState.fFullPathTitle)
|
if (fCabinetState.fFullPathTitle)
|
||||||
nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
|
nameFlags = SHGDN_FORADDRESSBAR | SHGDN_FORPARSING;
|
||||||
else
|
else
|
||||||
|
@ -1037,8 +1048,27 @@ HRESULT CShellBrowser::BrowseToPath(IShellFolder *newShellFolder,
|
||||||
hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
|
hResult = IEGetNameAndFlags(fCurrentDirectoryPIDL, nameFlags, newTitle,
|
||||||
sizeof(newTitle) / sizeof(wchar_t), NULL);
|
sizeof(newTitle) / sizeof(wchar_t), NULL);
|
||||||
if (SUCCEEDED(hResult))
|
if (SUCCEEDED(hResult))
|
||||||
|
{
|
||||||
SetWindowText(newTitle);
|
SetWindowText(newTitle);
|
||||||
|
|
||||||
|
LPCITEMIDLIST pidlChild;
|
||||||
|
INT index, indexOpen;
|
||||||
|
HIMAGELIST himlSmall, himlLarge;
|
||||||
|
|
||||||
|
CComPtr<IShellFolder> sf;
|
||||||
|
SHBindToParent(absolutePIDL, IID_PPV_ARG(IShellFolder, &sf), &pidlChild);
|
||||||
|
|
||||||
|
index = SHMapPIDLToSystemImageListIndex(sf, pidlChild, &indexOpen);
|
||||||
|
|
||||||
|
Shell_GetImageLists(&himlSmall, &himlLarge);
|
||||||
|
|
||||||
|
HICON icSmall = ImageList_GetIcon(himlSmall, indexOpen, 0);
|
||||||
|
HICON icLarge = ImageList_GetIcon(himlLarge, indexOpen, 0);
|
||||||
|
|
||||||
|
SendMessage(WM_SETICON, ICON_SMALL, reinterpret_cast<LPARAM>(icSmall));
|
||||||
|
SendMessage(WM_SETICON, ICON_BIG, reinterpret_cast<LPARAM>(icLarge));
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Update the window icon
|
// TODO: Update the window icon
|
||||||
|
|
||||||
FireCommandStateChangeAll();
|
FireCommandStateChangeAll();
|
||||||
|
@ -1303,7 +1333,6 @@ void CShellBrowser::RepositionBars()
|
||||||
{
|
{
|
||||||
RECT clientRect;
|
RECT clientRect;
|
||||||
RECT statusRect;
|
RECT statusRect;
|
||||||
RECT toolbarRect;
|
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
GetClientRect(&clientRect);
|
GetClientRect(&clientRect);
|
||||||
|
@ -1319,28 +1348,39 @@ void CShellBrowser::RepositionBars()
|
||||||
|
|
||||||
for (x = 0; x < 3; x++)
|
for (x = 0; x < 3; x++)
|
||||||
{
|
{
|
||||||
if (fClientBars[x].hwnd == NULL && fClientBars[x].clientBar != NULL)
|
HWND hwnd = fClientBars[x].hwnd;
|
||||||
|
RECT borderSpace = fClientBars[x].borderSpace;
|
||||||
|
if (hwnd == NULL && fClientBars[x].clientBar != NULL)
|
||||||
{
|
{
|
||||||
IUnknown_GetWindow(fClientBars[x].clientBar, &fClientBars[x].hwnd);
|
IUnknown_GetWindow(fClientBars[x].clientBar, &hwnd);
|
||||||
|
fClientBars[x].hwnd = hwnd;
|
||||||
}
|
}
|
||||||
if (fClientBars[x].hwnd != NULL)
|
if (hwnd != NULL)
|
||||||
{
|
{
|
||||||
toolbarRect = clientRect;
|
RECT toolbarRect = clientRect;
|
||||||
if (fClientBars[x].borderSpace.top != 0)
|
if (borderSpace.top != 0)
|
||||||
toolbarRect.bottom = toolbarRect.top + fClientBars[x].borderSpace.top;
|
{
|
||||||
else if (fClientBars[x].borderSpace.bottom != 0)
|
toolbarRect.bottom = toolbarRect.top + borderSpace.top;
|
||||||
toolbarRect.top = toolbarRect.bottom - fClientBars[x].borderSpace.bottom;
|
clientRect.top += borderSpace.top;
|
||||||
if (fClientBars[x].borderSpace.left != 0)
|
}
|
||||||
toolbarRect.right = toolbarRect.left + fClientBars[x].borderSpace.left;
|
else if (borderSpace.bottom != 0)
|
||||||
else if (fClientBars[x].borderSpace.right != 0)
|
{
|
||||||
toolbarRect.left = toolbarRect.right - fClientBars[x].borderSpace.right;
|
toolbarRect.top = toolbarRect.bottom - borderSpace.bottom;
|
||||||
::SetWindowPos(fClientBars[x].hwnd, NULL, toolbarRect.left, toolbarRect.top,
|
clientRect.bottom -= borderSpace.bottom;
|
||||||
|
}
|
||||||
|
if (borderSpace.left != 0)
|
||||||
|
{
|
||||||
|
toolbarRect.right = toolbarRect.left + borderSpace.left;
|
||||||
|
clientRect.left += borderSpace.left;
|
||||||
|
}
|
||||||
|
else if (borderSpace.right != 0)
|
||||||
|
{
|
||||||
|
toolbarRect.left = toolbarRect.right - borderSpace.right;
|
||||||
|
clientRect.right -= borderSpace.right;
|
||||||
|
}
|
||||||
|
::SetWindowPos(hwnd, NULL, toolbarRect.left, toolbarRect.top,
|
||||||
toolbarRect.right - toolbarRect.left,
|
toolbarRect.right - toolbarRect.left,
|
||||||
toolbarRect.bottom - toolbarRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
|
toolbarRect.bottom - toolbarRect.top, SWP_NOOWNERZORDER | SWP_NOZORDER);
|
||||||
clientRect.top += fClientBars[x].borderSpace.top;
|
|
||||||
clientRect.left += fClientBars[x].borderSpace.left;
|
|
||||||
clientRect.bottom += fClientBars[x].borderSpace.bottom;
|
|
||||||
clientRect.right += fClientBars[x].borderSpace.right;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
|
::SetWindowPos(fCurrentShellViewWindow, NULL, clientRect.left, clientRect.top,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue