xdg_surface_present() and xdg_surface_present_from_event()
are new requests supposed to be called on an existing
xdg_surface. They tell the compositor that the surface
has new content which may be of interest to the user.
The compositor may then choose to notify the user.

xdg_surface_present_from_event() takes a serial coming
from an input (wl_keyboard, wl_pointer, wl_touch) event as
an argument. If the serial is valid and sufficiently recent,
we can suppose the new content has been issued at the user's
request ; the compositor may then choose to raise the
surface directly. Otherwise, it just behaves like present().

Signed-off-by: Manuel Bachmann <[email protected]>
---
 desktop-shell/shell.c  | 15 +++++++++++++++
 protocol/xdg-shell.xml | 20 ++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index f7c928e..d1d3f3c 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3923,6 +3923,19 @@ xdg_surface_set_minimized(struct wl_client *client,
        set_minimized(shsurf->surface);
 }
 
+static void
+xdg_surface_present(struct wl_client *client,
+                   struct wl_resource *resource)
+{
+}
+
+static void
+xdg_surface_present_from_event(struct wl_client *client,
+                              struct wl_resource *resource,
+                              uint32_t serial)
+{
+}
+
 static const struct xdg_surface_interface xdg_surface_implementation = {
        xdg_surface_destroy,
        xdg_surface_set_parent,
@@ -3938,6 +3951,8 @@ static const struct xdg_surface_interface 
xdg_surface_implementation = {
        xdg_surface_set_fullscreen,
        xdg_surface_unset_fullscreen,
        xdg_surface_set_minimized,
+       xdg_surface_present,
+       xdg_surface_present_from_event,
 };
 
 static void
diff --git a/protocol/xdg-shell.xml b/protocol/xdg-shell.xml
index 68cf469..10f82c5 100644
--- a/protocol/xdg-shell.xml
+++ b/protocol/xdg-shell.xml
@@ -396,6 +396,26 @@
       </description>
     </request>
 
+    <request name="present">
+      <description summary="the window wants attention from the user">
+       The surface has new content and would like the compositor
+       to notify the user.
+      </description>
+    </request>
+
+    <request name="present_from_event">
+      <description summary="the window needs attention from the user">
+       The surface has new content and would like the compositor
+       to notify the user.
+
+       If a valid and sufficiently recent serial coming from an
+       input (keyboard, pointer, touch) event is passed as an
+       argument, the compositor may want to raise the surface.
+       Otherwise, the request just behaves like the "present" one.
+      </description>
+      <arg name="serial" type="uint" summary="serial of an input event"/>
+    </request>
+
     <event name="close">
       <description summary="surface wants to be closed">
         The close event is sent by the compositor when the user
-- 
1.8.3.1

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to