diff --git a/data/themerc.xsd b/data/themerc.xsd
index eb7bd7d0..40b036a5 100644
--- a/data/themerc.xsd
+++ b/data/themerc.xsd
@@ -137,6 +137,7 @@
+
@@ -157,12 +158,19 @@
+
+
+
+
+
+
+
diff --git a/openbox/focus_cycle_popup.c b/openbox/focus_cycle_popup.c
index 015330bd..8ae4e7e8 100644
--- a/openbox/focus_cycle_popup.c
+++ b/openbox/focus_cycle_popup.c
@@ -112,9 +112,9 @@ void focus_cycle_popup_startup(gboolean reconfig)
popup.a_bg->texture[0].type = RR_TEXTURE_RGBA;
attrib.override_redirect = True;
- attrib.border_pixel=RrColorPixel(ob_rr_theme->frame_focused_border_color);
+ attrib.border_pixel=RrColorPixel(ob_rr_theme->osd_border_color);
popup.bg = create_window(RootWindow(ob_display, ob_screen),
- ob_rr_theme->fbwidth,
+ ob_rr_theme->obwidth,
CWOverrideRedirect | CWBorderPixel, &attrib);
popup.text = create_window(popup.bg, 0, 0, NULL);
@@ -298,9 +298,9 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c)
/* find the position for the popup (include the outer borders) */
x = screen_area->x + (screen_area->width -
- (w + ob_rr_theme->fbwidth * 2)) / 2;
+ (w + ob_rr_theme->obwidth * 2)) / 2;
y = screen_area->y + (screen_area->height -
- (h + ob_rr_theme->fbwidth * 2)) / 2;
+ (h + ob_rr_theme->obwidth * 2)) / 2;
/* get the dimensions of the target hilite texture */
rgbax = ml;
diff --git a/openbox/popup.c b/openbox/popup.c
index 86d4fb4d..6099edcb 100644
--- a/openbox/popup.c
+++ b/openbox/popup.c
@@ -51,9 +51,9 @@ ObPopup *popup_new()
0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
InputOutput, RrVisual(ob_rr_inst), 0, NULL);
- XSetWindowBorderWidth(ob_display, self->bg, ob_rr_theme->fbwidth);
+ XSetWindowBorderWidth(ob_display, self->bg, ob_rr_theme->obwidth);
XSetWindowBorder(ob_display, self->bg,
- RrColorPixel(ob_rr_theme->frame_focused_border_color));
+ RrColorPixel(ob_rr_theme->osd_border_color));
XMapWindow(ob_display, self->text);
@@ -355,7 +355,7 @@ static void pager_popup_draw_icon(gint px, gint py, gint w, gint h,
gint eachw, eachh;
const guint cols = screen_desktop_layout.columns;
const guint rows = screen_desktop_layout.rows;
- const gint linewidth = ob_rr_theme->fbwidth;
+ const gint linewidth = ob_rr_theme->obwidth;
eachw = (w - ((cols + 1) * linewidth)) / cols;
eachh = (h - ((rows + 1) * linewidth)) / rows;
@@ -500,9 +500,9 @@ void pager_popup_delay_show(ObPagerPopup *self, gulong usec,
XSetWindowAttributes attr;
attr.border_pixel =
- RrColorPixel(ob_rr_theme->frame_focused_border_color);
+ RrColorPixel(ob_rr_theme->osd_border_color);
self->wins[i] = XCreateWindow(ob_display, self->popup->bg,
- 0, 0, 1, 1, ob_rr_theme->fbwidth,
+ 0, 0, 1, 1, ob_rr_theme->obwidth,
RrDepth(ob_rr_inst), InputOutput,
RrVisual(ob_rr_inst), CWBorderPixel,
&attr);
diff --git a/render/theme.c b/render/theme.c
index 15b7e3c9..4aef833f 100644
--- a/render/theme.c
+++ b/render/theme.c
@@ -213,10 +213,13 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
theme->fbwidth = 1;
/* menu border width inherits from frame border width */
- if (!FIND(int, L("dimensions","menu","border"),
- &theme->mbwidth, 0, 100))
+ if (!FIND(int, L("dimensions","menu","border"), &theme->mbwidth, 0, 100))
theme->mbwidth = theme->fbwidth;
+ /* osd border width inherits from frame border width */
+ if (!FIND(int, L("dimensions","osd","border"), &theme->obwidth, 0, 100))
+ theme->obwidth = theme->fbwidth;
+
if (!FIND(point, L("dimensions","window","clientpadding"),
&theme->cbwidthx, &theme->cbwidthy, 0, 100, 0, 100))
theme->cbwidthx = theme->cbwidthy = 1;
@@ -251,13 +254,19 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
theme->frame_unfocused_border_color->b);
/* menu border color inherits from frame focused border color */
- if (!FIND(color, L("menu","border"),
- &theme->menu_border_color, NULL))
+ if (!FIND(color, L("menu","border"), &theme->menu_border_color, NULL))
theme->menu_border_color =
RrColorNew(inst,
theme->frame_focused_border_color->r,
theme->frame_focused_border_color->g,
theme->frame_focused_border_color->b);
+ /* osd border color inherits from frame focused border color */
+ if (!FIND(color, L("osd","border"), &theme->osd_border_color, NULL))
+ theme->osd_border_color =
+ RrColorNew(inst,
+ theme->frame_focused_border_color->r,
+ theme->frame_focused_border_color->g,
+ theme->frame_focused_border_color->b);
if (!FIND(color, L("window","active","clientpadding"),
&theme->cb_focused_color, NULL))
theme->cb_focused_color = RrColorNew(inst, 255, 255, 255);
@@ -1238,6 +1247,7 @@ void RrThemeFree(RrTheme *theme)
g_free(theme->name);
RrColorFree(theme->menu_border_color);
+ RrColorFree(theme->osd_border_color);
RrColorFree(theme->frame_focused_border_color);
RrColorFree(theme->frame_unfocused_border_color);
RrColorFree(theme->title_separator_focused_color);
diff --git a/render/theme.h b/render/theme.h
index e02a69e2..2c35284f 100644
--- a/render/theme.h
+++ b/render/theme.h
@@ -42,6 +42,7 @@ struct _RrTheme {
gint handle_height;
gint fbwidth; /*!< frame border width */
gint mbwidth; /*!< menu border width */
+ gint obwidth; /*!< osd border width */
gint cbwidthx;
gint cbwidthy;
gint menu_overlap;
@@ -58,6 +59,7 @@ struct _RrTheme {
/* style settings - colors */
RrColor *menu_border_color;
+ RrColor *osd_border_color;
RrColor *frame_focused_border_color;
RrColor *frame_unfocused_border_color;
RrColor *title_separator_focused_color;
diff --git a/tools/themetoxml/themetoxml.c b/tools/themetoxml/themetoxml.c
index 8e3ce40c..5c7ac8af 100644
--- a/tools/themetoxml/themetoxml.c
+++ b/tools/themetoxml/themetoxml.c
@@ -342,12 +342,16 @@ int main(int argc, char **argv)
if (read_int(db, "borderWidth", &i)) {
CONT3("dimensions", "window", "border", NUM(i));
CONT3("dimensions", "menu", "border", NUM(i));
+ CONT3("dimensions", "osd", "border", NUM(i));
} else if (read_int(db, "border.width", &i)) {
CONT3("dimensions", "window", "border", NUM(i));
CONT3("dimensions", "menu", "border", NUM(i));
+ CONT3("dimensions", "osd", "border", NUM(i));
}
if (read_int(db, "menu.border.width", &i))
CONT3("dimensions", "menu", "border", NUM(i));
+ if (read_int(db, "osd.border.width", &i))
+ CONT3("dimensions", "osd", "border", NUM(i));
if (read_color(db, "border.color", &i, &j, &k)) {
COLOR3("window", "active", "border", i, j, k, 255);