window.c: Don't put titlebars on menu windows
diff --git a/clients/window.c b/clients/window.c
index 3502a95..17d16ed 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -4456,7 +4456,7 @@
 	window_set_buffer_scale (menu->window, window_get_buffer_scale (parent));
 	window_set_buffer_transform (menu->window, window_get_buffer_transform (parent));
 	menu->frame = frame_create(window->display->theme, 0, 0,
-				   FRAME_BUTTON_NONE, "Menu");
+				   FRAME_BUTTON_NONE, NULL);
 	menu->entries = entries;
 	menu->count = count;
 	menu->release_count = 0;
diff --git a/shared/cairo-util.c b/shared/cairo-util.c
index 5b4b0ff..3948572 100644
--- a/shared/cairo-util.c
+++ b/shared/cairo-util.c
@@ -418,7 +418,7 @@
 	cairo_text_extents_t extents;
 	cairo_font_extents_t font_extents;
 	cairo_surface_t *source;
-	int x, y, margin;
+	int x, y, margin, top_margin;
 
 	cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 	cairo_set_source_rgba(cr, 0, 0, 0, 0);
@@ -439,40 +439,47 @@
 	else
 		source = t->inactive_frame;
 
+	if (title)
+		top_margin = t->titlebar_height;
+	else
+		top_margin = t->width;
+
 	tile_source(cr, source,
 		    margin, margin,
 		    width - margin * 2, height - margin * 2,
-		    t->width, t->titlebar_height);
+		    t->width, top_margin);
 
-	cairo_rectangle (cr, margin + t->width, margin,
-			 width - (margin + t->width) * 2,
-			 t->titlebar_height - t->width);
-	cairo_clip(cr);
+	if (title) {
+		cairo_rectangle (cr, margin + t->width, margin,
+				 width - (margin + t->width) * 2,
+				 t->titlebar_height - t->width);
+		cairo_clip(cr);
 
-	cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
-	cairo_select_font_face(cr, "sans",
-			       CAIRO_FONT_SLANT_NORMAL,
-			       CAIRO_FONT_WEIGHT_BOLD);
-	cairo_set_font_size(cr, 14);
-	cairo_text_extents(cr, title, &extents);
-	cairo_font_extents (cr, &font_extents);
-	x = (width - extents.width) / 2;
-	y = margin +
-		(t->titlebar_height -
-		 font_extents.ascent - font_extents.descent) / 2 +
-		font_extents.ascent;
+		cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
+		cairo_select_font_face(cr, "sans",
+				       CAIRO_FONT_SLANT_NORMAL,
+				       CAIRO_FONT_WEIGHT_BOLD);
+		cairo_set_font_size(cr, 14);
+		cairo_text_extents(cr, title, &extents);
+		cairo_font_extents (cr, &font_extents);
+		x = (width - extents.width) / 2;
+		y = margin +
+			(t->titlebar_height -
+			 font_extents.ascent - font_extents.descent) / 2 +
+			font_extents.ascent;
 
-	if (flags & THEME_FRAME_ACTIVE) {
-		cairo_move_to(cr, x + 1, y  + 1);
-		cairo_set_source_rgb(cr, 1, 1, 1);
-		cairo_show_text(cr, title);
-		cairo_move_to(cr, x, y);
-		cairo_set_source_rgb(cr, 0, 0, 0);
-		cairo_show_text(cr, title);
-	} else {
-		cairo_move_to(cr, x, y);
-		cairo_set_source_rgb(cr, 0.4, 0.4, 0.4);
-		cairo_show_text(cr, title);
+		if (flags & THEME_FRAME_ACTIVE) {
+			cairo_move_to(cr, x + 1, y  + 1);
+			cairo_set_source_rgb(cr, 1, 1, 1);
+			cairo_show_text(cr, title);
+			cairo_move_to(cr, x, y);
+			cairo_set_source_rgb(cr, 0, 0, 0);
+			cairo_show_text(cr, title);
+		} else {
+			cairo_move_to(cr, x, y);
+			cairo_set_source_rgb(cr, 0.4, 0.4, 0.4);
+			cairo_show_text(cr, title);
+		}
 	}
 }
 
