[Xfce4-commits] r26443 - in xarchiver/trunk: . pixmaps src

Giuseppe Torelli colossus at xfce.org
Fri Dec 7 10:38:04 CET 2007


Author: colossus
Date: 2007-12-07 09:38:04 +0000 (Fri, 07 Dec 2007)
New Revision: 26443

Removed:
   xarchiver/trunk/pixmaps/xarchiver-add_button.png
   xarchiver/trunk/pixmaps/xarchiver-extract_button.png
Modified:
   xarchiver/trunk/INSTALL
   xarchiver/trunk/depcomp
   xarchiver/trunk/install-sh
   xarchiver/trunk/missing
   xarchiver/trunk/pixmaps/Makefile.am
   xarchiver/trunk/pixmaps/xarchiver-add.png
   xarchiver/trunk/pixmaps/xarchiver-extract.png
   xarchiver/trunk/src/add_dialog.c
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/interface.h
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Changed add and extract icons to the latest tango ones.
Deleted add_button.png and extract_button.png.
Show comment options now works for comment in zip archives.
Filenames in zip archives with bad characters like [ and ] are handled properly.
Adding stuff works with drag and drop.


Modified: xarchiver/trunk/INSTALL
===================================================================
--- xarchiver/trunk/INSTALL	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/INSTALL	2007-12-07 09:38:04 UTC (rev 26443)
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
-Software Foundation, Inc.
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
 
 This file is free documentation; the Free Software Foundation gives
 unlimited permission to copy, distribute and modify it.
@@ -10,7 +10,10 @@
 Basic Installation
 ==================
 
-These are generic installation instructions.
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -23,9 +26,9 @@
 
    It can also use an optional file (typically called `config.cache'
 and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
+the results of its tests to speed up reconfiguring.  Caching is
 disabled by default to prevent problems with accidental use of stale
-cache files.)
+cache files.
 
    If you need to do unusual things to compile the package, please try
 to figure out how `configure' could check whether to do them, and mail
@@ -35,20 +38,17 @@
 may remove or edit it.
 
    The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
 
 The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
+     `./configure' to configure the package for your system.
 
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
 
   2. Type `make' to compile the package.
 
@@ -78,7 +78,7 @@
 by setting variables in the command line or in the environment.  Here
 is an example:
 
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
 
    *Note Defining Variables::, for more details.
 
@@ -87,17 +87,15 @@
 
 You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
 source code in the directory that `configure' is in and in `..'.
 
-   If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory.  After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
 
 Installation Names
 ==================
@@ -190,12 +188,12 @@
      ./configure CC=/usr/local2/bin/gcc
 
 causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).  Here is a another example:
+overridden in the site shell script).
 
-     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
 
-Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
-configuration-related scripts to be executed by `/bin/bash'.
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================

Modified: xarchiver/trunk/depcomp
===================================================================
--- xarchiver/trunk/depcomp	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/depcomp	2007-12-07 09:38:04 UTC (rev 26443)
@@ -1,9 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2005-07-09.11
+scriptversion=2006-10-15.18
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
+# Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -91,7 +92,20 @@
 ## gcc 3 implements dependency tracking that does exactly what
 ## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
 ## it if -MD -MP comes after the -MF stuff.  Hmm.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
   stat=$?
   if test $stat -eq 0; then :
   else
@@ -276,6 +290,46 @@
   rm -f "$tmpdepfile"
   ;;
 
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
    # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
@@ -288,13 +342,13 @@
 
    if test "$libtool" = yes; then
       # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
+      # static library.  This mechanism is used in libtool 1.4 series to
       # handle both shared and static libraries in a single compilation.
       # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
       #
       # With libtool 1.5 this exception was removed, and libtool now
       # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
+      # compilations output dependencies in $dir.libs/$base.o.d and
       # in $dir$base.o.d.  We have to check for both files, because
       # one of the two compilations can be disabled.  We should prefer
       # $dir$base.o.d over $dir.libs/$base.o.d because the latter is

Modified: xarchiver/trunk/install-sh
===================================================================
--- xarchiver/trunk/install-sh	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/install-sh	2007-12-07 09:38:04 UTC (rev 26443)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2005-05-14.22
+scriptversion=2006-10-14.15
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -39,15 +39,24 @@
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
+# from scratch.
 
+nl='
+'
+IFS=" ""	$nl"
+
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
 doit="${DOITPROG-}"
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
-# put in absolute paths if you don't have them in your path; or use env. vars.
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
 
 mvprog="${MVPROG-mv}"
 cpprog="${CPPROG-cp}"
@@ -58,7 +67,13 @@
 rmprog="${RMPROG-rm}"
 mkdirprog="${MKDIRPROG-mkdir}"
 
-chmodcmd="$chmodprog 0755"
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
 chowncmd=
 chgrpcmd=
 stripcmd=
@@ -95,7 +110,7 @@
   CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
 "
 
-while test -n "$1"; do
+while test $# -ne 0; do
   case $1 in
     -c) shift
         continue;;
@@ -111,9 +126,15 @@
 
     --help) echo "$usage"; exit $?;;
 
-    -m) chmodcmd="$chmodprog $2"
+    -m) mode=$2
         shift
         shift
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
         continue;;
 
     -o) chowncmd="$chownprog $2"
@@ -136,25 +157,33 @@
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    *)  # When -d is used, all remaining arguments are directories to create.
-	# When -t is used, the destination is already specified.
-	test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-	for arg
-	do
-          if test -n "$dstarg"; then
-	    # $@ is not empty: it contains at least $arg.
-	    set fnord "$@" "$dstarg"
-	    shift # fnord
-	  fi
-	  shift # arg
-	  dstarg=$arg
-	done
+    --)	shift
 	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
   esac
 done
 
-if test -z "$1"; then
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dstarg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dstarg"
+      shift # fnord
+    fi
+    shift # arg
+    dstarg=$arg
+  done
+fi
+
+if test $# -eq 0; then
   if test -z "$dir_arg"; then
     echo "$0: no input file specified." >&2
     exit 1
@@ -164,6 +193,33 @@
   exit 0
 fi
 
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
 for src
 do
   # Protect names starting with `-'.
@@ -173,15 +229,11 @@
 
   if test -n "$dir_arg"; then
     dst=$src
-    src=
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
 
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
-  else
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
     # might cause directories to be created, which would be especially bad
     # if $src (and thus $dsttmp) contains '*'.
@@ -208,53 +260,188 @@
 	echo "$0: $dstarg: Is a directory" >&2
 	exit 1
       fi
