Makefile.am                                        |    3 
 configure.ac                                       |    2 
 unstable/idle-inhibit/README                       |    4 
 unstable/idle-inhibit/idle-inhibit-unstable-v1.xml |   83 +
 unstable/xdg-foreign/README                        |    4 
 unstable/xdg-foreign/xdg-foreign-unstable-v1.xml   |  186 +++
 unstable/xdg-shell/xdg-shell-unstable-v6.xml       | 1045 +++++++++++++++++++++
 7 files changed, 1326 insertions(+), 1 deletion(-)

New commits:
commit 2e541a36deff5f2e16e25e27f7f93d26822eecc2
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Mon Aug 15 10:33:32 2016 +0800

    configure.ac: Bump version to 1.7
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>

diff --git a/configure.ac b/configure.ac
index f06d1d6..4c43daa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
 AC_PREREQ([2.64])
 
 m4_define([wayland_protocols_major_version], [1])
-m4_define([wayland_protocols_minor_version], [6])
+m4_define([wayland_protocols_minor_version], [7])
 m4_define([wayland_protocols_version],
           [wayland_protocols_major_version.wayland_protocols_minor_version])
 

commit c09e89929bad8f19b6eb70018c1d984bbe650346
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Jul 15 16:55:51 2016 +0800

    xdg-shell: Add resize_x/y constraint adjustment to positioner
    
    In order to get feedback of available space where a client can create
    its popup, let it create requset that its popup rectangle being resized
    would it not fit the within the work area. This adds two new constraint
    adjustment values to the adjustment enum, and dimension parameters to
    the xdg_popup.configure event.
    
    The existing constraint adjustment actions take precedence, and resizing
    will only be triggered if all other adjustments requested didn't manage
    to make the popup rectangle fully visible.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index d6802be..565df8c 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -234,6 +234,20 @@
     </request>
 
     <enum name="constraint_adjustment" bitfield="true">
+      <description summary="constraint adjustments">
+       The constraint adjustment value define ways the compositor will adjust
+       the position of the surface, if the unadjusted position would result
+       in the surface being partly constrained.
+
+       Whether a surface is considered 'constrained' is left to the compositor
+       to determine. For example, the surface may be partly outside the
+       compositor's defined 'work area', thus necessitating the child surface's
+       position be adjusted until it is entirely inside the work area.
+
+       The adjustments can be combined, according to a defined precedence: 1)
+       Flip, 2) Slide, 3) Resize.
+      </description>
+
       <entry name="none" value="0">
        <description summary="don't move the child surface when constrained">
          Don't alter the surface position even if it is constrained on some
@@ -253,8 +267,6 @@
          x axis until either the edge in the direction of the gravity is
          unconstrained or the edge in the opposite direction of the gravity is
          constrained.
-
-         If 'slide_x' is combined with 'flip_x', 'flip_x' takes precedence.
        </description>
       </entry>
       <entry name="slide_y" value="2">
@@ -270,8 +282,6 @@
          y axis until either the edge in the direction of the gravity is
          unconstrained or the edge in the opposite direction of the gravity is
          constrained.
-
-         If 'slide_y' is combined with 'flip_y', 'flip_y' takes precedence.
        </description>
       </entry>
       <entry name="flip_x" value="4">
@@ -282,9 +292,8 @@
          'left', change the gravity to 'right' and the anchor to 'right'.
 
          If the adjusted position also ends up being constrained, the resulting
-         position will be the one before the adjustment. If the resulting
-         position is still constrained, and 'flip_x' is combined with
-         'slide_x', the position is adjusted according to 'slide_x'.
+         position of the flip_x adjustment will be the one before the
+         adjustment.
        </description>
       </entry>
       <entry name="flip_y" value="8">
@@ -295,9 +304,19 @@
          'bottom', change the gravity to 'top' and the anchor to 'top'.
 
          If the adjusted position also ends up being constrained, the resulting
-         position will be the one before the adjustment. If the resulting
-         position is still constrained, and 'flip_y' is combined with
-         'slide_y', the position is adjusted according to 'slide_y'.
+         position of the flip_y adjustment will be the one before the
+         adjustment.
+       </description>
+      </entry>
+      <entry name="resize_x" value="16">
+       <description summary="horizontally resize the surface">
+         Resize the surface horizontally so that it is completely
+         unconstrained.
+       </description>
+      </entry>
+      <entry name="resize_y" value="32">
+       <description summary="vertically resize the surface">
+         Resize the surface vertically so that it is completely unconstrained.
        </description>
       </entry>
     </enum>
