-    if (!m_hasAtom)
-    {
-        m_hasAtom = TRUE;
-       
-       if (m_type == wxDF_TEXT)
-       {
-            m_atom = g_textAtom;
-        }
-       else
-        if (m_type == wxDF_BITMAP)
-        {
-            m_atom = GDK_TARGET_BITMAP;
-        } 
-       else
-        if (m_type == wxDF_PRIVATE)
-        {
-            m_atom = gdk_atom_intern( MBSTRINGCAST m_id.mbc_str(), FALSE );
-        } 
-       else
-       if (m_type == wxDF_FILENAME)
-       {
-           m_atom = gdk_atom_intern( "file:ALL", FALSE );
-       } 
-       else
-       {
-           m_hasAtom = FALSE;
-           m_atom = (GdkAtom) 0;
-       }
-    }
-    
-    return m_atom;
+    PrepareFormats();
+    m_type = wxDF_PRIVATE;
+    m_format = gdk_atom_intern( id.ToAscii(), FALSE );
+}
+
+void wxDataFormat::PrepareFormats()
+{
+    // VZ: GNOME included in RedHat 6.1 uses the MIME types below and not the
+    //     atoms STRING and file:ALL as the old code was, but normal X apps
+    //     use STRING for text selection when transfering the data via
+    //     clipboard, for example, so do use STRING for now (GNOME apps will
+    //     probably support STRING as well for compatibility anyhow), but use
+    //     text/uri-list for file dnd because compatibility is not important
+    //     here (with whom?)
+    if (!g_textAtom)
+#if wxUSE_UNICODE
+        g_textAtom = gdk_atom_intern( "UTF8_STRING", FALSE );
+        g_altTextAtom = gdk_atom_intern( "STRING", FALSE );
+#else
+        g_textAtom = gdk_atom_intern( "STRING" /* "text/plain" */, FALSE );
+#endif
+    if (!g_pngAtom)
+        g_pngAtom = gdk_atom_intern( "image/png", FALSE );
+    if (!g_fileAtom)
+        g_fileAtom = gdk_atom_intern( "text/uri-list", FALSE );