wok-4.x diff scrot/stuff/scrot.patch @ rev 12354

scrot: up 0.8-12 (with patches)
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Nov 07 02:08:04 2012 +0000 (2012-11-07)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/scrot/stuff/scrot.patch	Wed Nov 07 02:08:04 2012 +0000
     1.3 @@ -0,0 +1,440 @@
     1.4 +# This patch was created manually from patches found here:
     1.5 +# http://scrot.sourcearchive.com/downloads/0.8-12/scrot_0.8-12.debian.tar.gz
     1.6 +
     1.7 +## 01_manpagefix.dpatch by  William Vera <billy@billy.com.mx>
     1.8 +## DP: Character cleanup for UTF-8 compatibility.
     1.9 +
    1.10 +--- scrot-0.8-orig/scrot.1
    1.11 ++++ scrot-0.8/scrot.1
    1.12 +@@ -87,7 +87,7 @@
    1.13 + \\n prints a newline (ignored when used in the filename)
    1.14 + .fi
    1.15 + .SH EXAMPLE
    1.16 +-scrot '%Y-%m-%d_$wx$h.png' -e 'mv $f ~/shots/'
    1.17 ++scrot '%Y\-%m\-%d_$wx$h.png' \-e 'mv $f ~/shots/'
    1.18 + .br
    1.19 + This would create a file called something like
    1.20 + 2000-10-30_2560x1024.png and move it to your shots directory.
    1.21 +
    1.22 +## 02_options.c.dpatch by William Vera <billy@billy.com.mx>
    1.23 +## DP: A little fix for wrong words.
    1.24 +
    1.25 +--- scrot-0.8-orig/src/options.c
    1.26 ++++ scrot-0.8/src/options.c
    1.27 +@@ -229,7 +229,7 @@
    1.28 +            "                            low quality means high compression.\n"
    1.29 +            "  -m, --multidisp           For multiple heads, grab shot from each\n"
    1.30 +            "                            and join them together.\n"
    1.31 +-           "  -s, --select              interactively choose a window or rectnagle\n"
    1.32 ++           "  -s, --select              interactively choose a window or rectangle\n"
    1.33 +            "                            with the mouse\n"
    1.34 +            "  -t, --thumb NUM           generate thumbnail too. NUM is the percentage\n"
    1.35 +            "                            of the original size for the thumbnail to be,\n"
    1.36 +@@ -238,7 +238,7 @@
    1.37 +            "  Both the --exec and filename parameters can take format specifiers\n"
    1.38 +            "  that are expanded by " PACKAGE " when encountered.\n"
    1.39 +            "  There are two types of format specifier. Characters preceded by a '%%'\n"
    1.40 +-           "  are interpretted by strftime(2). See man strftime for examples.\n"
    1.41 ++           "  are interpreted by strftime(2). See man strftime for examples.\n"
    1.42 +            "  These options may be used to refer to the current date and time.\n"
    1.43 +            "  The second kind are internal to " PACKAGE
    1.44 +            "  and are prefixed by '$'\n"
    1.45 +
    1.46 +## 003_descmanpage.dpatch by William Vera <billy@billy.com.mx>
    1.47 +## DP: Change the description on manpage.
    1.48 +
    1.49 +--- scrot-0.8-orig/scrot.1
    1.50 ++++ scrot-0.8/scrot.1
    1.51 +@@ -1,6 +1,6 @@
    1.52 + .TH scrot 1 "Oct 26, 2000"
    1.53 + .SH NAME
    1.54 +-scrot - Screen capture using imlib2
    1.55 ++scrot - capture a screenshot using imlib2
    1.56 + .SH SYNOPSIS
    1.57 + scrot [options] [file]
    1.58 + .SH DESCRIPTION
    1.59 +
    1.60 +## 04-focused.dpatch by James Cameron  <quozl@us.netrek.org>
    1.61 +## DP: src/options.c (scrot_parse_option_array): add --focused option.
    1.62 +## DP: src/main.c (scrot_get_geometry, scrot_nice_clip): new functions
    1.63 +##     for common code used by both selected and focused screenshot.
    1.64 +## DP: src/main.c (scrot_grab_focused): new function to grab currently
    1.65 +##      focused window after specified delay.
    1.66 +
    1.67 +--- scrot-0.8-orig/src/options.h
    1.68 ++++ scrot-0.8/src/options.h
    1.69 +@@ -32,6 +32,7 @@
    1.70 +    int delay;
    1.71 +    int countdown;
    1.72 +    int select;
    1.73 ++   int focused;
    1.74 +    int quality;
    1.75 +    int border;
    1.76 +    int multidisp;
    1.77 +--- scrot-0.8-orig/src/options.c
    1.78 ++++ scrot-0.8/src/options.c
    1.79 +@@ -44,13 +44,15 @@
    1.80 + static void
    1.81 + scrot_parse_option_array(int argc, char **argv)
    1.82 + {
    1.83 +-   static char stropts[] = "bcd:e:hmq:st:v+:";
    1.84 ++   static char stropts[] = "bcd:e:hmq:st:uv+:";
    1.85 +    static struct option lopts[] = {
    1.86 +       /* actions */
    1.87 +       {"help", 0, 0, 'h'},                  /* okay */
    1.88 +       {"version", 0, 0, 'v'},               /* okay */
    1.89 +       {"count", 0, 0, 'c'},
    1.90 +       {"select", 0, 0, 's'},
    1.91 ++      {"focused", 0, 0, 'u'},
    1.92 ++      {"focussed", 0, 0, 'u'},	/* macquarie dictionary has both spellings */
    1.93 +       {"border", 0, 0, 'b'},
    1.94 +       {"multidisp", 0, 0, 'm'},
    1.95 +       /* toggles */
    1.96 +@@ -95,6 +97,9 @@
    1.97 +         case 's':
    1.98 +            opt.select = 1;
    1.99 +            break;
   1.100 ++        case 'u':
   1.101 ++           opt.focused = 1;
   1.102 ++           break;
   1.103 +         case '+':
   1.104 +            opt.debug_level = atoi(optarg);
   1.105 +            break;
   1.106 +@@ -231,6 +236,7 @@
   1.107 +            "                            and join them together.\n"
   1.108 +            "  -s, --select              interactively choose a window or rectangle\n"
   1.109 +            "                            with the mouse\n"
   1.110 ++           "  -u, --focused             use the currently focused window\n"
   1.111 +            "  -t, --thumb NUM           generate thumbnail too. NUM is the percentage\n"
   1.112 +            "                            of the original size for the thumbnail to be,\n"
   1.113 +            "                            or the geometry in percent, e.g. 50x60 or 80x20.\n"
   1.114 +--- scrot-0.8-orig/src/scrot.h
   1.115 ++++ scrot-0.8/src/scrot.h
   1.116 +@@ -72,7 +72,10 @@
   1.117 +                     char *filename_im, char *filename_thumb);
   1.118 + void scrot_do_delay(void);
   1.119 + Imlib_Image scrot_sel_and_grab_image(void);
   1.120 ++Imlib_Image scrot_grab_focused(void);
   1.121 + void scrot_sel_area(int *x, int *y, int *w, int *h);
   1.122 ++void scrot_nice_clip(int *rx, int *ry, int *rw, int *rh);
   1.123 ++int scrot_get_geometry(Window target, int *rx, int *ry, int *rw, int *rh);
   1.124 + Window scrot_get_window(Display *display,Window window,int x,int y);
   1.125 + Window scrot_get_client_window(Display * display, Window target);
   1.126 + Window scrot_find_window_by_property(Display * display, const Window window,
   1.127 +--- scrot-0.8-orig/src/main.c
   1.128 ++++ scrot-0.8/src/main.c
   1.129 +@@ -48,7 +48,9 @@
   1.130 +   }
   1.131 + 
   1.132 + 
   1.133 +-  if (opt.select)
   1.134 ++  if (opt.focused)
   1.135 ++    image = scrot_grab_focused();
   1.136 ++  else if (opt.select)
   1.137 +     image = scrot_sel_and_grab_image();
   1.138 +   else {
   1.139 +     scrot_do_delay();
   1.140 +@@ -171,6 +173,22 @@
   1.141 + }
   1.142 + 
   1.143 + Imlib_Image
   1.144 ++scrot_grab_focused(void)
   1.145 ++{
   1.146 ++  Imlib_Image im = NULL;
   1.147 ++  int rx = 0, ry = 0, rw = 0, rh = 0;
   1.148 ++  Window target = None;
   1.149 ++  int ignored;
   1.150 ++
   1.151 ++  scrot_do_delay();
   1.152 ++  XGetInputFocus(disp, &target, &ignored);
   1.153 ++  if (!scrot_get_geometry(target, &rx, &ry, &rw, &rh)) return NULL;
   1.154 ++  scrot_nice_clip(&rx, &ry, &rw, &rh);
   1.155 ++  im = gib_imlib_create_image_from_drawable(root, 0, rx, ry, rw, rh, 1);
   1.156 ++  return im;
   1.157 ++}
   1.158 ++
   1.159 ++Imlib_Image
   1.160 + scrot_sel_and_grab_image(void)
   1.161 + {
   1.162 +   Imlib_Image im = NULL;
   1.163 +@@ -313,57 +331,10 @@
   1.164 +         rh = 0 - rh;
   1.165 +       }
   1.166 +     } else {
   1.167 +-      Window child;
   1.168 +-      XWindowAttributes attr;
   1.169 +-      int stat;
   1.170 +-
   1.171 +       /* else it's a window click */
   1.172 +-      /* get geometry of window and use that */
   1.173 +-      /* get windowmanager frame of window */
   1.174 +-      if (target != root) {
   1.175 +-        unsigned int d, x;
   1.176 +-        int status;
   1.177 +-
   1.178 +-        status = XGetGeometry(disp, target, &root, &x, &x, &d, &d, &d, &d);
   1.179 +-        if (status != 0) {
   1.180 +-          Window rt, *children, parent;
   1.181 +-
   1.182 +-          for (;;) {
   1.183 +-            /* Find window manager frame. */
   1.184 +-            status = XQueryTree(disp, target, &rt, &parent, &children, &d);
   1.185 +-            if (status && (children != None))
   1.186 +-              XFree((char *) children);
   1.187 +-            if (!status || (parent == None) || (parent == rt))
   1.188 +-              break;
   1.189 +-            target = parent;
   1.190 +-          }
   1.191 +-          /* Get client window. */
   1.192 +-          if (!opt.border)
   1.193 +-            target = scrot_get_client_window(disp, target);
   1.194 +-          XRaiseWindow(disp, target);
   1.195 +-        }
   1.196 +-      }
   1.197 +-      stat = XGetWindowAttributes(disp, target, &attr);
   1.198 +-      if ((stat == False) || (attr.map_state != IsViewable))
   1.199 +-        return NULL;
   1.200 +-      rw = attr.width;
   1.201 +-      rh = attr.height;
   1.202 +-      XTranslateCoordinates(disp, target, root, 0, 0, &rx, &ry, &child);
   1.203 ++      if (!scrot_get_geometry(target, &rx, &ry, &rw, &rh)) return NULL;
   1.204 +     }
   1.205 +-
   1.206 +-    /* clip rectangle nicely */
   1.207 +-    if (rx < 0) {
   1.208 +-      rw += rx;
   1.209 +-      rx = 0;
   1.210 +-    }
   1.211 +-    if (ry < 0) {
   1.212 +-      rh += ry;
   1.213 +-      ry = 0;
   1.214 +-    }
   1.215 +-    if ((rx + rw) > scr->width)
   1.216 +-      rw = scr->width - rx;
   1.217 +-    if ((ry + rh) > scr->height)
   1.218 +-      rh = scr->height - ry;
   1.219 ++    scrot_nice_clip(&rx, &ry, &rw, &rh);
   1.220 + 
   1.221 +     XBell(disp, 0);
   1.222 +     im = gib_imlib_create_image_from_drawable(root, 0, rx, ry, rw, rh, 1);
   1.223 +@@ -371,6 +342,72 @@
   1.224 +   return im;
   1.225 + }
   1.226 + 
   1.227 ++/* clip rectangle nicely */
   1.228 ++void
   1.229 ++scrot_nice_clip(int *rx, 
   1.230 ++		int *ry, 
   1.231 ++		int *rw, 
   1.232 ++		int *rh)
   1.233 ++{
   1.234 ++  if (*rx < 0) {
   1.235 ++    *rw += *rx;
   1.236 ++    *rx = 0;
   1.237 ++  }
   1.238 ++  if (*ry < 0) {
   1.239 ++    *rh += *ry;
   1.240 ++    *ry = 0;
   1.241 ++  }
   1.242 ++  if ((*rx + *rw) > scr->width)
   1.243 ++    *rw = scr->width - *rx;
   1.244 ++  if ((*ry + *rh) > scr->height)
   1.245 ++    *rh = scr->height - *ry;
   1.246 ++}
   1.247 ++
   1.248 ++/* get geometry of window and use that */
   1.249 ++int
   1.250 ++scrot_get_geometry(Window target,
   1.251 ++		   int *rx, 
   1.252 ++		   int *ry, 
   1.253 ++		   int *rw, 
   1.254 ++		   int *rh)
   1.255 ++{
   1.256 ++  Window child;
   1.257 ++  XWindowAttributes attr;
   1.258 ++  int stat;
   1.259 ++
   1.260 ++  /* get windowmanager frame of window */
   1.261 ++  if (target != root) {
   1.262 ++    unsigned int d, x;
   1.263 ++    int status;
   1.264 ++    
   1.265 ++    status = XGetGeometry(disp, target, &root, &x, &x, &d, &d, &d, &d);
   1.266 ++    if (status != 0) {
   1.267 ++      Window rt, *children, parent;
   1.268 ++      
   1.269 ++      for (;;) {
   1.270 ++	/* Find window manager frame. */
   1.271 ++	status = XQueryTree(disp, target, &rt, &parent, &children, &d);
   1.272 ++	if (status && (children != None))
   1.273 ++	  XFree((char *) children);
   1.274 ++	if (!status || (parent == None) || (parent == rt))
   1.275 ++	  break;
   1.276 ++	target = parent;
   1.277 ++      }
   1.278 ++      /* Get client window. */
   1.279 ++      if (!opt.border)
   1.280 ++	target = scrot_get_client_window(disp, target);
   1.281 ++      XRaiseWindow(disp, target);
   1.282 ++    }
   1.283 ++  }
   1.284 ++  stat = XGetWindowAttributes(disp, target, &attr);
   1.285 ++  if ((stat == False) || (attr.map_state != IsViewable))
   1.286 ++    return 0;
   1.287 ++  *rw = attr.width;
   1.288 ++  *rh = attr.height;
   1.289 ++  XTranslateCoordinates(disp, target, root, 0, 0, rx, ry, &child);
   1.290 ++  return 1;
   1.291 ++}
   1.292 ++
   1.293 + Window
   1.294 + scrot_get_window(Display * display,
   1.295 +                  Window window,
   1.296 +
   1.297 +## 05-addfocusedmanpage.dpatch by William Vera <billy@billy.com.mx>
   1.298 +## DP: Add a new option in the man page (focused option).
   1.299 +
   1.300 +--- scrot-0.8-orig/scrot.1
   1.301 ++++ scrot-0.8/scrot.1
   1.302 +@@ -43,6 +43,9 @@
   1.303 + .B -s, --select
   1.304 + Interactively select a window or rectangle with the mouse.
   1.305 + .TP 5
   1.306 ++.B -u, --focused
   1.307 ++Use the currently focused window.
   1.308 ++.TP 5
   1.309 + .B -t, --thumb NUM
   1.310 + generate thumbnail too. NUM is the percentage of the original size for the
   1.311 + thumbnail to be.
   1.312 +
   1.313 +## 06_manpagespace.dpatch by William Vera <billy@billy.com.mx>
   1.314 +## DP: Improve spacing in manual page.
   1.315 +
   1.316 +--- scrot-0.8-orig/scrot.1
   1.317 ++++ scrot-0.8/scrot.1
   1.318 +@@ -58,7 +58,7 @@
   1.319 + These options may be used to refer to the current date and time.
   1.320 + The second kind are internal to scrot and are prefixed by '$'
   1.321 + The following specifiers are recognised:
   1.322 +-.br
   1.323 ++.PP
   1.324 + .B $f
   1.325 + image path/filename (ignored when used in the filename)
   1.326 + .br
   1.327 +
   1.328 +## 07_fix-formatstring.dpatch by George Danchev <danchev@spnet.net>
   1.329 +## DP: Prevent arbitrary long file names
   1.330 +
   1.331 +--- scrot-0.8-orig/src/options.c
   1.332 ++++ scrot-0.8/src/options.c
   1.333 +@@ -124,6 +124,12 @@
   1.334 +          if (!opt.output_file)
   1.335 +          {
   1.336 +             opt.output_file = argv[optind++];
   1.337 ++
   1.338 ++            if ( strlen(opt.output_file) > 256 ) {
   1.339 ++               printf("output filename too long.\n");
   1.340 ++               exit(EXIT_FAILURE);
   1.341 ++            }
   1.342 ++
   1.343 +             if (opt.thumb)
   1.344 +                opt.thumb_file = name_thumbnail(opt.output_file);
   1.345 +          }
   1.346 +
   1.347 +## fix-beeping.dpatch by Ibragimov Rinat <ibragimovrinat@mail.ru>
   1.348 +## DP: Fix missing option for beep prevention.
   1.349 +
   1.350 +--- scrot-0.8-orig/scrot.1
   1.351 ++++ scrot-0.8/scrot.1
   1.352 +@@ -49,6 +49,9 @@
   1.353 + .B -t, --thumb NUM
   1.354 + generate thumbnail too. NUM is the percentage of the original size for the
   1.355 + thumbnail to be.
   1.356 ++.TP 5
   1.357 ++.B -z, --silent
   1.358 ++prevent beeping.
   1.359 + .SH SPECIAL STRINGS
   1.360 + Both the
   1.361 + .B --exec
   1.362 +--- scrot-0.8-orig/src/main.c
   1.363 ++++ scrot-0.8/src/main.c
   1.364 +@@ -154,7 +154,7 @@
   1.365 + {
   1.366 +   Imlib_Image im;
   1.367 + 
   1.368 +-  XBell(disp, 0);
   1.369 ++  if (! opt.silent) XBell(disp, 0);
   1.370 +   im =
   1.371 +     gib_imlib_create_image_from_drawable(root, 0, 0, 0, scr->width,
   1.372 +                                          scr->height, 1);
   1.373 +@@ -336,7 +336,7 @@
   1.374 +     }
   1.375 +     scrot_nice_clip(&rx, &ry, &rw, &rh);
   1.376 + 
   1.377 +-    XBell(disp, 0);
   1.378 ++    if (! opt.silent) XBell(disp, 0);
   1.379 +     im = gib_imlib_create_image_from_drawable(root, 0, rx, ry, rw, rh, 1);
   1.380 +   }
   1.381 +   return im;
   1.382 +--- scrot-0.8-orig/src/options.c
   1.383 ++++ scrot-0.8/src/options.c
   1.384 +@@ -44,7 +44,7 @@
   1.385 + static void
   1.386 + scrot_parse_option_array(int argc, char **argv)
   1.387 + {
   1.388 +-   static char stropts[] = "bcd:e:hmq:st:uv+:";
   1.389 ++   static char stropts[] = "bcd:e:hmq:st:uv+:z";
   1.390 +    static struct option lopts[] = {
   1.391 +       /* actions */
   1.392 +       {"help", 0, 0, 'h'},                  /* okay */
   1.393 +@@ -55,6 +55,7 @@
   1.394 +       {"focussed", 0, 0, 'u'},	/* macquarie dictionary has both spellings */
   1.395 +       {"border", 0, 0, 'b'},
   1.396 +       {"multidisp", 0, 0, 'm'},
   1.397 ++	  {"silent", 0, 0, 'z'},
   1.398 +       /* toggles */
   1.399 +       {"thumb", 1, 0, 't'},
   1.400 +       {"delay", 1, 0, 'd'},
   1.401 +@@ -109,6 +110,9 @@
   1.402 +         case 't':
   1.403 +            options_parse_thumbnail(optarg);
   1.404 +            break;
   1.405 ++        case 'z':
   1.406 ++           opt.silent = 1;
   1.407 ++           break;
   1.408 +         default:
   1.409 +            break;
   1.410 +       }
   1.411 +@@ -246,6 +250,7 @@
   1.412 +            "  -t, --thumb NUM           generate thumbnail too. NUM is the percentage\n"
   1.413 +            "                            of the original size for the thumbnail to be,\n"
   1.414 +            "                            or the geometry in percent, e.g. 50x60 or 80x20.\n"
   1.415 ++           "  -z, --silent              Prevent beeping\n"		   
   1.416 +            "\n" "  SPECIAL STRINGS\n"
   1.417 +            "  Both the --exec and filename parameters can take format specifiers\n"
   1.418 +            "  that are expanded by " PACKAGE " when encountered.\n"
   1.419 +--- scrot-0.8-orig/src/options.h
   1.420 ++++ scrot-0.8/src/options.h
   1.421 +@@ -35,6 +35,7 @@
   1.422 +    int focused;
   1.423 +    int quality;
   1.424 +    int border;
   1.425 ++   int silent;   
   1.426 +    int multidisp;
   1.427 +    int thumb;
   1.428 +    int thumb_width;
   1.429 +
   1.430 +## 09_fix-minusign.dpatch by William Vera <billy@billy.com.mx>
   1.431 +## DP: Fix a hyphen-used-as-minus-sign in a manpage.
   1.432 +
   1.433 +--- scrot-0.8-orig/scrot.1
   1.434 ++++ scrot-0.8/scrot.1
   1.435 +@@ -93,7 +93,7 @@
   1.436 + \\n prints a newline (ignored when used in the filename)
   1.437 + .fi
   1.438 + .SH EXAMPLE
   1.439 +-scrot '%Y-%m-%d_$wx$h.png' -e 'mv $f ~/shots/'
   1.440 ++scrot '%Y-%m-%d_$wx$h.png' \-e 'mv $f ~/shots/'
   1.441 + .br
   1.442 + This would create a file called something like
   1.443 + 2000-10-30_2560x1024.png and move it to your shots directory.