]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/clipbrd.cpp
rewrite to avoid unnecessary redraws
[wxWidgets.git] / src / motif / clipbrd.cpp
index 84dca0b0f0891ab83f08108fe8e6724c933c12de..41afb324d308b393539aa8c0419f494b445858d6 100644 (file)
 #include "wx/clipbrd.h"
 #include "wx/dataobj.h"
 
+#ifdef __VMS__
+#pragma message disable nosimpint
+#endif
 #include <Xm/Xm.h>
 #include <Xm/CutPaste.h>
+#ifdef __VMS__
+#pragma message enable nosimpint
+#endif
 
 #include <string.h>
 
-#if !USE_SHARED_LIBRARY
 // IMPLEMENT_DYNAMIC_CLASS(wxClipboard, wxObject)
 // IMPLEMENT_ABSTRACT_CLASS(wxClipboardClient, wxObject)
-#endif
 
 static bool gs_clipboardIsOpen = FALSE;
 
@@ -85,7 +89,7 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
         window = XtWindow( (Widget) wxTheApp->GetTopWindow()->GetTopWidget() );
 
     int success = XmClipboardRetrieve((Display*) wxGetDisplay(),
-      window, "TEXT(", (XtPointer) 0, 0, & numBytes, & privateId) ;
+      window, "TEXT", (XtPointer) 0, 0, & numBytes, & privateId) ;
 
     // Assume only text is supported. If we have anything at all,
     // or the clipboard is locked so we're not sure, we say we support it.
@@ -95,7 +99,7 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
         return TRUE;
 }
 
