From 37204b5d309e5e803ca042058ece65f1d264ca5a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 18 Mar 2011 09:16:19 +0000 Subject: [PATCH] Fix exporting clipboard data to primary selection in wxGTK. Honour the requested selection in our selection handler instead of always returning the default one resulting in wrong data being pasted when using primary selection (e.g. middle clicking). Closes #12947. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 ++- include/wx/gtk/clipbrd.h | 4 ++-- src/gtk/clipbrd.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 211741fc5e..c67e4d91d0 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -496,7 +496,8 @@ GTK: - Improve print/page setup dialog (rafravago). - Switch to GtkTooltip from deprecated GtkTooltips (Emilien Kia). -- wxTLW generates wxEVT_MAXIMIZE +- wxTLW generates wxEVT_MAXIMIZE. +- Fix copying clipboard data to primary selection (David Hart). MSW: diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index 548e911743..761d7c81ed 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -65,8 +65,8 @@ public: // get our clipboard item (depending on m_usePrimary value) GdkAtom GTKGetClipboardAtom() const; - // get the data object currently being used - wxDataObject *GTKGetDataObject() { return Data(); } + // get the data object currently being requested + wxDataObject *GTKGetDataObject( GdkAtom atom ); // clear the data for the given clipboard kind void GTKClearData(Kind kind); diff --git a/src/gtk/clipbrd.cpp b/src/gtk/clipbrd.cpp index 924f7c88c0..f963bdd6ae 100644 --- a/src/gtk/clipbrd.cpp +++ b/src/gtk/clipbrd.cpp @@ -262,7 +262,7 @@ selection_handler( GtkWidget *WXUNUSED(widget), if ( !clipboard ) return; - wxDataObject * const data = clipboard->GTKGetDataObject(); + wxDataObject * const data = clipboard->GTKGetDataObject(selection_data->selection); if ( !data ) return; @@ -729,4 +729,27 @@ bool wxClipboard::GetData( wxDataObject& data ) return false; } +wxDataObject* wxClipboard::GTKGetDataObject( GdkAtom atom ) +{ + if ( atom == GDK_NONE ) + return Data(); + + if ( atom == GDK_SELECTION_PRIMARY ) + { + wxLogTrace(TRACE_CLIPBOARD, wxT("Primary selection requested" )); + + return Data( wxClipboard::Primary ); + } + else if ( atom == g_clipboardAtom ) + { + wxLogTrace(TRACE_CLIPBOARD, wxT("Clipboard data requested" )); + + return Data( wxClipboard::Clipboard ); + } + else // some other selection, we're not concerned + { + return (wxDataObject*)NULL; + } +} + #endif // wxUSE_CLIPBOARD -- 2.45.2