-      dst=$dst/`basename "$src"`
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
     fi
   fi
 
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+  obsolete_mkdir_used=false
 
-  # Make sure that the destination directory exists.
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-	 '
-    IFS="${IFS-$defaultIFS}"
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
 
-    pathcomp=
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix=/ ;;
+	-*) prefix=./ ;;
+	*)  prefix= ;;
+      esac
+
+      case $posix_glob in
+        '')
+	  if (set -f) 2>/dev/null; then
+	    posix_glob=true
+	  else
+	    posix_glob=false
+	  fi ;;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob && set -f
+      set fnord $dstdir
       shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-	# mkdir can fail with a `File exist' error in case several
-	# install-sh are creating the directory concurrently.  This
-	# is OK.
-	test -d "$pathcomp" || exit
+      $posix_glob && set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
-      pathcomp=$pathcomp/
-    done
+    fi
   fi
 
   if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
   else
-    dstfile=`basename "$dst"`
 
     # Make a couple of temp file names in the proper directory.
     dsttmp=$dstdir/_inst.$$_
@@ -262,10 +449,9 @@
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-    trap '(exit $?); exit' 1 2 13 15
 
     # Copy the file name to the temp name.
-    $doit $cpprog "$src" "$dsttmp" &&
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -276,10 +462,10 @@
     { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
       && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
       && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
 
     # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
       || {
 	   # The rename failed, perhaps because mv can't rename something else
 	   # to itself, or perhaps because mv is so ancient that it does not
@@ -291,11 +477,12 @@
 	   # reasons.  In this case, the final cleanup might fail but the new
 	   # file should still install successfully.
 	   {
-	     if test -f "$dstdir/$dstfile"; then
-	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+	     if test -f "$dst"; then
+	       $doit $rmcmd -f "$dst" 2>/dev/null \
+	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
 	       || {
-		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		 echo "$0: cannot unlink or rename $dst" >&2
 		 (exit 1); exit 1
 	       }
 	     else
@@ -304,17 +491,14 @@
 	   } &&
 
 	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+	   $doit $mvcmd "$dsttmp" "$dst"
 	 }
-    }
-  fi || { (exit 1); exit 1; }
+    } || exit 1
+
+    trap '' 0
+  fi
 done
 
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
-
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="

Modified: xarchiver/trunk/missing
===================================================================
--- xarchiver/trunk/missing	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/missing	2007-12-07 09:38:04 UTC (rev 26443)
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2005-06-08.21
+scriptversion=2006-05-10.23
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
 #   Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
@@ -33,6 +33,8 @@
 fi
 
 run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
 
 # In the cases where this matters, `missing' is being run in the
 # srcdir already.
@@ -44,7 +46,7 @@
 
 msg="missing on your system"
 
-case "$1" in
+case $1 in
 --run)
   # Try to run requested program, and just exit if it succeeds.
   run=
@@ -77,6 +79,7 @@
   aclocal      touch file \`aclocal.m4'
   autoconf     touch file \`configure'
   autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
   automake     touch all \`Makefile.in' files
   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
   flex         create \`lex.yy.c', if possible, from existing .c
@@ -106,7 +109,7 @@
 # Now exit if we have it, but it failed.  Also exit now if we
 # don't have it and --version was passed (most likely to detect
 # the program).
-case "$1" in
+case $1 in
   lex|yacc)
     # Not GNU programs, they don't have --version.
     ;;
@@ -135,7 +138,7 @@
 
 # If it does not exist, or fails to run (possibly an outdated version),
 # try to emulate it.
-case "$1" in
+case $1 in
   aclocal*)
     echo 1>&2 "\
 WARNING: \`$1' is $msg.  You should only need it if
@@ -164,7 +167,7 @@
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
-      case "$f" in
+      case $f in
       *:*) touch_files="$touch_files "`echo "$f" |
 				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
       *) touch_files="$touch_files $f.in";;
@@ -192,8 +195,8 @@
          You can get \`$1' as part of \`Autoconf' from any GNU
          archive site."
 
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -f "$file"; then
 	touch $file
     else
@@ -214,25 +217,25 @@
          in order for those modifications to take effect.  You can get
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.c
 	    fi
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" y.tab.h
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f y.tab.h ]; then
+    if test ! -f y.tab.h; then
 	echo >y.tab.h
     fi
-    if [ ! -f y.tab.c ]; then
+    if test ! -f y.tab.c; then
 	echo 'main() { return 0; }' >y.tab.c
     fi
     ;;
@@ -244,18 +247,18 @@
          in order for those modifications to take effect.  You can get
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
+    if test $# -ne 1; then
         eval LASTARG="\${$#}"
-	case "$LASTARG" in
+	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if [ -f "$SRCFILE" ]; then
+	    if test -f "$SRCFILE"; then
 	         cp "$SRCFILE" lex.yy.c
 	    fi
 	  ;;
 	esac
     fi
-    if [ ! -f lex.yy.c ]; then
+    if test ! -f lex.yy.c; then
 	echo 'main() { return 0; }' >lex.yy.c
     fi
     ;;
@@ -267,11 +270,9 @@
 	 \`Help2man' package in order for those modifications to take
 	 effect.  You can get \`Help2man' from any GNU archive site."
 
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
 	touch $file
     else
 	test -z "$file" || exec >$file
@@ -289,11 +290,17 @@
          DU, IRIX).  You might want to install the \`Texinfo' package or
          the \`GNU make' package.  Grab either from any GNU archive site."
     # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
     if test -z "$file"; then
       # ... or it is the one specified with @setfilename ...
       infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
       # ... or it is derived from the source name (dir/f.texi becomes f.info)
       test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
     fi
@@ -317,13 +324,13 @@
     fi
     firstarg="$1"
     if shift; then
-	case "$firstarg" in
+	case $firstarg in
 	*o*)
 	    firstarg=`echo "$firstarg" | sed s/o//`
 	    tar "$firstarg" "$@" && exit 0
 	    ;;
 	esac
-	case "$firstarg" in
+	case $firstarg in
 	*h*)
 	    firstarg=`echo "$firstarg" | sed s/h//`
 	    tar "$firstarg" "$@" && exit 0

Modified: xarchiver/trunk/pixmaps/Makefile.am
===================================================================
--- xarchiver/trunk/pixmaps/Makefile.am	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/pixmaps/Makefile.am	2007-12-07 09:38:04 UTC (rev 26443)
@@ -4,8 +4,6 @@
 
 pixmaps_DATA = 	xarchiver-add.png \
 		xarchiver-extract.png \
