<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <package name="spice-client-glib-2.0"/>
  <c:include name="spice-client.h"/>
  <namespace name="SpiceClientGLib"
             version="2.0"
             shared-library="libspice-client-glib-2.0.so.8"
             c:identifier-prefixes="Spice"
             c:symbol-prefixes="spice">
    <class name="Audio"
           c:symbol-prefix="audio"
           c:type="SpiceAudio"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="SpiceAudio"
           glib:get-type="spice_audio_get_type"
           glib:type-struct="AudioClass">
      <doc xml:space="preserve">The #SpiceAudio struct is opaque and should not be accessed directly.</doc>
      <constructor name="new"
                   c:identifier="spice_audio_new"
                   deprecated="1"
                   deprecated-version="0.8">
        <doc xml:space="preserve">Once instantiated, #SpiceAudio will handle the playback and record
channels to stream to your local audio system.</doc>
        <doc-deprecated xml:space="preserve">Use spice_audio_get() instead</doc-deprecated>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #SpiceAudio instance or %NULL if no backend or failed.</doc>
          <type name="Audio" c:type="SpiceAudio*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceSession to connect to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="context"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GMainContext to attach to (or %NULL for
default).</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
          <parameter name="name"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a name for the audio channels (or %NULL for
application name).</doc>
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="get" c:identifier="spice_audio_get">
        <doc xml:space="preserve">Gets the #SpiceAudio associated with the passed in #SpiceSession.
A new #SpiceAudio instance will be created the first time this
function is called for a certain #SpiceSession.

Note that this function returns a weak reference, which should not be used
after the #SpiceSession itself has been unref-ed by the caller.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to a #SpiceAudio
instance or %NULL if failed.</doc>
          <type name="Audio" c:type="SpiceAudio*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceSession to connect to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="context"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">a #GMainContext to attach to (or %NULL for default).</doc>
            <type name="GLib.MainContext" c:type="GMainContext*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="connect_channel">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_playback_volume_info_async">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="main_channel" transfer-ownership="none">
            <type name="MainChannel" c:type="SpiceMainChannel*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     closure="3">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_playback_volume_info_finish" throws="1">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="mute" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="nchannels" transfer-ownership="none">
            <type name="guint8" c:type="guint8*"/>
          </parameter>
          <parameter name="volume" transfer-ownership="none">
            <type name="guint16" c:type="guint16**"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_record_volume_info_async">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="main_channel" transfer-ownership="none">
            <type name="MainChannel" c:type="SpiceMainChannel*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     closure="3">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_record_volume_info_finish" throws="1">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="audio" transfer-ownership="none">
            <type name="Audio" c:type="SpiceAudio*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="mute" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="nchannels" transfer-ownership="none">
            <type name="guint8" c:type="guint8*"/>
          </parameter>
          <parameter name="volume" transfer-ownership="none">
            <type name="guint16" c:type="guint16**"/>
          </parameter>
        </parameters>
      </virtual-method>
      <property name="main-context"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="GLib.MainContext"/>
      </property>
      <property name="session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSession this #SpiceAudio is associated with</doc>
        <type name="Session"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="AudioPrivate" c:type="SpiceAudioPrivate*"/>
      </field>
    </class>
    <record name="AudioClass"
            c:type="SpiceAudioClass"
            glib:is-gtype-struct-for="Audio">
      <doc xml:space="preserve">Class structure for #SpiceAudio.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="connect_channel">
        <callback name="connect_channel">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_playback_volume_info_async">
        <callback name="get_playback_volume_info_async">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="main_channel" transfer-ownership="none">
              <type name="MainChannel" c:type="SpiceMainChannel*"/>
            </parameter>
            <parameter name="callback"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       scope="async"
                       closure="4">
              <type name="Gio.AsyncReadyCallback"
                    c:type="GAsyncReadyCallback"/>
            </parameter>
            <parameter name="user_data"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       closure="4">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_playback_volume_info_finish">
        <callback name="get_playback_volume_info_finish" throws="1">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="res" transfer-ownership="none">
              <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
            </parameter>
            <parameter name="mute" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean*"/>
            </parameter>
            <parameter name="nchannels" transfer-ownership="none">
              <type name="guint8" c:type="guint8*"/>
            </parameter>
            <parameter name="volume" transfer-ownership="none">
              <type name="guint16" c:type="guint16**"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_record_volume_info_async">
        <callback name="get_record_volume_info_async">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="main_channel" transfer-ownership="none">
              <type name="MainChannel" c:type="SpiceMainChannel*"/>
            </parameter>
            <parameter name="callback"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       scope="async"
                       closure="4">
              <type name="Gio.AsyncReadyCallback"
                    c:type="GAsyncReadyCallback"/>
            </parameter>
            <parameter name="user_data"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1"
                       closure="4">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_record_volume_info_finish">
        <callback name="get_record_volume_info_finish" throws="1">
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="audio" transfer-ownership="none">
              <type name="Audio" c:type="SpiceAudio*"/>
            </parameter>
            <parameter name="res" transfer-ownership="none">
              <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
            </parameter>
            <parameter name="mute" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean*"/>
            </parameter>
            <parameter name="nchannels" transfer-ownership="none">
              <type name="guint8" c:type="guint8*"/>
            </parameter>
            <parameter name="volume" transfer-ownership="none">
              <type name="guint16" c:type="guint16**"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="AudioPrivate" c:type="SpiceAudioPrivate" disguised="1">
    </record>
    <class name="Channel"
           c:symbol-prefix="channel"
           c:type="SpiceChannel"
           parent="GObject.Object"
           glib:type-name="SpiceChannel"
           glib:get-type="spice_channel_get_type"
           glib:type-struct="ChannelClass">
      <doc xml:space="preserve">The #SpiceChannel struct is opaque and should not be accessed directly.</doc>
      <constructor name="new" c:identifier="spice_channel_new">
        <doc xml:space="preserve">Create a new #SpiceChannel of type @type, and channel ID @id.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a weak reference to #SpiceChannel, the session owns the reference</doc>
          <type name="Channel" c:type="SpiceChannel*"/>
        </return-value>
        <parameters>
          <parameter name="s" transfer-ownership="none">
            <doc xml:space="preserve">the @SpiceSession the channel is linked to</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">the requested SPICECHANNELPRIVATE type</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">the channel-id</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="string_to_type"
                c:identifier="spice_channel_string_to_type"
                version="0.21">
        <doc xml:space="preserve">Convert a channel-type property value to a string.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the channel-type property value for a @str channel</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <parameter name="str" transfer-ownership="none">
            <doc xml:space="preserve">a string representation of the channel-type property</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </function>
      <function name="type_to_string"
                c:identifier="spice_channel_type_to_string"
                version="0.20">
        <doc xml:space="preserve">Convert a channel-type property value to a string.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">string representation of @type.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">a channel-type property value</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="channel_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="event" transfer-ownership="none">
            <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_reset">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="migrating" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_reset_capabilities">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_send_migration_handshake">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_up">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="handle_msg">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="msg" transfer-ownership="none">
            <type name="MsgIn" c:type="SpiceMsgIn*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="iterate_read">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="iterate_write">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="open_fd">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="with_tls" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="connect" c:identifier="spice_channel_connect">
        <doc xml:space="preserve">Connect the channel, using #SpiceSession connection informations</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="destroy"
              c:identifier="spice_channel_destroy"
              deprecated="1"
              deprecated-version="0.27">
        <doc xml:space="preserve">Disconnect and unref the @channel.</doc>
        <doc-deprecated xml:space="preserve">this function has been deprecated because it is
misleading, the object is not actually destroyed. Instead, it is
recommended to call explicitely spice_channel_disconnect() and
g_object_unref().</doc-deprecated>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="disconnect" c:identifier="spice_channel_disconnect">
        <doc xml:space="preserve">Close the socket and reset connection specific data. Finally, emit
