repo: rxvt-unicode-sixel
action: commit
revision: 
path_from: 
revision_from: c66a454ab32b84bdcfc05affc3ec38e24275c19d:
path_to: 
revision_to: 
git.thebackupbox.net
rxvt-unicode-sixel
git clone git://git.thebackupbox.net/rxvt-unicode-sixel
commit c66a454ab32b84bdcfc05affc3ec38e24275c19d
Author: Marc Lehmann 
Date:   Sun Jun 10 15:01:14 2012 +0000

    must have been in a hurry

diff --git a/src/background.C b/src/background.C
index d3c50d2796a2a51769d5a184ef6940c230ec0914..
index ..d94403d4eef2c4444dffaf8215473e28618f79e9 100644
--- 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
index a5d7315e66e70991a5dd6aac8c74dcc75c42027b..
index ..b0df9b5d7aba0f4e022aa9c0707a1ad88014af8f 100644
--- 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
index ed14bcb2323e0dfdb418265f1c00e6814e340eee..
index ..83db4c0431bba95e56e1b7273a19cc70fb2bb25f 100644
--- 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
index 86d62dc607e644bc81b0ef0b65b5a29cb193aca3..
index ..8fe0972c9c5833061234c494bf334a804e7ba079 100644
--- 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
index ebb2d0a8d1d907da84bbbec8f5e48e1653d01e3c..
index ..f4f624eb35a5493d3f31e5f383e78e97d9ad0e0b 100644
--- 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-----