Sorry, a fatal error has occurred and the application must " "now exit.
"; } else { text = "Sorry, a critical error has occurred.
"; } if (kLicensedProduct) { text += QString(R"(Please contact us)" " and copy/paste the following error:
") .arg(kUrlContact, kColorSecondary); } else { text += QString(R"(Please report a bug)" " and copy/paste the following error:
") .arg(kUrlBugReport, kColorSecondary); } text += QString("%3\n\n%4").arg(message, contextString); if (type == QtFatalMsg) { // create a blocking message box for fatal errors, as we want to wait // until the dialog is dismissed before aborting the app. QMessageBox::critical(nullptr, title, text); } else if (!Errors::s_ignoredErrors.contains(message)) { // prevent message boxes piling up by deleting the last one if it exists. // if none exists yet, then nothing will happen. Errors::s_criticalMessage.reset(); // as we don't abort for critical messages, create a new non-blocking // message box. this is so that we don't block the message handler; if we // did, we would prevent new messages from being logged properly. // the memory will stay allocated until the app exits, which is acceptable. Errors::s_criticalMessage = std::make_unique
Synergy will continue to run in the background and can be accessed " "via the Synergy icon in your system notifications area. This setting " "can be disabled.
"; #if defined(Q_OS_LINUX) message += QString("On some Linux systems such as GNOME 3, the " "notification area might be disabled. " "You may need to " R"(enable an extension)" " to see the Synergy tray icon.
") .arg(kUrlGnomeTrayFix, kStyleLink); #endif QMessageBox::information(parent, "Notification area icon", message); } void showFirstRunMessage( QWidget *parent, bool closeToTray, bool enableService, bool isServer) { auto message = QString("Synergy is now connected!
"); if (isServer) { message += "Try moving your mouse to your other computer. Once there, go ahead " "and type something.
" "Don't forget, you can copy and paste between computers too.
"; } else { message += "Try controlling this computer remotely.
"; } if (!closeToTray && !enableService) { message += "As you do not have the setting enabled to keep Synergy running in " "the background, you'll need to keep this window open or minimized to " "keep Synergy running.
"; } else { message += "You can now close this window and Synergy will continue to run in " "the background. This setting can be disabled.
"; } QMessageBox::information(parent, "Connected", message); } void showDevThanks(QWidget *parent, const QString &productName) { if (productName.isEmpty()) { qFatal("product name not set"); } QMessageBox::information( parent, "Thank you!", QString("Thanks for using %1.
" "If you enjoy using this app, you can support the
"
"developers by "
R"(purchasing a license)"
" or "
R"(contributing code.)"
"
This message will only appear once.
") .arg( productName, kUrlPurchase, kColorSecondary, kUrlGitHub, kColorSecondary)); } void showClientConnectError( QWidget *parent, ClientError error, const QString &address) { using enum ClientError; auto message = QString("The connection to server '%1' didn't work.
").arg(address); if (error == AlreadyConnected) { message += // "Two of your client computers have the same name or there are " "two instances of the client process running.
" "Please ensure that you're using a unique name and that only a " "single client process is running.
"; } else if (error == HostnameError) { message += // "Please try to connect to the server using the server IP address " "instead of the hostname.
" "If that doesn't work, please check your TLS and " "firewall settings.
"; } else if (error == GenericError) { message += // "Please check your TLS and firewall settings.
"; } else { qFatal("unknown client error"); } QMessageBox dialog(parent); dialog.addButton(QObject::tr("Close"), QMessageBox::RejectRole); dialog.setText(message); dialog.exec(); } NewClientPromptResult showNewClientPrompt(QWidget *parent, const QString &clientName) { using enum NewClientPromptResult; QMessageBox message(parent); const QPushButton *ignore = message.addButton("Ignore", QMessageBox::RejectRole); const QPushButton *add = message.addButton("Add client", QMessageBox::AcceptRole); message.setText( QString("A new client called '%1' wants to connect").arg(clientName)); message.exec(); if (message.clickedButton() == add) { return Add; } else if (message.clickedButton() == ignore) { return Ignore; } else { qFatal("no expected dialog button was clicked"); abort(); } } } // namespace synergy::gui::messages