diff options
| -rw-r--r-- | debian/patches/020_debian.patch | 249 | 
1 files changed, 223 insertions, 26 deletions
| diff --git a/debian/patches/020_debian.patch b/debian/patches/020_debian.patch index b007dad..ed91ddf 100644 --- a/debian/patches/020_debian.patch +++ b/debian/patches/020_debian.patch @@ -60,10 +60,48 @@ index 8f443c1..5fb6581 100755   	$input = "w3m-control: GOTO_LINK";   }  diff --git a/ChangeLog b/ChangeLog -index 88358ef..9a7447e 100644 +index 88358ef..a95580f 100644  --- a/ChangeLog  +++ b/ChangeLog -@@ -1,3 +1,844 @@ +@@ -1,3 +1,882 @@ ++2016-02-28  Tatsuya Kinoshita  <tats@debian.org> ++ ++	* menu.c: Fix SIGFPE for ACCESSKEY. ++	Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092 ++ ++	* doc/README.func, main.c: Typo fix for ACCESSKEY. ++	cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092#5 ++ ++2015-12-20  Franz Thoma  <franz.thoma@tngtech.com> ++ ++	* w3mimg/x11/x11_w3mimg.c: Fix semi-transparent artifacts in w3m-img ++	when used with 32-bit color (e.g. urxvt). ++	imlib_render_image_on_drawable_at_size() tended to leave nasty ++	semi-transparent artifacts in 32-bit mode.  Apparently, resizing an ++	image in 32-bit mode affects the alpha channel even if there is no ++	transparency in the image.  With this patch, resizing is done in ++	24-bit mode (or whatever depth the original image has) before ++	converting the image to 32-bit and rendering it on the display. ++	Origin: https://gist.github.com/fmthoma/f76a1b44e00d5ca972bb ++	cf. https://github.com/hut/ranger/issues/86#issuecomment-166027119 ++ ++2015-12-17  Tatsuya Kinoshita  <tats@debian.org> ++ ++	* w3mimg/x11/x11_w3mimg.c: ++	Wrap render_pixbuf_to_pixmap_32() in USE_GTK2. ++ ++2015-12-17  Araki Ken  <arakiken@users.sf.net> ++ ++	* w3mimg/x11/x11_w3mimg.c: ++	w3mimgdisplay supports 32 bit depth screen. (e.g. gnome-terminal) ++	Origin: https://bitbucket.org/arakiken/w3m/commits/f9c22db8cfd1aaba9bb7301ef9ba51ed88d8bb40 ++ ++2015-12-17  Tatsuya Kinoshita  <tats@debian.org> ++ ++	* w3mimg/x11/x11_w3mimg.c: ++	Revert "Fix handling visuals and colormaps incorrectly". ++	This reverts commit e24b4064daf3e022e370788a8c7267db40c37dda. ++  +2015-11-19  Tatsuya Kinoshita  <tats@debian.org>  +  +	* fm.h: Accept cookies by default. @@ -4936,6 +4974,17 @@ index 56cca50..da16947 100644       assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can       use cookie_avoid_wrong_number_of_dots to avoid this       restriction. You can set this in "Domains to avoid [wrong number +diff --git a/doc/README.func b/doc/README.func +index 0b2c034..26de39d 100644 +--- a/doc/README.func ++++ b/doc/README.func +@@ -1,5 +1,5 @@ + ABORT		Quit w3m without confirmation +-ACCESSSKEY	Popup acceskey menu ++ACCESSKEY	Popup accesskey menu + ADD_BOOKMARK	Add current page to bookmark + ALARM		Set alarm + BACK		Back to previous buffer  diff --git a/doc/README.img b/doc/README.img  index 0c10114..f11362f 100644  --- a/doc/README.img @@ -8916,7 +8965,7 @@ index c0461df..f0c6242 100644       int quoted;       char *q = NULL;  diff --git a/main.c b/main.c -index b421943..6609b49 100644 +index b421943..d4f6b21 100644  --- a/main.c  +++ b/main.c  @@ -1,6 +1,7 @@ @@ -9438,6 +9487,15 @@ index b421943..6609b49 100644       parseURL2(url, &p_url, current);       pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);       cmd_loadURL(url, current, referer, NULL); +@@ -4329,7 +4454,7 @@ anchorMn(Anchor *(*menu_func) (Buffer *), int go) + } +  + /* accesskey */ +-DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu") ++DEFUN(accessKey, ACCESSKEY, "Popup accesskey menu") + { +     anchorMn(accesskey_menu, TRUE); + }  @@ -4510,8 +4635,7 @@ _peekURL(int only_img)   	s = parsedURL2Str(&pu);       } @@ -9674,7 +9732,7 @@ index 64fd0ad..bc7a5be 100644   #define SWAPI(a,b) { int tmp = a; a = b; b = tmp; }  diff --git a/menu.c b/menu.c -index 774b1bd..e968034 100644 +index 774b1bd..11a5369 100644  --- a/menu.c  +++ b/menu.c  @@ -57,6 +57,7 @@ static int mCancel(char c); @@ -9810,6 +9868,22 @@ index 774b1bd..e968034 100644   	Strcat_charp(str, p);   	label[i] = str->ptr;   	if (len < str->length) +@@ -1913,6 +1950,7 @@ accesskey_menu(Buffer *buf) +     } +     label[nitem] = NULL; +  ++    set_menu_frame(); +     new_option_menu(&menu, label, &key, NULL); +  +     menu.initial = 0; +@@ -2025,7 +2063,6 @@ list_menu(Buffer *buf) +     label[nitem] = NULL; +  +     set_menu_frame(); +-    set_menu_frame(); +     new_option_menu(&menu, label, &key, NULL); +  +     menu.initial = 0;  diff --git a/mimehead.c b/mimehead.c  index 78997e0..d16270c 100644  --- a/mimehead.c @@ -17013,7 +17087,7 @@ index d3ae5a9..fb323f5 100644   	goto error;       }  diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c -index f5be4a8..7eafa76 100644 +index f5be4a8..9a539de 100644  --- a/w3mimg/x11/x11_w3mimg.c  +++ b/w3mimg/x11/x11_w3mimg.c  @@ -14,7 +14,7 @@ @@ -17025,7 +17099,7 @@ index f5be4a8..7eafa76 100644   #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>   #else   #include <gdk-pixbuf/gdk-pixbuf-xlib.h> -@@ -121,16 +121,21 @@ x11_init(w3mimg_op * self) +@@ -121,24 +121,32 @@ x11_init(w3mimg_op * self)       if (self == NULL)   	return 0;       xi = (struct x11_info *)self->priv; @@ -17046,10 +17120,14 @@ index f5be4a8..7eafa76 100644  +#endif  +    }  +    else if (!xi->init_flag) { ++	XWindowAttributes attr;   #if defined(USE_GTK2)   	g_type_init();   #endif -@@ -138,7 +143,7 @@ x11_init(w3mimg_op * self) +-	gdk_pixbuf_xlib_init(xi->display, 0); ++	XGetWindowAttributes(xi->display, xi->parent, &attr); ++	/* gdk_pixbuf_xlib_init_with_depth() ignores depth, sigh... */ ++	gdk_pixbuf_xlib_init_with_depth(xi->display, 0, attr.depth);   	xi->init_flag = TRUE;       }   #endif @@ -17058,13 +17136,26 @@ index f5be4a8..7eafa76 100644   	xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL);   	if (!xi->imageGC)   	    return 0; -@@ -214,9 +219,12 @@ x11_set_background(w3mimg_op * self, char *background) - 	Pixmap p; - 	GC gc; +@@ -200,14 +208,16 @@ x11_set_background(w3mimg_op * self, char *background) + { +     XColor screen_def, exact_def; +     struct x11_info *xi; ++    XWindowAttributes attr; +     if (self == NULL) + 	return; +     xi = (struct x11_info *)self->priv; +     if (xi == NULL) + 	return; +  ++    XGetWindowAttributes(xi->display, xi->window, &attr); +     if (background && +-	XAllocNamedColor(xi->display, DefaultColormap(xi->display, 0), ++	XAllocNamedColor(xi->display, attr.colormap, + 			 background, &screen_def, &exact_def)) + 	xi->background_pixel = screen_def.pixel; +     else { +@@ -216,7 +226,7 @@ x11_set_background(w3mimg_op * self, char *background)   	XImage *i; -+	XWindowAttributes attr; -+ -+	XGetWindowAttributes(xi->display, xi->window, &attr);   	p = XCreatePixmap(xi->display, xi->window, 1, 1,  -			  DefaultDepth(xi->display, 0)); @@ -17072,19 +17163,101 @@ index f5be4a8..7eafa76 100644   	gc = XCreateGC(xi->display, xi->window, 0, NULL);   	if (!p || !gc)   	    exit(1);		/* XXX */ -@@ -328,6 +336,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) -     ImlibImage *im; - #elif defined(USE_IMLIB2) -     Imlib_Image im; +@@ -258,6 +268,7 @@ x11_img_new(struct x11_info *xi, int w, int h, int n) + { +     struct x11_image *img = NULL; +     int i;  +    XWindowAttributes attr; - #elif defined(USE_GDKPIXBUF) -     GdkPixbufAnimation *animation; -     int j, iw, ih, n, frame_num, delay = -1, max_anim; -@@ -374,15 +383,16 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) +  +     img = malloc(sizeof(*img)); +     if (!img) +@@ -267,9 +278,10 @@ x11_img_new(struct x11_info *xi, int w, int h, int n) +     if (!img->pixmap) + 	goto ERROR; +  ++    XGetWindowAttributes(xi->display, xi->window, &attr); +     for (i = 0; i < n; i++) { + 	img->pixmap[i] = XCreatePixmap(xi->display, xi->parent, w, h, +-				       DefaultDepth(xi->display, 0)); ++				       attr.depth); + 	if (!img->pixmap[i]) + 	    goto ERROR; +  +@@ -318,6 +330,41 @@ resize_image(GdkPixbuf * pixbuf, int width, int height) + 	return NULL; +     return resized_pixbuf; + } ++ ++#if defined(USE_GTK2) ++static void ++render_pixbuf_to_pixmap_32(Display *display, GC gc, Pixmap pixmap, GdkPixbuf *  pixbuf) ++{ ++    unsigned int x, y, width, height, rowstride, bytes_per_pixel; ++    unsigned char *line; ++    XImage *image; ++ ++    width = gdk_pixbuf_get_width(pixbuf) ; ++    height = gdk_pixbuf_get_height(pixbuf) ; ++ ++    if (!(image = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap))) ++	return ; ++ ++    bytes_per_pixel = (gdk_pixbuf_get_has_alpha(pixbuf)) ? 4 : 3; ++    rowstride = gdk_pixbuf_get_rowstride(pixbuf); ++    line = gdk_pixbuf_get_pixels(pixbuf); ++ ++    for (y = 0; y < height; y++) { ++	u_char *pixel; ++ ++	pixel = line; ++	for (x = 0; x < width; x++) { ++	    XPutPixel(image, x, y, ++		(pixel[0] <<16) | (pixel[1] <<8) | pixel[2] | 0xff000000); ++	    pixel += bytes_per_pixel; ++	} ++	line += rowstride; ++    } ++ ++    XPutImage(display, pixmap, gc, image, 0, 0, 0, 0, width, height); ++    XDestroyImage(image); ++} ++#endif + #endif +  + static int +@@ -342,6 +389,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) +     GList *frames; + #endif + #endif ++    XWindowAttributes attr; +  +     if (self == NULL) + 	return 0; +@@ -349,6 +397,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) +     if (xi == NULL) + 	return 0; +  ++    XGetWindowAttributes(xi->display, xi->window, &attr); + #if defined(USE_IMLIB) +     im = Imlib_load_image(xi->id, fname); +     if (!im) +@@ -358,7 +407,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) +     if (h <= 0) + 	h = im->rgb_height; +     img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h, +-					DefaultDepth(xi->display, 0)); ++					attr.depth); +     if (!img->pixmap) + 	return 0; +     XSetForeground(xi->display, xi->imageGC, xi->background_pixel); +@@ -374,17 +423,21 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)   	w = imlib_image_get_width();       if (h <= 0)   	h = imlib_image_get_height(); -+    XGetWindowAttributes(xi->display, xi->window, &attr); ++ ++    im = imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), w, h); ++    imlib_context_set_image(im); ++       img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,  -					DefaultDepth(xi->display, 0));  +					attr.depth); @@ -17098,9 +17271,33 @@ index f5be4a8..7eafa76 100644  +    imlib_context_set_visual(attr.visual);  +    imlib_context_set_colormap(attr.colormap);       imlib_context_set_drawable((Drawable) img->pixmap); -     imlib_render_image_on_drawable_at_size(0, 0, w, h); +-    imlib_render_image_on_drawable_at_size(0, 0, w, h); ++    imlib_render_image_on_drawable(0, 0);       imlib_free_image(); -@@ -653,9 +663,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w, + #elif defined(USE_GDKPIXBUF) +     max_anim = self->max_anim; +@@ -416,7 +469,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) + 	ratio_h = 1.0 * h / ih; +     } +     tmp_pixmap = XCreatePixmap(xi->display, xi->parent, w, h, +-			       DefaultDepth(xi->display, 0)); ++			       attr.depth); +     XSetForeground(xi->display, xi->imageGC, xi->background_pixel); +     XFillRectangle(xi->display, (Pixmap) tmp_pixmap, xi->imageGC, 0, 0, w, h); +     if (!tmp_pixmap) { +@@ -459,7 +512,10 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h) + 	if (delay > ximg->delay) + 	    ximg->delay = delay; +  +-	gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf, ++	if (attr.depth == 32) ++	    render_pixbuf_to_pixmap_32(xi->display, xi->imageGC, ximg->pixmap[j], pixbuf); ++	else ++	    gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf, + 						 (Drawable) ximg->pixmap[j], 0, + 						 0, 0, 0, w, h, + 						 GDK_PIXBUF_ALPHA_BILEVEL, 1, +@@ -653,9 +709,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w,       if (self == NULL)   	return 0; @@ -17112,7 +17309,7 @@ index f5be4a8..7eafa76 100644   #if defined(USE_IMLIB)       im = Imlib_load_image(xi->id, fname); -@@ -755,6 +767,9 @@ w3mimg_x11open() +@@ -755,6 +813,9 @@ w3mimg_x11open()   	return NULL;       memset(wop, 0, sizeof(w3mimg_op)); @@ -17122,7 +17319,7 @@ index f5be4a8..7eafa76 100644       xi = (struct x11_info *)malloc(sizeof(struct x11_info));       if (xi == NULL)   	goto error; -@@ -807,6 +822,7 @@ w3mimg_x11open() +@@ -807,6 +868,7 @@ w3mimg_x11open()       wop->priv = xi; | 
