summaryrefslogtreecommitdiffstats
path: root/xbmc/windowing/wayland/OSScreenSaverIdleInhibitUnstableV1.cpp
blob: 32dbbc6cd8a76dbaac2a4ab6606ce74571c69e01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 *  Copyright (C) 2017-2018 Team Kodi
 *  This file is part of Kodi - https://kodi.tv
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *  See LICENSES/README.md for more information.
 */

#include "OSScreenSaverIdleInhibitUnstableV1.h"

#include "Registry.h"

#include <cassert>

using namespace KODI::WINDOWING::WAYLAND;

COSScreenSaverIdleInhibitUnstableV1* COSScreenSaverIdleInhibitUnstableV1::TryCreate(CConnection& connection, wayland::surface_t const& inhibitSurface)
{
  wayland::zwp_idle_inhibit_manager_v1_t manager;
  CRegistry registry{connection};
  registry.RequestSingleton(manager, 1, 1, false);
  registry.Bind();

  if (manager)
  {
    return new COSScreenSaverIdleInhibitUnstableV1(manager, inhibitSurface);
  }
  else
  {
    return nullptr;
  }
}

COSScreenSaverIdleInhibitUnstableV1::COSScreenSaverIdleInhibitUnstableV1(const wayland::zwp_idle_inhibit_manager_v1_t& manager, const wayland::surface_t& inhibitSurface)
: m_manager{manager}, m_surface{inhibitSurface}
{
  assert(m_manager);
  assert(m_surface);
}

void COSScreenSaverIdleInhibitUnstableV1::Inhibit()
{
  if (!m_inhibitor)
  {
    m_inhibitor = m_manager.create_inhibitor(m_surface);
  }
}

void COSScreenSaverIdleInhibitUnstableV1::Uninhibit()
{
  m_inhibitor.proxy_release();
}