X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/37146d3352819c1cc5776e889d23e20d82194e99..16519fd473f79954ba503dfa74a5cc4544391846:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 67ab8a7f66..929c7bb270 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -25,6 +25,7 @@ #include "wx/timer.h" #include "wx/settings.h" #include "wx/dataobj.h" + #include "wx/statusbr.h" #endif #include "wx/html/htmlwin.h" @@ -38,9 +39,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxHtmlLinkEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxHtmlCellEvent, wxCommandEvent) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_CELL_CLICKED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_CELL_HOVER) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_LINK_CLICKED) +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_CLICKED, wxHtmlCellEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_HOVER, wxHtmlCellEvent ) +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEvent ) #if wxUSE_CLIPBOARD @@ -889,21 +890,27 @@ wxString wxHtmlWindow::DoSelectionToText(wxHtmlSelection *sel) return wxEmptyString; wxClientDC dc(this); - - const wxHtmlCell *end = sel->GetToCell(); wxString text; - wxHtmlTerminalCellsInterator i(sel->GetFromCell(), end); - if ( i ) - { - text << i->ConvertToText(sel); - ++i; - } - const wxHtmlCell *prev = *i; + + wxHtmlTerminalCellsInterator i(sel->GetFromCell(), sel->GetToCell()); + const wxHtmlCell *prev = NULL; + while ( i ) { - if ( prev->GetParent() != i->GetParent() ) - text << _T('\n'); - text << i->ConvertToText(*i == end ? sel : NULL); + // When converting HTML content to plain text, the entire paragraph + // (container in wxHTML) goes on single line. A new paragraph (that + // should go on its own line) has its own container. Therefore, the + // simplest way of detecting where to insert newlines in plain text + // is to check if the parent container changed -- if it did, we moved + // to a new paragraph. + if ( prev && prev->GetParent() != i->GetParent() ) + text << '\n'; + + // NB: we don't need to pass the selection to ConvertToText() in the + // middle of the selected text; it's only useful when only part of + // a cell is selected + text << i->ConvertToText(sel); + prev = *i; ++i; }