From 0456479b767569e9f214bc4b1e062163bb992f97 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sat, 27 Oct 2012 18:05:42 +0200 Subject: [PATCH] Fixed issue #1470: Log Dialog: Selected item not remembered after refresh if item is one of the first 100 Signed-off-by: Sven Strickroth --- src/Changelog.txt | 1 + src/TortoiseProc/GitLogListBase.cpp | 19 ++++++++++++------- src/TortoiseProc/GitLogListBase.h | 3 +++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Changelog.txt b/src/Changelog.txt index 0e5972cac..160c37a95 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -21,6 +21,7 @@ Released: unreleased * Fixed issue #1482: Allow to show log of other branches if current HEAD points to an orphan branch * Fixed issue #1487: Do not use libgit in TortoiseShell for displaying HEAD commit (might set %GIT_DIR% permanently) * Fixed issue #1475: Installer resets your SSH preference to ssh.exe when run silently + * Fixed issue #1470: Log Dialog: Selected item not remembered after refresh if item is one of the first 100 = Release 1.7.14.0 = Released: 2012-10-14 diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index 96c4e8c2b..200a1e6b9 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -61,6 +61,7 @@ #include "SysInfo.h" const UINT CGitLogListBase::m_FindDialogMessage = RegisterWindowMessage(FINDMSGSTRING); +const UINT CGitLogListBase::m_ScrollToMessage = RegisterWindowMessage(_T("TORTOISEGIT_LOG_SCROLLTO")); IMPLEMENT_DYNAMIC(CGitLogListBase, CHintListCtrl) @@ -300,6 +301,7 @@ CGitLogListBase::~CGitLogListBase() BEGIN_MESSAGE_MAP(CGitLogListBase, CHintListCtrl) ON_REGISTERED_MESSAGE(m_FindDialogMessage, OnFindDialogMessage) + ON_REGISTERED_MESSAGE(m_ScrollToMessage, OnScrollToMessage) ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdrawLoglist) ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnLvnGetdispinfoLoglist) ON_WM_CONTEXTMENU() @@ -2516,15 +2518,12 @@ UINT CGitLogListBase::LogThread() return 0; } - // restore last selected item - if (lastSelectedHashNItem >= 0) - { - SetItemState(lastSelectedHashNItem, LVIS_SELECTED, LVIS_SELECTED); - EnsureVisible(lastSelectedHashNItem, FALSE); - } - //Update UI; PostMessage(LVM_SETITEMCOUNT, (WPARAM) this->m_logEntries.size(),(LPARAM) LVSICF_NOINVALIDATEALL|LVSICF_NOSCROLL); + + if (lastSelectedHashNItem >= 0) + PostMessage(m_ScrollToMessage, lastSelectedHashNItem); + if (this->m_hWnd) ::PostMessage(this->GetParent()->m_hWnd,MSG_LOAD_PERCENTAGE,(WPARAM) GITLOG_END,0); @@ -3137,6 +3136,12 @@ void CGitLogListBase::OnHdnItemchanging(NMHDR *pNMHDR, LRESULT *pResult) if(!m_ColumnManager.OnHdnItemchanging(pNMHDR, pResult)) Default(); } +LRESULT CGitLogListBase::OnScrollToMessage(WPARAM itemToSelect, LPARAM /*lParam*/) +{ + SetItemState((int)itemToSelect, LVIS_SELECTED, LVIS_SELECTED); + EnsureVisible((int)itemToSelect, FALSE); + return 0; +} LRESULT CGitLogListBase::OnFindDialogMessage(WPARAM /*wParam*/, LPARAM /*lParam*/) { diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index bde93cb62..34f3f3704 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -297,6 +297,8 @@ public: static const UINT m_FindDialogMessage; void OnFind(); + static const UINT m_ScrollToMessage; + inline int ShownCountWithStopped() const { return (int)m_arShownList.GetCount() + (m_bStrictStopped ? 1 : 0); } int FetchLogAsync(void * data=NULL); CThreadSafePtrArray m_arShownList; @@ -368,6 +370,7 @@ protected: virtual afx_msg void OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult); virtual afx_msg void OnLvnGetdispinfoLoglist(NMHDR *pNMHDR, LRESULT *pResult); afx_msg LRESULT OnFindDialogMessage(WPARAM wParam, LPARAM lParam); + afx_msg LRESULT OnScrollToMessage(WPARAM wParam, LPARAM lParam); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg LRESULT OnLoad(WPARAM wParam, LPARAM lParam); -- 2.11.4.GIT