X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0d2a2b601b1994333886dff8f53d82a714c4042f..8df136714c942b0ec62d6db550d752ab5d731357:/src/gtk/dataobj.cpp?ds=inline diff --git a/src/gtk/dataobj.cpp b/src/gtk/dataobj.cpp index 59dac39832..e495bfd98a 100644 --- a/src/gtk/dataobj.cpp +++ b/src/gtk/dataobj.cpp @@ -17,47 +17,42 @@ #include "gdk/gdk.h" + +//------------------------------------------------------------------------- +// global data +//------------------------------------------------------------------------- + +GdkAtom g_textAtom = 0; + //------------------------------------------------------------------------- // wxDataFormat //------------------------------------------------------------------------- IMPLEMENT_CLASS(wxDataFormat, wxObject) -wxDataFormat::wxDataFormat( wxDataType type ) +wxDataFormat::wxDataFormat() { - m_type = type; - - if (m_type == wxDF_TEXT) - { - m_id = "STRING"; - } - else - if (m_type == wxDF_BITMAP) - { - m_id = "BITMAP"; - } - else - if (m_type == wxDF_FILENAME) - { - m_id = "file:ALL"; - } - else - { - wxFAIL_MSG( "invalid dataformat" ) - } - + if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE ); + m_type = wxDF_INVALID; m_hasAtom = FALSE; + m_atom = (GdkAtom) 0; +} + +wxDataFormat::wxDataFormat( wxDataType type ) +{ + if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE ); + SetType( type ); } wxDataFormat::wxDataFormat( const wxString &id ) { - m_type = wxDF_PRIVATE; - m_id = id; - m_hasAtom = FALSE; + if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE ); + SetId( id ); } wxDataFormat::wxDataFormat( wxDataFormat &format ) { + if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE ); m_type = format.GetType(); m_id = format.GetId(); m_hasAtom = TRUE; @@ -66,11 +61,12 @@ wxDataFormat::wxDataFormat( wxDataFormat &format ) wxDataFormat::wxDataFormat( const GdkAtom atom ) { + if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE ); m_hasAtom = TRUE; m_atom = atom; - if (m_atom == GDK_TARGET_STRING) + if (m_atom == g_textAtom) { m_type = wxDF_TEXT; } else @@ -89,7 +85,33 @@ wxDataFormat::wxDataFormat( const GdkAtom atom ) } } -int wxDataFormat::GetType() const +void wxDataFormat::SetType( wxDataType type ) +{ + m_type = type; + + if (m_type == wxDF_TEXT) + { + m_id = "STRING"; + } + else + if (m_type == wxDF_BITMAP) + { + m_id = "BITMAP"; + } + else + if (m_type == wxDF_FILENAME) + { + m_id = "file:ALL"; + } + else + { + wxFAIL_MSG( "invalid dataformat" ); + } + + m_hasAtom = FALSE; +} + +wxDataType wxDataFormat::GetType() const { return m_type; } @@ -114,8 +136,8 @@ GdkAtom wxDataFormat::GetAtom() if (m_type == wxDF_TEXT) { - m_atom = GDK_TARGET_STRING; - } + m_atom = g_textAtom; + } else if (m_type == wxDF_BITMAP) { @@ -231,7 +253,7 @@ void wxDataBroker::WriteData( wxDataFormat& format, void *dest ) const if (dobj->GetFormat().GetAtom() == format.GetAtom()) { - return dobj->WriteData( dest ); + dobj->WriteData( dest ); } node = node->Next(); @@ -246,21 +268,33 @@ IMPLEMENT_ABSTRACT_CLASS( wxDataObject, wxObject ) wxDataObject::wxDataObject() { - m_format = (wxDataFormat*) NULL; } wxDataObject::~wxDataObject() { - if (m_format) delete m_format; } -wxDataFormat &wxDataObject::GetFormat() const +wxDataFormat &wxDataObject::GetFormat() { - wxASSERT( m_format ); + return m_format; +} + +wxDataType wxDataObject::GetFormatType() const +{ + return m_format.GetType(); +} - return (*m_format); +wxString wxDataObject::GetFormatId() const +{ + return m_format.GetId(); } +GdkAtom wxDataObject::GetFormatAtom() const +{ + GdkAtom ret = ((wxDataObject*) this)->m_format.GetAtom(); + return ret; +} + // ---------------------------------------------------------------------------- // wxTextDataObject // ---------------------------------------------------------------------------- @@ -269,12 +303,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxTextDataObject, wxDataObject ) wxTextDataObject::wxTextDataObject() { - m_format = new wxDataFormat( wxDF_TEXT ); + m_format.SetType( wxDF_TEXT ); } wxTextDataObject::wxTextDataObject( const wxString& data ) { - m_format = new wxDataFormat( wxDF_TEXT ); + m_format.SetType( wxDF_TEXT ); m_data = data; } @@ -310,9 +344,9 @@ void wxTextDataObject::WriteString( const wxString &str, void *dest ) const IMPLEMENT_DYNAMIC_CLASS( wxFileDataObject, wxDataObject ) -wxFileDataObject::wxFileDataObject(void) +wxFileDataObject::wxFileDataObject() { - m_format = new wxDataFormat( wxDF_FILENAME ); + m_format.SetType( wxDF_FILENAME ); } void wxFileDataObject::AddFile( const wxString &file ) @@ -344,12 +378,12 @@ IMPLEMENT_DYNAMIC_CLASS( wxBitmapDataObject, wxDataObject ) wxBitmapDataObject::wxBitmapDataObject() { - m_format = new wxDataFormat( wxDF_BITMAP ); + m_format.SetType( wxDF_BITMAP ); } wxBitmapDataObject::wxBitmapDataObject( const wxBitmap& bitmap ) { - m_format = new wxDataFormat( wxDF_BITMAP ); + m_format.SetType( wxDF_BITMAP ); m_bitmap = bitmap; } @@ -390,7 +424,7 @@ wxPrivateDataObject::wxPrivateDataObject() m_id = "application/"; m_id += wxTheApp->GetAppName(); - m_format = new wxDataFormat( m_id ); + m_format.SetId( m_id ); m_size = 0; m_data = (char*) NULL; @@ -404,7 +438,7 @@ wxPrivateDataObject::~wxPrivateDataObject() void wxPrivateDataObject::SetId( const wxString& id ) { m_id = id; - m_format->SetId( m_id ); + m_format.SetId( m_id ); } wxString wxPrivateDataObject::GetId() const