diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | ChangeLog.ja | 7 | ||||
-rw-r--r-- | ltmain.sh | 575 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/folderview.c | 10 | ||||
-rw-r--r-- | src/prefs_filter_edit.c | 6 | ||||
-rw-r--r-- | src/prefs_filter_edit.h | 3 | ||||
-rw-r--r-- | src/prefs_search_folder.c | 315 | ||||
-rw-r--r-- | src/prefs_search_folder.h | 29 | ||||
-rw-r--r-- | src/summary_search.c | 1 | ||||
-rw-r--r-- | src/summary_search.h | 2 |
11 files changed, 827 insertions, 130 deletions
@@ -1,5 +1,13 @@ 2006-01-06 + * src/prefs_search_folder.[ch] + src/summary_search.[ch] + src/folderview.c + src/prefs_filter_edit.[ch]: partially implemented search folder + properties. + +2006-01-06 + * src/folderview.c: modified the message of deleting search folder. 2006-01-06 diff --git a/ChangeLog.ja b/ChangeLog.ja index abf98d3c..2b6198c2 100644 --- a/ChangeLog.ja +++ b/ChangeLog.ja @@ -1,5 +1,12 @@ 2006-01-06 + * src/prefs_search_folder.[ch] + src/summary_search.[ch] + src/folderview.c + src/prefs_filter_edit.[ch]: 検索フォルダのプロパティを一部実装。 + +2006-01-06 + * src/folderview.c: 検索フォルダ削除のメッセージを修正。 2006-01-06 @@ -43,8 +43,8 @@ EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool -VERSION="1.5.20 Debian 1.5.20-2" -TIMESTAMP=" (1.1220.2.287 2005/08/31 18:54:15)" +VERSION="1.5.22 Debian 1.5.22-1" +TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. @@ -132,6 +132,8 @@ run= show="$echo" show_help= execute_dlfiles= +duplicate_deps=no +preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" @@ -139,6 +141,43 @@ o2lo="s/\\.${objext}\$/.lo/" # Shell function definitions: # This seems to be the best place for them +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + # func_win32_libid arg # return the library type of file 'arg' # @@ -157,12 +196,11 @@ func_win32_libid () if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ - sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` - if test "X$win32_nmres" = "Ximport" ; then - win32_libid_type="x86 archive import" - else - win32_libid_type="x86 archive static" - fi + $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac fi ;; *DLL*) @@ -295,9 +333,9 @@ func_extract_archives () $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" - status=$? - if test "$status" -ne 0 && test ! -d "$my_xdir"; then - exit $status + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status fi case $host in *-darwin*) @@ -352,6 +390,8 @@ func_extract_archives () # Darwin sucks eval std_shrext=\"$shrext_cmds\" +disable_libs=no + # Parse our command line options once, thoroughly. while test "$#" -gt 0 do @@ -468,7 +508,11 @@ do preserve_args="$preserve_args $arg" ;; - --tag) prevopt="--tag" prev=tag ;; + --tag) + prevopt="--tag" + prev=tag + preserve_args="$preserve_args --tag" + ;; --tag=*) set tag "$optarg" ${1+"$@"} shift @@ -500,6 +544,18 @@ if test -n "$prevopt"; then exit $EXIT_FAILURE fi +case $disable_libs in +no) + ;; +shared) + build_libtool_libs=no + build_old_libs=yes + ;; +static) + build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` + ;; +esac + # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. @@ -856,9 +912,9 @@ EOF if test ! -d "${xdir}$objdir"; then $show "$mkdir ${xdir}$objdir" $run $mkdir ${xdir}$objdir - status=$? - if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then - exit $status + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then + exit $exit_status fi fi @@ -1061,6 +1117,7 @@ EOF no_install=no objs= non_pic_objects= + notinst_path= # paths that contain not-installed libtool libraries precious_files_regex= prefer_static_libs=no preload=no @@ -1089,14 +1146,15 @@ EOF if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi + prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi + prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes - prefer_static_libs=yes break ;; esac @@ -1271,6 +1329,11 @@ EOF if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. @@ -1354,8 +1417,8 @@ EOF prev= continue ;; - darwin_framework) - compiler_flags="$compiler_flags $arg" + darwin_framework|darwin_framework_skip) + test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= @@ -1419,13 +1482,17 @@ EOF continue ;; - -framework|-arch) - prev=darwin_framework - compiler_flags="$compiler_flags $arg" + -framework|-arch|-isysroot) + case " $CC " in + *" ${arg} ${1} "* | *" ${arg} ${1} "*) + prev=darwin_framework_skip ;; + *) compiler_flags="$compiler_flags $arg" + prev=darwin_framework ;; + esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" - continue - ;; + continue + ;; -inst-prefix-dir) prev=inst_prefix @@ -1453,7 +1520,8 @@ EOF absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - exit $EXIT_FAILURE + absdir="$dir" + notinst_path="$notinst_path $dir" fi dir="$absdir" ;; @@ -1467,10 +1535,15 @@ EOF esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac ;; esac continue @@ -1479,11 +1552,11 @@ EOF -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in - *-*-cygwin* | *-*-pw32* | *-*-beos*) + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; - *-*-mingw* | *-*-os2*) + *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; @@ -1495,6 +1568,15 @@ EOF # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; esac elif test "X$arg" = "X-lc_r"; then case $host in @@ -1536,7 +1618,12 @@ EOF # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*) + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -pg pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ + -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. @@ -1548,9 +1635,7 @@ EOF esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" - if test "$with_gcc" = "yes" ; then - compiler_flags="$compiler_flags $arg" - fi + compiler_flags="$compiler_flags $arg" continue ;; @@ -1788,6 +1873,11 @@ EOF if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. @@ -1893,9 +1983,9 @@ EOF if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir - status=$? - if test "$status" -ne 0 && test ! -d "$output_objdir"; then - exit $status + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then + exit $exit_status fi fi @@ -1958,7 +2048,6 @@ EOF newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" @@ -2197,7 +2286,7 @@ EOF esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else - $echo "$modename: cannot find the library \`$lib'" 1>&2 + $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi @@ -2448,8 +2537,12 @@ EOF fi link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes ; then + use_static_libs=no + fi if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes @@ -2562,11 +2655,15 @@ EOF if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in - *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added - if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then + if /usr/bin/file -L $add 2> /dev/null | + $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo @@ -3322,9 +3419,9 @@ EOF # Eliminate all temporary directories. for path in $notinst_path; do - lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` - deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` - dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then @@ -3377,7 +3474,12 @@ EOF ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. @@ -3421,7 +3523,7 @@ EOF int main() { return 0; } EOF $rm conftest - $LTCC -o conftest conftest.c $deplibs + $LTCC $LTCFLAGS -o conftest conftest.c $deplibs if test "$?" -eq 0 ; then ldd_output=`ldd conftest` for i in $deplibs; do @@ -3466,7 +3568,7 @@ EOF # If $name is empty we are operating on a -L argument. if test "$name" != "" && test "$name" != "0"; then $rm conftest - $LTCC -o conftest conftest.c $i + $LTCC $LTCFLAGS -o conftest conftest.c $i # Did it work? if test "$?" -eq 0 ; then ldd_output=`ldd conftest` @@ -3713,6 +3815,35 @@ EOF deplibs=$newdeplibs fi + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). library_names= old_library= @@ -3796,6 +3927,7 @@ EOF fi lib="$output_objdir/$realname" + linknames= for link do linknames="$linknames $link" @@ -4227,6 +4359,35 @@ EOF ;; esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" @@ -4271,10 +4432,15 @@ EOF fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac ;; esac done @@ -4391,10 +4557,22 @@ extern \"C\" { export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac else - $run eval "${SED} -e 's/\([ ][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac fi fi @@ -4511,16 +4689,29 @@ static const void *lt_preloaded_setup() { esac # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + case $host in + *cygwin* | *mingw* ) + if test -f "$output_objdir/${outputname}.def" ; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + else + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + fi + ;; + * ) + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 @@ -4545,7 +4736,7 @@ static const void *lt_preloaded_setup() { # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" - status=$? + exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then @@ -4553,7 +4744,7 @@ static const void *lt_preloaded_setup() { $run $rm "$output_objdir/${outputname}S.${objext}" fi - exit $status + exit $exit_status fi if test -n "$shlibpath_var"; then @@ -4693,10 +4884,12 @@ static const void *lt_preloaded_setup() { esac case $host in *cygwin* | *mingw* ) - cwrappersource=`$echo ${objdir}/lt-${outputname}.c` - cwrapper=`$echo ${output}.exe` - $rm $cwrappersource $cwrapper - trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + output_name=`basename $output` + output_path=`dirname $output` + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <<EOF @@ -4721,6 +4914,9 @@ EOF #include <malloc.h> #include <stdarg.h> #include <assert.h> +#include <string.h> +#include <ctype.h> +#include <sys/stat.h> #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX @@ -4731,15 +4927,19 @@ EOF #endif #ifndef DIR_SEPARATOR -#define DIR_SEPARATOR '/' +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) -#define HAVE_DOS_BASED_FILE_SYSTEM -#ifndef DIR_SEPARATOR_2 -#define DIR_SEPARATOR_2 '\\' -#endif +# define HAVE_DOS_BASED_FILE_SYSTEM +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif #endif #ifndef DIR_SEPARATOR_2 @@ -4749,17 +4949,32 @@ EOF (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) +/* -DDEBUG is fairly common in CFLAGS. */ +#undef DEBUG +#if defined DEBUGWRAPPER +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) +#else +# define DEBUG(format, ...) +#endif + const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); -char * basename (const char *name); -char * fnqualify(const char *path); +const char * base_name (const char *name); +char * find_executable(const char *wrapper); +int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); @@ -4769,29 +4984,50 @@ main (int argc, char *argv[]) char **newargz; int i; - program_name = (char *) xstrdup ((char *) basename (argv[0])); + program_name = (char *) xstrdup (base_name (argv[0])); + DEBUG("(main) argv[0] : %s\n",argv[0]); + DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF - cat >> $cwrappersource <<EOF - newargz[0] = "$SHELL"; + cat >> $cwrappersource <<EOF + newargz[0] = (char *) xstrdup("$SHELL"); EOF - cat >> $cwrappersource <<"EOF" - newargz[1] = fnqualify(argv[0]); + cat >> $cwrappersource <<"EOF" + newargz[1] = find_executable(argv[0]); + if (newargz[1] == NULL) + lt_fatal("Couldn't find %s", argv[0]); + DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; + + for (i=0; i<argc+1; i++) + { + DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]); + ; + } + EOF - cat >> $cwrappersource <<EOF + case $host_os in + mingw*) + cat >> $cwrappersource <<EOF + execv("$SHELL",(char const **)newargz); +EOF + ;; + *) + cat >> $cwrappersource <<EOF execv("$SHELL",newargz); EOF + ;; + esac - cat >> $cwrappersource <<"EOF" + cat >> $cwrappersource <<"EOF" return 127; } @@ -4812,48 +5048,148 @@ xstrdup (const char *string) ; } -char * -basename (const char *name) +const char * +base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ - if (isalpha (name[0]) && name[1] == ':') + if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; - return (char *) base; + return base; +} + +int +check_executable(const char * path) +{ + struct stat st; + + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) && + ( + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ +#if defined (S_IXOTH) + ((st.st_mode & S_IXOTH) == S_IXOTH) || +#endif +#if defined (S_IXGRP) + ((st.st_mode & S_IXGRP) == S_IXGRP) || +#endif + ((st.st_mode & S_IXUSR) == S_IXUSR)) + ) + return 1; + else + return 0; } +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise */ char * -fnqualify(const char *path) +find_executable (const char* wrapper) { - size_t size; - char *p; + int has_slash = 0; + const char* p; + const char* p_next; + /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; + int tmp_len; + char* concat_name; - assert(path != NULL); + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); - /* Is it qualified already? */ + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha (path[0]) && path[1] == ':') - return xstrdup (path); + if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } #endif - if (IS_DIR_SEPARATOR (path[0])) - return xstrdup (path); - /* prepend the current directory */ - /* doesn't handle '~' */ + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char* path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char* q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR(*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); - size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ - p = XMALLOC(char, size); - sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); - return p; + tmp_len = strlen(tmp); + concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable(concat_name)) + return concat_name; + XFREE(concat_name); + return NULL; } char * @@ -4897,16 +5233,16 @@ lt_fatal (const char *message, ...) va_end (ap); } EOF - # we should really use a build-platform specific compiler - # here, but OTOH, the wrappers (shell script and this C one) - # are only useful if you want to execute the "real" binary. - # Since the "real" binary is built for $host, then this - # wrapper might as well be built for $host, too. - $run $LTCC -s -o $cwrapper $cwrappersource - ;; - esac - $rm $output - trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL @@ -5136,9 +5472,9 @@ fi\ $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" - status=$? - if test "$status" -ne 0 && test ! -d "$gentop"; then - exit $status + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$gentop"; then + exit $exit_status fi fi @@ -5805,18 +6141,7 @@ relink_command=\"$relink_command\"" outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then - tmpdir="/tmp" - test -n "$TMPDIR" && tmpdir="$TMPDIR" - tmpdir="$tmpdir/libtool-$$" - save_umask=`umask` - umask 0077 - if $mkdir "$tmpdir"; then - umask $save_umask - else - umask $save_umask - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi + tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. @@ -5940,7 +6265,7 @@ relink_command=\"$relink_command\"" # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS - $echo "----------------------------------------------------------------------" + $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" @@ -5973,7 +6298,7 @@ relink_command=\"$relink_command\"" $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." - $echo "----------------------------------------------------------------------" + $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; @@ -6190,9 +6515,17 @@ relink_command=\"$relink_command\"" rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - if test "$mode" = uninstall; then + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds @@ -6225,7 +6558,8 @@ relink_command=\"$relink_command\"" IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. - fi + ;; + esac fi ;; @@ -6524,12 +6858,11 @@ exit $? # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes +disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: diff --git a/src/Makefile.am b/src/Makefile.am index 10c5d1b5..288b3d68 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,6 +32,7 @@ sylpheed_SOURCES = \ prefs_summary_column.c prefs_summary_column.h \ prefs_template.c prefs_template.h \ prefs_actions.c prefs_actions.h \ + prefs_search_folder.c prefs_search_folder.h \ account_dialog.c account_dialog.h \ template.c template.h \ addressbook.c addressbook.h \ diff --git a/src/folderview.c b/src/folderview.c index da62f8a9..03b7a17e 100644 --- a/src/folderview.c +++ b/src/folderview.c @@ -60,6 +60,7 @@ #include "prefs_common.h" #include "prefs_account.h" #include "prefs_folder_item.h" +#include "prefs_search_folder.h" #include "filter.h" #include "account.h" #include "account_dialog.h" @@ -1602,7 +1603,6 @@ static gboolean folderview_menu_popup(FolderView *folderview, } if (item->stype == F_VIRTUAL) { rename_folder = delete_folder = TRUE; - search_folder = FALSE; } if (FOLDER_TYPE(folder) == F_IMAP || FOLDER_TYPE(folder) == F_NEWS) { @@ -2714,8 +2714,12 @@ static void folderview_search_cb(FolderView *folderview, guint action, FolderItem *item; item = folderview_get_selected_item(folderview); - if (item) - summary_search(item); + if (item) { + if (item->stype == F_VIRTUAL) + prefs_search_folder_open(item); + else + summary_search(item); + } } static void folderview_property_cb(FolderView *folderview, guint action, diff --git a/src/prefs_filter_edit.c b/src/prefs_filter_edit.c index dc5ba156..6203645b 100644 --- a/src/prefs_filter_edit.c +++ b/src/prefs_filter_edit.c @@ -102,8 +102,6 @@ static void prefs_filter_edit_remove_cond_hbox (FilterCondEdit *cond_edit, CondHBox *hbox); static void prefs_filter_edit_remove_action_hbox(ActionHBox *hbox); -static void prefs_filter_edit_add_rule_cond (FilterCondEdit *cond_edit, - FilterRule *rule); static void prefs_filter_edit_add_rule_action (FilterRule *rule); static void prefs_filter_edit_set_cond_header_menu @@ -1233,8 +1231,8 @@ static void prefs_filter_edit_remove_action_hbox(ActionHBox *hbox) } } -static void prefs_filter_edit_add_rule_cond(FilterCondEdit *cond_edit, - FilterRule *rule) +void prefs_filter_edit_add_rule_cond(FilterCondEdit *cond_edit, + FilterRule *rule) { CondHBox *hbox; GSList *cur; diff --git a/src/prefs_filter_edit.h b/src/prefs_filter_edit.h index c9145c48..a74d3741 100644 --- a/src/prefs_filter_edit.h +++ b/src/prefs_filter_edit.h @@ -166,6 +166,9 @@ void prefs_filter_edit_insert_cond_hbox (FilterCondEdit *cond_edit, CondHBox *hbox, gint pos); +void prefs_filter_edit_add_rule_cond (FilterCondEdit *cond_edit, + FilterRule *rule); + FilterCond *prefs_filter_edit_cond_hbox_to_cond (CondHBox *hbox, gboolean case_sens, gchar **error_msg); diff --git a/src/prefs_search_folder.c b/src/prefs_search_folder.c new file mode 100644 index 00000000..d25ebf51 --- /dev/null +++ b/src/prefs_search_folder.c @@ -0,0 +1,315 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <glib/gi18n.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkoptionmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkcheckbutton.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkstock.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "prefs_search_folder.h" +#include "prefs_ui.h" +#include "mainwindow.h" +#include "manage_window.h" +#include "alertpanel.h" +#include "foldersel.h" +#include "folder.h" +#include "filter.h" +#include "prefs_filter.h" +#include "prefs_filter_edit.h" +#include "menu.h" +#include "utils.h" +#include "gtkutils.h" + +typedef struct _PrefsSearchFolderDialog PrefsSearchFolderDialog; + +struct _PrefsSearchFolderDialog +{ + PrefsDialog *dialog; + FolderItem *item; + + GtkWidget *bool_optmenu; + + FilterCondEdit *cond_edit; + + GtkWidget *folder_entry; + GtkWidget *folder_btn; + + GtkWidget *subfolder_checkbtn; + GtkWidget *case_checkbtn; +}; + +static PrefsSearchFolderDialog *prefs_search_folder_create(FolderItem *item); +static void prefs_search_folder_set_dialog(PrefsSearchFolderDialog *dialog); + +static gint prefs_search_folder_delete_cb(GtkWidget *widget, + GdkEventAny *event, + PrefsSearchFolderDialog *dialog); +static gint prefs_search_folder_key_press_cb + (GtkWidget *widget, + GdkEventKey *event, + PrefsSearchFolderDialog *dialog); + +static void prefs_search_folder_ok_cb (GtkWidget *widget, + PrefsSearchFolderDialog *dialog); +static void prefs_search_folder_apply_cb (GtkWidget *widget, + PrefsSearchFolderDialog *dialog); +static void prefs_search_folder_cancel_cb(GtkWidget *widget, + PrefsSearchFolderDialog *dialog); + + +void prefs_search_folder_open(FolderItem *item) +{ + PrefsSearchFolderDialog *dialog; + + g_return_if_fail(item != NULL); + + dialog = prefs_search_folder_create(item); + manage_window_set_transient(GTK_WINDOW(dialog->dialog->window)); + prefs_search_folder_set_dialog(dialog); + gtk_widget_show(dialog->dialog->window); +} + +static PrefsSearchFolderDialog *prefs_search_folder_create(FolderItem *item) +{ + PrefsSearchFolderDialog *new_dialog; + PrefsDialog *dialog; + GtkWidget *vbox; + GtkWidget *bool_hbox; + GtkWidget *bool_optmenu; + GtkWidget *bool_menu; + GtkWidget *menuitem; + + GtkWidget *scrolledwin; + FilterCondEdit *cond_edit; + + GtkWidget *folder_hbox; + GtkWidget *folder_label; + GtkWidget *folder_entry; + GtkWidget *folder_btn; + + GtkWidget *checkbtn_hbox; + GtkWidget *subfolder_checkbtn; + GtkWidget *case_checkbtn; + + new_dialog = g_new0(PrefsSearchFolderDialog, 1); + + dialog = g_new0(PrefsDialog, 1); + prefs_dialog_create(dialog); + + gtk_widget_set_size_request(dialog->window, 600, -1); + gtk_window_set_title(GTK_WINDOW(dialog->window), + _("Search folder properties")); + gtk_notebook_set_show_border(GTK_NOTEBOOK(dialog->notebook), FALSE); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(dialog->notebook), FALSE); + + g_signal_connect(G_OBJECT(dialog->window), "delete_event", + G_CALLBACK(prefs_search_folder_delete_cb), new_dialog); + g_signal_connect(G_OBJECT(dialog->window), "key_press_event", + G_CALLBACK(prefs_search_folder_key_press_cb), + new_dialog); + + MANAGE_WINDOW_SIGNALS_CONNECT(dialog->window); + + vbox = gtk_vbox_new(FALSE, 6); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(dialog->notebook), vbox); + //gtk_container_set_border_width(GTK_CONTAINER(vbox), VBOX_BORDER); + + bool_hbox = gtk_hbox_new(FALSE, 12); + gtk_widget_show(bool_hbox); + gtk_box_pack_start(GTK_BOX(vbox), bool_hbox, FALSE, FALSE, 0); + + bool_optmenu = gtk_option_menu_new(); + gtk_widget_show(bool_optmenu); + gtk_box_pack_start(GTK_BOX(bool_hbox), bool_optmenu, FALSE, FALSE, 0); + + bool_menu = gtk_menu_new(); + MENUITEM_ADD(bool_menu, menuitem, _("Match any of the following"), + FLT_OR); + MENUITEM_ADD(bool_menu, menuitem, _("Match all of the following"), + FLT_AND); + gtk_option_menu_set_menu(GTK_OPTION_MENU(bool_optmenu), bool_menu); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_show(scrolledwin); + gtk_widget_set_size_request(scrolledwin, -1, 150); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + cond_edit = prefs_filter_edit_cond_edit_create(); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledwin), + cond_edit->cond_vbox); + + folder_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show(folder_hbox); + gtk_box_pack_start(GTK_BOX(vbox), folder_hbox, FALSE, FALSE, 0); + + folder_label = gtk_label_new(_("Folder:")); + gtk_widget_show(folder_label); + gtk_box_pack_start(GTK_BOX(folder_hbox), folder_label, FALSE, FALSE, 0); + + folder_entry = gtk_entry_new(); + gtk_widget_show(folder_entry); + gtk_box_pack_start(GTK_BOX(folder_hbox), folder_entry, TRUE, TRUE, 0); + + folder_btn = gtk_button_new_with_label("..."); + gtk_widget_show(folder_btn); + gtk_box_pack_start(GTK_BOX(folder_hbox), folder_btn, FALSE, FALSE, 0); + + checkbtn_hbox = gtk_hbox_new(FALSE, 12); + gtk_widget_show(checkbtn_hbox); + gtk_box_pack_start(GTK_BOX(vbox), checkbtn_hbox, FALSE, FALSE, 0); + + subfolder_checkbtn = + gtk_check_button_new_with_label(_("Search subfolders")); + gtk_widget_show(subfolder_checkbtn); + gtk_box_pack_start(GTK_BOX(checkbtn_hbox), subfolder_checkbtn, + FALSE, FALSE, 0); + + case_checkbtn = gtk_check_button_new_with_label(_("Case sensitive")); + gtk_widget_show(case_checkbtn); + gtk_box_pack_start(GTK_BOX(checkbtn_hbox), case_checkbtn, + FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(dialog->ok_btn), "clicked", + G_CALLBACK(prefs_search_folder_ok_cb), new_dialog); + g_signal_connect(G_OBJECT(dialog->apply_btn), "clicked", + G_CALLBACK(prefs_search_folder_apply_cb), new_dialog); + g_signal_connect(G_OBJECT(dialog->cancel_btn), "clicked", + G_CALLBACK(prefs_search_folder_cancel_cb), new_dialog); + + new_dialog->dialog = dialog; + new_dialog->item = item; + new_dialog->bool_optmenu = bool_optmenu; + new_dialog->cond_edit = cond_edit; + + new_dialog->folder_entry = folder_entry; + new_dialog->folder_btn = folder_btn; + new_dialog->subfolder_checkbtn = subfolder_checkbtn; + new_dialog->case_checkbtn = case_checkbtn; + + return new_dialog; +} + +static void prefs_search_folder_set_dialog(PrefsSearchFolderDialog *dialog) +{ + GSList *flist; + FilterRule *rule; + gchar *path; + gchar *rule_file; + FolderItem *target; + gint index; + + path = folder_item_get_path(dialog->item); + rule_file = g_strconcat(path, G_DIR_SEPARATOR_S, "filter.xml", NULL); + flist = filter_read_file(rule_file); + g_free(rule_file); + g_free(path); + + if (!flist) { + g_warning("filter rule not found\n"); + return; + } + + rule = (FilterRule *)flist->data; + target = folder_find_item_from_identifier(rule->target_folder); + + index = menu_find_option_menu_index + (GTK_OPTION_MENU(dialog->bool_optmenu), + GINT_TO_POINTER(rule->bool_op), NULL); + if (index < 0) + index = 0; + gtk_option_menu_set_history(GTK_OPTION_MENU(dialog->bool_optmenu), + index); + + prefs_filter_set_header_list(NULL); + prefs_filter_edit_set_header_list(dialog->cond_edit, rule); + prefs_filter_edit_add_rule_cond(dialog->cond_edit, rule); + + filter_rule_list_free(flist); +} + +static void prefs_search_folder_destroy(PrefsSearchFolderDialog *dialog) +{ + prefs_dialog_destroy(dialog->dialog); + g_free(dialog->dialog); + g_free(dialog); + + main_window_popup(main_window_get()); +} + +static gint prefs_search_folder_delete_cb(GtkWidget *widget, GdkEventAny *event, + PrefsSearchFolderDialog *dialog) +{ + prefs_search_folder_destroy(dialog); + return TRUE; +} + +static gint prefs_search_folder_key_press_cb(GtkWidget *widget, + GdkEventKey *event, + PrefsSearchFolderDialog *dialog) +{ + if (event && event->keyval == GDK_Escape) { + prefs_search_folder_cancel_cb(widget, dialog); + return TRUE; + } + return FALSE; +} + +static void prefs_search_folder_ok_cb(GtkWidget *widget, + PrefsSearchFolderDialog *dialog) +{ + prefs_search_folder_apply_cb(widget, dialog); + prefs_search_folder_destroy(dialog); +} + +static void prefs_search_folder_apply_cb(GtkWidget *widget, + PrefsSearchFolderDialog *dialog) +{ + // create filter rule + // delete search cache +} + +static void prefs_search_folder_cancel_cb(GtkWidget *widget, + PrefsSearchFolderDialog *dialog) +{ + prefs_search_folder_destroy(dialog); +} diff --git a/src/prefs_search_folder.h b/src/prefs_search_folder.h new file mode 100644 index 00000000..579f3d0f --- /dev/null +++ b/src/prefs_search_folder.h @@ -0,0 +1,29 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __PREFS_SEARCH_FOLDER_H__ +#define __PREFS_SEARCH_FOLDER_H__ + +#include <glib.h> + +#include "folder.h" + +void prefs_search_folder_open (FolderItem *item); + +#endif /* __PREFS_SEARCH_FOLDER_H__ */ diff --git a/src/summary_search.c b/src/summary_search.c index e454510c..c21407c5 100644 --- a/src/summary_search.c +++ b/src/summary_search.c @@ -49,7 +49,6 @@ #include <string.h> #include "summary_search.h" -#include "prefs_filter_edit.h" #include "summaryview.h" #include "messageview.h" #include "mainwindow.h" diff --git a/src/summary_search.h b/src/summary_search.h index 128007cd..5f1eacf5 100644 --- a/src/summary_search.h +++ b/src/summary_search.h @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2001 Hiroyuki Yamamoto + * Copyright (C) 1999-2005 Hiroyuki Yamamoto * * 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 |