diff --git a/src/client.c b/src/client.c index e6268c88622c7e874081ee3e8fa2c47e35a59b9b..8416721209d14ecde9e4905642e00e017c5f0c96 100644 --- a/src/client.c +++ b/src/client.c @@ -1674,8 +1674,8 @@ clientFrame (DisplayInfo *display_info, Window w, gboolean recapture) if (c->depth == 32) { attributes.background_pixmap = None; - attributes.border_pixel = 0; - attributes.background_pixel = 0; + attributes.border_pixel = 65535; + attributes.background_pixel = 65535; valuemask |= CWBackPixmap|CWBackPixel|CWBorderPixel; } #endif diff --git a/src/display.c b/src/display.c index 949ed08f20fde3752419a0c33d0c3e508520a1f9..86541081964872ccb133348137af2c7377d76151 100644 --- a/src/display.c +++ b/src/display.c @@ -43,7 +43,7 @@ static int handleXError (Display * dpy, XErrorEvent * err) { -#if DEBUG +#if 1 /* DEBUG */ char buf[64]; XGetErrorText (dpy, err->error_code, buf, 63); diff --git a/src/mypixmap.c b/src/mypixmap.c index 2cc78a9aba10390fdb57c8db5707238e467ec5ad..b990b46771c0bb93a8be6846930f4da35d3457d3 100644 --- a/src/mypixmap.c +++ b/src/mypixmap.c @@ -34,6 +34,32 @@ #include "mypixmap.h" +static void +xfwmPixmapRefreshPict (xfwmPixmap * pm) +{ +#ifdef HAVE_RENDER + ScreenInfo * screen_info = pm->screen_info; + + if (!pm->pict_format) + { + pm->pict_format = XRenderFindVisualFormat (myScreenGetXDisplay (screen_info), + screen_info->visual); + } + + if (pm->pict != None) + { + XRenderFreePicture (myScreenGetXDisplay(pm->screen_info), pm->pict); + pm->pict == None; + } + + if ((pm->pixmap) && (pm->pict_format)) + { + pm->pict = XRenderCreatePicture (myScreenGetXDisplay (screen_info), + pm->pixmap, pm->pict_format, 0, NULL); + } +#endif +} + static gboolean xfwmPixmapCompose (xfwmPixmap * pm, gchar * dir, gchar * file) { @@ -162,11 +188,7 @@ xfwmPixmapLoad (ScreenInfo * screen_info, xfwmPixmap * pm, gchar * dir, gchar * xfwmPixmapCompose (pm, dir, file); #ifdef HAVE_RENDER - if (pm->pict_format) - { - pm->pict = XRenderCreatePicture (myScreenGetXDisplay (screen_info), - pm->pixmap, pm->pict_format, 0, NULL); - } + xfwmPixmapRefreshPict (pm); #endif return TRUE; @@ -177,7 +199,9 @@ xfwmPixmapCreate (ScreenInfo * screen_info, xfwmPixmap * pm, gint width, gint height) { TRACE ("entering xfwmPixmapCreate, width=%i, height=%i", width, height); - if ((width < 1) || (height < 1) || (!screen_info)) + g_return_if_fail (screen_info != NULL); + + if ((width < 1) || (height < 1)) { xfwmPixmapInit (screen_info, pm); } @@ -191,13 +215,10 @@ xfwmPixmapCreate (ScreenInfo * screen_info, xfwmPixmap * pm, pm->pixmap, width, height, 1); pm->width = width; pm->height = height; - + } #ifdef HAVE_RENDER - pm->pict_format = XRenderFindVisualFormat (myScreenGetXDisplay (screen_info), - screen_info->visual); - pm->pict = None; + xfwmPixmapRefreshPict (pm); #endif - } } void @@ -209,7 +230,8 @@ xfwmPixmapInit (ScreenInfo * screen_info, xfwmPixmap * pm) pm->width = 0; pm->height = 0; #ifdef HAVE_RENDER - pm->pict_format = NULL; + pm->pict_format = XRenderFindVisualFormat (myScreenGetXDisplay (screen_info), + screen_info->visual); pm->pict = None; #endif } @@ -288,4 +310,7 @@ xfwmPixmapFill (xfwmPixmap * src, xfwmPixmap * dst, xfwmPixmapFillRectangle (myScreenGetXDisplay (src->screen_info), src->screen_info->screen, src->mask, dst->mask, x, y, width, height); +#ifdef HAVE_RENDER + xfwmPixmapRefreshPict (dst); +#endif } diff --git a/src/mywindow.c b/src/mywindow.c index fbc14ba81370b25ecfb07e90ef2d9badfae15b65..27d8df0f8138ec2d6969fc6f0638db7c3c028bce 100644 --- a/src/mywindow.c +++ b/src/mywindow.c @@ -95,10 +95,10 @@ xfwmWindowCreate (ScreenInfo * screen_info, Visual *visual, gint depth, Window p win->y = 0; win->width = 1; win->height = 1; + xfwmWindowSetVisual (win, visual, depth); #ifdef HAVE_RENDER win->pict_format = XRenderFindVisualFormat (myScreenGetXDisplay (screen_info), win->visual); #endif - xfwmWindowSetVisual (win, visual, depth); } void @@ -244,9 +244,21 @@ xfwmWindowCopyComposite (xfwmWindow * win, xfwmPixmap * pix) Picture pict; Pixmap temp; - if (!pix->pict || !pix->pict_format || !win->pict_format) + if (!pix->pict) + { + g_warning ("xfwmWindowCopyComposite: Pixmap picture does not exist"); + return FALSE; + } + + if (!pix->pict_format) + { + g_warning ("xfwmWindowCopyComposite: Pixmap oicture format is unkown"); + return FALSE; + } + + if (!win->pict_format) { - TRACE ("xfwmWindowSetBG: Cannot get XRender picture format"); + g_warning ("xfwmWindowCopyComposite: Window oicture format is unkown"); return FALSE; }