Skip to content

Commit

Permalink
ENH: open new process on MacOS
Browse files Browse the repository at this point in the history
Change-Id: I0bc4069f9ff14ac86d9edf800134f04a26a650f2
  • Loading branch information
bambu123 authored and lanewei120 committed Sep 8, 2022
1 parent 77e4599 commit 0471c7d
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 26 deletions.
8 changes: 1 addition & 7 deletions src/libslic3r/AppConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
6 changes: 6 additions & 0 deletions src/slic3r/GUI/GUI_App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<wxString> names;
for (auto & n : fileNames) names.push_back(n);
start_new_slicer(names);
return;
}
std::vector<std::string> files;
std::vector<wxString> gcode_files;
std::vector<wxString> non_gcode_files;
Expand Down
29 changes: 17 additions & 12 deletions src/slic3r/GUI/MainFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/slic3r/Utils/MacDarkMode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ - (void) initGesturesWithHandler: (wxEvtHandler*) handler

void initGestures(void * view, wxEvtHandler * handler)
{
NSOpenGLView * glView = (NSOpenGLView *) view;
wxNSCustomOpenGLView * glView = (wxNSCustomOpenGLView *) view;
[glView initGesturesWithHandler: handler];
}

Expand Down
14 changes: 8 additions & 6 deletions src/slic3r/Utils/Process.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> args;
std::vector<std::string> 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);
Expand Down

0 comments on commit 0471c7d

Please sign in to comment.