diff options
author | Petr Mrázek <peterix@gmail.com> | 2018-02-11 00:35:56 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2018-02-11 00:35:56 +0100 |
commit | 38e669dbf55635fd715e3a782b39c9f0881eb601 (patch) | |
tree | b3108050526de88d2f94922a83fe9d2755e4fd10 | |
parent | ca117654368c21ea55fe51b82500447404d9beae (diff) | |
download | MultiMC-38e669dbf55635fd715e3a782b39c9f0881eb601.tar MultiMC-38e669dbf55635fd715e3a782b39c9f0881eb601.tar.gz MultiMC-38e669dbf55635fd715e3a782b39c9f0881eb601.tar.lz MultiMC-38e669dbf55635fd715e3a782b39c9f0881eb601.tar.xz MultiMC-38e669dbf55635fd715e3a782b39c9f0881eb601.zip |
NOISSUE change FS::updateTimestamp to work with directories too, use it to fix icon issues on macOS
-rw-r--r-- | api/logic/FileSystem.cpp | 35 | ||||
-rw-r--r-- | application/MultiMC.cpp | 2 |
2 files changed, 17 insertions, 20 deletions
diff --git a/api/logic/FileSystem.cpp b/api/logic/FileSystem.cpp index 1f9f0e43..d24d9364 100644 --- a/api/logic/FileSystem.cpp +++ b/api/logic/FileSystem.cpp @@ -9,6 +9,14 @@ #include <QUrl> #include <QStandardPaths> +#if defined Q_OS_WIN32 + #include <windows.h> + #include <string> + #include <sys/utime.h> +#else + #include <utime.h> +#endif + namespace FS { void ensureExists(const QDir &dir) @@ -62,21 +70,13 @@ QByteArray read(const QString &filename) bool updateTimestamp(const QString& filename) { - QFile file(filename); - if (!file.exists()) - { - return false; - } - if (!file.open(QIODevice::ReadWrite)) - { - return false; - } - const quint64 size = file.size(); - file.seek(size); - file.write( QByteArray(1, '0') ); - file.resize(size); - return true; - +#ifdef Q_OS_WIN32 + std::wstring filename_utf_16 = filename.toStdWString(); + return (_wutime64(filename_utf_16.c_str(), nullptr) == 0); +#else + QByteArray filenameBA = QFile::encodeName(filename); + return (utime(filenameBA.data(), nullptr) == 0); +#endif } bool ensureFilePathExists(QString filenamepath) @@ -163,11 +163,6 @@ bool copy::operator()(const QString &offset) return true; } - -#if defined Q_OS_WIN32 -#include <windows.h> -#include <string> -#endif bool deletePath(QString path) { bool OK = true; diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index e8309ceb..a5b3b347 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -330,6 +330,8 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) #elif defined(Q_OS_MAC) QDir foo(FS::PathCombine(binPath, "../..")); m_rootPath = foo.absolutePath(); + // on macOS, touch the root to force Finder to reload the .app metadata (and fix any icon change issues) + FS::updateTimestamp(m_rootPath); #endif #ifdef MULTIMC_JARS_LOCATION |