@@ -1010,6 +1029,8 @@
           summary="x position relative to parent surface window geometry"/>
       <arg name="y" type="int"
           summary="y position relative to parent surface window geometry"/>
+      <arg name="width" type="int" summary="window geometry width"/>
+      <arg name="height" type="int" summary="window geometry height"/>
     </event>
 
     <event name="popup_done">

commit 7ba6a6ab15b719642d5eaf56f153270d88f0ee7c
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Jul 15 22:01:55 2016 +0800

    xdg-shell: Drop desktop environment specific state allocations
    
    Instead of allocating state ranges that desktop environments can use as
    they want, let them introduce their own protocol and their own enums.
    
    If such desktop environment protocols need the configure/ack_configure
    semantics, they can design their protocols to extend xdg_surface, and
    make their private configure events a latched state tied to
    xdg_surface.configure.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>
    Acked-by: Bryce Harrington <br...@osg.samsung.com>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index fbb4727..d6802be 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -669,18 +669,6 @@
 
        States set in this way are double-buffered. They will get applied on
        the next commit.
-
-       Desktop environments may extend this enum by taking up a range of
-       values and documenting the range they chose in this description.
-       They are not required to document the values for the range that they
-       chose. Ideally, any good extensions from a desktop environment should
-       make its way into standardization into this enum.
-
-       The current reserved ranges are:
-
-       0x0000 - 0x0FFF: xdg-shell core values, documented below.
-       0x1000 - 0x1FFF: GNOME
-       0x2000 - 0x2FFF: EFL
       </description>
       <entry name="maximized" value="1" summary="the surface is maximized">
        <description summary="the surface is maximized">

commit 3dab2f13f74bd6676c907660c1f6a63f18d56b1a
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Jul 15 16:52:50 2016 +0800

    xdg-shell: Clarify focus semantics for popup grabs
    
    Make it clearer what the focus semantics are during a popup grab. In
    short, when a grabbing popup is mapped, the top most popup will always
    have keyboard focus, while pointer and touch focus works just as normal
    except that only surfaces from the grabbing client will receive pointer
    and touch focus.
    
    This patch doesn't really change any semantics but rather clarifies
    what was ambiguous before.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Reviewed-by: Mike Blumenkrantz <zm...@osg.samsung.com>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index 6dd1538..fbb4727 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -997,10 +997,10 @@
        popup will be immediately dismissed. If the parent is a popup that did
        not take an explicit grab, an error will be raised.
 
-       Clients will receive events for all their surfaces during this grab
-       (which is an "owner-events" grab in X11 parlance). This is done so that
-       users can navigate through submenus and other "nested" popup windows
-       without having to dismiss the topmost popup.
+       During a popup grab, the client owning the grab will receive pointer
+       and touch events for all their surfaces as normal (similar to an
+       "owner-events" grab in X11 parlance), while the top most grabbing popup
+       will always have keyboard focus.
       </description>
 
       <arg name="seat" type="object" interface="wl_seat"

commit dee23fd0cf35e33ad95cfaeed37f27897613f453
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Mon Feb 1 18:53:09 2016 +0800

    xdg-shell: Introduce xdg_positioner
    
    xdg_positioner is a method for declarative positioning of child surfaces
    (currently only xdg_popup surfaces). A client creates a description of a
    positioning logic using the xdg_positioner interface. The xdg_positioner
    object is then used when creating a xdg_popup for describing how the
    child surface should be positioned in relation to the parent surface.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Signed-off-by: Mike Blumenkrantz <zm...@samsung.com>
    Acked-by: Yong Bakos <yba...@humanoriented.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>
    Reviewed-by: Bryce Harrington <br...@osg.samsung.com>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index 0771668..6dd1538 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -45,6 +45,8 @@
             summary="the client specified an invalid popup parent surface"/>
       <entry name="invalid_surface_state" value="4"
             summary="the client provided an invalid surface state"/>
+      <entry name="invalid_positioner" value="5"
+            summary="the client provided an invalid positioner"/>
     </enum>
 
     <request name="destroy" type="destructor">
@@ -57,6 +59,15 @@
       </description>
     </request>
 
+    <request name="create_positioner">
+      <description summary="create a positioner object">
+       Create a positioner object. A positioner object is used to position
+       surfaces relative to some parent surface. See the interface description
+       and xdg_surface.get_popup for details.
+      </description>
+      <arg name="id" type="new_id" interface="zxdg_positioner_v6"/>
+    </request>
+
     <request name="get_xdg_surface">
       <description summary="create a shell surface from a surface">
        This creates an xdg_surface for the given surface. While xdg_surface
@@ -101,6 +112,235 @@
     </event>
   </interface>
 
