]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix exporting clipboard data to primary selection in wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 18 Mar 2011 09:16:19 +0000 (09:16 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 18 Mar 2011 09:16:19 +0000 (09:16 +0000)
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
include/wx/gtk/clipbrd.h
src/gtk/clipbrd.cpp

index 211741fc5e15e39bbcb06fdc149ce0843b549b35..c67e4d91d07f53edb7ce106903ff918d878bbcaf 100644 (file)
@@ -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:
 
index 548e911743adbb7fd2ed5375c3403c9743644511..761d7c81ed9daf4823a73f3bd22b6d7ec93cd13e 100644 (file)
@@ -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);
index 924f7c88c02fe18f89762dbba35717d56ac39c3d..f963bdd6ae25f64068100803667f565c6f3fb8cb 100644 (file)
@@ -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