-		xarchiver-add_button.png \
-		xarchiver-extract_button.png \
 		xarchiver-behaviour.svg
 
 EXTRA_DIST = $(pixmaps_DATA)

Modified: xarchiver/trunk/pixmaps/xarchiver-add.png
===================================================================
(Binary files differ)

Deleted: xarchiver/trunk/pixmaps/xarchiver-add_button.png

Modified: xarchiver/trunk/pixmaps/xarchiver-extract.png
===================================================================
(Binary files differ)

Deleted: xarchiver/trunk/pixmaps/xarchiver-extract_button.png

Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/add_dialog.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -319,7 +319,7 @@
 	GTK_WIDGET_SET_FLAGS (add_dialog->cancel_button, GTK_CAN_DEFAULT);
 
 	add_dialog->add_button = gtk_button_new();
-	add_dialog->add_image = xa_main_window_find_image("xarchiver-add_button.png", GTK_ICON_SIZE_SMALL_TOOLBAR);
+	add_dialog->add_image = xa_main_window_find_image("xarchiver-add.png", GTK_ICON_SIZE_SMALL_TOOLBAR);
 	add_dialog->add_hbox = gtk_hbox_new(FALSE, 4);
 	add_dialog->add_label = gtk_label_new_with_mnemonic(_("_Add"));
 
@@ -549,42 +549,42 @@
 			}
 			done = TRUE;
 			if (add_dialog->recurse != NULL)
-				archive->add_recurse = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->recurse ));
+				archive->add_recurse = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->recurse));
 
 			if (add_dialog->add_full_path != NULL)
-				archive->full_path = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->add_full_path ));
+				archive->full_path = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->add_full_path));
 
 			if (add_dialog->update != NULL)
-				archive->update = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->update ));
+				archive->update = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->update));
 
 			if (add_dialog->remove_files != NULL)
-				archive->remove_files = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->remove_files ));
+				archive->remove_files = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->remove_files));
 
 			if (add_dialog->freshen != NULL)
-				archive->freshen = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->freshen ));
+				archive->freshen = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->freshen));
 
 			if (add_dialog->solid_archive)
-				archive->solid_archive = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON ( add_dialog->solid_archive ));
+				archive->solid_archive = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (add_dialog->solid_archive));
 
 			if (add_dialog->compression_scale != NULL)
 			{
-				archive->compression_level = gtk_adjustment_get_value (GTK_ADJUSTMENT ( add_dialog->compression_value ));
-				compression_string = g_strdup_printf ( "%d",archive->compression_level );
+				archive->compression_level = gtk_adjustment_get_value (GTK_ADJUSTMENT (add_dialog->compression_value));
+				compression_string = g_strdup_printf ("%d",archive->compression_level);
 			}
 
 			//Set the current dir so to avoid archiving the leading directory inside the archive
-			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(add_dialog->file_liststore), &iter);
-			gtk_tree_model_get (GTK_TREE_MODEL(add_dialog->file_liststore), &iter, 1, &first_item, -1);
-			gchar *current_dir = g_path_get_dirname ( first_item );
-			g_free ( first_item );
-			chdir ( current_dir );
-			g_free ( current_dir );
+			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(add_dialog->file_liststore),&iter);
+			gtk_tree_model_get (GTK_TREE_MODEL(add_dialog->file_liststore),&iter,1,&first_item,-1);
+			gchar *current_dir = g_path_get_dirname (first_item);
+			g_free (first_item);
+			chdir (current_dir);
+			g_free (current_dir);
 
 			 /* Let's concatenate the files to add */
 			names = g_string_new ( " " );
 			archive->status = XA_ARCHIVESTATUS_ADD;
 
-			if ( archive->full_path == 1 && (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA) )
+			if (archive->full_path == 1 && (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA) )
 			{
 				while (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(add_dialog->file_liststore), &iter) )
 				{
@@ -601,14 +601,14 @@
 					gtk_list_store_remove (add_dialog->file_liststore, &iter);
 				}
 			}
-			gtk_widget_set_sensitive ( Stop_button , TRUE);
-			gtk_widget_set_sensitive ( check_menu , FALSE);
-			gtk_widget_set_sensitive ( close1 , 	FALSE);
-			gtk_widget_set_sensitive ( properties , FALSE);
+			gtk_widget_set_sensitive (Stop_button,TRUE);
+			gtk_widget_set_sensitive (check_menu,FALSE);
+			gtk_widget_set_sensitive (close1,FALSE);
+			gtk_widget_set_sensitive (properties,FALSE);
 			xa_set_button_state (0,0,0,0,0,0,0,0);
 			gtk_widget_hide (add_dialog->dialog1);
 
-			command = xa_add_single_files ( archive, names, compression_string);
+			command = xa_add_single_files (archive,names,compression_string);
 			g_string_free ( names, TRUE);
 			if (compression_string != NULL)
 				g_free (compression_string);

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/archive.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -89,13 +89,13 @@
 	if (archive->parse_output)
 	{
 		g_io_add_watch (ioc, G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, xa_process_output, archive);
-		g_child_watch_add ( archive->child_pid, (GChildWatchFunc)xa_watch_child, archive);
+		g_child_watch_add (archive->child_pid, (GChildWatchFunc)xa_watch_child, archive);
 	}
 
-	err_ioc = g_io_channel_unix_new ( archive->error_fd );
-	g_io_channel_set_encoding (err_ioc, locale , NULL);
-	g_io_channel_set_flags ( err_ioc , G_IO_FLAG_NONBLOCK , NULL );
-	g_io_add_watch (err_ioc, G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, xa_dump_child_error_messages, archive);
+	err_ioc = g_io_channel_unix_new (archive->error_fd);
+	g_io_channel_set_encoding (err_ioc,locale,NULL);
+	g_io_channel_set_flags (err_ioc,G_IO_FLAG_NONBLOCK,NULL);
+	g_io_add_watch (err_ioc,G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, xa_dump_child_error_messages, archive);
 }
 
 static gboolean xa_process_output (GIOChannel *ioc, GIOCondition cond, gpointer data)

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/archive.h	2007-12-07 09:38:04 UTC (rev 26443)
@@ -42,7 +42,7 @@
 	XA_ARCHIVESTATUS_IDLE = 0,
 	XA_ARCHIVESTATUS_EXTRACT,
 	XA_ARCHIVESTATUS_ADD,