+  <interface name="zxdg_positioner_v6" version="1">
+    <description summary="child surface positioner">
+      The xdg_positioner provides a collection of rules for the placement of a
+      child surface relative to a parent surface. Rules can be defined to 
ensure
+      the child surface remains within the visible area's borders, and to
+      specify how the child surface changes its position, such as sliding along
+      an axis, or flipping around a rectangle.
+
+      See the various requests for details about possible rules.
+
+      At the time of the request, the compositor makes a copy of the rules
+      specified by the xdg_positioner. Thus, after the request is complete the
+      xdg_positioner object can be destroyed or reused; further changes to the
+      object will have no effect on previous usages.
+
+      For an xdg_positioner object to be considered complete, it must have a
+      non-zero size set by set_size, and a non-zero anchor rectangle set by
+      set_anchor_rect. Passing an incomplete xdg_positioner object when
+      positioning a surface raises an error.
+    </description>
+
+    <enum name="error">
+      <entry name="invalid_input" value="0" summary="invalid input provided"/>
+    </enum>
+
+    <request name="destroy" type="destructor">
+      <description summary="destroy the xdg_positioner object">
+       Notify the compositor that the xdg_positioner will no longer be used.
+      </description>
+    </request>
+
+    <request name="set_size">
+      <description summary="set the size of the to-be positioned rectangle">
+       Set the size of the surface that is to be positioned with the positioner
+       object. The size is in surface-local coordinates and corresponds to the
+       window geometry. See xdg_surface.set_window_geometry.
+
+       If a zero or negative size is set the invalid_input error is raised.
+      </description>
+      <arg name="width" type="int" summary="width of positioned rectangle"/>
+      <arg name="height" type="int" summary="height of positioned rectangle"/>
+    </request>
+
+    <request name="set_anchor_rect">
+      <description summary="set the anchor rectangle within the parent 
surface">
+       Specify the anchor rectangle within the parent surface that the child
+       surface will be placed relative to. The rectangle is relative to the
+       window geometry as defined by xdg_surface.set_window_geometry of the
+       parent surface. The rectangle must be at least 1x1 large.
+
+       When the xdg_positioner object is used to position a child surface, the
+       anchor rectangle may not extend outside the window geometry of the
+       positioned child's parent surface.
+
+       If a zero or negative size is set the invalid_input error is raised.
+      </description>
+      <arg name="x" type="int" summary="x position of anchor rectangle"/>
+      <arg name="y" type="int" summary="y position of anchor rectangle"/>
+      <arg name="width" type="int" summary="width of anchor rectangle"/>
+      <arg name="height" type="int" summary="height of anchor rectangle"/>
+    </request>
+
+    <enum name="anchor" bitfield="true">
+      <entry name="none" value="0"
+            summary="the center of the anchor rectangle"/>
+      <entry name="top" value="1"
+            summary="the top edge of the anchor rectangle"/>
+      <entry name="bottom" value="2"
+            summary="the bottom edge of the anchor rectangle"/>
+      <entry name="left" value="4"
+            summary="the left edge of the anchor rectangle"/>
+      <entry name="right" value="8"
+            summary="the right edge of the anchor rectangle"/>
+    </enum>
+
+    <request name="set_anchor">
+      <description summary="set anchor rectangle anchor edges">
+       Defines a set of edges for the anchor rectangle. These are used to
+       derive an anchor point that the child surface will be positioned
+       relative to. If two orthogonal edges are specified (e.g. 'top' and
+       'left'), then the anchor point will be the intersection of the edges
+       (e.g. the top left position of the rectangle); otherwise, the derived
+       anchor point will be centered on the specified edge, or in the center of
+       the anchor rectangle if no edge is specified.
+
+       If two parallel anchor edges are specified (e.g. 'left' and 'right'),
+       the invalid_input error is raised.
+      </description>
+      <arg name="anchor" type="uint" enum="anchor"
+          summary="bit mask of anchor edges"/>
+    </request>
+
+    <enum name="gravity" bitfield="true">
+      <entry name="none" value="0"
+            summary="center over the anchor edge"/>
+      <entry name="top" value="1"
+            summary="position above the anchor edge"/>
+      <entry name="bottom" value="2"
+            summary="position below the anchor edge"/>
+      <entry name="left" value="4"
+            summary="position to the left of the anchor edge"/>
+      <entry name="right" value="8"
+            summary="position to the right of the anchor edge"/>
+    </enum>
+
+    <request name="set_gravity">
+      <description summary="set child surface gravity">
+       Defines in what direction a surface should be positioned, relative to
+       the anchor point of the parent surface. If two orthogonal gravities are
+       specified (e.g. 'bottom' and 'right'), then the child surface will be
+       placed in the specified direction; otherwise, the child surface will be
+       centered over the anchor point on any axis that had no gravity
+       specified.
+
+       If two parallel gravities are specified (e.g. 'left' and 'right'), the
+       invalid_input error is raised.
+      </description>
+      <arg name="gravity" type="uint" enum="gravity"
+          summary="bit mask of gravity directions"/>
+    </request>
+
+    <enum name="constraint_adjustment" bitfield="true">
+      <entry name="none" value="0">
+       <description summary="don't move the child surface when constrained">
+         Don't alter the surface position even if it is constrained on some
+         axis, for example partially outside the edge of a monitor.
+       </description>
+      </entry>
+      <entry name="slide_x" value="1">
+       <description summary="move along the x axis until unconstrained">
+         Slide the surface along the x axis until it is no longer constrained.
+
+         First try to slide towards the direction of the gravity on the x axis
+         until either the edge in the opposite direction of the gravity is
+         unconstrained or the edge in the direction of the gravity is
+         constrained.
+
+         Then try to slide towards the opposite direction of the gravity on the
+         x axis until either the edge in the direction of the gravity is
+         unconstrained or the edge in the opposite direction of the gravity is
+         constrained.
+
+         If 'slide_x' is combined with 'flip_x', 'flip_x' takes precedence.
+       </description>
+      </entry>
+      <entry name="slide_y" value="2">
+       <description summary="move along the y axis until unconstrained">
+         Slide the surface along the y axis until it is no longer constrained.
+
+         First try to slide towards the direction of the gravity on the y axis
+         until either the edge in the opposite direction of the gravity is
+         unconstrained or the edge in the direction of the gravity is
+         constrained.
+
+         Then try to slide towards the opposite direction of the gravity on the
+         y axis until either the edge in the direction of the gravity is
+         unconstrained or the edge in the opposite direction of the gravity is
+         constrained.
+
+         If 'slide_y' is combined with 'flip_y', 'flip_y' takes precedence.
+       </description>
+      </entry>
+      <entry name="flip_x" value="4">
+       <description summary="invert the anchor and gravity on the x axis">
+         Invert the anchor and gravity on the x axis if the surface is
+         constrained on the x axis. For example, if the left edge of the
+         surface is constrained, the gravity is 'left' and the anchor is
+         'left', change the gravity to 'right' and the anchor to 'right'.
+
+         If the adjusted position also ends up being constrained, the resulting
+         position will be the one before the adjustment. If the resulting
+         position is still constrained, and 'flip_x' is combined with
+         'slide_x', the position is adjusted according to 'slide_x'.
+       </description>
+      </entry>
+      <entry name="flip_y" value="8">
+       <description summary="invert the anchor and gravity on the y axis">
+         Invert the anchor and gravity on the y axis if the surface is
+         constrained on the y axis. For example, if the bottom edge of the
+         surface is constrained, the gravity is 'bottom' and the anchor is
+         'bottom', change the gravity to 'top' and the anchor to 'top'.
+
+         If the adjusted position also ends up being constrained, the resulting
+         position will be the one before the adjustment. If the resulting
+         position is still constrained, and 'flip_y' is combined with
+         'slide_y', the position is adjusted according to 'slide_y'.
+       </description>
+      </entry>
+    </enum>
+
+    <request name="set_constraint_adjustment">
+      <description summary="set the adjustment to be done when constrained">
+       Specify how the window should be positioned if the originally intended
+       position caused the surface to be constrained, meaning at least
+       partially outside positioning boundaries set by the compositor. The
+       adjustment is set by constructing a bitmask describing the adjustment to
+       be made when the surface is constrained on that axis.
+
+       If no bit for one axis is set, the compositor will assume that the child
+       surface should not change its position on that axis when constrained.
+
+       If more than one bit for one axis is set, the order of how adjustments
+       are applied is specified in the corresponding adjustment descriptions.
+
+       The default adjustment is none.
+      </description>
+      <arg name="constraint_adjustment" type="uint"
+          summary="bit mask of constraint adjustments"/>
+    </request>
+
+    <request name="set_offset">
+      <description summary="set surface position offset">
+       Specify the surface position offset relative to the position of the
+       anchor on the anchor rectangle and the anchor on the surface. For
+       example if the anchor of the anchor rectangle is at (x, y), the surface
+       has the gravity bottom|right, and the offset is (ox, oy), the calculated
+       surface position will be (x + ox, y + oy). The offset position of the
+       surface is the one used for constraint testing. See
+       set_constraint_adjustment.
+
+       An example use case is placing a popup menu on top of a user interface
+       element, while aligning the user interface element of the parent surface
+       with some user interface element placed somewhere in the popup surface.
+      </description>
+      <arg name="x" type="int" summary="surface position x offset"/>
+      <arg name="y" type="int" summary="surface position y offset"/>
+    </request>
+  </interface>
+
   <interface name="zxdg_surface_v6" version="1">
     <description summary="desktop user interface surface base interface">
       An interface that may be implemented by a wl_surface, for
