Loading widget/gtk/nsClipboard.cpp +0 −97 Original line number Diff line number Diff line Loading @@ -90,103 +90,6 @@ int GetGeckoClipboardType(GtkClipboard* aGtkClipboard) { return -1; // THAT AIN'T NO CLIPBOARD I EVER HEARD OF } void nsRetrievalContext::ClipboardOwnerChanged() { LOGCLIP("nsRetrievalContext::ClipboardOwnerChanged()"); g_clear_pointer(&mTargets, g_free); mTargetNum = 0; } void nsRetrievalContext::PrimaryOwnerChanged() { LOGCLIP("nsRetrievalContext::PrimaryOwnerChanged()"); g_clear_pointer(&mTargetsPrimary, g_free); mTargetPrimaryNum = 0; } GdkAtom* nsRetrievalContext::GetStoredTargets(int32_t aWhichClipboard, int* aTargetNum) { GdkAtom* storedTargets; if (aWhichClipboard == nsClipboard::kGlobalClipboard) { storedTargets = mTargets; *aTargetNum = mTargetNum; } else { storedTargets = mTargetsPrimary; *aTargetNum = mTargetPrimaryNum; } if (storedTargets && *aTargetNum) { return (GdkAtom*)g_memdup(storedTargets, sizeof(GdkAtom) * (*aTargetNum)); } return nullptr; } void nsRetrievalContext::StoreTargets(int32_t aWhichClipboard, GdkAtom* aTargets, int aTargetNum) { GdkAtom** storedTargets; int* storedTargetNum; if (aWhichClipboard == nsClipboard::kGlobalClipboard) { storedTargets = &mTargets; storedTargetNum = &mTargetNum; } else { storedTargets = &mTargetsPrimary; storedTargetNum = &mTargetPrimaryNum; } g_clear_pointer(storedTargets, g_free); *storedTargetNum = 0; if (aTargets && aTargetNum) { *storedTargets = (GdkAtom*)g_memdup(aTargets, sizeof(GdkAtom) * aTargetNum); *storedTargetNum = aTargetNum; } } GdkAtom* nsRetrievalContext::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContext::GetTargets(%s)\n", aWhichClipboard == nsClipboard::kSelectionClipboard ? "primary" : "clipboard"); GdkAtom* targets = GetStoredTargets(aWhichClipboard, aTargetNum); if (targets && *aTargetNum > 0) { LOGCLIP(" returned %d cached targets.", *aTargetNum); return targets; } targets = GetTargetsImpl(aWhichClipboard, aTargetNum); StoreTargets(aWhichClipboard, targets, *aTargetNum); return targets; } static void ClipboardOwnerChangedProc(GtkClipboard* aClipboard, GdkEvent* aEvent, gpointer data) { auto* context = static_cast<nsRetrievalContext*>(data); context->ClipboardOwnerChanged(); } static void PrimaryOwnerChangedProc(GtkClipboard* aClipboard, GdkEvent* aEvent, gpointer data) { auto* context = static_cast<nsRetrievalContext*>(data); context->PrimaryOwnerChanged(); } nsRetrievalContext::nsRetrievalContext() { g_signal_connect(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), "owner-change", G_CALLBACK(ClipboardOwnerChangedProc), this); g_signal_connect(gtk_clipboard_get(GDK_SELECTION_PRIMARY), "owner-change", G_CALLBACK(PrimaryOwnerChangedProc), this); } nsRetrievalContext::~nsRetrievalContext() { g_signal_handlers_disconnect_by_func( gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), FuncToGpointer(ClipboardOwnerChangedProc), this); g_signal_handlers_disconnect_by_func(gtk_clipboard_get(GDK_SELECTION_PRIMARY), FuncToGpointer(PrimaryOwnerChangedProc), this); // Clear cached clipboard targets. ClipboardOwnerChanged(); PrimaryOwnerChanged(); } nsClipboard::nsClipboard() = default; nsClipboard::~nsClipboard() { Loading widget/gtk/nsClipboard.h +2 −21 Original line number Diff line number Diff line Loading @@ -42,31 +42,12 @@ class nsRetrievalContext { // Get data mime types which can be obtained from clipboard. // The returned array has to be released by g_free(). GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum); virtual GdkAtom* GetTargetsImpl(int32_t aWhichClipboard, int* aTargetNum) = 0; virtual GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum) = 0; virtual bool HasSelectionSupport(void) = 0; // Clipboard/Primary selection owner changed. Clear internal cached data. void ClipboardOwnerChanged(); void PrimaryOwnerChanged(); GdkAtom* GetStoredTargets(int32_t aWhichClipboard, int* aTargetNum); void StoreTargets(int32_t aWhichClipboard, GdkAtom* aTargets, int aTargetNum); nsRetrievalContext(); protected: virtual ~nsRetrievalContext(); private: // Cached targets GdkAtom* mTargets = nullptr; int mTargetNum = 0; GdkAtom* mTargetsPrimary = nullptr; int mTargetPrimaryNum = 0; virtual ~nsRetrievalContext() = default; }; class nsClipboard : public nsIClipboard, public nsIObserver { Loading widget/gtk/nsClipboardWayland.cpp +2 −5 Original line number Diff line number Diff line Loading @@ -974,11 +974,8 @@ void nsRetrievalContextWayland::TransferFastTrackClipboard( } } GdkAtom* nsRetrievalContextWayland::GetTargetsImpl(int32_t aWhichClipboard, GdkAtom* nsRetrievalContextWayland::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContextWayland::GetTargetsImpl(%s)\n", aWhichClipboard == nsClipboard::kSelectionClipboard ? "primary" : "clipboard"); /* 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(). Loading widget/gtk/nsClipboardWayland.h +2 −2 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ class nsRetrievalContextWayland : public nsRetrievalContext { virtual const char* GetClipboardText(int32_t aWhichClipboard) override; virtual void ReleaseClipboardData(const char* aClipboardData) override; virtual GdkAtom* GetTargetsImpl(int32_t aWhichClipboard, virtual GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum) override; virtual bool HasSelectionSupport(void) override; Loading widget/gtk/nsClipboardWaylandAsync.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ void nsRetrievalContextWaylandAsync::TransferAsyncClipboardData( } } GdkAtom* nsRetrievalContextWaylandAsync::GetTargetsImpl(int32_t aWhichClipboard, GdkAtom* nsRetrievalContextWaylandAsync::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContextWaylandAsync::GetTargets()\n"); Loading Loading
widget/gtk/nsClipboard.cpp +0 −97 Original line number Diff line number Diff line Loading @@ -90,103 +90,6 @@ int GetGeckoClipboardType(GtkClipboard* aGtkClipboard) { return -1; // THAT AIN'T NO CLIPBOARD I EVER HEARD OF } void nsRetrievalContext::ClipboardOwnerChanged() { LOGCLIP("nsRetrievalContext::ClipboardOwnerChanged()"); g_clear_pointer(&mTargets, g_free); mTargetNum = 0; } void nsRetrievalContext::PrimaryOwnerChanged() { LOGCLIP("nsRetrievalContext::PrimaryOwnerChanged()"); g_clear_pointer(&mTargetsPrimary, g_free); mTargetPrimaryNum = 0; } GdkAtom* nsRetrievalContext::GetStoredTargets(int32_t aWhichClipboard, int* aTargetNum) { GdkAtom* storedTargets; if (aWhichClipboard == nsClipboard::kGlobalClipboard) { storedTargets = mTargets; *aTargetNum = mTargetNum; } else { storedTargets = mTargetsPrimary; *aTargetNum = mTargetPrimaryNum; } if (storedTargets && *aTargetNum) { return (GdkAtom*)g_memdup(storedTargets, sizeof(GdkAtom) * (*aTargetNum)); } return nullptr; } void nsRetrievalContext::StoreTargets(int32_t aWhichClipboard, GdkAtom* aTargets, int aTargetNum) { GdkAtom** storedTargets; int* storedTargetNum; if (aWhichClipboard == nsClipboard::kGlobalClipboard) { storedTargets = &mTargets; storedTargetNum = &mTargetNum; } else { storedTargets = &mTargetsPrimary; storedTargetNum = &mTargetPrimaryNum; } g_clear_pointer(storedTargets, g_free); *storedTargetNum = 0; if (aTargets && aTargetNum) { *storedTargets = (GdkAtom*)g_memdup(aTargets, sizeof(GdkAtom) * aTargetNum); *storedTargetNum = aTargetNum; } } GdkAtom* nsRetrievalContext::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContext::GetTargets(%s)\n", aWhichClipboard == nsClipboard::kSelectionClipboard ? "primary" : "clipboard"); GdkAtom* targets = GetStoredTargets(aWhichClipboard, aTargetNum); if (targets && *aTargetNum > 0) { LOGCLIP(" returned %d cached targets.", *aTargetNum); return targets; } targets = GetTargetsImpl(aWhichClipboard, aTargetNum); StoreTargets(aWhichClipboard, targets, *aTargetNum); return targets; } static void ClipboardOwnerChangedProc(GtkClipboard* aClipboard, GdkEvent* aEvent, gpointer data) { auto* context = static_cast<nsRetrievalContext*>(data); context->ClipboardOwnerChanged(); } static void PrimaryOwnerChangedProc(GtkClipboard* aClipboard, GdkEvent* aEvent, gpointer data) { auto* context = static_cast<nsRetrievalContext*>(data); context->PrimaryOwnerChanged(); } nsRetrievalContext::nsRetrievalContext() { g_signal_connect(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), "owner-change", G_CALLBACK(ClipboardOwnerChangedProc), this); g_signal_connect(gtk_clipboard_get(GDK_SELECTION_PRIMARY), "owner-change", G_CALLBACK(PrimaryOwnerChangedProc), this); } nsRetrievalContext::~nsRetrievalContext() { g_signal_handlers_disconnect_by_func( gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), FuncToGpointer(ClipboardOwnerChangedProc), this); g_signal_handlers_disconnect_by_func(gtk_clipboard_get(GDK_SELECTION_PRIMARY), FuncToGpointer(PrimaryOwnerChangedProc), this); // Clear cached clipboard targets. ClipboardOwnerChanged(); PrimaryOwnerChanged(); } nsClipboard::nsClipboard() = default; nsClipboard::~nsClipboard() { Loading
widget/gtk/nsClipboard.h +2 −21 Original line number Diff line number Diff line Loading @@ -42,31 +42,12 @@ class nsRetrievalContext { // Get data mime types which can be obtained from clipboard. // The returned array has to be released by g_free(). GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum); virtual GdkAtom* GetTargetsImpl(int32_t aWhichClipboard, int* aTargetNum) = 0; virtual GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum) = 0; virtual bool HasSelectionSupport(void) = 0; // Clipboard/Primary selection owner changed. Clear internal cached data. void ClipboardOwnerChanged(); void PrimaryOwnerChanged(); GdkAtom* GetStoredTargets(int32_t aWhichClipboard, int* aTargetNum); void StoreTargets(int32_t aWhichClipboard, GdkAtom* aTargets, int aTargetNum); nsRetrievalContext(); protected: virtual ~nsRetrievalContext(); private: // Cached targets GdkAtom* mTargets = nullptr; int mTargetNum = 0; GdkAtom* mTargetsPrimary = nullptr; int mTargetPrimaryNum = 0; virtual ~nsRetrievalContext() = default; }; class nsClipboard : public nsIClipboard, public nsIObserver { Loading
widget/gtk/nsClipboardWayland.cpp +2 −5 Original line number Diff line number Diff line Loading @@ -974,11 +974,8 @@ void nsRetrievalContextWayland::TransferFastTrackClipboard( } } GdkAtom* nsRetrievalContextWayland::GetTargetsImpl(int32_t aWhichClipboard, GdkAtom* nsRetrievalContextWayland::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContextWayland::GetTargetsImpl(%s)\n", aWhichClipboard == nsClipboard::kSelectionClipboard ? "primary" : "clipboard"); /* 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(). Loading
widget/gtk/nsClipboardWayland.h +2 −2 Original line number Diff line number Diff line Loading @@ -109,7 +109,7 @@ class nsRetrievalContextWayland : public nsRetrievalContext { virtual const char* GetClipboardText(int32_t aWhichClipboard) override; virtual void ReleaseClipboardData(const char* aClipboardData) override; virtual GdkAtom* GetTargetsImpl(int32_t aWhichClipboard, virtual GdkAtom* GetTargets(int32_t aWhichClipboard, int* aTargetNum) override; virtual bool HasSelectionSupport(void) override; Loading
widget/gtk/nsClipboardWaylandAsync.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ void nsRetrievalContextWaylandAsync::TransferAsyncClipboardData( } } GdkAtom* nsRetrievalContextWaylandAsync::GetTargetsImpl(int32_t aWhichClipboard, GdkAtom* nsRetrievalContextWaylandAsync::GetTargets(int32_t aWhichClipboard, int* aTargetNum) { LOGCLIP("nsRetrievalContextWaylandAsync::GetTargets()\n"); Loading