+ // some broken programs (testdnd GTK+ sample!) omit the trailing
+ // "\r\n", so check for '\0' explicitly here instead of doing it in
+ // the loop statement to account for it
+ if ( (*p == '\r' && *(p+1) == '\n') || !*p )
+ {
+ size_t lenPrefix = 5; // strlen("file:")
+ if ( filename.Left(lenPrefix).MakeLower() == wxT("file:") )
+ {
+ // sometimes the syntax is "file:filename", sometimes it's
+ // URL-like: "file://filename" - deal with both
+ if ( filename[lenPrefix] == wxT('/') &&
+ filename[lenPrefix + 1] == wxT('/') )
+ {
+ // skip the slashes
+ lenPrefix += 2;
+ }
+
+ AddFile(wxURI::Unescape(filename.c_str() + lenPrefix));
+ filename.Empty();
+ }
+ else
+ {
+ wxLogDebug(wxT("Unsupported URI '%s' in wxFileDataObject"),
+ filename.c_str());
+ }
+
+ if ( !*p )
+ break;
+
+ // skip '\r'
+ p++;
+ }
+ else
+ {
+ filename += *p;
+ }