widget/gtk/WakeLockListener.h
author André Bargull <andre.bargull@gmail.com>
Tue, 05 Dec 2017 04:24:41 -0800
changeset 401144 8b6bb4335d4bb4e47045921aebe730113e9bd693
parent 388772 2ef70de6105b6b0041ef9665a2ec00b9e314e78b
child 438975 526b8427a5bfa7b45867f865a83672b5191f7395
permissions -rw-r--r--
Bug 1422415 - Part 2: Call _sprintf_l with C-locale to ensure result doesn't contain locale-dependent decimal separator. r=Waldo

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
 */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include <unistd.h>

#ifndef __WakeLockListener_h__
#define __WakeLockListener_h__

#include "mozilla/StaticPtr.h"
#include "nsHashKeys.h"
#include "nsClassHashtable.h"

#include "nsIDOMWakeLockListener.h"

#ifdef MOZ_ENABLE_DBUS
#include "mozilla/DBusHelpers.h"
#endif

class WakeLockTopic;

/**
 * Receives WakeLock events and simply passes it on to the right WakeLockTopic
 * to inhibit the screensaver.
 */
class WakeLockListener final : public nsIDOMMozWakeLockListener
{
public:
  NS_DECL_ISUPPORTS;

  static WakeLockListener* GetSingleton(bool aCreate = true);
  static void Shutdown();

  virtual nsresult Callback(const nsAString& topic,
                            const nsAString& state) override;

private:
  WakeLockListener();
  ~WakeLockListener() = default;

  static mozilla::StaticRefPtr<WakeLockListener> sSingleton;

#ifdef MOZ_ENABLE_DBUS
  RefPtr<DBusConnection> mConnection;
#endif
  // Map of topic names to |WakeLockTopic|s.
  // We assume a small, finite-sized set of topics.
  nsClassHashtable<nsStringHashKey, WakeLockTopic> mTopics;
};

#endif // __WakeLockListener_h__