<!DOCTYPE node PUBLIC
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
<node>

  <!--
      org.gnome.Mutter.ScreenCast:
      @short_description: Screen cast interface

      This API is private and not intended to be used outside of the integrated
      system that uses libmutter. No compatibility between versions are
      promised.
  -->
  <interface name="org.gnome.Mutter.ScreenCast">

    <!--
	CreateSession:
	@properties: Properties
	@session_path: Path to the new session object

	* "remote-desktop-session-id" (s): The ID of a remote desktop session.
					   Remote desktop driven screen casts
					   are started and stopped by the remote
					   desktop session.
    -->
    <method name="CreateSession">
      <arg name="properties" type="a{sv}" direction="in" />
      <arg name="session_path" type="o" direction="out" />
    </method>

    <!--
        Version:
        @short_description: API version
    -->
    <property name="Version" type="i" access="read" />

  </interface>

  <!--
       org.gnome.Mutter.ScreenCast.Session:
       @short_description: Screen cast session
  -->
  <interface name="org.gnome.Mutter.ScreenCast.Session">

    <!--
	Start:

	Start the screen cast session
    -->
    <method name="Start" />

    <!--
	Stop:

	Stop the screen cast session
    -->
    <method name="Stop" />

    <!--
	Closed:

	The session has closed.
    -->
    <signal name="Closed" />

    <!--
	RecordMonitor:
	@connector: Connector of the monitor to record
	@properties: Properties
	@stream_path: Path to the new stream object

	Record a single monitor.

	Available @properties include:

	* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
	                     Available since API version 2.

	Available cursor mode values:

	0: hidden - cursor is not included in the stream
	1: embedded - cursor is included in the framebuffer
	2: metadata - cursor is included as metadata in the PipeWire stream
    -->
    <method name="RecordMonitor">
      <arg name="connector" type="s" direction="in" />
      <arg name="properties" type="a{sv}" direction="in" />
      <arg name="stream_path" type="o" direction="out" />
    </method>

    <!--
	RecordWindow:
	@properties: Properties used determining what window to select
	@stream_path: Path to the new stream object

	Supported since API version 2.

	Record a single window. The cursor will not be included.

	Available @properties include:

	* "window-id" (t): Id of the window to record.
	* "cursor-mode" (u): Cursor mode. Default: 'hidden' (see RecordMonitor).

    -->
    <method name="RecordWindow">
      <arg name="properties" type="a{sv}" direction="in" />
      <arg name="stream_path" type="o" direction="out" />
    </method>
  </interface>

  <!--
       org.gnome.Mutter.ScreenCast.Stream:
       @short_description: Screen cast stream
  -->
  <interface name="org.gnome.Mutter.ScreenCast.Stream">

    <!--
	PipeWireStreamAdded:
	@short_description: Pipewire stream added

	A signal emitted when PipeWire stream for the screen cast stream has
	been created. The @node_id corresponds to the PipeWire stream node.
    -->
    <signal name="PipeWireStreamAdded">
      <annotation name="org.gtk.GDBus.C.Name" value="pipewire-stream-added"/>
      <arg name="node_id" type="u" direction="out" />
    </signal>

    <!--
	Parameters:
	@short_description: Optional stream parameters

	Available parameters include:

	* "position" (ii): Position of the source of the stream in the
	                   compositor coordinate space.
	* "size" (ii): Size of the source of the stream in the compositor
		       coordinate space.
    -->
    <property name="Parameters" type="a{sv}" access="read" />

  </interface>

</node>