@@ -169,8 +409,7 @@
       </description>
       <arg name="id" type="new_id" interface="zxdg_popup_v6"/>
       <arg name="parent" type="object" interface="zxdg_surface_v6"/>
-      <arg name="x" type="int"/>
-      <arg name="y" type="int"/>
+      <arg name="positioner" type="object" interface="zxdg_positioner_v6"/>
     </request>
 
     <request name="set_window_geometry">
@@ -734,7 +973,7 @@
        button press, key press, or touch down event. The serial number of the
        event should be passed as 'serial'.
 
-       The parent of a grabbing popup must either be a xdg_toplevel surface or
+       The parent of a grabbing popup must either be an xdg_toplevel surface or
        another xdg_popup with an explicit grab. If the parent is another
        xdg_popup it means that the popups are nested, with this popup now being
        the topmost popup.
@@ -769,6 +1008,22 @@
       <arg name="serial" type="uint" summary="the serial of the user event"/>
     </request>
 
+    <event name="configure">
+      <description summary="configure the popup surface">
+       This event asks the popup surface to configure itself given the
+       configuration. The configured state should not be applied immediately.
+       See xdg_surface.configure for details.
+
+       The x and y arguments represent the position the popup was placed at
+       given the xdg_positioner rule, relative to the upper left corner of the
+       window geometry of the parent surface.
+      </description>
+      <arg name="x" type="int"
+          summary="x position relative to parent surface window geometry"/>
+      <arg name="y" type="int"
+          summary="y position relative to parent surface window geometry"/>
+    </event>
+
     <event name="popup_done">
       <description summary="popup interaction is done">
        The popup_done event is sent out when a popup is dismissed by the

