From b1eef1f2dc943abe132dc29d3b841f572245a05a Mon Sep 17 00:00:00 2001 From: Stephen Hurd Date: Sun, 5 Sep 2021 02:04:46 +0200 Subject: [PATCH] Fix for supermerill/SuperSlicer#888 The CallAfter() on Linux causes weird window focus issues. For me, using ALT-Tab to switch away from PrusaSlicer/SuperSlicer would cause PrusaSlicer/SuperSlicer to take back focus after about one second. Stranger things reportedly occur with focus-follows-mouse. The #ifdef is there because it is assumed the CallAfter() was added in 20f5b7a for a good reason. --- src/slic3r/GUI/Plater.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 26f93099064..7e511639ddd 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6115,9 +6115,14 @@ void Plater::force_print_bed_update() void Plater::on_activate() { -#if defined(__linux__) || defined(_WIN32) // Activating the main frame, and no window has keyboard focus. // Set the keyboard focus to the visible Canvas3D. +#if defined(__linux__) + if (this->p->view3D->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas()) + this->p->view3D->get_wxglcanvas()->SetFocus(); + else if (this->p->preview->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas()) + this->p->preview->get_wxglcanvas()->SetFocus(); +#elif defined(_WIN32) if (this->p->view3D->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas()) CallAfter([this]() { this->p->view3D->get_wxglcanvas()->SetFocus(); }); else if (this->p->preview->IsShown() && wxWindow::FindFocus() != this->p->view3D->get_wxglcanvas())