From a729568a519b43a430357c261ca31f7ae3d8492b Mon Sep 17 00:00:00 2001 From: Thomas Roth Date: Wed, 6 Dec 2017 17:25:07 +0100 Subject: [PATCH] Allow file selection by drag & drop (#173) --- src/dialogs/NewFileDialog.cpp | 22 ++++++++++++++++++++++ src/dialogs/NewFileDialog.h | 4 ++++ 2 files changed, 26 insertions(+) diff --git a/src/dialogs/NewFileDialog.cpp b/src/dialogs/NewFileDialog.cpp index 3d23d4a1..a51acc78 100644 --- a/src/dialogs/NewFileDialog.cpp +++ b/src/dialogs/NewFileDialog.cpp @@ -65,6 +65,7 @@ NewFileDialog::NewFileDialog(QWidget *parent) : { ui->setupUi(this); setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint)); + setAcceptDrops(true); ui->recentsListWidget->addAction(ui->actionRemove_item); ui->recentsListWidget->addAction(ui->actionClear_all); @@ -218,6 +219,27 @@ void NewFileDialog::on_actionClear_all_triggered() ui->newFileEdit->clear(); } +void NewFileDialog::dragEnterEvent(QDragEnterEvent *event) +{ + // Accept drag & drop events only if they provide a URL + if(event->mimeData()->hasUrls()) + { + event->acceptProposedAction(); + } +} + +void NewFileDialog::dropEvent(QDropEvent *event) +{ + // Accept drag & drop events only if they provide a URL + if(event->mimeData()->urls().count() == 0) { + qWarning() << "No URL in drop event, ignoring it."; + return; + } + + event->acceptProposedAction(); + loadFile(event->mimeData()->urls().first().path()); +} + bool NewFileDialog::fillRecentFilesList() { // Fill list with recent opened files diff --git a/src/dialogs/NewFileDialog.h b/src/dialogs/NewFileDialog.h index 4258daa7..435e730a 100644 --- a/src/dialogs/NewFileDialog.h +++ b/src/dialogs/NewFileDialog.h @@ -38,6 +38,10 @@ private slots: void on_actionRemove_item_triggered(); void on_actionClear_all_triggered(); +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + private: std::unique_ptr ui;