Sophie

Sophie

distrib > Mandriva > current > i586 > media > contrib-release-src > by-pkgid > 99cdded80b546df978a72ec9b7009237 > files > 4

xpaint-2.8.19-3mdv2010.1.src.rpm

diff -rc xpaint-2.8.19/app-defaults/XPaint.ad.in xpaint-2.8.19.1/app-defaults/XPaint.ad.in
*** xpaint-2.8.19/app-defaults/XPaint.ad.in	2010-04-03 09:31:28.000000000 +0200
--- xpaint-2.8.19.1/app-defaults/XPaint.ad.in	2010-04-07 09:09:24.000000000 +0200
***************
*** 242,247 ****
--- 242,248 ----
  *close.label:			Close
  *apply.label:			Apply
  *hidden.label:			Hidden Files
+ *ongoing.label:                 Ongoing
  *alert.title:			Alert
  
  Canvas*fatbits.title:			XPaint / Fat Bits
***************
*** 354,360 ****
  xpaint*toolbox*canvas*open.label:			Open Image...
  xpaint*toolbox*canvas*loaded.label:			Loaded files...
  xpaint*toolbox*canvas*magnifier.label:			Magnifier...
! xpaint*toolbox*canvas*snapshot.label:		Take Snapshot...
  xpaint*toolbox*canvas*about.label:		About...
  xpaint*toolbox*canvas*quit.label:			Quit XPaint
  xpaint*toolbox*other.label:		Brush
--- 355,361 ----
  xpaint*toolbox*canvas*open.label:			Open Image...
  xpaint*toolbox*canvas*loaded.label:			Loaded files...
  xpaint*toolbox*canvas*magnifier.label:			Magnifier...
! xpaint*toolbox*canvas*screenshot.label:		Take Screenshot...
  xpaint*toolbox*canvas*about.label:		About...
  xpaint*toolbox*canvas*quit.label:			Quit XPaint
  xpaint*toolbox*other.label:		Brush
***************
*** 593,599 ****
  Canvas*menu*edit*alphaset.label:	Save as alpha channel
  Canvas*menu*edit*alphadel.label:	Delete alpha channel
  Canvas*menu*edit*alphaedit.label:	Edit alpha channel
! Canvas*menu*edit*snapshot.label:	Snapshot
  
  Canvas*menu*line.label:		Line
  Canvas*menu*line*linestyle.label:	Line Style...
--- 594,600 ----
  Canvas*menu*edit*alphaset.label:	Save as alpha channel
  Canvas*menu*edit*alphadel.label:	Delete alpha channel
  Canvas*menu*edit*alphaedit.label:	Edit alpha channel
! Canvas*menu*edit*screenshot.label:	Screenshot
  
  Canvas*menu*line.label:		Line
  Canvas*menu*line*linestyle.label:	Line Style...
***************
*** 723,729 ****
  *paintBox*popup-menu.Edit-right.alphaset.label:	Save as alpha channel
  *paintBox*popup-menu.Edit-right.alphadel.label:	Delete alpha channel
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Edit alpha channel
! *paintBox*popup-menu.Edit-right*snapshot.label:		Snapshot
  
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Line
--- 724,730 ----
  *paintBox*popup-menu.Edit-right.alphaset.label:	Save as alpha channel
  *paintBox*popup-menu.Edit-right.alphadel.label:	Delete alpha channel
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Edit alpha channel
! *paintBox*popup-menu.Edit-right*screenshot.label:	Screenshot
  
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Line
diff -rc xpaint-2.8.19/app-defaults/XPaint_es.ad.in xpaint-2.8.19.1/app-defaults/XPaint_es.ad.in
*** xpaint-2.8.19/app-defaults/XPaint_es.ad.in	2010-04-03 09:35:36.000000000 +0200
--- xpaint-2.8.19.1/app-defaults/XPaint_es.ad.in	2010-04-07 09:10:58.000000000 +0200
***************
*** 243,248 ****
--- 243,249 ----
  *close.label:			Cerrar
  *apply.label:			Aplicar
  *hidden.label:			Archivos Escondidos
+ *ongoing.label:                 Continuo
  *alert.title:			Atención
  
  Canvas*fatbits.title:			XPaint / Editor de Detalles
***************
*** 356,362 ****
  xpaint*toolbox*canvas*open.label:			Abrir Imagen...
  xpaint*toolbox*canvas*loaded.label:			Archivos Cargados...
  xpaint*toolbox*canvas*magnifier.label:			Lupa...
! xpaint*toolbox*canvas*snapshot.label:		Captura de Pantalla...
  xpaint*toolbox*canvas*about.label:		Respecto a...
  xpaint*toolbox*canvas*quit.label:			Cerrar XPaint
  xpaint*toolbox*other.label:			Pincel
--- 357,363 ----
  xpaint*toolbox*canvas*open.label:			Abrir Imagen...
  xpaint*toolbox*canvas*loaded.label:			Archivos Cargados...
  xpaint*toolbox*canvas*magnifier.label:			Lupa...
! xpaint*toolbox*canvas*screenshot.label:		Captura de Pantalla...
  xpaint*toolbox*canvas*about.label:		Respecto a...
  xpaint*toolbox*canvas*quit.label:			Cerrar XPaint
  xpaint*toolbox*other.label:			Pincel
***************
*** 592,598 ****
  Canvas*menu*edit*alphaset.label:	Guardar como canal alpha
  Canvas*menu*edit*alphadel.label:	Suprimir canal alpha
  Canvas*menu*edit*alphaedit.label:	Editar canal alpha
! Canvas*menu*edit*snapshot.label:	Capturar...
  
  Canvas*menu*line.label:			Trazo
  Canvas*menu*line*linestyle.label:	Tipos de Líneas...
--- 593,599 ----
  Canvas*menu*edit*alphaset.label:	Guardar como canal alpha
  Canvas*menu*edit*alphadel.label:	Suprimir canal alpha
  Canvas*menu*edit*alphaedit.label:	Editar canal alpha
! Canvas*menu*edit*screenshot.label:	Capturar...
  
  Canvas*menu*line.label:			Trazo
  Canvas*menu*line*linestyle.label:	Tipos de Líneas...
***************
*** 718,724 ****
  *paintBox*popup-menu.Edit-right.alphaset.label:	Guardar como canal alpha
  *paintBox*popup-menu.Edit-right.alphadel.label:	Suprimir canal alpha
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Editar canal alpha
! *paintBox*popup-menu.Edit-right.snapshot.label:	Capturar...
  
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Trazo
--- 719,725 ----
  *paintBox*popup-menu.Edit-right.alphaset.label:	Guardar como canal alpha
  *paintBox*popup-menu.Edit-right.alphadel.label:	Suprimir canal alpha
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Editar canal alpha
! *paintBox*popup-menu.Edit-right.screenshot.label:	Capturar...
  
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Trazo
diff -rc xpaint-2.8.19/app-defaults/XPaint_fr.ad.in xpaint-2.8.19.1/app-defaults/XPaint_fr.ad.in
*** xpaint-2.8.19/app-defaults/XPaint_fr.ad.in	2010-04-03 09:34:22.000000000 +0200
--- xpaint-2.8.19.1/app-defaults/XPaint_fr.ad.in	2010-04-07 09:09:39.000000000 +0200
***************
*** 245,250 ****
--- 245,251 ----
  *close.label:			Fermer
  *apply.label:			Appliquer
  *hidden.label:			Fichiers cachés
+ *ongoing.label:                 Continu
  *alert.title:			Attention
  
  Canvas*fatbits.title:			XPaint / Editeur de Détails
