void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) { AutoClipboardLocker locker(be_clipboard); if (!locker.isLocked()) return; be_clipboard->Clear(); BMessage* data = be_clipboard->Data(); if (!data) return; BString string(frame->editor()->selectedText()); // Replace unwanted representation of blank lines const char* utf8BlankLine = "\302\240\n"; string.ReplaceAll(utf8BlankLine, "\n"); data->AddData("text/plain", B_MIME_TYPE, string.String(), string.Length()); BString markupString(createMarkup(selectedRange, 0, AnnotateForInterchange, false, ResolveNonLocalURLs)); data->AddData("text/html", B_MIME_TYPE, markupString.String(), markupString.Length()); be_clipboard->Commit(); }
static String selectionDataToUTF8String(GtkSelectionData* data) { // g_strndup guards against selection data that is not null-terminated. GOwnPtr<gchar> markupString(g_strndup(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)), gtk_selection_data_get_length(data))); return String::fromUTF8(markupString.get()); }