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:
|
wxGTK:
|
||||||
|
|
||||||
- Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
|
- Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
|
||||||
|
- Improve drag-and-drop of URLs.
|
||||||
|
|
||||||
wxMSW:
|
wxMSW:
|
||||||
|
|
||||||
|
@@ -227,6 +227,7 @@ public:
|
|||||||
#endif // wxUSE_METAFILE
|
#endif // wxUSE_METAFILE
|
||||||
|
|
||||||
void OnCopyFiles(wxCommandEvent& event);
|
void OnCopyFiles(wxCommandEvent& event);
|
||||||
|
void OnCopyURL(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnUsePrimary(wxCommandEvent& event);
|
void OnUsePrimary(wxCommandEvent& event);
|
||||||
|
|
||||||
@@ -816,6 +817,7 @@ enum
|
|||||||
Menu_PasteBitmap,
|
Menu_PasteBitmap,
|
||||||
Menu_PasteMFile,
|
Menu_PasteMFile,
|
||||||
Menu_CopyFiles,
|
Menu_CopyFiles,
|
||||||
|
Menu_CopyURL,
|
||||||
Menu_UsePrimary,
|
Menu_UsePrimary,
|
||||||
Menu_Shape_New = 500,
|
Menu_Shape_New = 500,
|
||||||
Menu_Shape_Edit,
|
Menu_Shape_Edit,
|
||||||
@@ -844,6 +846,7 @@ BEGIN_EVENT_TABLE(DnDFrame, wxFrame)
|
|||||||
EVT_MENU(Menu_PasteMFile, DnDFrame::OnPasteMetafile)
|
EVT_MENU(Menu_PasteMFile, DnDFrame::OnPasteMetafile)
|
||||||
#endif // wxUSE_METAFILE
|
#endif // wxUSE_METAFILE
|
||||||
EVT_MENU(Menu_CopyFiles, DnDFrame::OnCopyFiles)
|
EVT_MENU(Menu_CopyFiles, DnDFrame::OnCopyFiles)
|
||||||
|
EVT_MENU(Menu_CopyURL, DnDFrame::OnCopyURL)
|
||||||
EVT_MENU(Menu_UsePrimary, DnDFrame::OnUsePrimary)
|
EVT_MENU(Menu_UsePrimary, DnDFrame::OnUsePrimary)
|
||||||
|
|
||||||
EVT_UPDATE_UI(Menu_DragMoveDef, DnDFrame::OnUpdateUIMoveByDefault)
|
EVT_UPDATE_UI(Menu_DragMoveDef, DnDFrame::OnUpdateUIMoveByDefault)
|
||||||
@@ -974,6 +977,7 @@ DnDFrame::DnDFrame()
|
|||||||
#endif // wxUSE_METAFILE
|
#endif // wxUSE_METAFILE
|
||||||
clip_menu->AppendSeparator();
|
clip_menu->AppendSeparator();
|
||||||
clip_menu->Append(Menu_CopyFiles, wxT("Copy &files\tCtrl-F"));
|
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->AppendSeparator();
|
||||||
clip_menu->AppendCheckItem(Menu_UsePrimary, wxT("Use &primary selection\tCtrl-P"));
|
clip_menu->AppendCheckItem(Menu_UsePrimary, wxT("Use &primary selection\tCtrl-P"));
|
||||||
|
|
||||||
@@ -1485,6 +1489,27 @@ void DnDFrame::OnCopyFiles(wxCommandEvent& WXUNUSED(event))
|
|||||||
#endif // MSW/!MSW
|
#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
|
// text clipboard
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
@@ -421,45 +421,26 @@ void wxBitmapDataObject::DoConvertToPng()
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxURLDataObject::wxURLDataObject(const wxString& url) :
|
wxURLDataObject::wxURLDataObject(const wxString& url) :
|
||||||
wxDataObjectSimple( wxDataFormat( gdk_atom_intern("text/x-moz-url",FALSE) ) )
|
wxDataObjectSimple( wxDataFormat( g_fileAtom ) )
|
||||||
{
|
{
|
||||||
m_url = url;
|
m_url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t wxURLDataObject::GetDataSize() const
|
size_t wxURLDataObject::GetDataSize() const
|
||||||
{
|
{
|
||||||
if (m_url.empty())
|
return strlen(m_url.utf8_str()) + 1;
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 2*m_url.Len()+2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxURLDataObject::GetDataHere(void *buf) const
|
bool wxURLDataObject::GetDataHere(void *buf) const
|
||||||
{
|
{
|
||||||
if (m_url.empty())
|
strcpy(static_cast<char*>(buf), m_url.utf8_str());
|
||||||
return false;
|
|
||||||
|
|
||||||
wxCSConv conv( "UCS2" );
|
|
||||||
conv.FromWChar( (char*) buf, 2*m_url.Len()+2, m_url.wc_str() );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy data from buffer to our data
|
|
||||||
bool wxURLDataObject::SetData(size_t len, const void *buf)
|
bool wxURLDataObject::SetData(size_t len, const void *buf)
|
||||||
{
|
{
|
||||||
if (len == 0)
|
m_url = wxString::FromUTF8(static_cast<const char*>(buf), len);
|
||||||
{
|
|
||||||
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 );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user