-bool wxSetClipboardData(wxDataFormat dataFormat, wxObject *obj, int width, int height)
+bool wxSetClipboardData(wxDataFormat dataFormat, wxObject *obj, int WXUNUSED(width), int WXUNUSED(height))
 {
     if (dataFormat != wxDF_TEXT)
         return FALSE;
@@ -128,7 +132,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, wxObject *obj, int width, int h
       XmClipboardCopy((Display*) wxGetDisplay(),
        window, 
        itemId,
-       "TEXT(",
+       "TEXT",
        (XtPointer) data,
        strlen(data) + 1,
        0,
@@ -171,7 +175,7 @@ wxObject *wxGetClipboardData(wxDataFormat dataFormat, long *len)
        }
         result = XmClipboardRetrieve((Display*) wxGetDisplay(),
           window,
-          "TEXT(",
+          "TEXT",
           (XtPointer) data,
           currentDataSize,
           &numBytes,
@@ -213,18 +217,18 @@ wxDataFormat  wxEnumClipboardFormats(wxDataFormat dataFormat)
        return wxDF_INVALID;
 }
 
-wxDataFormat  wxRegisterClipboardFormat(char *formatName)
+wxDataFormat  wxRegisterClipboardFormat(char *WXUNUSED(formatName))
 {
     // Not supported
     return (wxDataFormat) wxDF_INVALID;
 }
 
-bool wxGetClipboardFormatName(wxDataFormat dataFormat, char *formatName, int maxCount)
+bool wxGetClipboardFormatName(wxDataFormat dataFormat, char *formatName, int WXUNUSED(maxCount))
 {
     // Only wxDF_TEXT supported
     if (dataFormat == wxDF_TEXT)
     {
-       strcpy(formatName, "TEXT(");
+       strcpy(formatName, "TEXT");
        return TRUE;
     }
     else
@@ -237,8 +241,6 @@ bool wxGetClipboardFormatName(wxDataFormat dataFormat, char *formatName, int max
 
 IMPLEMENT_DYNAMIC_CLASS(wxClipboard,wxObject)
 
-wxClipboard* wxTheClipboard = (wxClipboard*) NULL;
-
 wxClipboard::wxClipboard()
 {
     m_open = FALSE;
@@ -275,30 +277,36 @@ bool wxClipboard::SetData( wxDataObject *data )
     wxCHECK_MSG( data, FALSE, "data is invalid" );
     wxCHECK_MSG( m_open, FALSE, "clipboard not open" );
 
-    switch (data->GetFormat())
+    Clear();
+
+    return AddData( data );
+}
+
+bool wxClipboard::AddData( wxDataObject *data )
+{
+    wxCHECK_MSG( data, FALSE, "data is invalid" );
+    wxCHECK_MSG( m_open, FALSE, "clipboard not open" );
+
+    wxDataFormat::NativeFormat format = data->GetPreferredFormat().GetType();
+    switch ( format )
     {
         case wxDF_TEXT:
         case wxDF_OEMTEXT:
         {
             wxTextDataObject* textDataObject = (wxTextDataObject*) data;
             wxString str(textDataObject->GetText());
-            return wxSetClipboardData(data->GetFormat(), (wxObject*) (const char*) str);
-            break;
+            return wxSetClipboardData(format, (wxObject*) (const char*) str);
         }
-/*
+#if 0
         case wxDF_BITMAP:
         case wxDF_DIB:
         {
             wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject*) data;
             wxBitmap bitmap(bitmapDataObject->GetBitmap());
-            return wxSetClipboardData(data->GetFormat(), & bitmap);
+            return wxSetClipboardData(data->GetType(), & bitmap);
             break;
         }
-*/
-        default:
-        {
-            return FALSE;
-        }
+#endif // 0
     }
   
     return FALSE;
@@ -312,25 +320,26 @@ void wxClipboard::Close()
     wxCloseClipboard();
 }
 
-bool wxClipboard::IsSupported( wxDataFormat format)
+bool wxClipboard::IsSupported( const wxDataFormat& format)
 {
     return wxIsClipboardFormatAvailable(format);
 }
 
-bool wxClipboard::GetData( wxDataObject *data )
+bool wxClipboard::GetData( wxDataObjectdata )
 {
     wxCHECK_MSG( m_open, FALSE, "clipboard not open" );
     
-    switch (data->GetFormat())
+    wxDataFormat::NativeFormat format = data.GetPreferredFormat().GetType();
+    switch ( format )
     {
         case wxDF_TEXT:
         case wxDF_OEMTEXT:
         {
-            wxTextDataObject* textDataObject = (wxTextDataObject*) data;
-            char* s = (char*) wxGetClipboardData(data->GetFormat());
+            wxTextDataObject& textDataObject = (wxTextDataObject &) data;
+            char* s = (char*) wxGetClipboardData(format);
             if (s)
             {
-                textDataObject->SetText(s);
+                textDataObject.SetText(s);
                 delete[] s;
                 return TRUE;
             }
@@ -343,7 +352,7 @@ bool wxClipboard::GetData( wxDataObject *data )
         case wxDF_DIB:
         {
             wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject*) data;
-            wxBitmap* bitmap = (wxBitmap*) wxGetClipboardData(data->GetFormat());
+            wxBitmap* bitmap = (wxBitmap*) wxGetClipboardData(data->GetType());
             if (bitmap)
             {
                 bitmapDataObject->SetBitmap(* bitmap);
@@ -363,26 +372,6 @@ bool wxClipboard::GetData( wxDataObject *data )
     return FALSE;
 }
 
-//-----------------------------------------------------------------------------
-// wxClipboardModule
-//-----------------------------------------------------------------------------
-
-IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule,wxModule)
-
-bool wxClipboardModule::OnInit()
-{
-    wxTheClipboard = new wxClipboard();
-  
-    return TRUE;
-}
-
-void wxClipboardModule::OnExit()
-{
-    if (wxTheClipboard) delete wxTheClipboard;
-    wxTheClipboard = (wxClipboard*) NULL;
-}
-
-
 #if 0
 
 /*
@@ -413,7 +402,7 @@ wxClipboard::~wxClipboard()
 
 static int FormatStringToID(char *str)
 {
-    if (!strcmp(str, "TEXT("))
+    if (!strcmp(str, "TEXT"))
         return wxDF_TEXT;
     
     return wxRegisterClipboardFormat(str);
@@ -499,7 +488,7 @@ char *wxClipboard::GetClipboardString(long time)
     char *str;
     long length;
     
-    str = GetClipboardData("TEXT(", &length, time);
+    str = GetClipboardData("TEXT", &length, time);
     if (!str) {
         str = new char[1];
         *str = 0;
@@ -516,7 +505,7 @@ char *wxClipboard::GetClipboardData(char *format, long *length, long time)
         else
             return NULL;
     } else if (cbString) {
-        if (!strcmp(format, "TEXT("))
+        if (!strcmp(format, "TEXT"))
             return copystring(cbString);
         else
             return NULL;