-	XA_ARCHIVESTATUS_RELOAD,
+	XA_ARCHIVESTATUS_DELETE,
 	XA_ARCHIVESTATUS_OPEN,
 	XA_ARCHIVESTATUS_TEST,
 	XA_ARCHIVESTATUS_SFX

Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/extract_dialog.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -250,7 +250,7 @@
 	GTK_WIDGET_SET_FLAGS (dialog_data->cancel_button, GTK_CAN_DEFAULT);
 
 	dialog_data->extract_button = gtk_button_new();
-	dialog_data->extract_image = xa_main_window_find_image("xarchiver-extract_button.png", GTK_ICON_SIZE_SMALL_TOOLBAR);
+	dialog_data->extract_image = xa_main_window_find_image("xarchiver-extract.png", GTK_ICON_SIZE_SMALL_TOOLBAR);
 	dialog_data->extract_hbox = gtk_hbox_new(FALSE, 4);
 	dialog_data->extract_label = gtk_label_new_with_mnemonic(_("_Extract"));
 
@@ -809,7 +809,7 @@
 				_name = g_strconcat (gtk_entry_get_text(GTK_ENTRY(location_entry)),name,NULL);
 				g_free (name);
 				name = _name;
-				xa_shell_quote_filename (name,names);
+				xa_shell_quote_filename (name,names,archive);
 				xxx = g_slist_append (xxx,name);
 			}
 			g_free (permission);

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/interface.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -136,7 +136,7 @@
 	gtk_container_add (GTK_CONTAINER (menuitem2_menu), addfile);
 	gtk_widget_add_accelerator (addfile, "activate",accel_group,GDK_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
-	image2 = xa_main_window_find_image ("xarchiver-add_button.png", GTK_ICON_SIZE_MENU);
+	image2 = xa_main_window_find_image ("xarchiver-add.png", GTK_ICON_SIZE_MENU);
 	gtk_widget_show (image2);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (addfile), image2);
 
@@ -146,7 +146,7 @@
 	gtk_container_add (GTK_CONTAINER (menuitem2_menu), extract_menu);
 	gtk_widget_add_accelerator (extract_menu, "activate",accel_group,GDK_e, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
 
-	image2 =  xa_main_window_find_image ("xarchiver-extract_button.png", GTK_ICON_SIZE_MENU);
+	image2 =  xa_main_window_find_image ("xarchiver-extract.png", GTK_ICON_SIZE_MENU);
 	gtk_widget_show (image2);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (extract_menu), image2);
 
@@ -683,35 +683,36 @@
 	return password;
 }
 
-
-GtkWidget *xa_create_comment_window()
+widget_data *xa_create_output_window(gchar *title)
 {
-	GtkWidget *view_window;
-	GtkWidget *scrolledwindow2;
-	GtkWidget *textview1;
+	GtkWidget *vbox,*textview,*scrolledwindow;
+	widget_data *data;
 
-	view_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_title (GTK_WINDOW (view_window), _("Archive comment window"));
-	gtk_window_set_destroy_with_parent (GTK_WINDOW (view_window), TRUE);
-	gtk_window_set_type_hint (GTK_WINDOW (view_window), GDK_WINDOW_TYPE_HINT_UTILITY);
-	gtk_window_set_position (GTK_WINDOW (view_window), GTK_WIN_POS_CENTER);
-	gtk_window_set_default_size(GTK_WINDOW (view_window), 450, 300);
-	gtk_window_set_modal ( GTK_WINDOW (view_window),TRUE);
-	gtk_window_set_transient_for ( GTK_WINDOW (view_window) , GTK_WINDOW (MainWindow) );
-	scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
-	g_object_set (G_OBJECT (scrolledwindow2),"hscrollbar-policy", GTK_POLICY_AUTOMATIC,"shadow-type", GTK_SHADOW_IN,"vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
-	gtk_container_add (GTK_CONTAINER (view_window), scrolledwindow2);
-	gtk_widget_show (scrolledwindow2);
+	data = g_new0(widget_data,1);
+	data->dialog1 = gtk_dialog_new_with_buttons (title,
+									GTK_WINDOW (MainWindow), GTK_DIALOG_NO_SEPARATOR,
+									GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE, NULL);
+	gtk_dialog_set_default_response (GTK_DIALOG (data->dialog1), GTK_RESPONSE_CLOSE);
+	gtk_widget_set_size_request (data->dialog1, 400, 250);
+	vbox = GTK_DIALOG (data->dialog1)->vbox;
 
-	textview1 = gtk_text_view_new ();
-	gtk_widget_show (textview1);
-	gtk_container_add (GTK_CONTAINER (scrolledwindow2), textview1);
-	gtk_container_set_border_width (GTK_CONTAINER (textview1), 5);
-	gtk_text_view_set_editable (GTK_TEXT_VIEW (textview1), FALSE);
-	gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview1), FALSE);
-	viewtextbuf = gtk_text_view_get_buffer ( GTK_TEXT_VIEW (textview1) );
-	gtk_text_buffer_get_start_iter (viewtextbuf, &viewenditer);
-	return view_window;
+	scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
+	gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
+	gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow), 4);
+	g_object_set (G_OBJECT (scrolledwindow),"hscrollbar-policy", GTK_POLICY_AUTOMATIC,"shadow-type", GTK_SHADOW_IN,"vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
+
+	data->textbuffer = gtk_text_buffer_new (NULL);
+	gtk_text_buffer_create_tag (data->textbuffer, "font","family", "monospace", NULL);
+	gtk_text_buffer_get_iter_at_offset (data->textbuffer, &data->iter, 0);
+
+	textview = gtk_text_view_new_with_buffer (data->textbuffer);
+	g_object_unref (data->textbuffer);
+	gtk_container_add (GTK_CONTAINER (scrolledwindow), textview);
+	gtk_text_view_set_editable (GTK_TEXT_VIEW (textview), FALSE);
+	gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview), FALSE);
+
+	gtk_widget_show_all (data->dialog1);
+	return data;
 }
 
 GtkWidget *create_archive_properties_window ()

Modified: xarchiver/trunk/src/interface.h
===================================================================
--- xarchiver/trunk/src/interface.h	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/interface.h	2007-12-07 09:38:04 UTC (rev 26443)
@@ -35,8 +35,6 @@
 GtkWidget *progressbar;
 GtkWidget *info_label;
 GtkWidget *viewport1,*viewport2;
-GtkTextBuffer *viewtextbuf;
-GtkTextIter viewenditer, viewstart, viewend;
 GtkWidget *archive_properties_window;
 GtkWidget *table1;
 GtkWidget *path_label;
