From: Vadim Zeitlin Date: Wed, 3 Nov 1999 01:13:04 +0000 (+0000) Subject: readded clipboard support to richedit sample and fixed a fatal bug in X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4e16881a084fda0bb6672b71dfe3c12eaa9e6a37 readded clipboard support to richedit sample and fixed a fatal bug in wxCustomDataObject (uninitialized m_data) which this allowed to discover git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4330 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/samples/richedit/wxllist.cpp b/samples/richedit/wxllist.cpp index 8391d67407..ac6046b184 100644 --- a/samples/richedit/wxllist.cpp +++ b/samples/richedit/wxllist.cpp @@ -2844,9 +2844,8 @@ wxLayoutList::GetSelection(wxLayoutDataObject *wxlo, bool invalidate) exp->content.object->Write(string); delete exp; } -#if 0 // FIXME: DnD/Clipboard API has changed, what should this be? - wxlo->SetData(string.c_str(), string.Length()+1); -#endif + + wxlo->SetLayoutData(string); } return llist; } diff --git a/samples/richedit/wxllist.h b/samples/richedit/wxllist.h index 39fe178646..fac6223d86 100644 --- a/samples/richedit/wxllist.h +++ b/samples/richedit/wxllist.h @@ -1218,13 +1218,15 @@ private: class wxLayoutDataObject : public wxCustomDataObject { public: - wxLayoutDataObject(void) + wxLayoutDataObject() { -#if 0 // TODO: No longer exists, what should we do instead? - SetId("application/wxlayoutlist"); -#endif - //m_format.SetAtom((GdkAtom) 222222); + SetFormat("application/wxlayoutlist"); } + + // type safe wrappers + void SetLayoutData(const wxString& text) + { SetData(text.length() + 1, text.c_str()); } + const char *GetLayoutData() const { return (const char *)GetData(); } }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * diff --git a/samples/richedit/wxlwindow.cpp b/samples/richedit/wxlwindow.cpp index 43ec7781c4..415ac983ea 100644 --- a/samples/richedit/wxlwindow.cpp +++ b/samples/richedit/wxlwindow.cpp @@ -1080,21 +1080,19 @@ wxLayoutWindow::Paste(bool primary) // Read some text if (wxTheClipboard->Open()) { -#if __WXGTK__ if(primary) wxTheClipboard->UsePrimarySelection(); -#endif -#if wxUSE_PRIVATE_CLIPBOARD_FORMAT + wxLayoutDataObject wxldo; if (wxTheClipboard->IsSupported( wxldo.GetFormat() )) { - wxTheClipboard->GetData(&wxldo); - { - } - //FIXME: missing functionality m_llist->Insert(wxldo.GetList()); + wxTheClipboard->GetData(wxldo); + + // now we can access the data we had put into wxLayoutDataObject in + // wxLayoutList::GetSelection by calling its GetLayoutData() - the + // trouble is that I don't know what to do with it! (VZ) } else -#endif { wxTextDataObject data; if (wxTheClipboard->IsSupported( data.GetFormat() )) @@ -1120,8 +1118,8 @@ wxLayoutWindow::Copy(bool invalidate) m_llist->EndSelection(); } - wxLayoutDataObject wldo; - wxLayoutList *llist = m_llist->GetSelection(&wldo, invalidate); + wxLayoutDataObject *wldo = new wxLayoutDataObject; + wxLayoutList *llist = m_llist->GetSelection(wldo, invalidate); if(! llist) return FALSE; // Export selection as text: @@ -1149,11 +1147,12 @@ wxLayoutWindow::Copy(bool invalidate) if (wxTheClipboard->Open()) { - wxTextDataObject *data = new wxTextDataObject( text ); - bool rc = wxTheClipboard->SetData( data ); -#if wxUSE_PRIVATE_CLIPBOARD_FORMAT - rc |= wxTheClipboard->AddData( &wldo ); -#endif + wxDataObjectComposite *dobj = new wxDataObjectComposite; + dobj->Add(new wxTextDataObject(text)); + dobj->Add(wldo); + + bool rc = wxTheClipboard->SetData(dobj); + wxTheClipboard->Close(); return rc; } diff --git a/src/common/dobjcmn.cpp b/src/common/dobjcmn.cpp index 53a4041c7b..708d9e36ba 100644 --- a/src/common/dobjcmn.cpp +++ b/src/common/dobjcmn.cpp @@ -232,9 +232,9 @@ void wxFileDataObjectBase::SetFilenames(const wxChar* filenames) wxCustomDataObject::wxCustomDataObject(const wxDataFormat& format) : wxDataObjectSimple(format) { + m_data = (void *)NULL; } - wxCustomDataObject::~wxCustomDataObject() { Free();