// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_BASE_X_X11_FOREIGN_WINDOW_MANAGER_H_
#define UI_BASE_X_X11_FOREIGN_WINDOW_MANAGER_H_

#include <map>
#include <vector>

#include "base/basictypes.h"
#include "ui/base/ui_base_export.h"
#include "ui/gfx/x/x11_types.h"

// A process wide singleton for selecting events on X windows which were not
// created by Chrome.
template <typename T> struct DefaultSingletonTraits;

namespace ui {

// Manages the events that Chrome has selected on X windows which were not
// created by Chrome. This class allows several clients to select events
// on the same X window.
class UI_BASE_EXPORT XForeignWindowManager {
 public:
  static XForeignWindowManager* GetInstance();

  // Requests that events associated with |event_mask| on |xid| be reported to
  // Chrome. Returns an id to use for canceling the request.
  int RequestEvents(XID xid, long event_mask) WARN_UNUSED_RESULT;

  // Cancels the request with |request_id|. Unless there is another request for
  // events on the X window associated with |request_id|, this stops Chrome from
  // getting events for the X window.
  void CancelRequest(int request_id);

  // Called by X11DesktopHandler when |xid| is destroyed.
  void OnWindowDestroyed(XID xid);

 private:
  friend struct DefaultSingletonTraits<XForeignWindowManager>;

  struct Request {
    Request(int request_id, long entry_event_mask);
    ~Request();

    int request_id;
    long event_mask;
  };

  XForeignWindowManager();
  ~XForeignWindowManager();

  // Updates which events are selected on |xid|.
  void UpdateSelectedEvents(XID xid);

  // The id of the next request.
  int next_request_id_;

  typedef std::vector<Request> RequestVector;
  std::map<XID, RequestVector> request_map_;

  DISALLOW_COPY_AND_ASSIGN(XForeignWindowManager);
};

}  // namespace ui

#endif  // UI_BASE_X_X11_FOREIGN_WINDOW_MANAGER_H_