@@ -115,16 +113,23 @@
 GtkTooltips *pad_tooltip;
 GtkWidget *ebox;
 
+typedef struct
+{
+	GtkWidget *dialog1;
+	GtkTextBuffer *textbuffer;
+	GtkTextIter iter;
+} widget_data;
+
+gchar *password_dialog ();
 void set_label (GtkWidget *label,gchar *text);
 int xa_progressbar_pulse (gpointer data);
-GtkWidget *xa_create_comment_window();
+widget_data *xa_create_output_window(gchar *);
 void xa_create_mainwindow (GtkWidget *MainWindow,gboolean show_location);
 GtkWidget *create_archive_properties_window (void);
 void xa_handle_navigation_buttons (GtkMenuItem *menuitem, gpointer user_data);
 void xa_add_page (XArchive *archive);
 void xa_page_has_changed (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data);
 void xa_close_page (GtkWidget *widget, gpointer data);
-gchar *password_dialog ();
 void xa_set_button_state (gboolean New, gboolean Open,gboolean Close, gboolean add,gboolean extract, gboolean sfx, gboolean test, gboolean info);
 #endif
 

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/main.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -174,15 +174,15 @@
 
 				if ( g_file_test ( archive_name,G_FILE_TEST_EXISTS) )
 				{
-					_current_dir = g_path_get_basename ( archive_name );
-					xa_shell_quote_filename ( _current_dir, string );
+					_current_dir = g_path_get_basename (archive_name);
+					xa_shell_quote_filename (_current_dir,string,archive_cmd);
 					g_free (_current_dir);
 				}
 
 				for (x = 1; x< argc; x++)
 				{
 					_current_dir = g_path_get_basename ( argv[x] );
-					xa_shell_quote_filename ( _current_dir, string );
+					xa_shell_quote_filename (_current_dir,string,archive_cmd);
 					g_free (_current_dir);
 				}
 

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/window.c	2007-12-07 09:38:04 UTC (rev 26443)
@@ -134,7 +134,7 @@
 
 void xa_archive_operation_finished(XArchive *archive,gboolean error)
 {
-	if (archive->status == XA_ARCHIVESTATUS_RELOAD)
+	if (archive->status == XA_ARCHIVESTATUS_ADD || archive->status == XA_ARCHIVESTATUS_DELETE)
 	{
 		xa_reload_archive_content(archive);
 		return;
@@ -144,7 +144,7 @@
 	else
 		gtk_widget_set_sensitive (comment_menu,FALSE);
 
-	if (archive->has_comment && archive->status == XA_ARCHIVESTATUS_OPEN) // && the button is checked in the pref dialog)
+	if (archive->has_comment && archive->status == XA_ARCHIVESTATUS_OPEN && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_window->check_show_comment)))
 		xa_show_archive_comment (NULL, NULL);
 
 	if (archive->status == XA_ARCHIVESTATUS_SFX && archive->type == XARCHIVETYPE_RAR)
@@ -276,12 +276,12 @@
 			return;
 		}
 	}
-	type = xa_detect_archive_type ( path );
+	type = xa_detect_archive_type (path);
 
 	if (type == -1)
 	{
 		gchar *utf8_path,*msg;
-		utf8_path = g_filename_to_utf8 (path, -1, NULL, NULL, NULL);
+		utf8_path = g_filename_to_utf8 (path,-1,NULL,NULL,NULL);
 		msg = g_strdup_printf (_("Can't open file \"%s\":"), utf8_path);
 		response = xa_show_message_dialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,msg,
 		_("Archive format is not recognized!"));
@@ -309,30 +309,35 @@
 		g_free (path);
 		return;
 	}
+	/* Detect archive comment, only ZIP and ARJ are supported */
+	if (type == XARCHIVETYPE_ZIP)
+		archive[current_page]->has_comment = xa_detect_archive_comment (XARCHIVETYPE_ZIP,path,archive[current_page]);
+	else if (type == XARCHIVETYPE_ARJ)
+		archive[current_page]->has_comment = xa_detect_archive_comment (XARCHIVETYPE_ARJ,path,archive[current_page]);
 
 	archive[current_page]->type = type;
 	archive[current_page]->path = g_strdup (path);
-	archive[current_page]->escaped_path = xa_escape_bad_chars ( archive[current_page]->path , "$\'`\"\\!?* ()&|@#:;" );
+	archive[current_page]->escaped_path = xa_escape_bad_chars (archive[current_page]->path,"$\'`\"\\!?* ()&|@#:;");
 	archive[current_page]->status = XA_ARCHIVESTATUS_OPEN;
 	xa_add_page (archive[current_page]);
 
 	xa_disable_delete_view_buttons (FALSE);
-	gtk_widget_set_sensitive ( view_shell_output1 , TRUE );
+	gtk_widget_set_sensitive (view_shell_output1,TRUE);
 
 	g_free (path);
 
 	//Does the user open an archive from the command line whose archiver is not installed ?
 	gchar *ext = NULL;
-	if ( archive[current_page]->type == XARCHIVETYPE_RAR )
+	if ( archive[current_page]->type == XARCHIVETYPE_RAR)
 		ext = "rar";
-	else if ( archive[current_page]->type == XARCHIVETYPE_7ZIP )
+	else if (archive[current_page]->type == XARCHIVETYPE_7ZIP)
 		ext = "7z";
-	else if ( archive[current_page]->type == XARCHIVETYPE_ARJ )
+	else if (archive[current_page]->type == XARCHIVETYPE_ARJ)
 		ext = "arj";
-	else if ( archive[current_page]->type == XARCHIVETYPE_LHA )
+	else if (archive[current_page]->type == XARCHIVETYPE_LHA)
 		ext = "lzh";
 	if ( ext != NULL )
-		if ( ! g_list_find ( ArchiveType , ext ) )
+		if (!g_list_find (ArchiveType,ext))
 		{
 			response = xa_show_message_dialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,_("Sorry, this archive format is not supported:"),_("the proper archiver is not installed!") );
 			return;
