From 4601022aaa4825cf491a78dbc6948c87c50d329e Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 31 Aug 2022 17:15:34 +0800 Subject: [PATCH] FIX: stop video when not visible Change-Id: Ibc5204084efec5381a7ede9face0519276592aa8 --- src/slic3r/GUI/MediaFilePanel.cpp | 3 ++- src/slic3r/GUI/MediaPlayCtrl.cpp | 12 ++++++++++++ src/slic3r/GUI/Monitor.cpp | 3 +-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 5c8f1a42d..df65cbb5b 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -146,9 +146,10 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_button_delete->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { m_image_grid->DoActionOnSelection(0); }); auto onShowHide = [this](auto &e) { + e.Skip(); if (m_isBeingDeleted) return; auto fs = m_image_grid ? m_image_grid->GetFileSystem() : nullptr; - if (fs) e.IsShown() && IsShown() ? fs->Start() : fs->Stop(); + if (fs) IsShownOnScreen() ? fs->Start() : fs->Stop(); }; Bind(wxEVT_SHOW, onShowHide); parent->GetParent()->Bind(wxEVT_SHOW, onShowHide); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index f254e17c2..1232dee60 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -40,6 +40,14 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w #if BBL_RELEASE_TO_PUBLIC m_next_retry = wxDateTime::Now(); #endif + + auto onShowHide = [this](auto &e) { + e.Skip(); + if (m_isBeingDeleted) return; + IsShownOnScreen() ? Play() : Stop(); + }; + parent->Bind(wxEVT_SHOW, onShowHide); + parent->GetParent()->GetParent()->Bind(wxEVT_SHOW, onShowHide); } MediaPlayCtrl::~MediaPlayCtrl() @@ -72,6 +80,10 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj) void MediaPlayCtrl::Play() { + if (!m_next_retry.IsValid()) + return; + if (!IsShownOnScreen()) + return; if (m_machine.empty()) { Stop(); SetStatus(_L("Initialize failed (No Device)!")); diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 058f4ff92..a005cf771 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -402,7 +402,7 @@ void MonitorPanel::update_all() m_upgrade_panel->update(obj); - m_status_info_panel->m_media_play_ctrl->SetMachineObject(IsShown() ? obj : nullptr); + m_status_info_panel->m_media_play_ctrl->SetMachineObject(obj); m_media_file_panel->SetMachineObject(obj); update_status(obj); @@ -466,7 +466,6 @@ bool MonitorPanel::Show(bool show) } } else { m_refresh_timer->Stop(); - m_status_info_panel->m_media_play_ctrl->SetMachineObject(nullptr); } return wxPanel::Show(show); }