diff options
Diffstat (limited to 'src/citra_qt/main.cpp')
-rw-r--r-- | src/citra_qt/main.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 3c2e19344..3c1ae8848 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -54,7 +54,7 @@ Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); - + setAcceptDrops(true); ui.setupUi(this); statusBar()->hide(); @@ -625,6 +625,40 @@ void GMainWindow::closeEvent(QCloseEvent* event) { QWidget::closeEvent(event); } +bool IsSingleFileDropEvent(QDropEvent* event) { + const QMimeData* mimeData = event->mimeData(); + return mimeData->hasUrls() && mimeData->urls().length() == 1; +} + +void GMainWindow::dropEvent(QDropEvent* event) { + if (IsSingleFileDropEvent(event) && ConfirmChangeGame()) { + const QMimeData* mimeData = event->mimeData(); + QString filename = mimeData->urls().at(0).toLocalFile(); + BootGame(filename.toStdString()); + } +} + +void GMainWindow::dragEnterEvent(QDragEnterEvent* event) { + if (IsSingleFileDropEvent(event)) { + event->acceptProposedAction(); + } +} + +void GMainWindow::dragMoveEvent(QDragMoveEvent* event) { + event->acceptProposedAction(); +} + +bool GMainWindow::ConfirmChangeGame() { + if (emu_thread == nullptr) + return true; + + auto answer = QMessageBox::question( + this, tr("Citra"), + tr("Are you sure you want to stop the emulation? Any unsaved progress will be lost."), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + return answer != QMessageBox::No; +} + #ifdef main #undef main #endif |