commit eef4b95f59ccc3eedcb01cd6e06556488bf8f71c
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Dec 4 14:58:12 2015 +0800

    xdg-shell: Make xdg_popup non-grabbing by default
    
    Turn xdg_popup into plain temporary child surfaces without any grabbing
    or mapping order requirements by default.
    
    In order to create grabbing popup chains, a new request 'grab' is
    introduced which enables more or less the same semantics and
    requirements as xdg_popup previously had related to grabbing, stacking
    and mapping order.
    
    This enables using xdg_popup for creating tooltips and other user
    interface elements that does not want to take an explicit grab.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Signed-off-by: Mike Blumenkrantz <zm...@samsung.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index e4d552c..0771668 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -164,16 +164,11 @@
        This creates an xdg_popup object for the given xdg_surface and gives the
        associated wl_surface the xdg_popup role.
 
-       This request must be used in response to some sort of user action like a
-       button press, key press, or touch down event.
-
        See the documentation of xdg_popup for more details about what an
        xdg_popup is and how it is used.
       </description>
       <arg name="id" type="new_id" interface="zxdg_popup_v6"/>
       <arg name="parent" type="object" interface="zxdg_surface_v6"/>
-      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat 
of the user event"/>
-      <arg name="serial" type="uint" summary="the serial of the user event"/>
       <arg name="x" type="int"/>
       <arg name="y" type="int"/>
     </request>
@@ -675,46 +670,30 @@
 
   <interface name="zxdg_popup_v6" version="1">
     <description summary="short-lived, popup surfaces for menus">
-      A popup surface is a short-lived, temporary surface that can be
-      used to implement menus. It takes an explicit grab on the surface
-      that will be dismissed when the user dismisses the popup. This can
-      be done by the user clicking outside the surface, using the keyboard,
-      or even locking the screen through closing the lid or a timeout.
-
-      When the popup is dismissed, a popup_done event will be sent out,
-      and at the same time the surface will be unmapped. The xdg_popup
-      object is now inert and cannot be reactivated, so clients should
-      destroy it. Explicitly destroying the xdg_popup object will also
-      dismiss the popup and unmap the surface.
-
-      Clients will receive events for all their surfaces during this
-      grab (which is an "owner-events" grab in X11 parlance). This is
-      done so that users can navigate through submenus and other
-      "nested" popup windows without having to dismiss the topmost
-      popup.
-
-      Clients that want to dismiss the popup when another surface of
-      their own is clicked should dismiss the popup using the destroy
+      A popup surface is a short-lived, temporary surface. It can be used to
+      implement for example menus, popovers, tooltips and other similar user
+      interface concepts.
+
+      A popup can be made to take an explicit grab. See xdg_popup.grab for
+      details.
+
+      When the popup is dismissed, a popup_done event will be sent out, and at
+      the same time the surface will be unmapped. See the xdg_popup.popup_done
+      event for details.
+
+      Explicitly destroying the xdg_popup object will also dismiss the popup 
and
+      unmap the surface. Clients that want to dismiss the popup when another
+      surface of their own is clicked should dismiss the popup using the 
destroy
       request.
 
       The parent surface must have either the xdg_toplevel or xdg_popup surface
       role.
 
