diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index c8a5b274f..03b42cfe5 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -130,13 +130,7 @@ void AppConfig::set_defaults() #endif if (get("single_instance").empty()) - set_bool("single_instance", -#ifdef __APPLE__ - true -#else // __APPLE__ - false -#endif // __APPLE__ - ); + set_bool("single_instance", false); #ifdef SUPPORT_REMEMBER_OUTPUT_PATH if (get("remember_output_path").empty()) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 5c04befe9..70c2efccb 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4483,6 +4483,12 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { + if (m_post_initialized) { + std::vector names; + for (auto & n : fileNames) names.push_back(n); + start_new_slicer(names); + return; + } std::vector files; std::vector gcode_files; std::vector non_gcode_files; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index a72d36569..3b1e1708c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -84,19 +84,18 @@ class BambuStudioTaskBarIcon : public wxTaskBarIcon { public: BambuStudioTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} - //wxMenu *CreatePopupMenu() override { - //wxMenu *menu = new wxMenu; - //BBS do not support multi instances in mac - //if(wxGetApp().app_config->get("single_instance") == "0") { - // // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, - // // as starting new instances would interfere with the locking mechanism of "single_instance" support. - // append_menu_item(menu, wxID_ANY, _L("Open new instance"), _L("Open a new PrusaSlicer instance"), - // [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); + wxMenu *CreatePopupMenu() override { + wxMenu *menu = new wxMenu; + //if (wxGetApp().app_config->get("single_instance") == "false") { + // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, + // as starting new instances would interfere with the locking mechanism of "single_instance" support. + append_menu_item(menu, wxID_ANY, _L("New Window"), _L("Open a new window"), + [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); //} - //append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), - // [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); - //return menu; - //} +// append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), +// [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); + return menu; + } }; /*class GCodeViewerTaskBarIcon : public wxTaskBarIcon { @@ -1680,6 +1679,12 @@ void MainFrame::init_menubar_as_editor() // File menu wxMenu* fileMenu = new wxMenu; { +#ifdef __APPLE__ + // New Window + append_menu_item(fileMenu, wxID_ANY, _L("New Window") + "\tCtrl+N", _L("Start a new window"), + [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, + []{ return true; }, this); +#endif // New Project append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\tCtrl+N", _L("Start a new project"), [this](wxCommandEvent&) { if (m_plater) m_plater->new_project(); }, "", nullptr, diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index e28067fc1..5750358dd 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -286,7 +286,7 @@ namespace GUI { void initGestures(void * view, wxEvtHandler * handler) { - NSOpenGLView * glView = (NSOpenGLView *) view; + wxNSCustomOpenGLView * glView = (wxNSCustomOpenGLView *) view; [glView initGesturesWithHandler: handler]; } diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp index fdd922c00..c25910574 100644 --- a/src/slic3r/Utils/Process.cpp +++ b/src/slic3r/Utils/Process.cpp @@ -60,17 +60,19 @@ static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance boost::filesystem::path bin_path = into_path(wxStandardPaths::Get().GetExecutablePath()); #if defined(__APPLE__) { - bin_path = bin_path.parent_path() / "BambuStudio"; + //bin_path = bin_path.parent_path() / "BambuStudio"; + bin_path = "/usr/bin/open"; // On Apple the wxExecute fails, thus we use boost::process instead. BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << bin_path.string() << "\""; try { - std::vector args; + std::vector args = { "-n", "-a", "BambuStudio"}; + if (!paths_to_open.empty()) { + for (const auto& file : paths_to_open) + args.emplace_back(into_u8(file)); + } + args.emplace_back("--args"); if (instance_type == NewSlicerInstanceType::GCodeViewer) args.emplace_back("--gcodeviewer"); - if (!paths_to_open.empty()) { - for (const auto& file : paths_to_open) - args.emplace_back(into_u8(file)); - } if (instance_type == NewSlicerInstanceType::Slicer && single_instance) args.emplace_back("--single-instance"); boost::process::spawn(bin_path, args);