[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / windows / GUIWindowScreensaver.cpp
blob76eaa96a1e46ef0f8d2ff73b8f9b69e708074ea5
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "GUIWindowScreensaver.h"
11 #include "GUIPassword.h"
12 #include "GUIUserMessages.h"
13 #include "ServiceBroker.h"
14 #include "addons/AddonManager.h"
15 #include "addons/ScreenSaver.h"
16 #include "addons/addoninfo/AddonType.h"
17 #include "application/ApplicationComponents.h"
18 #include "application/ApplicationPowerHandling.h"
19 #include "guilib/GUIComponent.h"
20 #include "guilib/GUIWindowManager.h"
21 #include "settings/Settings.h"
22 #include "settings/SettingsComponent.h"
24 CGUIWindowScreensaver::CGUIWindowScreensaver() : CGUIWindow(WINDOW_SCREENSAVER, "")
28 void CGUIWindowScreensaver::Process(unsigned int currentTime, CDirtyRegionList& regions)
30 MarkDirtyRegion();
31 CGUIWindow::Process(currentTime, regions);
32 const auto& context = CServiceBroker::GetWinSystem()->GetGfxContext();
33 m_renderRegion.SetRect(0, 0, static_cast<float>(context.GetWidth()),
34 static_cast<float>(context.GetHeight()));
37 void CGUIWindowScreensaver::Render()
39 if (m_addon)
41 auto& context = CServiceBroker::GetWinSystem()->GetGfxContext();
43 context.CaptureStateBlock();
44 m_addon->Render();
45 context.ApplyStateBlock();
46 return;
49 CGUIWindow::Render();
52 // called when the mouse is moved/clicked etc. etc.
53 EVENT_RESULT CGUIWindowScreensaver::OnMouseEvent(const CPoint& point, const CMouseEvent& event)
55 CServiceBroker::GetGUI()->GetWindowManager().PreviousWindow();
56 return EVENT_RESULT_HANDLED;
59 bool CGUIWindowScreensaver::OnMessage(CGUIMessage& message)
61 switch (message.GetMessage())
63 case GUI_MSG_WINDOW_DEINIT:
65 if (m_addon)
67 m_addon->Stop();
68 m_addon.reset();
71 CServiceBroker::GetWinSystem()->GetGfxContext().ApplyStateBlock();
73 break;
75 case GUI_MSG_WINDOW_INIT:
77 CGUIWindow::OnMessage(message);
79 CServiceBroker::GetWinSystem()->GetGfxContext().CaptureStateBlock();
81 const std::string addon = CServiceBroker::GetSettingsComponent()->GetSettings()->GetString(
82 CSettings::SETTING_SCREENSAVER_MODE);
83 const ADDON::AddonInfoPtr addonBase =
84 CServiceBroker::GetAddonMgr().GetAddonInfo(addon, ADDON::AddonType::SCREENSAVER);
85 if (!addonBase)
86 return false;
87 m_addon = std::make_unique<KODI::ADDONS::CScreenSaver>(addonBase);
88 return m_addon->Start();
91 case GUI_MSG_CHECK_LOCK:
93 auto& components = CServiceBroker::GetAppComponents();
94 const auto appPower = components.GetComponent<CApplicationPowerHandling>();
95 if (!g_passwordManager.IsProfileLockUnlocked())
97 appPower->SetScreenSaverLockFailed();
98 return false;
100 appPower->SetScreenSaverUnlocked();
101 return true;
105 return CGUIWindow::OnMessage(message);