diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index 3f9b4ff75..05b982216 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -106,6 +106,7 @@ extern int plat_getcwd(char *bufp, int max); extern int plat_chdir(char *path); extern void plat_tempfile(char *bufp, char *prefix, char *suffix); extern void plat_get_exe_name(char *s, int size); +extern void plat_get_global_config_dir(char* strptr); extern void plat_init_rom_paths(void); extern int plat_dir_check(char *path); extern int plat_dir_create(char *path); diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index 1cb81d2ce..a445c47d3 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -25,6 +25,7 @@ #include "qt_util.hpp" extern "C" { +#include <86box/86box.h> #include <86box/plat.h> #include <86box/random.h> #include <86box/scsi_device.h> @@ -130,20 +131,20 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) Models::AddEntry(model, tr(floppyTypes[i].toUtf8().data()), i); } ui->fileField->setFilter( - tr("All images") % util::DlgFilter({ "86f", "dsk", "flp", "im?", "*fd?" }) % tr("Basic sector images") % util::DlgFilter({ "dsk", "flp", "im?", "img", "*fd?" }) % tr("Surface images") % util::DlgFilter({ "86f" }, true)); + tr("All images") % util::DlgFilter({ "86f", "dsk", "flp", "im?", "img", "*fd?" }) % tr("Basic sector images") % util::DlgFilter({ "dsk", "flp", "im?", "img", "*fd?" }) % tr("Surface images") % util::DlgFilter({ "86f" }, true)); break; case MediaType::Zip: for (int i = 0; i < zipTypes.size(); ++i) { Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("ZIP images") % util::DlgFilter({ "im?", "zdi" }, true)); + ui->fileField->setFilter(tr("ZIP images") % util::DlgFilter({ "im?", "img", "zdi" }, true)); break; case MediaType::Mo: for (int i = 0; i < moTypes.size(); ++i) { Models::AddEntry(model, tr(moTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("MO images") % util::DlgFilter({ "im?", "mdi" }) % tr("All files") % util::DlgFilter({ "*" }, true)); + ui->fileField->setFilter(tr("MO images") % util::DlgFilter({ "im?", "img", "mdi" }) % tr("All files") % util::DlgFilter({ "*" }, true)); break; } @@ -185,6 +186,8 @@ NewFloppyDialog::onCreate() { auto filename = ui->fileField->fileName(); QFileInfo fi(filename); + filename = (fi.isRelative() && !fi.filePath().isEmpty()) ? (usr_path + fi.filePath()) : fi.filePath(); + ui->fileField->setFileName(filename); FileType fileType; QProgressDialog progress("Creating floppy image", QString(), 0, 100, this); diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 812fe97b3..0fe611cbe 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -629,6 +629,18 @@ plat_chdir(char *path) return QDir::setCurrent(QString(path)) ? 0 : -1; } +void +plat_get_global_config_dir(char* strptr) +{ +#ifdef __APPLE__ + auto dir = QDir(QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)[0] + "/net.86Box.86Box/"); +#else + auto dir = QDir(QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)[0] + "/86Box/"); +#endif + if (!dir.exists()) dir.mkpath("."); + strncpy(strptr, dir.canonicalPath().toUtf8().constData(), 1024); +} + void plat_init_rom_paths() { diff --git a/src/unix/unix.c b/src/unix/unix.c index cc7791a10..4410118f3 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -810,6 +810,18 @@ plat_init_rom_paths() #endif } +void +plat_get_global_config_dir(char *strptr) +{ +#ifdef __APPLE__ + char* prefPath = SDL_GetPrefPath(NULL, "net.86Box.86Box") +#else + char* prefPath = SDL_GetPrefPath(NULL, "86Box"); +#endif + strncpy(strptr, prefPath, 1024); + path_slash(strptr); +} + bool process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, int cmdargc) { diff --git a/src/win/win.c b/src/win/win.c index 8f4c5bbcd..3d46054a6 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -883,6 +883,26 @@ plat_mmap(size_t size, uint8_t executable) return VirtualAlloc(NULL, size, MEM_COMMIT, executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE); } +void +plat_get_global_config_dir(char* strptr) +{ + wchar_t appdata_dir[1024] = { L'\0' }; + + if (_wgetenv(L"LOCALAPPDATA") && _wgetenv(L"LOCALAPPDATA")[0] != L'\0') { + size_t len = 0; + wcsncpy(appdata_dir, _wgetenv(L"LOCALAPPDATA"), 1024); + len = wcslen(appdata_dir); + if (appdata_dir[len - 1] != L'\\') { + appdata_dir[len] = L'\\'; + appdata_dir[len + 1] = L'\0'; + } + wcscat(appdata_dir, L"86box"); + CreateDirectoryW(appdata_dir, NULL); + wcscat(appdata_dir, L"\\"); + c16stombs(strptr, appdata_dir, 1024); + } +} + void plat_init_rom_paths(void) {