@@ -539,7 +544,6 @@
 void xa_delete_archive (GtkMenuItem *menuitem, gpointer user_data)
 {
 	gboolean result;
-	gchar *esc_filename = NULL;
 	gchar *command = NULL;
 	gchar *tar;
 	gint x;
@@ -590,10 +594,7 @@
 		break;
 
         case XARCHIVETYPE_ZIP:
-        /* single quotes are not enough when deleting */
-        esc_filename = xa_escape_common_chars (names->str , "*?[]", '\\', 0);
-		command = g_strconcat ( "zip -d " , archive[id]->escaped_path , esc_filename , NULL );
-		g_free (esc_filename);
+		command = g_strconcat ( "zip -d " , archive[id]->escaped_path , names->str , NULL );
 		break;
 
         case XARCHIVETYPE_7ZIP:
@@ -613,7 +614,7 @@
 	}
 	if (command != NULL)
     {
-    	archive[id]->status = XA_ARCHIVESTATUS_RELOAD;
+    	archive[id]->status = XA_ARCHIVESTATUS_DELETE;
     	xa_set_button_state (0,0,0,0,0,0,0,0);
     	gtk_widget_set_sensitive (Stop_button,TRUE);
         result = xa_run_command (archive[id],command,1);
@@ -637,7 +638,7 @@
 	gtk_widget_destroy ( add_window->dialog1 );
 	if (command != NULL)
 	{
-		archive[idx]->status = XA_ARCHIVESTATUS_RELOAD;
+		archive[idx]->status = XA_ARCHIVESTATUS_ADD;
 		xa_run_command (archive[idx],command,1);
 		g_free (command);
 	}
@@ -1070,14 +1071,14 @@
 	return path;
 }
 
-int xa_detect_archive_type ( gchar *filename )
+int xa_detect_archive_type (gchar *filename)
 {
 	FILE *dummy_ptr = NULL;
     int xx = -1;
 	unsigned char magic[14];
 
 	if (filename != NULL)
-		dummy_ptr = fopen ( filename , "r" );
+		dummy_ptr = fopen (filename,"r");
 
 	if (dummy_ptr == NULL)
 	{
@@ -1095,33 +1096,122 @@
 		else
 			return -2;
 	}
-	fread ( magic, 1, 14, dummy_ptr );
-	if ( memcmp ( magic,"\x50\x4b\x03\x04",4 ) == 0 || memcmp ( magic,"\x50\x4b\x05\x06",4 ) == 0 )
+	fread (magic, 1, 14, dummy_ptr);
+	if (memcmp (magic,"\x50\x4b\x03\x04",4) == 0 || memcmp ( magic,"\x50\x4b\x05\x06",4 ) == 0)
 		xx = XARCHIVETYPE_ZIP;
-	else if ( memcmp ( magic,"\x60\xea",2 ) == 0 )
+	else if (memcmp (magic,"\x60\xea",2 ) == 0)
 		xx = XARCHIVETYPE_ARJ;
-	else if ( memcmp ( magic,"\x52\x61\x72\x21",4 ) == 0 )
+	else if (memcmp ( magic,"\x52\x61\x72\x21",4 ) == 0)
 		xx = XARCHIVETYPE_RAR;
-	else if ( memcmp ( magic,"\x42\x5a\x68",3 ) == 0 )
+	else if (memcmp ( magic,"\x42\x5a\x68",3 ) == 0)
 		xx = XARCHIVETYPE_BZIP2;
-	else if ( memcmp ( magic,"\x1f\x8b",2) == 0 || memcmp ( magic,"\x1f\x9d",2 ) == 0 )
+	else if (memcmp ( magic,"\x1f\x8b",2) == 0 || memcmp ( magic,"\x1f\x9d",2 ) == 0)
 		xx = XARCHIVETYPE_GZIP;
-	else if ( memcmp ( magic,"\x5d\x00\x00\x80",4 ) == 0 )
+	else if (memcmp ( magic,"\x5d\x00\x00\x80",4 ) == 0)
 		xx = XARCHIVETYPE_LZMA;
-	else if ( memcmp ( magic,"\xed\xab\xee\xdb",4 ) == 0 )
+	else if (memcmp ( magic,"\xed\xab\xee\xdb",4 ) == 0)
 		xx = XARCHIVETYPE_RPM;
-	else if ( memcmp ( magic,"\x37\x7a\xbc\xaf\x27\x1c",6 ) == 0 )
+	else if (memcmp ( magic,"\x37\x7a\xbc\xaf\x27\x1c",6) == 0)
 		xx = XARCHIVETYPE_7ZIP;
-	else if ( isTar ( dummy_ptr ) )
+	else if (isTar ( dummy_ptr))
 		xx = XARCHIVETYPE_TAR;
-	else if ( isLha ( dummy_ptr ) )
+	else if (isLha ( dummy_ptr))
 		xx = XARCHIVETYPE_LHA;
-	else if ( memcmp ( magic,"!<arch>\ndebian", 14 ) == 0 )
+	else if (memcmp ( magic,"!<arch>\ndebian",14) == 0)
 		xx = XARCHIVETYPE_DEB;
-	fclose ( dummy_ptr );
+	fclose (dummy_ptr);
 	return xx;
 }
 
