From nobody Mon Apr 8 05:56:40 2024 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4VCddP0Pdcz5GFB1; Mon, 8 Apr 2024 05:56:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4VCddN5Xw3z4j5L; Mon, 8 Apr 2024 05:56:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1712555800; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2hd3VgLqUucqAinahUBY1bC9z50Lup+vZDQizWwvlMw=; b=xypSodcKQAfwwHApd+nq4uqDe6VhsvorlHTpITOSRAVYhXCgPEqMSHjOm9+aZGMS7MoGuo XZ7yBo8rSCOp3M21ftkmGspuDeysnvbYvpAnqW9bRk608UpRNoTOzW4YBDk4gtDsNFryqa 8iZn6Qn044EoM1ZUxqIy27l5M/K463cudlcoBSCJ3rBwWMIJGOGe2JCNlD4lbMwSun02oT ebvP6FZFX2cYUer+cwtwaO8Spa4hwXhgpXZ19PkFpPgd87wdgnigT7bczpJp139Uo9qm7+ 729WhKMzhWRUOxOflnyRumfTeGZ110k4c8nnVVFetMilSoGMfWGBitm/A0/vig== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1712555800; a=rsa-sha256; cv=none; b=gkss3Y/IL145akfZv9HB63xU9T3cwUMK1O3WJpfXNsWbmx44VORJNZmqEAA0GWrC4UYmaV D3Cml0/M6s5rHT3PLsnHWTIQDbbY/RTh7scEnrFJPKIeibaM/WGkc6UU+B7GT5pZj4DZY8 Yt1xDC1EedLFNA9w1KBVhXiElgfddOUNe3HANAXuntez6eUARryfJEMVKDzPLYH9/Ys4HF nVUdCAfii2JX/8YsOnsL5+DnjJr0RVvx/cykIfE3gu+lsYR3RbD8OyyuP0lCpIRT8Ds3LP yo8HbD645yJf2Sp+89mXLFSHEZ4EPUtCljvg9rzDxVgjj1vZjoonOloEWRgyxA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1712555800; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2hd3VgLqUucqAinahUBY1bC9z50Lup+vZDQizWwvlMw=; b=gNUdI6pMQsGFqzyrAwRvm1hMLXEuhXZNe/TT6dQ2r0x6PlOl+BsQC22HR4mOrFuMSe/Ani CuxJcm3Uw4isxmV+Ap89w9pAefvJFLLnzr+zpsfAFXzUbK/bNY5jBKSNCTuD0VYKGIyLo2 2ibfCMD99UJPWE8K9nS93ENrVqNu4+RWL9ESTXCEh9GtNI/l6p1q7iTv+SvXh2C7Ja6zF4 okqEmXbBZrk0Bol8d90FWXZuChIMjQafBXxBzKFrs4FUv/gHPSx1/1XDeh0nL0iy5zsmEY J6hI0OkDFZ0AOYDDY5O2vCZdYZvW8y3kM1MXsm/lZUZEWwDhOAvn8EJwbH9U1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4VCddN58kFz107p; Mon, 8 Apr 2024 05:56:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 4385uePO046762; Mon, 8 Apr 2024 05:56:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 4385uegV046760; Mon, 8 Apr 2024 05:56:40 GMT (envelope-from git) Date: Mon, 8 Apr 2024 05:56:40 GMT Message-Id: <202404080556.4385uegV046760@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Michael Zhilin Subject: git: a79650abf58e - main - cad/PrusaSlicer: update to 2.7.4 List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mizhka X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a79650abf58e4e980e0db5d4850dc70f3849f922 Auto-Submitted: auto-generated The branch main has been updated by mizhka: URL: https://cgit.FreeBSD.org/ports/commit/?id=a79650abf58e4e980e0db5d4850dc70f3849f922 commit a79650abf58e4e980e0db5d4850dc70f3849f922 Author: Michael Zhilin AuthorDate: 2024-04-07 10:14:31 +0000 Commit: Michael Zhilin CommitDate: 2024-04-08 05:56:00 +0000 cad/PrusaSlicer: update to 2.7.4 This update contains version 2.7.4 and fix on library path PR: 278011 Reported by: teodor.sigaev@gmail.com (maintainer) Approved by: lwhsu (mentor) Sponsored by: Postgres Professional Differential Revision: https://reviews.freebsd.org/D44668 --- cad/PrusaSlicer/Makefile | 3 +-- cad/PrusaSlicer/distinfo | 6 +++--- .../files/patch-src_libslic3r_CMakeLists.txt | 4 ++-- .../files/patch-src_libslic3r_Format_STEP.cpp | 19 +++++++++++++++++++ .../files/patch-src_slic3r_GUI_ConfigWizard.cpp | 14 +++++++------- .../files/patch-src_slic3r_GUI_GUI__App.cpp | 12 ++++++------ cad/PrusaSlicer/files/patch-src_slic3r_GUI_Plater.cpp | 10 +++++----- .../files/patch-src_slic3r_GUI_Preferences.cpp | 14 +++++++------- cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp | 8 ++++---- 9 files changed, 54 insertions(+), 36 deletions(-) diff --git a/cad/PrusaSlicer/Makefile b/cad/PrusaSlicer/Makefile index f0248716a9e2..a82e609995c8 100644 --- a/cad/PrusaSlicer/Makefile +++ b/cad/PrusaSlicer/Makefile @@ -1,7 +1,6 @@ PORTNAME= PrusaSlicer DISTVERSIONPREFIX=version_ -DISTVERSION= 2.7.2 -PORTREVISION= 1 +DISTVERSION= 2.7.4 CATEGORIES= cad DIST_SUBDIR= PrusaSlicer diff --git a/cad/PrusaSlicer/distinfo b/cad/PrusaSlicer/distinfo index ea27189ec62c..1b16531420b3 100644 --- a/cad/PrusaSlicer/distinfo +++ b/cad/PrusaSlicer/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1709292528 -SHA256 (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.2_GH0.tar.gz) = 0af8ab83ad33cdebc1d13d37d8ed3b2125d84532eb4bca7618c422bf7648ebee -SIZE (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.2_GH0.tar.gz) = 64915607 +TIMESTAMP = 1712342295 +SHA256 (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.4_GH0.tar.gz) = 6370a9593aeac5c56543e66d167ab5fd053df55b9376392c2d6184eb0bf65fc8 +SIZE (PrusaSlicer/prusa3d-PrusaSlicer-version_2.7.4_GH0.tar.gz) = 65396083 diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt b/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt index 6c3d971a3d87..a9e06edfca78 100644 --- a/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt +++ b/cad/PrusaSlicer/files/patch-src_libslic3r_CMakeLists.txt @@ -1,6 +1,6 @@ ---- src/libslic3r/CMakeLists.txt.orig 2024-02-29 13:03:32 UTC +--- src/libslic3r/CMakeLists.txt.orig 2024-04-05 09:25:31 UTC +++ src/libslic3r/CMakeLists.txt -@@ -575,7 +575,6 @@ target_link_libraries(libslic3r +@@ -576,7 +576,6 @@ target_link_libraries(libslic3r target_link_libraries(libslic3r libnest2d admesh diff --git a/cad/PrusaSlicer/files/patch-src_libslic3r_Format_STEP.cpp b/cad/PrusaSlicer/files/patch-src_libslic3r_Format_STEP.cpp new file mode 100644 index 000000000000..062214443e84 --- /dev/null +++ b/cad/PrusaSlicer/files/patch-src_libslic3r_Format_STEP.cpp @@ -0,0 +1,19 @@ +--- src/libslic3r/Format/STEP.cpp.orig 2024-04-05 18:42:53 UTC ++++ src/libslic3r/Format/STEP.cpp +@@ -39,7 +39,7 @@ LoadStepFn get_load_step_fn() + #endif + + if (!load_step_fn) { +- auto libpath = boost::dll::program_location().parent_path(); ++ auto libpath = boost::dll::program_location().parent_path().parent_path(); + #ifdef _WIN32 + libpath /= "OCCTWrapper.dll"; + HMODULE module = LoadLibraryW(libpath.wstring().c_str()); +@@ -61,6 +61,7 @@ LoadStepFn get_load_step_fn() + #elif __APPLE__ + load_step_fn = &load_step_internal; + #else ++ libpath /= "lib"; + libpath /= "OCCTWrapper.so"; + void *plugin_ptr = dlopen(libpath.c_str(), RTLD_NOW | RTLD_GLOBAL); + diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp index ecba71fe5cf1..17e0bdf7b75c 100644 --- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp +++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_ConfigWizard.cpp @@ -1,4 +1,4 @@ ---- src/slic3r/GUI/ConfigWizard.cpp.orig 2024-02-29 13:03:32 UTC +--- src/slic3r/GUI/ConfigWizard.cpp.orig 2024-04-05 09:25:31 UTC +++ src/slic3r/GUI/ConfigWizard.cpp @@ -69,7 +69,7 @@ #include "slic3r/GUI/I18N.hpp" @@ -22,8 +22,8 @@ )); } --#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) +-#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) ++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(SLIC3R_DESKTOP_INTEGRATION) append_text(wxString::Format(_L( "On Linux systems the process of registration also creates desktop integration files for this version of application." ))); @@ -35,7 +35,7 @@ +#elif defined(__APPLE__) || defined(__FreeBSD__) // Apple registers for custom url in info.plist thus it has to be already registered since build. // The url will always trigger opening of prusaslicer and we have to check that user has allowed it. (GUI_App::MacOpenURL is the triggered method) - #else + #elif defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) @@ -1598,7 +1598,7 @@ void DownloaderUtils::Worker::deregister() return; } @@ -43,14 +43,14 @@ -#elif __APPLE__ +#elif defined(__APPLE__) || defined(__FreeBSD__) // TODO - #else + #elif defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) BOOST_LOG_TRIVIAL(debug) << "DesktopIntegrationDialog::undo_downloader_registration"; @@ -3063,7 +3063,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_c if ((check_unsaved_preset_changes = install_bundles.size() > 0)) header = _L_PLURAL("A new vendor was installed and one of its printers will be activated", "New vendors were installed and one of theirs printers will be activated", install_bundles.size()); --#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) +-#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) ++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(SLIC3R_DESKTOP_INTEGRATION) // Desktop integration on Linux BOOST_LOG_TRIVIAL(debug) << "ConfigWizard::priv::apply_config integrate_desktop" << page_welcome->integrate_desktop() << " perform_registration_linux " << page_downloader->m_downloader->get_perform_registration_linux(); if (page_welcome->integrate_desktop()) diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp index 90a6a54b262b..3066068410c9 100644 --- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp +++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_GUI__App.cpp @@ -1,4 +1,4 @@ ---- src/slic3r/GUI/GUI_App.cpp.orig 2024-02-29 13:03:32 UTC +--- src/slic3r/GUI/GUI_App.cpp.orig 2024-04-05 09:25:31 UTC +++ src/slic3r/GUI/GUI_App.cpp @@ -403,7 +403,7 @@ class SplashScreen : public wxSplashScreen (private) }; @@ -108,7 +108,7 @@ case ConfigMenuDesktopIntegration: show_desktop_integration_dialog(); break; -@@ -3155,7 +3157,7 @@ void GUI_App::show_desktop_integration_dialog() +@@ -3149,7 +3151,7 @@ void GUI_App::show_desktop_integration_dialog() void GUI_App::show_desktop_integration_dialog() { @@ -117,12 +117,12 @@ //wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null"); DesktopIntegrationDialog dialog(mainframe); dialog.ShowModal(); -@@ -3175,7 +3177,7 @@ void GUI_App::show_downloader_registration_dialog() +@@ -3169,7 +3171,7 @@ void GUI_App::show_downloader_registration_dialog() if (msg.ShowModal() == wxID_YES) { auto downloader_worker = new DownloaderUtils::Worker(nullptr); downloader_worker->perform_register(app_config->get("url_downloader_dest")); --#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) +-#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) ++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(SLIC3R_DESKTOP_INTEGRATION) if (downloader_worker->get_perform_registration_linux()) DesktopIntegrationDialog::perform_downloader_desktop_integration(); - #endif // __linux__ + #endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Plater.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Plater.cpp index 96030dedf76a..ca035e9a15a2 100644 --- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Plater.cpp +++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Plater.cpp @@ -1,6 +1,6 @@ ---- src/slic3r/GUI/Plater.cpp.orig 2024-02-29 13:03:32 UTC +--- src/slic3r/GUI/Plater.cpp.orig 2024-04-05 09:25:31 UTC +++ src/slic3r/GUI/Plater.cpp -@@ -2555,7 +2555,7 @@ std::vector Plater::priv::load_files(const std +@@ -2558,7 +2558,7 @@ std::vector Plater::priv::load_files(const std // when loading a project file. However, creating the dialog on heap causes issues on macOS, where it does not // appear at all. Therefore, we create the dialog on stack on Win and macOS, and on heap on Linux, which // is the only system that needed the workarounds in the first place. @@ -9,7 +9,7 @@ auto progress_dlg = new wxProgressDialog(loading, "", 100, find_toplevel_parent(q), wxPD_APP_MODAL | wxPD_AUTO_HIDE); Slic3r::ScopeGuard([&progress_dlg](){ if (progress_dlg) progress_dlg->Destroy(); progress_dlg = nullptr; }); #else -@@ -2602,7 +2602,7 @@ std::vector Plater::priv::load_files(const std +@@ -2605,7 +2605,7 @@ std::vector Plater::priv::load_files(const std bool is_project_file = type_prusa; try { if (type_3mf || type_zip_amf) { @@ -18,7 +18,7 @@ // On Linux Constructor of the ProgressDialog calls DisableOtherWindows() function which causes a disabling of all children of the find_toplevel_parent(q) // And a destructor of the ProgressDialog calls ReenableOtherWindows() function which revert previously disabled children. // But if printer technology will be changes during project loading, -@@ -4572,7 +4572,7 @@ void Plater::priv::on_right_click(RBtnEvent& evt) +@@ -4575,7 +4575,7 @@ void Plater::priv::on_right_click(RBtnEvent& evt) Vec2d mouse_position = evt.data.first; wxPoint position(static_cast(mouse_position.x()), static_cast(mouse_position.y())); @@ -27,7 +27,7 @@ // For some reason on Linux the menu isn't displayed if position is // specified (even though the position is sane). position = wxDefaultPosition; -@@ -5425,7 +5425,7 @@ void Plater::load_project(const wxString& filename) +@@ -5428,7 +5428,7 @@ void Plater::load_project(const wxString& filename) p->reset(); diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Preferences.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Preferences.cpp index f5cd8fed5ba3..07094d21f323 100644 --- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Preferences.cpp +++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Preferences.cpp @@ -1,20 +1,20 @@ ---- src/slic3r/GUI/Preferences.cpp.orig 2023-12-12 14:21:21 UTC +--- src/slic3r/GUI/Preferences.cpp.orig 2024-04-05 09:25:31 UTC +++ src/slic3r/GUI/Preferences.cpp @@ -28,7 +28,7 @@ #ifdef WIN32 #include #endif // WIN32 --#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) +-#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) ++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(SLIC3R_DESKTOP_INTEGRATION) #include "DesktopIntegrationDialog.hpp" - #endif //__linux__ + #endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) @@ -758,7 +758,7 @@ void PreferencesDialog::accept(wxEvent&) downloader->allow(it->second == "1"); if (!downloader->on_finish()) return; --#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) +-#if defined(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) ++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(SLIC3R_DESKTOP_INTEGRATION) if( downloader->get_perform_registration_linux()) DesktopIntegrationDialog::perform_downloader_desktop_integration(); - #endif // __linux__ + #endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION) diff --git a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp index 0335a1119208..48846a70ff5a 100644 --- a/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp +++ b/cad/PrusaSlicer/files/patch-src_slic3r_GUI_Tab.cpp @@ -1,4 +1,4 @@ ---- src/slic3r/GUI/Tab.cpp.orig 2024-02-29 13:03:32 UTC +--- src/slic3r/GUI/Tab.cpp.orig 2024-04-05 09:25:31 UTC +++ src/slic3r/GUI/Tab.cpp @@ -279,7 +279,7 @@ void Tab::create_preset_tab() // Don't set the 2nd parameter to 1, making the sizer rubbery scalable in Y axis may lead @@ -27,7 +27,7 @@ // Events queue is opposite On Linux. wxEVT_SET_FOCUS invokes after wxEVT_TREE_SEL_CHANGED, // and a result wxEVT_KILL_FOCUS doesn't invoke for the TextCtrls. // see https://github.com/prusa3d/PrusaSlicer/issues/5720 -@@ -3694,7 +3694,7 @@ void Tab::load_current_preset() +@@ -3700,7 +3700,7 @@ void Tab::load_current_preset() else #endif wxGetApp().tab_panel()->InsertPage(wxGetApp().tab_panel()->FindPage(this), tab, tab->title()); @@ -36,7 +36,7 @@ int page_id = wxGetApp().tab_panel()->FindPage(tab); wxGetApp().tab_panel()->GetPage(page_id)->Show(true); #endif // __linux__ -@@ -4115,7 +4115,7 @@ bool Tab::tree_sel_change_delayed() +@@ -4121,7 +4121,7 @@ bool Tab::tree_sel_change_delayed() // There is a bug related to Ubuntu overlay scrollbars, see https://github.com/prusa3d/PrusaSlicer/issues/898 and https://github.com/prusa3d/PrusaSlicer/issues/952. // The issue apparently manifests when Show()ing a window with overlay scrollbars while the UI is frozen. For this reason, // we will Thaw the UI prematurely on Linux. This means destroing the no_updates object prematurely. @@ -45,7 +45,7 @@ std::unique_ptr no_updates(new wxWindowUpdateLocker(this)); #else /* On Windows we use DoubleBuffering during rendering, -@@ -4161,7 +4161,7 @@ bool Tab::tree_sel_change_delayed() +@@ -4167,7 +4167,7 @@ bool Tab::tree_sel_change_delayed() if (wxGetApp().mainframe!=nullptr && wxGetApp().mainframe->is_active_and_shown_tab(this)) activate_selected_page(throw_if_canceled);