/////////////////////////////////////////////////////////////////////////////
-// Name: clipbrd.cpp
+// Name: gtk/clipbrd.cpp
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#include "wx/utils.h"
#include "wx/log.h"
-#include "glib.h"
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
//-----------------------------------------------------------------------------
// thread system
GdkAtom g_clipboardAtom = 0;
GdkAtom g_targetsAtom = 0;
+// 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!)
+static const wxChar *TRACE_CLIPBOARD = _T("clipboard");
+
//-----------------------------------------------------------------------------
// reminder
//-----------------------------------------------------------------------------
GdkAtom selection;
GdkAtom target;
GdkAtom type;
- gint format;
+ gint format;
guchar *data;
- gint length;
+ gint length;
};
*/
if ( wxTheClipboard && selection_data->length > 0 )
{
/* make sure we got the data in the correct form */
-
- // VZ: I don't know what does this mean (and GTK+ authors apparently
- // don't know either, Owen Taylor writes that "Motif seems to ask
- // for TARGETS atom sometimes" (??)), but it seems that xterm
- // (which is not a Motif app AFAIK) does this too, so it's
- // absolutely essential to support this, otherwise we can't paste
- // text from xterm!
GdkAtom type = selection_data->type;
if ( type != GDK_SELECTION_TYPE_ATOM )
{
- if ( strcmp(gdk_atom_name(type), "TARGETS") != 0 )
+ if ( strcmp(gdk_atom_name(type), "TARGETS") )
{
- // don't know what this is
+ wxLogTrace( TRACE_CLIPBOARD,
+ _T("got unsupported clipboard target") );
+
clipboard->m_waiting = FALSE;
return;
}
- //else: don't know what this is, but it seems to work in the same
- // way as GDK_SELECTION_TYPE_ATOM does
}
- //else: the data is the list of formats supported by the selection
- /*
+#ifdef __WXDEBUG__
wxDataFormat clip( selection_data->selection );
- wxLogDebug( wxT("selection received for targets, clipboard %s"), clip.GetId().c_str() );
- */
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("selection received for targets, clipboard %s"),
+ clip.GetId().c_str() );
+#endif // __WXDEBUG__
// the atoms we received, holding a list of targets (= formats)
GdkAtom *atoms = (GdkAtom *)selection_data->data;
{
wxDataFormat format( atoms[i] );
- /*
- wxLogDebug( wxT("selection received for targets, format %s"), format.GetId().c_str() );
- */
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("selection received for targets, format %s"),
+ format.GetId().c_str() );
if (format == clipboard->m_targetRequested)
{
//-----------------------------------------------------------------------------
static void
-selection_handler( GtkWidget *WXUNUSED(widget), GtkSelectionData *selection_data, gpointer WXUNUSED(data) )
+selection_handler( GtkWidget *WXUNUSED(widget),
+ GtkSelectionData *selection_data,
+ guint WXUNUSED(info),
+ guint WXUNUSED(time),
+ gpointer WXUNUSED(data) )
{
if (!wxTheClipboard) return;
for (size_t i = 0; i < m_data->GetFormatCount(); i++)
{
- wxLogDebug( wxT("wxClipboard now supports atom %s"), array[i].GetId().c_str() );
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("wxClipboard now supports atom %s"),
+ array[i].GetId().c_str() );
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
clipboard,
bool wxClipboard::IsSupported( const wxDataFormat& format )
{
/* reentrance problems */
- if (m_open) return TRUE;
+ if (m_waiting) return FALSE;
/* store requested format to be asked for by callbacks */
m_targetRequested = format;
+#if 0
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("wxClipboard:IsSupported: requested format: %s"),
+ format.GetId().c_str() );
+#endif
+
wxCHECK_MSG( m_targetRequested, FALSE, wxT("invalid clipboard format") );
m_formatSupported = FALSE;
{
wxDataFormat format( array[i] );
- wxLogDebug( wxT("wxClipboard::GetData: requested format: %s"), format.GetId().c_str() );
+ wxLogTrace( TRACE_CLIPBOARD,
+ wxT("wxClipboard::GetData: requested format: %s"),
+ format.GetId().c_str() );
/* is data supported by clipboard ? */