// Author: Robert Roebling
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
// "selection_received" for targets
//-----------------------------------------------------------------------------
+extern "C" {
static void
targets_selection_received( GtkWidget *WXUNUSED(widget),
GtkSelectionData *selection_data,
clipboard->m_waiting = FALSE;
}
+}
//-----------------------------------------------------------------------------
// "selection_received" for the actual data
//-----------------------------------------------------------------------------
+extern "C" {
static void
selection_received( GtkWidget *WXUNUSED(widget),
GtkSelectionData *selection_data,
wxTheClipboard->m_formatSupported = TRUE;
clipboard->m_waiting = FALSE;
}
+}
//-----------------------------------------------------------------------------
// "selection_clear"
//-----------------------------------------------------------------------------
+extern "C" {
static gint
selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event )
{
wxTheClipboard->m_waiting = FALSE;
return TRUE;
}
+}
//-----------------------------------------------------------------------------
// selection handler for supplying data
//-----------------------------------------------------------------------------
+extern "C" {
static void
selection_handler( GtkWidget *WXUNUSED(widget),
GtkSelectionData *selection_data,
wxDataFormat format( selection_data->target );
+#ifdef __WXDEBUG__
+ wxLogTrace(TRACE_CLIPBOARD,
+ _T("clipboard data in format %s, GtkSelectionData is target=%s type=%s selection=%s"),
+ format.GetId().c_str(),
+ wxString::FromAscii(gdk_atom_name(selection_data->target)).c_str(),
+ wxString::FromAscii(gdk_atom_name(selection_data->type)).c_str(),
+ wxString::FromAscii(gdk_atom_name(selection_data->selection)).c_str()
+ );
+#endif
+
if (!data->IsSupportedFormat( format )) return;
int size = data->GetDataSize( format );
// Text data will be in UTF8 in Unicode mode.
data->GetDataHere( selection_data->target, d );
- gtk_selection_data_set(
- selection_data,
- GDK_SELECTION_TYPE_STRING,
- 8*sizeof(gchar),
- (unsigned char*) d,
- size );
+#ifdef __WXGTK20__
+ // NB: GTK+ requires special treatment of UTF8_STRING data, the text
+ // would show as UTF-8 data interpreted as latin1 (?) in other
+ // GTK+ apps if we used gtk_selection_data_set()
+ if (format == wxDataFormat(wxDF_UNICODETEXT))
+ {
+ gtk_selection_data_set_text(
+ selection_data,
+ (const gchar*)d,
+ size-1 );
+ }
+ else
+#endif
+ {
+ gtk_selection_data_set(
+ selection_data,
+ GDK_SELECTION_TYPE_STRING,
+ 8*sizeof(gchar),
+ (unsigned char*) d,
+ size-1 );
+ }
free(d);
}
+}
//-----------------------------------------------------------------------------
// wxClipboard
/* 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") );
}
#endif
- if (!m_formatSupported) return FALSE;
-
- return TRUE;
+ return m_formatSupported;
}
bool wxClipboard::GetData( wxDataObject& data )