mirror of
https://github.com/reactos/reactos.git
synced 2026-07-02 15:34:39 +08:00
[SHELL32] Implement single-click mode in DefView (#8054)
This commit is contained in:
@@ -346,7 +346,7 @@ public:
|
||||
LRESULT DoColumnContextMenu(LRESULT lParam);
|
||||
UINT GetSelections();
|
||||
SFGAOF GetSelectionAttributes(SFGAOF Query);
|
||||
HRESULT OpenSelectedItems();
|
||||
HRESULT OpenSelectedItems(PCSTR pszVerb = NULL);
|
||||
void OnDeactivate();
|
||||
void DoActivate(UINT uState);
|
||||
HRESULT drag_notify_subitem(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
|
||||
@@ -357,6 +357,7 @@ public:
|
||||
HRESULT LoadViewState();
|
||||
HRESULT SaveViewState(IStream *pStream);
|
||||
void UpdateFolderViewFlags();
|
||||
UINT GetItemActivateFlags();
|
||||
|
||||
DWORD GetCommDlgViewFlags()
|
||||
{
|
||||
@@ -906,9 +907,9 @@ BOOL CDefView::CreateList()
|
||||
if (m_FolderSettings.fFlags & FWF_FULLROWSELECT)
|
||||
ListExStyle |= LVS_EX_FULLROWSELECT;
|
||||
|
||||
if ((m_FolderSettings.fFlags & FWF_SINGLECLICKACTIVATE) ||
|
||||
(!SHELL_GetSetting(SSF_DOUBLECLICKINWEBVIEW, fDoubleClickInWebView) && !SHELL_GetSetting(SSF_WIN95CLASSIC, fWin95Classic)))
|
||||
ListExStyle |= LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE;
|
||||
ListExStyle |= GetItemActivateFlags();
|
||||
if (ListExStyle & LVS_EX_ONECLICKACTIVATE)
|
||||
ListExStyle |= SHELL_GetIconUnderlineFlags();
|
||||
|
||||
if (m_FolderSettings.fFlags & FWF_NOCOLUMNHEADER)
|
||||
dwStyle |= LVS_NOCOLUMNHEADER;
|
||||
@@ -2184,7 +2185,7 @@ HRESULT CDefView::InvokeContextMenuCommand(CComPtr<IContextMenu>& pCM, LPCSTR lp
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT CDefView::OpenSelectedItems()
|
||||
HRESULT CDefView::OpenSelectedItems(PCSTR pszVerb)
|
||||
{
|
||||
HMENU hMenu;
|
||||
UINT uCommand;
|
||||
@@ -2213,13 +2214,15 @@ HRESULT CDefView::OpenSelectedItems()
|
||||
return hResult;
|
||||
|
||||
uCommand = GetMenuDefaultItem(hMenu, FALSE, 0);
|
||||
if (uCommand == (UINT)-1)
|
||||
if (uCommand == (UINT)-1 && !pszVerb)
|
||||
{
|
||||
ERR("GetMenuDefaultItem returned -1\n");
|
||||
return E_FAIL;
|
||||
}
|
||||
if (!pszVerb)
|
||||
pszVerb = MAKEINTRESOURCEA(uCommand);
|
||||
|
||||
InvokeContextMenuCommand(pCM, MAKEINTRESOURCEA(uCommand), NULL);
|
||||
InvokeContextMenuCommand(pCM, pszVerb, NULL);
|
||||
|
||||
return hResult;
|
||||
}
|
||||
@@ -2681,11 +2684,9 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
|
||||
break;
|
||||
case NM_DBLCLK:
|
||||
TRACE("-- NM_DBLCLK %p\n", this);
|
||||
OpenSelectedItems();
|
||||
break;
|
||||
case NM_RETURN:
|
||||
TRACE("-- NM_RETURN %p\n", this);
|
||||
OpenSelectedItems();
|
||||
break;
|
||||
case HDN_ENDTRACKW:
|
||||
TRACE("-- HDN_ENDTRACKW %p\n", this);
|
||||
@@ -2705,7 +2706,7 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
|
||||
break;
|
||||
case LVN_ITEMACTIVATE:
|
||||
TRACE("-- LVN_ITEMACTIVATE %p\n", this);
|
||||
OnStateChange(CDBOSC_SELCHANGE); // browser will get the IDataObject
|
||||
OpenSelectedItems(((NMITEMACTIVATE *)lpnmh)->uKeyFlags & LVKF_ALT ? "properties" : NULL);
|
||||
break;
|
||||
case LVN_COLUMNCLICK:
|
||||
{
|
||||
@@ -3028,6 +3029,15 @@ LRESULT CDefView::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
|
||||
if (wParam == SPI_SETDESKWALLPAPER || wParam == 0)
|
||||
UpdateListColors();
|
||||
|
||||
UINT ListExMask = LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE;
|
||||
UINT ListExBits = GetItemActivateFlags();
|
||||
if (wParam == SPI_GETICONTITLELOGFONT ||
|
||||
(lParam && !lstrcmpiW((PWSTR)lParam, REGSTR_PATH_EXPLORER L"\\IconUnderline")))
|
||||
{
|
||||
ListExMask |= LVS_EX_UNDERLINEHOT | LVS_EX_UNDERLINECOLD;
|
||||
ListExBits |= SHELL_GetIconUnderlineFlags();
|
||||
}
|
||||
m_ListView.SetExtendedListViewStyle(ListExBits, ListExMask);
|
||||
m_ListView.SendMessage(uMsg, wParam, lParam);
|
||||
return S_OK;
|
||||
}
|
||||
@@ -3458,6 +3468,14 @@ void CDefView::UpdateFolderViewFlags()
|
||||
UPDATEFOLDERVIEWFLAGS(m_FolderSettings.fFlags, FWF_NOGROUPING, !ListView_IsGroupViewEnabled(m_ListView.m_hWnd));
|
||||
}
|
||||
|
||||
UINT CDefView::GetItemActivateFlags()
|
||||
{
|
||||
SHELLSTATE ss;
|
||||
SHGetSetSettings(&ss, SSF_DOUBLECLICKINWEBVIEW | SSF_WIN95CLASSIC, FALSE);
|
||||
return ((m_FolderSettings.fFlags & FWF_SINGLECLICKACTIVATE) || (!ss.fDoubleClickInWebView && !ss.fWin95Classic))
|
||||
? (LVS_EX_TRACKSELECT | LVS_EX_ONECLICKACTIVATE) : 0;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CDefView::SelectItem(PCUITEMID_CHILD pidl, UINT uFlags)
|
||||
{
|
||||
int i;
|
||||
|
||||
Reference in New Issue
Block a user