Index: uspace/lib/ui/include/types/ui/paint.h
===================================================================
--- uspace/lib/ui/include/types/ui/paint.h	(revision ff6e91bcf78218e49444169033c0d4edb9c50021)
+++ uspace/lib/ui/include/types/ui/paint.h	(revision 81ec7e1867942dce648bbef472b80d7b8a71f294)
@@ -66,4 +66,11 @@
 } ui_box_chars_t;
 
+/** Horizontal brace characters for a particular box style. */
+typedef struct {
+	const char *start;
+	const char *middle;
+	const char *end;
+} ui_brace_chars_t;
+
 /** Box style */
 typedef enum {
Index: uspace/lib/ui/include/ui/paint.h
===================================================================
--- uspace/lib/ui/include/ui/paint.h	(revision ff6e91bcf78218e49444169033c0d4edb9c50021)
+++ uspace/lib/ui/include/ui/paint.h	(revision 81ec7e1867942dce648bbef472b80d7b8a71f294)
@@ -57,4 +57,6 @@
 extern errno_t ui_paint_text_box(ui_resource_t *, gfx_rect_t *,
     ui_box_style_t, gfx_color_t *);
+extern errno_t ui_paint_text_hbrace(ui_resource_t *, gfx_rect_t *,
+    ui_box_style_t, gfx_color_t *);
 
 #endif
Index: uspace/lib/ui/src/menuentry.c
===================================================================
--- uspace/lib/ui/src/menuentry.c	(revision ff6e91bcf78218e49444169033c0d4edb9c50021)
+++ uspace/lib/ui/src/menuentry.c	(revision 81ec7e1867942dce648bbef472b80d7b8a71f294)
@@ -349,11 +349,22 @@
 
 	if (mentry->separator) {
-		rect.p0 = geom.caption_pos;
-		rect.p1.x = geom.shortcut_pos.x;
-		rect.p1.y = rect.p0.y + 2;
-		rc = ui_paint_bevel(res->gc, &rect, res->wnd_shadow_color,
-		    res->wnd_highlight_color, 1, NULL);
-		if (rc != EOK)
-			goto error;
+		if (res->textmode) {
+			rect = geom.outer_rect;
+			rect.p0.x -= 1;
+			rect.p1.x += 1;
+
+			rc = ui_paint_text_hbrace(res, &rect, ui_box_single,
+			    res->wnd_face_color);
+			if (rc != EOK)
+				goto error;
+		} else {
+			rect.p0 = geom.caption_pos;
+			rect.p1.x = geom.shortcut_pos.x;
+			rect.p1.y = rect.p0.y + 2;
+			rc = ui_paint_bevel(res->gc, &rect, res->wnd_shadow_color,
+			    res->wnd_highlight_color, 1, NULL);
+			if (rc != EOK)
+				goto error;
+		}
 	}
 
Index: uspace/lib/ui/src/paint.c
===================================================================
--- uspace/lib/ui/src/paint.c	(revision ff6e91bcf78218e49444169033c0d4edb9c50021)
+++ uspace/lib/ui/src/paint.c	(revision 81ec7e1867942dce648bbef472b80d7b8a71f294)
@@ -62,4 +62,18 @@
 };
 
+/** Single horizontal brace characters */
+static ui_brace_chars_t single_hbrace_chars = {
+	.start = "\u251c",
+	.middle = "\u2500",
+	.end = "\u2524"
+};
+
+/** Double horizontal brace characters */
+static ui_brace_chars_t double_hbrace_chars = {
+	.start = "\u2560",
+	.middle = "\u2550",
+	.end = "\u2563"
+};
+
 /** Paint bevel.
  *
@@ -462,4 +476,82 @@
 }
 
+/** Paint a text horizontal brace.
+ *
+ * @param resource UI resource
+ * @param rect Rectangle inside which to paint the brace (height should
+ *             be 1).
+ * @param style Box style
+ * @param color Color
+ * @return EOK on success or an error code
+ */
+errno_t ui_paint_text_hbrace(ui_resource_t *resource, gfx_rect_t *rect,
+    ui_box_style_t style, gfx_color_t *color)
+{
+	errno_t rc;
+	gfx_text_fmt_t fmt;
+	gfx_rect_t srect;
+	gfx_coord2_t pos;
+	gfx_coord2_t dim;
+	size_t bufsz;
+	size_t off;
+	int i;
+	char *str = NULL;
+	ui_brace_chars_t *hbc = NULL;
+
+	gfx_rect_points_sort(rect, &srect);
+	gfx_rect_dims(&srect, &dim);
+
+	/* Is rectangle large enough to hold brace? */
+	if (dim.x < 2 || dim.y < 1)
+		return EOK;
+
+	switch (style) {
+	case ui_box_single:
+		hbc = &single_hbrace_chars;
+		break;
+	case ui_box_double:
+		hbc = &double_hbrace_chars;
+		break;
+	}
+
+	if (hbc == NULL)
+		return EINVAL;
+
+	gfx_text_fmt_init(&fmt);
+	fmt.color = color;
+
+	bufsz = str_size(hbc->start) +
+	    str_size(hbc->middle) * (dim.x - 2) +
+	    str_size(hbc->end) + 1;
+
+	str = malloc(bufsz);
+	if (str == NULL)
+		return ENOMEM;
+
+	str_cpy(str, bufsz, hbc->start);
+	off = str_size(hbc->start);
+
+	for (i = 1; i < dim.x - 1; i++) {
+		str_cpy(str + off, bufsz - off, hbc->middle);
+		off += str_size(hbc->middle);
+	}
+
+	str_cpy(str + off, bufsz - off, hbc->end);
+	off += str_size(hbc->end);
+	str[off] = '\0';
+
+	pos = rect->p0;
+	rc = gfx_puttext(resource->font, &pos, &fmt, str);
+	if (rc != EOK)
+		goto error;
+
+	free(str);
+	return EOK;
+error:
+	if (str != NULL)
+		free(str);
+	return rc;
+}
+
 /** @}
  */
Index: uspace/lib/ui/test/paint.c
===================================================================
--- uspace/lib/ui/test/paint.c	(revision ff6e91bcf78218e49444169033c0d4edb9c50021)
+++ uspace/lib/ui/test/paint.c	(revision 81ec7e1867942dce648bbef472b80d7b8a71f294)
@@ -277,4 +277,40 @@
 }
 
+/** Paint text horizontal brace */
+PCUT_TEST(text_hbrace)
+{
+	errno_t rc;
+	gfx_context_t *gc = NULL;
+	ui_resource_t *resource = NULL;
+	gfx_color_t *color = NULL;
+	test_gc_t tgc;
+	gfx_rect_t rect;
+
+	memset(&tgc, 0, sizeof(tgc));
+	rc = gfx_context_new(&ops, &tgc, &gc);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ui_resource_create(gc, false, &resource);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(resource);
+
+	rc = gfx_color_new_rgb_i16(1, 2, 3, &color);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rect.p0.x = 10;
+	rect.p0.y = 20;
+	rect.p1.x = 30;
+	rect.p1.y = 40;
+
+	/* Paint text horizontal brace */
+	rc = ui_paint_text_hbrace(resource, &rect, ui_box_single,
+	    color);
+
+	gfx_color_delete(color);
+	ui_resource_destroy(resource);
+	rc = gfx_context_delete(gc);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+}
+
 static errno_t testgc_set_clip_rect(void *arg, gfx_rect_t *rect)
 {
