--- rxvt-unicode/src/background.C 2012/05/25 08:27:47 1.220 +++ rxvt-unicode/src/background.C 2012/05/30 19:30:57 1.224 @@ -60,6 +60,11 @@ void rxvt_term::bg_destroy () { +# ifdef BG_IMAGE_FROM_FILE + for (vector::iterator bg_image = image_vec.begin (); bg_image < image_vec.end (); bg_image++) + bg_image->destroy (); +# endif + if (bg_pixmap) XFreePixmap (dpy, bg_pixmap); } @@ -616,7 +621,7 @@ XRenderColor mask_c; - mask_c.alpha = gdk_pixbuf_get_has_alpha (image.pixbuf) ? 0xffff : image.alpha; + mask_c.alpha = image.alpha; mask_c.red = mask_c.green = mask_c.blue = 0; @@ -671,32 +676,24 @@ void rxvt_term::parse_image (int id, const char *type, const char *arg) { - rxvt_image *image; - - for (image = image_vec.begin (); image < image_vec.end (); image++) - if (image->id == id) - break; + if (image_vec.size () < id + 1) + image_vec.resize (id + 1); - if (image == image_vec.end ()) - { - image = new_image (); - image->id = id; - } + rxvt_image *image = &image_vec[id]; } # endif rxvt_image::rxvt_image () { - id = - alpha = - flags = + alpha = 0xffff; + flags = 0; h_scale = - v_scale = + v_scale = defaultScale; h_align = - v_align = 0; + v_align = defaultAlign; # ifdef HAVE_PIXBUF - pixbuf.reset (0); + pixbuf = 0; # endif } @@ -719,8 +716,8 @@ bool ret = set_file (file); alpha = 0x8000; - if (ret && p) - set_geometry (p + 1); + if (ret) + set_geometry (p ? p + 1 : ""); return ret; } @@ -735,18 +732,13 @@ { if (pixbuf) g_object_unref (pixbuf); - pixbuf.reset (image); + pixbuf = image; ret = true; } # endif if (ret) - { - alpha = 0xffff; - flags = IM_IS_SET | IM_IS_SIZE_SENSITIVE; - h_scale = v_scale = defaultScale; - h_align = v_align = defaultAlign; - } + flags |= IM_IS_SET; return ret; }