From cee1091026bfdfae59e882462c3deee1c2860896 Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Sat, 30 Jan 2021 14:55:47 +0100 Subject: Added clipboard fix mozbz#1631061. --- mozilla-1631061.patch | 158 -------------------------------------------------- 1 file changed, 158 deletions(-) delete mode 100644 mozilla-1631061.patch diff --git a/mozilla-1631061.patch b/mozilla-1631061.patch deleted file mode 100644 index acd1c5a..0000000 --- a/mozilla-1631061.patch +++ /dev/null @@ -1,158 +0,0 @@ -changeset: 563258:ed4b271af277 -tag: tip -parent: 563255:2c9db4cd3d89 -user: stransky -date: Tue Dec 22 11:03:28 2020 +0100 -files: widget/gtk/nsClipboardWayland.cpp widget/gtk/nsClipboardWayland.h -description: -Bug 1631061 [Wayland] Remove fast track clipboard and always ask compositor for clipboard data, r?rmader - -Differential Revision: https://phabricator.services.mozilla.com/D100317 - - -diff --git a/widget/gtk/nsClipboardWayland.cpp b/widget/gtk/nsClipboardWayland.cpp ---- a/widget/gtk/nsClipboardWayland.cpp -+++ b/widget/gtk/nsClipboardWayland.cpp -@@ -749,7 +749,6 @@ nsRetrievalContextWayland::nsRetrievalCo - mClipboardOffer(nullptr), - mPrimaryOffer(nullptr), - mDragContext(nullptr), -- mClipboardRequestNumber(0), - mClipboardData(nullptr), - mClipboardDataLength(0) { - wl_data_device* dataDevice = wl_data_device_manager_get_data_device( -@@ -807,42 +806,6 @@ GdkAtom* nsRetrievalContextWayland::GetT - return nullptr; - } - --struct FastTrackClipboard { -- FastTrackClipboard(int aClipboardRequestNumber, -- nsRetrievalContextWayland* aRetrievalContex) -- : mClipboardRequestNumber(aClipboardRequestNumber), -- mRetrievalContex(aRetrievalContex) {} -- -- int mClipboardRequestNumber; -- nsRetrievalContextWayland* mRetrievalContex; --}; -- --static void wayland_clipboard_contents_received( -- GtkClipboard* clipboard, GtkSelectionData* selection_data, gpointer data) { -- LOGCLIP(("wayland_clipboard_contents_received() callback\n")); -- FastTrackClipboard* fastTrack = static_cast(data); -- fastTrack->mRetrievalContex->TransferFastTrackClipboard( -- fastTrack->mClipboardRequestNumber, selection_data); -- delete fastTrack; --} -- --void nsRetrievalContextWayland::TransferFastTrackClipboard( -- int aClipboardRequestNumber, GtkSelectionData* aSelectionData) { -- if (mClipboardRequestNumber == aClipboardRequestNumber) { -- int dataLength = gtk_selection_data_get_length(aSelectionData); -- if (dataLength > 0) { -- mClipboardDataLength = dataLength; -- mClipboardData = reinterpret_cast( -- g_malloc(sizeof(char) * (mClipboardDataLength + 1))); -- memcpy(mClipboardData, gtk_selection_data_get_data(aSelectionData), -- sizeof(char) * mClipboardDataLength); -- mClipboardData[mClipboardDataLength] = '\0'; -- } -- } else { -- NS_WARNING("Received obsoleted clipboard data!"); -- } --} -- - const char* nsRetrievalContextWayland::GetClipboardData( - const char* aMimeType, int32_t aWhichClipboard, uint32_t* aContentLength) { - NS_ASSERTION(mClipboardData == nullptr && mClipboardDataLength == 0, -@@ -851,33 +814,20 @@ const char* nsRetrievalContextWayland::G - LOGCLIP(("nsRetrievalContextWayland::GetClipboardData [%p] mime %s\n", this, - aMimeType)); - -- /* If actual clipboard data is owned by us we don't need to go -- * through Wayland but we ask Gtk+ to directly call data -- * getter callback nsClipboard::SelectionGetEvent(). -- * see gtk_selection_convert() at gtk+/gtkselection.c. -- */ -- GdkAtom selection = GetSelectionAtom(aWhichClipboard); -- if (gdk_selection_owner_get(selection)) { -- LOGCLIP((" Internal clipboard content\n")); -- mClipboardRequestNumber++; -- gtk_clipboard_request_contents( -- gtk_clipboard_get(selection), gdk_atom_intern(aMimeType, FALSE), -- wayland_clipboard_contents_received, -- new FastTrackClipboard(mClipboardRequestNumber, this)); -+ const auto& dataOffer = -+ (GetSelectionAtom(aWhichClipboard) == GDK_SELECTION_PRIMARY) -+ ? mPrimaryOffer -+ : mClipboardOffer; -+ if (!dataOffer) { -+ // Something went wrong. We're requested to provide clipboard data -+ // but we haven't got any from wayland. -+ NS_WARNING("Requested data without valid DataOffer!"); -+ if (mClipboardData) { -+ ReleaseClipboardData(mClipboardData); -+ } - } else { -- LOGCLIP((" Remote clipboard content\n")); -- const auto& dataOffer = -- (selection == GDK_SELECTION_PRIMARY) ? mPrimaryOffer : mClipboardOffer; -- if (!dataOffer) { -- // Something went wrong. We're requested to provide clipboard data -- // but we haven't got any from wayland. -- NS_WARNING("Requested data without valid DataOffer!"); -- mClipboardData = nullptr; -- mClipboardDataLength = 0; -- } else { -- mClipboardData = dataOffer->GetData(mDisplay->GetDisplay(), aMimeType, -- &mClipboardDataLength); -- } -+ mClipboardData = dataOffer->GetData(mDisplay->GetDisplay(), aMimeType, -+ &mClipboardDataLength); - } - - *aContentLength = mClipboardDataLength; -@@ -908,8 +858,10 @@ void nsRetrievalContextWayland::ReleaseC - - NS_ASSERTION(aClipboardData == mClipboardData, - "Releasing unknown clipboard data!"); -- g_free((void*)aClipboardData); - -- mClipboardData = nullptr; -- mClipboardDataLength = 0; -+ if (mClipboardData) { -+ g_free((void*)aClipboardData); -+ mClipboardData = nullptr; -+ mClipboardDataLength = 0; -+ } - } -diff --git a/widget/gtk/nsClipboardWayland.h b/widget/gtk/nsClipboardWayland.h ---- a/widget/gtk/nsClipboardWayland.h -+++ b/widget/gtk/nsClipboardWayland.h -@@ -16,8 +16,6 @@ - #include "nsClipboard.h" - #include "nsWaylandDisplay.h" - --struct FastTrackClipboard; -- - class DataOffer { - public: - void AddMIMEType(const char* aMimeType); -@@ -134,9 +132,6 @@ class nsRetrievalContextWayland : public - - void ClearDragAndDropDataOffer(); - -- void TransferFastTrackClipboard(int aClipboardRequestNumber, -- GtkSelectionData* aSelectionData); -- - virtual ~nsRetrievalContextWayland() override; - - private: -@@ -149,7 +144,6 @@ class nsRetrievalContextWayland : public - mozilla::UniquePtr mPrimaryOffer; - RefPtr mDragContext; - -- int mClipboardRequestNumber; - char* mClipboardData; - uint32_t mClipboardDataLength; - - -- cgit