diff --git a/clients/window.c b/clients/window.c
index e2e59d1..a42ade0 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -84,9 +84,11 @@
 
 struct window {
 	struct display *display;
+	struct window *parent;
 	struct wl_surface *surface;
 	const char *title;
 	struct rectangle allocation, saved_allocation, server_allocation;
+	int x, y;
 	int resize_edges;
 	int redraw_scheduled;
 	int minimum_width, minimum_height;
@@ -598,7 +600,12 @@
 	wl_display_sync_callback(display->display, free_surface, window);
 
 	if (!window->mapped) {
-		wl_surface_map_toplevel(window->surface);
+		if (!window->parent)
+			wl_surface_map_toplevel(window->surface);
+		else
+			wl_surface_map_transient(window->surface,
+						 window->parent->surface,
+						 window->x, window->y, 0);
 		window->mapped = 1;
 	}
 
@@ -651,6 +658,28 @@
 }
 
 static void
+window_draw_menu(struct window *window)
+{
+	cairo_t *cr;
+	int width, height, r = 5;
+
+	window_create_surface(window);
+
+	cr = cairo_create(window->cairo_surface);
+	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+	cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.0);
+	cairo_paint(cr);
+
+	width = window->allocation.width;
+	height = window->allocation.height;
+	rounded_rect(cr, r, r, width - r, height - r, r);
+	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+	cairo_set_source_rgba(cr, 1.0, 1.0, 0.0, 0.5);
+	cairo_fill(cr);
+	cairo_destroy(cr);
+}
+
+static void
 window_draw_decorations(struct window *window)
 {
 	cairo_t *cr;
@@ -707,6 +736,14 @@
 }
 
 void
+window_destroy(struct window *window)
+{
+	wl_surface_destroy(window->surface);
+	wl_list_remove(&window->link);
+	free(window);
+}
+
+void
 display_flush_cairo_device(struct display *display)
 {
 	cairo_device_flush (display->device);
@@ -715,7 +752,9 @@
 void
 window_draw(struct window *window)
 {
-	if (window->fullscreen || !window->decoration)
+	if (window->parent)
+		window_draw_menu(window);
+	else if (window->fullscreen || !window->decoration)
 		window_create_surface(window);
 	else
 		window_draw_decorations(window);
@@ -1202,9 +1241,9 @@
 	wl_surface_damage(window->surface, x, y, width, height);
 }
 
-struct window *
-window_create(struct display *display, const char *title,
-	      int32_t width, int32_t height)
+static struct window *
+window_create_internal(struct display *display, struct window *parent,
+			int32_t width, int32_t height)
 {
 	struct window *window;
 
@@ -1214,7 +1253,7 @@
 
 	memset(window, 0, sizeof *window);
 	window->display = display;
-	window->title = strdup(title);
+	window->parent = parent;
 	window->surface = wl_compositor_create_surface(display->compositor);
 	window->allocation.x = 0;
 	window->allocation.y = 0;
@@ -1236,6 +1275,41 @@
 }
 
 void
+window_set_title(struct window *window, const char *title)
+{
+	window->title = strdup(title);
+}
+
+struct window *
+window_create(struct display *display, int32_t width, int32_t height)
+{
+	struct window *window;
+
+	window = window_create_internal(display, NULL, width, height);
+	if (!window)
+		return NULL;
+
+	return window;
+}
+
+struct window *
+window_create_transient(struct display *display, struct window *parent,
+			int32_t x, int32_t y, int32_t width, int32_t height)
+{
+	struct window *window;
+
+	window = window_create_internal(parent->display,
+					parent, width, height);
+	if (!window)
+		return NULL;
+
+	window->x = x;
+	window->y = y;
+
+	return window;
+}
+
+void
 window_set_buffer_type(struct window *window, enum window_buffer_type type)
 {
 	window->buffer_type = type;
