+
+void menu_entry_render(ObMenuEntry *self)
+{
+ ObMenu *menu = self->parent;
+ RrAppearance *a, *s = NULL;
+
+ switch (self->render_type) {
+ case OB_MENU_ENTRY_RENDER_TYPE_SUBMENU:
+ a = self->enabled ? (self->hilite ? self->a_hilite : self->a_item)
+ : self->a_disabled;
+ s = self->a_submenu;
+ break;
+ case OB_MENU_ENTRY_RENDER_TYPE_BOOLEAN:
+ /* TODO: boolean check */
+ a = self->enabled ? (self->hilite ? self->a_hilite : self->a_item)
+ : self->a_disabled;
+ break;
+ case OB_MENU_ENTRY_RENDER_TYPE_NONE:
+ a = self->enabled ? (self->hilite ? self->a_hilite : self->a_item )
+ : self->a_disabled;
+ break;
+ case OB_MENU_ENTRY_RENDER_TYPE_SEPARATOR:
+ a = self->a_item;
+ break;
+
+ default:
+ g_assert_not_reached(); /* unhandled rendering type */
+ break;
+ }
+
+ XMoveResizeWindow(ob_display, self->item, 0, self->y,
+ menu->size.width, menu->item_h);
+ if (s) {
+ XMoveResizeWindow(ob_display, self->submenu_pic,
+ menu->size.width -
+ menu->bullet_w + (menu->bullet_w - 8) / 2,
+ self->y + (menu->item_h - 8) / 2,
+ 8, 8);
+ XMapWindow(ob_display, self->submenu_pic);
+ } else
+ XUnmapWindow(ob_display, self->submenu_pic);
+
+ a->surface.parent = menu->a_items;
+ a->surface.parentx = 0;
+ a->surface.parenty = self->y;
+
+ if (s) {
+ s->surface.parent = a;
+ s->surface.parentx = menu->size.width -
+ menu->bullet_w + (menu->bullet_w - 8) / 2,
+ s->surface.parenty = (menu->item_h - 8) / 2;
+ }
+
+ RrPaint(a, self->item, menu->size.width, menu->item_h);
+
+ if (s)
+ RrPaint(s, self->submenu_pic, 8, 8);
+}