On Wed, Jun 08, 2016 at 11:52:03AM +0300, Giulio Camuffo wrote:
> 2016-06-08 10:35 GMT+02:00 Jonas Ådahl <[email protected]>:
> > On Wed, Jun 08, 2016 at 11:16:49AM +0300, Giulio Camuffo wrote:
> >> Hi, one comment below, but anyway i think this looks good. However i
> >> will try to use it in qt asap to confirm it really is.
> >>
> >> 2016-05-26 7:32 GMT+03:00 Jonas Ådahl <[email protected]>:
> >> <snip>
> >>
> >> > +
> >> > +    <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 the size is the same as the window geometry why do we have both?
> >> and what happens if they differ?
> >
> > Yes, the size is the same. The reason I added the set_size request was
> > that by using set_window_geometry, I had to fake the x/y, which felt
> > like a hack.
> 
> Ah, so this also actually sets the window geometry? Maybe it would
> make sense to move set_window_geometry to xdg_toplevel, that would
> removet the issue.

No, it doesn't. It just lets the compositor position the surface before
its drawn. The client should (but doesn't have to) set a window geometry
with the same size, but if it doesn't, it cant expect to be positioned
within the borders of the work area.

It is still needed to get the x/y offset of the window content relative
to the surface, so that we can figure out what part of the popup is the
shadow.

> 
> >
> > I'm also considering whether we should allow the size to be
> > int_max while adding a width/height to the xdg_popup.configure to be
> > able to support the work-area limited maxed out popups (such as the good
> > old country chooser that turns into a vertical menu with arrows on the
> > top and bottom). I haven't gotten around to add try this yet though.
> 
> Sounds like it would be useful, but it can be a follow up.

Yea. I'll make it a follow up.


Jonas

> 
> 
> Giulio
> 
> >
> >
> > Jonas
> >
> >>
> >> > +
> >> > +       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">
> >> > +       Set the anchor edges of the anchor rectangle. The anchor edges 
> >> > define
> >> > +       where on the anchor rectangle the child surface should be 
> >> > positioned
> >> > +       relative to. An anchor is a bit mask of up to two values of the 
> >> > anchor
> >> > +       enum.
> >> > +
> >> > +       If two values on the same axis (for example left and right) are 
> >> > set the
> >> > +       invalid_input error is raised.
> >> > +
> >> > +       If no anchor is set on any axis, the anchor position will be 
> >> > positioned
> >> > +       at the center of the anchor rectangle on the unset axis. The 
> >> > default
> >> > +       value is "none".
> >> > +      </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">
> >> > +       The gravity defines in what direction a surface would be 
> >> > positioned,
> >> > +       relative to the anchor edges on the parent surface. A gravity is 
> >> > a
> >> > +       bit mask of up to two values of the gravity enum.
> >> > +
> >> > +       If two values on the same axis (for example left and right) are 
> >> > set the
> >> > +       invalid_input error is raised.
> >> > +
> >> > +       If no gravity is set on an axis, the gravity for that axis will 
> >> > be
> >> > +       equivalent to setting "none" for that axis, resulting in the 
> >> > child being
> >> > +       centered over the anchor edges on that axis.
> >> > +      </description>
> >> > +      <arg name="gravity" type="uint" enum="gravity"
> >> > +          summary="bit mask of gravity directions"/>
> >> > +    </request>
> >> > +
> >> > +    <enum name="constrain_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.
> >> > +       </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.
> >> > +       </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 resulting position after inverting ends up also being 
> >> > constrained,
> >> > +         the behaviour is undefined.
> >> > +       </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 resulting position after inverting ends up also being 
> >> > constrained,
> >> > +         the behaviour is undefined.
> >> > +       </description>
> >> > +      </entry>
> >> > +    </enum>
> >> > +
> >> > +    <request name="set_constrain_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 with one bit per 
> >> > axis set
> >> > +       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. The default adjustment is none.
> >> > +      </description>
> >> > +      <arg name="constrain_adjustment" type="uint"
> >> > +          summary="bit mask of constrain 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_constrain_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
> >> > @@ -163,8 +393,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">
> >> > @@ -724,7 +953,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.
> >> > @@ -759,6 +988,23 @@
> >> >        <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. It is not sent by itself but is as a latched 
> >> > state prior
> >> > +       to the xdg_surface.configure event. 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
> >> > --
> >> > 2.5.5
> >> >
> >> > _______________________________________________
> >> > wayland-devel mailing list
> >> > [email protected]
> >> > https://lists.freedesktop.org/mailman/listinfo/wayland-devel
> >>
> >> 2016-05-26 6:32 GMT+02:00 Jonas Ådahl <[email protected]>:
> >> > 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 <[email protected]>
> >> > Signed-off-by: Mike Blumenkrantz <[email protected]>
> >> > ---
> >> >
> >> > Changes since v2:
> >> >   - Grammar, typos and spelling fixes
> >> >   - Reordered enum values to be the same as already present similar enum
> >> >   - Added enum attribute to relevant requests
> >> >
> >> >
> >> >  unstable/xdg-shell/xdg-shell-unstable-v6.xml | 252 
> >> > ++++++++++++++++++++++++++-
> >> >  1 file changed, 249 insertions(+), 3 deletions(-)
> >> >
> >> > diff --git a/unstable/xdg-shell/xdg-shell-unstable-v6.xml 
> >> > b/unstable/xdg-shell/xdg-shell-unstable-v6.xml
> >> > index 07cbbc9..1baafa7 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
> >> > @@ -96,6 +107,225 @@
> >> >      </event>
> >> >    </interface>
> >> >
> >> > +  <interface name="zxdg_positioner_v6" version="1">
> >> > +    <description summary="child surface positioner">
> >> > +      The xdg_positioner provides an interface for constructing 
> >> > positioning
> >> > +      rules used for positioning a child surface relative to a parent 
> >> > surface
> >> > +      in a certain way. It allows methods for defining a rule that will 
> >> > make
> >> > +      the child surface stay within the border of the visible area of 
> >> > the
> >> > +      screen, with different ways in which the child surface should 
> >> > change
> >> > +      its position, including sliding along an axis, or flipping around 
> >> > a
> >> > +      rectangle.
> >> > +
> >> > +      See the various requests for details about possible rules.
> >> > +
> >> > +      Semantically, an xdg_positioner is a collection of positioning 
> >> > rules. When
> >> > +      used for positioning a surface, for example when passed as an 
> >> > argument to
> >> > +      xdg_surface.get_popup, the compositor copies the rules that were 
> >> > set up at
> >> > +      the time of the request. Making any changes or destroying the 
> >> > object after
> >> > +      it was used has 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">
> >> > +       Set the anchor edges of the anchor rectangle. The anchor edges 
> >> > define
> >> > +       where on the anchor rectangle the child surface should be 
> >> > positioned
> >> > +       relative to. An anchor is a bit mask of up to two values of the 
> >> > anchor
> >> > +       enum.
> >> > +
> >> > +       If two values on the same axis (for example left and right) are 
> >> > set the
> >> > +       invalid_input error is raised.
> >> > +
> >> > +       If no anchor is set on any axis, the anchor position will be 
> >> > positioned
> >> > +       at the center of the anchor rectangle on the unset axis. The 
> >> > default
> >> > +       value is "none".
> >> > +      </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">
> >> > +       The gravity defines in what direction a surface would be 
> >> > positioned,
> >> > +       relative to the anchor edges on the parent surface. A gravity is 
> >> > a
> >> > +       bit mask of up to two values of the gravity enum.
> >> > +
> >> > +       If two values on the same axis (for example left and right) are 
> >> > set the
> >> > +       invalid_input error is raised.
> >> > +
> >> > +       If no gravity is set on an axis, the gravity for that axis will 
> >> > be
> >> > +       equivalent to setting "none" for that axis, resulting in the 
> >> > child being
> >> > +       centered over the anchor edges on that axis.
> >> > +      </description>
> >> > +      <arg name="gravity" type="uint" enum="gravity"
> >> > +          summary="bit mask of gravity directions"/>
> >> > +    </request>
> >> > +
> >> > +    <enum name="constrain_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.
> >> > +       </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.
> >> > +       </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 resulting position after inverting ends up also being 
> >> > constrained,
> >> > +         the behaviour is undefined.
> >> > +       </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 resulting position after inverting ends up also being 
> >> > constrained,
> >> > +         the behaviour is undefined.
> >> > +       </description>
> >> > +      </entry>
> >> > +    </enum>
> >> > +
> >> > +    <request name="set_constrain_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 with one bit per 
> >> > axis set
> >> > +       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. The default adjustment is none.
> >> > +      </description>
> >> > +      <arg name="constrain_adjustment" type="uint"
> >> > +          summary="bit mask of constrain 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_constrain_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
> >> > @@ -163,8 +393,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">
> >> > @@ -724,7 +953,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.
> >> > @@ -759,6 +988,23 @@
> >> >        <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. It is not sent by itself but is as a latched 
> >> > state prior
> >> > +       to the xdg_surface.configure event. 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
> >> > --
> >> > 2.5.5
> >> >
> >> > _______________________________________________
> >> > wayland-devel mailing list
> >> > [email protected]
> >> > https://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to