-      Specifying an xdg_popup for the parent means that the popups are
-      nested, with this popup now being the topmost popup. Nested
-      popups must be destroyed in the reverse order they were created
-      in, e.g. the only popup you are allowed to destroy at all times
-      is the topmost one.
+      A newly created xdg_popup will be stacked on top of all previously 
created
+      xdg_popup surfaces associated with the same xdg_toplevel.
 
-      If there is an existing popup when creating a new popup, the
-      parent must be the current topmost popup.
-
-      A parent surface must be mapped before the new popup is mapped.
-
-      When compositors choose to dismiss a popup, they will likely
-      dismiss every nested popup as well. When a compositor dismisses
-      popups, it will follow the same dismissing order as required
-      from the client.
+      The parent of an xdg_popup must be mapped (see the xdg_surface
+      description) before the xdg_popup itself.
 
       The x and y arguments passed when creating the popup object specify
       where the top left of the popup should be placed, relative to the
@@ -723,11 +702,13 @@
 
       The client must call wl_surface.commit on the corresponding wl_surface
       for the xdg_popup state to take effect.
-
-      For a surface to be mapped by the compositor the client must have
-      committed both the xdg_popup state and a buffer.
     </description>
 
+    <enum name="error">
+      <entry name="invalid_grab" value="0"
+            summary="tried to grab after being mapped"/>
+    </enum>
+
     <request name="destroy" type="destructor">
       <description summary="remove xdg_popup interface">
        This destroys the popup. Explicitly destroying the xdg_popup
@@ -738,6 +719,56 @@
       </description>
     </request>
 
+    <request name="grab">
+      <description summary="make the popup take an explicit grab">
+       This request makes the created popup take an explicit grab. An explicit
+       grab will be dismissed when the user dismisses the popup, or when the
+       client destroys the xdg_popup. This can be done by the user clicking
+       outside the surface, using the keyboard, or even locking the screen
+       through closing the lid or a timeout.
+
+       If the compositor denies the grab, the popup will be immediately
+       dismissed.
+
+       This request must be used in response to some sort of user action like a
+       button press, key press, or touch down event. The serial number of the
+       event should be passed as 'serial'.
+
+       The parent of a grabbing popup must either be a xdg_toplevel surface or
+       another xdg_popup with an explicit grab. If the parent is another
+       xdg_popup it means that the popups are nested, with this popup now being
+       the topmost popup.
+
+       Nested popups must be destroyed in the reverse order they were created
+       in, e.g. the only popup you are allowed to destroy at all times is the
+       topmost one.
+
+       When compositors choose to dismiss a popup, they may dismiss every
+       nested grabbing popup as well. When a compositor dismisses popups, it
+       will follow the same dismissing order as required from the client.
+
+       The parent of a grabbing popup must either be another xdg_popup with an
+       active explicit grab, or an xdg_popup or xdg_toplevel, if there are no
+       explicit grabs already taken.
+
+       If the topmost grabbing popup is destroyed, the grab will be returned to
+       the parent of the popup, if that parent previously had an explicit grab.
+
+       If the parent is a grabbing popup which has already been dismissed, this
+       popup will be immediately dismissed. If the parent is a popup that did
+       not take an explicit grab, an error will be raised.
+
+       Clients will receive events for all their surfaces during this grab
+       (which is an "owner-events" grab in X11 parlance). This is done so that
+       users can navigate through submenus and other "nested" popup windows
+       without having to dismiss the topmost popup.
+      </description>
+
+      <arg name="seat" type="object" interface="wl_seat"
+          summary="the wl_seat of the user event"/>
+      <arg name="serial" type="uint" summary="the serial of the user event"/>
+    </request>
+
     <event name="popup_done">
       <description summary="popup interaction is done">
        The popup_done event is sent out when a popup is dismissed by the

