From b2a5be1edb23e45f0577ef454ac11a0f45031188 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Mon, 3 Dec 2018 17:05:42 +0100 Subject: [PATCH] Fixed issue #3304: Double click on stash list item does nothing, show log instead Signed-off-by: Sven Strickroth --- src/Changelog.txt | 1 + src/TortoiseProc/GitLogListBase.cpp | 10 +++++++--- src/TortoiseProc/GitLogListBase.h | 2 +- src/TortoiseProc/refloglist.cpp | 20 ++++++++++++++++++++ src/TortoiseProc/refloglist.h | 3 ++- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/Changelog.txt b/src/Changelog.txt index 3204f7046..52c4081b0 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -14,6 +14,7 @@ Released: unreleased * Fixed issue #3154: Decorate bare repository's folder with a Git icon * Update apr to 1.6.5 * Updte libgit2 + * Fixed issue #3304: Double click on stash list item does nothing, show log instead == Bug Fixes == * Fixed issue #3250: GitWCRev: IsGitItem return true for item that had never been committed diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index efcf286d5..e0be0c9e0 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -1898,7 +1898,7 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point) if (parentHash.size() == 1) { popup.AppendMenuIcon(ID_COMPAREWITHPREVIOUS, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF); - if (CRegDWORD(L"Software\\TortoiseGit\\DiffByDoubleClickInLog", FALSE)) + if (CRegDWORD(L"Software\\TortoiseGit\\DiffByDoubleClickInLog", FALSE) && m_ColumnRegKey != L"reflog") popup.SetDefaultItem(ID_COMPAREWITHPREVIOUS, FALSE); requiresSeparator = true; } @@ -1909,7 +1909,7 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point) for (size_t i = 0; i < parentInfo.size(); ++i) { diffmenu.AppendMenuIcon(ID_COMPAREWITHPREVIOUS + ((i + 1) << 16), parentInfo[i]); - if (i == 0 && CRegDWORD(L"Software\\TortoiseGit\\DiffByDoubleClickInLog", FALSE)) + if (i == 0 && CRegDWORD(L"Software\\TortoiseGit\\DiffByDoubleClickInLog", FALSE) && m_ColumnRegKey != L"reflog") { popup.SetDefaultItem(ID_COMPAREWITHPREVIOUS, FALSE); diffmenu.SetDefaultItem((UINT)(ID_COMPAREWITHPREVIOUS + ((i + 1) << 16)), FALSE); @@ -2038,7 +2038,11 @@ void CGitLogListBase::OnContextMenu(CWnd* pWnd, CPoint point) if(!pSelLogEntry->m_CommitHash.IsEmpty()) { if ((m_ContextMenuMask & GetContextMenuBit(ID_LOG)) && selectedCount == 1) - popup.AppendMenuIcon(ID_LOG, IDS_LOG_POPUP_LOG, IDI_LOG); + { + popup.AppendMenuIcon(ID_LOG, IDS_LOG_POPUP_LOG, IDI_LOG); + if (m_ColumnRegKey == L"reflog") + popup.SetDefaultItem(ID_LOG, FALSE); + } if (m_ContextMenuMask&GetContextMenuBit(ID_REPOBROWSE)) popup.AppendMenuIcon(ID_REPOBROWSE, IDS_LOG_BROWSEREPO, IDI_REPOBROWSE); diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index b56011865..75497c999 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -583,7 +583,7 @@ protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg LRESULT OnLoad(WPARAM wParam, LPARAM lParam); - void OnNMDblclkLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult); + virtual void OnNMDblclkLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult); afx_msg void OnLvnOdfinditemLoglist(NMHDR *pNMHDR, LRESULT *pResult); void PreSubclassWindow() override; virtual BOOL PreTranslateMessage(MSG* pMsg) override; diff --git a/src/TortoiseProc/refloglist.cpp b/src/TortoiseProc/refloglist.cpp index d764b824c..812de6969 100644 --- a/src/TortoiseProc/refloglist.cpp +++ b/src/TortoiseProc/refloglist.cpp @@ -20,6 +20,7 @@ #include "resource.h" #include "refloglist.h" #include "LoglistUtils.h" +#include "AppUtils.h" IMPLEMENT_DYNAMIC(CRefLogList, CGitLogList) @@ -120,6 +121,25 @@ void CRefLogList::OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult) } } +void CRefLogList::OnNMDblclkLoglist(NMHDR* /*pNMHDR*/, LRESULT* pResult) +{ + // a double click on an entry in the revision list has happened + *pResult = 0; + + POSITION pos = GetFirstSelectedItemPosition(); + int indexNext = GetNextSelectedItem(pos); + if (indexNext < 0) + return; + + auto pSelLogEntry = m_arShownList.SafeGetAt(indexNext); + if (!pSelLogEntry) + return; + + CString cmdline; + cmdline.Format(L"/command:log /path:\"%s\" /endrev:%s", (LPCTSTR)g_Git.CombinePath(m_Path), (LPCTSTR)pSelLogEntry->m_CommitHash.ToString()); + CAppUtils::RunTortoiseGitProc(cmdline); +} + void CRefLogList::OnNMCustomdrawLoglist(NMHDR * /*pNMHDR*/, LRESULT *pResult) { // Take the default processing unless we set this to something else below. diff --git a/src/TortoiseProc/refloglist.h b/src/TortoiseProc/refloglist.h index 3fa2946b2..9c576ff9f 100644 --- a/src/TortoiseProc/refloglist.h +++ b/src/TortoiseProc/refloglist.h @@ -1,4 +1,4 @@ -// TortoiseGit - a Windows shell extension for easy version control +// TortoiseGit - a Windows shell extension for easy version control // Copyright (C) 2009-2011, 2015-2017 - TortoiseGit @@ -39,6 +39,7 @@ public: std::vector m_RevCache; protected: + virtual void OnNMDblclkLoglist(NMHDR* /*pNMHDR*/, LRESULT* pResult) override; virtual void OnLvnGetdispinfoLoglist(NMHDR* pNMHDR, LRESULT* pResult) override; virtual void OnNMCustomdrawLoglist(NMHDR* pNMHDR, LRESULT* pResult) override; virtual BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult) override; -- 2.11.4.GIT