Dropping files into the editor shouldn't insert file:///...

On some desktop environments, dragging and dropping a file gives us
the url to the file in multiple mime types, including text/plain. This
causes the url to be inserted as text by default.

Work around this issue by explicitly ignoring drop events for the text
editor when they also come with urls.

Task-number: QTCREATORBUG-728
Reviewed-by: Friedemann Kleint
This commit is contained in:
Thorbjørn Lindeijer
2010-02-19 11:25:30 +01:00
parent e6df83b3ce
commit 6d9e3c8a8e
3 changed files with 14 additions and 3 deletions

View File

@@ -101,8 +101,6 @@ extern "C" void handleSigInt(int sig)
using namespace Core; using namespace Core;
using namespace Core::Internal; using namespace Core::Internal;
static const char *uriListMimeFormatC = "text/uri-list";
enum { debugMainWindow = 0 }; enum { debugMainWindow = 0 };
MainWindow::MainWindow() : MainWindow::MainWindow() :
@@ -358,7 +356,7 @@ static bool isDesktopFileManagerDrop(const QMimeData *d, QStringList *files = 0)
if (files) if (files)
files->clear(); files->clear();
// Extract dropped files from Mime data. // Extract dropped files from Mime data.
if (!d->hasFormat(QLatin1String(uriListMimeFormatC))) if (!d->hasUrls())
return false; return false;
const QList<QUrl> urls = d->urls(); const QList<QUrl> urls = d->urls();
if (urls.empty()) if (urls.empty())

View File

@@ -3388,6 +3388,17 @@ void BaseTextEditor::keyReleaseEvent(QKeyEvent *e)
QPlainTextEdit::keyReleaseEvent(e); QPlainTextEdit::keyReleaseEvent(e);
} }
void BaseTextEditor::dragEnterEvent(QDragEnterEvent *e)
{
// If the drag event contains URLs, we don't want to insert them as text
if (e->mimeData()->hasUrls()) {
e->ignore();
return;
}
QPlainTextEdit::dragEnterEvent(e);
}
void BaseTextEditor::extraAreaLeaveEvent(QEvent *) void BaseTextEditor::extraAreaLeaveEvent(QEvent *)
{ {
// fake missing mouse move event from Qt // fake missing mouse move event from Qt

View File

@@ -530,6 +530,8 @@ protected:
void leaveEvent(QEvent *); void leaveEvent(QEvent *);
void keyReleaseEvent(QKeyEvent *); void keyReleaseEvent(QKeyEvent *);
void dragEnterEvent(QDragEnterEvent *e);
public: public:
// Returns true if key triggers an indent. // Returns true if key triggers an indent.
virtual bool isElectricCharacter(const QChar &ch) const; virtual bool isElectricCharacter(const QChar &ch) const;