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);