commit 88390eddf5d522ab7ca3c9cbeb6cfea94e7effc1
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Dec 4 14:46:05 2015 +0800

    xdg-shell: Make get_popup take a xdg_surface instead of wl_surface
    
    The reason for using wl_surface before was that xdg_popup and
    xdg_surface (now xdg_toplevel) had no common interface other than
    wl_surface, but since xdg_surface is now the base interface, lets use
    that.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Reviewed-by: Mike Blumenkrantz <zm...@osg.samsung.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Reviewed-by: Benoit Gschwind <gschw...@gnu-log.net>
    Reviewed-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index fc41485..e4d552c 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -171,7 +171,7 @@
        xdg_popup is and how it is used.
       </description>
       <arg name="id" type="new_id" interface="zxdg_popup_v6"/>
-      <arg name="parent" type="object" interface="wl_surface"/>
+      <arg name="parent" type="object" interface="zxdg_surface_v6"/>
       <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat 
of the user event"/>
       <arg name="serial" type="uint" summary="the serial of the user event"/>
       <arg name="x" type="int"/>

commit 4c6cdfa2b638cb3dad7842453edb65a7800d774c
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Thu Apr 14 16:17:25 2016 +0800

    xdg-shell: Improve error enum formatting some
    
    The long lines stood out, break them by putting the summary on its own
    line.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Reviewed-by: Mike Blumenkrantz <zm...@osg.samsung.com>
    Reviewed-by: Benoit Gschwind <gschw...@gnu-log.net>
    Reviewed-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index 858c13e..fc41485 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -37,10 +37,14 @@
 
     <enum name="error">
       <entry name="role" value="0" summary="given wl_surface has another 
role"/>
-      <entry name="defunct_surfaces" value="1" summary="xdg_shell was 
destroyed before children"/>
-      <entry name="not_the_topmost_popup" value="2" summary="the client tried 
to map or destroy a non-topmost popup"/>
-      <entry name="invalid_popup_parent" value="3" summary="the client 
specified an invalid popup parent surface"/>
-      <entry name="invalid_surface_state" value="4" summary="the client 
provided an invalid surface state"/>
+      <entry name="defunct_surfaces" value="1"
+            summary="xdg_shell was destroyed before children"/>
+      <entry name="not_the_topmost_popup" value="2"
+            summary="the client tried to map or destroy a non-topmost popup"/>
+      <entry name="invalid_popup_parent" value="3"
+            summary="the client specified an invalid popup parent surface"/>
+      <entry name="invalid_surface_state" value="4"
+            summary="the client provided an invalid surface state"/>
     </enum>
 
     <request name="destroy" type="destructor">

commit 2258fa64c992a4218a8b47e379d6f00d10b4042d
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Mon Feb 8 10:49:53 2016 +0800

    xdg-shell: Add error codes for invalid surface state
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Reviewed-by: Mike Blumenkrantz <zm...@osg.samsung.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index a7294dc..858c13e 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -40,6 +40,7 @@
       <entry name="defunct_surfaces" value="1" summary="xdg_shell was 
destroyed before children"/>
       <entry name="not_the_topmost_popup" value="2" summary="the client tried 
to map or destroy a non-topmost popup"/>
       <entry name="invalid_popup_parent" value="3" summary="the client 
specified an invalid popup parent surface"/>
+      <entry name="invalid_surface_state" value="4" summary="the client 
provided an invalid surface state"/>
     </enum>
 
     <request name="destroy" type="destructor">
@@ -133,6 +134,7 @@
     <enum name="error">
       <entry name="not_constructed" value="1"/>
       <entry name="already_constructed" value="2"/>
+      <entry name="unconfigured_buffer" value="3"/>
     </enum>
 
     <request name="destroy" type="destructor">

commit 5f694ca7e4151a50ee108f43bce229f8d6caf928
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Wed Jan 13 14:52:21 2016 +0800

    xdg-shell: Put xdg_shell events after requests
    
    It makes the structure consistent with most other protocols and
    provides a clear separation between what is done by the server and what
    is done by the client.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Reviewed-by: Mike Blumenkrantz <zm...@osg.samsung.com>
    Reviewed-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index 3268077..a7294dc 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -70,11 +70,19 @@
       <arg name="surface" type="object" interface="wl_surface"/>
     </request>
 
+    <request name="pong">
+      <description summary="respond to a ping event">
+       A client must respond to a ping event with a pong request or
+       the client may be deemed unresponsive. See xdg_shell.ping.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the ping event"/>
+    </request>
+
     <event name="ping">
       <description summary="check if the client is alive">
        The ping event asks the client if it's still alive. Pass the
        serial specified in the event back to the compositor by sending
-       a "pong" request back with the specified serial.
+       a "pong" request back with the specified serial. See xdg_shell.ping.
 
        Compositors can use this to determine if the client is still
        alive. It's unspecified what will happen if the client doesn't
