diff --git a/compositor/compositor.c b/compositor/compositor.c
index b1767edc..5199b9ec 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -472,6 +472,26 @@ surface_map_toplevel(struct wl_client *client,
es->mapped = 1;
}
+static void
+surface_map_transient(struct wl_client *client,
+ struct wl_surface *surface, struct wl_surface *parent,
+ int x, int y, uint32_t flags)
+{
+ struct wlsc_surface *es = (struct wlsc_surface *) surface;
+ struct wlsc_surface *pes = (struct wlsc_surface *) parent;
+
+ if (es->mapped)
+ return;
+
+ es->x = pes->x + x;
+ es->y = pes->y + y;
+
+ wlsc_surface_update_matrix(es);
+ wl_list_insert(&es->compositor->surface_list, &es->link);
+ wlsc_compositor_schedule_repaint(es->compositor);
+ es->mapped = 1;
+}
+
static void
surface_damage(struct wl_client *client,
struct wl_surface *surface,
@@ -487,6 +507,7 @@ const static struct wl_surface_interface surface_interface = {
surface_destroy,
surface_attach,
surface_map_toplevel,
+ surface_map_transient,
surface_damage
};
diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 75ccb5bd..7f1a377d 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -341,6 +341,21 @@
+
+
+
+
+
+
+
+