+gboolean xa_detect_archive_comment (int type, gchar *filename, XArchive *archive)
+{
+	FILE *stream;
+	char sig;
+	guint cmt_len = 0;
+	int byte;
+	unsigned char eocds[] = { 0x50, 0x4b, 0x05, 0x06 };
+	unsigned long long int eocds_position = 0;
+
+	unsigned short int len = 0;
+	int eof;
+	size_t seqptr = 0;
+
+	stream = fopen (filename,"r");
+	if (stream == NULL)
+		return FALSE;
+
+	if (type == XARCHIVETYPE_ZIP)
+	{
+		/* Let's position the file indicator to 64KB before the end of the archive */
+		fseek(stream, 0L, SEEK_SET);
+		/* Let's reach the end of central directory signature now */
+		while( ! feof(stream) )
+		{
+			byte = (eof = fgetc(stream));
+			if (eof == EOF)
+				break;
+			if (byte == eocds[seqptr])
+			{
+				if (++seqptr == sizeof(eocds))
+				{
+					eocds_position = ftell(stream) + 16 ;
+					seqptr = 0;
+				}
+				continue;
+			}
+			else
+			{
+				if (seqptr)
+					seqptr = 0;
+			}
+		}
+		fseek (stream,eocds_position,SEEK_SET);
+		fread (&len,1,2,stream);
+		if (len == 0)
+			return FALSE;
+		else
+		{
+			archive->comment = g_string_new("");
+			while (cmt_len != len)
+			{
+				fread (&sig,1,1,stream);
+				g_string_append_c (archive->comment,sig);
+				cmt_len++;
+			}
+			return TRUE;
+		}
+	}
+	else if (type == XARCHIVETYPE_ARJ)
+	{
+		/* Let's avoid the archive name */
+		fseek ( stream, 39 , SEEK_SET );
+		while (sig != 0)
+		{
+			fread (&sig,1,1,stream);
+			cmt_len++;
+		}
+		fseek ( stream, 39 + cmt_len , SEEK_SET );
+		sig = 1;
+		/* Let's read the archive comment byte after byte now */
+		archive->comment = g_string_new("");
+		while (sig != 0)
+		{
+			fread (&sig,1,1,stream);
+
+			if (sig == 0 && archive->comment->len == 0)
+			{
+				g_string_free (archive->comment,FALSE);
+				archive->comment = NULL;
+				return FALSE;
+			}
+			else
+				g_string_append (archive->comment,&sig);
+		}
+		return TRUE;
+	}
+	return FALSE;
+}
+
 void xa_remove_columns()
 {
 	gint current_page;
@@ -1201,9 +1291,7 @@
 
 void xa_show_cmd_line_output (GtkMenuItem *menuitem)
 {
-	GtkWidget *vbox,*textview,*scrolledwindow;
-	GtkTextBuffer *textbuffer;
-	GtkTextIter    iter;
+	widget_data *xa_cmd_line_output;
 	GSList *output;
 	gchar *line = NULL;
 	gchar *utf8_line;
@@ -1213,44 +1301,20 @@
 
 	current_page = gtk_notebook_get_current_page (notebook);
 	idx = xa_find_archive_index (current_page);
+	xa_cmd_line_output = xa_create_output_window(_("Command line output"));
 
-	xa_cmd_line_output = gtk_dialog_new_with_buttons (_("Command line output"),
-									GTK_WINDOW (MainWindow), GTK_DIALOG_NO_SEPARATOR,
-									GTK_STOCK_CLOSE,GTK_RESPONSE_CLOSE, NULL);
-	gtk_dialog_set_default_response (GTK_DIALOG (xa_cmd_line_output), GTK_RESPONSE_CLOSE);
-	gtk_widget_set_size_request (xa_cmd_line_output, 400, 250);
-	vbox = GTK_DIALOG (xa_cmd_line_output)->vbox;
-
-	scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
-	gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
-	gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow), 4);
-	g_object_set (G_OBJECT (scrolledwindow),"hscrollbar-policy", GTK_POLICY_AUTOMATIC,"shadow-type", GTK_SHADOW_IN,"vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
-
-	textbuffer = gtk_text_buffer_new (NULL);
-	gtk_text_buffer_create_tag (textbuffer, "font","family", "monospace", NULL);
-	gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
-
-	textview = gtk_text_view_new_with_buffer (textbuffer);
-	g_object_unref (textbuffer);
-	gtk_container_add (GTK_CONTAINER (scrolledwindow), textview);
-	gtk_text_view_set_editable (GTK_TEXT_VIEW (textview), FALSE);
-	gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (textview), FALSE);
-
-	gtk_widget_show (vbox);
-	gtk_widget_show (scrolledwindow);
-	gtk_widget_show (textview);
-
 	output = g_slist_reverse (archive[idx]->error_output);
 	while (output)
 	{
 		line = output->data;
 		utf8_line = g_locale_to_utf8 (line, -1, NULL, &bytes_written, NULL);
-		gtk_text_buffer_insert_with_tags_by_name (textbuffer, &iter, utf8_line, bytes_written, "font", NULL);
+		gtk_text_buffer_insert_with_tags_by_name (xa_cmd_line_output->textbuffer, &xa_cmd_line_output->iter, utf8_line, bytes_written, "font", NULL);
 		g_free (utf8_line);
 		output = output->next;
 	}
-	gtk_dialog_run (GTK_DIALOG(xa_cmd_line_output));
-	gtk_widget_destroy (xa_cmd_line_output);
+	gtk_dialog_run (GTK_DIALOG(xa_cmd_line_output->dialog1));
+	gtk_widget_destroy (xa_cmd_line_output->dialog1);
+	g_free(xa_cmd_line_output);
 }
 
 void xa_cancel_archive (GtkMenuItem *menuitem,gpointer data)
@@ -1294,12 +1358,11 @@
 	XEntry *entry = NULL;
 	gchar *full_pathname;
 	gchar *editor_path;
-	gchar *dummy;
+	GString *names = g_string_new("");
 	GList *row_list = NULL;
 	gboolean result = FALSE;
 	gint current_page;
 	gint idx;
-	GString *names = g_string_new (" ");
 
 	current_page = gtk_notebook_get_current_page (notebook);
 	idx = xa_find_archive_index (current_page);
@@ -1340,9 +1403,8 @@
 	}
 
 	full_pathname = xa_build_full_path_name_from_entry(entry);
-	dummy = g_shell_quote(full_pathname);
+	xa_shell_quote_filename(full_pathname,names,archive[idx]);
 	g_free(full_pathname);
-	full_pathname = dummy;
 
 	full_path = archive[idx]->full_path;
 	overwrite = archive[idx]->overwrite;
@@ -1355,8 +1417,7 @@
 		result = xa_create_temp_directory(tmp_dir);
 		archive[idx]->tmp = g_strdup(tmp_dir);
 	}
-	names = g_string_append(names,full_pathname);
-	g_free(full_pathname);
+
 	command = xa_extract_single_files(archive[idx],names,archive[idx]->tmp);
 	g_string_free (names,TRUE);
 
@@ -1534,13 +1595,23 @@
 	}
 }
 
-void xa_shell_quote_filename (gchar *filename,GString *data)
+void xa_shell_quote_filename (gchar *filename,GString *data,XArchive *archive)
 {
 	gchar *quoted_filename = NULL;
+	gchar *esc_filename = NULL;
 
-	quoted_filename = g_shell_quote (filename);
-	g_string_prepend (data, quoted_filename);
-	g_string_prepend_c (data, ' ');
+	quoted_filename = g_shell_quote(filename);
+	if (archive->status != XA_ARCHIVESTATUS_ADD)
+	{
+		if (strstr(filename,"[") || strstr(filename,"]"))
+		{
+			esc_filename = xa_escape_common_chars (quoted_filename , "*?[]", '\\', 0);
+			g_free(quoted_filename);
+			quoted_filename = esc_filename;
+		}
+	}
+	g_string_prepend (data,quoted_filename);
+	g_string_prepend_c (data,' ');
 	g_free (quoted_filename);
 }
 
@@ -1556,7 +1627,7 @@
 	
 	gtk_tree_model_get (model,iter,archive[idx]->nc+1,&entry,-1);
 	filename = xa_build_full_path_name_from_entry(entry);
