chromium/components/exo/server/wayland_server_handle.h

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

#ifndef COMPONENTS_EXO_SERVER_WAYLAND_SERVER_HANDLE_H_
#define COMPONENTS_EXO_SERVER_WAYLAND_SERVER_HANDLE_H_

namespace exo {

class WaylandServerController;

// This is an opaque type used to represent the lifetime of the wayland server.
// Clients should delete this object when they want exo to remove the server.
class WaylandServerHandle {
 public:
  // Handles can not be moved or assigned
  WaylandServerHandle(WaylandServerHandle&&) = delete;
  WaylandServerHandle(const WaylandServerHandle&) = delete;
  WaylandServerHandle& operator=(WaylandServerHandle&&) = delete;
  WaylandServerHandle& operator=(const WaylandServerHandle&) = delete;

  ~WaylandServerHandle();

 private:
  // Only the controller can make these.
  friend class WaylandServerController;
  WaylandServerHandle();
};

}  // namespace exo
#endif  // COMPONENTS_EXO_SERVER_WAYLAND_SERVER_HANDLE_H_