***************
*** 354,360 ****
  xpaint*toolbox*canvas*open.label:			Ouvrir Image...
  xpaint*toolbox*canvas*loaded.label:			Fichiers chargés...
  xpaint*toolbox*canvas*magnifier.label:			Loupe...
! xpaint*toolbox*canvas*snapshot.label:		Capture d'Ecran...
  xpaint*toolbox*canvas*about.label:		A Propos...
  xpaint*toolbox*canvas*quit.label:			Quitter XPaint
  xpaint*toolbox*other.label:			Pinceau
--- 355,361 ----
  xpaint*toolbox*canvas*open.label:			Ouvrir Image...
  xpaint*toolbox*canvas*loaded.label:			Fichiers chargés...
  xpaint*toolbox*canvas*magnifier.label:			Loupe...
! xpaint*toolbox*canvas*screenshot.label:		Capture d'Ecran...
  xpaint*toolbox*canvas*about.label:		A Propos...
  xpaint*toolbox*canvas*quit.label:			Quitter XPaint
  xpaint*toolbox*other.label:			Pinceau
***************
*** 589,595 ****
  Canvas*menu*edit*alphaset.label:	Copier vers canal alpha
  Canvas*menu*edit*alphadel.label:	Supprimer canal alpha
  Canvas*menu*edit*alphaedit.label:	Editer canal alpha
! Canvas*menu*edit*snapshot.label:	Capturer...
  
  Canvas*menu*line.label:			Trait
  Canvas*menu*line*linestyle.label:	Style de Ligne...
--- 590,596 ----
  Canvas*menu*edit*alphaset.label:	Copier vers canal alpha
  Canvas*menu*edit*alphadel.label:	Supprimer canal alpha
  Canvas*menu*edit*alphaedit.label:	Editer canal alpha
! Canvas*menu*edit*screenshot.label:	Capturer...
  
  Canvas*menu*line.label:			Trait
  Canvas*menu*line*linestyle.label:	Style de Ligne...
***************
*** 715,721 ****
  *paintBox*popup-menu.Edit-right.alphaset.label:	Copier vers canal alpha
  *paintBox*popup-menu.Edit-right.alphadel.label:	Supprimer canal alpha
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Editer canal alpha
! *paintBox*popup-menu.Edit-right.snapshot.label:	Capturer...
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Trait
  *paintBox*popup-menu.Line-right.label:	Trait
--- 716,722 ----
  *paintBox*popup-menu.Edit-right.alphaset.label:	Copier vers canal alpha
  *paintBox*popup-menu.Edit-right.alphadel.label:	Supprimer canal alpha
  *paintBox*popup-menu.Edit-right.alphaedit.label:	Editer canal alpha
! *paintBox*popup-menu.Edit-right.screenshot.label:	Capturer...
  ! popup Line Menu
  *paintBox*popup-menu.Line.label:	Trait
  *paintBox*popup-menu.Line-right.label:	Trait
diff -rc xpaint-2.8.19/fileBrowser.c xpaint-2.8.19.1/fileBrowser.c
*** xpaint-2.8.19/fileBrowser.c	2010-04-05 17:24:35.000000000 +0200
--- xpaint-2.8.19.1/fileBrowser.c	2010-04-07 09:08:18.000000000 +0200
***************
*** 288,294 ****
      char dirname[MAX_PATH];
      Widget shell, list, browser, parent, 
             form, title_w, name, vport, 
!            home, root, dot, hidden, cwd_w, info, ok, cancel,
             refresh, delete, edit, create,
             dpilabel, dpi, zoomlabel, zoom,
             alphalabel, alphaleft, alpha, alpharight,
--- 288,294 ----
      char dirname[MAX_PATH];
      Widget shell, list, browser, parent, 
             form, title_w, name, vport, 
!            home, root, dot, hidden, ongoing, cwd_w, info, ok, cancel,
             refresh, delete, edit, create,
             dpilabel, dpi, zoomlabel, zoom,
             alphalabel, alphaleft, alpha, alpharight,
***************
*** 394,399 ****
--- 394,403 ----
          XtMoveWidget(l->root, 30, height-84);
          XtMoveWidget(l->dot, 55, height-84);
          XtMoveWidget(l->hidden, 80, height-84);
+         if (l->ongoing) {
+             XtVaGetValues(l->hidden, XtNwidth, &width1, NULL);
+             XtMoveWidget(l->ongoing, 80+width1+3, height-84);
+ 	}
          XtMoveWidget(l->cwd_w, x, height-52);
          XtMoveWidget(l->info, x, height-30);
          return;
***************
*** 682,690 ****
--- 686,699 ----
      char *cp;
      char *nm;
      int zoom = Global.default_zoom, zoom_prev = Global.default_zoom;
+     Boolean ongoing;
      static char buf[20];
      static int np = 0;
  
+     ongoing = False;
+     if (arg->ongoing)
+         XtVaGetValues(arg->ongoing, XtNstate, &ongoing, NULL);
+ 
      XtVaGetValues(arg->name, XtNstring, &str, NULL);
      if (str == NULL || *str == '\0') {
  	XawListReturnStruct *lr = XawListShowCurrent(arg->list);
***************
*** 708,714 ****
      }
      if ((cp = strrchr(file, '/')) != NULL) {
  	*cp = '\0';
! 	if (stat(file, &statbuf) >= 0 && (statbuf.st_mode & S_IFDIR) != 0) {
  	    if (arg->browserType != LOADED || arg->isToRefresh) 
                  setCWD(arg, file);
              if (arg->browserType != LOADED)
--- 717,724 ----
      }
      if ((cp = strrchr(file, '/')) != NULL) {
  	*cp = '\0';
! 	if (stat(file, &statbuf) >= 0 && (statbuf.st_mode & S_IFDIR) != 0 &&
!             !ongoing) {
  	    if (arg->browserType != LOADED || arg->isToRefresh) 
                  setCWD(arg, file);
              if (arg->browserType != LOADED)
***************
*** 721,727 ****
      arg->oldwidth = 0;
  
      if (arg->browserType == LOADED) {
!       char *dpistr, *pagestr, *zoomstr, *alphastr, *bboxstr;
          Widget paint = GetNonDirtyCanvas();
          XtVaGetValues(arg->dpi, XtNstring, &dpistr, NULL);
          XtVaGetValues(arg->page, XtNstring, &pagestr, NULL);
--- 731,737 ----
      arg->oldwidth = 0;
  
      if (arg->browserType == LOADED) {
!         char *dpistr, *pagestr, *zoomstr, *alphastr, *bboxstr;
          Widget paint = GetNonDirtyCanvas();
          XtVaGetValues(arg->dpi, XtNstring, &dpistr, NULL);
          XtVaGetValues(arg->page, XtNstring, &pagestr, NULL);
***************
*** 751,758 ****
              return;
  	} else
              XtVaSetValues(arg->zoom, XtNstring, ZoomToStr(zoom), NULL);
!     } else
! 	XtPopdown(GetShell(w));
  
      if (arg->isSimple) {
          if (arg->okFunc != NULL)
--- 761,781 ----
              return;
  	} else
              XtVaSetValues(arg->zoom, XtNstring, ZoomToStr(zoom), NULL);
!     } else {
! 	if (ongoing) {
!             Widget paint = GetNonDirtyCanvas();
!             int oldzoom = Global.default_zoom;
!             if (paint) {
! 	        XtVaGetValues(paint, XtNzoom, &zoom, NULL);
!                 Global.default_zoom = zoom;
! 	        loadPrescribedFile(paint, file);
!                 setZoomButtonLabel(paint, zoom);
!                 Global.default_zoom = oldzoom;
!                 return;
! 	    }
!         } else
!             XtPopdown(GetShell(w));
!     }
  
      if (arg->isSimple) {
          if (arg->okFunc != NULL)
***************
*** 1180,1185 ****
--- 1203,1219 ----
                                    XtNvertDistance, 0,
                                    XtNheight, 20,
  				  NULL);
+         if (arg->browserType)
+ 	    arg->ongoing = None;
+         else
+             arg->ongoing = XtVaCreateManagedWidget("ongoing",
+ 				  toggleWidgetClass, form,
+                                   XtNfromVert, vport,
+                                   XtNfromHoriz, arg->hidden,
+                                   XtNhorizDistance, 4,
+                                   XtNvertDistance, 0,
+                                   XtNheight, 20,
+ 				  NULL);
      }
  
      cwd = XtVaCreateManagedWidget("cwd",
diff -rc xpaint-2.8.19/Filelist xpaint-2.8.19.1/Filelist
*** xpaint-2.8.19/Filelist	2010-03-12 08:28:13.000000000 +0100
--- xpaint-2.8.19.1/Filelist	2010-04-07 07:41:44.000000000 +0200
***************
*** 36,42 ****
  ./protocol.c
  ./readRC.c
  ./size.c
! ./snapshot.c
  ./text.c
  ./texture.c
  ./typeConvert.c
--- 36,42 ----
  ./protocol.c
  ./readRC.c
  ./size.c
! ./screenshot.c
  ./text.c
  ./texture.c
  ./typeConvert.c
diff -rc xpaint-2.8.19/graphic.c xpaint-2.8.19.1/graphic.c
*** xpaint-2.8.19/graphic.c	2010-04-05 16:45:18.000000000 +0200
--- xpaint-2.8.19.1/graphic.c	2010-04-07 08:44:36.000000000 +0200
***************
*** 291,297 ****
      MI_SIMPLE("alphaedit"),
      MI_SEPARATOR(),     /* 23 */
  #define EDIT_SNAPSHOT	24
!     MI_SIMPLE("snapshot"),
  };
  
  static PaintMenuItem lineMenu[] =
--- 291,297 ----
      MI_SIMPLE("alphaedit"),
      MI_SEPARATOR(),     /* 23 */
  #define EDIT_SNAPSHOT	24
!     MI_SIMPLE("screenshot"),
  };
  
  static PaintMenuItem lineMenu[] =
