From 51c3c8c34a9a3a12423a18d12d4c7b9f809151fc Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Apr 2007 03:13:41 +0000 Subject: [PATCH] give labeled separators borders --- openbox/menuframe.c | 36 +++++++++++++++++++++++++++++++++--- openbox/menuframe.h | 1 + 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/openbox/menuframe.c b/openbox/menuframe.c index fd7e9520..d065881d 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -463,6 +463,7 @@ static void menu_frame_render(ObMenuFrame *self) GList *it; gboolean has_icon = FALSE; ObMenu *sub; + ObMenuEntryFrame *e; XSetWindowBorderWidth(ob_display, self->window, ob_rr_theme->mbwidth); XSetWindowBorder(ob_display, self->window, @@ -513,10 +514,28 @@ static void menu_frame_render(ObMenuFrame *self) for (it = self->entries; it; it = g_list_next(it)) { RrAppearance *text_a; - ObMenuEntryFrame *e = it->data; + e = it->data; + + /* if the first entry is a labeled separator, then make its border + overlap with the menu's outside border */ + if (it == self->entries && + e->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR && + e->entry->data.separator.label) + { + h -= ob_rr_theme->mbwidth; + } + + if (e->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR && + e->entry->data.separator.label) + { + e->border = ob_rr_theme->mbwidth; + } - RECT_SET_POINT(e->area, 0, h); - XMoveWindow(ob_display, e->window, 0, e->area.y); + RECT_SET_POINT(e->area, 0, h+e->border); + XMoveWindow(ob_display, e->window, e->area.x-e->border, e->area.y-e->border); + XSetWindowBorderWidth(ob_display, e->window, e->border); + XSetWindowBorder(ob_display, e->window, + RrColorPixel(ob_rr_theme->menu_b_color)); text_a = ((e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && !e->entry->data.normal.enabled) ? @@ -552,6 +571,7 @@ static void menu_frame_render(ObMenuFrame *self) e->entry->data.separator.label; RrMinsize(self->a_title, &tw, &th); tw = MIN(tw, MAX_MENU_WIDTH); + th += ob_rr_theme->mbwidth * 2; } else { tw = 0; th = SEPARATOR_HEIGHT; @@ -564,6 +584,16 @@ static void menu_frame_render(ObMenuFrame *self) h += th; } + /* if the last entry is a labeled separator, then make its border + overlap with the menu's outside border */ + it = g_list_last(self->entries); + e = it ? it->data : NULL; + if (e && e->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR && + e->entry->data.separator.label) + { + h -= ob_rr_theme->mbwidth; + } + self->text_x = PADDING; self->text_w = w; diff --git a/openbox/menuframe.h b/openbox/menuframe.h index 9bc1bdc4..26f44b1b 100644 --- a/openbox/menuframe.h +++ b/openbox/menuframe.h @@ -80,6 +80,7 @@ struct _ObMenuEntryFrame guint ignore_enters; Rect area; + gint border; Window window; Window icon; -- 2.39.2