diff --git a/src/xfce-desktop.c b/src/xfce-desktop.c index 40d74037..9f3acf52 100644 --- a/src/xfce-desktop.c +++ b/src/xfce-desktop.c @@ -449,12 +449,14 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data) { XfceDesktop *desktop = XFCE_DESKTOP(user_data); cairo_surface_t *surface = desktop->priv->bg_surface; + cairo_surface_t *pix_surface; GdkScreen *gscreen = desktop->priv->gscreen; GdkDisplay *display; gchar *new_filename = NULL; GdkRectangle rect; cairo_region_t *clip_region = NULL; gint i, monitor = -1, current_workspace; + gint scale; #ifdef G_ENABLE_DEBUG gchar *monitor_name = NULL; #endif @@ -536,6 +538,14 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data) rect.x, rect.y, rect.width, rect.height); } + scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(gscreen)); + scale = scale ? scale : 1; + + rect.x *= scale; + rect.y *= scale; + rect.width *= scale; + rect.height *= scale; + xfce_backdrop_set_size(backdrop, rect.width, rect.height); if(monitor > 0 @@ -605,7 +615,9 @@ backdrop_changed_cb(XfceBackdrop *backdrop, gpointer user_data) } cr = cairo_create(surface); - gdk_cairo_set_source_pixbuf(cr, pix, rect.x, rect.y); + pix_surface = gdk_cairo_surface_create_from_pixbuf(pix, scale, NULL); + cairo_set_source_surface(cr, pix_surface, rect.x, rect.y); + cairo_surface_destroy(pix_surface); /* clip the area so we don't draw over a previous wallpaper */ if(clip_region != NULL) { diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c index 6e2566bb..7763f241 100644 --- a/src/xfdesktop-icon-view.c +++ b/src/xfdesktop-icon-view.c @@ -2677,6 +2677,7 @@ static void xfdesktop_setup_grids(XfdesktopIconView *icon_view) { gint xorigin = 0, yorigin = 0, xrest = 0, yrest = 0, width = 0, height = 0; + gint scale; gsize old_size, new_size; GdkScreen *screen; GdkDisplay *display; @@ -2705,10 +2706,13 @@ xfdesktop_setup_grids(XfdesktopIconView *icon_view) xorigin = yorigin = 0; } - icon_view->priv->xorigin = xorigin; - icon_view->priv->yorigin = yorigin; - icon_view->priv->width = width; - icon_view->priv->height = height; + scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(screen)); + scale = scale ? scale : 1; + + icon_view->priv->xorigin = xorigin / scale; + icon_view->priv->yorigin = yorigin / scale; + icon_view->priv->width = width / scale; + icon_view->priv->height = height / scale; icon_view->priv->nrows = MAX((icon_view->priv->height - MIN_MARGIN * 2) / CELL_SIZE, 0); icon_view->priv->ncols = MAX((icon_view->priv->width - MIN_MARGIN * 2) / CELL_SIZE, 0); @@ -2797,9 +2801,9 @@ xfdesktop_icon_view_invalidate_icon(XfdesktopIconView *icon_view, /* we always have to invalidate the old extents */ if(xfdesktop_icon_get_extents(icon, NULL, NULL, &extents)) { if(gtk_widget_get_realized(GTK_WIDGET(icon_view))) { - gtk_widget_queue_draw_area(GTK_WIDGET(icon_view), extents.x, - extents.y, extents.width, - extents.height); + gtk_widget_queue_draw_area(GTK_WIDGET(icon_view), extents.x - 1, + extents.y - 1, extents.width + 2, + extents.height + 2); } invalidated_something = TRUE; } else