<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
  <interface name="org.gnome.SessionManager">

    <!-- Initialization phase interfaces -->

    <method name="Setenv">
      <arg name="variable" type="s" direction="in">
        <doc:doc>
          <doc:summary>The variable name</doc:summary>
        </doc:doc>
      </arg>
      <arg name="value" type="s" direction="in">
        <doc:doc>
          <doc:summary>The value</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Adds the variable name to the application launch environment with the specified value.  May only be used during the Session Manager initialization phase.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="InitializationError">
      <arg name="message" type="s" direction="in">
        <doc:doc>
          <doc:summary>The error message</doc:summary>
        </doc:doc>
      </arg>
      <arg name="fatal" type="b" direction="in">
        <doc:doc>
          <doc:summary>Whether the error should be treated as fatal</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>May be used by applications launched during the Session Manager initialization phase to indicate there was a problem.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <!-- Running phase interfaces -->

    <method name="RegisterClient">
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <arg type="s" name="app_id" direction="in">
        <doc:doc>
          <doc:summary>The application identifier</doc:summary>
        </doc:doc>
      </arg>
      <arg type="s" name="client_startup_id" direction="in">
        <doc:doc>
          <doc:summary>Client startup identifier</doc:summary>
        </doc:doc>
      </arg>
      <arg type="o" name="client_id" direction="out">
        <doc:doc>
          <doc:summary>The object path of the newly registered client</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Register the caller as a Session Management client.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="UnregisterClient">
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <arg type="o" name="client_id" direction="in">
        <doc:doc>
          <doc:summary>The object path of the client</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Unregister the specified client from Session Management.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="Inhibit">
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <arg type="s" name="app_id" direction="in">
        <doc:doc>
          <doc:summary>The application identifier</doc:summary>
        </doc:doc>
      </arg>
      <arg type="u" name="toplevel_xid" direction="in">
        <doc:doc>
          <doc:summary>The toplevel X window identifier</doc:summary>
        </doc:doc>
      </arg>
      <arg type="s" name="reason" direction="in">
        <doc:doc>
          <doc:summary>The reason for the inhibit</doc:summary>
        </doc:doc>
      </arg>
      <arg type="u" name="flags" direction="in">
        <doc:doc>
          <doc:summary>Flags that spefify what should be inhibited</doc:summary>
        </doc:doc>
      </arg>
      <arg type="u" name="inhibit_cookie" direction="out">
        <doc:doc>
          <doc:summary>The cookie</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:summary>
          Proactively indicates that the calling application is performing an action that should not be interrupted and sets a reason to be displayed to the user when an interruption is about to take placea.
        </doc:summary>
        <doc:description>
          <doc:para>Applications should invoke this method when they begin an operation that
            should not be interrupted, such as creating a CD or DVD.  The types of actions
            that may be blocked are specified by the flags parameter.  When the application
            completes the operation it should call <doc:ref type="method" to="org.gnome.SessionManager.Uninhibit">Uninhibit()</doc:ref>
            or disconnect from the session bus.
          </doc:para>
          <doc:para>
            Applications should not expect that they will always be able to block the
            action.  In most cases, users will be given the option to force the action
            to take place.
          </doc:para>
          <doc:para>
            Reasons should be short and to the point.
          </doc:para>
          <doc:para>
            The flags parameter must include at least one of the following:
            <doc:list>
              <doc:item>
                <doc:term>1</doc:term>
                <doc:definition>Inhibit logging out</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>2</doc:term>
                <doc:definition>Inhibit user switching</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>4</doc:term>
                <doc:definition>Inhibit suspending the session or computer</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>8</doc:term>
                <doc:definition>Inhibit the session being marked as idle</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>16</doc:term>
                <doc:definition>Inhibit auto-mounting removable media for the session</doc:definition>
              </doc:item>
            </doc:list>
            Values for flags may be bitwise or'ed together.
          </doc:para>
          <doc:para>
            The returned cookie is used to uniquely identify this request.  It should be used
            as an argument to <doc:ref type="method" to="org.gnome.SessionManager.Uninhibit">Uninhibit()</doc:ref> in
            order to remove the request.
          </doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="Uninhibit">
      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
      <arg type="u" name="inhibit_cookie" direction="in">
        <doc:doc>
          <doc:summary>The cookie</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Cancel a previous call to <doc:ref type="method" to="org.gnome.SessionManager.Inhibit">Inhibit()</doc:ref> identified by the cookie.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="IsInhibited">
      <arg type="u" name="flags" direction="in">
        <doc:doc>
          <doc:summary>Flags that spefify what should be inhibited</doc:summary>
        </doc:doc>
      </arg>
      <arg type="b" name="is_inhibited" direction="out">
        <doc:doc>
          <doc:summary>Returns TRUE if any of the operations in the bitfield flags are inhibited</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Determine if operation(s) specified by the flags
            are currently inhibited.  Flags are same as those accepted
            by the
            <doc:ref type="method" to="org.gnome.SessionManager.Inhibit">Inhibit()</doc:ref>
            method.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="GetClients">
      <arg name="clients" direction="out" type="ao">
        <doc:doc>
          <doc:summary>an array of client IDs</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>This gets a list of all the <doc:ref type="interface" to="org.gnome.SessionManager.Client">Clients</doc:ref>
          that are currently known to the session manager.</doc:para>
          <doc:para>Each Client ID is an D-Bus object path for the object that implements the
          <doc:ref type="interface" to="org.gnome.SessionManager.Client">Client</doc:ref> interface.</doc:para>
        </doc:description>
        <doc:seealso><doc:ref type="interface" to="org.gnome.SessionManager.Client">org.gnome.SessionManager.Client</doc:ref></doc:seealso>
      </doc:doc>
    </method>

    <method name="GetInhibitors">
      <arg name="inhibitors" direction="out" type="ao">
        <doc:doc>
          <doc:summary>an array of inhibitor IDs</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>This gets a list of all the <doc:ref type="interface" to="org.gnome.SessionManager.Inhibitor">Inhibitors</doc:ref>
          that are currently known to the session manager.</doc:para>
          <doc:para>Each Inhibitor ID is an D-Bus object path for the object that implements the
          <doc:ref type="interface" to="org.gnome.SessionManager.Inhibitor">Inhibitor</doc:ref> interface.</doc:para>
        </doc:description>
        <doc:seealso><doc:ref type="interface" to="org.gnome.SessionManager.Inhibitor">org.gnome.SessionManager.Inhibitor</doc:ref></doc:seealso>
      </doc:doc>
    </method>


    <method name="IsAutostartConditionHandled">
      <arg name="condition" direction="in" type="s">
        <doc:doc>
          <doc:summary>The autostart condition string</doc:summary>
        </doc:doc>
      </arg>
      <arg name="handled" direction="out" type="b">
        <doc:doc>
          <doc:summary>True if condition is handled, false otherwise</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Allows the caller to determine whether the session manager is
          handling changes to the specified autostart condition.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="Shutdown">
      <doc:doc>
        <doc:description>
          <doc:para>Request a shutdown dialog.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="Reboot">
      <doc:doc>
        <doc:description>
          <doc:para>Request a reboot dialog.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="CanShutdown">
      <arg name="is_available" direction="out" type="b">
        <doc:doc>
          <doc:summary>True if shutdown is available to the user, false otherwise</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Allows the caller to determine whether or not it's okay to show
          a shutdown option in the UI</doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="Logout">
      <arg name="mode" type="u" direction="in">
        <doc:doc>
          <doc:summary>The type of logout that is being requested</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Request a logout dialog</doc:para>
          <doc:para>
            Allowed values for the mode parameter are:
            <doc:list>
              <doc:item>
                <doc:term>0</doc:term>
                <doc:definition>Normal.</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>1</doc:term>
                <doc:definition>No confirmation inferface should be shown.</doc:definition>
              </doc:item>
              <doc:item>
                <doc:term>2</doc:term>
                <doc:definition>Forcefully logout.  No confirmation will be shown and any inhibitors will be ignored.</doc:definition>
              </doc:item>
            </doc:list>
            Values for flags may be bitwise or'ed together.
          </doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <method name="IsSessionRunning">
      <arg name="running" direction="out" type="b">
        <doc:doc>
          <doc:summary>True if the session has entered the Running phase, false otherwise</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Allows the caller to determine whether the session manager
          has entered the Running phase, in case the client missed the
          SessionRunning signal.</doc:para>
        </doc:description>
      </doc:doc>
    </method>

	<method name="RequestShutdown">
      <doc:doc>
        <doc:description>
          <doc:para>Request a shutdown with no dialog</doc:para>
        </doc:description>
      </doc:doc>
	</method>

	<method name="RequestReboot">
      <doc:doc>
        <doc:description>
          <doc:para>Request a reboot with no dialog</doc:para>
        </doc:description>
      </doc:doc>
	</method>
	

    <!-- Signals -->

    <signal name="ClientAdded">
      <arg name="id" type="o">
        <doc:doc>
          <doc:summary>The object path for the added client</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Emitted when a client has been added to the session manager.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>
    <signal name="ClientRemoved">
      <arg name="id" type="o">
        <doc:doc>
          <doc:summary>The object path for the removed client</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Emitted when a client has been removed from the session manager.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <signal name="InhibitorAdded">
      <arg name="id" type="o">
        <doc:doc>
          <doc:summary>The object path for the added inhibitor</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Emitted when an inhibitor has been added to the session manager.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>
    <signal name="InhibitorRemoved">
      <arg name="id" type="o">
        <doc:doc>
          <doc:summary>The object path for the removed inhibitor</doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>Emitted when an inhibitor has been removed from the session manager.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <signal name="SessionRunning">
      <doc:doc>
        <doc:description>
          <doc:para>Indicates the session has entered the Running phase.</doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <signal name="SessionOver">
      <doc:doc>
        <doc:description>
          <doc:para>Indicates the session is about to end.</doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <property name="SessionName" type="s" access="read">
      <doc:doc>
        <doc:description>
          <doc:para>The name of the session that has been loaded.</doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <property name="InhibitedActions" type="u" access="read">
      <doc:doc>
        <doc:description>
          <doc:para>A bitmask of flags to indicate which actions
          are inhibited. See the Inhibit() function's description
          for a list of possible values.</doc:para>
        </doc:description>
      </doc:doc>
    </property>

  </interface>
</node>
