mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	wxWidgets report error when opening some 3mf files with specific names Change-Id: I3573564df43da045714846a373021e125f39551e (cherry picked from commit 4c7f8f93f7f207a0c2b35f9997af85a245e1cb19)
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "GUI_Init.hpp"
 | 
						|
 | 
						|
#include "libslic3r/AppConfig.hpp"
 | 
						|
 | 
						|
#include "slic3r/GUI/GUI.hpp"
 | 
						|
#include "slic3r/GUI/GUI_App.hpp"
 | 
						|
#include "slic3r/GUI/3DScene.hpp"
 | 
						|
#include "slic3r/GUI/InstanceCheck.hpp"
 | 
						|
#include "slic3r/GUI/format.hpp"
 | 
						|
#include "slic3r/GUI/MainFrame.hpp"
 | 
						|
#include "slic3r/GUI/Plater.hpp"
 | 
						|
 | 
						|
// To show a message box if GUI initialization ends up with an exception thrown.
 | 
						|
#include <wx/msgdlg.h>
 | 
						|
 | 
						|
#include <boost/nowide/iostream.hpp>
 | 
						|
#include <boost/nowide/convert.hpp>
 | 
						|
 | 
						|
#if __APPLE__
 | 
						|
    #include <signal.h>
 | 
						|
#endif // __APPLE__
 | 
						|
 | 
						|
namespace Slic3r {
 | 
						|
namespace GUI {
 | 
						|
 | 
						|
int GUI_Run(GUI_InitParams ¶ms)
 | 
						|
{
 | 
						|
#if __APPLE__
 | 
						|
    // On OSX, we use boost::process::spawn() to launch new instances of PrusaSlicer from another PrusaSlicer.
 | 
						|
    // boost::process::spawn() sets SIGCHLD to SIGIGN for the child process, thus if a child PrusaSlicer spawns another
 | 
						|
    // subprocess and the subrocess dies, the child PrusaSlicer will not receive information on end of subprocess
 | 
						|
    // (posix waitpid() call will always fail).
 | 
						|
    // https://jmmv.dev/2008/10/boostprocess-and-sigchld.html
 | 
						|
    // The child instance of PrusaSlicer has to reset SIGCHLD to its default, so that posix waitpid() and similar continue to work.
 | 
						|
    // See GH issue #5507
 | 
						|
    signal(SIGCHLD, SIG_DFL);
 | 
						|
#endif // __APPLE__
 | 
						|
 | 
						|
    //BBS: remove the try-catch and let exception goto above
 | 
						|
    try {
 | 
						|
        //GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor);
 | 
						|
        GUI::GUI_App* gui = new GUI::GUI_App();
 | 
						|
        /*if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) {
 | 
						|
            // G-code viewer is currently not performing instance check, a new G-code viewer is started every time.
 | 
						|
            bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1";
 | 
						|
            if (Slic3r::instance_check(params.argc, params.argv, gui_single_instance_setting)) {
 | 
						|
                //TODO: do we have delete gui and other stuff?
 | 
						|
                return -1;
 | 
						|
            }
 | 
						|
        //}*/
 | 
						|
 | 
						|
//      gui->autosave = m_config.opt_string("autosave");
 | 
						|
        GUI::GUI_App::SetInstance(gui);
 | 
						|
        gui->init_params = ¶ms;
 | 
						|
 | 
						|
        if (params.argc > 1) {
 | 
						|
            // STUDIO-273 wxWidgets report error when opening some files with specific names
 | 
						|
            // wxWidgets does not handle parameters, so intercept parameters here, only keep the app name
 | 
						|
            int                 argc = 1;
 | 
						|
            std::vector<char *> argv;
 | 
						|
            argv.push_back(params.argv[0]);
 | 
						|
            return wxEntry(argc, argv.data());
 | 
						|
        } else {
 | 
						|
            return wxEntry(params.argc, params.argv);
 | 
						|
        }
 | 
						|
    } catch (const Slic3r::Exception &ex) {
 | 
						|
        BOOST_LOG_TRIVIAL(error) << ex.what() << std::endl;
 | 
						|
        wxMessageBox(boost::nowide::widen(ex.what()), _L("Bambu Studio GUI initialization failed"), wxICON_STOP);
 | 
						|
    } catch (const std::exception &ex) {
 | 
						|
        BOOST_LOG_TRIVIAL(error) << ex.what() << std::endl;
 | 
						|
        wxMessageBox(format_wxstr(_L("Fatal error, exception catched: %1%"), ex.what()), _L("Bambu Studio GUI initialization failed"), wxICON_STOP);
 | 
						|
    }
 | 
						|
    // error
 | 
						|
    return 1;
 | 
						|
}
 | 
						|
}
 | 
						|
}
 |