summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-22 03:13:41 +0000
committerDana Jansens <danakj@orodu.net>2007-04-22 03:13:41 +0000
commit51c3c8c34a9a3a12423a18d12d4c7b9f809151fc (patch)
treeb1e08143cbd08654410c1ace30f0e0c4b69e0d71
parent73b490f614e4dda2849274ca75ab09325a71362e (diff)
give labeled separators borders
-rw-r--r--openbox/menuframe.c36
-rw-r--r--openbox/menuframe.h1
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;