summaryrefslogtreecommitdiff
path: root/mate-panel/panel-background.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/panel-background.c')
-rw-r--r--mate-panel/panel-background.c40
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);