@@ -482,10 +489,15 @@
 {
 	int vlocation, hlocation, location;
 	const int grip_size = 8;
-	int margin;
+	int margin, top_margin;
 
 	margin = (flags & THEME_FRAME_MAXIMIZED) ? 0 : t->margin;
 
+	if (flags & THEME_FRAME_NO_TITLE)
+		top_margin = t->width;
+	else
+		top_margin = t->titlebar_height;
+
 	if (x < margin)
 		hlocation = THEME_LOCATION_EXTERIOR;
 	else if (margin <= x && x < margin + grip_size)
@@ -512,7 +524,7 @@
 	if (location & THEME_LOCATION_EXTERIOR)
 		location = THEME_LOCATION_EXTERIOR;
 	if (location == THEME_LOCATION_INTERIOR &&
-	    y < margin + t->titlebar_height)
+	    y < margin + top_margin)
 		location = THEME_LOCATION_TITLEBAR;
 	else if (location == THEME_LOCATION_INTERIOR)
 		location = THEME_LOCATION_CLIENT_AREA;
diff --git a/shared/cairo-util.h b/shared/cairo-util.h
index a8eb874..cce7671 100644
--- a/shared/cairo-util.h
+++ b/shared/cairo-util.h
@@ -60,7 +60,8 @@
 
 enum {
 	THEME_FRAME_ACTIVE = 1,
-	THEME_FRAME_MAXIMIZED,
+	THEME_FRAME_MAXIMIZED = 2,
+	THEME_FRAME_NO_TITLE = 4
 };
 
 void
diff --git a/shared/frame.c b/shared/frame.c
index fc85950..956e104 100644
--- a/shared/frame.c
+++ b/shared/frame.c
@@ -291,11 +291,14 @@
 	wl_list_init(&frame->pointers);
 	wl_list_init(&frame->touches);
 
-	button = frame_button_create(frame, DATADIR "/weston/icon_window.png",
-				     FRAME_STATUS_MENU,
-				     FRAME_BUTTON_CLICK_DOWN);
-	if (!button)
-		goto free_frame;
+	if (title) {
+		button = frame_button_create(frame,
+					     DATADIR "/weston/icon_window.png",
+					     FRAME_STATUS_MENU,
+					     FRAME_BUTTON_CLICK_DOWN);
+		if (!button)
+			goto free_frame;
+	}
 
 	if (buttons & FRAME_BUTTON_CLOSE) {
 		button = frame_button_create(frame,
@@ -400,15 +403,20 @@
 frame_resize_inside(struct frame *frame, int32_t width, int32_t height)
 {
 	struct theme *t = frame->theme;
-	int decoration_width, decoration_height;
+	int decoration_width, decoration_height, titlebar_height;
+
+	if (frame->title)
+		titlebar_height = t->titlebar_height;
+	else
+		titlebar_height = t->width;
 
 	if (frame->flags & FRAME_FLAG_MAXIMIZED) {
 		decoration_width = t->width * 2;
-		decoration_height = t->width + t->titlebar_height;
+		decoration_height = t->width + titlebar_height;
 	} else {
 		decoration_width = (t->width + t->margin) * 2;
 		decoration_height = t->width +
-			t->titlebar_height + t->margin * 2;
+			titlebar_height + t->margin * 2;
 	}
 
 	frame_resize(frame, width + decoration_width,
@@ -432,18 +440,23 @@
 {
 	struct frame_button *button;
 	struct theme *t = frame->theme;
-	int x_l, x_r, y, w, h;
+	int x_l, x_r, y, w, h, titlebar_height;
 	int32_t decoration_width, decoration_height;
 
 	if (!frame->geometry_dirty)
 		return;
 
+	if (frame->title)
+		titlebar_height = t->titlebar_height;
+	else
+		titlebar_height = t->width;
+
 	if (frame->flags & FRAME_FLAG_MAXIMIZED) {
 		decoration_width = t->width * 2;
-		decoration_height = t->width + t->titlebar_height;
+		decoration_height = t->width + titlebar_height;
 
 		frame->interior.x = t->width;
-		frame->interior.y = t->titlebar_height;
+		frame->interior.y = titlebar_height;
 		frame->interior.width = frame->width - decoration_width;
 		frame->interior.height = frame->height - decoration_height;
 
@@ -451,11 +464,10 @@
 		frame->shadow_margin = 0;
 	} else {
 		decoration_width = (t->width + t->margin) * 2;
-		decoration_height = t->width +
-			t->titlebar_height + t->margin * 2;
+		decoration_height = t->width + titlebar_height + t->margin * 2;
 
 		frame->interior.x = t->width + t->margin;
-		frame->interior.y = t->titlebar_height + t->margin;
+		frame->interior.y = titlebar_height + t->margin;
 		frame->interior.width = frame->width - decoration_width;
 		frame->interior.height = frame->height - decoration_height;