OnActivate handler to:
1) Process delayed error messages from background processing 2) Set keyboard focus to the 3D scene if no wx window has keyboard focus.
This commit is contained in:
parent
35b4777e0e
commit
435b5394f7
@ -65,9 +65,9 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
|
||||
|
||||
auto *sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
const auto font_title = GetFont().MakeBold().Scaled(1.3);
|
||||
const auto font_title = GetFont().MakeBold().Scaled(1.3f);
|
||||
const auto font_name = GetFont().MakeBold();
|
||||
const auto font_alt_nozzle = GetFont().Scaled(0.9);
|
||||
const auto font_alt_nozzle = GetFont().Scaled(0.9f);
|
||||
|
||||
// wxGrid appends widgets by rows, but we need to construct them in columns.
|
||||
// These vectors are used to hold the elements so that they can be appended in the right order.
|
||||
@ -789,7 +789,7 @@ void ConfigWizardIndex::on_mouse_move(wxMouseEvent &evt)
|
||||
|
||||
const ssize_t item_hover_new = pos.y / item_height();
|
||||
|
||||
if (item_hover_new < items.size() && item_hover_new != item_hover) {
|
||||
if (item_hover_new < ssize_t(items.size()) && item_hover_new != item_hover) {
|
||||
item_hover = item_hover_new;
|
||||
Refresh();
|
||||
}
|
||||
|
@ -105,6 +105,11 @@ wxFrame(NULL, wxID_ANY, SLIC3R_BUILD, wxDefaultPosition, wxDefaultSize, wxDEFAUL
|
||||
event.Skip();
|
||||
});
|
||||
|
||||
Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) {
|
||||
if (m_plater != nullptr && event.GetActive())
|
||||
m_plater->on_activate();
|
||||
});
|
||||
|
||||
wxGetApp().persist_window_geometry(this);
|
||||
|
||||
update_ui_from_settings(); // FIXME (?)
|
||||
|
@ -962,6 +962,7 @@ struct Plater::priv
|
||||
std::atomic<bool> arranging;
|
||||
std::atomic<bool> rotoptimizing;
|
||||
bool delayed_scene_refresh;
|
||||
std::string delayed_error_message;
|
||||
|
||||
wxTimer background_process_timer;
|
||||
|
||||
@ -1947,6 +1948,8 @@ unsigned int Plater::priv::update_background_process(bool force_validation)
|
||||
this->background_process_timer.Stop();
|
||||
// Update the "out of print bed" state of ModelInstances.
|
||||
this->update_print_volume_state();
|
||||
// The delayed error message is no more valid.
|
||||
this->delayed_error_message.clear();
|
||||
// Apply new config to the possibly running background task.
|
||||
bool was_running = this->background_process.running();
|
||||
Print::ApplyStatus invalidated = this->background_process.apply(this->q->model(), wxGetApp().preset_bundle->full_config());
|
||||
@ -1985,8 +1988,18 @@ unsigned int Plater::priv::update_background_process(bool force_validation)
|
||||
return_state |= UPDATE_BACKGROUND_PROCESS_RESTART;
|
||||
} else {
|
||||
// The print is not valid.
|
||||
// The error returned from the Print needs to be translated into the local language.
|
||||
GUI::show_error(this->q, _(err));
|
||||
// Only show the error message immediately, if the top level parent of this window is active.
|
||||
auto p = dynamic_cast<wxWindow*>(this->q);
|
||||
while (p->GetParent())
|
||||
p = p->GetParent();
|
||||
auto *top_level_wnd = dynamic_cast<wxTopLevelWindow*>(p);
|
||||
if (top_level_wnd && top_level_wnd->IsActive()) {
|
||||
// The error returned from the Print needs to be translated into the local language.
|
||||
GUI::show_error(this->q, _(err));
|
||||
} else {
|
||||
// Show the error message once the main window gets activated.
|
||||
this->delayed_error_message = _(err);
|
||||
}
|
||||
return_state |= UPDATE_BACKGROUND_PROCESS_INVALID;
|
||||
}
|
||||
}
|
||||
@ -3095,6 +3108,24 @@ void Plater::on_config_change(const DynamicPrintConfig &config)
|
||||
this->p->schedule_background_process();
|
||||
}
|
||||
|
||||
void Plater::on_activate()
|
||||
{
|
||||
wxWindow *focus_window = wxWindow::FindFocus();
|
||||
if (focus_window == nullptr) {
|
||||
// Activating the main frame, and no window has keyboard focus.
|
||||
// Set the keyboard focus to the visible Canvas3D.
|
||||
if (this->p->view3D->IsShown())
|
||||
this->p->view3D->get_wxglcanvas()->SetFocus();
|
||||
else if (this->p->preview->IsShown())
|
||||
this->p->preview->get_wxglcanvas()->SetFocus();
|
||||
}
|
||||
if (! this->p->delayed_error_message.empty()) {
|
||||
std::string msg = std::move(this->p->delayed_error_message);
|
||||
this->p->delayed_error_message.clear();
|
||||
GUI::show_error(this, msg);
|
||||
}
|
||||
}
|
||||
|
||||
const wxString& Plater::get_project_filename() const
|
||||
{
|
||||
return p->project_filename;
|
||||
|
@ -151,6 +151,8 @@ public:
|
||||
|
||||
void on_extruders_change(int extruders_count);
|
||||
void on_config_change(const DynamicPrintConfig &config);
|
||||
// On activating the parent window.
|
||||
void on_activate();
|
||||
|
||||
void update_object_menu();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user