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.
pull/1468/head
Don HO 9 years ago
parent ecfbf906c6
commit 96fc4bc714

@ -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<generic_string> 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"));

@ -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;

Loading…
Cancel
Save