Lots more Unicode fixes.
wxClipboard fixes for GTK2 and UTF8. wxFileConfig now uses wxConvLocal to convert text and doesn't crash anymore.. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16601 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -74,14 +74,12 @@ struct _GtkSelectionData
|
||||
static void
|
||||
targets_selection_received( GtkWidget *WXUNUSED(widget),
|
||||
GtkSelectionData *selection_data,
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
guint32 WXUNUSED(time),
|
||||
#endif
|
||||
wxClipboard *clipboard )
|
||||
{
|
||||
if ( wxTheClipboard && selection_data->length > 0 )
|
||||
{
|
||||
/* make sure we got the data in the correct form */
|
||||
// make sure we got the data in the correct form
|
||||
GdkAtom type = selection_data->type;
|
||||
if ( type != GDK_SELECTION_TYPE_ATOM )
|
||||
{
|
||||
@@ -113,6 +111,10 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
|
||||
wxT("selection received for targets, format %s"),
|
||||
format.GetId().c_str() );
|
||||
|
||||
// printf( "format %s requested %s\n",
|
||||
// gdk_atom_name( atoms[i] ),
|
||||
// gdk_atom_name( clipboard->m_targetRequested ) );
|
||||
|
||||
if (format == clipboard->m_targetRequested)
|
||||
{
|
||||
clipboard->m_waiting = FALSE;
|
||||
@@ -132,9 +134,7 @@ targets_selection_received( GtkWidget *WXUNUSED(widget),
|
||||
static void
|
||||
selection_received( GtkWidget *WXUNUSED(widget),
|
||||
GtkSelectionData *selection_data,
|
||||
#if (GTK_MINOR_VERSION > 0)
|
||||
guint32 WXUNUSED(time),
|
||||
#endif
|
||||
wxClipboard *clipboard )
|
||||
{
|
||||
if (!wxTheClipboard)
|
||||
@@ -159,7 +159,7 @@ selection_received( GtkWidget *WXUNUSED(widget),
|
||||
|
||||
wxDataFormat format( selection_data->target );
|
||||
|
||||
/* make sure we got the data in the correct format */
|
||||
// make sure we got the data in the correct format
|
||||
if (!data_object->IsSupportedFormat( format ) )
|
||||
{
|
||||
clipboard->m_waiting = FALSE;
|
||||
@@ -248,23 +248,9 @@ selection_handler( GtkWidget *WXUNUSED(widget),
|
||||
|
||||
void *d = malloc(size);
|
||||
|
||||
// Text data will be in UTF8 in Unicode mode.
|
||||
data->GetDataHere( selection_data->target, d );
|
||||
|
||||
// transform Unicode text into multibyte before putting it on clipboard
|
||||
#if wxUSE_UNICODE
|
||||
if ( format.GetType() == wxDF_TEXT )
|
||||
{
|
||||
const wchar_t *wstr = (const wchar_t *)d;
|
||||
size_t len = wxConvCurrent->WC2MB(NULL, wstr, 0);
|
||||
char *str = (char*) malloc(len + 1);
|
||||
wxConvCurrent->WC2MB(str, wstr, len);
|
||||
str[len] = '\0';
|
||||
|
||||
free(d);
|
||||
d = str;
|
||||
}
|
||||
#endif // wxUSE_UNICODE
|
||||
|
||||
gtk_selection_data_set(
|
||||
selection_data,
|
||||
GDK_SELECTION_TYPE_STRING,
|
||||
@@ -341,8 +327,8 @@ void wxClipboard::Clear()
|
||||
/* disable GUI threads */
|
||||
#endif
|
||||
|
||||
/* As we have data we also own the clipboard. Once we no longer own
|
||||
it, clear_selection is called which will set m_data to zero */
|
||||
// As we have data we also own the clipboard. Once we no longer own
|
||||
// it, clear_selection is called which will set m_data to zero
|
||||
if (gdk_selection_owner_get( g_clipboardAtom ) == m_clipboardWidget->window)
|
||||
{
|
||||
m_waiting = TRUE;
|
||||
@@ -404,16 +390,16 @@ bool wxClipboard::AddData( wxDataObject *data )
|
||||
|
||||
wxCHECK_MSG( data, FALSE, wxT("data is invalid") );
|
||||
|
||||
/* we can only store one wxDataObject */
|
||||
// we can only store one wxDataObject
|
||||
Clear();
|
||||
|
||||
m_data = data;
|
||||
|
||||
/* get formats from wxDataObjects */
|
||||
// get formats from wxDataObjects
|
||||
wxDataFormat *array = new wxDataFormat[ m_data->GetFormatCount() ];
|
||||
m_data->GetAllFormats( array );
|
||||
|
||||
/* primary selection or clipboard */
|
||||
// primary selection or clipboard
|
||||
GdkAtom clipboard = m_usePrimary ? (GdkAtom)GDK_SELECTION_PRIMARY
|
||||
: g_clipboardAtom;
|
||||
|
||||
@@ -424,6 +410,9 @@ bool wxClipboard::AddData( wxDataObject *data )
|
||||
wxT("wxClipboard now supports atom %s"),
|
||||
array[i].GetId().c_str() );
|
||||
|
||||
// printf( "added %s\n",
|
||||
// gdk_atom_name( array[i].GetFormatId() ) );
|
||||
|
||||
gtk_selection_add_target( GTK_WIDGET(m_clipboardWidget),
|
||||
clipboard,
|
||||
array[i],
|
||||
|
Reference in New Issue
Block a user