***************
*** 583,589 ****
      MI_SIMPLE("alphaedit"),
      MI_SEPARATOR(),  /* 24 */
  #define P_EDIT_SNAPSHOT	25
!     MI_SIMPLE("snapshot"),
  };
  
  static PaintMenuItem popupLineMenu[] =
--- 583,589 ----
      MI_SIMPLE("alphaedit"),
      MI_SEPARATOR(),  /* 24 */
  #define P_EDIT_SNAPSHOT	25
!     MI_SIMPLE("screenshot"),
  };
  
  static PaintMenuItem popupLineMenu[] =
***************
*** 5259,5265 ****
      ADDCALLBACK(editMenu, EDIT_ERASE_ALL, paint, StdEraseAllCallback);
      ADDCALLBACK(editMenu, EDIT_CLONE_CANVAS, paint, StdCloneCanvasCallback);
      ADDCALLBACK(editMenu, EDIT_CLONE_CANVAS1, paint, StdCloneCanvasCallback);
!     ADDCALLBACK(editMenu, EDIT_SNAPSHOT, info, StdSnapshotCallback);
      ADDCALLBACK(editMenu, EDIT_ALPHASET, paint, setAlpha);
      ADDCALLBACK(editMenu, EDIT_ALPHADEL, paint, deleteAlpha);
      ADDCALLBACK(editMenu, EDIT_ALPHAEDIT, paint, editAlpha);
--- 5259,5265 ----
      ADDCALLBACK(editMenu, EDIT_ERASE_ALL, paint, StdEraseAllCallback);
      ADDCALLBACK(editMenu, EDIT_CLONE_CANVAS, paint, StdCloneCanvasCallback);
      ADDCALLBACK(editMenu, EDIT_CLONE_CANVAS1, paint, StdCloneCanvasCallback);
!     ADDCALLBACK(editMenu, EDIT_SNAPSHOT, info, StdScreenshotCallback);
      ADDCALLBACK(editMenu, EDIT_ALPHASET, paint, setAlpha);
      ADDCALLBACK(editMenu, EDIT_ALPHADEL, paint, deleteAlpha);
      ADDCALLBACK(editMenu, EDIT_ALPHAEDIT, paint, editAlpha);
***************
*** 5568,5573 ****
--- 5568,5574 ----
  	    strcpy(cp, file);
  	    paint->paint.filename = cp;
  	    EnableRevert((Widget) paint);
+             XtVaSetValues((Widget)paint, XtNdirty, False, NULL);
              if (file_isSpecialImage) {
                  GetFileName(Global.toplevel, 4, NULL, NULL, NULL);
                  SetEditable((Widget)paint,
***************
*** 6187,6193 ****
  }
  
  void 
! StdSnapshotCallback(Widget w, XtPointer paintArg, XtPointer junk)
  {
       LocalInfo * info = (LocalInfo *) paintArg; 
       Widget paint;
--- 6188,6194 ----
  }
  
  void 
! StdScreenshotCallback(Widget w, XtPointer paintArg, XtPointer junk)
  {
       LocalInfo * info = (LocalInfo *) paintArg; 
       Widget paint;
***************
*** 6201,6207 ****
       Pixel pixel;
  #endif
  
!      /* Disable snapshot from FatBits !! */
       if (!info) return;
  
       paint = info->paint;
--- 6202,6208 ----
       Pixel pixel;
  #endif
  
!      /* Disable screenshot from FatBits !! */
       if (!info) return;
  
       paint = info->paint;
***************
*** 6258,6265 ****
       selection = selectionOwner;
       selectionOwner = True;
  
!      /* Now, really start snapshot ! */
!      SnapshotImage(paint, pw, 1);
       selectionOwner = selection;
  }
  
--- 6259,6266 ----
       selection = selectionOwner;
       selectionOwner = True;
  
!      /* Now, really start screenshot ! */
!      ScreenshotImage(paint, pw, 1);
       selectionOwner = selection;
  }
  
***************
*** 7201,7207 ****
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHASET, paint, setAlpha);
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHADEL, paint, deleteAlpha);
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHAEDIT, paint, editAlpha);
!     ADDCALLBACK(popupEditMenu, P_EDIT_SNAPSHOT, info, StdSnapshotCallback);
     
      ADDCALLBACK(popupTextMenu, P_FONT_SELECT, info, StdFontSet);
      ADDCALLBACK(popupTextMenu, P_FONT_WRITE, info, StdWriteText);
--- 7202,7208 ----
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHASET, paint, setAlpha);
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHADEL, paint, deleteAlpha);
      ADDCALLBACK(popupEditMenu, P_EDIT_ALPHAEDIT, paint, editAlpha);
!     ADDCALLBACK(popupEditMenu, P_EDIT_SNAPSHOT, info, StdScreenshotCallback);
     
      ADDCALLBACK(popupTextMenu, P_FONT_SELECT, info, StdFontSet);
      ADDCALLBACK(popupTextMenu, P_FONT_WRITE, info, StdWriteText);
