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