]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/clipbrd.cpp
Do not generate wxEVT_PG_SELECTED with direct ClearSelection() and SelectProperty...
[wxWidgets.git] / src / gtk / clipbrd.cpp
index 96d6da0c0f3a4526642ce46adf5db0b69fe64790..a3544a41031afd5444f2043515bada2e0727ad7f 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "wx/scopedarray.h"
 #include "wx/scopeguard.h"
+#include "wx/evtloop.h"
 
 #include "wx/gtk/private.h"
 
@@ -52,7 +53,7 @@ extern GdkAtom g_altTextAtom;
 // the trace mask we use with wxLogTrace() - call
 // wxLog::AddTraceMask(TRACE_CLIPBOARD) to enable the trace messages from here
 // (there will be a *lot* of them!)
-#define TRACE_CLIPBOARD _T("clipboard")
+#define TRACE_CLIPBOARD wxT("clipboard")
 
 // ----------------------------------------------------------------------------
 // wxClipboardSync: used to perform clipboard operations synchronously
@@ -68,14 +69,14 @@ class wxClipboardSync
 public:
     wxClipboardSync(wxClipboard& clipboard)
     {
-        wxASSERT_MSG( !ms_clipboard, _T("reentrancy in clipboard code") );
+        wxASSERT_MSG( !ms_clipboard, wxT("reentrancy in clipboard code") );
         ms_clipboard = &clipboard;
     }
 
     ~wxClipboardSync()
     {
         while (ms_clipboard)
-            wxTheApp->YieldFor(wxEVT_CATEGORY_CLIPBOARD);
+            wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_CLIPBOARD);
     }
 
     // this method must be called by GTK+ callbacks to indicate that we got the
@@ -83,7 +84,7 @@ public:
     static void OnDone(wxClipboard * WXUNUSED_UNLESS_DEBUG(clipboard))
     {
         wxASSERT_MSG( clipboard == ms_clipboard,
-                        _T("got notification for alien clipboard") );
+                        wxT("got notification for alien clipboard") );
 
         ms_clipboard = NULL;
     }
@@ -102,7 +103,7 @@ public:
 private:
     static wxClipboard *ms_clipboard;
 
-    DECLARE_NO_COPY_CLASS(wxClipboardSync)
+    wxDECLARE_NO_COPY_CLASS(wxClipboardSync);
 };
 
 wxClipboard *wxClipboardSync::ms_clipboard = NULL;
@@ -137,20 +138,18 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
         if ( strcmp(wxGtkString(gdk_atom_name(type)), "TARGETS") != 0 )
         {
             wxLogTrace( TRACE_CLIPBOARD,
-                        _T("got unsupported clipboard target") );
+                        wxT("got unsupported clipboard target") );
 
             return;
         }
     }
 
-#ifdef __WXDEBUG__
     // it's not really a format, of course, but we can reuse its GetId() method
     // to format this atom as string
     wxDataFormat clip(selection_data->selection);
     wxLogTrace( TRACE_CLIPBOARD,
                 wxT("Received available formats for clipboard %s"),
                 clip.GetId().c_str() );
-#endif // __WXDEBUG__
 
     // the atoms we received, holding a list of targets (= formats)
     const GdkAtom * const atoms = (GdkAtom *)selection_data->data;
@@ -275,23 +274,21 @@ selection_handler( GtkWidget *WXUNUSED(widget),
                                (guchar*)&(timestamp),
                                sizeof(timestamp));
         wxLogTrace(TRACE_CLIPBOARD,
-                   _T("Clipboard TIMESTAMP requested, returning timestamp=%u"),
+                   wxT("Clipboard TIMESTAMP requested, returning timestamp=%u"),
                    timestamp);
         return;
     }
 
     wxDataFormat format( selection_data->target );
 
-#ifdef __WXDEBUG__
     wxLogTrace(TRACE_CLIPBOARD,
-               _T("clipboard data in format %s, GtkSelectionData is target=%s type=%s selection=%s timestamp=%u"),
+               wxT("clipboard data in format %s, GtkSelectionData is target=%s type=%s selection=%s timestamp=%u"),
                format.GetId().c_str(),
                wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->target))).c_str(),
                wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->type))).c_str(),
                wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->selection))).c_str(),
                GPOINTER_TO_UINT( signal_data )
                );
-#endif // __WXDEBUG__
 
     if ( !data->IsSupportedFormat( format ) )
         return;
@@ -331,10 +328,10 @@ selection_handler( GtkWidget *WXUNUSED(widget),
 
 void wxClipboard::GTKOnSelectionReceived(const GtkSelectionData& sel)
 {
-    wxCHECK_RET( m_receivedData, _T("should be inside GetData()") );
+    wxCHECK_RET( m_receivedData, wxT("should be inside GetData()") );
 
     const wxDataFormat format(sel.target);
-    wxLogTrace(TRACE_CLIPBOARD, _T("Received selection %s"),
+    wxLogTrace(TRACE_CLIPBOARD, wxT("Received selection %s"),
                format.GetId().c_str());
 
     if ( !m_receivedData->IsSupportedFormat(format) )
@@ -378,7 +375,7 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget),
         if ( strcmp(wxGtkString(gdk_atom_name(type)), "TARGETS") != 0 )
         {
             wxLogTrace( TRACE_CLIPBOARD,
-                        _T("got unsupported clipboard target") );
+                        wxT("got unsupported clipboard target") );
 
             clipboard->m_sink->QueueEvent( event );
             clipboard->m_sink.Release();
@@ -386,14 +383,12 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget),
         }
     }
 
-#ifdef __WXDEBUG__
     // it's not really a format, of course, but we can reuse its GetId() method
     // to format this atom as string
     wxDataFormat clip(selection_data->selection);
     wxLogTrace( TRACE_CLIPBOARD,
                 wxT("Received available formats for clipboard %s"),
                 clip.GetId().c_str() );
-#endif // __WXDEBUG__
 
     // the atoms we received, holding a list of targets (= formats)
     const GdkAtom * const atoms = (GdkAtom *)selection_data->data;
@@ -504,8 +499,8 @@ bool wxClipboard::SetSelectionOwner(bool set)
 
     if ( !rc )
     {
-        wxLogTrace(TRACE_CLIPBOARD, _T("Failed to %sset selection owner"),
-                   set ? _T("") : _T("un"));
+        wxLogTrace(TRACE_CLIPBOARD, wxT("Failed to %sset selection owner"),
+                   set ? wxT("") : wxT("un"));
     }
 
     return rc;
@@ -569,6 +564,8 @@ bool wxClipboard::DoIsSupported(const wxDataFormat& format)
 
 void wxClipboard::Clear()
 {
+    gtk_selection_clear_targets( m_clipboardWidget, GTKGetClipboardAtom() );
+
     if ( gdk_selection_owner_get(GTKGetClipboardAtom()) ==
             m_clipboardWidget->window )
     {