]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/dataobj.cpp
Now wxYield() calls wxApp::ProcessIdle() which also
[wxWidgets.git] / src / gtk1 / dataobj.cpp
index e6b756326a8ad02f6ec27e4388f5a075d49b0fa2..cbcce96e5f9c9799f6522887ddb364324671f6fb 100644 (file)
 
 #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 wxChar *id )
+{
+    if (!g_textAtom) g_textAtom = gdk_atom_intern( "STRING", FALSE );
+    SetId( id );
 }
 
 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 +67,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
@@ -82,14 +84,40 @@ wxDataFormat::wxDataFormat( const GdkAtom atom )
         m_type = wxDF_PRIVATE;
        m_id = gdk_atom_name( m_atom );
        
-       if (m_id == "file:ALL")
+       if (m_id == _T("file:ALL"))
        {
            m_type = wxDF_FILENAME;
        }
     }
 }
 
-int wxDataFormat::GetType() const
+void wxDataFormat::SetType( wxDataType type )
+{
+    m_type = type;
+    
+    if (m_type == wxDF_TEXT)
+    {
+        m_id = _T("STRING");
+    } 
+    else
+    if (m_type == wxDF_BITMAP)
+    {
+        m_id = _T("BITMAP");
+    } 
+    else
+    if (m_type == wxDF_FILENAME)
+    {
+        m_id = _T("file:ALL");
+    }
+    else
+    {
+       wxFAIL_MSG( _T("invalid dataformat") );
+    }
+    
+    m_hasAtom = FALSE;
+}
+  
+wxDataType wxDataFormat::GetType() const
 {
     return m_type;
 }
@@ -99,7 +127,7 @@ wxString wxDataFormat::GetId() const
     return m_id;
 }
 
-void wxDataFormat::SetId( const wxString &id )
+void wxDataFormat::SetId( const wxChar *id )
 {
     m_type = wxDF_PRIVATE;
     m_id = id;
@@ -114,8 +142,8 @@ GdkAtom wxDataFormat::GetAtom()
        
        if (m_type == wxDF_TEXT)
        {
-            m_atom = GDK_TARGET_STRING;
-        } 
+            m_atom = g_textAtom;
+        }
        else
         if (m_type == wxDF_BITMAP)
         {
@@ -124,7 +152,7 @@ GdkAtom wxDataFormat::GetAtom()
        else
         if (m_type == wxDF_PRIVATE)
         {
-            m_atom = gdk_atom_intern( WXSTRINGCAST( m_id ), FALSE );
+            m_atom = gdk_atom_intern( MBSTRINGCAST m_id.mbc_str(), FALSE );
         } 
        else
        if (m_type == wxDF_FILENAME)
@@ -231,7 +259,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 +274,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;
+}
 
-    return (*m_format);
+wxDataType wxDataObject::GetFormatType() const
+{
+    return m_format.GetType();
+}
+
+wxString wxDataObject::GetFormatId() const
+{
+    return m_format.GetId();
 }
 
+GdkAtom wxDataObject::GetFormatAtom() const
+{
+    GdkAtom ret = ((wxDataObject*) this)->m_format.GetAtom();
+    return ret;
+}  
+
 // ----------------------------------------------------------------------------
 // wxTextDataObject
 // ----------------------------------------------------------------------------
@@ -269,12 +309,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;
 }
@@ -301,7 +341,7 @@ size_t wxTextDataObject::GetSize() const
 
 void wxTextDataObject::WriteString( const wxString &str, void *dest ) const
 {
-    memcpy( dest, m_data.c_str(), GetSize() );
+    memcpy( dest, str.mb_str(), str.Len()+1 );
 }
     
 // ----------------------------------------------------------------------------
@@ -310,15 +350,15 @@ 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 )
 { 
     m_files += file; 
-    m_files += (char)0; 
+    m_files += (wxChar)0; 
 }
     
 wxString wxFileDataObject::GetFiles() const
@@ -328,7 +368,7 @@ wxString wxFileDataObject::GetFiles() const
     
 void wxFileDataObject::WriteData( void *dest ) const
 {
-    memcpy( dest, m_files.c_str(), GetSize() );
+    memcpy( dest, m_files.mbc_str(), GetSize() );
 }
  
 size_t wxFileDataObject::GetSize() const
@@ -344,12 +384,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;
 }
@@ -387,10 +427,10 @@ IMPLEMENT_DYNAMIC_CLASS( wxPrivateDataObject, wxDataObject )
 
 wxPrivateDataObject::wxPrivateDataObject() 
 { 
-    m_id = "application/";
+    m_id = _T("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 +444,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