summaryrefslogtreecommitdiff
path: root/libmate-desktop/mate-bg.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmate-desktop/mate-bg.c')
-rw-r--r--libmate-desktop/mate-bg.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/libmate-desktop/mate-bg.c b/libmate-desktop/mate-bg.c
index e1d05db..0201552 100644
--- a/libmate-desktop/mate-bg.c
+++ b/libmate-desktop/mate-bg.c
@@ -276,6 +276,9 @@ mate_bg_load_from_preferences (MateBG *bg)
mate_bg_load_from_gsettings (bg, settings);
g_object_unref (settings);
+
+ /* Queue change to force background redraw */
+ queue_changed (bg);
}
/* This function loads default system settings */
@@ -1138,6 +1141,36 @@ mate_bg_create_surface (MateBG *bg,
int height,
gboolean root)
{
+ return mate_bg_create_surface_scale (bg,
+ window,
+ width,
+ height,
+ 1,
+ root);
+}
+
+/**
+ * mate_bg_create_surface:
+ * @bg: MateBG
+ * @window:
+ * @width:
+ * @height:
+ * @scale:
+ * @root:
+ *
+ * Create a scaled surface that can be set as background for @window. If @is_root is
+ * TRUE, the surface created will be created by a temporary X server connection
+ * so that if someone calls XKillClient on it, it won't affect the application
+ * who created it.
+ **/
+cairo_surface_t *
+mate_bg_create_surface_scale (MateBG *bg,
+ GdkWindow *window,
+ int width,
+ int height,
+ int scale,
+ gboolean root)
+{
int pm_width, pm_height;
cairo_surface_t *surface;
@@ -1156,10 +1189,9 @@ mate_bg_create_surface (MateBG *bg,
mate_bg_get_pixmap_size (bg, width, height, &pm_width, &pm_height);
-
if (root)
{
- surface = make_root_pixmap (window, pm_width, pm_height);
+ surface = make_root_pixmap (window, pm_width * scale, pm_height * scale);
}
else
{
@@ -1168,6 +1200,8 @@ mate_bg_create_surface (MateBG *bg,
}
cr = cairo_create (surface);
+ cairo_scale (cr, (double)scale, (double)scale);
+
if (!bg->filename && bg->color_type == MATE_BG_COLOR_SOLID) {
gdk_cairo_set_source_rgba (cr, &(bg->primary));
}