aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadia Holmquist Pedersen <nadia@nhp.sh>2021-08-23 10:27:03 +0200
committerNadia Holmquist Pedersen <nadia@nhp.sh>2021-08-23 10:27:03 +0200
commit6ad0e8d61a3511494dd2fc1c8ffa1ab051ea273c (patch)
treed7cf38dc8fc69798b904cab8d66fe92e39410823
parent883fceb6ce99b9c8abcd698ea73663c8c3ded0e0 (diff)
macOS: Allow opening ROMs with melonDS from Finder.
-rw-r--r--melon.plist.in12
-rw-r--r--src/frontend/qt_sdl/main.cpp19
-rw-r--r--src/frontend/qt_sdl/main.h14
3 files changed, 41 insertions, 4 deletions
diff --git a/melon.plist.in b/melon.plist.in
index 5b774a6..1057c47 100644
--- a/melon.plist.in
+++ b/melon.plist.in
@@ -22,5 +22,17 @@
<true/>
<key>NSMicrophoneUsageDescription</key>
<string>We need microphone access so you can use the emulated DS microphone</string>
+ <key>CFBundleDocumentTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>nds</string>
+ <string>srl</string>
+ </array>
+ <key>CFBundleTypeRole</key>
+ <string>Viewer</string>
+ </dict>
+ </array>
</dict>
</plist>
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 272df3c..e2ee89a 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -2726,7 +2726,23 @@ void emuStop()
OSD::AddMessage(0xFFC040, "Shutdown");
}
+MelonApplication::MelonApplication(int& argc, char** argv)
+ : QApplication(argc, argv)
+{
+ setWindowIcon(QIcon(":/melon-icon"));
+}
+bool MelonApplication::event(QEvent *event)
+{
+ if (event->type() == QEvent::FileOpen)
+ {
+ QFileOpenEvent *openEvent = static_cast<QFileOpenEvent*>(event);
+ printf("%s\n", openEvent->file().toUtf8().constData());
+ mainWindow->loadROM(openEvent->file());
+ }
+
+ return QApplication::event(event);
+}
int main(int argc, char** argv)
{
@@ -2737,8 +2753,7 @@ int main(int argc, char** argv)
Platform::Init(argc, argv);
- QApplication melon(argc, argv);
- melon.setWindowIcon(QIcon(":/melon-icon"));
+ MelonApplication melon(argc, argv);
// http://stackoverflow.com/questions/14543333/joystick-wont-work-using-sdl
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index 4d570a3..2b93543 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -19,6 +19,7 @@
#ifndef MAIN_H
#define MAIN_H
+#include <QApplication>
#include <QThread>
#include <QWidget>
#include <QWindow>
@@ -189,6 +190,14 @@ private:
GLuint screenTexture;
};
+class MelonApplication : public QApplication
+{
+ Q_OBJECT
+
+public:
+ MelonApplication(int &argc, char** argv);
+ bool event(QEvent* event) override;
+};
class MainWindow : public QMainWindow
{
@@ -201,6 +210,9 @@ public:
bool hasOGL;
QOpenGLContext* getOGLContext();
+ void loadROM(QString filename);
+ void loadROM(QByteArray *romData, QString archiveFileName, QString romFileName);
+
void onAppStateChanged(Qt::ApplicationState state);
protected:
@@ -278,8 +290,6 @@ private:
QList<QString> recentFileList;
QMenu *recentMenu;
void updateRecentFilesMenu();
- void loadROM(QString filename);
- void loadROM(QByteArray *romData, QString archiveFileName, QString romFileName);
QString pickAndExtractFileFromArchive(QString archiveFileName, QByteArray *romBuffer);