@@ -86,14 +94,6 @@
       </description>
       <arg name="serial" type="uint" summary="pass this to the pong request"/>
     </event>
-
-    <request name="pong">
-      <description summary="respond to a ping event">
-       A client must respond to a ping event with a pong request or
-       the client may be deemed unresponsive.
-      </description>
-      <arg name="serial" type="uint" summary="serial of the ping event"/>
-    </request>
   </interface>
 
   <interface name="zxdg_surface_v6" version="1">
@@ -471,34 +471,6 @@
       </entry>
     </enum>
 
-    <event name="configure">
-      <description summary="suggest a surface change">
-       This configure event asks the client to resize its toplevel surface or
-       to change its state. The configured state should not be applied
-       immediately. See xdg_surface.configure for details.
-
-       The width and height arguments specify a hint to the window
-       about how its surface should be resized in window geometry
-       coordinates. See set_window_geometry.
-
-       If the width or height arguments are zero, it means the client
-       should decide its own window dimension. This may happen when the
-       compositor need to configure the state of the surface but doesn't
-       have any information about any previous or expected dimension.
-
-       The states listed in the event specify how the width/height
-       arguments should be interpreted, and possibly how it should be
-       drawn.
-
-       Clients must send an ack_configure in response to this event. See
-       xdg_surface.configure and xdg_surface.ack_configure for details.
-      </description>
-
-      <arg name="width" type="int"/>
-      <arg name="height" type="int"/>
-      <arg name="states" type="array"/>
-    </event>
-
     <request name="set_max_size">
       <description summary="set the maximum size">
        Set a maximum size for the window.
@@ -653,6 +625,34 @@
       </description>
     </request>
 
+    <event name="configure">
+      <description summary="suggest a surface change">
+       This configure event asks the client to resize its toplevel surface or
+       to change its state. The configured state should not be applied
+       immediately. See xdg_surface.configure for details.
+
+       The width and height arguments specify a hint to the window
+       about how its surface should be resized in window geometry
+       coordinates. See set_window_geometry.
+
+       If the width or height arguments are zero, it means the client
+       should decide its own window dimension. This may happen when the
+       compositor need to configure the state of the surface but doesn't
+       have any information about any previous or expected dimension.
+
+       The states listed in the event specify how the width/height
+       arguments should be interpreted, and possibly how it should be
+       drawn.
+
+       Clients must send an ack_configure in response to this event. See
+       xdg_surface.configure and xdg_surface.ack_configure for details.
+      </description>
+
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="states" type="array"/>
+    </event>
+
     <event name="close">
       <description summary="surface wants to be closed">
        The close event is sent by the compositor when the user

commit 8315aaf1ac57337c73da6a3cfd934d2dfed63c1c
Author: Jonas Ådahl <jad...@gmail.com>
Date:   Fri Dec 4 14:10:19 2015 +0800

    xdg-shell: Turn xdg_surface into a generic base interface
    
    Split out toplevel window like requests and events into a new interface
    called xdg_toplevel, and turn xdg_surface into a generic base interface
    which others extends.
    
    xdg_popup is changed to extend the xdg_surface.
    
    The configure event in xdg_surface was split up making
    xdg_surface.configure an event only carrying the serial number, while a
    new xdg_toplevel.configure event carries the other data previously sent
    via xdg_surface.configure. xdg_toplevel.configure is made to extend,
    via the latch-state mechanism, xdg_surface.configure and depends on
    that event to synchronize state.
    
    Other future xdg_surface based extensions are meant to also extend
    xdg_surface.configure for relevant window type dependend state
    synchronization.
    
    Signed-off-by: Jonas Ådahl <jad...@gmail.com>
    Signed-off-by: Mike Blumenkrantz <zm...@samsung.com>
    Reviewed-by: Yong Bakos <yba...@humanoriented.com>
    Acked-by: Quentin Glidic <sardemff7+...@sardemff7.net>

diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index ce57153..3268077 100644
--- a/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -54,11 +54,14 @@
 
     <request name="get_xdg_surface">
       <description summary="create a shell surface from a surface">
-       This creates an xdg_surface for the given surface and gives it the
-       xdg_surface role. A wl_surface can only be given an xdg_surface role
-       once. If get_xdg_surface is called with a wl_surface that already has
-       an active xdg_surface associated with it, or if it had any other role,
-       an error is raised.
+       This creates an xdg_surface for the given surface. While xdg_surface
+       itself is not a role, the corresponding surface may only be assigned
+       a role extending xdg_surface, such as xdg_toplevel or xdg_popup.

Reply via email to