@reason #SpiceChannel::channel-event on main context if not
#SPICE_CHANNEL_NONE.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="reason" transfer-ownership="none">
            <doc xml:space="preserve">a channel event emitted on main context (or #SPICE_CHANNEL_NONE)</doc>
            <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
          </parameter>
        </parameters>
      </method>
      <method name="flush_async"
              c:identifier="spice_channel_flush_async"
              version="0.15">
        <doc xml:space="preserve">Forces an asynchronous write of all user-space buffered data for
the given channel.

When the operation is finished callback will be called. You can
then call spice_channel_flush_finish() to get the result of the
operation.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">optional GCancellable object, %NULL to ignore</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve">callback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the data to pass to callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="flush_finish"
              c:identifier="spice_channel_flush_finish"
              version="0.15"
              throws="1">
        <doc xml:space="preserve">Finishes flushing a channel.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if flush operation succeeded, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_error"
              c:identifier="spice_channel_get_error"
              version="0.24">
        <doc xml:space="preserve">Retrieves the #GError currently set on channel, if the #SpiceChannel
is in error state and can provide additional error details.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the pointer to the error, or %NULL</doc>
          <type name="GLib.Error" c:type="const GError*"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="open_fd" c:identifier="spice_channel_open_fd">
        <doc xml:space="preserve">Connect the channel using @fd socket.

If @fd is -1, a valid fd will be requested later via the
SpiceChannel::open-fd signal.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="fd" transfer-ownership="none">
            <doc xml:space="preserve">a file descriptor (socket) or -1.
request mechanism</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_capability"
              c:identifier="spice_channel_set_capability"
              deprecated="1"
              deprecated-version="0.13">
        <doc xml:space="preserve">Enable specific channel-kind capability.</doc>
        <doc-deprecated xml:space="preserve">this function has been removed</doc-deprecated>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <doc xml:space="preserve">a capability</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="test_capability"
              c:identifier="spice_channel_test_capability">
        <doc xml:space="preserve">Test availability of remote "channel kind capability".</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @cap (channel kind capability) is available.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <doc xml:space="preserve">a capability</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <method name="test_common_capability"
              c:identifier="spice_channel_test_common_capability">
        <doc xml:space="preserve">Test availability of remote "common channel capability".</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @cap (common channel capability) is available.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel</doc>
            <type name="Channel" c:type="SpiceChannel*"/>
          </instance-parameter>
          <parameter name="cap" transfer-ownership="none">
            <doc xml:space="preserve">a capability</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <property name="channel-id"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="channel-type"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="socket" version="0.33" transfer-ownership="none">
        <doc xml:space="preserve">Get the underlying #GSocket. Note that you should not read or
write any data to it directly since this will likely corrupt
the channel stream.  This property is mainly useful to get some
connections details.</doc>
        <type name="Gio.Socket"/>
      </property>
      <property name="spice-session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Session"/>
      </property>
      <property name="total-read-bytes" transfer-ownership="none">
        <type name="gulong" c:type="gulong"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ChannelPrivate" c:type="SpiceChannelPrivate*"/>
      </field>
      <glib:signal name="channel-event" when="first">
        <doc xml:space="preserve">The #SpiceChannel::channel-event signal is emitted when the
state of the connection is changed. In case of errors,
spice_channel_get_error() may provide additional informations
on the source of the error.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannelEvent</doc>
            <type name="ChannelEvent"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="open-fd" when="first">
        <doc xml:space="preserve">The #SpiceChannel::open-fd signal is emitted when a new
connection is requested. This signal is emitted when the
connection is made with spice_session_open_fd().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="with_tls" transfer-ownership="none">
            <doc xml:space="preserve">wether TLS connection is requested</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ChannelClass"
            c:type="SpiceChannelClass"
            glib:is-gtype-struct-for="Channel">
      <doc xml:space="preserve">Class structure for #SpiceChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="channel_event">
        <callback name="channel_event">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="event" transfer-ownership="none">
              <type name="ChannelEvent" c:type="SpiceChannelEvent"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="open_fd">
        <callback name="open_fd">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="with_tls" transfer-ownership="none">
              <type name="gint" c:type="int"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="handle_msg">
        <callback name="handle_msg">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="msg" transfer-ownership="none">
              <type name="MsgIn" c:type="SpiceMsgIn*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_up">
        <callback name="channel_up">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="iterate_write">
        <callback name="iterate_write">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="iterate_read">
        <callback name="iterate_read">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="deprecated" readable="0" private="1">
        <type name="gpointer" c:type="gpointer"/>
      </field>
      <field name="channel_reset">
        <callback name="channel_reset">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="migrating" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_reset_capabilities">
        <callback name="channel_reset_capabilities">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_send_migration_handshake">
        <callback name="channel_send_migration_handshake">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="ChannelClassPrivate" c:type="SpiceChannelClassPrivate*"/>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="ChannelClassPrivate"
            c:type="SpiceChannelClassPrivate"
            disguised="1">
    </record>
    <enumeration name="ChannelEvent"
                 glib:type-name="SpiceChannelEvent"
                 glib:get-type="spice_channel_event_get_type"
                 c:type="SpiceChannelEvent">
      <doc xml:space="preserve">An event, emitted by #SpiceChannel::channel-event signal.</doc>
      <member name="none"
              value="0"
              c:identifier="SPICE_CHANNEL_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no event, or ignored event</doc>
      </member>
      <member name="opened"
              value="10"
              c:identifier="SPICE_CHANNEL_OPENED"
              glib:nick="opened">
        <doc xml:space="preserve">connection is authentified and ready</doc>
      </member>
      <member name="switching"
              value="11"
              c:identifier="SPICE_CHANNEL_SWITCHING"
              glib:nick="switching">
        <doc xml:space="preserve">disconnecting from the current host and connecting to the target host.</doc>
      </member>
      <member name="closed"
              value="12"
              c:identifier="SPICE_CHANNEL_CLOSED"
              glib:nick="closed">
        <doc xml:space="preserve">connection is closed normally (sent if channel was ready)</doc>
      </member>
      <member name="error_connect"
              value="20"
              c:identifier="SPICE_CHANNEL_ERROR_CONNECT"
              glib:nick="error-connect">
        <doc xml:space="preserve">connection error</doc>
      </member>
      <member name="error_tls"
              value="21"
              c:identifier="SPICE_CHANNEL_ERROR_TLS"
              glib:nick="error-tls">
        <doc xml:space="preserve">SSL error</doc>
      </member>
      <member name="error_link"
              value="22"
              c:identifier="SPICE_CHANNEL_ERROR_LINK"
              glib:nick="error-link">
        <doc xml:space="preserve">error during link process</doc>
      </member>
      <member name="error_auth"
              value="23"
              c:identifier="SPICE_CHANNEL_ERROR_AUTH"
              glib:nick="error-auth">
        <doc xml:space="preserve">authentication error</doc>
      </member>
      <member name="error_io"
              value="24"
              c:identifier="SPICE_CHANNEL_ERROR_IO"
              glib:nick="error-io">
        <doc xml:space="preserve">IO error</doc>
      </member>
    </enumeration>
    <record name="ChannelPrivate" c:type="SpiceChannelPrivate" disguised="1">
    </record>
    <enumeration name="ClientError"
                 c:type="SpiceClientError"
                 glib:error-domain="spice-client-error-quark">
      <doc xml:space="preserve">Error codes returned by spice-client API.</doc>
      <member name="failed" value="0" c:identifier="SPICE_CLIENT_ERROR_FAILED">
        <doc xml:space="preserve">generic error code</doc>
      </member>
      <member name="usb_device_rejected"
              value="1"
              c:identifier="SPICE_CLIENT_ERROR_USB_DEVICE_REJECTED">
        <doc xml:space="preserve">device redirection rejected by host</doc>
      </member>
      <member name="usb_device_lost"
              value="2"
              c:identifier="SPICE_CLIENT_ERROR_USB_DEVICE_LOST">
        <doc xml:space="preserve">device disconnected (fatal IO error)</doc>
      </member>
      <member name="auth_needs_password"
              value="3"
              c:identifier="SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD">
        <doc xml:space="preserve">password is required</doc>
      </member>
      <member name="auth_needs_username"
              value="4"
              c:identifier="SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME">
        <doc xml:space="preserve">username is required</doc>
      </member>
      <member name="auth_needs_password_and_username"
              value="5"
              c:identifier="SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME">
        <doc xml:space="preserve">password and username are required</doc>
      </member>
      <member name="usb_service"
              value="6"
              c:identifier="SPICE_CLIENT_ERROR_USB_SERVICE">
        <doc xml:space="preserve">USB service error</doc>
      </member>
    </enumeration>
    <class name="CursorChannel"
           c:symbol-prefix="cursor_channel"
           c:type="SpiceCursorChannel"
           parent="Channel"
           glib:type-name="SpiceCursorChannel"
           glib:get-type="spice_cursor_channel_get_type"
           glib:type-struct="CursorChannelClass">
      <doc xml:space="preserve">The #SpiceCursorChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="cursor_hide">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_move">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_reset">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="cursor_set">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
          </instance-parameter>
          <parameter name="width" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_x" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_y" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rgba"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="CursorChannelPrivate" c:type="SpiceCursorChannelPrivate*"/>
      </field>
      <glib:signal name="cursor-hide" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-hide signal is emitted to hide
the cursor/pointer on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="cursor-move" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-move signal is emitted to update
the cursor position on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">x position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">y position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="cursor-reset" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-reset signal is emitted to
reset the cursor to its default context.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="cursor-set" when="first">
        <doc xml:space="preserve">The #SpiceCursorChannel::cursor-set signal is emitted to modify
cursor aspect and position on the display area.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width of the shape</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height of the shape</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_x" transfer-ownership="none">
            <doc xml:space="preserve">horizontal offset of the 'hotspot' of the cursor</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="hot_y" transfer-ownership="none">
            <doc xml:space="preserve">vertical offset of the 'hotspot' of the cursor</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rgba"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">32bits shape data, or %NULL if default cursor. It might
be freed after the signal is emitted, so make sure to copy it
if you need it later!</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="CursorChannelClass"
            c:type="SpiceCursorChannelClass"
            glib:is-gtype-struct-for="CursorChannel">
      <doc xml:space="preserve">Class structure for #SpiceCursorChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="cursor_set">
        <callback name="cursor_set">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
            <parameter name="width" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="height" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="hot_x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="hot_y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="rgba"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_move">
        <callback name="cursor_move">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
            <parameter name="x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_hide">
        <callback name="cursor_hide">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="cursor_reset">
        <callback name="cursor_reset">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="CursorChannel" c:type="SpiceCursorChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="CursorChannelPrivate"
            c:type="SpiceCursorChannelPrivate"
            disguised="1">
    </record>
    <class name="DisplayChannel"
           c:symbol-prefix="display_channel"
           c:type="SpiceDisplayChannel"
           parent="Channel"
           glib:type-name="SpiceDisplayChannel"
           glib:get-type="spice_display_channel_get_type"
           glib:type-struct="DisplayChannelClass">
      <doc xml:space="preserve">The #SpiceDisplayChannel struct is opaque and should not be accessed directly.</doc>
      <property name="gl-scanout" version="0.31" transfer-ownership="none">
        <doc xml:space="preserve">The last #SpiceGlScanout received.</doc>
        <type name="GlScanout"/>
      </property>
      <property name="height" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="monitors" version="0.13" transfer-ownership="none">
        <doc xml:space="preserve">Current monitors configuration.</doc>
        <array name="GLib.Array">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="monitors-max" version="0.13" transfer-ownership="none">
        <doc xml:space="preserve">The maximum number of monitors the server or guest supports.
May change during client lifetime, for instance guest may
reboot or dynamically adjust this.</doc>
        <type name="guint" c:type="guint"/>
      </property>
      <property name="width" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DisplayChannelPrivate"
              c:type="SpiceDisplayChannelPrivate*"/>
      </field>
      <glib:signal name="display-invalidate" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-invalidate signal is emitted
when the rectangular region x/y/w/h of the primary buffer is
updated.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">x position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">y position</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-mark" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-mark signal is emitted when
the %RED_DISPLAY_MARK command is received, and the display
should be exposed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="mark" transfer-ownership="none">
            <doc xml:space="preserve">%TRUE when the display mark has been received</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-primary-create" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-primary-create signal
provides main display buffer data.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">%SPICE_SURFACE_FMT_32_xRGB or %SPICE_SURFACE_FMT_16_555;</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width resolution</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height resolution</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="stride" transfer-ownership="none">
            <doc xml:space="preserve">the buffer stride ("width" padding)</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="shmid" transfer-ownership="none">
            <doc xml:space="preserve">identifier of the shared memory segment associated with
the @imgdata, or -1 if not shm</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="imgdata"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">pointer to surface buffer</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="display-primary-destroy" when="first">
        <doc xml:space="preserve">The #SpiceDisplayChannel::display-primary-destroy signal is
emitted when the primary surface is freed and should not be
accessed anymore.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="gl-draw" version="0.31">
        <doc xml:space="preserve">The #SpiceDisplayChannel::draw signal is emitted when the
rectangular region x/y/w/h of the GL scanout is updated and
must be drawn. When the draw is finished, you must call
spice_display_gl_draw_done() in order to release the GL
resources.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <doc xml:space="preserve">x position</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <doc xml:space="preserve">y position</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <doc xml:space="preserve">width</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <doc xml:space="preserve">height</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="DisplayChannelClass"
            c:type="SpiceDisplayChannelClass"
            glib:is-gtype-struct-for="DisplayChannel">
      <doc xml:space="preserve">Class structure for #SpiceDisplayChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="display_primary_create">
        <callback name="display_primary_create">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="width" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="height" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="stride" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="shmid" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="data" transfer-ownership="none">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_primary_destroy">
        <callback name="display_primary_destroy">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_invalidate">
        <callback name="display_invalidate">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="x" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="y" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="w" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="h" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="display_mark">
        <callback name="display_mark">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
            <parameter name="mark" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="DisplayChannelPrivate"
            c:type="SpiceDisplayChannelPrivate"
            disguised="1">
    </record>
    <record name="DisplayMonitorConfig" c:type="SpiceDisplayMonitorConfig">
      <doc xml:space="preserve">Holds a monitor configuration.</doc>
      <field name="id" writable="1">
        <doc xml:space="preserve">monitor id</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="surface_id" writable="1">
        <doc xml:space="preserve">monitor surface id</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="x" writable="1">
        <doc xml:space="preserve">x position of the monitor</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="y" writable="1">
        <doc xml:space="preserve">y position of the monitor</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="width" writable="1">
        <doc xml:space="preserve">width of the monitor</doc>
        <type name="guint" c:type="guint"/>
      </field>
      <field name="height" writable="1">
        <doc xml:space="preserve">height of the monitor</doc>
        <type name="guint" c:type="guint"/>
      </field>
    </record>
    <record name="DisplayPrimary" c:type="SpiceDisplayPrimary">
      <doc xml:space="preserve">Holds the information necessary to use the primary surface.</doc>
      <field name="format" writable="1">
        <doc xml:space="preserve">primary buffer format</doc>
        <type name="gpointer" c:type="SpiceSurfaceFmt"/>
      </field>
      <field name="width" writable="1">
        <doc xml:space="preserve">width of the primary</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="height" writable="1">
        <doc xml:space="preserve">height of the primary</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="stride" writable="1">
        <doc xml:space="preserve">stride of the primary</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="shmid" writable="1">
        <doc xml:space="preserve">identifier of the shared memory segment associated with
the @data, or -1 if not shm</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="data" writable="1">
        <doc xml:space="preserve">pointer to primary buffer</doc>
        <type name="guint8" c:type="guint8*"/>
      </field>
      <field name="marked" writable="1">
        <doc xml:space="preserve">whether the display is marked ready</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
    </record>
    <class name="FileTransferTask"
           c:symbol-prefix="file_transfer_task"
           c:type="SpiceFileTransferTask"
           parent="GObject.Object"
           glib:type-name="SpiceFileTransferTask"
           glib:get-type="spice_file_transfer_task_get_type"
           glib:type-struct="FileTransferTaskClass">
      <method name="cancel" c:identifier="spice_file_transfer_task_cancel">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="FileTransferTask" c:type="SpiceFileTransferTask*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_filename"
              c:identifier="spice_file_transfer_task_get_filename">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="char*"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="FileTransferTask" c:type="SpiceFileTransferTask*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_progress"
              c:identifier="spice_file_transfer_task_get_progress">
        <return-value transfer-ownership="none">
          <type name="gdouble" c:type="double"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="FileTransferTask" c:type="SpiceFileTransferTask*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_total_bytes"
              c:identifier="spice_file_transfer_task_get_total_bytes">
        <return-value transfer-ownership="none">
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="FileTransferTask" c:type="SpiceFileTransferTask*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_transferred_bytes"
              c:identifier="spice_file_transfer_task_get_transferred_bytes">
        <return-value transfer-ownership="none">
          <type name="guint64" c:type="guint64"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <type name="FileTransferTask" c:type="SpiceFileTransferTask*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="cancellable"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.Cancellable"/>
      </property>
      <property name="channel"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="MainChannel"/>
      </property>
      <property name="file"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.File"/>
      </property>
      <property name="id"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="progress" transfer-ownership="none">
        <type name="gdouble" c:type="gdouble"/>
      </property>
      <property name="total-bytes" transfer-ownership="none">
        <type name="guint64" c:type="guint64"/>
      </property>
      <property name="transferred-bytes" transfer-ownership="none">
        <type name="guint64" c:type="guint64"/>
      </property>
      <glib:signal name="finished" when="first">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="FileTransferTaskClass"
            c:type="SpiceFileTransferTaskClass"
            disguised="1"
            glib:is-gtype-struct-for="FileTransferTask">
    </record>
    <constant name="GTK_MAJOR_VERSION"
              value="0"
              c:type="SPICE_GTK_MAJOR_VERSION"
              version="0.24">
      <doc xml:space="preserve">Spice-Gtk major version component (e.g. 1 if version is 1.2.3)</doc>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="GTK_MICRO_VERSION"
              value="0"
              c:type="SPICE_GTK_MICRO_VERSION"
              version="0.24">
      <doc xml:space="preserve">Spice-Gtk micro version component (e.g. 3 if version is 1.2.3)</doc>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="GTK_MINOR_VERSION"
              value="33"
              c:type="SPICE_GTK_MINOR_VERSION"
              version="0.24">
      <doc xml:space="preserve">Spice-Gtk minor version component (e.g. 2 if version is 1.2.3)</doc>
      <type name="gint" c:type="gint"/>
    </constant>
    <record name="GlScanout"
            c:type="SpiceGlScanout"
            glib:type-name="SpiceGlScanout"
            glib:get-type="spice_gl_scanout_get_type"
            c:symbol-prefix="gl_scanout">
      <doc xml:space="preserve">Holds the information necessary for using the GL display scanout.</doc>
      <field name="fd" writable="1">
        <doc xml:space="preserve">a drm DMABUF file that can be imported with eglCreateImageKHR</doc>
        <type name="gint" c:type="gint"/>
      </field>
      <field name="width" writable="1">
        <doc xml:space="preserve">width of the scanout</doc>
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="height" writable="1">
        <doc xml:space="preserve">height of the scanout</doc>
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="stride" writable="1">
        <doc xml:space="preserve">stride of the scanout</doc>
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="format" writable="1">
        <doc xml:space="preserve">the drm fourcc format</doc>
        <type name="guint32" c:type="guint32"/>
      </field>
      <field name="y0top" writable="1">
        <doc xml:space="preserve">orientation of the scanout</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <method name="free" c:identifier="spice_gl_scanout_free">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="scanout" transfer-ownership="none">
            <type name="GlScanout" c:type="SpiceGlScanout*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="InputsChannel"
           c:symbol-prefix="inputs_channel"
           c:type="SpiceInputsChannel"
           parent="Channel"
           glib:type-name="SpiceInputsChannel"
           glib:get-type="spice_inputs_channel_get_type"
           glib:type-struct="InputsChannelClass">
      <doc xml:space="preserve">The #SpiceInputsChannel struct is opaque and should not be accessed directly.</doc>
      <property name="key-modifiers" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="InputsChannelPrivate" c:type="SpiceInputsChannelPrivate*"/>
      </field>
      <glib:signal name="inputs-modifiers" when="first">
        <doc xml:space="preserve">The #SpiceInputsChannel::inputs-modifiers signal is emitted when
the guest keyboard locks are changed. You can read the current
state from #SpiceInputsChannel:key-modifiers property.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="InputsChannelClass"
            c:type="SpiceInputsChannelClass"
            glib:is-gtype-struct-for="InputsChannel">
      <doc xml:space="preserve">Class structure for #SpiceInputsChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="inputs_modifiers">
        <callback name="inputs_modifiers">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="InputsChannelPrivate"
            c:type="SpiceInputsChannelPrivate"
            disguised="1">
    </record>
    <bitfield name="InputsLock"
              glib:type-name="SpiceInputsLock"
              glib:get-type="spice_inputs_lock_get_type"
              c:type="SpiceInputsLock">
      <doc xml:space="preserve">Constants used to synchronize modifiers between a client and a guest.</doc>
      <member name="scroll_lock"
              value="1"
              c:identifier="SPICE_INPUTS_SCROLL_LOCK"
              glib:nick="scroll-lock">
        <doc xml:space="preserve">Scroll Lock</doc>
      </member>
      <member name="num_lock"
              value="2"
              c:identifier="SPICE_INPUTS_NUM_LOCK"
              glib:nick="num-lock">
        <doc xml:space="preserve">Num Lock</doc>
      </member>
      <member name="caps_lock"
              value="4"
              c:identifier="SPICE_INPUTS_CAPS_LOCK"
              glib:nick="caps-lock">
        <doc xml:space="preserve">Caps Lock</doc>
      </member>
    </bitfield>
    <class name="MainChannel"
           c:symbol-prefix="main_channel"
           c:type="SpiceMainChannel"
           parent="Channel"
           glib:type-name="SpiceMainChannel"
           glib:get-type="spice_main_channel_get_type"
           glib:type-struct="MainChannelClass">
      <doc xml:space="preserve">The #SpiceMainChannel struct is opaque and should not be accessed directly.</doc>
      <property name="agent-caps-0" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="agent-connected" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="color-depth"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="disable-animation"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-display-align"
                version="0.13"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Disable automatic horizontal display position alignment.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-display-position"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-font-smooth"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="disable-wallpaper"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="max-clipboard"
                version="0.22"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Maximum size of clipboard operations in bytes (default 100MB,
-1 for unlimited size);</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="mouse-mode" transfer-ownership="none">
        <doc xml:space="preserve">Spice protocol specifies two mouse modes, client mode and
server mode. In client mode (%SPICE_MOUSE_MODE_CLIENT), the
affective mouse is the client side mouse: the client sends
mouse position within the display and the server sends mouse
shape messages. In server mode (%SPICE_MOUSE_MODE_SERVER), the
client sends relative mouse movements and the server sends
position and shape commands.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="MainChannelPrivate" c:type="SpiceMainChannelPrivate*"/>
      </field>
      <glib:signal name="main-agent-update" when="first">
        <doc xml:space="preserve">Notify when the %SpiceMainChannel:agent-connected or
%SpiceMainChannel:agent-caps-0 property change.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="main-clipboard"
                   when="last"
                   deprecated="1"
                   deprecated-version="0.6">
        <doc xml:space="preserve">Provides guest clipboard data requested by spice_main_clipboard_request().</doc>
        <doc-deprecated xml:space="preserve">use SpiceMainChannel::main-clipboard-selection instead.</doc-deprecated>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">clipboard data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of @data in bytes</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-grab"
                   when="last"
                   deprecated="1"
                   deprecated-version="0.6">
        <doc xml:space="preserve">Inform when clipboard data is available from the guest, and for
which @types.</doc>
        <doc-deprecated xml:space="preserve">use SpiceMainChannel::main-clipboard-selection-grab instead.</doc-deprecated>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="types"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data types</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="ntypes" transfer-ownership="none">
            <doc xml:space="preserve">the number of @types</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-release"
                   when="last"
                   deprecated="1"
                   deprecated-version="0.6">
        <doc xml:space="preserve">Inform when the clipboard is released from the guest, when no
clipboard data is available from the guest.</doc>
        <doc-deprecated xml:space="preserve">use SpiceMainChannel::main-clipboard-selection-release instead.</doc-deprecated>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="main-clipboard-request"
                   when="last"
                   deprecated="1"
                   deprecated-version="0.6">
        <doc xml:space="preserve">Request clipboard data from the client.</doc>
        <doc-deprecated xml:space="preserve">use SpiceMainChannel::main-clipboard-selection-request instead.</doc-deprecated>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the request is successful</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="types" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD request type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection" when="last" version="0.6">
        <doc xml:space="preserve">Informs that clipboard selection data are available.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="selection" transfer-ownership="none">
            <doc xml:space="preserve">a VD_AGENT_CLIPBOARD_SELECTION clipboard</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">clipboard data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">size of @data in bytes</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-grab"
                   when="last"
                   version="0.6">
        <doc xml:space="preserve">Inform when clipboard data is available from the guest, and for
which @types.</doc>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="selection" transfer-ownership="none">
            <doc xml:space="preserve">a VD_AGENT_CLIPBOARD_SELECTION clipboard</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="types"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD data types</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="ntypes" transfer-ownership="none">
            <doc xml:space="preserve">the number of @types</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-release"
                   when="last"
                   version="0.6">
        <doc xml:space="preserve">Inform when the clipboard is released from the guest, when no
clipboard data is available from the guest.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="selection" transfer-ownership="none">
            <doc xml:space="preserve">a VD_AGENT_CLIPBOARD_SELECTION clipboard</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-clipboard-selection-request"
                   when="last"
                   version="0.6">
        <doc xml:space="preserve">Request clipboard data from the client.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the request is successful</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="selection" transfer-ownership="none">
            <doc xml:space="preserve">a VD_AGENT_CLIPBOARD_SELECTION clipboard</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="types" transfer-ownership="none">
            <doc xml:space="preserve">the VD_AGENT_CLIPBOARD request type</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="main-mouse-update" when="first">
        <doc xml:space="preserve">Notify when the mouse mode has changed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="migration-started" when="last">
        <doc xml:space="preserve">Inform when migration is starting. Application wishing to make
connections themself can set the #SpiceSession:client-sockets
to @TRUE, then follow #SpiceSession::channel-new creation, and
use spice_channel_open_fd() once the socket is created.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a migration #SpiceSession</doc>
            <type name="GObject.Object"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="new-file-transfer" when="last" version="0.31">
        <doc xml:space="preserve">This signal is emitted when a new file transfer task has been initiated
on this channel. Client applications may take a reference on the @task
object and use it to monitor the status of the file transfer task.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="task" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceFileTransferTask</doc>
            <type name="GObject.Object"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="MainChannelClass"
            c:type="SpiceMainChannelClass"
            glib:is-gtype-struct-for="MainChannel">
      <doc xml:space="preserve">Class structure for #SpiceMainChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="mouse_update">
        <callback name="mouse_update">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="agent_update">
        <callback name="agent_update">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="MainChannelPrivate"
            c:type="SpiceMainChannelPrivate"
            disguised="1">
    </record>
    <record name="MsgIn" c:type="SpiceMsgIn" disguised="1">
    </record>
    <record name="MsgOut" c:type="SpiceMsgOut" disguised="1">
    </record>
    <class name="PlaybackChannel"
           c:symbol-prefix="playback_channel"
           c:type="SpicePlaybackChannel"
           parent="Channel"
           glib:type-name="SpicePlaybackChannel"
           glib:get-type="spice_playback_channel_get_type"
           glib:type-struct="PlaybackChannelClass">
      <doc xml:space="preserve">The #SpicePlaybackChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="playback_data">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playback_start">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="freq" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="playback_stop">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="set_delay" c:identifier="spice_playback_channel_set_delay">
        <doc xml:space="preserve">Adjust the multimedia time according to the delay.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">a #SpicePlaybackChannel</doc>
            <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
          </instance-parameter>
          <parameter name="delay_ms" transfer-ownership="none">
            <doc xml:space="preserve">the delay in ms</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </method>
      <property name="min-latency" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="mute" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="nchannels" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="volume" writable="1" transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PlaybackChannelPrivate"
              c:type="SpicePlaybackChannelPrivate*"/>
      </field>
      <glib:signal name="playback-data" when="first">
        <doc xml:space="preserve">Provide audio data to be played.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">pointer to audio data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="data_size" transfer-ownership="none">
            <doc xml:space="preserve">size in byte of @data</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playback-get-delay" when="first">
        <doc xml:space="preserve">Notify when the current playback delay is requested</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="playback-start" when="first">
        <doc xml:space="preserve">Notify when the playback should start, and provide audio format
characteristics.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #SPICE_AUDIO_FMT</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <doc xml:space="preserve">number of channels</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <doc xml:space="preserve">audio rate</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="playback-stop" when="first">
        <doc xml:space="preserve">Notify when the playback should stop.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="PlaybackChannelClass"
            c:type="SpicePlaybackChannelClass"
            glib:is-gtype-struct-for="PlaybackChannel">
      <doc xml:space="preserve">Class structure for #SpicePlaybackChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="playback_start">
        <callback name="playback_start">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="channels" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="freq" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playback_data">
        <callback name="playback_data">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
            <parameter name="data"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="gpointer" c:type="gpointer*"/>
            </parameter>
            <parameter name="size" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="playback_stop">
        <callback name="playback_stop">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="PlaybackChannel" c:type="SpicePlaybackChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="PlaybackChannelPrivate"
            c:type="SpicePlaybackChannelPrivate"
            disguised="1">
    </record>
    <class name="PortChannel"
           c:symbol-prefix="port_channel"
           c:type="SpicePortChannel"
           parent="Channel"
           glib:type-name="SpicePortChannel"
           glib:get-type="spice_port_channel_get_type"
           glib:type-struct="PortChannelClass">
      <doc xml:space="preserve">The #SpicePortChannel struct is opaque and should not be accessed directly.</doc>
      <property name="port-name" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="port-opened" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PortChannelPrivate" c:type="SpicePortChannelPrivate*"/>
      </field>
      <glib:signal name="port-data" when="last" version="0.15">
        <doc xml:space="preserve">The #SpicePortChannel::port-data signal is emitted when new
port data is received.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the data received</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <doc xml:space="preserve">number of bytes read</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="port-event" when="last" version="0.15">
        <doc xml:space="preserve">The #SpicePortChannel::port-event signal is emitted when new
port event is received.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="event" transfer-ownership="none">
            <doc xml:space="preserve">the event received</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="PortChannelClass"
            c:type="SpicePortChannelClass"
            glib:is-gtype-struct-for="PortChannel">
      <doc xml:space="preserve">Class structure for #SpicePortChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="PortChannelPrivate"
            c:type="SpicePortChannelPrivate"
            disguised="1">
    </record>
    <class name="RecordChannel"
           c:symbol-prefix="record_channel"
           c:type="SpiceRecordChannel"
           parent="Channel"
           glib:type-name="SpiceRecordChannel"
           glib:get-type="spice_record_channel_get_type"
           glib:type-struct="RecordChannelClass">
      <doc xml:space="preserve">The #SpiceRecordChannel struct is opaque and should not be accessed directly.</doc>
      <virtual-method name="record_data">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer*"/>
          </parameter>
          <parameter name="size" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="record_start">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
          <parameter name="format" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="freq" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="record_stop">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="channel" transfer-ownership="none">
            <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <property name="mute" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="nchannels" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="volume" writable="1" transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="RecordChannelPrivate" c:type="SpiceRecordChannelPrivate*"/>
      </field>
      <glib:signal name="record-start" when="first">
        <doc xml:space="preserve">Notify when the recording should start, and provide audio format
characteristics.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="format" transfer-ownership="none">
            <doc xml:space="preserve">a #SPICE_AUDIO_FMT</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="channels" transfer-ownership="none">
            <doc xml:space="preserve">number of channels</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="rate" transfer-ownership="none">
            <doc xml:space="preserve">audio rate</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="record-stop" when="first">
        <doc xml:space="preserve">Notify when the recording should stop.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="RecordChannelClass"
            c:type="SpiceRecordChannelClass"
            glib:is-gtype-struct-for="RecordChannel">
      <doc xml:space="preserve">Class structure for #SpiceRecordChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
      <field name="record_start">
        <callback name="record_start">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
            <parameter name="format" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="channels" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
            <parameter name="freq" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="record_data">
        <callback name="record_data">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
            <parameter name="data"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="gpointer" c:type="gpointer*"/>
            </parameter>
            <parameter name="size" transfer-ownership="none">
              <type name="gint" c:type="gint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="record_stop">
        <callback name="record_stop">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="channel" transfer-ownership="none">
              <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="RecordChannelPrivate"
            c:type="SpiceRecordChannelPrivate"
            disguised="1">
    </record>
    <class name="Session"
           c:symbol-prefix="session"
           c:type="SpiceSession"
           parent="GObject.Object"
           glib:type-name="SpiceSession"
           glib:get-type="spice_session_get_type"
           glib:type-struct="SessionClass">
      <doc xml:space="preserve">The #SpiceSession struct is opaque and should not be accessed directly.</doc>
      <constructor name="new" c:identifier="spice_session_new">
        <doc xml:space="preserve">Creates a new Spice session.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a new #SpiceSession</doc>
          <type name="Session" c:type="SpiceSession*"/>
        </return-value>
      </constructor>
      <virtual-method name="channel_destroy">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="channel_new">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="channel" transfer-ownership="none">
            <type name="Channel" c:type="SpiceChannel*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="connect" c:identifier="spice_session_connect">
        <doc xml:space="preserve">Open the session using the #SpiceSession:host and
#SpiceSession:port.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%FALSE if the session state is invalid for connection
request. %TRUE if the connection is initiated. To know whether the
connection is established, you must watch for channels creation
(#SpiceSession::channel-new) and the channels state
(#SpiceChannel::channel-event).</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="disconnect" c:identifier="spice_session_disconnect">
        <doc xml:space="preserve">Disconnect the @session, and destroy all channels.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_channels" c:identifier="spice_session_get_channels">
        <doc xml:space="preserve">Get the list of current channels associated with this @session.</doc>
        <return-value transfer-ownership="container">
          <doc xml:space="preserve">a #GList
         of unowned #SpiceChannel channels.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Channel"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_proxy_uri"
              c:identifier="spice_session_get_proxy_uri"
              version="0.24">
        <doc xml:space="preserve">Gets the @session proxy uri.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the session proxy #SpiceURI or %NULL.</doc>
          <type name="URI" c:type="SpiceURI*"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_read_only" c:identifier="spice_session_get_read_only">
        <doc xml:space="preserve">Checks whether the @session is read-only.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">whether the @session is in read-only mode.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_channel_type"
              c:identifier="spice_session_has_channel_type">
        <doc xml:space="preserve">See if there is a @type channel in the channels associated with this
@session.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if a @type channel is available otherwise FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceChannel:channel-type</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_for_migration"
              c:identifier="spice_session_is_for_migration"
              version="0.27">
        <doc xml:space="preserve">During seamless migration, channels may be created to establish a
connection with the target, but they are temporary and should only
handle migration steps. In order to avoid other interactions with
the client, channels should check this value.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the session is a copy created during migration</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a Spice session</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="open_fd" c:identifier="spice_session_open_fd">
        <doc xml:space="preserve">Open the session using the provided @fd socket file
descriptor. This is useful if you create the fd yourself, for
example to setup a SSH tunnel.

Note however that additional sockets will be needed by all the channels
created for @session so users of this API should hook into
SpiceChannel::open-fd signal for each channel they are interested in, and
create and pass a new socket to the channel using #spice_channel_open_fd, in
the signal callback.

If @fd is -1, a valid fd will be requested later via the
SpiceChannel::open-fd signal. Typically, you would want to just pass -1 as
@fd this call since you will have to hook to SpiceChannel::open-fd signal
anyway.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSession</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </instance-parameter>
          <parameter name="fd" transfer-ownership="none">
            <doc xml:space="preserve">a file descriptor (socket) or -1</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <property name="ca"
                version="0.15"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">CA certificates in PEM format. The text data can contain
several CA certificates identified by:

 -----BEGIN CERTIFICATE-----
 ... (CA certificate in base64 encoding) ...
 -----END CERTIFICATE-----</doc>
        <array name="GLib.ByteArray">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="ca-file" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">File holding the CA certificates for the host the client is
connecting to</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="cache-size"
                version="0.9"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Images cache size. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="cert-subject" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="ciphers" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="client-sockets" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="color-depth"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Display color depth to set on new display channels. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="disable-effects"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A string array of effects to disable. The settings will
be applied on new display channels. The following effets can be
disabled "wallpaper", "font-smooth", "animation", and "all",
which will disable all the effects. If NULL, don't apply changes.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="enable-audio"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the audio channels will be enabled for
playback and recording.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="enable-smartcard"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the smartcard channel will be enabled and smartcard
events will be forwarded to the guest</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="enable-usbredir"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">If set to TRUE, the usbredir channel will be enabled and USB devices
can be redirected to the guest</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="glz-window-size"
                version="0.9"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Glz window size. If 0, don't set.</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="host"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">URL of the SPICE host to connect to</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="inhibit-keyboard-grab"
                writable="1"
                transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="migration-state" transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSessionMigration bit field indicating if a migration is in
progress</doc>
        <type name="SessionMigration"/>
      </property>
      <property name="name" version="0.11" transfer-ownership="none">
        <doc xml:space="preserve">Spice server name.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="password" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">TLS password to use</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="port" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Port to connect to for unencrypted sessions</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="preferred-compression"
                version="0.29"
                introspectable="0"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">The image compression algorithm the client prefers to use. It is
reported to the server.</doc>
        <type/>
      </property>
      <property name="protocol"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Version of the SPICE protocol to use</doc>
        <type name="gint" c:type="gint"/>
      </property>
      <property name="proxy"
                version="0.17"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">URI to the proxy server to use when doing network connection.
of the form &lt;![CDATA[ [protocol://]&lt;host&gt;[:port] ]]&gt;</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="pubkey" writable="1" transfer-ownership="none">
        <array name="GLib.ByteArray">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </property>
      <property name="read-only"
                version="0.8"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Whether this connection is read-only mode.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="secure-channels"
                version="0.20"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">A string array of channel types to be secured.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="share-dir-ro"
                version="0.28"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Whether to share the directory read-only.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="shared-dir"
                version="0.24"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Location of the shared directory</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="smartcard-certificates"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">This property is used when one wants to simulate a smartcard with no
hardware smartcard reader. If it's set to a NULL-terminated string
array containing the names of 3 valid certificates, these will be
used to simulate a smartcard in the guest
See also spice_smartcard_manager_insert_card()</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="smartcard-db"
                version="0.7"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Path to the NSS certificate database containing the certificates to
use to simulate a software smartcard</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="tls-port" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Port to connect to for TLS sessions</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="unix-path"
                version="0.28"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Path of the Unix socket to connect to</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="uri" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">URI of the SPICE host to connect to. The URI is of the form
spice://hostname?port=XXX or spice://hostname?tls_port=XXX</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="username" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Username to use</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="uuid" version="0.11" transfer-ownership="none">
        <doc xml:space="preserve">Spice server uuid.</doc>
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="verify"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSessionVerify bit field indicating which parts of the peer
certificate should be checked</doc>
        <type name="SessionVerify"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="SessionPrivate" c:type="SpiceSessionPrivate*"/>
      </field>
      <glib:signal name="channel-destroy" when="first">
        <doc xml:space="preserve">The #SpiceSession::channel-destroy signal is emitted each time a #SpiceChannel is destroyed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">the destroyed #SpiceChannel</doc>
            <type name="Channel"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="channel-new" when="first">
        <doc xml:space="preserve">The #SpiceSession::channel-new signal is emitted each time a #SpiceChannel is created.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="channel" transfer-ownership="none">
            <doc xml:space="preserve">the new #SpiceChannel</doc>
            <type name="Channel"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="mm-time-reset" when="first">
        <doc xml:space="preserve">The #SpiceSession::mm-time-reset is emitted when we identify discontinuity in mm-time

Since 0.20</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="SessionClass"
            c:type="SpiceSessionClass"
            glib:is-gtype-struct-for="Session">
      <doc xml:space="preserve">Class structure for #SpiceSession.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="channel_new">
        <callback name="channel_new">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="session" transfer-ownership="none">
              <type name="Session" c:type="SpiceSession*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="channel_destroy">
        <callback name="channel_destroy">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="session" transfer-ownership="none">
              <type name="Session" c:type="SpiceSession*"/>
            </parameter>
            <parameter name="channel" transfer-ownership="none">
              <type name="Channel" c:type="SpiceChannel*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <enumeration name="SessionMigration"
                 glib:type-name="SpiceSessionMigration"
                 glib:get-type="spice_session_migration_get_type"
                 c:type="SpiceSessionMigration">
      <doc xml:space="preserve">Session migration state.</doc>
      <member name="none"
              value="0"
              c:identifier="SPICE_SESSION_MIGRATION_NONE"
              glib:nick="none">
        <doc xml:space="preserve">no migration going on</doc>
      </member>
      <member name="switching"
              value="1"
              c:identifier="SPICE_SESSION_MIGRATION_SWITCHING"
              glib:nick="switching">
        <doc xml:space="preserve">the session is switching host (destroy and reconnect)</doc>
      </member>
      <member name="migrating"
              value="2"
              c:identifier="SPICE_SESSION_MIGRATION_MIGRATING"
              glib:nick="migrating">
        <doc xml:space="preserve">the session is migrating seamlessly (reconnect)</doc>
      </member>
      <member name="connecting"
              value="3"
              c:identifier="SPICE_SESSION_MIGRATION_CONNECTING"
              glib:nick="connecting">
        <doc xml:space="preserve">the migration is connecting to destination (Since: 0.27)</doc>
      </member>
    </enumeration>
    <record name="SessionPrivate" c:type="SpiceSessionPrivate" disguised="1">
    </record>
    <bitfield name="SessionVerify"
              glib:type-name="SpiceSessionVerify"
              glib:get-type="spice_session_verify_get_type"
              c:type="SpiceSessionVerify">
      <doc xml:space="preserve">Peer certificate verification parameters flags.</doc>
      <member name="pubkey"
              value="1"
              c:identifier="SPICE_SESSION_VERIFY_PUBKEY"
              glib:nick="pubkey">
        <doc xml:space="preserve">verify certificate public key matching</doc>
      </member>
      <member name="hostname"
              value="2"
              c:identifier="SPICE_SESSION_VERIFY_HOSTNAME"
              glib:nick="hostname">
        <doc xml:space="preserve">verify certificate hostname matching</doc>
      </member>
      <member name="subject"
              value="4"
              c:identifier="SPICE_SESSION_VERIFY_SUBJECT"
              glib:nick="subject">
        <doc xml:space="preserve">verify certificate subject matching</doc>
      </member>
    </bitfield>
    <class name="SmartcardChannel"
           c:symbol-prefix="smartcard_channel"
           c:type="SpiceSmartcardChannel"
           parent="Channel"
           glib:type-name="SpiceSmartcardChannel"
           glib:get-type="spice_smartcard_channel_get_type"
           glib:type-struct="SmartcardChannelClass">
      <doc xml:space="preserve">The #SpiceSmartcardChannel struct is opaque and should not be accessed directly.</doc>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SmartcardChannelPrivate"
              c:type="SpiceSmartcardChannelPrivate*"/>
      </field>
    </class>
    <record name="SmartcardChannelClass"
            c:type="SpiceSmartcardChannelClass"
            glib:is-gtype-struct-for="SmartcardChannel">
      <doc xml:space="preserve">Class structure for #SpiceSmartcardChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="SmartcardChannelPrivate"
            c:type="SpiceSmartcardChannelPrivate"
            disguised="1">
    </record>
    <class name="SmartcardManager"
           c:symbol-prefix="smartcard_manager"
           c:type="SpiceSmartcardManager"
           parent="GObject.Object"
           glib:type-name="SpiceSmartcardManager"
           glib:get-type="spice_smartcard_manager_get_type"
           glib:type-struct="SmartcardManagerClass">
      <doc xml:space="preserve">The #SpiceSmartcardManager struct is opaque and should not be accessed directly.</doc>
      <function name="get" c:identifier="spice_smartcard_manager_get">
        <doc xml:space="preserve">#SpiceSmartcardManager is a singleton, use this function to get a pointer
to it. A new SpiceSmartcardManager instance will be created the first
time this function is called</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to the #SpiceSmartcardManager</doc>
          <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
        </return-value>
      </function>
      <virtual-method name="card_inserted">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="card_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reader_added">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="reader_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
          <parameter name="reader" transfer-ownership="none">
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_readers"
              c:identifier="spice_smartcard_manager_get_readers"
              version="0.20">
        <doc xml:space="preserve">Gets the list of smartcard readers that are currently available, they
can be either software (emulated) readers, or hardware ones.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly
allocated list of SpiceSmartcardReader instances, or NULL if none were
found. When no longer needed, the list must be freed after unreferencing
its elements with g_boxed_free()</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="SmartcardReader"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardManager</doc>
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="insert_card"
              c:identifier="spice_smartcard_manager_insert_card"
              version="0.20">
        <doc xml:space="preserve">Simulates the insertion of a smartcard in the guest. Valid certificates
must have been set in #SpiceSession:smartcard-certificates for software
smartcard support to work. At the moment, only one software smartcard
reader is supported, that's why there is no parameter to indicate which
reader to insert the card in.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if smartcard insertion was successfully simulated, FALSE
if this failed, or if software smartcard support isn't enabled.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardManager</doc>
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_card"
              c:identifier="spice_smartcard_manager_remove_card"
              version="0.20">
        <doc xml:space="preserve">Simulates the removal of a smartcard in the guest. At the moment, only
one software smartcard reader is supported, that's why there is no
parameter to indicate which reader to insert the card in.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if smartcard removal was successfully simulated, FALSE
if this failed, or if software smartcard support isn't enabled.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardManager</doc>
            <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SmartcardManagerPrivate"
              c:type="SpiceSmartcardManagerPrivate*"/>
      </field>
      <glib:signal name="card-inserted" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::card-inserted signal is emitted whenever
a smartcard is inserted in a reader</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the reader a new
card was inserted in</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="card-removed" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::card-removed signal is emitted whenever
a smartcard was removed from a reader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the reader a card
was removed from</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="reader-added" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::reader-added signal is emitted whenever
a new smartcard reader (software or hardware) has been plugged in.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the added reader</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="reader-removed" when="first">
        <doc xml:space="preserve">The #SpiceSmartcardManager::reader-removed signal is emitted whenever
a smartcard reader (software or hardware) has been removed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="vreader" transfer-ownership="none">
            <doc xml:space="preserve">#VReader boxed object corresponding to the removed reader</doc>
            <type name="VReader"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="SmartcardManagerClass"
            c:type="SpiceSmartcardManagerClass"
            glib:is-gtype-struct-for="SmartcardManager">
      <doc xml:space="preserve">Class structure for #SpiceSmartcardManager.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="reader_added">
        <callback name="reader_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reader_removed">
        <callback name="reader_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="card_inserted">
        <callback name="card_inserted">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="card_removed">
        <callback name="card_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="SmartcardManager" c:type="SpiceSmartcardManager*"/>
            </parameter>
            <parameter name="reader" transfer-ownership="none">
              <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="SmartcardManagerPrivate"
            c:type="SpiceSmartcardManagerPrivate"
            disguised="1">
    </record>
    <record name="SmartcardReader" c:type="SpiceSmartcardReader" disguised="1">
      <doc xml:space="preserve">The #SpiceSmartcardReader struct is opaque and cannot be accessed directly.</doc>
      <method name="insert_card"
              c:identifier="spice_smartcard_reader_insert_card">
        <doc xml:space="preserve">Simulates insertion of a smartcard in the software smartcard reader
@reader. If @reader is not a software smartcard reader, FALSE will be
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if insertion of a card was successfully simulated, FALSE
otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_software"
              c:identifier="spice_smartcard_reader_is_software">
        <doc xml:space="preserve">Tests if @reader is a software (emulated) smartcard reader.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if @reader is a software (emulated) smartcard reader,
FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_card"
              c:identifier="spice_smartcard_reader_remove_card">
        <doc xml:space="preserve">Simulates removal of a smartcard from the software smartcard reader
@reader. If @reader is not a software smartcard reader, FALSE will be
returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">TRUE if removal of a card was successfully simulated, FALSE
otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="reader" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceSmartcardReader</doc>
            <type name="SmartcardReader" c:type="SpiceSmartcardReader*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="URI"
           c:symbol-prefix="uri"
           c:type="SpiceURI"
           parent="GObject.Object"
           glib:type-name="SpiceURI"
           glib:get-type="spice_uri_get_type"
           glib:type-struct="URIClass">
      <doc xml:space="preserve">The #SpiceURI struct is opaque and cannot be accessed directly.</doc>
      <method name="get_hostname" c:identifier="spice_uri_get_hostname">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_password" c:identifier="spice_uri_get_password">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_port" c:identifier="spice_uri_get_port">
        <return-value transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_scheme" c:identifier="spice_uri_get_scheme">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_user" c:identifier="spice_uri_get_user">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_hostname" c:identifier="spice_uri_set_hostname">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
          <parameter name="hostname" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_password" c:identifier="spice_uri_set_password">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
          <parameter name="password" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_port" c:identifier="spice_uri_set_port">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
          <parameter name="port" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_scheme" c:identifier="spice_uri_set_scheme">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
          <parameter name="scheme" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_user" c:identifier="spice_uri_set_user">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
          <parameter name="user" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="to_string" c:identifier="spice_uri_to_string">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="uri" transfer-ownership="none">
            <type name="URI" c:type="SpiceURI*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="hostname" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="password" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="port" writable="1" transfer-ownership="none">
        <type name="guint" c:type="guint"/>
      </property>
      <property name="scheme" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="user" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
    </class>
    <record name="URIClass"
            c:type="SpiceURIClass"
            disguised="1"
            glib:is-gtype-struct-for="URI">
      <doc xml:space="preserve">The #SpiceURIClass struct is opaque and cannot be accessed directly.
It is class structure for #SpiceURI.</doc>
    </record>
    <record name="URIPrivate" c:type="SpiceURIPrivate" disguised="1">
    </record>
    <record name="UsbDevice"
            c:type="SpiceUsbDevice"
            glib:type-name="SpiceUsbDevice"
            glib:get-type="spice_usb_device_get_type"
            c:symbol-prefix="usb_device">
      <doc xml:space="preserve">The #SpiceUsbDevice struct is opaque and cannot be accessed directly.</doc>
      <method name="get_description"
              c:identifier="spice_usb_device_get_description">
        <doc xml:space="preserve">Get a string describing the device which is suitable as a description of
the device for the end user. The returned string should be freed with
g_free() when no longer needed.

The @format positional parameters are the following:
- '%%1$s' manufacturer
- '%%2$s' product
- '%%3$s' descriptor (a [vendor_id:product_id] string)
- '%%4$d' bus
- '%%5$d' address

(the default format string is "%%s %%s %%s at %%d-%%d")</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a newly-allocated string holding the description, or %NULL if failed</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice to get the description of</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </instance-parameter>
          <parameter name="format"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">an optional printf() format string with
positional parameters</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_libusb_device"
              c:identifier="spice_usb_device_get_libusb_device"
              version="0.27">
        <doc xml:space="preserve">Finds the %libusb_device associated with the @device.</doc>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve">the %libusb_device associated to %SpiceUsbDevice.</doc>
          <type name="gpointer" c:type="gconstpointer"/>
        </return-value>
        <parameters>
          <instance-parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice to get the descriptor information of</doc>
            <type name="UsbDevice" c:type="const SpiceUsbDevice*"/>
          </instance-parameter>
        </parameters>
      </method>
    </record>
    <class name="UsbDeviceManager"
           c:symbol-prefix="usb_device_manager"
           c:type="SpiceUsbDeviceManager"
           parent="GObject.Object"
           glib:type-name="SpiceUsbDeviceManager"
           glib:get-type="spice_usb_device_manager_get_type"
           glib:type-struct="UsbDeviceManagerClass">
      <doc xml:space="preserve">The #SpiceUsbDeviceManager struct is opaque and should not be accessed directly.</doc>
      <implements name="Gio.Initable"/>
      <function name="get"
                c:identifier="spice_usb_device_manager_get"
                throws="1">
        <doc xml:space="preserve">Gets the #SpiceUsbDeviceManager associated with the passed in #SpiceSession.
A new #SpiceUsbDeviceManager instance will be created the first time this
function is called for a certain #SpiceSession.

Note that this function returns a weak reference, which should not be used
after the #SpiceSession itself has been unref-ed by the caller.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a weak reference to the #SpiceUsbDeviceManager associated with the passed in #SpiceSession</doc>
          <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
        </return-value>
        <parameters>
          <parameter name="session" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceSession for which to get the #SpiceUsbDeviceManager</doc>
            <type name="Session" c:type="SpiceSession*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="auto_connect_failed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_added">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_error">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="device_removed">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="can_redirect_device"
              c:identifier="spice_usb_device_manager_can_redirect_device"
              throws="1">
        <doc xml:space="preserve">Checks whether it is possible to redirect the @device.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @device can be redirected</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice to disconnect</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="connect_device_async"
              c:identifier="spice_usb_device_manager_connect_device_async">
        <doc xml:space="preserve">Asynchronously connects the @device. When completed, @callback will be called.
Then it is possible to call spice_usb_device_manager_connect_device_finish()
to get the result of the operation.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDeviceManager.</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice to redirect</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">optional #GCancellable object, %NULL to ignore</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">the data to pass to callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="connect_device_finish"
              c:identifier="spice_usb_device_manager_connect_device_finish"
              throws="1">
        <doc xml:space="preserve">Finishes an async operation. See spice_usb_device_manager_connect_device_async().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if connection is successful</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDeviceManager.</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect_device"
              c:identifier="spice_usb_device_manager_disconnect_device">
        <doc xml:space="preserve">Disconnects the @device.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice to disconnect</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect_device_async"
              c:identifier="spice_usb_device_manager_disconnect_device_async">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect_device_finish"
              c:identifier="spice_usb_device_manager_disconnect_device_finish"
              throws="1">
        <doc xml:space="preserve">Finishes an async operation. See spice_usb_device_manager_disconnect_device_async().</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if disconnection is successful</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDeviceManager.</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="res" transfer-ownership="none">
            <doc xml:space="preserve">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_devices"
              c:identifier="spice_usb_device_manager_get_devices">
        <doc xml:space="preserve">Finds devices associated with the @manager</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a %GPtrArray array of %SpiceUsbDevice</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="UsbDevice"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_devices_with_filter"
              c:identifier="spice_usb_device_manager_get_devices_with_filter"
              version="0.20">
        <doc xml:space="preserve">Finds devices associated with the @manager complying with the @filter</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">a
%GPtrArray array of %SpiceUsbDevice</doc>
          <array name="GLib.PtrArray" c:type="GPtrArray*">
            <type name="UsbDevice"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="filter"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve">filter string for selecting which devices to return,
     see #SpiceUsbDeviceManager:auto-connect-filter for the filter
     string format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_device_connected"
              c:identifier="spice_usb_device_manager_is_device_connected">
        <doc xml:space="preserve">Finds if the @device is connected.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if @device has an associated USB redirection channel</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">a #SpiceUsbDevice</doc>
            <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_redirecting"
              c:identifier="spice_usb_device_manager_is_redirecting"
              version="0.32">
        <doc xml:space="preserve">Checks whether a device is being redirected</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if device redirection negotiation flow is in progress</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="self" transfer-ownership="none">
            <doc xml:space="preserve">the #SpiceUsbDeviceManager manager</doc>
            <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="auto-connect" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Set this to TRUE to automatically redirect newly plugged in device.

Note when #SpiceGtkSession's auto-usbredir property is TRUE, this
property is controlled by #SpiceGtkSession.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="auto-connect-filter"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Set a string specifying a filter to use to determine which USB devices
to autoconnect when plugged in, a filter consists of one or more rules.
Where each rule has the form of:

@class,@vendor,@product,@version,@allow

Use -1 for @class/@vendor/@product/@version to accept any value.

And the rules themselves are concatenated like this:

@rule1|@rule2|@rule3

The default setting filters out HID (class 0x03) USB devices from auto
connect and auto connects anything else. Note the explicit allow rule at
the end, this is necessary since by default all devices without a
matching filter rule will not auto-connect.

Filter strings in this format can be easily created with the RHEV-M
USB filter editor tool.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="free-channels" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="redirect-on-connect"
                writable="1"
                transfer-ownership="none">
        <doc xml:space="preserve">Set a string specifying a filter selecting USB devices to automatically
redirect after a Spice connection has been established.

See #SpiceUsbDeviceManager:auto-connect-filter for the filter string
format.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="session"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <doc xml:space="preserve">#SpiceSession this #SpiceUsbDeviceManager is associated with</doc>
        <type name="Session"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="UsbDeviceManagerPrivate"
              c:type="SpiceUsbDeviceManagerPrivate*"/>
      </field>
      <glib:signal name="auto-connect-failed" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::auto-connect-failed signal is emitted
whenever the auto-connect property is true, and a newly plugged in
device could not be auto-connected.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the device which failed to auto connect</doc>
            <type name="UsbDevice"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve">#GError describing the reason why the autoconnect failed</doc>
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-added" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-added signal is emitted whenever
a new USB device has been plugged in.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the added device</doc>
            <type name="UsbDevice"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-error" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-error signal is emitted whenever an
error happens which causes a device to no longer be available to the
guest.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the device which has an error</doc>
            <type name="UsbDevice"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve">#GError describing the error</doc>
            <type name="GLib.Error"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="device-removed" when="first">
        <doc xml:space="preserve">The #SpiceUsbDeviceManager::device-removed signal is emitted whenever
an USB device has been removed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="device" transfer-ownership="none">
            <doc xml:space="preserve">#SpiceUsbDevice boxed object corresponding to the removed device</doc>
            <type name="UsbDevice"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="UsbDeviceManagerClass"
            c:type="SpiceUsbDeviceManagerClass"
            glib:is-gtype-struct-for="UsbDeviceManager">
      <doc xml:space="preserve">Class structure for #SpiceUsbDeviceManager.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="device_added">
        <callback name="device_added">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="device_removed">
        <callback name="device_removed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="auto_connect_failed">
        <callback name="auto_connect_failed">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="device_error">
        <callback name="device_error">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="UsbDeviceManager" c:type="SpiceUsbDeviceManager*"/>
            </parameter>
            <parameter name="device" transfer-ownership="none">
              <type name="UsbDevice" c:type="SpiceUsbDevice*"/>
            </parameter>
            <parameter name="error" transfer-ownership="none">
              <type name="GLib.Error" c:type="GError*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_spice_reserved" readable="0" private="1">
        <array zero-terminated="0" c:type="gchar" fixed-size="0">
          <type name="gchar" c:type="gchar"/>
        </array>
      </field>
    </record>
    <record name="UsbDeviceManagerPrivate"
            c:type="SpiceUsbDeviceManagerPrivate"
            disguised="1">
    </record>
    <class name="UsbredirChannel"
           c:symbol-prefix="usbredir_channel"
           c:type="SpiceUsbredirChannel"
           parent="Channel"
           glib:type-name="SpiceUsbredirChannel"
           glib:get-type="spice_usbredir_channel_get_type"
           glib:type-struct="UsbredirChannelClass">
      <doc xml:space="preserve">The #SpiceUsbredirChannel struct is opaque and should not be accessed directly.</doc>
      <field name="parent">
        <type name="Channel" c:type="SpiceChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="UsbredirChannelPrivate"
              c:type="SpiceUsbredirChannelPrivate*"/>
      </field>
    </class>
    <record name="UsbredirChannelClass"
            c:type="SpiceUsbredirChannelClass"
            glib:is-gtype-struct-for="UsbredirChannel">
      <doc xml:space="preserve">Class structure for #SpiceUsbredirChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="ChannelClass" c:type="SpiceChannelClass"/>
      </field>
    </record>
    <record name="UsbredirChannelPrivate"
            c:type="SpiceUsbredirChannelPrivate"
            disguised="1">
    </record>
    <glib:boxed glib:name="VReader"
                c:symbol-prefix="smartcard_reader"
                glib:type-name="VReader"
                glib:get-type="spice_smartcard_reader_get_type">
    </glib:boxed>
    <class name="WebdavChannel"
           c:symbol-prefix="webdav_channel"
           c:type="SpiceWebdavChannel"
           parent="PortChannel"
           glib:type-name="SpiceWebdavChannel"
           glib:get-type="spice_webdav_channel_get_type"
           glib:type-struct="WebdavChannelClass">
      <doc xml:space="preserve">The #SpiceWebdavChannel struct is opaque and should not be accessed directly.</doc>
      <field name="parent">
        <type name="PortChannel" c:type="SpicePortChannel"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="WebdavChannelPrivate" c:type="SpiceWebdavChannelPrivate*"/>
      </field>
    </class>
    <record name="WebdavChannelClass"
            c:type="SpiceWebdavChannelClass"
            glib:is-gtype-struct-for="WebdavChannel">
      <doc xml:space="preserve">Class structure for #SpiceWebdavChannel.</doc>
      <field name="parent_class">
        <doc xml:space="preserve">Parent class.</doc>
        <type name="PortChannelClass" c:type="SpicePortChannelClass"/>
      </field>
    </record>
    <record name="WebdavChannelPrivate"
            c:type="SpiceWebdavChannelPrivate"
            disguised="1">
    </record>
    <function name="client_error_quark"
              c:identifier="spice_client_error_quark">
      <doc xml:space="preserve">Gets a #GQuark representing the string "spice-client-error-quark"</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the #GQuark representing the string.</doc>
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="display_change_preferred_compression"
              c:identifier="spice_display_change_preferred_compression"
              version="0.31">
      <doc xml:space="preserve">Tells the spice server to change the preferred image compression
for the @channel.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceDisplayChannel</doc>
          <type name="Channel" c:type="SpiceChannel*"/>
        </parameter>
        <parameter name="compression" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceImageCompression</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="display_get_gl_scanout"
              c:identifier="spice_display_get_gl_scanout"
              version="0.31">
      <doc xml:space="preserve">Retrieves the GL scanout if available</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the current GL scanout, or %NULL if none or not valid</doc>
        <type name="GlScanout" c:type="const SpiceGlScanout*"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceDisplayChannel</doc>
          <type name="DisplayChannel" c:type="SpiceDisplayChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="display_get_primary"
              c:identifier="spice_display_get_primary">
      <doc xml:space="preserve">Retrieve primary display surface @surface_id.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if the primary surface was found and its details
collected in @primary.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceDisplayChannel</doc>
          <type name="Channel" c:type="SpiceChannel*"/>
        </parameter>
        <parameter name="surface_id" transfer-ownership="none">
          <doc xml:space="preserve">a surface id</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="primary" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceDisplayPrimary</doc>
          <type name="DisplayPrimary" c:type="SpiceDisplayPrimary*"/>
        </parameter>
      </parameters>
    </function>
    <function name="display_gl_draw_done"
              c:identifier="spice_display_gl_draw_done"
              version="0.31">
      <doc xml:space="preserve">After a SpiceDisplayChannel::gl-draw is emitted, the client should
draw the current display with the current GL scanout, and must
release the GL resource with a call to spice_display_gl_draw_done()
(failing to do so for each gl-draw may result in a frozen display).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceDisplayChannel</doc>
          <type name="DisplayChannel" c:type="SpiceDisplayChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="g_signal_connect_object"
              c:identifier="spice_g_signal_connect_object"
              introspectable="0">
      <doc xml:space="preserve">Similar to g_signal_connect_object() but will delete connection
when any of the objects is destroyed.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the handler id.</doc>
        <type name="gulong" c:type="gulong"/>
      </return-value>
      <parameters>
        <parameter name="instance"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the instance to connect to.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="detailed_signal" transfer-ownership="none">
          <doc xml:space="preserve">a string of the form "signal-name::detail".</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="c_handler" transfer-ownership="none">
          <doc xml:space="preserve">the #GCallback to connect.</doc>
          <type name="GObject.Callback" c:type="GCallback"/>
        </parameter>
        <parameter name="gobject"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the object to pass as data to @c_handler.</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="connect_flags" transfer-ownership="none">
          <doc xml:space="preserve">a combination of #GConnectFlags.</doc>
          <type name="GObject.ConnectFlags" c:type="GConnectFlags"/>
        </parameter>
      </parameters>
    </function>
    <function name="get_option_group" c:identifier="spice_get_option_group">
      <doc xml:space="preserve">Gets commandline options.

Bindings for other languages are available since 0.32</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">a #GOptionGroup for the commandline
arguments specific to Spice.  You have to call
spice_set_session_option() after to set the options on a
#SpiceSession.</doc>
        <type name="GLib.OptionGroup" c:type="GOptionGroup*"/>
      </return-value>
    </function>
    <function name="inputs_button_press"
              c:identifier="spice_inputs_button_press">
      <doc xml:space="preserve">Press a mouse button.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="button" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_MOUSE_BUTTON</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_button_release"
              c:identifier="spice_inputs_button_release">
      <doc xml:space="preserve">Release a button.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="button" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_MOUSE_BUTTON</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_press" c:identifier="spice_inputs_key_press">
      <doc xml:space="preserve">Press a key.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC XT (set 1) key scancode.  For scancodes with an %0xe0
           prefix, drop the prefix and OR the scancode with %0x100.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_press_and_release"
              c:identifier="spice_inputs_key_press_and_release"
              version="0.13">
      <doc xml:space="preserve">Press and release a key event atomically (in the same message).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC XT (set 1) key scancode.  For scancodes with an %0xe0
           prefix, drop the prefix and OR the scancode with %0x100.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_key_release"
              c:identifier="spice_inputs_key_release">
      <doc xml:space="preserve">Release a key.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="scancode" transfer-ownership="none">
          <doc xml:space="preserve">a PC XT (set 1) key scancode.  For scancodes with an %0xe0
           prefix, drop the prefix and OR the scancode with %0x100.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_motion" c:identifier="spice_inputs_motion">
      <doc xml:space="preserve">Change mouse position (used in SPICE_MOUSE_MODE_CLIENT).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="dx" transfer-ownership="none">
          <doc xml:space="preserve">delta X mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="dy" transfer-ownership="none">
          <doc xml:space="preserve">delta Y mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_position" c:identifier="spice_inputs_position">
      <doc xml:space="preserve">Change mouse position (used in SPICE_MOUSE_MODE_CLIENT).</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">X mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">Y mouse coordinates</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="display" transfer-ownership="none">
          <doc xml:space="preserve">display channel id</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="button_state" transfer-ownership="none">
          <doc xml:space="preserve">SPICE_MOUSE_BUTTON_MASK flags</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
      </parameters>
    </function>
    <function name="inputs_set_key_locks"
              c:identifier="spice_inputs_set_key_locks">
      <doc xml:space="preserve">Set the keyboard locks on the guest (Caps, Num, Scroll..)</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceInputsChannel</doc>
          <type name="InputsChannel" c:type="SpiceInputsChannel*"/>
        </parameter>
        <parameter name="locks" transfer-ownership="none">
          <doc xml:space="preserve">#SpiceInputsLock modifiers flags</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_agent_test_capability"
              c:identifier="spice_main_agent_test_capability">
      <doc xml:space="preserve">Test capability of a remote agent.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE if @cap (channel kind capability) is available.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="cap" transfer-ownership="none">
          <doc xml:space="preserve">an agent capability identifier</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_grab"
              c:identifier="spice_main_clipboard_grab"
              deprecated="1"
              deprecated-version="0.6">
      <doc xml:space="preserve">Grab the guest clipboard, with #VD_AGENT_CLIPBOARD @types.</doc>
      <doc-deprecated xml:space="preserve">use spice_main_clipboard_selection_grab() instead.</doc-deprecated>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="types" transfer-ownership="none">
          <doc xml:space="preserve">an array of #VD_AGENT_CLIPBOARD types available in the clipboard</doc>
          <type name="guint32" c:type="guint32*"/>
        </parameter>
        <parameter name="ntypes" transfer-ownership="none">
          <doc xml:space="preserve">the number of @types</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_notify"
              c:identifier="spice_main_clipboard_notify"
              deprecated="1"
              deprecated-version="0.6">
      <doc xml:space="preserve">Send the clipboard data to the guest.</doc>
      <doc-deprecated xml:space="preserve">use spice_main_clipboard_selection_notify() instead.</doc-deprecated>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">clipboard data</doc>
          <type name="guint8" c:type="const guchar*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <doc xml:space="preserve">data length in bytes</doc>
          <type name="gsize" c:type="size_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_release"
              c:identifier="spice_main_clipboard_release"
              deprecated="1"
              deprecated-version="0.6">
      <doc xml:space="preserve">Release the clipboard (for example, when the client loses the
clipboard grab): Inform the guest no clipboard data is available.</doc>
      <doc-deprecated xml:space="preserve">use spice_main_clipboard_selection_release() instead.</doc-deprecated>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_request"
              c:identifier="spice_main_clipboard_request"
              deprecated="1"
              deprecated-version="0.6">
      <doc xml:space="preserve">Request clipboard data of @type from the guest. The reply is sent
through the #SpiceMainChannel::main-clipboard signal.</doc>
      <doc-deprecated xml:space="preserve">use spice_main_clipboard_selection_request() instead.</doc-deprecated>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_grab"
              c:identifier="spice_main_clipboard_selection_grab"
              version="0.6">
      <doc xml:space="preserve">Grab the guest clipboard, with #VD_AGENT_CLIPBOARD @types.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="types" transfer-ownership="none">
          <doc xml:space="preserve">an array of #VD_AGENT_CLIPBOARD types available in the clipboard</doc>
          <type name="guint32" c:type="guint32*"/>
        </parameter>
        <parameter name="ntypes" transfer-ownership="none">
          <doc xml:space="preserve">the number of @types</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_notify"
              c:identifier="spice_main_clipboard_selection_notify"
              version="0.6">
      <doc xml:space="preserve">Send the clipboard data to the guest.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <doc xml:space="preserve">clipboard data</doc>
          <type name="guint8" c:type="const guchar*"/>
        </parameter>
        <parameter name="size" transfer-ownership="none">
          <doc xml:space="preserve">data length in bytes</doc>
          <type name="gsize" c:type="size_t"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_release"
              c:identifier="spice_main_clipboard_selection_release"
              version="0.6">
      <doc xml:space="preserve">Release the clipboard (for example, when the client loses the
clipboard grab): Inform the guest no clipboard data is available.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_clipboard_selection_request"
              c:identifier="spice_main_clipboard_selection_request"
              version="0.6">
      <doc xml:space="preserve">Request clipboard data of @type from the guest. The reply is sent
through the #SpiceMainChannel::main-clipboard-selection signal.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="selection" transfer-ownership="none">
          <doc xml:space="preserve">one of the clipboard #VD_AGENT_CLIPBOARD_SELECTION_*</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="type" transfer-ownership="none">
          <doc xml:space="preserve">a #VD_AGENT_CLIPBOARD type</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_file_copy_async"
              c:identifier="spice_main_file_copy_async">
      <doc xml:space="preserve">Copies the file @sources to guest

If @cancellable is not %NULL, then the operation can be cancelled by
triggering the cancellable object from another thread. If the operation
was cancelled, the error %G_IO_ERROR_CANCELLED will be returned.

If @progress_callback is not %NULL, then the operation can be monitored by
setting this to a #GFileProgressCallback function. @progress_callback_data
will be passed to this function. It is guaranteed that this callback will
be called after all data has been transferred with the total number of bytes
copied during the operation. Note that before release 0.31, progress_callback
was broken since it only provided status for a single file transfer, but did
not provide a way to determine which file it referred to. In release 0.31,
this behavior was changed so that progress_callback provides the status of
all ongoing file transfers. If you need to monitor the status of individual
files, please connect to the #SpiceMainChannel::new-file-transfer signal.

When the operation is finished, callback will be called. You can then call
spice_main_file_copy_finish() to get the result of the operation. Note that
before release 0.33 the callback was called for each file in multiple file
transfer. This behavior was changed for the same reason as the
progress_callback (above). If you need to monitor the ending of individual
files, you can connect to "finished" signal from each SpiceFileTransferTask.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="sources" transfer-ownership="none">
          <doc xml:space="preserve">a %NULL-terminated array of #GFile objects to be transferred</doc>
          <array c:type="GFile**">
            <type name="Gio.File" c:type="GFile*"/>
          </array>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve">set of #GFileCopyFlags</doc>
          <type name="Gio.FileCopyFlags" c:type="GFileCopyFlags"/>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">optional #GCancellable object, %NULL to ignore</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
        <parameter name="progress_callback"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   scope="call"
                   closure="5">
          <doc xml:space="preserve">function to callback with
    progress information, or %NULL if progress information is not needed</doc>
          <type name="Gio.FileProgressCallback"
                c:type="GFileProgressCallback"/>
        </parameter>
        <parameter name="progress_callback_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">user data to pass to @progress_callback</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   scope="async"
                   closure="7">
          <doc xml:space="preserve">a #GAsyncReadyCallback to call when the request is satisfied</doc>
          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the data to pass to callback function</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_file_copy_finish"
              c:identifier="spice_main_file_copy_finish"
              throws="1">
      <doc xml:space="preserve">Finishes copying the file started with
spice_main_file_copy_async().</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a %TRUE on success, %FALSE on error.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <doc xml:space="preserve">a #GAsyncResult.</doc>
          <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_request_mouse_mode"
              c:identifier="spice_main_request_mouse_mode"
              version="0.32">
      <doc xml:space="preserve">Request a mouse mode to the server. The server may not be able to
change the mouse mode, but spice-gtk will try to request it
when possible.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a %SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="mode" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_MOUSE_MODE</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_send_monitor_config"
              c:identifier="spice_main_send_monitor_config">
      <doc xml:space="preserve">Send monitors configuration previously set with
spice_main_set_display() and spice_main_set_display_enabled()</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">%TRUE on success.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_set_display" c:identifier="spice_main_set_display">
      <doc xml:space="preserve">Notify the guest of screen resolution change. The notification is
sent 1 second later, if no further changes happen.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">x position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">y position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">display width</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">display height</doc>
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_set_display_enabled"
              c:identifier="spice_main_set_display_enabled"
              version="0.6">
      <doc xml:space="preserve">When sending monitor configuration to agent guest, don't set
display @id, which the agent translates to disabling the display
id. Note: this will take effect next time the monitor
configuration is sent.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID (if -1: set all displays)</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="enabled" transfer-ownership="none">
          <doc xml:space="preserve">wether display @id is enabled</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_update_display"
              c:identifier="spice_main_update_display">
      <doc xml:space="preserve">Update the display @id resolution.

If @update is %TRUE, the remote configuration will be updated too
after 1 second without further changes. You can send when you want
without delay the new configuration to the remote with
spice_main_send_monitor_config()</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="x" transfer-ownership="none">
          <doc xml:space="preserve">x position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <doc xml:space="preserve">y position</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <doc xml:space="preserve">display width</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <doc xml:space="preserve">display height</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="update" transfer-ownership="none">
          <doc xml:space="preserve">if %TRUE, update guest resolution after 1sec.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="main_update_display_enabled"
              c:identifier="spice_main_update_display_enabled"
              version="0.30">
      <doc xml:space="preserve">When sending monitor configuration to agent guest, if @enabled is %FALSE,
don't set display @id, which the agent translates to disabling the display
id. If @enabled is %TRUE, the monitor will be included in the next monitor
update. Note: this will take effect next time the monitor configuration is
sent.

If @update is %FALSE, no server update will be triggered by this call, but
the value will be saved and used in the next configuration update.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceMainChannel</doc>
          <type name="MainChannel" c:type="SpiceMainChannel*"/>
        </parameter>
        <parameter name="id" transfer-ownership="none">
          <doc xml:space="preserve">display ID (if -1: set all displays)</doc>
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="enabled" transfer-ownership="none">
          <doc xml:space="preserve">wether display @id is enabled</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="update" transfer-ownership="none">
          <doc xml:space="preserve">if %TRUE, update guest display state after 1sec.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <callback name="msg_handler" c:type="spice_msg_handler">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <type name="Channel" c:type="SpiceChannel*"/>
        </parameter>
        <parameter name="in" transfer-ownership="none">
          <type name="MsgIn" c:type="SpiceMsgIn*"/>
        </parameter>
      </parameters>
    </callback>
    <function name="port_event" c:identifier="spice_port_event" version="0.15">
      <doc xml:space="preserve">Send an event to the port.

Note: The values SPICE_PORT_EVENT_CLOSED and
SPICE_PORT_EVENT_OPENED are managed by the channel connection
state.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">a #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="event" transfer-ownership="none">
          <doc xml:space="preserve">a SPICE_PORT_EVENT value</doc>
          <type name="guint8" c:type="guint8"/>
        </parameter>
      </parameters>
    </function>
    <function name="port_write_async"
              c:identifier="spice_port_write_async"
              version="0.15">
      <doc xml:space="preserve">Request an asynchronous write of count bytes from @buffer into the
@port. When the operation is finished @callback will be called. You
can then call spice_port_write_finish() to get the result of
the operation.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">A #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="buffer" transfer-ownership="none">
          <doc xml:space="preserve">the buffer
containing the data to write</doc>
          <array length="2" zero-terminated="0" c:type="void*">
            <type name="guint8"/>
          </array>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve">the number of bytes to write</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">optional GCancellable object, NULL to ignore</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   scope="async"
                   closure="5">
          <doc xml:space="preserve">callback to call when the request is satisfied</doc>
          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">the data to pass to callback function</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="port_write_finish"
              c:identifier="spice_port_write_finish"
              version="0.15"
              throws="1">
      <doc xml:space="preserve">Finishes a port write operation.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">a #gssize containing the number of bytes written to the stream.</doc>
        <type name="gssize" c:type="gssize"/>
      </return-value>
      <parameters>
        <parameter name="port" transfer-ownership="none">
          <doc xml:space="preserve">a #SpicePortChannel</doc>
          <type name="PortChannel" c:type="SpicePortChannel*"/>
        </parameter>
        <parameter name="result" transfer-ownership="none">
          <doc xml:space="preserve">a #GAsyncResult</doc>
          <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
        </parameter>
      </parameters>
    </function>
    <function name="record_send_data" c:identifier="spice_record_send_data">
      <doc xml:space="preserve">Send recorded PCM data to the guest.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="channel" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceRecordChannel</doc>
          <type name="RecordChannel" c:type="SpiceRecordChannel*"/>
        </parameter>
        <parameter name="data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve">PCM data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="bytes" transfer-ownership="none">
          <doc xml:space="preserve">size of @data</doc>
          <type name="gsize" c:type="gsize"/>
        </parameter>
        <parameter name="time" transfer-ownership="none">
          <doc xml:space="preserve">stream timestamp</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
      </parameters>
    </function>
    <function name="set_session_option"
              c:identifier="spice_set_session_option">
      <doc xml:space="preserve">Set various properties on @session, according to the commandline
arguments given to spice_get_option_group() option group.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="session" transfer-ownership="none">
          <doc xml:space="preserve">a #SpiceSession to set option upon</doc>
          <type name="Session" c:type="SpiceSession*"/>
        </parameter>
      </parameters>
    </function>
    <function name="util_get_debug" c:identifier="spice_util_get_debug">
      <return-value transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
    </function>
    <function name="util_get_version_string"
              c:identifier="spice_util_get_version_string">
      <doc xml:space="preserve">Gets the version string</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">Spice-GTK version as a const string.</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
    </function>
    <function name="util_set_debug" c:identifier="spice_util_set_debug">
      <doc xml:space="preserve">Enable or disable Spice-GTK debugging messages.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="enabled" transfer-ownership="none">
          <doc xml:space="preserve">%TRUE or %FALSE</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
      </parameters>
    </function>
    <function name="uuid_to_string"
              c:identifier="spice_uuid_to_string"
              version="0.22">
      <doc xml:space="preserve">Creates a string representation of @uuid, of the form
"06e023d5-86d8-420e-8103-383e4566087a"</doc>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve">A string that should be freed with g_free().</doc>
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="uuid" transfer-ownership="none">
          <doc xml:space="preserve">UUID byte array</doc>
          <type name="guint8" c:type="const guint8"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
