diff options
Diffstat (limited to 'mate-panel/panel-background.c')
-rw-r--r-- | mate-panel/panel-background.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/mate-panel/panel-background.c b/mate-panel/panel-background.c index 11812faa..1b388f92 100644 --- a/mate-panel/panel-background.c +++ b/mate-panel/panel-background.c @@ -109,15 +109,37 @@ panel_background_prepare (PanelBackground *background) * (gdk_window_clear_backing_region), the correctly * scaled pattern is used */ cairo_matrix_t m; - - cairo_matrix_init_translate (&m, 0, 0); - cairo_matrix_scale (&m, - 1.0 / background->region.width, - 1.0 / background->region.height); - cairo_pattern_set_matrix (background->default_pattern, &m); - - gdk_window_set_background_pattern (background->window, - background->default_pattern); + cairo_surface_t *surface; + double width, height; + + surface = NULL; + width = 1.0; + height = 1.0; + cairo_pattern_get_surface(background->default_pattern, &surface); + /* catch invalid images (e.g. -gtk-gradient) before scaling and rendering */ + if (surface != NULL ){ + cairo_surface_reference(surface); + width = cairo_image_surface_get_width (surface); + height = cairo_image_surface_get_height (surface); + cairo_matrix_init_translate (&m, 0, 0); + cairo_matrix_scale (&m, + width / background->region.width, + height / background->region.height); + cairo_pattern_set_matrix (background->default_pattern, &m); + + gdk_window_set_background_pattern (background->window, + background->default_pattern); + } + else { + g_warning ("%s\n", + ("unsupported panel image background such as -gtk-gradient")); + g_warning ("%s\n", + ("use an image file or a standard css gradient")); + /* use any background color that has been set if image is invalid */ + gdk_window_set_background_rgba ( + background->window, &background->default_color); + } + cairo_surface_destroy(surface); } else gdk_window_set_background_rgba ( background->window, &background->default_color); |