[PATCH weston 2/6] desktop-shell: define a "managed_surface" interface
Manuel Bachmann
manuel.bachmann at open.eurogiciel.org
Thu Apr 9 09:23:23 PDT 2015
The new xdg-shell present/present_from_event() requests
specify that the compositor may notify the user. Thus,
we need a way to pass requests and events between the
compositor-side shell plugin and the shell client
(which does the drawing).
Define a "managed_surface" interface, which will keep track
of server-side shell surfaces, and is able to send requests
and receive events.
Signed-off-by: Manuel Bachmann <manuel.bachmann at open.eurogiciel.org>
---
clients/desktop-shell.c | 37 ++++++++++++++++++++++++++++++-
desktop-shell/shell.c | 18 ++++++++++++++++
protocol/desktop-shell.xml | 54 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 1 deletion(-)
diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c
index ac2928f..c5baf52 100644
--- a/clients/desktop-shell.c
+++ b/clients/desktop-shell.c
@@ -942,6 +942,32 @@ unlock_dialog_finish(struct task *task, uint32_t events)
}
static void
+managed_surface_presented(void *data,
+ struct managed_surface *managed_surface)
+{
+}
+
+static void
+managed_surface_title_changed(void *data,
+ struct managed_surface *managed_surface,
+ const char *title)
+{
+}
+
+static void
+managed_surface_removed(void *data,
+ struct managed_surface *managed_surface)
+{
+ managed_surface_destroy(managed_surface);
+}
+
+static const struct managed_surface_listener managed_surface_listener = {
+ managed_surface_presented,
+ managed_surface_title_changed,
+ managed_surface_removed
+};
+
+static void
desktop_shell_configure(void *data,
struct desktop_shell *desktop_shell,
uint32_t edges,
@@ -1018,10 +1044,19 @@ desktop_shell_grab_cursor(void *data,
}
}
+static void
+desktop_shell_add_managed_surface(void *data,
+ struct desktop_shell *desktop_shell,
+ struct managed_surface *managed_surface,
+ const char *title)
+{
+}
+
static const struct desktop_shell_listener listener = {
desktop_shell_configure,
desktop_shell_prepare_lock_surface,
- desktop_shell_grab_cursor
+ desktop_shell_grab_cursor,
+ desktop_shell_add_managed_surface
};
static void
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index d1d3f3c..e48d63d 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3509,6 +3509,24 @@ static const struct wl_shell_surface_interface shell_surface_implementation = {
};
static void
+managed_surface_activate(struct wl_client *client,
+ struct wl_resource *resource)
+{
+}
+
+static void
+managed_surface_destroy(struct wl_client *client,
+ struct wl_resource *resource)
+{
+ wl_resource_destroy(resource);
+}
+
+static const struct managed_surface_interface managed_surface_implementation = {
+ managed_surface_activate,
+ managed_surface_destroy
+};
+
+static void
destroy_shell_surface(struct shell_surface *shsurf)
{
struct shell_surface *child, *next;
diff --git a/protocol/desktop-shell.xml b/protocol/desktop-shell.xml
index fb0b748..7fc2307 100644
--- a/protocol/desktop-shell.xml
+++ b/protocol/desktop-shell.xml
@@ -117,6 +117,60 @@
</description>
</request>
+ <!-- Version 4 additions -->
+
+ <event name="add_managed_surface" since="4">
+ <description summary="manage a new surface">
+ Tell the shell to create a new managed_surface object.
+ </description>
+ <arg name="id" type="new_id" interface="managed_surface"/>
+ <arg name="title" type="string" allow-null="true"/>
+ </event>
+
+ </interface>
+
+ <interface name="managed_surface" version="1">
+ <description summary="interface for handling shell surfaces">
+ A managed surface is an abstraction for a shell surface,
+ susceptible to send events requiring shell feedback, and
+ also to which the shell might want to send requests back.
+ </description>
+
+ <request name="activate">
+ <description summary="activate a managed surface">
+ Tell the server that the shell wants to activate a
+ managed surface.
+ </description>
+ </request>
+
+ <request name="destroy" type="destructor"/>
+
+ <event name="presented">
+ <description summary="a managed surface needs attention">
+ This event will be sent immediately after a "present"
+ request has been issued on the corresponding shell surface.
+
+ The shell will draw a tooltip specifying the title of the
+ surface. If the user clicks on this tooltip, the shell will
+ send an "activate" request back to the server.
+ </description>
+ </event>
+
+ <event name="title_changed">
+ <description summary="a managed surface has a new title">
+ This event will be sent immediately after the title of the
+ corresponding shell surface has been modified.
+ </description>
+ <arg name="title" type="string" allow-null="true"/>
+ </event>
+
+ <event name="removed">
+ <description summary="a managed surface has been removed">
+ This event will be sent immediately after the corresponding
+ shell surface has been destroyed by the server.
+ </description>
+ </event>
+
</interface>
<interface name="screensaver" version="1">
--
1.8.3.1
More information about the wayland-devel
mailing list