From 96fc4bc71488a2ed2e2f175d28a5a95e3a09642a Mon Sep 17 00:00:00 2001 From: Don HO Date: Thu, 25 Feb 2016 13:24:58 +0100 Subject: [PATCH] Fix "copy" command bug in find result panel While find result panel has a lot of results, and user has not scrolled down yet, this bug can be reproduce easily by command "select all" then copy - not all the found results are copied into clipboard. --- .../src/ScitillaComponent/FindReplaceDlg.cpp | 16 +++++++++------- .../src/ScitillaComponent/FindReplaceDlg.h | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp index c376a7ace..d7e661fa0 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.cpp @@ -2505,13 +2505,13 @@ void Finder::openAll() } } -bool Finder::isLineActualSearchResult(int line) const +bool Finder::isLineActualSearchResult(const generic_string & s) const { - const int foldLevel = _scintView.execute(SCI_GETFOLDLEVEL, line) & SC_FOLDLEVELNUMBERMASK; - return foldLevel == SC_FOLDLEVELBASE + 3; + const long firstColon = s.find(TEXT("\tLine ")); + return (firstColon == 0); } -generic_string Finder::prepareStringForClipboard(generic_string s) const +generic_string & Finder::prepareStringForClipboard(generic_string & s) const { // Input: a string like "\tLine 3: search result". // Output: "search result" @@ -2527,7 +2527,8 @@ generic_string Finder::prepareStringForClipboard(generic_string s) const else { // Plus 2 in order to deal with ": ". - return s.substr(2 + firstColon); + s = s.substr(2 + firstColon); + return s; } } @@ -2558,9 +2559,10 @@ void Finder::copy() std::vector lines; for (size_t line = fromLine; line <= toLine; ++line) { - if (isLineActualSearchResult(line)) + generic_string lineStr = _scintView.getLine(line); + if (isLineActualSearchResult(lineStr)) { - lines.push_back(prepareStringForClipboard(_scintView.getLine(line))); + lines.push_back(prepareStringForClipboard(lineStr)); } } const generic_string toClipboard = stringJoin(lines, TEXT("\r\n")); diff --git a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h index eb7f1ea8b..b4f3f24ad 100644 --- a/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h +++ b/PowerEditor/src/ScitillaComponent/FindReplaceDlg.h @@ -178,8 +178,8 @@ private: _scintView.execute(SCI_SETREADONLY, isReadOnly); }; - bool isLineActualSearchResult(int line) const; - generic_string prepareStringForClipboard(generic_string s) const; + bool isLineActualSearchResult(const generic_string & s) const; + generic_string & prepareStringForClipboard(generic_string & s) const; static FoundInfo EmptyFoundInfo; static SearchResultMarking EmptySearchResultMarking;