vcl/inc/unx/gtk/gtkinst.hxx | 6 +++++- vcl/unx/gtk3/gtkinst.cxx | 25 +++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-)
New commits: commit a02b9277a354922d4dc887d72349af9e4573c025 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sun May 23 19:59:00 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Mon May 24 09:43:50 2021 +0200 gtk4: make basic text pasting work again Change-Id: I23b029f7accb7ee65f1dfdf1eaa2643faafff14a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116023 Tested-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index 922475a7526f..7058c383c8a3 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -71,10 +71,14 @@ private: class GtkTransferable : public cppu::WeakImplHelper<css::datatransfer::XTransferable> { -#if !GTK_CHECK_VERSION(4, 0, 0) protected: +#if !GTK_CHECK_VERSION(4, 0, 0) std::map<OUString, GdkAtom> m_aMimeTypeToAtom; +#endif +#if GTK_CHECK_VERSION(4, 0, 0) + std::vector<css::datatransfer::DataFlavor> getTransferDataFlavorsAsVector(const char * const *targets, gint n_targets); +#else std::vector<css::datatransfer::DataFlavor> getTransferDataFlavorsAsVector(GdkAtom *targets, gint n_targets); #endif diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index a5e97e95856d..5d991ccf840b 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -550,8 +550,11 @@ namespace }; } -#if !GTK_CHECK_VERSION(4, 0, 0) +#if GTK_CHECK_VERSION(4, 0, 0) +std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavorsAsVector(const char * const *targets, gint n_targets) +#else std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavorsAsVector(GdkAtom *targets, gint n_targets) +#endif { std::vector<css::datatransfer::DataFlavor> aVector; @@ -559,14 +562,20 @@ std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavo for (gint i = 0; i < n_targets; ++i) { +#if GTK_CHECK_VERSION(4, 0, 0) + const gchar* pName = targets[i]; +#else gchar* pName = gdk_atom_name(targets[i]); +#endif const char* pFinalName = pName; css::datatransfer::DataFlavor aFlavor; // omit text/plain;charset=unicode since it is not well defined if (rtl_str_compare(pName, "text/plain;charset=unicode") == 0) { +#if !GTK_CHECK_VERSION(4, 0, 0) g_free(pName); +#endif continue; } @@ -584,7 +593,9 @@ std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavo // them out for now before they confuse this code's clients: if (rtl_str_indexOfChar(pFinalName, '/') == -1) { +#if !GTK_CHECK_VERSION(4, 0, 0) g_free(pName); +#endif continue; } @@ -610,7 +621,9 @@ std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavo } } aVector.push_back(aFlavor); +#if !GTK_CHECK_VERSION(4, 0, 0) g_free(pName); +#endif } //If we have text, but no UTF-16 format which is basically the only @@ -626,7 +639,6 @@ std::vector<css::datatransfer::DataFlavor> GtkTransferable::getTransferDataFlavo return aVector; } -#endif css::uno::Sequence<css::datatransfer::DataFlavor> SAL_CALL GtkTransferable::getTransferDataFlavors() { @@ -741,9 +753,14 @@ public: { std::vector<css::datatransfer::DataFlavor> aVector; -#if !GTK_CHECK_VERSION(4, 0, 0) GdkClipboard* clipboard = clipboard_get(m_eSelection); +#if GTK_CHECK_VERSION(4, 0, 0) + GdkContentFormats* pFormats = gdk_clipboard_get_formats(clipboard); + gsize n_targets; + const char * const *targets = gdk_content_formats_get_mime_types(pFormats, &n_targets); + aVector = GtkTransferable::getTransferDataFlavorsAsVector(targets, n_targets); +#else GdkAtom *targets; gint n_targets; if (gtk_clipboard_wait_for_targets(clipboard, &targets, &n_targets)) @@ -1095,9 +1112,9 @@ void VclGtkClipboard::flushClipboard() VclGtkClipboard::~VclGtkClipboard() { -#if !GTK_CHECK_VERSION(4, 0, 0) GdkClipboard* clipboard = clipboard_get(m_eSelection); g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId); +#if !GTK_CHECK_VERSION(4, 0, 0) if (!m_aGtkTargets.empty()) { gtk_clipboard_clear(clipboard); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits