OSDN Git Service

Sync Dialog Scroll the correct line number
authorFrank Li <lznuaa@gmail.com>
Thu, 23 Jul 2009 14:44:34 +0000 (22:44 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 23 Jul 2009 14:44:34 +0000 (22:44 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/SyncDlg.cpp

index 9395a40..118fb78 100644 (file)
@@ -435,23 +435,27 @@ void CSyncDlg::ParserCmdOutput(TCHAR ch)
        TRACE(_T("%c"),ch);\r
        int linenum;\r
        int index;\r
+       linenum = this->m_ctrlCmdOut.GetLineCount();\r
 \r
        if( ch == _T('\r') )\r
        {\r
-               linenum = this->m_ctrlCmdOut.GetLineCount();\r
                if(linenum>0)\r
                        index = this->m_ctrlCmdOut.LineIndex(linenum-1);\r
                else\r
                        index = 0;\r
 \r
+               TRACE(_T("line %d\n"),linenum);\r
        }else\r
                index = -1;\r
 \r
        this->m_ctrlCmdOut.SetSel(index,-1);\r
-                       \r
-       this->m_ctrlCmdOut.ReplaceSel(CString(ch));\r
-               \r
-       this->m_ctrlCmdOut.LineScroll(linenum-1);\r
+       \r
+       if( ch != _T('\r') )\r
+               this->m_ctrlCmdOut.ReplaceSel(CString(ch));\r
+       \r
+       int firstline = m_ctrlCmdOut.GetFirstVisibleLine();\r
+       if( linenum - firstline > 4 )\r
+               this->m_ctrlCmdOut.LineScroll(linenum - firstline -4);\r
 \r
        if( ch == _T('\r') || ch == _T('\n') )\r
        {\r