repo: rxvt-unicode-sixel action: commit revision: path_from: revision_from: c66a454ab32b84bdcfc05affc3ec38e24275c19d: path_to: revision_to:
commit c66a454ab32b84bdcfc05affc3ec38e24275c19d Author: Marc LehmannDate: Sun Jun 10 15:01:14 2012 +0000 must have been in a hurry diff --git a/src/background.C b/src/background.C
--- a/src/background.C
+++ b/src/background.C
@@ -32,6 +32,7 @@ rxvt_term::bg_destroy ()
{
# if ENABLE_TRANSPARENCY
delete root_img;
+ root_img = 0;
# endif
# if BG_IMAGE_FROM_FILE
@@ -39,6 +40,7 @@ rxvt_term::bg_destroy ()
# endif
delete bg_img;
+ bg_img = 0;
}
bool
diff --git a/src/perl/background b/src/perl/background
--- a/src/perl/background
+++ b/src/perl/background
@@ -798,7 +798,7 @@ sub recalculate {
my $img = eval { $self->{expr}->() };
warn $@ if $@;#d#
- die if !UNIVERSAL::isa $img, "urxvt::img";
+ die "background-expr did not return an image.\n" if !UNIVERSAL::isa $img, "urxvt::img";
$state->{size_sensitive} = 1
if $img->repeat_mode != urxvt::RepeatNormal;
@@ -861,6 +861,9 @@ sub on_start {
my $expr = $self->x_resource ("%.expr")
or return;
+ $self->has_render
+ or die "background extension needs RENDER extension 0.10 or higher, ignoring background-expr.\n";
+
$self->set_expr (parse_expr $expr);
$self->{border} = $self->x_resource_boolean ("%.border");
diff --git a/src/rxvtperl.xs b/src/rxvtperl.xs
--- a/src/rxvtperl.xs
+++ b/src/rxvtperl.xs
@@ -2034,6 +2034,13 @@ rxvt_term::XTranslateCoordinates (Window src, Window dst, int x, int y)
#############################################################################
# fancy bg bloatstuff (TODO: should be moved up somewhere)
+bool
+rxvt_term::has_render ()
+ CODE:
+ RETVAL = THIS->display->flags & DISPLAY_HAS_RENDER;
+ OUTPUT:
+ RETVAL
+
# TODO: ugly
void
rxvt_term::background_geometry (bool border = false)
@@ -2092,7 +2099,6 @@ void
rxvt_term::set_background (rxvt_img *img, bool border = false)
CODE:
THIS->bg_destroy ();
- THIS->bg_img = 0;
THIS->bg_flags &= ~(rxvt_term::BG_NEEDS_REFRESH | rxvt_term::BG_INHIBIT_RENDER | rxvt_term::BG_IS_TRANSPARENT);
if (img) // TODO: cannot be false
@@ -2117,8 +2123,6 @@ rxvt_term::set_background (rxvt_img *img, bool border = false)
if (!border)
THIS->bg_flags |= rxvt_term::BG_IS_TRANSPARENT;
-
- delete img;
}
#endif
diff --git a/src/rxvttoolkit.C b/src/rxvttoolkit.C
--- a/src/rxvttoolkit.C
+++ b/src/rxvttoolkit.C
@@ -492,25 +492,24 @@ bool rxvt_display::ref_init ()
#if XRENDER
int major, minor;
if (XRenderQueryVersion (dpy, &major, &minor))
- {
- flags |= DISPLAY_HAS_RENDER;
-
- if (major > 0 || (major == 0 && minor >= 10))
- flags |= DISPLAY_HAS_RENDER_10;
+ if (major > 0 || (major == 0 && minor >= 10))
+ {
+ flags |= DISPLAY_HAS_RENDER;
- if (major > 0 || (major == 0 && minor >= 11))
- flags |= DISPLAY_HAS_RENDER_MUL;
+#if 0
+ if (major > 0 || (major == 0 && minor >= 11))
+ flags |= DISPLAY_HAS_RENDER_MUL;
+#endif
- XFilters *filters = XRenderQueryFilters (dpy, root);
- if (filters)
- {
- for (int i = 0; i < filters->nfilter; i++)
- if (!strcmp (filters->filter[i], FilterConvolution))
- flags |= DISPLAY_HAS_RENDER_CONV;
+ if (XFilters *filters = XRenderQueryFilters (dpy, root))
+ {
+ for (int i = 0; i < filters->nfilter; i++)
+ if (!strcmp (filters->filter [i], FilterConvolution))
+ flags |= DISPLAY_HAS_RENDER_CONV;
- XFree (filters);
- }
- }
+ XFree (filters);
+ }
+ }
#endif
int fd = XConnectionNumber (dpy);
diff --git a/src/rxvttoolkit.h b/src/rxvttoolkit.h
--- a/src/rxvttoolkit.h
+++ b/src/rxvttoolkit.h
@@ -219,11 +219,10 @@ struct rxvt_screen
void clear ();
};
-enum {
+enum
+{
DISPLAY_HAS_RENDER = 1 << 0,
- DISPLAY_HAS_RENDER_10 = 1 << 1,
- DISPLAY_HAS_RENDER_MUL = 1 << 2,
- DISPLAY_HAS_RENDER_CONV = 1 << 3,
+ DISPLAY_HAS_RENDER_CONV = 1 << 1,
};
struct rxvt_display : refcounted
-----END OF PAGE-----