diff -rc xpaint-2.8.19/Imakefile xpaint-2.8.19.1/Imakefile
*** xpaint-2.8.19/Imakefile	2010-03-13 08:46:00.000000000 +0100
--- xpaint-2.8.19.1/Imakefile	2010-04-07 07:37:45.000000000 +0200
***************
*** 30,42 ****
  	fileBrowser.c fontSelect.c grab.c graphic.c hash.c help.c \
  	image.c imageComp.c iprocess.c magnifier.c main.c menu.c misc.c \
  	operation.c palette.c pattern.c print.c protocol.c readRC.c \
! 	snapshot.c text.c texture.c typeConvert.c 
  
  XPOBJ = chroma.o color.o colorEdit.o dialog.o fatBitsEdit.o \
  	fileBrowser.o fontSelect.o grab.o graphic.o hash.o help.o \
  	image.o imageComp.o iprocess.o magnifier.o main.o menu.o misc.o \
  	operation.o palette.o pattern.o print.o protocol.o readRC.o \
! 	snapshot.o text.o texture.o typeConvert.o
  
  OPSRC = arcOp.c freehandOp.c boxOp.c brushOp.c circleOp.c fillOp.c \
  	fontOp.c lineOp.c pencilOp.c polygonOp.c splineOp.c selectOp.c \
--- 30,42 ----
  	fileBrowser.c fontSelect.c grab.c graphic.c hash.c help.c \
  	image.c imageComp.c iprocess.c magnifier.c main.c menu.c misc.c \
  	operation.c palette.c pattern.c print.c protocol.c readRC.c \
! 	screenshot.c text.c texture.c typeConvert.c 
  
  XPOBJ = chroma.o color.o colorEdit.o dialog.o fatBitsEdit.o \
  	fileBrowser.o fontSelect.o grab.o graphic.o hash.o help.o \
  	image.o imageComp.o iprocess.o magnifier.o main.o menu.o misc.o \
  	operation.o palette.o pattern.o print.o protocol.o readRC.o \
! 	screenshot.o text.o texture.o typeConvert.o
  
  OPSRC = arcOp.c freehandOp.c boxOp.c brushOp.c circleOp.c fillOp.c \
  	fontOp.c lineOp.c pencilOp.c polygonOp.c splineOp.c selectOp.c \
***************
*** 297,303 ****
  	$(XBMDIR)/wait3.xbm $(XBMDIR)/wait4.xbm
  readRC.o: image.h rc.h misc.h DefaultRC.txt.h
  size.o: Paint.h messages.h misc.h text.h
! snapshot.o: Paint.h image.h messages.h
  text.o: misc.h protocol.h text.h
  typeConvert.o: palette.h misc.h
  fontOp.o: xpaint.h Paint.h graphic.h misc.h ops.h
--- 297,303 ----
  	$(XBMDIR)/wait3.xbm $(XBMDIR)/wait4.xbm
  readRC.o: image.h rc.h misc.h DefaultRC.txt.h
  size.o: Paint.h messages.h misc.h text.h
! screenshot.o: Paint.h image.h messages.h
  text.o: misc.h protocol.h text.h
  typeConvert.o: palette.h misc.h
  fontOp.o: xpaint.h Paint.h graphic.h misc.h ops.h
diff -rc xpaint-2.8.19/main.c xpaint-2.8.19.1/main.c
*** xpaint-2.8.19/main.c	2010-04-05 15:39:44.000000000 +0200
--- xpaint-2.8.19.1/main.c	2010-04-07 07:38:41.000000000 +0200
***************
*** 105,111 ****
      Boolean fullmenu;
      Boolean menubar;
      Boolean canvas;
!     Boolean snapshot;
      Boolean magnifier;
      Boolean horizontal;
      Boolean nowarn;
--- 105,111 ----
      Boolean fullmenu;
      Boolean menubar;
      Boolean canvas;
!     Boolean screenshot;
      Boolean magnifier;
      Boolean horizontal;
      Boolean nowarn;
***************
*** 164,171 ****
       XtOffset(AppInfo *, menubar), XtRImmediate, (XtPointer) True},
      {"canvas", "Canvas", XtRBoolean, sizeof(Boolean),
       XtOffset(AppInfo *, canvas), XtRImmediate, (XtPointer) False},
!     {"snapshot", "Snapshot", XtRBoolean, sizeof(Boolean),
!      XtOffset(AppInfo *, snapshot), XtRImmediate, (XtPointer) False},
      {"magnifier", "Magnifier", XtRBoolean, sizeof(Boolean),
       XtOffset(AppInfo *, magnifier), XtRImmediate, (XtPointer) False},
      {"horizontal", "Horizontal", XtRBoolean, sizeof(Boolean),
--- 164,171 ----
       XtOffset(AppInfo *, menubar), XtRImmediate, (XtPointer) True},
      {"canvas", "Canvas", XtRBoolean, sizeof(Boolean),
       XtOffset(AppInfo *, canvas), XtRImmediate, (XtPointer) False},
