--- ./xfce-notify-window.orig.c 2011-07-01 00:41:58.000000000 +0400 +++ ./xfce-notify-window.c 2012-06-02 20:36:49.717329543 +0400 @@ -168,6 +168,13 @@ G_PARAM_READABLE)); gtk_widget_class_install_style_property(widget_class, + g_param_spec_boxed("default-border-color", + "unhovered border color", + "the color of the normal border", + GDK_TYPE_COLOR, + G_PARAM_READABLE)); + + gtk_widget_class_install_style_property(widget_class, g_param_spec_double("border-radius", "border radius", "the radius of the window border's curved corners", @@ -469,6 +476,9 @@ GList *children, *l; cairo_path_t *bg_path; + GdkColor *border_color = NULL; + gdouble border_width = DEFAULT_BORDER_WIDTH; + if(evt->count != 0) return FALSE; @@ -494,60 +504,65 @@ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); gdk_cairo_set_source_color(cr, &style->bg[GTK_STATE_NORMAL]); cairo_fill(cr); - - if(window->mouse_hover) { - /* but be sure to set the curved path because the code - * below needs it */ - cairo_append_path(cr, bg_path); - } + cairo_append_path(cr, bg_path); } if(window->mouse_hover) { - GdkColor *border_color = NULL; - gdouble border_width = DEFAULT_BORDER_WIDTH; - gtk_widget_style_get(widget, "border-color", &border_color, "border-width", &border_width, NULL); - cairo_set_operator(cr, CAIRO_OPERATOR_OVER); - if(border_color) - gdk_cairo_set_source_color(cr, border_color); - else - cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); - cairo_set_line_width(cr, border_width); - - cairo_stroke(cr); - - /* draw a circle with an X in it */ - if(!window->close_btn_path) { - cairo_path_t *flat_path; - GdkFillRule fill_rule; - - cairo_arc(cr, widget->allocation.width - 12., 12., 7.5, 0., 2*M_PI); - window->close_btn_path = cairo_copy_path(cr); - - flat_path = cairo_copy_path_flat(cr); - fill_rule = (cairo_get_fill_rule(cr) == CAIRO_FILL_RULE_WINDING - ? GDK_WINDING_RULE : GDK_EVEN_ODD_RULE); - window->close_btn_region = xfce_gdk_region_from_cairo_flat_path(flat_path, - fill_rule); - cairo_path_destroy(flat_path); - } else - cairo_append_path(cr, window->close_btn_path); - cairo_set_line_width(cr, 1.5); - cairo_stroke(cr); - - cairo_move_to(cr, widget->allocation.width - 8., 8.); - cairo_line_to(cr, widget->allocation.width - 16., 16.); - cairo_stroke(cr); - cairo_move_to(cr, widget->allocation.width - 16., 8.); - cairo_line_to(cr, widget->allocation.width - 8., 16.); - cairo_stroke(cr); + if(!border_color) { + /* if border-color not set fallback to default-border-color */ + gtk_widget_style_get(widget, + "default-border-color", &border_color, + NULL); + } + } else { + gtk_widget_style_get(widget, + "default-border-color", &border_color, + "border-width", &border_width, + NULL); } + /* draw notification border */ + cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + if(border_color) + gdk_cairo_set_source_color(cr, border_color); + else + cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); + cairo_set_line_width(cr, border_width); + + cairo_stroke(cr); + + /* draw a circle with an X in it */ + if(!window->close_btn_path) { + cairo_path_t *flat_path; + GdkFillRule fill_rule; + + cairo_arc(cr, widget->allocation.width - 12., 12., 7.5, 0., 2*M_PI); + window->close_btn_path = cairo_copy_path(cr); + + flat_path = cairo_copy_path_flat(cr); + fill_rule = (cairo_get_fill_rule(cr) == CAIRO_FILL_RULE_WINDING + ? GDK_WINDING_RULE : GDK_EVEN_ODD_RULE); + window->close_btn_region = xfce_gdk_region_from_cairo_flat_path(flat_path, + fill_rule); + cairo_path_destroy(flat_path); + } else + cairo_append_path(cr, window->close_btn_path); + cairo_set_line_width(cr, 1.5); + cairo_stroke(cr); + + cairo_move_to(cr, widget->allocation.width - 8., 8.); + cairo_line_to(cr, widget->allocation.width - 16., 16.); + cairo_stroke(cr); + cairo_move_to(cr, widget->allocation.width - 16., 8.); + cairo_line_to(cr, widget->allocation.width - 8., 16.); + cairo_stroke(cr); + cairo_destroy(cr); children = gtk_container_get_children(GTK_CONTAINER(widget));