root: Make sure cairo doesn't cache our temporary connection
Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
22cdd9d923
commit
05ece8c778
5
root.c
5
root.c
|
@ -79,6 +79,7 @@ root_set_wallpaper(cairo_pattern_t *pattern)
|
||||||
uint16_t height = screen->height_in_pixels;
|
uint16_t height = screen->height_in_pixels;
|
||||||
bool result = false;
|
bool result = false;
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
|
cairo_device_t *device;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
if (xcb_connection_has_error(c))
|
if (xcb_connection_has_error(c))
|
||||||
|
@ -96,6 +97,7 @@ root_set_wallpaper(cairo_pattern_t *pattern)
|
||||||
* the new one directly and doesn't need GetImage and PutImage.
|
* the new one directly and doesn't need GetImage and PutImage.
|
||||||
*/
|
*/
|
||||||
surface = cairo_xcb_surface_create(globalconf.connection, p, draw_default_visual(screen), width, height);
|
surface = cairo_xcb_surface_create(globalconf.connection, p, draw_default_visual(screen), width, height);
|
||||||
|
device = cairo_device_reference(cairo_surface_get_device(surface));
|
||||||
cr = cairo_create(surface);
|
cr = cairo_create(surface);
|
||||||
/* Paint the pattern to the surface */
|
/* Paint the pattern to the surface */
|
||||||
cairo_set_source(cr, pattern);
|
cairo_set_source(cr, pattern);
|
||||||
|
@ -104,6 +106,9 @@ root_set_wallpaper(cairo_pattern_t *pattern)
|
||||||
cairo_destroy(cr);
|
cairo_destroy(cr);
|
||||||
cairo_surface_finish(surface);
|
cairo_surface_finish(surface);
|
||||||
cairo_surface_destroy(surface);
|
cairo_surface_destroy(surface);
|
||||||
|
/* Finish the device so we safely call xcb_disconnect() */
|
||||||
|
cairo_device_finish(device);
|
||||||
|
cairo_device_destroy(device);
|
||||||
xcb_aux_sync(globalconf.connection);
|
xcb_aux_sync(globalconf.connection);
|
||||||
|
|
||||||
root_set_wallpaper_pixmap(c, p);
|
root_set_wallpaper_pixmap(c, p);
|
||||||
|
|
Loading…
Reference in New Issue