From cd03e1fc744eb26035bc8bea648b25457c362904 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 18 Apr 2023 18:03:39 +0200 Subject: [PATCH] Make it possible to not show Rosetta warning Fixes #1180 --- src/core/mainwindow.cpp | 18 +++++++++--------- src/dialogs/messagedialog.cpp | 30 +++++++++++++++++++++++++++++- src/dialogs/messagedialog.h | 5 +++++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 225828b5..57e8cb1b 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -1042,15 +1042,15 @@ MainWindow::MainWindow(Application *app, std::shared_ptr tray_ic #if defined(Q_OS_MACOS) if (Utilities::ProcessTranslated()) { - QErrorMessage *error_message = new QErrorMessage; - error_message->setAttribute(Qt::WA_DeleteOnClose); - error_message->resize(600, 220); - Utilities::CenterWidgetOnScreen(Utilities::GetScreen(this), error_message); - error_message->showMessage(tr("It is detected that Strawberry is running under Rosetta. Strawberry currently have limited macOS support, and running Strawberry under Rosetta is unsupported and known to have issues. If you want to use Strawberry on the current CPU, you should build Strawberry from source. For instructions see.: https://wiki.strawberrymusicplayer.org/wiki/Compile")); - for (QObject *obj : error_message->children()) { - if (QCheckBox *checkbox = qobject_cast(obj)) { - checkbox->hide(); - } + s.beginGroup(kSettingsGroup); + const bool ignore_rosetta = s.value("ignore_rosetta", false).toBool(); + s.endGroup(); + if (!ignore_rosetta) { + MessageDialog *rosetta_message = new MessageDialog(this); + rosetta_message->set_settings_group(kSettingsGroup); + rosetta_message->set_do_not_show_message_again("ignore_rosetta"); + rosetta_message->setAttribute(Qt::WA_DeleteOnClose); + rosetta_message->ShowMessage(tr("Strawberry running under Rosetta"), tr("It is detected that Strawberry is running under Rosetta. Strawberry currently have limited macOS support, and running Strawberry under Rosetta is unsupported and known to have issues. If you want to use Strawberry on the current CPU, you should build Strawberry from source. For instructions see.: https://wiki.strawberrymusicplayer.org/wiki/Compile"), IconLoader::Load("dialog-warning")); } } #endif diff --git a/src/dialogs/messagedialog.cpp b/src/dialogs/messagedialog.cpp index 64412351..9030a64e 100644 --- a/src/dialogs/messagedialog.cpp +++ b/src/dialogs/messagedialog.cpp @@ -22,16 +22,19 @@ #include #include #include +#include +#include #include #include #include #include #include +#include "utilities/screenutils.h" #include "messagedialog.h" #include "ui_messagedialog.h" -MessageDialog::MessageDialog(QWidget *parent) : QDialog(parent), ui_(new Ui_MessageDialog) { +MessageDialog::MessageDialog(QWidget *parent) : QDialog(parent), ui_(new Ui_MessageDialog), parent_(parent) { ui_->setupUi(this); @@ -45,6 +48,31 @@ MessageDialog::MessageDialog(QWidget *parent) : QDialog(parent), ui_(new Ui_Mess MessageDialog::~MessageDialog() { delete ui_; } +void MessageDialog::ShowMessage(const QString &title, const QString &message, const QIcon &icon) { + + setWindowTitle(title); + + if (!icon.isNull()) { +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + const QPixmap pixmap = icon.pixmap(QSize(64, 64), devicePixelRatioF()); +#else + const QPixmap pixmap = icon.pixmap(QSize(64, 64)); +#endif + ui_->label_logo->setPixmap(pixmap); + } + + ui_->label_text->setText(message); + ui_->label_text->adjustSize(); + adjustSize(); + + if (parent_) { + Utilities::CenterWidgetOnScreen(Utilities::GetScreen(parent_), this); + } + + show(); + +} + void MessageDialog::DoNotShowMessageAgain() { if (!settings_group_.isEmpty() && !do_not_show_message_again_.isEmpty()) { diff --git a/src/dialogs/messagedialog.h b/src/dialogs/messagedialog.h index fdba3fe9..44800a3b 100644 --- a/src/dialogs/messagedialog.h +++ b/src/dialogs/messagedialog.h @@ -21,6 +21,8 @@ #define MESSAGEDIALOG_H #include +#include +#include class Ui_MessageDialog; @@ -34,11 +36,14 @@ class MessageDialog : public QDialog { void set_settings_group(const QString &settings_group) { settings_group_ = settings_group; } void set_do_not_show_message_again(const QString &do_not_show_message_again) { do_not_show_message_again_ = do_not_show_message_again; } + void ShowMessage(const QString &title, const QString &message, const QIcon &icon = QIcon()); + private slots: void DoNotShowMessageAgain(); protected: Ui_MessageDialog *ui_; + QWidget *parent_; QString settings_group_; QString do_not_show_message_again_; };