#endif // wxUSE_METAFILE
void OnCopyFiles(wxCommandEvent& event);
+ void OnCopyURL(wxCommandEvent& event);
void OnUsePrimary(wxCommandEvent& event);
Menu_PasteBitmap,
Menu_PasteMFile,
Menu_CopyFiles,
+ Menu_CopyURL,
Menu_UsePrimary,
Menu_Shape_New = 500,
Menu_Shape_Edit,
EVT_MENU(Menu_PasteMFile, DnDFrame::OnPasteMetafile)
#endif // wxUSE_METAFILE
EVT_MENU(Menu_CopyFiles, DnDFrame::OnCopyFiles)
+ EVT_MENU(Menu_CopyURL, DnDFrame::OnCopyURL)
EVT_MENU(Menu_UsePrimary, DnDFrame::OnUsePrimary)
EVT_UPDATE_UI(Menu_DragMoveDef, DnDFrame::OnUpdateUIMoveByDefault)
#endif // wxUSE_METAFILE
clip_menu->AppendSeparator();
clip_menu->Append(Menu_CopyFiles, wxT("Copy &files\tCtrl-F"));
+ clip_menu->Append(Menu_CopyURL, wxT("Copy &URL\tCtrl-U"));
clip_menu->AppendSeparator();
clip_menu->AppendCheckItem(Menu_UsePrimary, wxT("Use &primary selection\tCtrl-P"));
#endif // MSW/!MSW
}
+void DnDFrame::OnCopyURL(wxCommandEvent& WXUNUSED(event))
+{
+ // Just hard code it for now, we could ask the user but the point here is
+ // to test copying URLs, it doesn't really matter what it is.
+ const wxString url("http://www.wxwidgets.org/");
+
+ wxClipboardLocker locker;
+ if ( !!locker && wxTheClipboard->AddData(new wxURLDataObject(url)) )
+ {
+ wxLogStatus(this, "Copied URL \"%s\" to %s.",
+ url,
+ GetMenuBar()->IsChecked(Menu_UsePrimary)
+ ? "primary selection"
+ : "clipboard");
+ }
+ else
+ {
+ wxLogError("Failed to copy URL.");
+ }
+}
+
// ---------------------------------------------------------------------------
// text clipboard
// ---------------------------------------------------------------------------
// ----------------------------------------------------------------------------
wxURLDataObject::wxURLDataObject(const wxString& url) :
- wxDataObjectSimple( wxDataFormat( gdk_atom_intern("text/x-moz-url",FALSE) ) )
+ wxDataObjectSimple( wxDataFormat( g_fileAtom ) )
{
m_url = url;
}
size_t wxURLDataObject::GetDataSize() const
{
- if (m_url.empty())
- return 0;
-
- return 2*m_url.Len()+2;
+ return strlen(m_url.utf8_str()) + 1;
}
bool wxURLDataObject::GetDataHere(void *buf) const
{
- if (m_url.empty())
- return false;
-
- wxCSConv conv( "UCS2" );
- conv.FromWChar( (char*) buf, 2*m_url.Len()+2, m_url.wc_str() );
+ strcpy(static_cast<char*>(buf), m_url.utf8_str());
return true;
}
- // copy data from buffer to our data
bool wxURLDataObject::SetData(size_t len, const void *buf)
{
- if (len == 0)
- {
- m_url = wxEmptyString;
- return false;
- }
-
- wxCSConv conv( "UCS2" );
- wxWCharBuffer res = conv.cMB2WC( (const char*) buf );
- m_url = res;
- int pos = m_url.Find( '\n' );
- if (pos != wxNOT_FOUND)
- m_url.Remove( pos, m_url.Len() - pos );
+ m_url = wxString::FromUTF8(static_cast<const char*>(buf), len);
return true;
}