-	xa_shell_quote_filename (filename,data);
+	xa_shell_quote_filename (filename,data,archive[idx]);
 	g_free (filename);
 }
 
@@ -1565,32 +1636,32 @@
 	gchar *fullname;
 	gchar *name;
 
-	gtk_tree_model_get (model, iter, 1, &fullname, -1);
-	name = g_path_get_basename ( fullname );
+	gtk_tree_model_get (model,iter,1,&fullname,-1);
+	name = g_path_get_basename (fullname);
 
-	xa_shell_quote_filename ( name , data );
+	//xa_shell_quote_filename (name,data);
 	g_free (fullname);
 }
-
+//TODO: to remove this and also in add_dialog.c:600
 void xa_cat_filenames (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data)
 {
 	gchar *fullname;
 
-	gtk_tree_model_get (model, iter, 1, &fullname, -1);
-	xa_shell_quote_filename ( fullname , data );
+	gtk_tree_model_get (model,iter,1,&fullname,-1);
+	//xa_shell_quote_filename (fullname,data);
 	g_free (fullname);
 }
 
-void Update_StatusBar ( gchar *msg)
+void Update_StatusBar (gchar *msg)
 {
     gtk_label_set_text (GTK_LABEL (info_label), msg);
 }
 
 void xa_disable_delete_view_buttons (gboolean value)
 {
-    gtk_widget_set_sensitive (delete_menu, value);
-    gtk_widget_set_sensitive (View_button, value);
-    gtk_widget_set_sensitive (view_menu, value);
+    gtk_widget_set_sensitive (delete_menu,value);
+    gtk_widget_set_sensitive (View_button,value);
+    gtk_widget_set_sensitive (view_menu,value);
 }
 
 void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data)
@@ -1790,8 +1861,8 @@
 	}
 
 	GString *names = g_string_new (" ");
-	_current_dir = g_path_get_dirname ( array[0] );
-	current_dir = g_filename_from_uri ( _current_dir, NULL, NULL );
+	_current_dir = g_path_get_dirname (array[0]);
+	current_dir = g_filename_from_uri (_current_dir,NULL,NULL);
 	g_free (_current_dir);
 	chdir ( current_dir );
 	g_free (current_dir);
@@ -1799,10 +1870,10 @@
 
 	while (array[len])
 	{
-		filename = g_filename_from_uri ( array[len] , NULL, NULL );
-		name = g_path_get_basename ( filename );
+		filename = g_filename_from_uri (array[len],NULL,NULL);
+		name = g_path_get_basename (filename);
 		g_free (filename);
-		xa_shell_quote_filename ( name, names );
+		xa_shell_quote_filename (name,names,archive[idx]);
 		g_free (name);
 		len++;
 	}
@@ -1954,20 +2025,27 @@
 		Update_StatusBar (_("Please enter the password first!"));
 }
 
-void xa_show_archive_comment ( GtkMenuItem *menuitem , gpointer user_data )
+void xa_show_archive_comment (GtkMenuItem *menuitem,gpointer user_data)
 {
-	GtkWidget *comment_window;
+	widget_data *comment_window;
+	gchar *utf8_line;
+	gsize len;
 	gint current_page;
 	gint idx;
 
 	current_page = gtk_notebook_get_current_page(notebook);
 	idx = xa_find_archive_index (current_page);
 
-	comment_window = xa_create_comment_window();
-	gtk_text_buffer_create_tag (viewtextbuf, "bold","weight", PANGO_WEIGHT_BOLD, NULL);
-	gtk_text_buffer_insert (viewtextbuf, &viewenditer, "\n", 1);
-	gtk_text_buffer_insert_with_tags_by_name (viewtextbuf, &viewenditer, archive[idx]->comment->str, archive[idx]->comment->len, "bold", NULL);
-	gtk_widget_show (comment_window);
+	comment_window = xa_create_output_window(_("Archive Comment"));
+
+	gtk_text_buffer_insert (comment_window->textbuffer, &comment_window->iter, "\n", 1);
+	utf8_line = g_locale_to_utf8 (archive[current_page]->comment->str, -1, NULL, &len, NULL);
+	gtk_text_buffer_insert_with_tags_by_name (comment_window->textbuffer, &comment_window->iter, utf8_line, len, "font", NULL);
+	g_free(utf8_line);
+
+	gtk_dialog_run (GTK_DIALOG(comment_window->dialog1));
+	gtk_widget_destroy (comment_window->dialog1);
+	g_free(comment_window);
 }
 
 void xa_location_entry_activated (GtkEntry *entry, gpointer user_data)

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h	2007-12-07 09:33:08 UTC (rev 26442)
+++ xarchiver/trunk/src/window.h	2007-12-07 09:38:04 UTC (rev 26443)
@@ -56,7 +56,7 @@
 gboolean done,full_path,overwrite,add_recurse;
 Extract_dialog_data *extract_window;
 Add_dialog_data *add_window;
-GtkWidget *dialog, *scrollwin, *xa_cmd_line_output , *view_window, *archive_properties_win;
+GtkWidget *dialog, *scrollwin, *view_window, *archive_properties_win;
 
 void xa_new_archive (GtkMenuItem *menuitem, gpointer user_data);
 void xa_open_archive (GtkMenuItem *menuitem, gpointer user_data );
@@ -88,6 +88,7 @@
 
 int xa_show_message_dialog ( GtkWindow *window, int mode,int type,int button, const gchar *message1,const gchar *message2);
 int xa_detect_archive_type ( gchar *filename );
+gboolean xa_detect_archive_comment ( int type, gchar *filename, XArchive *archive );
 gboolean key_press_function ( GtkWidget* widget, GdkEventKey* event,gpointer data);
 gboolean treeview_select_search (GtkTreeModel *model,gint column,const gchar *key,GtkTreeIter *iter,gpointer search_data);
 gboolean xa_check_child_for_error_on_exit(XArchive *archive,gint status);
@@ -97,7 +98,7 @@
 void xa_remove_columns();
 void xa_create_liststore ( XArchive *archive, gchar *columns_names[]);
 void xa_concat_filenames (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data);
-void xa_shell_quote_filename (gchar *filename , GString *data);
+void xa_shell_quote_filename (gchar *filename,GString *data,XArchive *archive);
 void xa_cat_filenames (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data);
 void xa_cat_filenames_basename (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data);
 void xa_disable_delete_view_buttons (gboolean value);



More information about the Xfce4-commits mailing list