From 75d2d7cc739761079706ab020757d452e6c8d5f8 Mon Sep 17 00:00:00 2001 From: enen92 <92enen@gmail.com> Date: Mon, 8 Jul 2024 11:20:18 +0100 Subject: [GUIWindowSlideShow] Close dialog if a video starts playing --- xbmc/pictures/GUIWindowSlideShow.cpp | 18 ++++++++++++++++++ xbmc/pictures/GUIWindowSlideShow.h | 11 ++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/xbmc/pictures/GUIWindowSlideShow.cpp b/xbmc/pictures/GUIWindowSlideShow.cpp index 6dc76a5c9a..fbe77a374f 100644 --- a/xbmc/pictures/GUIWindowSlideShow.cpp +++ b/xbmc/pictures/GUIWindowSlideShow.cpp @@ -152,12 +152,30 @@ CGUIWindowSlideShow::CGUIWindowSlideShow(void) m_loadType = KEEP_IN_MEMORY; m_bLoadNextPic = false; CServiceBroker::GetSlideShowDelegator().SetDelegate(this); + CServiceBroker::GetAnnouncementManager()->AddAnnouncer(this); Reset(); } CGUIWindowSlideShow::~CGUIWindowSlideShow() { CServiceBroker::GetSlideShowDelegator().ResetDelegate(); + CServiceBroker::GetAnnouncementManager()->RemoveAnnouncer(this); +} + +void CGUIWindowSlideShow::Announce(ANNOUNCEMENT::AnnouncementFlag flag, + const std::string& sender, + const std::string& message, + const CVariant& data) +{ + if (flag & ANNOUNCEMENT::Player) + { + if (message == "OnPlay" || message == "OnResume") + { + if (data.isMember("player") && data["player"].isMember("playerid") && + data["player"]["playerid"] == static_cast(PLAYLIST::Id::TYPE_VIDEO)) + Close(); + } + } } void CGUIWindowSlideShow::AnnouncePlayerPlay(const CFileItemPtr& item) diff --git a/xbmc/pictures/GUIWindowSlideShow.h b/xbmc/pictures/GUIWindowSlideShow.h index 0033a39667..5c6e82268a 100644 --- a/xbmc/pictures/GUIWindowSlideShow.h +++ b/xbmc/pictures/GUIWindowSlideShow.h @@ -10,6 +10,7 @@ #include "SlideShowPicture.h" #include "guilib/GUIDialog.h" +#include "interfaces/IAnnouncer.h" #include "interfaces/ISlideShowDelegate.h" #include "threads/Event.h" #include "threads/Thread.h" @@ -48,7 +49,9 @@ private: CGUIWindowSlideShow* m_pCallback = nullptr; }; -class CGUIWindowSlideShow : public CGUIDialog, public ISlideShowDelegate +class CGUIWindowSlideShow : public CGUIDialog, + public ISlideShowDelegate, + public ANNOUNCEMENT::IAnnouncer { public: CGUIWindowSlideShow(void); @@ -87,6 +90,12 @@ public: void Shuffle() override; int GetDirection() const override { return m_iDirection; } + // implementation of IAnnouncer + void Announce(ANNOUNCEMENT::AnnouncementFlag flag, + const std::string& sender, + const std::string& message, + const CVariant& data) override; + bool OnMessage(CGUIMessage& message) override; EVENT_RESULT OnMouseEvent(const CPoint& point, const KODI::MOUSE::CMouseEvent& event) override; bool OnAction(const CAction& action) override; -- cgit v1.2.3