diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 42ea555787..12a5fc4e2c 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1322,19 +1322,31 @@ bool GUI_App::on_init_inner()
m_initialized = true;
if (const std::string& crash_reason = app_config->get("restore_win_position");
- crash_reason.find_first_of("crashed") == 0)
+ boost::starts_with(crash_reason,"crashed"))
{
- MessageDialog dialog(mainframe,
- format_wxstr(_L("PrusaSlicer was crashed during a previous start due to \"%1%\".\n"
- "PrusaSlicer works in save mode now.\n"
- "To avoid a next application crash you have to disable\n"
- "\"%2%\" in \"Preferences\""), from_u8(crash_reason), _L("Restore window position on start"))
- + "\n\n" +
- format_wxstr(_L("Do you want to disable \"%1%\"?"), _L("Restore window position on start")),
- _L("Start PrusaSlicer in save mode"),
- wxICON_QUESTION | wxYES_NO);
- if (dialog.ShowModal() == wxID_YES)
+ wxString preferences_item = _L("Restore window position on start");
+ InfoDialog dialog(nullptr,
+ _L("PrusaSlicer is started in save mode"),
+ format_wxstr(_L("PrusaSlicer was crashed last time due to \"%1%\".\n"
+ "For more information see issues \"%2%\" and \"%3%\"\n\n"
+ "To avoid an application crash next time you have to disable\n"
+ "\"%4%\" in \"Preferences\""),
+ "" + from_u8(crash_reason) + "",
+ "#2939",
+ "#5573",
+ "" + preferences_item + "")
+ + "\n\n" +
+ format_wxstr(_L("Note: Enabling of the \"%1%\" will caused an application crash on next start."), preferences_item),
+ true, wxYES_NO);
+
+ dialog.SetButtonLabel(wxID_YES, format_wxstr(_L("Disable \"%1%\""), preferences_item));
+ dialog.SetButtonLabel(wxID_NO, format_wxstr(_L("Enable \"%1%\"") , preferences_item));
+
+ auto answer = dialog.ShowModal();
+ if (answer == wxID_YES)
app_config->set("restore_win_position", "0");
+ else if (answer == wxID_NO)
+ app_config->set("restore_win_position", "1");
}
return true;
diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp
index 199fdebcee..f64923c9bb 100644
--- a/src/slic3r/GUI/MsgDialog.cpp
+++ b/src/slic3r/GUI/MsgDialog.cpp
@@ -24,7 +24,6 @@
namespace Slic3r {
namespace GUI {
-
MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &headline, long style, wxBitmap bitmap)
: wxDialog(parent ? parent : dynamic_cast(wxGetApp().mainframe), wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
, boldfont(wxGetApp().normal_font())
@@ -182,13 +181,26 @@ static void add_msg_content(wxWindow* parent, wxBoxSizer* content_sizer, wxStrin
}
html->SetMinSize(page_size);
- std::string msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked_msg);
+ std::string msg_escaped = xml_escape(into_u8(msg), is_marked_msg);
boost::replace_all(msg_escaped, "\r\n", "
");
boost::replace_all(msg_escaped, "\n", "
");
if (monospaced_font)
// Code formatting will be preserved. This is useful for reporting errors from the placeholder parser.
msg_escaped = std::string("") + msg_escaped + "
";
- html->SetPage("" + wxString::FromUTF8(msg_escaped.data()) + "");
+ html->SetPage(format_wxstr(""
+ ""
+ ""
+ "%3%"
+ ""
+ ""
+ "",
+ bgr_clr_str, text_clr_str, from_u8(msg_escaped)));
+
+ html->Bind(wxEVT_HTML_LINK_CLICKED, [parent](wxHtmlLinkEvent& event) {
+ wxGetApp().open_browser_with_warning_dialog(event.GetLinkInfo().GetHref(), parent, false);
+ event.Skip(false);
+ });
+
content_sizer->Add(html, 1, wxEXPAND);
wxGetApp().UpdateDarkUI(html);
}