Use text/uri-list instead of x-moz-url in wxGTK wxURLDataObject.
The standard exchange format for URLs is text/uri-list and not the deprecated and Firefox-specific x-moz-url, support for which was moreover implemented incorrectly anyhow. Also add an example of copying URLs to the dnd sample. See https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types for more information. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72159 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -535,6 +535,7 @@ All (GUI):
|
||||
wxGTK:
|
||||
|
||||
- Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
|
||||
- Improve drag-and-drop of URLs.
|
||||
|
||||
wxMSW:
|
||||
|
||||
|
@@ -227,6 +227,7 @@ public:
|
||||
#endif // wxUSE_METAFILE
|
||||
|
||||
void OnCopyFiles(wxCommandEvent& event);
|
||||
void OnCopyURL(wxCommandEvent& event);
|
||||
|
||||
void OnUsePrimary(wxCommandEvent& event);
|
||||
|
||||
@@ -816,6 +817,7 @@ enum
|
||||
Menu_PasteBitmap,
|
||||
Menu_PasteMFile,
|
||||
Menu_CopyFiles,
|
||||
Menu_CopyURL,
|
||||
Menu_UsePrimary,
|
||||
Menu_Shape_New = 500,
|
||||
Menu_Shape_Edit,
|
||||
@@ -844,6 +846,7 @@ BEGIN_EVENT_TABLE(DnDFrame, wxFrame)
|
||||
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)
|
||||
@@ -974,6 +977,7 @@ DnDFrame::DnDFrame()
|
||||
#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"));
|
||||
|
||||
@@ -1485,6 +1489,27 @@ void DnDFrame::OnCopyFiles(wxCommandEvent& WXUNUSED(event))
|
||||
#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
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@@ -421,45 +421,26 @@ void wxBitmapDataObject::DoConvertToPng()
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user