!     {"screenshot", "Screenshot", XtRBoolean, sizeof(Boolean),
!      XtOffset(AppInfo *, screenshot), XtRImmediate, (XtPointer) False},
      {"magnifier", "Magnifier", XtRBoolean, sizeof(Boolean),
       XtOffset(AppInfo *, magnifier), XtRImmediate, (XtPointer) False},
      {"horizontal", "Horizontal", XtRBoolean, sizeof(Boolean),
***************
*** 203,209 ****
      {"-menubar", ".menubar", XrmoptionNoArg, (XtPointer) "True"},
      {"-nomenubar", ".menubar", XrmoptionNoArg, (XtPointer) "False"},
      {"-canvas", ".canvas", XrmoptionNoArg, (XtPointer) "True"},
!     {"-snapshot", ".snapshot", XrmoptionNoArg, (XtPointer) "True"},
      {"-magnifier", ".magnifier", XrmoptionNoArg, (XtPointer) "True"},
      {"-horizontal", ".horizontal", XrmoptionNoArg, (XtPointer) "True"},
      {"-nowarn", ".nowarn", XrmoptionNoArg, (XtPointer) "True"},
--- 203,209 ----
      {"-menubar", ".menubar", XrmoptionNoArg, (XtPointer) "True"},
      {"-nomenubar", ".menubar", XrmoptionNoArg, (XtPointer) "False"},
      {"-canvas", ".canvas", XrmoptionNoArg, (XtPointer) "True"},
!     {"-screenshot", ".screenshot", XrmoptionNoArg, (XtPointer) "True"},
      {"-magnifier", ".magnifier", XrmoptionNoArg, (XtPointer) "True"},
      {"-horizontal", ".horizontal", XrmoptionNoArg, (XtPointer) "True"},
      {"-nowarn", ".nowarn", XrmoptionNoArg, (XtPointer) "True"},
***************
*** 924,930 ****
      /*
      **  GRR 960525:  check depth and warn user (use AlertBox() instead?)
       */
!     if (!appInfo.nowarn && !appInfo.snapshot) {
  	int depth = Global.vis.depth;
  
  	/* XtVaGetValues(toplevel, XtNdepth, &depth, NULL); */
--- 924,930 ----
      /*
      **  GRR 960525:  check depth and warn user (use AlertBox() instead?)
       */
!     if (!appInfo.nowarn && !appInfo.screenshot) {
  	int depth = Global.vis.depth;
  
  	/* XtVaGetValues(toplevel, XtNdepth, &depth, NULL); */
***************
*** 1004,1011 ****
                     &Global.default_width, &Global.default_height);
      Global.default_zoom = GetInitZoom();
  
!     if (appInfo.snapshot) {
!         SnapshotImage(toplevel, NULL, 0);
      }
  
      if (appInfo.magnifier) {
--- 1004,1011 ----
                     &Global.default_width, &Global.default_height);
      Global.default_zoom = GetInitZoom();
  
!     if (appInfo.screenshot) {
!         ScreenshotImage(toplevel, NULL, 0);
      }
  
      if (appInfo.magnifier) {
diff -rc xpaint-2.8.19/misc.h xpaint-2.8.19.1/misc.h
*** xpaint-2.8.19/misc.h	2010-04-05 16:42:12.000000000 +0200
--- xpaint-2.8.19.1/misc.h	2010-04-07 07:42:56.000000000 +0200
***************
*** 212,224 ****
  extern void InitTypeConverters(void);
  
  /* operation.c */
! extern void takeSnapshot(Widget w, XtPointer junk, XtPointer junk2);
  extern void exitPaint(Widget w, XtPointer junk, XtPointer junk2);
  extern void setToolIconOnWidget(Widget w);
  extern void OperationSet(String names[], int num);
  
  /* snapshot.c */
! extern void SnapshotImage(Widget w, XtPointer paintArg, int flag);
  
  
  /* brushOp.c */
--- 212,224 ----
  extern void InitTypeConverters(void);
  
  /* operation.c */
! extern void takeScreenshot(Widget w, XtPointer junk, XtPointer junk2);
  extern void exitPaint(Widget w, XtPointer junk, XtPointer junk2);
  extern void setToolIconOnWidget(Widget w);
  extern void OperationSet(String names[], int num);
  
  /* snapshot.c */
! extern void ScreenshotImage(Widget w, XtPointer paintArg, int flag);
  
  
  /* brushOp.c */
diff -rc xpaint-2.8.19/operation.c xpaint-2.8.19.1/operation.c
*** xpaint-2.8.19/operation.c	2010-03-11 14:31:38.000000000 +0100
--- xpaint-2.8.19.1/operation.c	2010-04-07 07:44:03.000000000 +0200
***************
*** 588,594 ****
  **
   */
  void 
! takeSnapshot(Widget w, XtPointer junk, XtPointer junk2)
  {
      if (XtParent(w)) w = GetToplevel(XtParent(w));
      if (w) {
--- 588,594 ----
  **
   */
  void 
! takeScreenshot(Widget w, XtPointer junk, XtPointer junk2)
  {
      if (XtParent(w)) w = GetToplevel(XtParent(w));
      if (w) {
***************
*** 596,602 ****
         XUnmapWindow(XtDisplay(Global.toplevel), XtWindow(Global.toplevel));
         XFlush(XtDisplay(Global.toplevel));
         usleep(200000);
!        SnapshotImage(w, junk, 0);
         XMapWindow(XtDisplay(Global.toplevel), XtWindow(Global.toplevel));
      }
  }
--- 596,602 ----
         XUnmapWindow(XtDisplay(Global.toplevel), XtWindow(Global.toplevel));
         XFlush(XtDisplay(Global.toplevel));
         usleep(200000);
!        ScreenshotImage(w, junk, 0);
         XMapWindow(XtDisplay(Global.toplevel), XtWindow(Global.toplevel));
      }
  }
***************
*** 1321,1327 ****
      MI_SIMPLECB("open", GraphicCreate, 2),
      MI_SIMPLECB("loaded", GraphicCreate, 3),
      MI_SIMPLECB("magnifier", GraphicCreate, 4),
!     MI_SIMPLECB("snapshot", takeSnapshot, NULL),
      MI_SEPARATOR(),
      MI_SIMPLECB("quit", exitPaint, NULL),
  };
--- 1321,1327 ----
      MI_SIMPLECB("open", GraphicCreate, 2),
      MI_SIMPLECB("loaded", GraphicCreate, 3),
      MI_SIMPLECB("magnifier", GraphicCreate, 4),
!     MI_SIMPLECB("screenshot", takeScreenshot, NULL),
      MI_SEPARATOR(),
      MI_SIMPLECB("quit", exitPaint, NULL),
  };
diff -rc xpaint-2.8.19/region.h xpaint-2.8.19.1/region.h
*** xpaint-2.8.19/region.h	2010-01-31 11:13:07.000000000 +0100
--- xpaint-2.8.19.1/region.h	2010-04-07 07:43:06.000000000 +0200
***************
*** 3,9 ****
  /* cutCopyPaste.c */
  void StdCopyCallback(Widget w, XtPointer paintArg, String * nm, XEvent * event);
  void StdPasteCallback(Widget w, XtPointer paintArg, XtPointer junk);
! void StdSnapshotCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemorySetCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemoryRecallCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemoryRemoveCallback(Widget w, XtPointer paintArg, XtPointer junk);
--- 3,9 ----
  /* cutCopyPaste.c */
  void StdCopyCallback(Widget w, XtPointer paintArg, String * nm, XEvent * event);
  void StdPasteCallback(Widget w, XtPointer paintArg, XtPointer junk);
! void StdScreenshotCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemorySetCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemoryRecallCallback(Widget w, XtPointer paintArg, XtPointer junk);
  void StdMemoryRemoveCallback(Widget w, XtPointer paintArg, XtPointer junk);
***************
*** 60,66 ****
  void ccpAddCopy(Widget w, Widget paint);
  void ccpAddPaste(Widget w, Widget paint);
  void ccpAddClear(Widget w, Widget paint);
! void ccpAddSnapshot(Widget w, Widget paint);
  void ccpAddDuplicate(Widget w, Widget paint);
  void ccpAddSelectAll(Widget w, Widget paint);
  void ccpAddEraseAll(Widget w, Widget paint);
--- 60,66 ----
  void ccpAddCopy(Widget w, Widget paint);
  void ccpAddPaste(Widget w, Widget paint);
  void ccpAddClear(Widget w, Widget paint);
! void ccpAddScreenshot(Widget w, Widget paint);
  void ccpAddDuplicate(Widget w, Widget paint);
  void ccpAddSelectAll(Widget w, Widget paint);
  void ccpAddEraseAll(Widget w, Widget paint);
diff -rc xpaint-2.8.19/screenshot.c xpaint-2.8.19.1/screenshot.c
*** xpaint-2.8.19/screenshot.c	2010-04-07 09:51:56.803500287 +0200
--- xpaint-2.8.19.1/screenshot.c	2010-04-07 07:37:15.000000000 +0200
***************
*** 0 ****
--- 1,430 ----
+ /*
+  *   code taken from xsnap.c  by:
+  *
+  *   Copyright 1989 Clauss Strauch
+  *                  cbs@cad.cs.cmu.edu
+  *
+  *   Permission to use, copy, modify, and distribute this software and its
+  *   documentation for any purpose and without fee is hereby granted.
+  *   This software is provided "as is", without express or implied warranty.
+  *   
+  */
+ 
+ #include <stdio.h> 
+ #include <stdlib.h> 
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xos.h>
+ #include <X11/Xutil.h>
+ #include <X11/cursorfont.h>
+ #include <X11/Intrinsic.h>
+ #include "Paint.h"
+ #include "image.h"
+ #include "graphic.h"
+ #include "messages.h"
+ #include "misc.h"
+ #include "region.h"
+ 
+ /* extern procedures */
+ extern Image * outputImage;
+ extern char *routine;
+ 
+ /*  Leave arguments as globals, since there are so many of them.
+  *  They'll only be referenced in process_args and main.
+  */
+ static Colormap private_cmap = 0;
+ 
+ /*
+  *  createEventWindow returns the ID of a InputOnly window that covers
+  *  the given window.
+  */
+ 
+ Window createEventWindow(Display *dpy, Window win, int init_cursor)
+ {
+     XSetWindowAttributes xswa;
+     unsigned long xswvaluemask;
+     Window root_win;
+     Window event_window;
+     unsigned int win_width, win_height;
+     unsigned int  win_border_width, win_depth;
+     int win_x, win_y;
+     
+     /* get the geometry of the window  */
+     
+     XGetGeometry(dpy, win, &root_win, &win_x, &win_y,
+ 		 &win_width, &win_height, &win_border_width, &win_depth);
+     
+     /* make an input only window to get events from  */
+ 
+     xswa.cursor = init_cursor;
+     xswa.override_redirect = True;
+     xswa.event_mask = ButtonPressMask | ButtonReleaseMask | Button1MotionMask;
+     xswvaluemask = CWCursor | CWOverrideRedirect | CWEventMask;
+     event_window = XCreateWindow(dpy, win, win_x, win_y, win_width,
+ 				 win_height, 0, 0, InputOnly, CopyFromParent, 
+ 				 xswvaluemask, &xswa);
+     return(event_window);
+ }
+ 
+ /*
+  *   draw_box draws a box on the given window, with the given GC 
+  *
+  */
+ 
+ void draw_box(Display *dpy, Window win, GC gc, int x1, int y1, int x2, int y2)
+ {
+     XSegment segments[4];
+     segments[0].x1 = (short)x1;
+     segments[0].y1 = (short)y1;
+     segments[0].x2 = (short)x1;
+     segments[0].y2 = (short)y2;
+     
+     segments[1].x1 = (short)x1;
+     segments[1].y1 = (short)y1;
+     segments[1].x2 = (short)x2;
+     segments[1].y2 = (short)y1;
+     
+     segments[2].x1 = (short)x2;
+     segments[2].y1 = (short)y2;
+     segments[2].x2 = (short)x1;
+     segments[2].y2 = (short)y2;
+ 
+     segments[3].x1 = (short)x2;
+     segments[3].y1 = (short)y2;
+     segments[3].x2 = (short)x2;
+     segments[3].y2 = (short)y1;
+ 
+     XDrawSegments(dpy, win, gc, segments, 4);
+ }
+ 
+ /*
+  *  get_region
+  * takes as input:
+  *    dpy
+  *    win to get region from 
+  *    pointers to x1, y1, width, height
+  *  
+  *   returns:  the position and width and height of a
+  *             user selected region via the given pointers.
+  *
+  */
+ 
+ void
+ find_window(Display *dpy, int flag, int x, int y,
+ 	   int *u, int *v, int *width, int *height)
+ {
+     XWindowAttributes wa;
+     Window findW = DefaultRootWindow(dpy), stopW = 0, childW, initW;
+ 
+     XTranslateCoordinates(dpy, findW, findW, x, y, &x, &y, &stopW);
+ 
+     if (stopW) 
+         initW = stopW;
+     else
+         initW = findW;
+ 
+     while (stopW) {
+         XTranslateCoordinates(dpy, findW, stopW, x, y, &x, &y, &childW);
+ 	findW = stopW;
+ 	if (childW &&
+ 	    XGetWindowAttributes(dpy, childW, &wa) &&
+ 	    (wa.class != InputOutput))
+ 	    break;
+ 	stopW = childW;
+     }
+ 
+     if (!flag)
+       findW = initW;
+ 
+     XGetWindowAttributes(dpy, findW, &wa);
+     *width = wa.width;
+     *height = wa.height;
+     private_cmap = wa.colormap;
+ 
+     XTranslateCoordinates(dpy, findW, DefaultRootWindow(dpy),
+ 			  0, 0, u, v, &stopW);
+ }
+ 
+ void get_region(Display *dpy, Window win,
+ 	       int *x, int *y, unsigned *width, unsigned *height)
+ {
+     Window event_window;
+     Cursor up_right_curs, up_left_curs;
+     Cursor low_right_curs, low_left_curs;
+     Cursor current_cursor = None;
+     int done;
+     int init_x=0, init_y=0;
+     int last_x, last_y;
+     XEvent event;
+     GC xor_gc;
+     XGCValues xor_gc_values;             /* for creating xor_gc */
+     unsigned long xor_gc_valuemask;       /* valuemask for creating xor_gc */
+ 
+     /* make the GC and cursors we'll need */
+ 
+     up_right_curs = XCreateFontCursor(dpy, XC_ur_angle);
+ 
+     up_left_curs = XCreateFontCursor(dpy, XC_ul_angle);
+ 
+     low_right_curs = XCreateFontCursor(dpy, XC_lr_angle);
+ 	
+     low_left_curs = XCreateFontCursor(dpy, XC_ll_angle);
+ 	
+     xor_gc_valuemask = GCFunction | GCSubwindowMode  | GCForeground;
+     xor_gc_values.function = GXxor;
+     xor_gc_values.foreground = 0xfd;
+     xor_gc_values.subwindow_mode = IncludeInferiors;
+     xor_gc = XCreateGC(dpy, win, xor_gc_valuemask, &xor_gc_values);
+ 
+     event_window = createEventWindow(dpy, win, up_left_curs);
+     XMapRaised(dpy, event_window);
+ 
+     if (XGrabPointer(dpy, event_window, True, 
+ 		     ButtonPressMask,
+ 		     GrabModeAsync, GrabModeAsync, None, up_left_curs, 
+ 		     CurrentTime) != 0) {
+         fprintf(stderr, "%s", msgText[CANNOT_GRAB_POINTER]);
+ 	return;
+     }
+ 
+     /* get the initial button  press */
+     done = 0;
+     while (done == 0) {
+         XNextEvent(dpy, &event);
+ 	switch(event.type) {
+ 	case MappingNotify:
+ 	    XRefreshKeyboardMapping((XMappingEvent *)&event);
+ 	    break;
+ 	case ButtonPress:
+ 	    if (event.xbutton.button == 1) {
+ 	        init_x = event.xbutton.x;
+ 		init_y = event.xbutton.y;
+ 		done = 1;
+ 		break;
+ 	    }
+ 	    if (event.xbutton.button == 2) {
+ 	        init_x = event.xbutton.x;
+ 		init_y = event.xbutton.y;
+ 		done = 2;
+ 		break;
+ 	    }
+ 	    if (event.xbutton.button == 3) {
+ 	        *width = 0;
+ 		*height = 0; 
+ 		done = -1;
+ 		break;
+ 	    }
+ 	}
+     }
+ 
+     /*  now we have the location of one corner of the box.   change the cursor,
+      *  and have the user drag out the area.
+      */
+     last_x = init_x;
+     last_y = init_y;
+     if (done == 1) {
+         current_cursor = low_right_curs;
+ 	XChangeActivePointerGrab(dpy, ButtonReleaseMask | Button1MotionMask,
+ 				 current_cursor, CurrentTime);
+ 	done = 0;
+ 	draw_box(dpy, win, xor_gc, init_x, init_y, last_x, last_y);
+     }
+     while (!done) {
+         XNextEvent(dpy, &event);
+ 	switch(event.type) {
+ 	case MappingNotify:
+ 	    XRefreshKeyboardMapping((XMappingEvent *)&event);
+ 	    break;
+ 	case MotionNotify:
+ 	    draw_box(dpy, win, xor_gc, 
+ 		    init_x, init_y, last_x, last_y);  /* erase old */
+ 	    last_x = event.xmotion.x;
+ 	    last_y = event.xmotion.y;
+ 	    draw_box(dpy, win, xor_gc, 
+ 		    init_x, init_y, last_x, last_y); /* draw new  */
+ 	    /*  Change cursor to correspond to position of pointer */
+ 	    if ((init_x < last_x) && (init_y < last_y)
+ 		&& (current_cursor != low_right_curs)) {
+ 	        current_cursor = low_right_curs;
+ 		XChangeActivePointerGrab(dpy, 
+ 					 ButtonReleaseMask | Button1MotionMask,
+ 					 low_right_curs, CurrentTime);
+ 	    }
+ 	    else if ((last_x < init_x) && (last_y < init_y)
+ 		     &&  (current_cursor != up_left_curs)) {
+ 	        current_cursor = up_left_curs;
+ 		XChangeActivePointerGrab(dpy, 
+ 					 ButtonReleaseMask | Button1MotionMask,
+ 					 up_left_curs, CurrentTime);
+ 	    }
+ 	    else if ((init_x < last_x) && (last_y < init_y)
+ 		     && (current_cursor != up_right_curs)) {
+ 	        current_cursor = up_right_curs;
+ 		XChangeActivePointerGrab(dpy, 
+ 					 ButtonReleaseMask | Button1MotionMask,
+ 					 up_right_curs, CurrentTime);
+ 	    }
+ 	    else if ((last_x < init_x) && (init_y < last_y)
+ 		     && (current_cursor != low_left_curs)) {
+ 	        current_cursor = low_left_curs;
+ 		XChangeActivePointerGrab(dpy, 
+ 					 ButtonReleaseMask | Button1MotionMask,
+ 					 low_left_curs, CurrentTime);
+ 	    }
+ 	    break;
+ 	case ButtonRelease:
+ 	    if (event.xbutton.button == 1) {
+ 	        done = True;
+ 		draw_box(dpy, win, xor_gc, 
+ 			 init_x, init_y, last_x, last_y);  /* erase last box drawn */
+ 	    }
+ 	    break;
+ 	}
+     }
+     XFlush(dpy);   /*  gets rid of last box on screen  */
+     if (init_x < last_x)
+       *x = init_x;
+     else
+       *x = last_x;
+     if (init_y < last_y)
+       *y = init_y;
+     else
+       *y = last_y;
+     *width = (unsigned int)abs(last_x - init_x);
+     *height = (unsigned int)abs(last_y - init_y);
+ 
+     /* clean up after ourself: */
+ 
+     XDestroyWindow(dpy, event_window);
+     XFreeGC(dpy, xor_gc);
+ 
+     /* we'll let the caller ungrab the pointer */
+ 
+     if (done == 1) {
+       int u;
+       if (*width==0 && *height==0)
+ 	  find_window(dpy, 0, init_x, init_y, x, y, (int*) width, (int*) height);
+       else
+ 	  find_window(dpy, 0, init_x, init_y, &u, &u, &u, &u);
+     }
+ 
+     if (done == 2)
+         find_window(dpy, 1, init_x,init_y, x, y, (int*) width, (int*) height);
+ }
+ 
+ /* 
+  *  get_pixmap_region
+  *
+  *       input :
+  *               a dpy, a window, x, y, width, height, interactive.
+  *               if interactive, the user is prompted for a region,
+  *               other wise the given region is copied to a pixmap.
+  *       returns : a pixmap containing a copy of a user-specified area
+  *                 of the given window;
+  *
+  */
+ 
+ Pixmap get_pixmap_region(Display *dpy, int screen, Window win, GC gc,
+ 		         int *x, int *y,
+ 		         unsigned *width, unsigned *height, unsigned *depth)
+ {
+     int reg_x, reg_y;
+     unsigned int reg_width, reg_height;
+     Pixmap pixmap_returned;
+     int junk_left, junk_top, junk_width, junk_height, junk_border_width;
+     Window junk_root;
+ 
+     get_region(dpy, win, &reg_x, &reg_y, &reg_width, &reg_height);
+     *x = reg_x;
+     *y = reg_y;
+     *width = reg_width;
+     *height = reg_height;
+ 
+     if (*width==0 || *height==0) return None;
+ 
+     /* Use the depth of `win' for the depth of the pixmap */
+ 	  
+     XGetGeometry (dpy, win, &junk_root, &junk_left, &junk_top,
+ 		  (unsigned int*) &junk_width, (unsigned int*) &junk_height,
+ 		  (unsigned int*) &junk_border_width, depth);
+ 
+     pixmap_returned = XCreatePixmap(dpy, 
+ 				    DefaultRootWindow(dpy),
+ 				    *width, *height, *depth);
+ 
+     /*  now copy the area we specified  */
+ 
+     XCopyArea(dpy, win, pixmap_returned, gc, *x, *y, 
+ 	      *width, *height, 0, 0);
+     XUngrabPointer(dpy, CurrentTime);
+     return pixmap_returned;
+ }
+ 
+ void
+ ScreenshotImage(Widget w, XtPointer paintArg, int flag)
+ {
+     Display *dpy;
+     int screen;
+     GC copy_gc;
+     unsigned long copy_gc_valuemask;
+     XGCValues copy_gc_values;
+     Widget ww;
+     Window window_to_snap;            
+     Pixmap  snap_pixmap;
+     int reg_x, reg_y;
+     unsigned int reg_width, reg_height, reg_depth;
+     Image *image;
+ 
+     routine = "snapshot";
+     dpy = XtDisplayOfObject(w);
+     screen = DefaultScreen(dpy);
+     XSetErrorHandler(privateXErrorHandler);
+ 
+     /* start with root window for now */
+     window_to_snap = XRootWindow(dpy, screen);
+ 
+     /* make copy GC */
+ 
+     copy_gc_valuemask = GCSubwindowMode;
+     copy_gc_values.subwindow_mode = IncludeInferiors;
+     copy_gc = XCreateGC(dpy, window_to_snap, copy_gc_valuemask, &copy_gc_values);
+ 
+     XFlush(dpy);
+     XGrabServer(dpy);
+ 
+     snap_pixmap = get_pixmap_region(dpy, screen,
+ 				    window_to_snap, copy_gc,
+ 				    &reg_x, &reg_y,
+ 				    &reg_width, &reg_height,
+ 				    &reg_depth);
+ 
+     /* ungrab the server and free GC */
+     XUngrabServer(dpy);
+     XFreeGC(dpy, copy_gc);
+ 
+     if (!snap_pixmap || reg_width==0 || reg_height==0)
+         return;
+ 
+     if (paintArg) ww = (Widget)paintArg; else ww = w;
+     image = PixmapToImage(ww, snap_pixmap, private_cmap);
+     if (snap_pixmap) XFreePixmap(dpy, snap_pixmap);
+    
+     if (!image) return;
+ 
+     if (flag) {
+         ClipboardSetImage(ww, image);
+ 	StdPasteCallback(ww, paintArg, (XtPointer) NULL);
+         XtVaSetValues(ww, XtNdirty, True, NULL);
+     }
+     else {
+         Widget paint;
+         snap_pixmap = None;
+         ImageToPixmap(image, w, &snap_pixmap, &private_cmap, 0);
+ 	paint = (Widget) graphicCreate(makeGraphicShell(w), 
+ 		      reg_width, reg_height, -1, 
+ 				       snap_pixmap, private_cmap, NULL);
+         if (snap_pixmap) XFreePixmap(dpy, snap_pixmap);
+         XtVaSetValues(paint, XtNdirty, True, NULL);
+     }
+ }
diff -rc xpaint-2.8.19/share/help/Help xpaint-2.8.19.1/share/help/Help
*** xpaint-2.8.19/share/help/Help	2010-03-06 23:13:52.000000000 +0100
--- xpaint-2.8.19.1/share/help/Help	2010-04-07 07:40:23.000000000 +0200
***************
*** 48,54 ****
  image (embedded comments, time stamp, copyright, etc.) will always be lost.
  
  #BEGIN command	"2. Command Line Options"
! xpaint [-canvas] [-snapshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
--- 48,54 ----
  image (embedded comments, time stamp, copyright, etc.) will always be lost.
  
  #BEGIN command	"2. Command Line Options"
! xpaint [-canvas] [-screenshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
***************
*** 102,108 ****
  #NL
  	-canvas		pop up an empty canvas on startup
  #NL
! 	-snapshot	open xpaint without any GUI, and take snapshot
  #NL
  	-magnifier	open xpaint in magnifier glass mode
  #NL
--- 102,108 ----
  #NL
  	-canvas		pop up an empty canvas on startup
  #NL
! 	-screenshot	open xpaint without any GUI, and take screenshot
  #NL
  	-magnifier	open xpaint in magnifier glass mode
  #NL
***************
*** 183,189 ****
  #NL
  	in an error message.
  
! Take Snapshot...
  #NL
  	Grab a rectangle from the root window and load
  #NL
--- 183,189 ----
  #NL
  	in an error message.
  
! Take Screenshot...
  #NL
  	Grab a rectangle from the root window and load
  #NL
diff -rc xpaint-2.8.19/share/help/Help_es xpaint-2.8.19.1/share/help/Help_es
*** xpaint-2.8.19/share/help/Help_es	2010-03-06 23:15:31.000000000 +0100
--- xpaint-2.8.19.1/share/help/Help_es	2010-04-07 07:40:55.000000000 +0200
***************
*** 21,27 ****
  
  
  #BEGIN command "2. Opciones de la línea de comandos"
! xpaint [-canvas] [-snapshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
--- 21,27 ----
  
  
  #BEGIN command "2. Opciones de la línea de comandos"
! xpaint [-canvas] [-screenshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
***************
*** 77,83 ****
  #NL
  	-canvas		abrir un lienzo blanco al inicio
  #NL
! 	-snapshot 	abrir xpaint sin interfaz, en modo captura de pantalla
  #NL
  	-magnifier 	abrir xpaint sin interfaz, en modo lupa
  #NL
--- 77,83 ----
  #NL
  	-canvas		abrir un lienzo blanco al inicio
  #NL
! 	-screenshot 	abrir xpaint sin interfaz, en modo captura de pantalla
  #NL
  	-magnifier 	abrir xpaint sin interfaz, en modo lupa
  #NL
diff -rc xpaint-2.8.19/share/help/Help_fr xpaint-2.8.19.1/share/help/Help_fr
*** xpaint-2.8.19/share/help/Help_fr	2010-03-06 23:13:02.000000000 +0100
--- xpaint-2.8.19.1/share/help/Help_fr	2010-04-07 07:40:40.000000000 +0200
***************
*** 68,74 ****
  etc...) seront ignorés et donc perdus au moment de la sauvegarde.
  
  #BEGIN command "2. Options de la ligne de commande"
! xpaint [-canvas] [-snapshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
--- 68,74 ----
  etc...) seront ignorés et donc perdus au moment de la sauvegarde.
  
  #BEGIN command "2. Options de la ligne de commande"
! xpaint [-canvas] [-screenshot] [-magnifier] [-nowarn]
  #NL
         [-menubar] [-nomenubar] [-fullmenu] [-simplemenu]
  #NL
***************
*** 124,130 ****
  #NL
  	-canvas		ouvrir un canevas vierge au démarrage
  #NL
! 	-snapshot 	ouvrir xpaint sans interface, en mode capture d'écran
  #NL
  	-magnifier 	ouvrir xpaint en mode loupe grossissante
  #NL
--- 124,130 ----
  #NL
  	-canvas		ouvrir un canevas vierge au démarrage
  #NL
! 	-screenshot 	ouvrir xpaint sans interface, en mode capture d'écran
  #NL
  	-magnifier 	ouvrir xpaint en mode loupe grossissante
  #NL
diff -rc xpaint-2.8.19/xpaint.man xpaint-2.8.19.1/xpaint.man
*** xpaint-2.8.19/xpaint.man	2010-04-05 18:30:09.000000000 +0200
--- xpaint-2.8.19.1/xpaint.man	2010-04-07 07:43:29.000000000 +0200
***************
*** 18,24 ****
  .br
  [\ \-canvas\ ] [\ \-fullpopup\ ] [\ \-simplepopup\ ] [\ \-nomenubar\ ]
  .br
! [\ \-snapshot\ ] [\ \-nowarn\ ] [\ \-astext\ ] [
  .RI \-undosize " VALUE"
  ]
  .br
--- 18,24 ----
  .br
  [\ \-canvas\ ] [\ \-fullpopup\ ] [\ \-simplepopup\ ] [\ \-nomenubar\ ]
  .br
! [\ \-screenshot\ ] [\ \-nowarn\ ] [\ \-astext\ ] [
  .RI \-undosize " VALUE"
  ]
  .br
***************
*** 207,214 ****
  .B \-nomenubar
  Do not show menu bar on top of canvas windows.
  .TP 1i
! .B \-snapshot
! Operate xpaint in snapshot mode from start-up.
  .TP 1i
  .B \-operation " NUMBER"
  Start with operation <NUMBER> set in tool panel.
--- 207,214 ----
  .B \-nomenubar
  Do not show menu bar on top of canvas windows.
  .TP 1i
! .B \-screenshot
! Operate xpaint in screenshot mode from start-up.
  .TP 1i
  .B \-operation " NUMBER"
  Start with operation <NUMBER> set in tool panel.
diff -rc xpaint-2.8.19/xpaint.man.in xpaint-2.8.19.1/xpaint.man.in
*** xpaint-2.8.19/xpaint.man.in	2010-04-05 18:29:09.000000000 +0200
--- xpaint-2.8.19.1/xpaint.man.in	2010-04-07 07:38:06.000000000 +0200
***************
*** 18,24 ****
  .br
  [\ \-canvas\ ] [\ \-fullpopup\ ] [\ \-simplepopup\ ] [\ \-nomenubar\ ]
  .br
! [\ \-snapshot\ ] [\ \-nowarn\ ] [\ \-astext\ ] [
  .RI \-undosize " VALUE"
  ]
  .br
--- 18,24 ----
  .br
  [\ \-canvas\ ] [\ \-fullpopup\ ] [\ \-simplepopup\ ] [\ \-nomenubar\ ]
  .br
! [\ \-screenshot\ ] [\ \-nowarn\ ] [\ \-astext\ ] [
  .RI \-undosize " VALUE"
  ]
  .br
***************
*** 207,214 ****
  .B \-nomenubar
  Do not show menu bar on top of canvas windows.
  .TP 1i
! .B \-snapshot
! Operate xpaint in snapshot mode from start-up.
  .TP 1i
  .B \-operation " NUMBER"
  Start with operation <NUMBER> set in tool panel.
--- 207,214 ----
  .B \-nomenubar
  Do not show menu bar on top of canvas windows.
  .TP 1i
! .B \-screenshot
! Operate xpaint in screenshot mode from start-up.
  .TP 1i
  .B \-operation " NUMBER"
  Start with operation <NUMBER> set in tool panel.