]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ole/dataobj.cpp
fixed bug #976725: "RETURN closes dialog instead of combobox dropdown" (applied fix...
[wxWidgets.git] / src / msw / ole / dataobj.cpp
index 83a2761aa0742aa46ca24c0b4d4cb6b7f78d6fff..48377785a47076133793e3b75a4004e440dabb16 100644 (file)
@@ -17,7 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "dataobj.h"
 #endif
 
     #pragma implementation "dataobj.h"
 #endif
 
@@ -157,8 +157,7 @@ wxString wxDataFormat::GetId() const
     wxCHECK_MSG( !IsStandard(), s,
                  wxT("name of predefined format cannot be retrieved") );
 
     wxCHECK_MSG( !IsStandard(), s,
                  wxT("name of predefined format cannot be retrieved") );
 
-    int len = ::GetClipboardFormatName(m_format, s.GetWriteBuf(max), max);
-    s.UngetWriteBuf();
+    int len = ::GetClipboardFormatName(m_format, wxStringBuffer(s, max), max);
 
     if ( !len )
     {
 
     if ( !len )
     {
@@ -724,7 +723,6 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format)
     switch ( format ) {
         case CF_TEXT:         return wxT("CF_TEXT");
         case CF_BITMAP:       return wxT("CF_BITMAP");
     switch ( format ) {
         case CF_TEXT:         return wxT("CF_TEXT");
         case CF_BITMAP:       return wxT("CF_BITMAP");
-        case CF_METAFILEPICT: return wxT("CF_METAFILEPICT");
         case CF_SYLK:         return wxT("CF_SYLK");
         case CF_DIF:          return wxT("CF_DIF");
         case CF_TIFF:         return wxT("CF_TIFF");
         case CF_SYLK:         return wxT("CF_SYLK");
         case CF_DIF:          return wxT("CF_DIF");
         case CF_TIFF:         return wxT("CF_TIFF");
@@ -735,9 +733,12 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format)
         case CF_RIFF:         return wxT("CF_RIFF");
         case CF_WAVE:         return wxT("CF_WAVE");
         case CF_UNICODETEXT:  return wxT("CF_UNICODETEXT");
         case CF_RIFF:         return wxT("CF_RIFF");
         case CF_WAVE:         return wxT("CF_WAVE");
         case CF_UNICODETEXT:  return wxT("CF_UNICODETEXT");
+#ifndef __WXWINCE__
+        case CF_METAFILEPICT: return wxT("CF_METAFILEPICT");
         case CF_ENHMETAFILE:  return wxT("CF_ENHMETAFILE");
         case CF_ENHMETAFILE:  return wxT("CF_ENHMETAFILE");
-        case CF_HDROP:        return wxT("CF_HDROP");
         case CF_LOCALE:       return wxT("CF_LOCALE");
         case CF_LOCALE:       return wxT("CF_LOCALE");
+        case CF_HDROP:        return wxT("CF_HDROP");
+#endif
 
         default:
             if ( !::GetClipboardFormatName(format, s_szBuf, WXSIZEOF(s_szBuf)) )
 
         default:
             if ( !::GetClipboardFormatName(format, s_szBuf, WXSIZEOF(s_szBuf)) )
@@ -760,9 +761,11 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format)
 // wxBitmapDataObject supports CF_DIB format
 // ----------------------------------------------------------------------------
 
 // wxBitmapDataObject supports CF_DIB format
 // ----------------------------------------------------------------------------
 
+// TODO: support CF_DIB under Windows CE as well
+
 size_t wxBitmapDataObject::GetDataSize() const
 {
 size_t wxBitmapDataObject::GetDataSize() const
 {
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     return wxDIB::ConvertFromBitmap(NULL, GetHbitmapOf(GetBitmap()));
 #else
     return 0;
     return wxDIB::ConvertFromBitmap(NULL, GetHbitmapOf(GetBitmap()));
 #else
     return 0;
@@ -771,7 +774,7 @@ size_t wxBitmapDataObject::GetDataSize() const
 
 bool wxBitmapDataObject::GetDataHere(void *buf) const
 {
 
 bool wxBitmapDataObject::GetDataHere(void *buf) const
 {
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     BITMAPINFO * const pbi = (BITMAPINFO *)buf;
 
     return wxDIB::ConvertFromBitmap(pbi, GetHbitmapOf(GetBitmap())) != 0;
     BITMAPINFO * const pbi = (BITMAPINFO *)buf;
 
     return wxDIB::ConvertFromBitmap(pbi, GetHbitmapOf(GetBitmap())) != 0;
@@ -782,7 +785,7 @@ bool wxBitmapDataObject::GetDataHere(void *buf) const
 
 bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf)
 {
 
 bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf)
 {
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     const BITMAPINFO * const pbmi = (const BITMAPINFO *)buf;
 
     HBITMAP hbmp = wxDIB::ConvertToBitmap(pbmi);
     const BITMAPINFO * const pbmi = (const BITMAPINFO *)buf;
 
     HBITMAP hbmp = wxDIB::ConvertToBitmap(pbmi);
@@ -999,8 +1002,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData)
         // +1 for terminating NUL
         len = ::DragQueryFile(hdrop, n, NULL, 0) + 1;
 
         // +1 for terminating NUL
         len = ::DragQueryFile(hdrop, n, NULL, 0) + 1;
 
-        UINT len2 = ::DragQueryFile(hdrop, n, str.GetWriteBuf(len), len);
-        str.UngetWriteBuf();
+        UINT len2 = ::DragQueryFile(hdrop, n, wxStringBuffer(str, len), len);
         m_filenames.Add(str);
 
         if ( len2 != len - 1 ) {
         m_filenames.Add(str);
 
         if ( len2 != len - 1 ) {
@@ -1035,13 +1037,13 @@ size_t wxFileDataObject::GetDataSize() const
         return 0;
 
     // inital size of DROPFILES struct + null byte
         return 0;
 
     // inital size of DROPFILES struct + null byte
-    size_t sz = sizeof(DROPFILES) + 1;
+    size_t sz = sizeof(DROPFILES) + (1 * sizeof(wxChar));
 
     size_t count = m_filenames.GetCount();
     for ( size_t i = 0; i < count; i++ )
     {
         // add filename length plus null byte
 
     size_t count = m_filenames.GetCount();
     for ( size_t i = 0; i < count; i++ )
     {
         // add filename length plus null byte
-        sz += m_filenames[i].Len() + 1;
+        sz += (m_filenames[i].Len() + 1) * sizeof(wxChar);
     }
 
     return sz;
     }
 
     return sz;
@@ -1080,7 +1082,7 @@ bool wxFileDataObject::GetDataHere(void *pData) const
     {
         // copy filename to pbuf and add null terminator
         size_t len = m_filenames[i].Len();
     {
         // copy filename to pbuf and add null terminator
         size_t len = m_filenames[i].Len();
-        memcpy(pbuf, m_filenames[i], len);
+        memcpy(pbuf, m_filenames[i], len*sizeof(wxChar));
         pbuf += len;
         *pbuf++ = wxT('\0');
     }
         pbuf += len;
         *pbuf++ = wxT('\0');
     }
@@ -1135,7 +1137,12 @@ protected:
 
         return TRUE;
     }
 
         return TRUE;
     }
+    virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format),
+                             void *buf) const
+        { return GetDataHere(buf); }
 #endif
 #endif
+
+    DECLARE_NO_COPY_CLASS(CFSTR_SHELLURLDataObject)
 };
 
 
 };
 
 
@@ -1171,8 +1178,7 @@ wxString wxURLDataObject::GetURL() const
 
     size_t len = m_dataObjectLast->GetDataSize();
 
 
     size_t len = m_dataObjectLast->GetDataSize();
 
-    m_dataObjectLast->GetDataHere(url.GetWriteBuf(len));
-    url.UngetWriteBuf();
+    m_dataObjectLast->GetDataHere(wxStringBuffer(url, len));
 
     return url;
 }
 
     return url;
 }
@@ -1218,6 +1224,8 @@ static const wxChar *GetTymedName(DWORD tymed)
 // wxDataObject
 // ----------------------------------------------------------------------------
 
 // wxDataObject
 // ----------------------------------------------------------------------------
 
+#if wxUSE_DATAOBJ
+
 wxDataObject::wxDataObject()
 {
 }
 wxDataObject::wxDataObject()
 {
 }
@@ -1239,3 +1247,5 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format)
 
 #endif
 
 
 #endif
 
+#endif
+