vcl/inc/unx/gtk/gtkinst.hxx | 6 --- vcl/unx/gtk3/gtkinst.cxx | 80 ++++++++++++++++++++------------------------ 2 files changed, 37 insertions(+), 49 deletions(-)
New commits: commit c83a9ef419ac9bde61d0ebafa3692c8e43374d49 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Jun 24 09:10:19 2021 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Thu Jun 24 21:41:03 2021 +0200 drop text_transfer_result and merge dnd and paste logic Change-Id: Ia91e961d2d94bbd4baeb81647438a4026a4fce60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117764 Tested-by: Caolán McNamara <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index d7580cf68b1e..4c9eea3b8d48 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -56,12 +56,6 @@ class GtkSalFrame; #if GTK_CHECK_VERSION(4, 0, 0) gint gtk_dialog_run(GtkDialog *dialog); -struct text_transfer_result -{ - OUString sText; - bool bDone = false; -}; - struct read_transfer_result { enum { BlockSize = 8192 }; diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 8fe127b32e79..f3f739454e3b 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -713,20 +713,6 @@ GdkClipboard* clipboard_get(SelectionType eSelection) #if GTK_CHECK_VERSION(4, 0, 0) -void text_async_completed(GObject* source, GAsyncResult* res, gpointer data) -{ - GdkClipboard* clipboard = GDK_CLIPBOARD(source); - text_transfer_result* pRes = static_cast<text_transfer_result*>(data); - - gchar* pText = gdk_clipboard_read_text_finish(clipboard, res, nullptr); - pRes->sText = OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); - g_free(pText); - - pRes->bDone = true; - - g_main_context_wakeup(nullptr); -} - void read_clipboard_async_completed(GObject* source, GAsyncResult* res, gpointer user_data) { GdkClipboard* clipboard = GDK_CLIPBOARD(source); @@ -772,31 +758,43 @@ public: virtual css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor& rFlavor) override { + css::datatransfer::DataFlavor aFlavor(rFlavor); + if (aFlavor.MimeType == "text/plain;charset=utf-16") + aFlavor.MimeType = "text/plain;charset=utf-8"; + + auto it = m_aMimeTypeToGtkType.find(aFlavor.MimeType); + if (it == m_aMimeTypeToGtkType.end()) + return css::uno::Any(); + css::uno::Any aRet; + GdkClipboard* clipboard = clipboard_get(m_eSelection); - if (rFlavor.MimeType == "text/plain;charset=utf-16") - { + #if !GTK_CHECK_VERSION(4, 0, 0) + if (aFlavor.MimeType == "text/plain;charset=utf-8") + { gchar *pText = gtk_clipboard_wait_for_text(clipboard); OUString aStr(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); g_free(pText); aRet <<= aStr.replaceAll("\r\n", "\n"); -#else - SalInstance* pInstance = GetSalData()->m_pInstance; - text_transfer_result aRes; - gdk_clipboard_read_text_async(clipboard, nullptr, text_async_completed, &aRes); - while (!aRes.bDone) - pInstance->DoYield(true, false); - aRet <<= aRes.sText.replaceAll("\r\n", "\n"); -#endif return aRet; } - - auto it = m_aMimeTypeToGtkType.find(rFlavor.MimeType); - if (it == m_aMimeTypeToGtkType.end()) - return css::uno::Any(); - -#if GTK_CHECK_VERSION(4, 0, 0) + else + { + GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, + it->second); + if (!data) + { + return css::uno::Any(); + } + gint length; + const guchar *rawdata = gtk_selection_data_get_data_with_length(data, + &length); + Sequence<sal_Int8> aSeq(reinterpret_cast<const sal_Int8*>(rawdata), length); + gtk_selection_data_free(data); + aRet <<= aSeq; + } +#else SalInstance* pInstance = GetSalData()->m_pInstance; read_transfer_result aRes; const char *mime_types[] = { it->second.getStr(), nullptr }; @@ -811,21 +809,17 @@ public: while (!aRes.bDone) pInstance->DoYield(true, false); - Sequence<sal_Int8> aSeq(aRes.aVector.data(), aRes.aVector.size()); - aRet <<= aSeq; -#else - GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, - it->second); - if (!data) + if (aFlavor.MimeType == "text/plain;charset=utf-8") { - return css::uno::Any(); + const char* pStr = reinterpret_cast<const char*>(aRes.aVector.data()); + OUString aStr(pStr, aRes.aVector.size(), RTL_TEXTENCODING_UTF8); + aRet <<= aStr.replaceAll("\r\n", "\n"); + } + else + { + auto aSeq = css::uno::Sequence<sal_Int8>(aRes.aVector.data(), aRes.aVector.size()); + aRet <<= aSeq; } - gint length; - const guchar *rawdata = gtk_selection_data_get_data_with_length(data, - &length); - Sequence<sal_Int8> aSeq(reinterpret_cast<const sal_Int8*>(rawdata), length); - gtk_selection_data_free(data); - aRet <<= aSeq; #endif return aRet; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
