fixed pasting of Unicode strings

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27733 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2004-06-10 19:37:03 +00:00
parent 810324c83b
commit ebe4745154
2 changed files with 64 additions and 22 deletions

View File

@ -250,6 +250,16 @@ selection_handler( GtkWidget *WXUNUSED(widget),
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 );
@ -261,12 +271,27 @@ selection_handler( GtkWidget *WXUNUSED(widget),
// 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);
}
else
#endif
{
gtk_selection_data_set(
selection_data,
GDK_SELECTION_TYPE_STRING,
8*sizeof(gchar),
(unsigned char*) d,
size );
}
free(d);
}
@ -478,11 +503,9 @@ bool wxClipboard::IsSupported( const wxDataFormat& format )
/* 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") );
@ -515,9 +538,7 @@ bool wxClipboard::IsSupported( const wxDataFormat& format )
}
#endif
if (!m_formatSupported) return FALSE;
return TRUE;
return m_formatSupported;
}
bool wxClipboard::GetData( wxDataObject& data )

View File

@ -250,6 +250,16 @@ selection_handler( GtkWidget *WXUNUSED(widget),
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 );
@ -261,12 +271,27 @@ selection_handler( GtkWidget *WXUNUSED(widget),
// 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);
}
else
#endif
{
gtk_selection_data_set(
selection_data,
GDK_SELECTION_TYPE_STRING,
8*sizeof(gchar),
(unsigned char*) d,
size );
}
free(d);
}
@ -478,11 +503,9 @@ bool wxClipboard::IsSupported( const wxDataFormat& format )
/* 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") );
@ -515,9 +538,7 @@ bool wxClipboard::IsSupported( const wxDataFormat& format )
}
#endif
if (!m_formatSupported) return FALSE;
return TRUE;
return m_formatSupported;
}
bool wxClipboard::GetData( wxDataObject& data )