Commit Diff


commit - e4802dc8e436eb2cd46f072685db270a35d8e0c1
commit + a779100e89f76b46207774de124576ca9f5530df
blob - 08e81c7ec7cd417867a39d64a9e34a0ba8f0ea3f
blob + 91a54e50843f940e900dd835f2d56fd7b9f08552
--- .gitignore
+++ .gitignore
@@ -5,8 +5,6 @@
 *.loT
 *.o
 *.swp
-Makefile
-Makefile.in
 /ChangeLog
 /*.tar.gz
 /*.tar.bz2
@@ -117,5 +115,5 @@ Makefile.in
 /TAGS
 /version
 .zig-cache
+zig-out
 src/fence/zig-out/
-*~
blob - eb55d180458d4be11143984ace1d3ef4c5db4047 (mode 644)
blob + /dev/null
--- Makefile.am
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 1999-2014 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-if BUILD_TESTS
-include $(top_srcdir)/tests.mk
-endif
-
-ACLOCAL_AMFLAGS = -I m4
-AUTOMAKE_OPTIONS = dist-bzip2 dist-xz
-
-SUBDIRS = src config doc manual
-
-EXTRA_DIST = \
-	ChangeLog \
-	ChangeLog.gtk1 \
-	ChangeLog.pre2.0.0 \
-	ChangeLog.2.0.0-3.0.0 \
-	ChangeLog.3.0.0-3.9.0 \
-	RELEASE_NOTES \
-	claws-mail-128x128.png \
-	claws-mail-64x64.png \
-	claws-mail.pc.in \
-	claws-mail.desktop \
-	claws-mail.png \
-	autogen.sh \
-	claws-features.h.in \
-	get-git-version \
-	m4 \
-	version
-
-# hicolor icon theme, base class of all icon themes
-pixmapdir=$(datadir)/icons/hicolor/48x48/apps
-pixmap_DATA=claws-mail.png
-
-pixmap64dir=$(datadir)/icons/hicolor/64x64/apps
-pixmap64_DATA=claws-mail-64x64.png
-
-pixmap128dir=$(datadir)/icons/hicolor/128x128/apps
-pixmap128_DATA=claws-mail-128x128.png
-
-# when changing the name or location of the .desktop file,
-# also update src/common/Makefile.am
-gnomapdir = $(datadir)/applications
-gnomap_DATA=claws-mail.desktop
-
-rename-icons:
-	@cd $(DESTDIR)$(datadir)/icons/hicolor/64x64/apps && \
-            mv claws-mail-64x64.png claws-mail.png
-	@cd $(DESTDIR)$(datadir)/icons/hicolor/128x128/apps && \
-            mv claws-mail-128x128.png claws-mail.png
-
-remove-icons:
-	rm -f $(DESTDIR)$(datadir)/icons/hicolor/64x64/apps/claws-mail.png
-	rm -f $(DESTDIR)$(datadir)/icons/hicolor/128x128/apps/claws-mail.png
-
-if UPDATE_GTK_ICON_CACHE
-gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
-
-install-data-hook: rename-icons update-icon-cache
-uninstall-hook: remove-icons update-icon-cache
-
-update-icon-cache:
-	@-if test -z "$(DESTDIR)"; then					\
-                echo "Updating Gtk icon cache.";			\
-                $(gtk_update_icon_cache);				\
-        else								\
-                echo "*** Icon cache not updated. Remember to run:";	\
-		echo "***";						\
-                echo "***   $(gtk_update_icon_cache)";			\
-		echo "***";						\
-        fi
-else
-
-install-data-hook: rename-icons
-uninstall-hook: remove-icons
-
-endif
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = claws-mail.pc
-
-clawsincludedir = $(pkgincludedir)
-clawsinclude_HEADERS = \
-	claws-features.h
-
-relnotesdir = $(docdir)
-relnotes_DATA = RELEASE_NOTES
-
-dist-local: ChangeLog
-
-maintainer-clean-local:
-	@rm -f ChangeLog
-	@rm -f version
-
-ChangeLog: version
-	@./tools/gitlog2changelog.py 3.9.0 > ChangeLog
blob - 19fce27a37a85aa341c0eacd6f73135333a691d9 (mode 755)
blob + /dev/null
--- autogen.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-# Copyright 1999-2014 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-bisonver=`bison --version`
-
-if [ "$bisonver" = "" ]; then
-	echo Bison is needed to compile Claws Mail git
-	exit 1
-fi
-
-if [ "$LEX" != "" ]; then
-	flexver=`$LEX --version|awk '{print $2}'`
-else
-	flexver=`flex --version|awk '{print $2}'`
-fi
-
-if [ "$flexver" = "" ]; then
-	echo Flex 2.5.31 or greater is needed to compile Claws Mail git
-	exit 1
-else
-	flex_major=`echo $flexver|sed "s/\..*//"`
-	flex_minor=`echo $flexver|sed "s/$flex_major\.\(.*\)\..*/\1/"`
-	flex_micro=`echo $flexver|sed "s/$flex_major\.$flex_minor\.\(.*\)/\1/"`
-
-	flex_numversion=$(expr \
-		$flex_major \* 10000 + \
-		$flex_minor \* 100 + \
-		$flex_micro)
-
-	if [ $flex_numversion -lt 20531 ]; then
-		echo Flex 2.5.31 or greater is needed to compile Claws Mail git
-		exit 1
-	fi
-fi
-
-case `uname` in
-	Darwin*)
-		if [ "`glibtoolize --version`" = "" ]; then
-			echo MacOS requires glibtool from either Macport or brew
-			exit 1
-		fi
-		LIBTOOL="glibtoolize --force --copy"
-		;;
-	*)
-		LIBTOOL="libtoolize --force --copy"
-		;;
-esac
-
-${LIBTOOL} \
-  && autopoint -f \
-  && aclocal -I m4 \
-  && autoconf \
-  && autoheader \
-  && automake --add-missing --foreign --copy
-if test -z "$NOCONFIGURE"; then
-exec ./configure --enable-maintainer-mode "$@"
-fi
blob - c38443d54f684bdeadda85b4e10a8247a36230a2 (mode 644)
blob + /dev/null
--- claws-features.h.in
+++ /dev/null
@@ -1 +0,0 @@
-#undef USE_GNUTLS
blob - d4b3f0a129b8cfde47c6c5ab033a3a9f2e5b39a0 (mode 644)
blob + /dev/null
--- config/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-
-.PHONY: test
blob - 3f1bef34a0f0d57a0561e71fc215e64905d9950c (mode 644)
blob + /dev/null
--- config/config.rpath
+++ /dev/null
@@ -1,571 +0,0 @@
-#! /bin/sh
-# Output a system dependent set of variables, describing how to set the
-# run time search path of shared libraries in an executable.
-#
-#   Copyright 1996-2005 Free Software Foundation, Inc.
-#   Taken from GNU libtool, 2001
-#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-#   This file is free software; the Free Software Foundation gives
-#   unlimited permission to copy and/or distribute it, with or without
-#   modifications, as long as this notice is preserved.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-# should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
-
-# Known limitations:
-# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-#   than 256 bytes, otherwise the compiler driver will dump core. The only
-#   known workaround is to choose shorter directory names for the build
-#   directory and/or the installation directory.
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-shrext=.so
-
-host="$1"
-host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-cc_basename=`echo "$CC" | sed -e 's%^.*/%%'`
-
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
-
-wl=
-if test "$GCC" = yes; then
-  wl='-Wl,'
-else
-  case "$host_os" in
-    aix*)
-      wl='-Wl,'
-      ;;
-    darwin*)
-      case "$cc_basename" in
-        xlc*)
-          wl='-Wl,'
-          ;;
-      esac
-      ;;
-    mingw* | pw32* | os2*)
-      ;;
-    hpux9* | hpux10* | hpux11*)
-      wl='-Wl,'
-      ;;
-    irix5* | irix6* | nonstopux*)
-      wl='-Wl,'
-      ;;
-    newsos6)
-      ;;
-    linux*)
-      case $cc_basename in
-        icc* | ecc*)
-          wl='-Wl,'
-          ;;
-        pgcc | pgf77 | pgf90)
-          wl='-Wl,'
-          ;;
-        ccc*)
-          wl='-Wl,'
-          ;;
-        como)
-          wl='-lopt='
-          ;;
-      esac
-      ;;
-    osf3* | osf4* | osf5*)
-      wl='-Wl,'
-      ;;
-    sco3.2v5*)
-      ;;
-    solaris*)
-      wl='-Wl,'
-      ;;
-    sunos4*)
-      wl='-Qoption ld '
-      ;;
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      wl='-Wl,'
-      ;;
-    sysv4*MP*)
-      ;;
-    unicos*)
-      wl='-Wl,'
-      ;;
-    uts4*)
-      ;;
-  esac
-fi
-
-# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
-
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-
-case "$host_os" in
-  cygwin* | mingw* | pw32*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  case "$host_os" in
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-        ld_shlibs=no
-      fi
-      ;;
-    amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we cannot use
-      # them.
-      ld_shlibs=no
-      ;;
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    cygwin* | mingw* | pw32*)
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    netbsd*)
-      ;;
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-        ld_shlibs=no
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    sunos4*)
-      hardcode_direct=yes
-      ;;
-    linux*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-  esac
-  if test "$ld_shlibs" = yes; then
-    # Unlike libtool, we use -rpath here, not --rpath, since the documented
-    # option of GNU ld is called -rpath, not --rpath.
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-  fi
-else
-  case "$host_os" in
-    aix3*)
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes; then
-        # Neither direct hardcoding nor static linking is supported with a
-        # broken collect2.
-        hardcode_direct=unsupported
-      fi
-      ;;
-    aix4* | aix5*)
-      if test "$host_cpu" = ia64; then
-        # On IA64, the linker does run time linking by default, so we don't
-        # have to do anything special.
-        aix_use_runtimelinking=no
-      else
-        aix_use_runtimelinking=no
-        # Test if we are trying to use run time linking or normal
-        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-        # need to do runtime linking.
-        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-          for ld_flag in $LDFLAGS; do
-            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-              aix_use_runtimelinking=yes
-              break
-            fi
-          done
-        esac
-      fi
-      hardcode_direct=yes
-      hardcode_libdir_separator=':'
-      if test "$GCC" = yes; then
-        case $host_os in aix4.[012]|aix4.[012].*)
-          collect2name=`${CC} -print-prog-name=collect2`
-          if test -f "$collect2name" && \
-            strings "$collect2name" | grep resolve_lib_name >/dev/null
-          then
-            # We have reworked collect2
-            hardcode_direct=yes
-          else
-            # We have old collect2
-            hardcode_direct=unsupported
-            hardcode_minus_L=yes
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_libdir_separator=
-          fi
-        esac
-      fi
-      # Begin _LT_AC_SYS_LIBPATH_AIX.
-      echo 'int main () { return 0; }' > conftest.c
-      ${CC} ${LDFLAGS} conftest.c -o conftest
-      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      if test -z "$aix_libpath"; then
-        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      fi
-      if test -z "$aix_libpath"; then
-        aix_libpath="/usr/lib:/lib"
-      fi
-      rm -f conftest.c conftest
-      # End _LT_AC_SYS_LIBPATH_AIX.
-      if test "$aix_use_runtimelinking" = yes; then
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-      else
-        if test "$host_cpu" = ia64; then
-          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-        else
-          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        fi
-      fi
-      ;;
-    amigaos*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs=no
-      ;;
-    bsdi[45]*)
-      ;;
-    cygwin* | mingw* | pw32*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      libext=lib
-      ;;
-    darwin* | rhapsody*)
-      hardcode_direct=no
-      if test "$GCC" = yes ; then
-        :
-      else
-        case "$cc_basename" in
-          xlc*)
-            ;;
-          *)
-            ld_shlibs=no
-            ;;
-        esac
-      fi
-      ;;
-    dgux*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-    freebsd2.2*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    freebsd2*)
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    freebsd* | kfreebsd*-gnu | dragonfly*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    hpux9*)
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      ;;
-    hpux10* | hpux11*)
-      if test "$with_gnu_ld" = no; then
-        case "$host_cpu" in
-          hppa*64*)
-            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-            hardcode_libdir_separator=:
-            hardcode_direct=no
-            ;;
-          ia64*)
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_direct=no
-            # hardcode_minus_L: Not really in the search PATH,
-            # but as the default location of the library.
-            hardcode_minus_L=yes
-            ;;
-          *)
-            hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-            hardcode_libdir_separator=:
-            hardcode_direct=yes
-            # hardcode_minus_L: Not really in the search PATH,
-            # but as the default location of the library.
-            hardcode_minus_L=yes
-            ;;
-        esac
-      fi
-      ;;
-    irix5* | irix6* | nonstopux*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    netbsd*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    newsos6)
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    openbsd*)
-      hardcode_direct=yes
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      else
-        case "$host_os" in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            hardcode_libdir_flag_spec='-R$libdir'
-            ;;
-          *)
-            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-            ;;
-        esac
-      fi
-      ;;
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      ;;
-    osf3*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    osf4* | osf5*)
-      if test "$GCC" = yes; then
-        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-        # Both cc and cxx compiler support -rpath directly
-        hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      hardcode_libdir_separator=:
-      ;;
-    sco3.2v5*)
-      ;;
-    solaris*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      ;;
-    sunos4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    sysv4)
-      case $host_vendor in
-        sni)
-          hardcode_direct=yes # is this really true???
-          ;;
-        siemens)
-          hardcode_direct=no
-          ;;
-        motorola)
-          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-          ;;
-      esac
-      ;;
-    sysv4.3*)
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-        ld_shlibs=yes
-      fi
-      ;;
-    sysv4.2uw2*)
-      hardcode_direct=yes
-      hardcode_minus_L=no
-      ;;
-    sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
-      ;;
-    sysv5*)
-      hardcode_libdir_flag_spec=
-      ;;
-    uts4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    *)
-      ld_shlibs=no
-      ;;
-  esac
-fi
-
-# Check dynamic linker characteristics
-# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
-libname_spec='lib$name'
-case "$host_os" in
-  aix3*)
-    ;;
-  aix4* | aix5*)
-    ;;
-  amigaos*)
-    ;;
-  beos*)
-    ;;
-  bsdi[45]*)
-    ;;
-  cygwin* | mingw* | pw32*)
-    shrext=.dll
-    ;;
-  darwin* | rhapsody*)
-    shrext=.dylib
-    ;;
-  dgux*)
-    ;;
-  freebsd1*)
-    ;;
-  kfreebsd*-gnu)
-    ;;
-  freebsd*)
-    ;;
-  gnu*)
-    ;;
-  hpux9* | hpux10* | hpux11*)
-    case "$host_cpu" in
-      ia64*)
-        shrext=.so
-        ;;
-      hppa*64*)
-        shrext=.sl
-        ;;
-      *)
-        shrext=.sl
-        ;;
-    esac
-    ;;
-  irix5* | irix6* | nonstopux*)
-    case "$host_os" in
-      irix5* | nonstopux*)
-        libsuff= shlibsuff=
-        ;;
-      *)
-        case $LD in
-          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
-          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
-          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
-          *) libsuff= shlibsuff= ;;
-        esac
-        ;;
-    esac
-    ;;
-  linux*oldld* | linux*aout* | linux*coff*)
-    ;;
-  linux*)
-    ;;
-  knetbsd*-gnu)
-    ;;
-  netbsd*)
-    ;;
-  newsos6)
-    ;;
-  nto-qnx*)
-    ;;
-  openbsd*)
-    ;;
-  os2*)
-    libname_spec='$name'
-    shrext=.dll
-    ;;
-  osf3* | osf4* | osf5*)
-    ;;
-  sco3.2v5*)
-    ;;
-  solaris*)
-    ;;
-  sunos4*)
-    ;;
-  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-    ;;
-  sysv4*MP*)
-    ;;
-  uts4*)
-    ;;
-esac
-
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-
-LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-
-# How to pass a linker flag through the compiler.
-wl="$escaped_wl"
-
-# Static library suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally "so").
-shlibext="$shlibext"
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator="$hardcode_libdir_separator"
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct="$hardcode_direct"
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L="$hardcode_minus_L"
-
-EOF
blob - 6fbe5e117629c75a723710efc4b2e0341c17c895 (mode 644)
blob + /dev/null
--- config/mkinstalldirs
+++ /dev/null
@@ -1,150 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2004-02-15.20
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-errstatus=0
-dirmode=""
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit 0
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit 0
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec mkdir -p -- "$@"
-    else
-      # On NextStep and OpenStep, the `mkdir' command does not
-      # recognize any option.  It will interpret all options as
-      # directories to create, and then abort because `.' already
-      # exists.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
-  shift
-
-  pathcomp=
-  for d
-  do
-    pathcomp="$pathcomp$d"
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-	errstatus=$lasterr
-      else
-	if test ! -z "$dirmode"; then
-	  echo "chmod $dirmode $pathcomp"
-	  lasterr=""
-	  chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-	  if test ! -z "$lasterr"; then
-	    errstatus=$lasterr
-	  fi
-	fi
-      fi
-    fi
-
-    pathcomp="$pathcomp/"
-  done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
blob - 0218a01f616eb7265619df4f87151d56be9ebaf1 (mode 755)
blob + /dev/null
--- config/test-driver
+++ /dev/null
@@ -1,148 +0,0 @@
-#! /bin/sh
-# test-driver - basic testsuite driver script.
-
-scriptversion=2016-01-11.22; # UTC
-
-# Copyright (C) 2011-2017 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
-# the Free Software Foundation; either version 2, 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-# Make unconditional expansion of undefined variables an error.  This
-# helps a lot in preventing typo-related bugs.
-set -u
-
-usage_error ()
-{
-  echo "$0: $*" >&2
-  print_usage >&2
-  exit 2
-}
-
-print_usage ()
-{
-  cat <<END
-Usage:
-  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
-              [--expect-failure={yes|no}] [--color-tests={yes|no}]
-              [--enable-hard-errors={yes|no}] [--]
-              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
-The '--test-name', '--log-file' and '--trs-file' options are mandatory.
-END
-}
-
-test_name= # Used for reporting.
-log_file=  # Where to save the output of the test script.
-trs_file=  # Where to save the metadata of the test run.
-expect_failure=no
-color_tests=no
-enable_hard_errors=yes
-while test $# -gt 0; do
-  case $1 in
-  --help) print_usage; exit $?;;
-  --version) echo "test-driver $scriptversion"; exit $?;;
-  --test-name) test_name=$2; shift;;
-  --log-file) log_file=$2; shift;;
-  --trs-file) trs_file=$2; shift;;
-  --color-tests) color_tests=$2; shift;;
-  --expect-failure) expect_failure=$2; shift;;
-  --enable-hard-errors) enable_hard_errors=$2; shift;;
-  --) shift; break;;
-  -*) usage_error "invalid option: '$1'";;
-   *) break;;
-  esac
-  shift
-done
-
-missing_opts=
-test x"$test_name" = x && missing_opts="$missing_opts --test-name"
-test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
-test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
-if test x"$missing_opts" != x; then
-  usage_error "the following mandatory options are missing:$missing_opts"
-fi
-
-if test $# -eq 0; then
-  usage_error "missing argument"
-fi
-
-if test $color_tests = yes; then
-  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
-  red='' # Red.
-  grn='' # Green.
-  lgn='' # Light green.
-  blu='' # Blue.
-  mgn='' # Magenta.
-  std=''     # No color.
-else
-  red= grn= lgn= blu= mgn= std=
-fi
-
-do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
-trap "st=129; $do_exit" 1
-trap "st=130; $do_exit" 2
-trap "st=141; $do_exit" 13
-trap "st=143; $do_exit" 15
-
-# Test script is run here.
-"$@" >$log_file 2>&1
-estatus=$?
-
-if test $enable_hard_errors = no && test $estatus -eq 99; then
-  tweaked_estatus=1
-else
-  tweaked_estatus=$estatus
-fi
-
-case $tweaked_estatus:$expect_failure in
-  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
-  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
-  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
-  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
-  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
-  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
-esac
-
-# Report the test outcome and exit status in the logs, so that one can
-# know whether the test passed or failed simply by looking at the '.log'
-# file, without the need of also peaking into the corresponding '.trs'
-# file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>$log_file
-
-# Report outcome to console.
-echo "${col}${res}${std}: $test_name"
-
-# Register the test result, and other relevant metadata.
-echo ":test-result: $res" > $trs_file
-echo ":global-test-result: $res" >> $trs_file
-echo ":recheck: $recheck" >> $trs_file
-echo ":copy-in-global-log: $gcopy" >> $trs_file
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
blob - 484c86000d211401aad8ae88c46ba1335df79257 (mode 644)
blob + /dev/null
--- configure.ac
+++ /dev/null
@@ -1,298 +0,0 @@
-AC_PREREQ([2.69])
-
-m4_define([claws_VERSION],
-    m4_esyscmd([./get-git-version]))
-
-AC_INIT([claws-mail],
-    m4_defn([claws_VERSION]))
-AC_CONFIG_SRCDIR([src/main.c])
-AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_AUX_DIR([config])
-AC_CANONICAL_TARGET
-AM_INIT_AUTOMAKE([no-define])
-
-PACKAGE=claws-mail
-
-dnl version number
-INTERFACE_AGE=0
-BINARY_AGE=0
-EXTRA_RELEASE=
-EXTRA_GTK3_VERSION=
-
-GIT_VERSION=m4_defn([claws_VERSION])
-
-if test \( -z "$GIT_VERSION" \); then
-	AC_MSG_ERROR([*** could not determine program version])
-fi
-
-MAJOR_VERSION=${GIT_VERSION%%.*}
-MINOR_VERSION=${GIT_VERSION#*.}
-MINOR_VERSION=${MINOR_VERSION%%.*}
-MICRO_VERSION=${GIT_VERSION##*.}
-MICRO_VERSION=${MICRO_VERSION%%-*}
-EXTRA_VERSION=${GIT_VERSION#*-}
-EXTRA_VERSION=${EXTRA_VERSION%%-*}
-
-if test \( "x$EXTRA_VERSION" != "x" -a `echo -n $EXTRA_VERSION | wc -c` -lt 5 \); then
-    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}git${EXTRA_VERSION}
-else
-    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}
-    EXTRA_VERSION=0
-fi
-
-if test \( "x$EXTRA_RELEASE" != "x" \); then
-    VERSION=${VERSION}${EXTRA_RELEASE}${EXTRA_GTK3_VERSION}
-fi
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_SUBST(MAJOR_VERSION)
-AC_SUBST(MINOR_VERSION)
-AC_SUBST(MICRO_VERSION)
-AC_SUBST(EXTRA_VERSION)
-AC_SUBST(GIT_VERSION)
-
-AC_CHECK_PROG(HAVE_GTK_ICON_CACHE, gtk-update-icon-cache, yes, no)
-AM_CONDITIONAL(UPDATE_GTK_ICON_CACHE, test x"$HAVE_GTK_ICON_CACHE" = xyes)
-
-dnl Require pkg-config
-m4_ifndef([PKG_PROG_PKG_CONFIG],
-    [m4_fatal([Could not locate the pkg-config autoconf macros. These
-are usually located in /usr/share/aclocal/pkg.m4. If your macros
-are in a different location, try setting the environment variable
-ACLOCAL_FLAGS before running ./autogen.sh or autoreconf again. E.g.:
-export ACLOCAL_FLAGS="-I/other/macro/dir"])
-])
-PKG_PROG_PKG_CONFIG
-
-dnl libtool versioning
-LT_RELEASE=$MAJOR_VERSION.$MINOR_VERSION
-LT_CURRENT=`expr $MICRO_VERSION - $INTERFACE_AGE`
-LT_REVISION=$INTERFACE_AGE
-LT_AGE=`expr $BINARY_AGE - $INTERFACE_AGE`
-AC_SUBST(LT_RELEASE)
-AC_SUBST(LT_CURRENT)
-AC_SUBST(LT_REVISION)
-AC_SUBST(LT_AGE)
-
-dnl Specify a header configuration file
-AC_CONFIG_HEADERS(config.h)
-AC_CONFIG_HEADERS(claws-features.h)
-
-AM_MAINTAINER_MODE
-
-AC_PROG_CC
-AC_SEARCH_LIBS([strerror],[cposix])
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AC_PROG_CPP
-AC_PROG_LEX(noyywrap)
-AC_PROG_YACC
-AC_LIB_PREFIX
-
-LT_INIT
-LT_PROG_RC
-LT_LANG([Windows Resource])
-LT_INIT
-AC_PROG_AWK
-
-AC_SYS_LARGEFILE
-
-LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
-
-AM_CFLAGS="-Wall"
-if test $USE_MAINTAINER_MODE = yes; then
-	AM_CFLAGS="$AM_CFLAGS -g"
-fi
-
-AC_SUBST(AM_CFLAGS)
-
-AM_ICONV
-
-dnl floor and ceil are  in -lm
-LIBS="$LIBS -lm"
-
-GETTEXT_PACKAGE=claws-mail
-AC_SUBST(GETTEXT_PACKAGE)
-AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Define text domain.])
-
-AM_GNU_GETTEXT_VERSION([0.18])
-AM_GNU_GETTEXT([external])
-
-AC_ARG_ENABLE(gnutls,
-		[  --disable-gnutls                Do not build GnuTLS support for TLS],
-		    [enable_gnutls=$enableval], [enable_gnutls=yes])
-
-AC_ARG_ENABLE(oauth2,
-		[  --disable-oauth2                Do not build OAuth2 support],
-		    [enable_oauth2=$enableval], [enable_oauth2=yes])
-
-AC_ARG_ENABLE(tests,
-				[  --enable-tests                   Build unit tests],
-				[enable_tests=$enableval], [enable_tests=no])
-
-dnl Set PACKAGE_DATA_DIR in config.h.
-if test "x${datarootdir}" = 'x${prefix}/share'; then
-	if test "x${prefix}" = "xNONE"; then
-    		AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}",[PACKAGE_DATA_DIR])
-  	else
-    		AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}",[PACKAGE_DATA_DIR])
-  	fi
-else
-	AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datarootdir}/${PACKAGE}",[PACKAGE_DATA_DIR])
-fi
-
-AC_CHECK_LIB(xpg4, setlocale)
-
-dnl Check for __VA_OPT__ macro
-AC_CACHE_CHECK([for __VA_OPT__],
-	[ac_cv_va_opt],
-	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[#define va_opt_printf(format, ...) fprintf(stderr, format __VA_OPT__(,) __VA_ARGS__)
-		va_opt_printf("success\n");]])],[ac_cv_va_opt=yes],[ac_cv_va_opt=no])]
-)
-if test "$ac_cv_va_opt" = yes; then
-	AC_DEFINE([HAVE_VA_OPT], [1], [Define if __VA_OPT__ macro works])
-fi
-
-AC_FUNC_ALLOCA
-
-dnl check for glib
-PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.50 gmodule-2.0 >= 2.50 gobject-2.0 >= 2.50 gthread-2.0 >= 2.50])
-
-GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-AC_SUBST(GLIB_GENMARSHAL)
-
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-PKG_CHECK_MODULES(GDK_PIXBUF, [gdk-pixbuf-2.0 >= 2.26])
-
-dnl GNUTLS
-AC_MSG_CHECKING([whether to use GnuTLS])
-AC_MSG_RESULT($enable_gnutls)
-if test "x$enable_gnutls" != "xno"; then
-        PKG_CHECK_MODULES(GNUTLS, gnutls >= 2.2,
-        [
-                AC_DEFINE(USE_GNUTLS, 1, gnutls)
-                echo "Building with GnuTLS"
-       ],
-        [
-                echo "Building without GnuTLS"
-		AC_MSG_RESULT([*** GnuTLS support is recommended ])
-		AC_MSG_RESULT([*** You can use --disable-gnutls if you don't need it.])
-		AC_MSG_ERROR([GnuTLS not found])
-        ])
-        AC_SUBST(GNUTLS_LIBS)
-        AC_SUBST(GNUTLS_CFLAGS)
-fi
-
-dnl RC dir (will be default at a certain point in time)
-AC_ARG_WITH(config-dir,    [  --with-config-dir=RCDIR      Local configuration dir (default: .claws-mail)],
-	      ac_cv_with_config_dir="$withval", ac_cv_with_config_dir="")
-
-if test x"$ac_cv_with_config_dir" = x""; then
-	ac_cv_with_config_dir=".claws-mail"
-fi
-AC_DEFINE_UNQUOTED(CFG_RC_DIR, "$ac_cv_with_config_dir", Configuration directory)
-
-if ! `$PKG_CONFIG --atleast-version=3.0 gnutls`; then
-	AC_MSG_ERROR([GnuTLS version at least 3.0 is required for password encryption.])
-fi
-
-AC_MSG_CHECKING([whether GnuTLS support is present for OAuth2])
-if test x"$enable_gnutls" = xyes; then
-	AC_MSG_RESULT([yes])
-	AC_MSG_CHECKING([whether to build OAuth2 support])
-	if test x"$enable_oauth2" = xyes; then
-		AC_MSG_RESULT([yes])
-		AC_DEFINE(USE_OAUTH2, 1, [Define if OAuth2 is to be activated.])
-	else
-		AC_MSG_RESULT([no])
-		enable_oauth2=no
-	fi
-else
-	AC_MSG_RESULT([no])
-	enable_oauth2=no
-fi
-
-PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.20 cairo)
-
-AC_ARG_ENABLE(deprecated,
-		[  --disable-deprecated            Disable deprecated GTK functions],
-		gtkdeprecated=$enableval)
-AC_MSG_CHECKING([whether to use deprecated GTK functions])
-if test x"$gtkdeprecated" != xno; then
-	AC_MSG_RESULT(yes)
-else
-	GTK_CFLAGS="$GTK_CFLAGS -DG_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
-	AC_MSG_RESULT(no)
-fi
-
-dnl Make sure the code does not regress to using deprecated GTK stuff...
-GTK_CFLAGS="$GTK_CFLAGS -DGTK_DISABLE_SINGLE_INCLUDES -DGSEAL_ENABLE"
-
-AC_SUBST(GTK_CFLAGS)
-AC_SUBST(GTK_LIBS)
-
-PKG_CHECK_MODULES([LIBETPAN], [libetpan >= 1.9.4])
-LIBETPAN_LIBS=`pkg-config --libs libetpan`
-AC_SUBST(LIBETPAN_LIBS)
-LIBS="$LIBS $LIBETPAN_LIBS"
-LIBETPAN_CFLAGS=`pkg-config --cflags libetpan`
-AC_SUBST(LIBETPAN_CFLAGS)
-CPPFLAGS="$CPPFLAGS $LIBETPAN_CFLAGS"
-
-AC_MSG_CHECKING([whether to build unit tests])
-if test x$enable_tests = xyes; then
-	AC_MSG_RESULT(yes)
-else
-	AC_MSG_RESULT(no)
-fi
-AM_CONDITIONAL(BUILD_TESTS, test "x$enable_tests" = "xyes")
-
-PKG_CHECK_MODULES(EXPAT, expat, HAVE_EXPAT=yes, HAVE_EXPAT=no)
-
-if test x"$HAVE_EXPAT" = xno; then
-	AC_CHECK_HEADER(expat.h, [expat_header=yes], [expat_header=no])
-	AC_CHECK_LIB(expat, XML_ParserCreate, [expat_lib=yes], [expat_lib=no])
-	if test x"$expat_header" = xyes -a x"$expat_lib"=xyes; then
-		HAVE_EXPAT=yes
-		EXPAT_CFLAGS=""
-		EXPAT_LIBS="-lexpat"
-	fi
-fi
-
-AC_SUBST(EXPAT_CFLAGS)
-AC_SUBST(EXPAT_LIBS)
-
-PKG_CHECK_MODULES(CAIRO, cairo >= 1.12.0, HAVE_CAIRO=yes, HAVE_CAIRO=no)
-AC_SUBST(CAIRO_CFLAGS)
-AC_SUBST(CAIRO_LIBS)
-
-AC_CONFIG_FILES([
-Makefile
-src/common/version.h
-src/Makefile
-src/common/Makefile
-src/common/tests/Makefile
-src/gtk/Makefile
-src/etpan/Makefile
-src/tests/Makefile
-claws-mail.pc
-])
-AC_OUTPUT
-
-echo "$PACKAGE $VERSION"
-echo ""
-echo "gnuTLS               : $enable_gnutls"
-echo "OAuth2               : $enable_oauth2"
-echo "iconv                : $am_cv_func_iconv"
-echo "Unit tests           : $enable_tests"
-
-echo ""
-echo "The binary will be installed in $prefix/bin"
-echo ""
-echo "Configuration directory: $ac_cv_with_config_dir"
-echo ""
-echo "Configure finished, type 'make' to build."
blob - e45fb09a6d5c941f97ecf9acc660715f2b8504e5 (mode 755)
blob + /dev/null
--- get-git-version
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-if test -d .git; then
-  git=`command -v git`
-  if test -x "$git"; then
-    version=`git describe --abbrev=6 --dirty --always`
-    echo "echo $version" > ./version
-  else
-    echo "Error: *** git not found. See http://git-scm.com/"
-    exit 1
-  fi
-elif test -s ./version; then
-  version=`sh -c ". ./version"`
-else
-  echo "Error: *** invalid tree. Neither '.git' nor 'version' were found"
-  exit 1
-fi
-echo -n $version
blob - 3352a8321bf9f38cce2678b28c8d928b7566a4b8 (mode 644)
blob + /dev/null
--- src/Makefile.am
+++ /dev/null
@@ -1,479 +0,0 @@
-# Copyright 1999-2021 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-
-SUBDIRS = common gtk etpan fence .
-
-bin_PROGRAMS = claws-mail
-
-abook_source = \
-	addrbook.c \
-	addrclip.c \
-	addressbook.c \
-	addressbook_foldersel.c \
-	addrindex.c \
-	addrquery.c \
-	addrselect.c \
-	addrduplicates.c \
-	addrmerge.c \
-	editaddress.c \
-	editbook.c \
-	editgroup.c
-
-abook_headers = \
-	adbookbase.h \
-	addrbook.h \
-	addrclip.h \
-	addressbook.h \
-	addressbook_foldersel.h \
-	addrindex.h \
-	addrquery.h \
-	addrselect.h \
-	addrduplicates.h \
-	addrmerge.h \
-	editaddress.h \
-	editbook.h \
-	editgroup.h
-
-claws_mail_SOURCES = \
-	account.c \
-	action.c \
-	addrcache.c \
-	addr_compl.c \
-	addressadd.c \
-	addrgather.c \
-	addrharvest.c \
-	addritem.c \
-	advsearch.c \
-	alertpanel.c \
-	avatars.c \
-	compose.c \
-	customheader.c \
-	displayheader.c \
-	entity.c \
-	export.c \
-	folder.c \
-	folder_item_prefs.c \
-	foldersel.c \
-	folderutils.c \
-	folderview.c \
-	html.c \
-	imap.c \
-	imap_gtk.c \
-	import.c \
-	inc.c \
-	localfolder.c \
-	main.c \
-	mainwindow.c \
-	manual.c \
-	matcher.c \
-	matcher_parser_lex.l \
-	matcher_parser_parse.y \
-	mbox.c \
-	message_search.c \
-	messageview.c \
-	mh.c \
-	mh_gtk.c \
-	mimeview.c \
-	msgcache.c \
-	noticeview.c \
-	oauth2.c \
-	password.c \
-	passwordstore.c \
-	pop.c \
-	prefs_account.c \
-	prefs_actions.c \
-	prefs_common.c \
-	prefs_compose_writing.c \
-	prefs_customheader.c \
-	prefs_display_header.c \
-	prefs_ext_prog.c \
-	prefs_folder_item.c \
-	prefs_gtk.c \
-	prefs_matcher.c \
-	prefs_message.c \
-	prefs_other.c \
-	prefs_quote.c \
-	prefs_receive.c \
-	prefs_send.c \
-	prefs_summaries.c \
-	prefs_summary_column.c \
-	prefs_summary_open.c \
-	prefs_folder_column.c \
-	prefs_template.c \
-	prefs_themes.c \
-	prefs_toolbar.c \
-	prefs_wrapping.c \
-	privacy.c \
-	procheader.c \
-	procmime.c \
-	procmsg.c \
-	quote_fmt.c \
-	quote_fmt_lex.l \
-	quote_fmt_parse.y \
-	send_message.c \
-	setup.c \
-	sourcewindow.c \
-	statusbar.c \
-	stock_pixmap.c \
-	summary_search.c \
-	summaryview.c \
-	textview.c \
-	toolbar.c \
-	undo.c \
-	$(abook_source)
-
-claws_mailincludedir = $(pkgincludedir)
-claws_mailinclude_HEADERS = \
-	account.h \
-	action.h \
-	addrcache.h \
-	addr_compl.h \
-	addrdefs.h \
-	addressadd.h \
-	addritem.h \
-	addressitem.h \
-	addrgather.h \
-	addrharvest.h \
-	advsearch.h \
-	alertpanel.h \
-	avatars.h \
-	compose.h \
-	customheader.h \
-	displayheader.h \
-	entity.h \
-	export.h \
-	folder.h \
-	folder_item_prefs.h \
-	foldersel.h \
-	folderutils.h \
-	folderview.h \
-	html.h \
-	imap.h \
-	imap_gtk.h \
-	import.h \
-	inc.h \
-	localfolder.h \
-	main.h \
-	mainwindow.h \
-	manual.h \
-	matcher.h \
-	matchertypes.h \
-	matcher_parser.h \
-	matcher_parser_lex.h \
-	matcher_parser_parse.h \
-	mbox.h \
-	message_search.h \
-	messageview.h \
-	mh.h \
-	mh_gtk.h \
-	mimeview.h \
-	msgcache.h \
-	noticeview.h \
-	oauth2.h \
-	password.h \
-	passwordstore.h \
-	pop.h \
-	prefs_account.h \
-	prefs_actions.h \
-	prefs_common.h \
-	prefs_compose_writing.h \
-	prefs_customheader.h \
-	prefs_display_header.h \
-	prefs_ext_prog.h \
-	prefs_folder_item.h \
-	prefs_gtk.h \
-	prefs_matcher.h \
-	prefs_message.h \
-	prefs_other.h \
-	prefs_quote.h \
-	prefs_receive.h \
-	prefs_send.h \
-	prefs_summaries.h \
-	prefs_summary_column.h \
-	prefs_summary_open.h \
-	prefs_folder_column.h \
-	prefs_template.h \
-	prefs_themes.h \
-	prefs_toolbar.h \
-	prefs_wrapping.h \
-	privacy.h \
-	procheader.h \
-	procmime.h \
-	procmsg.h \
-	proctypes.h \
-	quote_fmt.h \
-	quote_fmt_lex.h \
-	quote_fmt_parse.h \
-	remotefolder.h \
-	send_message.h \
-	setup.h \
-	sourcewindow.h \
-	statusbar.h \
-	stock_pixmap.h \
-	summary_search.h \
-	summaryview.h \
-	textview.h \
-	toolbar.h \
-	undo.h \
-	viewtypes.h \
-	$(abook_headers)
-
-BUILT_SOURCES = \
-	matcher_parser_parse.h \
-	quote_fmt_parse.h
-
-CLEANFILES = \
-	     $(BUILT_SOURCES)
-
-EXTRA_DIST = \
-	pixmaps/addr_one.xpm \
-	pixmaps/addr_two.xpm \
-	pixmaps/address_book.xpm \
-	pixmaps/address_search.xpm \
-	pixmaps/address.xpm \
-	pixmaps/anonymous.xpm \
-	pixmaps/book.xpm \
-	pixmaps/cancel.xpm \
-	pixmaps/category.xpm \
-	pixmaps/checkbox_off.xpm \
-	pixmaps/checkbox_on.xpm \
-	pixmaps/check_spelling.xpm \
-	pixmaps/clipkey.xpm \
-	pixmaps/claws_mail_icon.xpm \
-	pixmaps/claws_mail_icon_64.xpm \
-	pixmaps/claws_mail_compose_logo.xpm \
-	pixmaps/claws_mail_logo.xpm \
-	pixmaps/claws_mail_logo_small.xpm \
-	pixmaps/clip.xpm \
-	pixmaps/clip_gpg_signed.xpm \
-	pixmaps/close.xpm \
-	pixmaps/complete.xpm \
-	pixmaps/continue.xpm \
-	pixmaps/copied.xpm \
-	pixmaps/delete_btn.xpm \
-	pixmaps/delete_dup_btn.xpm \
-	pixmaps/deleted.xpm \
-	pixmaps/dir_close.xpm \
-	pixmaps/dir_close_hrm.xpm \
-	pixmaps/dir_close_hrm_mark.xpm \
-	pixmaps/dir_close_mark.xpm \
-	pixmaps/dir_open.xpm \
-	pixmaps/dir_open_hrm.xpm \
-	pixmaps/dir_open_hrm_mark.xpm \
-	pixmaps/dir_open_mark.xpm \
-	pixmaps/dir_noselect_close.xpm \
-	pixmaps/dir_noselect_close_mark.xpm \
-	pixmaps/dir_noselect_open.xpm \
-	pixmaps/dir_subs_close_mark.xpm \
-	pixmaps/dir_subs_close.xpm \
-	pixmaps/dir_subs_open.xpm \
-	pixmaps/doc_index.xpm \
-	pixmaps/doc_index_close.xpm \
-	pixmaps/doc_info.xpm \
-	pixmaps/down_arrow.xpm \
-	pixmaps/drafts_close.xpm \
-	pixmaps/drafts_close_mark.xpm \
-	pixmaps/drafts_open.xpm \
-	pixmaps/drafts_open_mark.xpm \
-	pixmaps/edit_extern.xpm \
-	pixmaps/empty.xpm \
-	pixmaps/error.xpm \
-	pixmaps/exec.xpm \
-	pixmaps/first_arrow.xpm \
-	pixmaps/forwarded.xpm \
-	pixmaps/gpg_signed.xpm \
-	pixmaps/go_folders.xpm \
-	pixmaps/group.xpm \
-	pixmaps/ham_btn.xpm \
-	pixmaps/ignorethread.xpm \
-	pixmaps/inbox_open.xpm \
-	pixmaps/inbox_open_hrm.xpm \
-	pixmaps/inbox_open_hrm_mark.xpm \
-	pixmaps/inbox_open_mark.xpm \
-	pixmaps/inbox_close.xpm \
-	pixmaps/inbox_close_hrm.xpm \
-	pixmaps/inbox_close_hrm_mark.xpm \
-	pixmaps/inbox_close_mark.xpm \
-	pixmaps/interface.xpm \
-	pixmaps/insert_file.xpm \
-	pixmaps/key.xpm \
-	pixmaps/key_gpg_signed.xpm \
-	pixmaps/last_arrow.xpm \
-	pixmaps/left_arrow.xpm \
-	pixmaps/linewrap.xpm \
-	pixmaps/linewrapcurrent.xpm \
-	pixmaps/locked.xpm \
-	pixmaps/mail_attach.xpm \
-	pixmaps/mail_compose.xpm \
-	pixmaps/mail_forward.xpm \
-	pixmaps/mail_privacy_encrypted.xpm \
-	pixmaps/mail_privacy_signed.xpm \
-	pixmaps/mail_receive_all.xpm \
-	pixmaps/mail_receive.xpm \
-	pixmaps/mail_reply_to_all.xpm \
-	pixmaps/mail_reply_to_author.xpm \
-	pixmaps/mail_reply_to_list.xpm \
-	pixmaps/mail_reply.xpm \
-	pixmaps/mail_send_queue.xpm \
-	pixmaps/mail_send.xpm \
-	pixmaps/mail_sign.xpm \
-	pixmaps/mail_draft.xpm \
-	pixmaps/mark.xpm \
-	pixmaps/mark_allread.xpm \
-	pixmaps/mark_allunread.xpm \
-	pixmaps/mark_ignorethread.xpm \
-	pixmaps/mark_locked.xpm \
-	pixmaps/mark_mark.xpm \
-	pixmaps/mark_read.xpm \
-	pixmaps/mark_unlocked.xpm \
-	pixmaps/mark_unmark.xpm \
-	pixmaps/mark_unread.xpm \
-	pixmaps/mark_watchthread.xpm \
-	pixmaps/mime_application.xpm \
-	pixmaps/mime_audio.xpm \
-	pixmaps/mime_image.xpm \
-	pixmaps/mime_message.xpm \
-	pixmaps/mime_pdf.xpm \
-	pixmaps/mime_ps.xpm \
-	pixmaps/mime_calendar.xpm \
-	pixmaps/mime_pgpsig.xpm \
-	pixmaps/mime_text_html.xpm \
-	pixmaps/mime_text_patch.xpm \
-	pixmaps/mime_text_plain.xpm \
-	pixmaps/mime_unknown.xpm \
-	pixmaps/moved.xpm \
-	pixmaps/news_compose.xpm \
-	pixmaps/new.xpm \
-	pixmaps/notice_error.xpm \
-	pixmaps/notice_note.xpm \
-	pixmaps/notice_warn.xpm \
-	pixmaps/offline.xpm \
-	pixmaps/online.xpm \
-	pixmaps/open_mail.xpm \
-	pixmaps/outbox_close.xpm \
-	pixmaps/outbox_close_hrm.xpm \
-	pixmaps/outbox_open.xpm \
-	pixmaps/outbox_open_hrm.xpm \
-	pixmaps/outbox_close_mark.xpm \
-	pixmaps/outbox_close_hrm_mark.xpm \
-	pixmaps/outbox_open_mark.xpm \
-	pixmaps/outbox_open_hrm_mark.xpm \
-	pixmaps/paste.xpm \
-	pixmaps/preferences.xpm \
-	pixmaps/printer.xpm \
-	pixmaps/printer_btn.xpm \
-	pixmaps/privacy_expired.xpm \
-	pixmaps/privacy_failed.xpm \
-	pixmaps/privacy_passed.xpm \
-	pixmaps/privacy_signed.xpm \
-	pixmaps/privacy_unknown.xpm \
-	pixmaps/privacy_warn.xpm \
-	pixmaps/privacy_emblem_encrypted.xpm \
-	pixmaps/privacy_emblem_failed.xpm \
-	pixmaps/privacy_emblem_passed.xpm \
-	pixmaps/privacy_emblem_signed.xpm \
-	pixmaps/privacy_emblem_warn.xpm \
-	pixmaps/properties.xpm \
-	pixmaps/queue_close.xpm \
-	pixmaps/queue_close_hrm.xpm \
-	pixmaps/queue_close_hrm_mark.xpm \
-	pixmaps/queue_close_mark.xpm \
-	pixmaps/queue_open.xpm \
-	pixmaps/queue_open_hrm.xpm \
-	pixmaps/queue_open_hrm_mark.xpm \
-	pixmaps/queue_open_mark.xpm \
-	pixmaps/quicksearch.xpm \
-	pixmaps/replied.xpm \
-	pixmaps/replied_and_forwarded.xpm \
-	pixmaps/right_arrow.xpm \
-	pixmaps/rotate_left.xpm \
-	pixmaps/rotate_right.xpm \
-	pixmaps/selection.xpm \
-	pixmaps/spam.xpm \
-	pixmaps/spam_btn.xpm \
-	pixmaps/trash_btn.xpm \
-	pixmaps/trash_close.xpm \
-	pixmaps/trash_close_hrm.xpm \
-	pixmaps/trash_close_hrm_mark.xpm \
-	pixmaps/trash_close_mark.xpm \
-	pixmaps/trash_open.xpm \
-	pixmaps/trash_open_hrm.xpm \
-	pixmaps/trash_open_hrm_mark.xpm \
-	pixmaps/trash_open_mark.xpm \
-	pixmaps/tray_newmail_offline.xpm \
-	pixmaps/tray_newmail.xpm \
-	pixmaps/tray_newmarkedmail_offline.xpm \
-	pixmaps/tray_newmarkedmail.xpm \
-	pixmaps/tray_nomail_offline.xpm \
-	pixmaps/tray_nomail.xpm \
-	pixmaps/tray_unreadmail_offline.xpm \
-	pixmaps/tray_unreadmail.xpm \
-	pixmaps/tray_unreadmarkedmail_offline.xpm \
-	pixmaps/tray_unreadmarkedmail.xpm \
-	pixmaps/unread.xpm \
-	pixmaps/read.xpm \
-	pixmaps/up_arrow.xpm \
-	pixmaps/watchthread.xpm \
-	pixmaps/zoom_fit.xpm \
-	pixmaps/zoom_in.xpm \
-	pixmaps/zoom_out.xpm \
-	pixmaps/zoom_width.xpm
-
-IFLAGS = \
-	-I$(srcdir)/common \
-	-Icommon \
-	-I$(srcdir)/gtk \
-	-I$(srcdir)/etpan
-
-claws_mail_LDFLAGS = \
-	$(claws_mail_platform_ldflags) \
-	-Lfence/zig-out/lib \
-	-Wl,-z,nobtcfi
-
-# The linker flag -Wl... disables "Mandatory enforcement of indirect
-# branch targets" which I think(?) trips up my shit code.
-# https://www.openbsd.org/innovations.html
-
-etpan_library = etpan/libclawsetpan.la
-
-claws_mail_DEPENDENCIES = $(claws_mail_deps) \
-	$(etpan_library) \
-	gtk/libclawsgtk.la
-
-claws_mail_LDADD = \
-	$(etpan_library) \
-	gtk/libclawsgtk.la \
-	$(INTLLIBS) \
-	$(GTK_LIBS) \
-	$(GNUTLS_LIBS) \
-	-lpthread \
-	$(LIBICONV) \
-	$(LIBETPAN_LIBS) \
-	$(SVG_LIBS) \
-	-lfence
-
-pixmapdir=$(datadir)/icons/hicolor/48x48/apps
-
-AM_CPPFLAGS = \
-	-DG_LOG_DOMAIN=\"Claws-Mail\" \
-	-DLOCALEDIR=\""$(localedir)"\" \
-	-DPIXMAP_DIR=\""$(pixmapdir)"\" \
-	-DMANUALDIR=\""$(manualdir)"\" \
-	-DTARGET_ALIAS=\""$(target_triplet)"\" \
-	-DSYSCONFDIR=\""$(sysconfdir)"\" \
-	-DDATAROOTDIR=\""$(datarootdir)"\" \
-	$(IFLAGS) \
-	$(GTK_CFLAGS) \
-	$(GNUTLS_CFLAGS) \
-	$(LIBETPAN_CPPFLAGS) \
-	$(VALGRIND_CFLAGS) \
-	-Ifence/zig-out/include
-
-#no-unused-function because of bison stuff
-matcher_parser_lex.$(OBJEXT) : AM_CFLAGS += -Wno-unused-function
-quote_fmt_lex.$(OBJEXT) : AM_CFLAGS += -Wno-unused-function
-
-AM_YFLAGS = -d
blob - 86d11ab6bf219f775b3a27a684777483fa0534cd
blob + d16a310231a094a9a584ef5b0d73626775baa44f
--- src/account.c
+++ src/account.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
@@ -54,9 +49,7 @@
 #include "hooks.h"
 #include "passwordstore.h"
 #include "file-utils.h"
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 
 enum {
 	ACCOUNT_IS_DEFAULT,
@@ -1413,7 +1406,6 @@ static void account_list_store_insert_account_item(Gtk
 		ac_prefs->recv_at_getall;
 	gchar *protocol, *server;
 
-#ifdef USE_GNUTLS
 	protocol = ac_prefs->protocol == A_POP3 ?
 		  (ac_prefs->ssl_pop == SSL_TUNNEL ?
 		   "POP (TLS)" :
@@ -1426,12 +1418,6 @@ static void account_list_store_insert_account_item(Gtk
 		   "IMAP (STARTTLS)" : "IMAP") :
 		   ac_prefs->protocol == A_LOCAL ? "Local" :
 		   ac_prefs->protocol == A_NONE ?  "SMTP" : "-";
-#else
-	protocol = ac_prefs->protocol == A_POP3  ? "POP" :
-		   ac_prefs->protocol == A_IMAP4 ? "IMAP" :
-		   ac_prefs->protocol == A_LOCAL ? "Local" :
-		   ac_prefs->protocol == A_NONE ?  "SMTP" : "-";
-#endif
 
 	server= ac_prefs->protocol == A_LOCAL ?  "-" :
 		   ac_prefs->protocol == A_NONE ? ac_prefs->smtp_server :
blob - 015b345509d3814a093608a2e0c0e4eafe3fac4f
blob + 175376d40dc051650c9ebeeb481f2c6e92ba9431
--- src/action.c
+++ src/action.c
@@ -53,7 +53,6 @@
 #include "procmsg.h"
 #include "msgcache.h"
 #include "textview.h"
-#include "matcher_parser.h" /* CLAWS */
 #include "procheader.h"
 
 typedef struct _Children		Children;
@@ -693,20 +692,6 @@ static gboolean execute_filtering_actions(gchar *actio
 	if (NULL == (send = strrchr(sbegin, '}')))
 		return FALSE;
 	action_string = g_strndup(sbegin, send - sbegin);
-
-	action_list = matcher_parser_get_action_list(action_string);
-	if (action_list == NULL) {
-		gchar *tmp = g_strdup(action_string);
-
-		g_strstrip(tmp);
-		if (*tmp == '\0')
-			alertpanel_error(_("There is no filtering action set"));
-		else
-			alertpanel_error(_("Invalid filtering action(s):\n%s"), tmp);
-		g_free(action_string);
-		g_free(tmp);
-		return FALSE;
-	}
 	g_free(action_string);
 
 	if (summaryview) {
blob - 7f534df3e0a3c4836dfd3be771b5bf25fbaed564
blob + f8cd7627e5217a38445480f4b18eca557b7b2837
--- src/action.h
+++ src/action.h
@@ -47,7 +47,7 @@ typedef enum
 
 ActionType action_get_type	(const gchar	*action_str);
 
-void actions_execute		(gpointer	data, 
+void actions_execute		(gpointer	data,
 				 guint		action_nb,
 				 GtkWidget	*widget,
 				 gint		source);
blob - 25f7b21aa1daac30ea03523ad148eed1cb18c982
blob + 56ce8f379ee5b57587278309d2188a757d47b85e
--- src/addr_compl.c
+++ src/addr_compl.c
@@ -17,10 +17,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
 #include "defs.h"
 
 #include <glib.h>
blob - a056db6fa0283bfb88d85028a4880fc6596de068
blob + e1b0b7cbd1aadb1d6e64e591f0912073c34d4219
--- src/addr_compl.h
+++ src/addr_compl.h
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * 
+ *
  * Copyright (C) 2000-2012 by Alfons Hoogervorst & The Claws Mail Team.
  *
  * This program is free software; you can redistribute it and/or modify
blob - eada4b48051ae04d7bf146192e21dff1f3e7ea94
blob + 95d9481a691324c9384339f493cf8da8f010d6c8
--- src/addrcache.c
+++ src/addrcache.c
@@ -21,8 +21,6 @@
  * Functions to maintain address cache.
  */
 
-#include "config.h"
-
 #include <stdio.h>
 #include <string.h>
 #include <sys/stat.h>
blob - c6be90b275453fe7dcd26cc1b36369f21bad13cc
blob + 97193484230691929c8c7c9d57c378e74235f739
--- src/addrcache.h
+++ src/addrcache.h
@@ -118,7 +118,7 @@ ItemPerson *addrcache_remove_person	( AddressCache *ca
 ItemEMail *addrcache_remove_email	( AddressCache *cache, ItemEMail *email );
 
 ItemEMail *addrcache_person_remove_email( AddressCache *cache,
-					  ItemPerson *person, 
+					  ItemPerson *person,
 					  ItemEMail *email );
 
 GList *addrcache_get_group_for_person	( AddressCache *cache, ItemPerson *person );
blob - 8912ab7975d2db28b9225e74209027b2c8d7e63c
blob + 40ac4af68e9148bf603b5020098ffb168d17e4c3
--- src/addrclip.c
+++ src/addrclip.c
@@ -44,8 +44,6 @@
  *
  */
 
-#include "config.h"
-
 #include <stdio.h>
 #include <glib.h>
 #include <glib/gi18n.h>
blob - c2d9f0a25df63058dc885a66d533163b80a8edbe
blob + 87abaa45c22e560dab7212003883a21427b73806
--- src/addressbook.h
+++ src/addressbook.h
@@ -40,7 +40,7 @@ gboolean addressbook_add_contact	( const gchar *name,
 					  const gchar *address,
 					  const gchar *remarks,
 					  GdkPixbuf *picture );
-					  
+
 gchar *addressbook_folder_selection( const gchar *folderpath);
 gboolean addressbook_peek_folder_exists( gchar *folderpath,
 										 AddressDataSource **book,
blob - 6a2b8aaa727a066c0aa94c99ef204324192162a4
blob + bb2e3fb2564fa3f8a2f9b351927f9f687c7874c0
--- src/addritem.c
+++ src/addritem.c
@@ -20,8 +20,6 @@
  * General primitive address item objects.
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <stdio.h>
 #include <string.h>
blob - 7a30f42865926c098256d878128c70fc56c413a9
blob + 6f0c6968f9947d55ac6176d1b611103552411419
--- src/addrquery.c
+++ src/addrquery.c
@@ -21,8 +21,6 @@
  * Functions to define an address query (a request).
  */
 
-#include "config.h"
-
 #include <stdio.h>
 #include <string.h>
 #include <glib.h>
blob - ad4549b0d7e25182dbbdd090b63f69669916b20f
blob + ae8634ac19a7f8bff0e5e579ae7919c0a4592cb0
--- src/addrselect.c
+++ src/addrselect.c
@@ -21,8 +21,6 @@
  * Address list item selection objects.
  */
 
-#include "config.h"
-
 #include <stdio.h>
 #include <glib.h>
 
blob - 2d563e43cf1381863dab4e9745dd21a9debbac58 (mode 644)
blob + /dev/null
--- src/advsearch.c
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 2012-2023 the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-# include "claws-features.h"
-#endif
-
-#include "advsearch.h"
-
-#include <glib.h>
-#include <ctype.h>
-
-#include "matcher.h"
-#include "matcher_parser.h"
-#include "utils.h"
-#include "prefs_common.h"
-
-struct _AdvancedSearch {
-	struct {
-		AdvancedSearchType	 type;
-		gchar			*matchstring;
-	} request;
-
-	MatcherList			*predicate;
-	gboolean			 is_fast;
-	gboolean			 search_aborted;
-
-	struct {
-		gboolean (*cb)(gpointer data, guint at, guint matched, guint total);
-		gpointer data;
-	} on_progress_cb;
-	struct {
-		void (*cb)(gpointer data);
-		gpointer data;
-	} on_error_cb;
-};
-
-void advsearch_set_on_progress_cb(AdvancedSearch *search, gboolean (*cb)(gpointer, guint, guint, guint), gpointer data)
-{
-	search->on_progress_cb.cb = cb;
-	search->on_progress_cb.data = data;
-}
-
-void advsearch_set_on_error_cb(AdvancedSearch* search, void (*cb)(gpointer data), gpointer data)
-{
-	search->on_error_cb.cb = cb;
-	search->on_error_cb.data = data;
-}
-
-static void prepare_matcher(AdvancedSearch *search);
-static gboolean search_impl(MsgInfoList **messages, AdvancedSearch* search,
-			    FolderItem* folderItem, gboolean recursive);
-
-// --------------------------
-
-AdvancedSearch* advsearch_new()
-{
-	AdvancedSearch *result;
-
-	result = g_new0(AdvancedSearch, 1);
-
-	return result;
-}
-
-void advsearch_free(AdvancedSearch *search)
-{
-	if (search->predicate != NULL)
-		matcherlist_free(search->predicate);
-
-	g_free(search->request.matchstring);
-	g_free(search);
-}
-
-void advsearch_set(AdvancedSearch *search, AdvancedSearchType type, const gchar *matchstring)
-{
-	cm_return_if_fail(search != NULL);
-
-	search->request.type = type;
-
-	g_free(search->request.matchstring);
-	search->request.matchstring = g_strdup(matchstring);
-
-	prepare_matcher(search);
-}
-
-gboolean advsearch_is_fast(AdvancedSearch *search)
-{
-	cm_return_val_if_fail(search != NULL, FALSE);
-
-	return search->is_fast;
-}
-
-gboolean advsearch_has_proper_predicate(AdvancedSearch *search)
-{
-	cm_return_val_if_fail(search != NULL, FALSE);
-
-	return search->predicate != NULL;
-}
-
-gboolean advsearch_search_msgs_in_folders(AdvancedSearch* search, MsgInfoList **messages,
-				          FolderItem* folderItem, gboolean recursive)
-{
-	if (search == NULL || search->predicate == NULL)
-		return FALSE;
-
-	search->search_aborted = FALSE;
-	return search_impl(messages, search, folderItem, recursive);
-}
-
-void advsearch_abort(AdvancedSearch *search)
-{
-	search->search_aborted = TRUE;
-}
-
-
-static void advsearch_extract_param(GString *matcherstr, gchar **cmd_start_, gchar **cmd_end_, gboolean quotes, gboolean qualifier, gboolean casesens, gboolean regex)
-{
-	gchar *cmd_start, *cmd_end;
-	gchar term_char, save_char;
-
-	cmd_start = *cmd_start_;
-	cmd_end   = *cmd_end_;
-
-	/* extract a parameter, allow quotes */
-	while (*cmd_end && isspace((guchar)*cmd_end))
-		cmd_end++;
-
-	cmd_start = cmd_end;
-	if (*cmd_start == '"') {
-		term_char = '"';
-		cmd_end++;
-	}
-	else
-		term_char = ' ';
-
-	/* extract actual parameter */
-	while ((*cmd_end) && (*cmd_end != term_char))
-		cmd_end++;
-
-	if (*cmd_end == '"')
-		cmd_end++;
-
-	save_char = *cmd_end;
-	*cmd_end = '\0';
-
-	if (qualifier) {
-		if (casesens)
-			g_string_append(matcherstr, regex ? "regexp " : "match ");
-		else
-			g_string_append(matcherstr, regex ? "regexpcase " : "matchcase ");
-	}
-
-	/* do we need to add quotes ? */
-	if (quotes && term_char != '"')
-		g_string_append(matcherstr, "\"");
-
-	/* copy actual parameter */
-	g_string_append(matcherstr, cmd_start);
-
-	/* do we need to add quotes ? */
-	if (quotes && term_char != '"')
-		g_string_append(matcherstr, "\"");
-
-	/* restore original character */
-	*cmd_end = save_char;
-
-	*cmd_end_   = cmd_end;
-	*cmd_start_ = cmd_start;
-	return;
-}
-
-gchar *advsearch_expand_search_string(const gchar *search_string)
-{
-	int i = 0;
-	gchar *cmd_start, *cmd_end;
-	gchar save_char;
-	GString *matcherstr;
-	gchar *returnstr = NULL;
-	gchar *copy_str;
-	gboolean casesens, dontmatch, regex;
-	/* list of allowed pattern abbreviations */
-	struct {
-		gchar		*abbreviated;	/* abbreviation */
-		gchar		*command;	/* actual matcher command */
-		gint		numparams;	/* number of params for cmd */
-		gboolean	qualifier;	/* do we append stringmatch operations */
-		gboolean	quotes;		/* do we need quotes */
-	}
-	cmds[] = {
-		{ "a",	"all",				0,	FALSE,	FALSE },
-		{ "ag",	"age_greater",			1,	FALSE,	FALSE },
-		{ "al",	"age_lower",			1,	FALSE,	FALSE },
-		{ "agh","age_greater_hours",		1,	FALSE,	FALSE },
-		{ "alh","age_lower_hours",		1,	FALSE,	FALSE },
-		{ "b",	"body_part",			1,	TRUE,	TRUE  },
-		{ "B",	"message",			1,	TRUE,	TRUE  },
-		{ "c",	"cc",				1,	TRUE,	TRUE  },
-		{ "C",	"to_or_cc",			1,	TRUE,	TRUE  },
-		{ "D",	"deleted",			0,	FALSE,	FALSE },
-		{ "da", "date_after",			1,	FALSE,	TRUE  },
-		{ "db", "date_before",			1,	FALSE,	TRUE  },
-		{ "e",	"header \"Sender\"",		1,	TRUE,	TRUE  },
-		{ "E",	"execute",			1,	FALSE,	TRUE  },
-		{ "f",	"from",				1,	TRUE,	TRUE  },
-		{ "F",	"forwarded",			0,	FALSE,	FALSE },
-		{ "h",	"headers_part",			1,	TRUE,	TRUE  },
-		{ "H",	"headers_cont",			1,	TRUE,	TRUE  },
-		{ "ha",	"has_attachments",		0,	FALSE,	FALSE },
-		{ "i",	"messageid",			1,	TRUE,	TRUE  },
-		{ "I",	"inreplyto",			1,	TRUE,	TRUE  },
-		{ "L",	"locked",			0,	FALSE,	FALSE },
-		{ "N",	"new",				0,	FALSE,	FALSE },
-		{ "O",	"~new",				0,	FALSE,	FALSE },
-		{ "r",	"replied",			0,	FALSE,	FALSE },
-		{ "R",	"~unread",			0,	FALSE,	FALSE },
-		{ "s",	"subject",			1,	TRUE,	TRUE  },
-		{ "se",	"score_equal",			1,	FALSE,	FALSE },
-		{ "sg",	"score_greater",		1,	FALSE,	FALSE },
-		{ "sl",	"score_lower",			1,	FALSE,	FALSE },
-		{ "Se",	"size_equal",			1,	FALSE,	FALSE },
-		{ "Sg",	"size_greater",			1,	FALSE,	FALSE },
-		{ "Ss",	"size_smaller",			1,	FALSE,	FALSE },
-		{ "t",	"to",				1,	TRUE,	TRUE  },
-		{ "tg", "tag",				1,	TRUE,	TRUE  },
-		{ "T",	"marked",			0,	FALSE,	FALSE },
-		{ "U",	"unread",			0,	FALSE,	FALSE },
-		{ "x",	"references",			1,	TRUE,	TRUE  },
-		{ "X",  "test",				1,	FALSE,  FALSE },
-		{ "v",	"header",			2,	TRUE,	TRUE  },
-		{ "&",	"&",				0,	FALSE,	FALSE },
-		{ "|",	"|",				0,	FALSE,	FALSE },
-		{ "p",	"partial",			0,	FALSE, 	FALSE },
-		{ NULL,	NULL,				0,	FALSE,	FALSE }
-	};
-
-	if (search_string == NULL)
-		return NULL;
-
-	copy_str = g_strdup(search_string);
-
-	matcherstr = g_string_sized_new(16);
-	cmd_start = copy_str;
-	while (cmd_start && *cmd_start) {
-		/* skip all white spaces */
-		while (*cmd_start && isspace((guchar)*cmd_start))
-			cmd_start++;
-		cmd_end = cmd_start;
-
-		/* extract a command */
-		while (*cmd_end && !isspace((guchar)*cmd_end))
-			cmd_end++;
-
-		/* save character */
-		save_char = *cmd_end;
-		*cmd_end = '\0';
-
-		dontmatch = FALSE;
-		casesens = FALSE;
-		regex = FALSE;
-
-		/* ~ and ! mean logical NOT */
-		if (*cmd_start == '~' || *cmd_start == '!')
-		{
-			dontmatch = TRUE;
-			cmd_start++;
-		}
-		/* % means case sensitive match */
-		if (*cmd_start == '%')
-		{
-			casesens = TRUE;
-			cmd_start++;
-		}
-		/* # means regex match */
-		if (*cmd_start == '#') {
-			regex = TRUE;
-			cmd_start++;
-		}
-
-		/* find matching abbreviation */
-		for (i = 0; cmds[i].command; i++) {
-			if (!strcmp(cmd_start, cmds[i].abbreviated)) {
-				/* restore character */
-				*cmd_end = save_char;
-
-				/* copy command */
-				if (matcherstr->len > 0) {
-					g_string_append(matcherstr, " ");
-				}
-				if (dontmatch)
-					g_string_append(matcherstr, "~");
-				g_string_append(matcherstr, cmds[i].command);
-				g_string_append(matcherstr, " ");
-
-				/* stop if no params required */
-				if (cmds[i].numparams == 0)
-					break;
-
-				/* extract a first parameter before the final matched one */
-				if (cmds[i].numparams == 2)
-				{
-					advsearch_extract_param(matcherstr, &cmd_start, &cmd_end, cmds[i].quotes, FALSE, casesens, regex);
-					g_string_append(matcherstr, " ");
-				}
-				advsearch_extract_param(matcherstr, &cmd_start, &cmd_end, cmds[i].quotes, cmds[i].qualifier, casesens, regex);
-				break;
-			}
-		}
-
-		if (*cmd_end)
-			cmd_end++;
-		cmd_start = cmd_end;
-	}
-
-	g_free(copy_str);
-
-	/* return search string if no match is found to allow
-	   all available filtering expressions in advanced search */
-	if (matcherstr->len > 0) {
-		returnstr = g_string_free(matcherstr, FALSE);
-	} else {
-		returnstr = g_strdup(search_string);
-		g_string_free(matcherstr, TRUE);
-	}
-	return returnstr;
-}
-
-static void prepare_matcher_extended(AdvancedSearch *search)
-{
-	gchar *newstr = advsearch_expand_search_string(search->request.matchstring);
-
-	if (newstr && newstr[0] != '\0') {
-		search->predicate = matcher_parser_get_cond(newstr, &search->is_fast);
-		g_free(newstr);
-	}
-}
-
-#define debug_matcher_list(prefix, list)					\
-do {										\
-	gchar *str = list ? matcherlist_to_string(list) : g_strdup("(NULL)");	\
-										\
-	debug_print("%s: %s\n", prefix, str);					\
-										\
-	g_free(str);								\
-} while(0)
-
-static void prepare_matcher_tag(AdvancedSearch *search)
-{
-	gchar **words = search->request.matchstring
-			? g_strsplit(search->request.matchstring, " ", -1)
-			: NULL;
-	gint i = 0;
-
-	if (search->predicate == NULL) {
-		search->predicate = g_new0(MatcherList, 1);
-		search->predicate->bool_and = FALSE;
-		search->is_fast = TRUE;
-	}
-
-	while (words && words[i] && *words[i]) {
-		MatcherProp *matcher;
-
-		g_strstrip(words[i]);
-
-		matcher = matcherprop_new(MATCHCRITERIA_TAG, NULL,
-					  MATCHTYPE_MATCHCASE, words[i], 0);
-
-		search->predicate->matchers = g_slist_prepend(search->predicate->matchers, matcher);
-
-		i++;
-	}
-	g_strfreev(words);
-}
-
-static void prepare_matcher_header(AdvancedSearch *search, gint match_header)
-{
-	MatcherProp *matcher;
-
-	if (search->predicate == NULL) {
-		search->predicate = g_new0(MatcherList, 1);
-		search->predicate->bool_and = FALSE;
-		search->is_fast = TRUE;
-	}
-
-	matcher = matcherprop_new(match_header, NULL, MATCHTYPE_MATCHCASE,
-			search->request.matchstring, 0);
-
-	search->predicate->matchers = g_slist_prepend(search->predicate->matchers, matcher);
-}
-
-static void prepare_matcher_mixed(AdvancedSearch *search)
-{
-	prepare_matcher_tag(search);
-	debug_matcher_list("tag matcher list", search->predicate);
-
-	/* we want an OR search */
-	if (search->predicate)
-		search->predicate->bool_and = FALSE;
-
-	prepare_matcher_header(search, MATCHCRITERIA_SUBJECT);
-	debug_matcher_list("tag + subject matcher list", search->predicate);
-	prepare_matcher_header(search, MATCHCRITERIA_FROM);
-	debug_matcher_list("tag + subject + from matcher list", search->predicate);
-	prepare_matcher_header(search, MATCHCRITERIA_TO);
-	debug_matcher_list("tag + subject + from + to matcher list", search->predicate);
-	prepare_matcher_header(search, MATCHCRITERIA_CC);
-	debug_matcher_list("tag + subject + from + to + cc matcher list", search->predicate);
-}
-
-static void prepare_matcher(AdvancedSearch *search)
-{
-	const gchar *search_string;
-
-	cm_return_if_fail(search != NULL);
-
-	if (search->predicate) {
-		matcherlist_free(search->predicate);
-		search->predicate = NULL;
-	}
-
-	search_string = search->request.matchstring;
-
-	if (search_string == NULL || search_string[0] == '\0')
-		return;
-
-	switch (search->request.type) {
-		case ADVANCED_SEARCH_SUBJECT:
-			prepare_matcher_header(search, MATCHCRITERIA_SUBJECT);
-			debug_matcher_list("subject search", search->predicate);
-			break;
-
-		case ADVANCED_SEARCH_FROM:
-			prepare_matcher_header(search, MATCHCRITERIA_FROM);
-			debug_matcher_list("from search", search->predicate);
-			break;
-
-		case ADVANCED_SEARCH_TO:
-			prepare_matcher_header(search, MATCHCRITERIA_TO);
-			debug_matcher_list("to search", search->predicate);
-			break;
-
-		case ADVANCED_SEARCH_TAG:
-			prepare_matcher_tag(search);
-			debug_matcher_list("tag search", search->predicate);
-			break;
-
-		case ADVANCED_SEARCH_MIXED:
-			prepare_matcher_mixed(search);
-			debug_matcher_list("mixed search", search->predicate);
-			break;
-
-		case ADVANCED_SEARCH_EXTENDED:
-			prepare_matcher_extended(search);
-			debug_matcher_list("extended search", search->predicate);
-			break;
-
-		default:
-			debug_print("unknown search type (%d)\n", search->request.type);
-			break;
-	}
-}
-
-static gboolean search_progress_notify_cb(gpointer data, gboolean on_server, guint at,
-		guint matched, guint total)
-{
-	AdvancedSearch *search = (AdvancedSearch*) data;
-
-	if (search->search_aborted)
-		return FALSE;
-
-	if (on_server || search->on_progress_cb.cb == NULL)
-		return TRUE;
-
-	return search->on_progress_cb.cb(search->on_progress_cb.data, at, matched, total);
-}
-
-static gboolean search_filter_folder(MsgNumberList **msgnums, AdvancedSearch *search,
-					  FolderItem *folderItem, gboolean onServer)
-{
-	gint matched;
-	gboolean tried_server = onServer;
-
-	matched = folder_item_search_msgs(folderItem->folder,
-		folderItem,
-		msgnums,
-		&onServer,
-		search->predicate,
-		search_progress_notify_cb,
-		search);
-
-	if (matched < 0) {
-		if (search->on_error_cb.cb != NULL)
-			search->on_error_cb.cb(search->on_error_cb.data);
-		return FALSE;
-	}
-
-	if (folderItem->folder->klass->supports_server_search && tried_server && !onServer) {
-		return search_filter_folder(msgnums, search, folderItem, onServer);
-	} else {
-		return TRUE;
-	}
-}
-
-static gboolean search_impl(MsgInfoList **messages, AdvancedSearch* search,
-			    FolderItem* folderItem, gboolean recursive)
-{
-	if (recursive) {
-		if (!search_impl(messages, search, folderItem, FALSE)) {
-			return FALSE;
-		}
-		if (folderItem->node->children != NULL && !search->search_aborted) {
-			GNode *node;
-			for (node = folderItem->node->children; node != NULL; node = node->next) {
-				FolderItem *cur = FOLDER_ITEM(node->data);
-				debug_print("in: %s\n", cur->path);
-				if (!search_impl(messages, search, cur, TRUE)) {
-					return FALSE;
-				}
-			}
-		}
-	} else if (!folderItem->no_select) {
-		MsgNumberList *msgnums = NULL;
-		MsgNumberList *cur;
-		MsgInfoList *msgs = NULL;
-		gboolean can_search_on_server = folderItem->folder->klass->supports_server_search;
-		if (!search_filter_folder(&msgnums, search, folderItem,
-					  can_search_on_server)) {
-			g_slist_free(msgnums);
-			return FALSE;
-		}
-
-		for (cur = msgnums; cur != NULL; cur = cur->next) {
-			MsgInfo *msg = folder_item_get_msginfo(folderItem, GPOINTER_TO_UINT(cur->data));
-
-			msgs = g_slist_prepend(msgs, msg);
-		}
-
-		while (msgs != NULL) {
-			MsgInfoList *front = msgs;
-
-			msgs = msgs->next;
-
-			front->next = *messages;
-			*messages = front;
-		}
-
-		g_slist_free(msgnums);
-	}
-
-	return TRUE;
-}
blob - 2f66a88d448db93c6d891c5b0ca44f3cbcb7d7eb (mode 644)
blob + /dev/null
--- src/advsearch.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 2012 the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- * 
- */
-
-#ifndef ADVSEARCH_H
-#define ADVSEARCH_H 1
-
-#include "proctypes.h"
-#include "folder.h"
-
-// temporary
-#include "matcher.h"
-
-typedef enum
-{
-	ADVANCED_SEARCH_SUBJECT,
-	ADVANCED_SEARCH_FROM,
-	ADVANCED_SEARCH_TO,
-	ADVANCED_SEARCH_EXTENDED,
-	ADVANCED_SEARCH_MIXED,
-	ADVANCED_SEARCH_TAG,
-} AdvancedSearchType;
-
-
-typedef struct _AdvancedSearch AdvancedSearch;
-
-void advsearch_set_on_progress_cb(AdvancedSearch* search,
-		gboolean (*cb)(gpointer data, guint at, guint matched, guint total), gpointer data);
-void advsearch_set_on_error_cb(AdvancedSearch* search, void (*cb)(gpointer data), gpointer data);
-
-AdvancedSearch *advsearch_new();
-void advsearch_free(AdvancedSearch *search);
-
-void advsearch_set(AdvancedSearch *search, AdvancedSearchType type, const gchar *matchstring);
-gboolean advsearch_is_fast(AdvancedSearch *search);
-gboolean advsearch_has_proper_predicate(AdvancedSearch *search);
-
-gboolean advsearch_search_msgs_in_folders(AdvancedSearch* search, MsgInfoList **messages,
-				          FolderItem* folderItem, gboolean recursive);
-
-void advsearch_abort(AdvancedSearch *search);
-
-gchar *advsearch_expand_search_string(const gchar *search_string);
-
-#endif
blob - /dev/null
blob + 1eef23314842d0aa522f7fdcd0f9d640eba69644 (mode 644)
--- /dev/null
+++ src/build.zig
@@ -0,0 +1,184 @@
+const std = @import("std");
+
+var alloc = std.heap.DebugAllocator(.{}){};
+
+fn cFiles(name: []const u8) ![][]const u8 {
+    var dir = try std.fs.cwd().openDir(name, .{.iterate = true});
+    defer dir.close();
+    const dba = alloc.allocator();
+    var files = std.ArrayList([]const u8).init(dba);
+    var iter = dir.iterate();
+    while (try iter.next()) |dent| {
+        if (std.mem.endsWith(u8, dent.name, ".c")) {
+            try files.append(try std.fs.path.join(dba, &.{name, dent.name}));
+        }
+    }
+    return files.toOwnedSlice();
+}
+
+// Although this function looks imperative, note that its job is to
+// declaratively construct a build graph that will be executed by an external
+// runner.
+pub fn build(b: *std.Build) void {
+    // Standard target options allows the person running `zig build` to choose
+    // what target to build for. Here we do not override the defaults, which
+    // means any target is allowed, and the default is native. Other options
+    // for restricting supported target set are available.
+    const target = b.standardTargetOptions(.{});
+
+    // Standard optimization options allow the person running `zig build` to select
+    // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not
+    // set a preferred release mode, allowing the user to decide how to optimize.
+    const optimize = b.standardOptimizeOption(.{});
+
+    const fence_mod = b.createModule(.{
+        .root_source_file = b.path("fence/src/root.zig"),
+        .target = target,
+    });
+    const fence = b.addLibrary(.{
+        .name = "fence",
+        .root_module = fence_mod,
+    });
+    // https://github.com/ziglang/zig/issues/6817
+    fence.bundle_compiler_rt = true;
+    const header_file = b.addInstallHeaderFile(b.path("fence/src/fence.h"), "fence.h");
+    b.getInstallStep().dependOn(&header_file.step);
+
+    const extlibs = [_][]const u8{
+        "cairo", "glib-2.0",  "gtk-3", "gdk-3", "gdk_pixbuf-2.0", "pango-1.0",
+        "iconv",
+        "gnutls", "gmp", "unistring",
+    };
+
+    const common_mod = b.createModule(.{
+        .target = target,
+        .link_libc = true,
+    });
+    common_mod.linkLibrary(fence);
+    for (extlibs) |l| {
+        common_mod.linkSystemLibrary(l, .{});
+    }
+    const common = b.addLibrary(.{
+        .name = "clawscommon",
+        .root_module = common_mod,
+    });
+    common.addCSourceFiles(.{
+        .files = cFiles("common") catch unreachable,
+        .flags = &.{"-g"},
+    });
+    common.addIncludePath(b.path("zig-out/include"));
+
+    const gtk_mod = b.createModule(.{
+        .target = target,
+        .link_libc = true,
+    });
+    for (extlibs) |l| {
+        gtk_mod.linkSystemLibrary(l, .{});
+    }
+    gtk_mod.linkSystemLibrary("atk-1.0", .{});
+    const gtk = b.addLibrary(.{
+        .name = "clawsgtk",
+        .root_module = gtk_mod,
+    });
+    gtk.addCSourceFiles(.{
+        .files = cFiles("gtk") catch unreachable,
+        .flags = &.{"-g"},
+    });
+    gtk.addIncludePath(b.path("."));
+    gtk.addIncludePath(b.path("common"));
+
+    const etpan_mod = b.createModule(.{
+        .target = target,
+        .link_libc = true,
+    });
+    for (extlibs) |l| {
+        etpan_mod.linkSystemLibrary(l, .{});
+    }
+    etpan_mod.linkLibrary(common);
+    etpan_mod.linkSystemLibrary("etpan", .{});
+    etpan_mod.linkSystemLibrary("atk", .{});
+    const etpan = b.addLibrary(.{
+        .name = "clawsetpan",
+        .root_module = etpan_mod,
+    });
+    etpan.addCSourceFiles(.{
+        .files = cFiles("etpan") catch unreachable,
+        .flags = &.{"-g"},
+    });
+    etpan.addIncludePath(b.path("."));
+    etpan.addIncludePath(b.path("common"));
+
+    // We will also create a module for our other entry point, 'main.zig'.
+    const exe_mod = b.createModule(.{
+        .target = target,
+        .optimize = optimize,
+        .link_libc = true,
+    });
+    exe_mod.linkLibrary(fence);
+    exe_mod.linkLibrary(common);
+    exe_mod.linkLibrary(gtk);
+    exe_mod.linkLibrary(etpan);
+    for (extlibs) |l| {
+        exe_mod.linkSystemLibrary(l, .{});
+    }
+
+    // This creates another `std.Build.Step.Compile`, but this one builds an executable
+    // rather than a static library.
+    const exe = b.addExecutable(.{
+        .name = "talons",
+        .root_module = exe_mod,
+    });
+    exe.addCSourceFiles(.{
+        .files = cFiles(".") catch unreachable,
+        .flags = &.{
+            "-Wall",
+            "-DGTK_DISABLE_DEPRECATION_WARNINGS",
+            "-DGDK_DISABLE_DEPRECATION_WARNINGS",
+            "-g",
+            // "-std=c11",
+        },
+    });
+    exe.addIncludePath(b.path(".."));
+    exe.addIncludePath(b.path("."));
+    exe.addIncludePath(b.path("etpan"));
+    exe.addIncludePath(b.path("gtk"));
+    exe.addIncludePath(b.path("common"));
+    exe.addIncludePath(b.path("zig-out/include"));
+    exe.addSystemIncludePath(b.path("../../../../../usr/local/include/atk-1.0"));
+
+    // exe.step.dependOn(&fence.step);
+
+    // This declares intent for the executable to be installed into the
+    // standard location when the user invokes the "install" step (the default
+    // step when running `zig build`).
+    b.installArtifact(exe);
+
+    // This *creates* a Run step in the build graph, to be executed when another
+    // step is evaluated that depends on it. The next line below will establish
+    // such a dependency.
+    const run_cmd = b.addRunArtifact(exe);
+
+    // By making the run step depend on the install step, it will be run from the
+    // installation directory rather than directly from within the cache directory.
+    // This is not necessary, however, if the application depends on other installed
+    // files, this ensures they will be present and in the expected location.
+    run_cmd.step.dependOn(b.getInstallStep());
+
+    // This creates a build step. It will be visible in the `zig build --help` menu,
+    // and can be selected like this: `zig build run`
+    // This will evaluate the `run` step rather than the default, which is "install".
+    const run_step = b.step("run", "Run the app");
+    run_step.dependOn(&run_cmd.step);
+
+    const exe_unit_tests = b.addTest(.{
+        .root_module = exe_mod,
+    });
+
+    const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
+
+    // Similar to creating the run step earlier, this exposes a `test` step to
+    // the `zig build --help` menu, providing a way for the user to request
+    // running the unit tests.
+    const test_step = b.step("test", "Run unit tests");
+    test_step.dependOn(&run_exe_unit_tests.step);
+}
blob - /dev/null
blob + b6c74d01101c214d2769b34f25ee5c3ffda49a98 (mode 644)
--- /dev/null
+++ src/build.zig.zon
@@ -0,0 +1,86 @@
+.{
+    // This is the default name used by packages depending on this one. For
+    // example, when a user runs `zig fetch --save <url>`, this field is used
+    // as the key in the `dependencies` table. Although the user can choose a
+    // different name, most users will stick with this provided value.
+    //
+    // It is redundant to include "zig" in this name because it is already
+    // within the Zig package namespace.
+    .name = .src,
+
+    // This is a [Semantic Version](https://semver.org/).
+    // In a future version of Zig it will be used for package deduplication.
+    .version = "0.0.0",
+
+    // Together with name, this represents a globally unique package
+    // identifier. This field is generated by the Zig toolchain when the
+    // package is first created, and then *never changes*. This allows
+    // unambiguous detection of one package being an updated version of
+    // another.
+    //
+    // When forking a Zig project, this id should be regenerated (delete the
+    // field and run `zig build`) if the upstream project is still maintained.
+    // Otherwise, the fork is *hostile*, attempting to take control over the
+    // original project's identity. Thus it is recommended to leave the comment
+    // on the following line intact, so that it shows up in code reviews that
+    // modify the field.
+    .fingerprint = 0x6044248d3aa22f72, // Changing this has security and trust implications.
+
+    // Tracks the earliest Zig version that the package considers to be a
+    // supported use case.
+    .minimum_zig_version = "0.14.0+5ad91a646",
+
+    // This field is optional.
+    // Each dependency must either provide a `url` and `hash`, or a `path`.
+    // `zig build --fetch` can be used to fetch all dependencies of a package, recursively.
+    // Once all dependencies are fetched, `zig build` no longer requires
+    // internet connectivity.
+    .dependencies = .{
+        // See `zig fetch --save <url>` for a command-line interface for adding dependencies.
+        //.example = .{
+        //    // When updating this field to a new URL, be sure to delete the corresponding
+        //    // `hash`, otherwise you are communicating that you expect to find the old hash at
+        //    // the new URL. If the contents of a URL change this will result in a hash mismatch
+        //    // which will prevent zig from using it.
+        //    .url = "https://example.com/foo.tar.gz",
+        //
+        //    // This is computed from the file contents of the directory of files that is
+        //    // obtained after fetching `url` and applying the inclusion rules given by
+        //    // `paths`.
+        //    //
+        //    // This field is the source of truth; packages do not come from a `url`; they
+        //    // come from a `hash`. `url` is just one of many possible mirrors for how to
+        //    // obtain a package matching this `hash`.
+        //    //
+        //    // Uses the [multihash](https://multiformats.io/multihash/) format.
+        //    .hash = "...",
+        //
+        //    // When this is provided, the package is found in a directory relative to the
+        //    // build root. In this case the package's hash is irrelevant and therefore not
+        //    // computed. This field and `url` are mutually exclusive.
+        //    .path = "foo",
+        //
+        //    // When this is set to `true`, a package is declared to be lazily
+        //    // fetched. This makes the dependency only get fetched if it is
+        //    // actually used.
+        //    .lazy = false,
+        //},
+    },
+
+    // Specifies the set of files and directories that are included in this package.
+    // Only files and directories listed here are included in the `hash` that
+    // is computed for this package. Only files listed here will remain on disk
+    // when using the zig package manager. As a rule of thumb, one should list
+    // files required for compilation plus any license(s).
+    // Paths are relative to the build root. Use the empty string (`""`) to refer to
+    // the build root itself.
+    // A directory listed here means that all files within, recursively, are included.
+    .paths = .{
+        "build.zig",
+        "build.zig.zon",
+        "src",
+        // For example...
+        //"LICENSE",
+        //"README.md",
+    },
+}
blob - 50c6984173753743147a1588db8b926f53fcaa89 (mode 644)
blob + /dev/null
--- src/common/Makefile.am
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 1999-2024 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-if BUILD_TESTS
-include $(top_srcdir)/tests.mk
-SUBDIRS = . tests
-endif
-
-DESKTOPFILEPATH=$(datadir)/applications/claws-mail.desktop
-
-noinst_LTLIBRARIES = libclawscommon.la
-
-arch_files =
-arch_header =
-
-libclawscommon_la_SOURCES = $(arch_sources) \
-	codeconv.c \
-	file-utils.c \
-	hooks.c \
-	log.c \
-	mgutils.c \
-	prefs.c \
-	progressindicator.c \
-	quoted-printable.c \
-	session.c \
-	smtp.c \
-	socket.c \
-	ssl.c \
-	ssl_certificate.c \
-	string_match.c \
-	stringtable.c \
-	claws.c \
-	template.c \
-	utils.c \
-	uuencode.c \
-	xml.c \
-	xmlprops.c \
-	pkcs5_pbkdf2.c \
-	unmime.c
-
-clawscommonincludedir = $(pkgincludedir)/common
-clawscommoninclude_HEADERS = $(arch_headers) \
-	codeconv.h \
-	file-utils.h \
-	defs.h \
-	hooks.h \
-	log.h \
-	mgutils.h \
-	prefs.h \
-	progressindicator.h \
-	quoted-printable.h \
-	session.h \
-	smtp.h \
-	socket.h \
-	ssl_certificate.h \
-	ssl.h \
-	string_match.h \
-	stringtable.h \
-	claws.h \
-	tags.h \
-	template.h \
-	utils.h \
-	uuencode.h \
-	version.h \
-	xml.h \
-	xmlprops.h \
-	pkcs5_pbkdf2.h \
-	unmime.h
-
-AM_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
-	$(VALGRIND_CFLAGS) \
-	-DLOCALEDIR=\""$(localedir)"\" \
-	-DDATAROOTDIR=\""$(datarootdir)"\" \
-	-DDESKTOPFILEPATH=\"$(DESKTOPFILEPATH)\" \
-	-DGTK_DISABLE_DEPRECATED \
-	-I../fence/zig-out/include
-
-libclawscommon_la_LIBADD = \
-	$(GLIB_LIBS) \
-	$(CRYPT_LIBS) \
-	-lpthread
-
-EXTRA_DIST = \
-	version.h.in
blob - 662e7ce21fd5d7162bf052d341008e2b8716aa5e
blob + 827ecda4a021748f7a7801757b72a2e79397ce70
--- src/common/claws.c
+++ src/common/claws.c
@@ -14,14 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 #include <stdlib.h>
 #include <locale.h>
@@ -90,15 +85,14 @@ gboolean claws_init(int *argc, char ***argv)
 	if (claws_initialized)
 		return TRUE;
 
-#ifdef USE_GNUTLS
 	ssl_init();
-#endif
+
 	startup_dir = g_get_current_dir();
 
 	parse_parameter(argc, argv);
 
 	debug_print("Starting Claws Mail version %s\n", VERSION);
-	
+
 	setlocale(LC_ALL, "");
 #ifdef ENABLE_NLS
 	bindtextdomain(PACKAGE, get_locale_dir () );
@@ -130,10 +124,7 @@ gboolean claws_init(int *argc, char ***argv)
 
 void claws_done(void)
 {
-
-#ifdef USE_GNUTLS
 	ssl_done();
-#endif
 }
 
 const gchar *claws_get_startup_dir(void)
blob - 489c52ca575409fe4f553b0df9a626463bc43bc1
blob + 03b449423334f3e9f1036a43b1c35d323b4c6c74
--- src/common/codeconv.c
+++ src/common/codeconv.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
blob - b26aba294e09007db4649e9805c0c95023fa3445
blob + 8cb893eaf9445dc05be81c929724fcf1d404d6fb
--- src/common/defs.h
+++ src/common/defs.h
@@ -29,7 +29,7 @@
 #define DRAFT_DIR		"draft"
 #define TRASH_DIR		"trash"
 #define TAGS_DIR		"tagsdb"
-#define RC_DIR			CFG_RC_DIR
+#define RC_DIR			".claws-mail"
 #define OLD_GTK2_RC_DIR		".sylpheed-claws"
 #define OLDER_GTK2_RC_DIR	".sylpheed-gtk2"
 #define OLD_GTK1_RC_DIR		".sylpheed"
blob - bf3252014eb600d0ac21b6a7a590089fec41e20a
blob + ec93821554b472b10cf6ac6579de6fd7ae9afdaa
--- src/common/file-utils.c
+++ src/common/file-utils.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 
 #include <sys/wait.h>
blob - 33172c9c6d02b17b3034ebad4742ba1f4a4f8f94
blob + ddca061c9a85c654df8c77c2f34d3304512d2d85
--- src/common/hooks.c
+++ src/common/hooks.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 
 #include "utils.h"
@@ -34,15 +29,15 @@ static GHookList *hooks_get_hooklist(const gchar *hook
 
 	if (hooklist_table == NULL)
 		hooklist_table = g_hash_table_new(g_str_hash, g_str_equal);
-	
+
 	hooklist = (GHookList *) g_hash_table_lookup(hooklist_table, hooklist_name);
 	if (hooklist != NULL)
 		return hooklist;
-	
+
 	hooklist = g_new0(GHookList, 1);
 	g_hook_list_init(hooklist, sizeof(GHook));
 	g_hash_table_insert(hooklist_table, g_strdup(hooklist_name), hooklist);
-	
+
 	return hooklist;
 }
 
@@ -55,7 +50,7 @@ gulong hooks_register_hook(const gchar *hooklist_name,
 
 	cm_return_val_if_fail(hooklist_name != NULL, HOOK_NONE);
 	cm_return_val_if_fail(hook_func != NULL, HOOK_NONE);
-	
+
 	hooklist = hooks_get_hooklist(hooklist_name);
 	cm_return_val_if_fail(hooklist != NULL, HOOK_NONE);
 
@@ -115,7 +110,7 @@ gboolean hooks_invoke(const gchar *hooklist_name,
 {
 	GHookList *hooklist;
 	struct MarshalData marshal_data;
-	
+
 	cm_return_val_if_fail(hooklist_name != NULL, FALSE);
 
 	hooklist = hooks_get_hooklist(hooklist_name);
blob - 0fcede8bcb1a2c32996a23797be3aefcce380f7a
blob + e0195c3867a0d4c55b4a6f474bd5ab108a7113f3
--- src/common/log.c
+++ src/common/log.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
blob - ffab44f1ba64a872af24bf4a2391304c02999c01
blob + d0e54254e5b70ed66449b9122d2f2d78570525ff
--- src/common/mgutils.c
+++ src/common/mgutils.c
@@ -20,8 +20,6 @@
  * Definitions for generic functions.
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <stdio.h>
 #include <string.h>
blob - 4a6fa714db7b7be31b5498589643fc1c15154023
blob + 6f83fe50f3bc287a203e5d46d31b0e16d36bb323
--- src/common/pkcs5_pbkdf2.c
+++ src/common/pkcs5_pbkdf2.c
@@ -17,8 +17,6 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <sys/types.h>
 
blob - f2fb971389289cb8b6307846cb759fee7e1ebb13
blob + a9693e2fd6d59568343ab983d0102efcc3ae2788
--- src/common/prefs.c
+++ src/common/prefs.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <stdio.h>
 
 #include "defs.h"
blob - 066b2b6800844a04d301ae89a7bcf9c34df0f2d5
blob + aa4750f14829fe975ae0d3daa18055adee39bec0
--- src/common/progressindicator.c
+++ src/common/progressindicator.c
@@ -14,11 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#include "config.h"
-
 #include <glib.h>
 
 #include "hooks.h"
blob - ea223613b8cfaf678f16aa7aa1decfba7c5f5907
blob + 016bcdcc22a4a6cf08952aaa852eac588dd064b0
--- src/common/quoted-printable.c
+++ src/common/quoted-printable.c
@@ -14,11 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <ctype.h>
 
blob - 27c8ef31d65613d80e372d9be34afe36ca51195b
blob + fc978ef17282eeb94bc19090a4da579f2894885f
--- src/common/session.c
+++ src/common/session.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
@@ -67,10 +62,8 @@ void session_init(Session *session, const void *prefs_
 	session->sock = NULL;
 	session->server = NULL;
 	session->port = 0;
-#ifdef USE_GNUTLS
 	session->ssl_type = SSL_NONE;
 	session->use_tls_sni = TRUE;
-#endif
 	session->nonblocking = TRUE;
 	session->state = SESSION_READY;
 	session->last_access_time = time(NULL);
@@ -171,7 +164,6 @@ static gint session_connect_cb(SockInfo *sock, gpointe
 	sock->is_smtp = session->is_smtp;
 	sock->ssl_cert_auto_accept = TRUE;
 
-#ifdef USE_GNUTLS
 	sock->gnutls_priority = session->gnutls_priority;
 	sock->use_tls_sni = session->use_tls_sni;
 
@@ -186,7 +178,6 @@ static gint session_connect_cb(SockInfo *sock, gpointe
 			return -1;
 		}
 	}
-#endif
 
 	/* we could have gotten a timeout while waiting for user input in
 	 * an SSL certificate dialog */
@@ -242,9 +233,7 @@ void session_destroy(Session *session)
 	g_byte_array_free(session->read_data_buf, TRUE);
 	g_free(session->read_data_terminator);
 	g_free(session->write_buf);
-#ifdef USE_GNUTLS
 	g_free(session->gnutls_priority);
-#endif
 	g_date_time_unref(session->tv_prev);
 	debug_print("session (%p): destroyed\n", session);
 
@@ -378,7 +367,6 @@ static gint session_close(Session *session)
 	return 0;
 }
 
-#ifdef USE_GNUTLS
 gint session_start_tls(Session *session)
 {
 	gboolean nb_mode;
@@ -411,7 +399,6 @@ gint session_start_tls(Session *session)
 
 	return 0;
 }
-#endif
 
 gint session_send_msg(Session *session, const gchar *msg)
 {
blob - f3b028415b965a828068ca32d497e096991516f4
blob + 2d8ccb012c2dfb2ab48f43d9ecff1616083eaa41
--- src/common/session.h
+++ src/common/session.h
@@ -147,11 +147,9 @@ struct _Session
 	gboolean ssl_cert_auto_accept;
 	gint ping_tag;
 
-#ifdef USE_GNUTLS
 	SSLType ssl_type;
 	gchar *gnutls_priority;
 	gboolean use_tls_sni;
-#endif
 };
 
 void session_init		(Session	*session,
@@ -188,9 +186,7 @@ void session_set_send_data_notify	(Session	*session,
 					 SendDataNotify	 notify_func,
 					 gpointer	 data);
 
-#ifdef USE_GNUTLS
 gint session_start_tls	(Session	*session);
-#endif
 
 gint session_send_msg	(Session	*session,
 			 const gchar	*msg);
blob - 2464599b5e27158a987b89a3dab27f9dbbfce972
blob + 093452c1ee6d3abb012ec0a07a64a5fabc170e62
--- src/common/smtp.c
+++ src/common/smtp.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #ifdef ENABLE_NLS
 #include <glib/gi18n.h>
@@ -39,12 +34,8 @@
 static void smtp_session_destroy(Session *session);
 
 static gint smtp_auth(SMTPSession *session);
-#ifdef USE_GNUTLS
 static gint smtp_starttls(SMTPSession *session);
-#endif
-#ifdef USE_OAUTH2
 static gint smtp_auth_oauth2(SMTPSession *session);
-#endif
 static gint smtp_auth_login(SMTPSession *session);
 static gint smtp_auth_plain(SMTPSession *session);
 
@@ -80,10 +71,7 @@ Session *smtp_session_new(void *prefs_account)
 	SESSION(session)->destroy          = smtp_session_destroy;
 
 	session->state                     = SMTP_READY;
-
-#ifdef USE_GNUTLS
 	session->tls_init_done             = FALSE;
-#endif
 
 	session->hostname                  = NULL;
 	session->user                      = NULL;
@@ -168,13 +156,13 @@ static gint smtp_auth(SMTPSession *session)
                  &&
 		  (session->avail_auth_type & SMTPAUTH_PLAIN) != 0)
 		smtp_auth_plain(session);
-#ifdef USE_OAUTH2
+
 	else if ((session->forced_auth_type == SMTPAUTH_OAUTH2
 		  || session->forced_auth_type == 0)
                  &&
 		  (session->avail_auth_type & SMTPAUTH_OAUTH2) != 0)
 		smtp_auth_oauth2(session);
-#endif
+
 	else if (session->forced_auth_type == 0) {
 		log_warning(LOG_PROTOCOL, _("No SMTP AUTH method available\n"));
 		return SM_AUTHFAIL;
@@ -271,10 +259,8 @@ static gint smtp_ehlo_recv(SMTPSession *session, const
 				session->avail_auth_type |= SMTPAUTH_PLAIN;
 			if (strcasestr(p, "LOGIN"))
 				session->avail_auth_type |= SMTPAUTH_LOGIN;
-#ifdef USE_GNUTLS
 			if (strcasestr(p, "XOAUTH2"))
 				session->avail_auth_type |= SMTPAUTH_OAUTH2;
-#endif
 		}
 		if (g_ascii_strncasecmp(p, "SIZE", 4) == 0) {
 			p += 5;
@@ -296,7 +282,6 @@ static gint smtp_ehlo_recv(SMTPSession *session, const
 	return SM_ERROR;
 }
 
-#ifdef USE_GNUTLS
 static gint smtp_starttls(SMTPSession *session)
 {
 	session->state = SMTP_STARTTLS;
@@ -307,7 +292,6 @@ static gint smtp_starttls(SMTPSession *session)
 
 	return SM_OK;
 }
-#endif
 
 static gint smtp_auth_plain(SMTPSession *session)
 {
@@ -337,7 +321,6 @@ static gint smtp_auth_plain(SMTPSession *session)
 	return SM_OK;
 }
 
-#ifdef USE_OAUTH2
 static gint smtp_auth_oauth2(SMTPSession *session)
 {
 	gchar buf[MESSAGEBUFSIZE], *b64buf, *out;
@@ -366,7 +349,6 @@ static gint smtp_auth_oauth2(SMTPSession *session)
 
 	return SM_OK;
 }
-#endif
 
 static gint smtp_auth_login(SMTPSession *session)
 {
@@ -486,9 +468,7 @@ static gint smtp_session_recv_msg(Session *session, co
 	case SMTP_AUTH_PLAIN:
 	case SMTP_AUTH_LOGIN_USER:
 	case SMTP_AUTH_LOGIN_PASS:
-#ifdef USE_GNUTLS
         case SMTP_AUTH_OAUTH2:
-#endif
 	default:
 		log_print(LOG_PROTOCOL, "SMTP< %s\n", msg);
 		break;
@@ -539,12 +519,8 @@ static gint smtp_session_recv_msg(Session *session, co
 	case SMTP_READY:
 		if (strstr(msg, "ESMTP"))
 			smtp_session->is_esmtp = TRUE;
-#ifdef USE_GNUTLS
 		if (smtp_session->user || session->ssl_type != SSL_NONE ||
 		    smtp_session->is_esmtp)
-#else
-		if (smtp_session->user || smtp_session->is_esmtp)
-#endif
 			ret = smtp_ehlo(smtp_session);
 		else
 			ret = smtp_helo(smtp_session);
@@ -567,29 +543,24 @@ static gint smtp_session_recv_msg(Session *session, co
 			smtp_session->error_val = SM_ERROR;
 			return -1;
 		}
-#ifdef USE_GNUTLS
 		if (session->ssl_type == SSL_STARTTLS &&
 		    smtp_session->tls_init_done == FALSE) {
 			ret = smtp_starttls(smtp_session);
 			break;
 		}
-#endif
 		if (smtp_session->user) {
 			if (smtp_auth(smtp_session) != SM_OK) {
-#ifdef USE_GNUTLS
 				if (session->ssl_type == SSL_NONE
 				&&  smtp_session->tls_init_done == FALSE
 				&&  (smtp_session->avail_auth_type & SMTPAUTH_TLS_AVAILABLE))
 					ret = smtp_starttls(smtp_session);
 				else
-#endif
 					ret = smtp_from(smtp_session);
 			}
 		} else
 			ret = smtp_from(smtp_session);
 		break;
 	case SMTP_STARTTLS:
-#ifdef USE_GNUTLS
 		if (session_start_tls(session) < 0) {
 			log_warning(LOG_PROTOCOL, _("couldn't start STARTTLS session\n"));
 			smtp_session->state = SMTP_ERROR;
@@ -598,7 +569,6 @@ static gint smtp_session_recv_msg(Session *session, co
 		}
 		smtp_session->tls_init_done = TRUE;
 		ret = smtp_ehlo(smtp_session);
-#endif
 		break;
 	case SMTP_AUTH:
 		ret = smtp_auth_recv(smtp_session, msg);
@@ -608,9 +578,7 @@ static gint smtp_session_recv_msg(Session *session, co
 		break;
 	case SMTP_AUTH_PLAIN:
 	case SMTP_AUTH_LOGIN_PASS:
-#ifdef USE_GNUTLS
         case SMTP_AUTH_OAUTH2:
-#endif
 	case SMTP_FROM:
 		if (smtp_session->cur_to)
 			ret = smtp_rcpt(smtp_session);
blob - d5671a4f5ff0042ec91f7adc07c43df44b6356fb
blob + 6641ee5d762786c9b53eeea2a4a5551299040bda
--- src/common/smtp.h
+++ src/common/smtp.h
@@ -115,10 +115,7 @@ struct _SMTPSession
 	ESMTPFlag esmtp_flags;
 
 	void *dialog;
-
-#ifdef USE_GNUTLS
 	gboolean tls_init_done;
-#endif
 };
 
 Session *smtp_session_new	(void *prefs_account);
blob - 31a87cec8d660bd69a57da34c5c3da5a9515fbf3
blob + d7a5649003d5be319e090b51977f8d13c150ccd8
--- src/common/socket.c
+++ src/common/socket.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 
@@ -48,9 +43,7 @@
 #include "socket.h"
 #include "utils.h"
 #include "log.h"
-#ifdef USE_GNUTLS
-#  include "ssl.h"
-#endif
+#include "ssl.h"
 
 #if USE_GIO
 #error USE_GIO is currently not supported
@@ -109,7 +102,6 @@ static guint io_timeout = 60;
 
 static GList *sock_connect_data_list = NULL;
 
-#ifdef USE_GNUTLS
 static gboolean ssl_sock_prepare	(GSource	*source,
 					 gint		*timeout);
 static gboolean ssl_sock_check		(GSource	*source);
@@ -124,7 +116,6 @@ GSourceFuncs ssl_watch_funcs = {
 	NULL,
 	NULL
 };
-#endif
 
 static gint sock_connect_with_timeout	(gint			 sock,
 					 const struct sockaddr	*serv_addr,
@@ -371,7 +362,6 @@ gboolean sock_is_nonblocking_mode(SockInfo *sock)
 }
 
 
-#ifdef USE_GNUTLS
 static gboolean ssl_sock_prepare(GSource *source, gint *timeout)
 {
 	*timeout = 1;
@@ -415,7 +405,6 @@ static gboolean ssl_sock_dispatch(GSource *source, GSo
 
 	return sock->callback(sock, sock->condition, sock->data);
 }
-#endif
 
 static gboolean sock_watch_cb(GIOChannel *source, GIOCondition condition,
 			      gpointer data)
@@ -438,9 +427,7 @@ guint sock_add_watch(SockInfo *sock, GIOCondition cond
 	sock->condition = condition;
 	sock->data = data;
 
-#ifdef USE_GNUTLS
-	if (sock->ssl)
-	{
+	if (sock->ssl) {
 		GSource *source = g_source_new(&ssl_watch_funcs,
 					       sizeof(SockSource));
 		((SockSource *) source)->sock = sock;
@@ -450,7 +437,6 @@ guint sock_add_watch(SockInfo *sock, GIOCondition cond
 		g_source_unref (source); /* Refcount back down to 1 */
 		return sock->g_source;
 	}
-#endif
 
 	return g_io_add_watch(sock->sock_ch, condition, sock_watch_cb, sock);
 }
@@ -1090,7 +1076,6 @@ static gint fd_read(gint fd, gchar *buf, gint len)
 	return read(fd, buf, len);
 }
 
-#if USE_GNUTLS
 static gint ssl_read(gnutls_session_t ssl, gchar *buf, gint len)
 {
 	gint r;
@@ -1131,7 +1116,6 @@ static gint ssl_read(gnutls_session_t ssl, gchar *buf,
 	}
 
 }
-#endif
 
 gint sock_read(SockInfo *sock, gchar *buf, gint len)
 {
@@ -1139,11 +1123,9 @@ gint sock_read(SockInfo *sock, gchar *buf, gint len)
 
 	cm_return_val_if_fail(sock != NULL, -1);
 
-#ifdef USE_GNUTLS
 	if (sock->ssl)
 		ret = ssl_read(sock->ssl, buf, len);
 	else
-#endif
 		ret = fd_read(sock->sock, buf, len);
 
 	if (ret < 0)
@@ -1158,7 +1140,6 @@ gint fd_write(gint fd, const gchar *buf, gint len)
 	return write(fd, buf, len);
 }
 
-#if USE_GNUTLS
 static gint ssl_write(gnutls_session_t ssl, const gchar *buf, gint len)
 {
 	gint ret;
@@ -1180,19 +1161,15 @@ static gint ssl_write(gnutls_session_t ssl, const gcha
 	}
 }
 
-#endif
-
 gint sock_write(SockInfo *sock, const gchar *buf, gint len)
 {
 	gint ret;
 
 	cm_return_val_if_fail(sock != NULL, -1);
 
-#ifdef USE_GNUTLS
 	if (sock->ssl)
 		ret = ssl_write(sock->ssl, buf, len);
 	else
-#endif
 		ret = fd_write(sock->sock, buf, len);
 
 	if (ret < 0)
@@ -1222,7 +1199,6 @@ gint fd_write_all(gint fd, const gchar *buf, gint len)
 	return wrlen;
 }
 
-#ifdef USE_GNUTLS
 static gint ssl_write_all(gnutls_session_t ssl, const gchar *buf, gint len)
 {
 	gint n, wrlen = 0;
@@ -1238,7 +1214,6 @@ static gint ssl_write_all(gnutls_session_t ssl, const 
 
 	return wrlen;
 }
-#endif
 
 gint sock_write_all(SockInfo *sock, const gchar *buf, gint len)
 {
@@ -1246,11 +1221,9 @@ gint sock_write_all(SockInfo *sock, const gchar *buf, 
 
 	cm_return_val_if_fail(sock != NULL, -1);
 
-#ifdef USE_GNUTLS
 	if (sock->ssl)
 		ret = ssl_write_all(sock->ssl, buf, len);
 	else
-#endif
 		ret = fd_write_all(sock->sock, buf, len);
 
 	if (ret < 0)
@@ -1278,13 +1251,11 @@ gint sock_close(SockInfo *sock, gboolean close_fd)
 	if (sock->sock_ch)
 		g_io_channel_unref(sock->sock_ch);
 
-#ifdef USE_GNUTLS
 	if (sock->ssl)
 		ssl_done_socket(sock);
 	if (sock->g_source != 0 && g_main_context_find_source_by_id(NULL, sock->g_source) != NULL)
 		g_source_remove(sock->g_source);
 	sock->g_source = 0;
-#endif
 	if (close_fd)
 		ret = close(sock->sock);
 
blob - 4e1f576a53b0a29693f9050ee66f1f2dd1eef388
blob + 6cb3bf2e55e24fad696f842573cb338bfa3fb971
--- src/common/socket.h
+++ src/common/socket.h
@@ -28,9 +28,7 @@
 
 typedef struct _SockInfo	SockInfo;
 
-#ifdef USE_GNUTLS
-#  include "ssl.h"
-#endif
+#include "ssl.h"
 
 typedef enum
 {
@@ -51,18 +49,11 @@ typedef gboolean (*SockFunc)		(SockInfo	*sock,
 struct _SockInfo
 {
 	gint sock;
-#if USE_GNUTLS
 	gnutls_session_t ssl;
 	gnutls_certificate_credentials_t xcred;
-#if GNUTLS_VERSION_NUMBER < 0x030000
-	gnutls_x509_crt_t client_crt;
-	gnutls_x509_privkey_t client_key;
-#else
 	gnutls_pcert_st client_crt;
 	gnutls_privkey_t client_key;
-#endif /* GNUTLS_VERSION_NUMBER < 0x030000 */
 	gchar *gnutls_priority;
-#endif
 	guint g_source;
 	GIOChannel *sock_ch;
 
blob - c5e71f2c6ee5ed42daf87523605c65f2a3b19973
blob + 1e3e0e0bc3de23820ff52048228a7c77f7a3487d
--- src/common/ssl.c
+++ src/common/ssl.c
@@ -17,12 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
 #include "defs.h"
 
 #include <stdlib.h>
@@ -37,11 +31,6 @@
 #include "ssl_certificate.h"
 #include "hooks.h"
 
-#if GNUTLS_VERSION_NUMBER <= 0x020b00
-#include <gcrypt.h>
-GCRY_THREAD_OPTION_PTHREAD_IMPL;
-#endif
-
 #include <libetpan/mailstream_ssl.h>
 
 #include <pthread.h>
@@ -51,77 +40,9 @@ typedef struct _thread_data {
 	gboolean done;
 } thread_data;
 
-#if GNUTLS_VERSION_NUMBER < 0x030400
-#define DEFAULT_GNUTLS_PRIORITY "NORMAL:-VERS-SSL3.0"
-#else
 #define DEFAULT_GNUTLS_PRIORITY "NORMAL"
-#endif
 
-#if GNUTLS_VERSION_NUMBER < 0x030000
-/* GnuTLS 3.0 introduced new API for certificate callback,
- * gnutls_certificate_set_retrieve_function2() */
-
-#if GNUTLS_VERSION_NUMBER <= 0x020c00
-static int gnutls_client_cert_cb(gnutls_session_t session,
-                               const gnutls_datum_t *req_ca_rdn, int nreqs,
-                               const gnutls_pk_algorithm_t *sign_algos,
-                               int sign_algos_length, gnutls_retr_st *st)
-#else
 static int gnutls_cert_cb(gnutls_session_t session,
-                               const gnutls_datum_t *req_ca_rdn, int nreqs,
-                               const gnutls_pk_algorithm_t *sign_algos,
-                               int sign_algos_length, gnutls_retr2_st *st)
-#endif /* GNUTLS_VERSION_NUMBER <= 0x020c00 */
-{
-	SSLClientCertHookData hookdata;
-	SockInfo *sockinfo = (SockInfo *)gnutls_session_get_ptr(session);
-	gnutls_certificate_type_t type = gnutls_certificate_type_get(session);
-	gnutls_x509_crt_t crt;
-	gnutls_x509_privkey_t key;
-
-	st->ncerts = 0;
-
-	hookdata.account = sockinfo->account;
-	hookdata.cert_path = NULL;
-	hookdata.password = NULL;
-	hookdata.is_smtp = sockinfo->is_smtp;
-	hooks_invoke(SSLCERT_GET_CLIENT_CERT_HOOKLIST, &hookdata);
-
-	if (hookdata.cert_path == NULL) {
-		g_free(hookdata.password);
-		return 0;
-	}
-
-	sockinfo->client_crt = ssl_certificate_get_x509_from_pem_file(hookdata.cert_path);
-	sockinfo->client_key = ssl_certificate_get_pkey_from_pem_file(hookdata.cert_path);
-	if (!(sockinfo->client_crt && sockinfo->client_key)) {
-		/* try pkcs12 format */
-		ssl_certificate_get_x509_and_pkey_from_p12_file(hookdata.cert_path, hookdata.password,
-			&crt, &key);
-		sockinfo->client_crt = crt;
-		sockinfo->client_key = key;
-	}
-
-	if (type == GNUTLS_CRT_X509 && sockinfo->client_crt && sockinfo->client_key) {
-		st->ncerts = 1;
-#if GNUTLS_VERSION_NUMBER <= 0x020c00
-		st->type = type;
-#else
-		st->key_type = type;
-#endif
-		st->cert.x509 = &(sockinfo->client_crt);
-		st->key.x509 = sockinfo->client_key;
-		st->deinit_all = 0;
-		g_free(hookdata.password);
-		return 0;
-	}
-	g_free(hookdata.password);
-	return 0;
-}
-
-#else /* GNUTLS_VERSION_NUMBER < 0x030000 */
-
-static int gnutls_cert_cb(gnutls_session_t session,
 		const gnutls_datum_t *req_ca_rdn,
 		int nreqs,
 		const gnutls_pk_algorithm_t *pk_algos,
@@ -183,7 +104,6 @@ static int gnutls_cert_cb(gnutls_session_t session,
 
 	return 0;
 }
-#endif /* GNUTLS_VERSION_NUMBER < 0x030000 */
 
 const gchar *claws_ssl_get_cert_file(void)
 {
@@ -238,9 +158,6 @@ const gchar *claws_ssl_get_cert_dir(void)
 
 void ssl_init(void)
 {
-#if GNUTLS_VERSION_NUMBER <= 0x020b00
-	gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
-#endif
 	mailstream_gnutls_init_not_required();
 	gnutls_global_init();
 }
@@ -415,24 +332,9 @@ gboolean ssl_init_socket(SockInfo *sockinfo)
 
 	gnutls_session_set_ptr(session, sockinfo);
 
-#if GNUTLS_VERSION_NUMBER < 0x030000
-#  if GNUTLS_VERSION_NUMBER <= 0x020c00
-	gnutls_certificate_client_set_retrieve_function(xcred, gnutls_client_cert_cb);
-#  else
-	gnutls_certificate_set_retrieve_function(xcred, gnutls_cert_cb);
-#  endif
-#else
 	debug_print("setting certificate callback function\n");
 	gnutls_certificate_set_retrieve_function2(xcred, gnutls_cert_cb);
-#endif
 
-#if GNUTLS_VERSION_NUMBER < 0x030107
-	/* Starting from GnuTLS 3.1.7, minimal size of the DH prime is
-	 * set by the priority string. By default ("NORMAL"), it is 1008
-	 * as of GnuTLS 3.3.0. */
-	gnutls_dh_set_prime_bits(session, 1008);
-#endif
-
 	if ((r = SSL_connect_nb(session)) < 0) {
 		g_warning("TLS connection failed (%s)", gnutls_strerror(r));
 		gnutls_certificate_free_credentials(xcred);
@@ -474,21 +376,10 @@ void ssl_done_socket(SockInfo *sockinfo)
 		if (sockinfo->xcred)
 			gnutls_certificate_free_credentials(sockinfo->xcred);
 		gnutls_deinit(sockinfo->ssl);
-#if GNUTLS_VERSION_NUMBER < 0x030000
-		if (sockinfo->client_crt)
-			gnutls_x509_crt_deinit(sockinfo->client_crt);
-		if (sockinfo->client_key)
-			gnutls_x509_privkey_deinit(sockinfo->client_key);
-		sockinfo->client_key = NULL;
-		sockinfo->client_crt = NULL;
-#else
 		gnutls_pcert_deinit(&sockinfo->client_crt);
 		gnutls_privkey_deinit(sockinfo->client_key);
-#endif
 		sockinfo->client_key = NULL;
 		sockinfo->xcred = NULL;
 		sockinfo->ssl = NULL;
 	}
 }
-
-#endif /* USE_GNUTLS */
blob - 82df6794f0bfb78298da0c1317011e8d9aba0d3a
blob + 2dbb02dc06d0aeef34d27f9dd75f7e898038c477
--- src/common/ssl.h
+++ src/common/ssl.h
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef __SSL_H__
@@ -30,14 +30,11 @@ typedef enum {
 	SSL_STARTTLS
 } SSLType;
 
-#ifdef USE_GNUTLS
 #include <glib.h>
 
 #include <gnutls/gnutls.h>
 #include <gnutls/x509.h>
-#if GNUTLS_VERSION_NUMBER >= 0x030000
 #include <gnutls/abstract.h>
-#endif
 
 #include "socket.h"
 
@@ -56,6 +53,5 @@ struct _SSLClientCertHookData
 };
 
 const gchar *claws_ssl_get_cert_file(void);
-#endif /* USE_GNUTLS */
 
 #endif /* __SSL_H__ */
blob - c23af85359f6638e74a46f82013f7da562aa1ebf
blob + 7bd2a781f41d37cd1f4392271426f4cf8295dc08
--- src/common/ssl_certificate.c
+++ src/common/ssl_certificate.c
@@ -16,12 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
 #include <gnutls/gnutls.h>
 #include <gnutls/x509.h>
 #include <gnutls/pkcs12.h>
@@ -99,7 +93,6 @@ char * readable_fingerprint(unsigned char *src, int le
 	return ret;
 }
 
-#if USE_GNUTLS
 static gnutls_x509_crt_t x509_crt_copy(gnutls_x509_crt_t src)
 {
     int ret;
@@ -140,7 +133,6 @@ static gnutls_x509_crt_t x509_crt_copy(gnutls_x509_crt
     free(tmp.data);
     return dest;
 }
-#endif
 
 static SSLCertificate *ssl_certificate_new(gnutls_x509_crt_t x509_cert, const gchar *host, gushort port)
 {
@@ -1079,5 +1071,3 @@ gchar *ssl_certificate_get_subject_cn(SSLCertificate *
 
 	return g_strdup(subject_cn);
 }
-
-#endif /* USE_GNUTLS */
blob - f853a3fc569969b080f70e169d9af0c6caeb78b7
blob + 6f33cd5ef02c75afdf9982368ff11274a31fb5f2
--- src/common/ssl_certificate.h
+++ src/common/ssl_certificate.h
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net> 
+ * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net>
  * and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef __SSL_CERTIFICATE_H__
@@ -25,7 +25,6 @@
 #include "claws-features.h"
 #endif
 
-#ifdef USE_GNUTLS
 #include <gnutls/gnutls.h>
 #include <gnutls/x509.h>
 
@@ -66,11 +65,10 @@ char *ssl_certificate_check_signer (SSLCertificate *ce
 
 gnutls_x509_crt_t ssl_certificate_get_x509_from_pem_file(const gchar *file);
 gnutls_x509_privkey_t ssl_certificate_get_pkey_from_pem_file(const gchar *file);
-void ssl_certificate_get_x509_and_pkey_from_p12_file(const gchar *file, 
+void ssl_certificate_get_x509_and_pkey_from_p12_file(const gchar *file,
 			const gchar *password, gnutls_x509_crt_t *crt, gnutls_x509_privkey_t *key);
 size_t gnutls_i2d_X509(gnutls_x509_crt_t x509_cert, unsigned char **output);
 size_t gnutls_i2d_PrivateKey(gnutls_x509_privkey_t pkey, unsigned char **output);
 gboolean ssl_certificate_check_subject_cn(SSLCertificate *cert);
 gchar *ssl_certificate_get_subject_cn(SSLCertificate *cert);
-#endif /* USE_GNUTLS */
 #endif /* SSL_CERTIFICATE_H */
blob - c99b4a651531c42c229a5c25b05252764129f531
blob + e5f227d4828a03f55722d353a9971b628c436383
--- src/common/string_match.c
+++ src/common/string_match.c
@@ -15,14 +15,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #ifdef ENABLE_NLS
 #include <glib/gi18n.h>
@@ -56,7 +51,7 @@ gchar *string_remove_match(gchar *buf, gint buflen, gc
 					buf[i++] = txt[j++];
 				else {
 					k = j;
-					while (txt[j] &&  j != k + match.rm_so)	
+					while (txt[j] &&  j != k + match.rm_so)
 						buf[i++] = txt[j++];
 					if (txt[j])
 						j = k + match.rm_eo;
@@ -69,7 +64,7 @@ gchar *string_remove_match(gchar *buf, gint buflen, gc
 					buflen - 1);
 			buf[buflen - 1] = 0x00;
 		}
-		return buf;		
+		return buf;
 	}
 	return txt;
 }
blob - 5a4a3251b8370edfcab37771e6aee636f0eb5188
blob + f974b90aef415621004d8c1d21d204d30edabb31
--- src/common/stringtable.c
+++ src/common/stringtable.c
@@ -14,18 +14,16 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <string.h>
 
 #include "stringtable.h"
 #include "utils.h"
 
-/* alfons - hashed string table (I wasn't content with GStringChunk; 
+/* alfons - hashed string table (I wasn't content with GStringChunk;
  * can't recall why :-) */
 
 #if 0
@@ -109,7 +107,7 @@ void string_table_free_string(StringTable *table, cons
 			string_entry_free(entry);
 		} else {
 			XXX_DEBUG ("ref-- for %s (%d)\n", entry->string,
-				   entry->ref_count); 
+				   entry->ref_count);
 		}
 	}
 }
blob - cbd45b60aa72abd3fe90bb301bc5795b94e3a2da
blob + 561ec7ad23f9c59cdba8c65fb9173c2c0c4b7928
--- src/common/template.c
+++ src/common/template.c
@@ -1,5 +1,5 @@
 /*
- * Claws Mail templates subsystem 
+ * Claws Mail templates subsystem
  * Copyright (C) 2001 Alexander Barinov
  * Copyright (C) 2001-2021 The Claws Mail team
  *
@@ -15,10 +15,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
@@ -52,7 +51,7 @@ static Template *template_load(gchar *filename)
 	tmpl->subject = NULL;
 	tmpl->from = NULL;
 	tmpl->to = NULL;
-	tmpl->cc = NULL;	
+	tmpl->cc = NULL;
 	tmpl->bcc = NULL;
 	tmpl->replyto = NULL;
 	tmpl->value = NULL;
@@ -69,9 +68,9 @@ static Template *template_load(gchar *filename)
 		else if (!g_ascii_strncasecmp(buf, "Cc:", 3))
 			tmpl->cc = g_strdup(g_strstrip(buf + 3));
 		else if (!g_ascii_strncasecmp(buf, "Bcc:", 4))
-			tmpl->bcc = g_strdup(g_strstrip(buf + 4));						
+			tmpl->bcc = g_strdup(g_strstrip(buf + 4));
 		else if (!g_ascii_strncasecmp(buf, "Reply-To:", 9))
-			tmpl->replyto = g_strdup(g_strstrip(buf + 9));						
+			tmpl->replyto = g_strdup(g_strstrip(buf + 9));
 		else if (!g_ascii_strncasecmp(buf, "Subject:", 8))
 			tmpl->subject = g_strdup(g_strstrip(buf + 8));
 	}
@@ -105,8 +104,8 @@ void template_free(Template *tmpl)
 	g_free(tmpl->from);
 	g_free(tmpl->to);
 	g_free(tmpl->cc);
-	g_free(tmpl->bcc);		
-	g_free(tmpl->replyto);		
+	g_free(tmpl->bcc);
+	g_free(tmpl->replyto);
 	g_free(tmpl->value);
 	g_free(tmpl);
 }
@@ -150,7 +149,7 @@ static gint tmpl_compare(gconstpointer tmpl1, gconstpo
 	else
 		if (filenum1 > filenum2)
 			ret = 1;
-			
+
 	return ret;
 }
 
@@ -295,7 +294,7 @@ static void template_write_config(GSList *tmpl_list)
 		g_free(new);
 		g_free(filename);
 	}
-	
+
 	/* remove other templates */
 	while (TRUE) {
 		gchar *filename = g_strconcat(path, G_DIR_SEPARATOR_S,
blob - f03f47164f229df96ee6499d494aef0eb5b30dc6 (mode 644)
blob + /dev/null
--- src/common/tests/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-include $(top_srcdir)/tests.mk
-
-common_ldadd = \
-	$(GLIB_LIBS)
-
-AM_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
-	-DLOCALEDIR=\""$(localedir)"\" \
-	-I$(top_srcdir)/src \
-	-I..
-
-TEST_PROGS += xml_test
-xml_test_SOURCES = xml_test.c
-xml_test_LDADD = $(common_ldadd) ../xml.o ../stringtable.o ../utils.o ../codeconv.o ../quoted-printable.o ../unmime.o ../file-utils.o
-
-TEST_PROGS += codeconv_test
-codeconv_test_SOURCES = codeconv_test.c
-codeconv_test_LDADD = $(common_ldadd) ../codeconv.o ../utils.o ../quoted-printable.o ../unmime.o ../file-utils.o
-
-TEST_PROGS += pkcs5_pbkdf2_test
-pkcs5_pbkdf2_test_SOURCES = pkcs5_pbkdf2_test.c
-pkcs5_pbkdf2_test_LDADD = $(common_ldadd) ../pkcs5_pbkdf2.o
-
-TEST_PROGS += unmime_test
-unmime_test_SOURCES = unmime_test.c
-unmime_test_LDADD = $(common_ldadd) ../unmime.o ../quoted-printable.o ../utils.o ../file-utils.o ../codeconv.o
-
-TEST_PROGS += utils_get_serverportfp_from_filename_test
-utils_get_serverportfp_from_filename_test_SOURCES = utils_get_serverportfp_from_filename_test.c
-utils_get_serverportfp_from_filename_test_LDADD = $(common_ldadd) ../utils.o ../file-utils.o ../codeconv.o ../quoted-printable.o ../unmime.o
-
-TEST_PROGS += utils_get_uri_part_test
-utils_get_uri_part_test_SOURCES = utils_get_uri_part_test.c
-utils_get_uri_part_test_LDADD = $(common_ldadd) ../utils.o ../file-utils.o ../codeconv.o ../quoted-printable.o ../unmime.o
-
-noinst_PROGRAMS = $(TEST_PROGS)
-
-.PHONY: test
blob - 1dc6ffba37870368e479dea0c47cc7769dc54d3b
blob + 4e9e1492c2446b26319b35d3cbf9acbcd29e8be1
--- src/common/unmime.c
+++ src/common/unmime.c
@@ -14,14 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <string.h>
 #include <ctype.h>
@@ -62,7 +57,7 @@ gchar *unmime_header(const gchar *encoded_str, gboolea
 			g_string_append(outbuf, p);
 			break;
 		}
-		
+
 		quote_p = p;
 		while ((quote_p = strchr(quote_p, '"')) != NULL) {
 			if (quote_p && quote_p < eword_begin_p) {
@@ -156,7 +151,7 @@ gchar *unmime_header(const gchar *encoded_str, gboolea
 
 		p = eword_end_p + 2;
 	}
-	
+
 	out_len = outbuf->len;
 	out_str = g_string_free(outbuf, FALSE);
 
blob - 3ecde2bdcc573b2193bab4b4874233b5f5379fe7
blob + 71f8ee79878e6bf2a0fd58fed4ac67ac08edee9c
--- src/common/utils.c
+++ src/common/utils.c
@@ -28,11 +28,6 @@
  *  ?h=glib-2-30&id=9eb65dd3ed5e1a9638595cbe10699c7606376511
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
@@ -1375,7 +1370,8 @@ const gchar *get_locale_dir(void)
 {
 	static gchar *loc_dir;
 	if (!loc_dir)
-		loc_dir = LOCALEDIR;
+		loc_dir = "/dev/null";
+		// loc_dir = LOCALEDIR;
 	return loc_dir;
 }
 
blob - 52da6b73f643007877f56353fb8e52bb35ad9c21
blob + 12472e9b4e51bb68d782c7cb31bb31403b9cbe87
--- src/common/uuencode.c
+++ src/common/uuencode.c
@@ -16,8 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
-
 #include <ctype.h>
 
 #define UUDECODE(c) (c=='`' ? 0 : c - ' ')
blob - d649c4ee484598bbb1d032a386a0b47cd92c64ce
blob + 5212692802e915ab7c545240fd22e8ffe2d8c084
--- src/common/xml.c
+++ src/common/xml.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <stdio.h>
 #include <string.h>
blob - 75a1e50aaddaa611c2b759e4e9310de89e56bbff
blob + 18771428ffd4a769a492b41e72020fdccd777f6a
--- src/common/xmlprops.c
+++ src/common/xmlprops.c
@@ -30,11 +30,6 @@
  * ***********************************************************************
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <stdio.h>
 #include <string.h>
blob - ac045ca5e3a790284df1d44f516da523325967e8
blob + a6e4db599f826dd67ad9744c6e2dec9bb32b97c9
--- src/compose.c
+++ src/compose.c
@@ -80,7 +80,6 @@
 #include "folder.h"
 #include "folder_item_prefs.h"
 #include "addr_compl.h"
-#include "quote_fmt.h"
 #include "undo.h"
 #include "foldersel.h"
 #include "toolbar.h"
@@ -223,13 +222,6 @@ static gint compose_parse_manual_headers	(Compose	*com
 static gchar *compose_parse_references		(const gchar	*ref,
 						 const gchar	*msgid);
 
-static gchar *compose_quote_fmt			(Compose	*compose,
-						 MsgInfo	*msginfo,
-						 const gchar	*fmt,
-						 const gchar	*body,
-						 gboolean	 rewrap,
-						 gboolean	 need_unescape,
-						 const gchar *err_msg);
 
 static void compose_reply_set_entry		(Compose	*compose,
 						 MsgInfo	*msginfo,
@@ -806,8 +798,6 @@ Compose *compose_generic_new(PrefsAccount *account, co
 	GtkTextView *textview;
 	GtkTextBuffer *textbuf;
 	GtkTextIter iter;
-	const gchar *subject_format = NULL;
-	const gchar *body_format = NULL;
 	gchar *mailto_from = NULL;
 	PrefsAccount *mailto_account = NULL;
 	MsgInfo* dummyinfo = NULL;
@@ -876,74 +866,6 @@ Compose *compose_generic_new(PrefsAccount *account, co
 
 	compose_add_field_list( compose, listAddress );
 
-	if (prefs_common.compose_with_format) {
-		subject_format = prefs_common.compose_subject_format;
-		body_format = prefs_common.compose_body_format;
-	}
-
-	if (subject_format || body_format) {
-
-		if ( subject_format
-			 && *subject_format != '\0' )
-		{
-			gchar *subject = NULL;
-			gchar *tmp = NULL;
-			gchar *buf = NULL;
-
-			if (!dummyinfo)
-				dummyinfo = compose_msginfo_new_from_compose(compose);
-
-			/* decode \-escape sequences in the internal representation of the quote format */
-			tmp = g_malloc(strlen(subject_format)+1);
-			pref_get_unescaped_pref(tmp, subject_format);
-
-			subject = gtk_editable_get_chars(GTK_EDITABLE(compose->subject_entry), 0, -1);
-			quote_fmt_init(dummyinfo, NULL, subject, FALSE, compose->account, FALSE);
-
-			quote_fmt_scan_string(tmp);
-			quote_fmt_parse();
-
-			buf = quote_fmt_get_buffer();
-			if (buf == NULL)
-				alertpanel_error(_("New message subject format error."));
-			else
-				gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), buf);
-			compose_attach_from_list(compose, quote_fmt_get_attachments_list(), FALSE);
-			quote_fmt_reset_vartable();
-			quote_fmtlex_destroy();
-
-			g_free(subject);
-			g_free(tmp);
-			mfield = SUBJECT_FIELD_PRESENT;
-		}
-
-		if ( body_format
-			 && *body_format != '\0' )
-		{
-			GtkTextView *text;
-			GtkTextBuffer *buffer;
-			GtkTextIter start, end;
-			gchar *tmp = NULL;
-
-			if (!dummyinfo)
-				dummyinfo = compose_msginfo_new_from_compose(compose);
-
-			text = GTK_TEXT_VIEW(compose->text);
-			buffer = gtk_text_view_get_buffer(text);
-			gtk_text_buffer_get_start_iter(buffer, &start);
-			gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
-			tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
-
-			compose_quote_fmt(compose, dummyinfo, body_format, tmp, FALSE, TRUE,
-						  _("The body of the \"New message\" template has an error at line %d."));
-			compose_attach_from_list(compose, quote_fmt_get_attachments_list(), FALSE);
-			quote_fmt_reset_vartable();
-
-			g_free(tmp);
-			mfield = BODY_FIELD_PRESENT;
-		}
-
-	}
 	procmsg_msginfo_free( &dummyinfo );
 
 	if (attach_files) {
@@ -1006,11 +928,7 @@ Compose *compose_generic_new(PrefsAccount *account, co
 		     * is therefore created before placing the cursor
 		     */
 		case BODY_FIELD_PRESENT:
-			cursor_pos = quote_fmt_get_cursor_pos();
-			if (cursor_pos == -1)
-				gtk_widget_grab_focus(compose->header_last->entry);
-			else
-				gtk_widget_grab_focus(compose->text);
+			gtk_widget_grab_focus(compose->text);
 			break;
 	}
 
@@ -1362,26 +1280,6 @@ static Compose *compose_generic_reply(MsgInfo *msginfo
 
 	undo_block(compose->undostruct);
 
-	if (quote_mode == COMPOSE_QUOTE_FORCED ||
-			(quote_mode == COMPOSE_QUOTE_CHECK && prefs_common.reply_with_quote)) {
-		/* use the reply format of folder (if enabled), or the account's one
-		   (if enabled) or fallback to the global reply format, which is always
-		   enabled (even if empty). */
-		quote = TRUE;
-		body_fmt = "";
-		if (prefs_common.quotefmt && *prefs_common.quotefmt) {
-			body_fmt = prefs_common.quotefmt;
-		}
-	}
-
-	if (quote) {
-		compose_quote_fmt(compose, compose->replyinfo,
-			          body_fmt, body, FALSE, TRUE,
-					  _("The body of the \"Reply\" template has an error at line %d."));
-		compose_attach_from_list(compose, quote_fmt_get_attachments_list(), FALSE);
-		quote_fmt_reset_vartable();
-	}
-
 	if (MSG_IS_ENCRYPTED(compose->replyinfo->flags)) {
 		compose_force_encryption(compose, account, FALSE, s_system);
 	}
@@ -1507,26 +1405,6 @@ Compose *compose_forward(PrefsAccount *account, MsgInf
 					      "message/rfc822", NULL);
 
 		g_free(msgfile);
-	} else {
-		MsgInfo *full_msginfo;
-
-		full_msginfo = procmsg_msginfo_get_full_info(msginfo);
-		if (!full_msginfo)
-			full_msginfo = procmsg_msginfo_copy(msginfo);
-
-		gchar *body_fmt = "";
-		if (prefs_common.fw_quotefmt && *prefs_common.fw_quotefmt) {
-			body_fmt = prefs_common.fw_quotefmt;
-		}
-
-		compose_quote_fmt(compose, full_msginfo,
-			          body_fmt, body, FALSE, TRUE,
-					  _("The body of the \"Forward\" template has an error at line %d."));
-		compose_attach_from_list(compose, quote_fmt_get_attachments_list(), FALSE);
-		quote_fmt_reset_vartable();
-		compose_attach_parts(compose, msginfo);
-
-		procmsg_msginfo_free(&full_msginfo);
 	}
 
 	SIGNAL_BLOCK(textbuf);
@@ -1542,11 +1420,7 @@ Compose *compose_forward(PrefsAccount *account, MsgInf
 	    (account->default_encrypt || account->default_sign))
 		COMPOSE_PRIVACY_WARNING();
 
-	cursor_pos = quote_fmt_get_cursor_pos();
-	if (cursor_pos == -1)
-		gtk_widget_grab_focus(compose->header_last->entry);
-	else
-		gtk_widget_grab_focus(compose->text);
+	gtk_widget_grab_focus(compose->text);
 
 	if (!no_extedit && prefs_common.auto_exteditor)
 		compose_exec_ext_editor(compose);
@@ -2171,9 +2045,6 @@ Compose *compose_redirect(PrefsAccount *account, MsgIn
 				   msginfo->subject);
 	gtk_editable_set_editable(GTK_EDITABLE(compose->subject_entry), FALSE);
 
-	compose_quote_fmt(compose, msginfo, "%M", NULL, FALSE, FALSE,
-					  _("The body of the \"Redirect\" template has an error at line %d."));
-	quote_fmt_reset_vartable();
 	gtk_text_view_set_editable(GTK_TEXT_VIEW(compose->text), FALSE);
 
 	compose_colorize_signature(compose);
@@ -2671,118 +2542,6 @@ static gchar *compose_parse_references(const gchar *re
 	return g_string_free(new_ref, FALSE);
 }
 
-static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
-				const gchar *fmt, const gchar *body,
-				gboolean rewrap,
-				gboolean need_unescape,
-				const gchar *err_msg)
-{
-	MsgInfo* dummyinfo = NULL;
-	gchar *quote_str = NULL;
-	gchar *buf;
-	gboolean prev_autowrap;
-	const gchar *trimmed_body = body;
-	gint cursor_pos = -1;
-	GtkTextView *text = GTK_TEXT_VIEW(compose->text);
-	GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
-	GtkTextIter iter;
-	GtkTextMark *mark;
-
-	SIGNAL_BLOCK(buffer);
-
-	if (!msginfo) {
-		dummyinfo = compose_msginfo_new_from_compose(compose);
-		msginfo = dummyinfo;
-	}
-
-	const char *qmark = "> ";
-	quote_fmt_init(msginfo, NULL, NULL, FALSE, compose->account, FALSE);
-	quote_fmt_scan_string(qmark);
-	quote_fmt_parse();
-
-	buf = quote_fmt_get_buffer();
-	if (buf == NULL)
-		alertpanel_error(_("The \"Quotation mark\" of the template is invalid."));
-	else
-		Xstrdup_a(quote_str, buf, goto error)
-
-	if (fmt && *fmt != '\0') {
-		if (trimmed_body)
-			while (*trimmed_body == '\n')
-				trimmed_body++;
-		quote_fmt_init(msginfo, quote_str, trimmed_body, FALSE, compose->account, FALSE);
-		if (need_unescape) {
-			gchar *tmp = NULL;
-
-			/* decode \-escape sequences in the internal representation of the quote format */
-			tmp = g_malloc(strlen(fmt)+1);
-			pref_get_unescaped_pref(tmp, fmt);
-			quote_fmt_scan_string(tmp);
-			quote_fmt_parse();
-			g_free(tmp);
-		} else {
-			quote_fmt_scan_string(fmt);
-			quote_fmt_parse();
-		}
-
-		buf = quote_fmt_get_buffer();
-
-		if (buf == NULL) {
-			gint line = quote_fmt_get_line();
-			alertpanel_error(err_msg, line);
-
-			goto error;
-		}
-
-	} else
-		buf = "";
-
-	prev_autowrap = compose->autowrap;
-	compose->autowrap = FALSE;
-
-	mark = gtk_text_buffer_get_insert(buffer);
-	gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark);
-	if (g_utf8_validate(buf, -1, NULL)) {
-		gtk_text_buffer_insert(buffer, &iter, buf, -1);
-	} else {
-		gchar *tmpout = NULL;
-		tmpout = conv_codeset_strdup
-			(buf, conv_get_locale_charset_str_no_utf8(),
-			 CS_INTERNAL);
-		if (!tmpout || !g_utf8_validate(tmpout, -1, NULL)) {
-			g_free(tmpout);
-			tmpout = g_malloc(strlen(buf)*2+1);
-			conv_localetodisp(tmpout, strlen(buf)*2+1, buf);
-		}
-		gtk_text_buffer_insert(buffer, &iter, tmpout, -1);
-		g_free(tmpout);
-	}
-
-	cursor_pos = quote_fmt_get_cursor_pos();
-	if (cursor_pos == -1)
-		cursor_pos = gtk_text_iter_get_offset(&iter);
-	compose->set_cursor_pos = cursor_pos;
-
-	gtk_text_buffer_get_start_iter(buffer, &iter);
-	gtk_text_buffer_get_iter_at_offset(buffer, &iter, cursor_pos);
-	gtk_text_buffer_place_cursor(buffer, &iter);
-
-	compose->autowrap = prev_autowrap;
-	if (compose->autowrap && rewrap)
-		compose_wrap_all(compose);
-
-	goto ok;
-
-error:
-	buf = NULL;
-ok:
-	SIGNAL_UNBLOCK(buffer);
-
-	procmsg_msginfo_free( &dummyinfo );
-
-	return buf;
-}
-
 /* if ml_post is of type addr@host and from is of type
  * addr-anything@host, return TRUE
  */
@@ -6163,10 +5922,7 @@ static gchar *compose_get_header(Compose *compose)
 	/* Program version and system info */
 	if (compose->account->gen_xmailer &&
 	    g_slist_length(compose->to_list) && !IS_IN_CUSTOM_HEADER("X-Mailer")) {
-		g_string_append_printf(header, "X-Mailer: %s (GTK %d.%d.%d; %s)\n",
-			prog_version,
-			gtk_major_version, gtk_minor_version, gtk_micro_version,
-			TARGET_ALIAS);
+		g_string_append_printf(header, "X-Mailer: Talons (https://git.olowe.co/talons)\n");
 	}
 
 	/* custom headers */
@@ -8485,7 +8241,7 @@ static void compose_undo_state_changed(UndoMain *undos
 	switch (undo_state) {
 	case UNDO_STATE_TRUE:
 		if (!undostruct->undo_state) {
-			undostruct->undo_state = TRUE;
+			undostruct->undo_state = 1;
 			cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Edit/Undo", TRUE);
 		}
 		break;
@@ -8508,7 +8264,7 @@ static void compose_undo_state_changed(UndoMain *undos
 	switch (redo_state) {
 	case UNDO_STATE_TRUE:
 		if (!undostruct->redo_state) {
-			undostruct->redo_state = TRUE;
+			undostruct->redo_state = 1;
 			cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Edit/Redo", TRUE);
 		}
 		break;
@@ -9112,7 +8868,6 @@ static void compose_insert_file_cb(GtkAction *action, 
 {
 	Compose *compose = (Compose *)data;
 	GList *file_list;
-	gint files_inserted = 0;
 
 	file_list = filesel_select_multiple_files_open(_("Select file"), NULL);
 
@@ -9133,8 +8888,7 @@ static void compose_insert_file_cb(GtkAction *action, 
 				alertpanel_error(_("File '%s' contained invalid characters\n"
 							"for the current encoding, insertion may be incorrect."),
 							shortfile);
-			} else if (res == COMPOSE_INSERT_SUCCESS)
-				files_inserted++;
+			}
 
 			g_free(shortfile);
 			g_free(filedup);
@@ -9338,7 +9092,6 @@ static void paste_text(Compose *compose, GtkWidget *en
 static void attach_uri_list(Compose *compose, GtkSelectionData *data)
 {
 	GList *list, *tmp;
-	int att = 0;
 	gchar *warn_files = NULL;
 
 	list = uri_list_extract_filenames(
@@ -9350,7 +9103,6 @@ static void attach_uri_list(Compose *compose, GtkSelec
 				utf8_filename);
 		g_free(warn_files);
 		warn_files = tmp_f;
-		att++;
 		compose_attach_append
 			(compose, (const gchar *)tmp->data,
 			 utf8_filename, NULL, NULL);
@@ -9527,7 +9279,6 @@ static void compose_copy_cb(GtkAction *action, gpointe
 static void compose_paste_cb(GtkAction *action, gpointer data)
 {
 	Compose *compose = (Compose *)data;
-	GtkTextBuffer *buffer;
 	if (compose->focused_editable && gtk_widget_has_focus(compose->focused_editable))
 		entry_paste_clipboard(compose, compose->focused_editable, GDK_SELECTION_CLIPBOARD, NULL);
 }
@@ -10289,36 +10040,7 @@ static void text_inserted(GtkTextBuffer *buffer, GtkTe
 					G_CALLBACK(text_inserted),
 					compose);
 	if (paste_as_quotation) {
-		gchar *new_text;
-		guint pos = 0;
-		GtkTextIter start_iter;
-
-		if (len < 0)
-			len = strlen(text);
-
-		new_text = g_strndup(text, len);
-
-		mark = gtk_text_buffer_create_mark(buffer, NULL, iter, FALSE);
-		gtk_text_buffer_place_cursor(buffer, iter);
-
-		pos = gtk_text_iter_get_offset(iter);
-
-		compose_quote_fmt(compose, NULL, "%Q", new_text, TRUE, FALSE,
-						  _("Quote format error at line %d."));
-		quote_fmt_reset_vartable();
-		g_free(new_text);
-		g_object_set_data(G_OBJECT(compose->text), "paste_as_quotation",
-				  GINT_TO_POINTER(paste_as_quotation - 1));
-
-		gtk_text_buffer_get_iter_at_mark(buffer, iter, mark);
-		gtk_text_buffer_place_cursor(buffer, iter);
-		gtk_text_buffer_delete_mark(buffer, mark);
-
-		gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, pos);
-		mark = gtk_text_buffer_create_mark(buffer, NULL, &start_iter, FALSE);
-		compose_beautify_paragraph(compose, &start_iter, FALSE);
-		gtk_text_buffer_get_iter_at_mark(buffer, &start_iter, mark);
-		gtk_text_buffer_delete_mark(buffer, mark);
+		// TODO delete
 	} else {
 		if (strcmp(text, "\n") || compose->automatic_break
 		|| gtk_text_iter_starts_line(iter)) {
blob - a84813eccf0f1673aa51f272a7341050f6bcfa02 (mode 644)
blob + /dev/null
--- src/etpan/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 1999-2014 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-noinst_LTLIBRARIES = libclawsetpan.la
-
-libclawsetpan_la_SOURCES = \
-	etpan-thread-manager.c \
-	imap-thread.c \
-	etpan-ssl.c
-
-clawsetpanincludedir = $(pkgincludedir)/etpan
-clawsetpaninclude_HEADERS = \
-	etpan-thread-manager-types.h \
-	etpan-thread-manager.h \
-	etpan-errors.h \
-	imap-thread.h \
-	etpan-ssl.h
-
-AM_CPPFLAGS = \
-	-I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/common \
-	-I$(top_srcdir)/src/gtk \
-	$(GTK_CFLAGS) \
-	$(LIBETPAN_CFLAGS)
-
-libclawsetpan_la_LIBADD = \
-	../common/libclawscommon.la \
-	$(GTK_LIBS) \
-	$(LIBETPAN_LIBS)
-
-.PHONY: test
blob - 9176b0c91e41b8325bdf597f2cb9b761340ac7d9
blob + 62097167889a97e92d832aaac84b11c5ec72faf3
--- src/etpan/etpan-ssl.c
+++ src/etpan/etpan-ssl.c
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net> 
+ * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net>
  * and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
@@ -15,15 +15,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
 #include <libetpan/libetpan.h>
 #include <libetpan/libetpan_version.h>
 #include <gnutls/gnutls.h>
@@ -162,7 +156,7 @@ void etpan_connect_ssl_context_cb(struct mailstream_ss
 		pkey_len = (size_t)gnutls_i2d_PrivateKey(pkey, &pkey_der);
 		if (x509_len > 0 && pkey_len > 0) {
 			if (mailstream_ssl_set_client_certificate_data(ssl_context, x509_der, x509_len) < 0 ||
-			    mailstream_ssl_set_client_private_key_data(ssl_context, pkey_der, pkey_len) < 0) 
+			    mailstream_ssl_set_client_private_key_data(ssl_context, pkey_der, pkey_len) < 0)
 				log_error(LOG_PROTOCOL, _("Impossible to set the client certificate.\n"));
 			g_free(x509_der);
 			g_free(pkey_der);
@@ -188,5 +182,3 @@ void etpan_connect_ssl_context_cb(struct mailstream_ss
 #endif /* LIBETPAN_API_CURRENT >= 23 */
 
 }
-
-#endif /* USE_GNUTLS */
blob - 4a862d8638aaa12002a7496b1c717f73f3fff7f0
blob + 4a285f7376bfd2c338cbcdebafd18c26054af9c3
--- src/etpan/etpan-ssl.h
+++ src/etpan/etpan-ssl.h
@@ -1,6 +1,6 @@
 /*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net> 
+ * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net>
  * and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef __ETPAN_SSL_H__
@@ -25,13 +25,9 @@
 #include "claws-features.h"
 #endif
 
-#ifdef USE_GNUTLS
-
 #include <libetpan/libetpan.h>
 
 gboolean etpan_certificate_check(mailstream *imap_stream, const char *host, gint port, gboolean accept_if_valid);
 void etpan_connect_ssl_context_cb(struct mailstream_ssl_context * ssl_context, void * data);
 
-#endif /* USE_GNUTLS */
-
 #endif /* __ETPAN_SSL_H__ */
blob - 708a95a34dfff636a38c3b910f0e1c02f5a566b1
blob + 408ad42541ecded852504e2a9054e253a1c3dab3
--- src/etpan/etpan-thread-manager.c
+++ src/etpan/etpan-thread-manager.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "etpan-thread-manager.h"
 
 #include <glib.h>
blob - e5590f47c4ae734cb1a6f9e8461c5fffd42e1335
blob + a6f33bc49d03910d5620491f6df35516239cace8
--- src/etpan/imap-thread.c
+++ src/etpan/imap-thread.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include "imap-thread.h"
@@ -541,7 +536,7 @@ int imap_threaded_connect(Folder * folder, const char 
 
 	return result.error;
 }
-#ifdef USE_GNUTLS
+
 static void connect_ssl_run(struct etpan_thread_op * op)
 {
 	int r;
@@ -602,7 +597,7 @@ int imap_threaded_connect_ssl(Folder * folder, const c
 
 	return result.error;
 }
-#endif
+
 struct capa_param {
 	mailimap * imap;
 };
@@ -888,10 +883,8 @@ static void login_run(struct etpan_thread_op * op)
 			param->type, NULL, NULL, NULL,
 			NULL, param->login,
 			param->password, NULL);
-#ifdef USE_OAUTH2
 	else if (!strcmp(param->type, "XOAUTH2"))
                 r = mailimap_oauth2_authenticate(param->imap, param->login, param->password);
-#endif
 	else
 		r = mailimap_authenticate(param->imap,
 			param->type, NULL, NULL, NULL,
@@ -1084,7 +1077,6 @@ int imap_threaded_noop(Folder * folder, unsigned int *
 	return result.error;
 }
 
-#ifdef USE_GNUTLS
 struct starttls_result {
 	int error;
 };
@@ -1158,7 +1150,6 @@ int imap_threaded_starttls(Folder * folder, const gcha
 	}
 	return result.error;
 }
-#endif
 
 struct create_param {
 	mailimap * imap;
blob - f987326d639cdc02943f93229f20670c0c832090 (mode 644)
blob + /dev/null
--- src/fence/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-all: zig-out/lib/libfence.a
-
-zig-out/lib/libfence.a: build.zig src/root.zig src/fence.h
-	zig build
-
-clean:
-	rm -rf zig-out
blob - c237df8a8a113c3a73b32d7f3b5ebd3b849ca4b3
blob + 5a03fae815e48f756e80ae455a55663d16fec102
--- src/folder.c
+++ src/folder.c
@@ -963,8 +963,6 @@ void folder_scan_tree(Folder *folder, gboolean rebuild
 
 	folder_persist_prefs_free(pptable);
 
-	prefs_matcher_read_config();
-
 	folder_write_list();
 }
 
@@ -3172,8 +3170,6 @@ static FolderItem *folder_item_move_recursive(FolderIt
 		procmsg_msg_list_free(mlist);
 	}
 
-	prefs_matcher_write_config();
-
 	/* recurse */
 	srcnode = src->folder->node;
 	srcnode = g_node_find(srcnode, G_PRE_ORDER, G_TRAVERSE_ALL, src);
@@ -4529,30 +4525,6 @@ gboolean folder_get_sort_type		(Folder		*folder,
 	return TRUE;
 }
 
-gint folder_item_search_msgs	(Folder			*folder,
-				 FolderItem		*container,
-				 MsgNumberList		**msgs,
-				 gboolean		*on_server,
-				 MatcherList		*predicate,
-				 SearchProgressNotify	progress_cb,
-				 gpointer		progress_data)
-{
-	gint result = -1;
-
-	folder_item_update_freeze();
-
-	if (folder->klass->search_msgs)
-		result = folder->klass->search_msgs(folder, container,
-				msgs, on_server, predicate, progress_cb, progress_data);
-	if (result < 0)
-		result = folder_item_search_msgs_local(folder, container,
-				msgs, on_server, predicate, progress_cb, progress_data);
-
-	folder_item_update_thaw();
-
-	return result;
-}
-
 MsgNumberList *folder_item_get_number_list(FolderItem *item)
 {
 	GSList *nums = NULL;
@@ -4564,61 +4536,6 @@ MsgNumberList *folder_item_get_number_list(FolderItem 
 	return nums;
 }
 
-gint folder_item_search_msgs_local	(Folder			*folder,
-					 FolderItem		*container,
-					 MsgNumberList		**msgs,
-					 gboolean		*on_server,
-					 MatcherList		*predicate,
-					 SearchProgressNotify	progress_cb,
-					 gpointer		progress_data)
-{
-	GSList *result = NULL;
-	GSList *cur = NULL;
-	gint matched_count = 0;
-	guint processed_count = 0;
-	gint msgcount;
-	GSList *nums = NULL;
-
-	if (*msgs == NULL) {
-		nums = folder_item_get_number_list(container);
-	} else {
-		nums = *msgs;
-	}
-
-	msgcount = g_slist_length(nums);
-
-	if (msgcount < 0)
-		return -1;
-
-	for (cur = nums; cur != NULL; cur = cur->next) {
-		guint msgnum = GPOINTER_TO_UINT(cur->data);
-		MsgInfo *msg = folder_item_get_msginfo(container, msgnum);
-
-		if (msg == NULL) {
-			g_slist_free(result);
-			return -1;
-		}
-
-		if (matcherlist_match(predicate, msg)) {
-			result = g_slist_prepend(result, GUINT_TO_POINTER(msg->msgnum));
-			matched_count++;
-		}
-		processed_count++;
-
-		procmsg_msginfo_free(&msg);
-
-		if (progress_cb != NULL
-		    && !progress_cb(progress_data, FALSE, processed_count,
-			    matched_count, msgcount))
-			break;
-	}
-
-	g_slist_free(nums);
-	*msgs = g_slist_reverse(result);
-
-	return matched_count;
-}
-
 /* Tests if a local (on disk) folder name is acceptable. */
 gboolean folder_local_name_ok(const gchar *name)
 {
blob - 930b1f6cb8af4bfafe1104de98547c6701347510
blob + 9648e6aa02201275fa3963600b64234fac95cf50
--- src/folder.h
+++ src/folder.h
@@ -194,12 +194,6 @@ struct _FolderClass
 	 * user. Can be upper and lowercase unlike the idstr.
 	 */
 	gchar	   *uistr;
-	/**
-	* A boolean to indicate whether or not the FolderClass supports search on the
-	* server. If \c TRUE, setting \c on_server in \c search_msgs offloads search to
-	* the server.
-	*/
-	gboolean    supports_server_search;
 
 	/**
 	 * Klass-specific prefs pages
@@ -533,59 +527,7 @@ struct _FolderClass
 						 FolderItem	*dest,
 						 MsgInfoList	*msglist,
                                     		 GHashTable	*relation);
-
 	/**
-	 * Search the given FolderItem for messages matching \c predicate.
-	 * The search may be offloaded to the server if the \c folder
-	 * supports server side search, as indicated by \c supports_server_search.
-	 *
-	 * \param folder The \c Folder of the container FolderItem
-	 * \param container The \c FolderItem containing the messages to be searched
-	 * \param msgs The \c MsgNumberList results will be saved to.
-	 *             If <tt>*msgs != NULL</tt>, the search will be restricted to
-	 *             messages whose numbers are contained therein.
-	 *             If \c on_server is considered \c FALSE, messages are guaranteed to
-	 *             be processed in the order they are listed in \c msgs.
-	 *             On error, \c msgs will not be changed.
-	 * \param on_server Whether or not the search should be offloaded to the server.
-	 *                  If \c on_server is not \c NULL and points to a \c TRUE value,
-	 *                  search will be done on the server. If \c predicate contains
-	 *                  one or more atoms the server does not support, the value
-	 *                  pointed to by \c on_server will be set to \c FALSE upon return.
-	 *                  In this case, \c msgs must still contain a valid superset of
-	 *                  messages actually matched by \c predicate, or this method must
-	 *                  return an error.
-	 *                  \c on_server may only point to a \c TRUE value if
-	 *                  \c supports_server_search is also \c TRUE.
-	 *                  \c NULL and pointer to \c FALSE are considered equivalent and
-	 *                  will start a client-only search.
-	 * \param predicate The \c MatcherList to use in the search
-	 * \param progress_cb Called for every message searched.
-	 *                    When search is offloaded to the server, this function
-	 *                    may or may not be called, depending on the implementation.
-	 *                    The second argument of this function will be the number of
-	 *                    messages already processed.
-	 *                    Return \c FALSE from this function to end the search.
-	 *                    May be \c NULL, no calls will be made in this case.
-	 * \param progress_data First argument value for \c progress_cb
-	 * \return Number of messages that matched \c predicate on success, a negative
-	 *         number otherwise.
-	 *
-	 * \note
-	 * When search is stopped by returning \c FALSE from \c progress_cb, \c msgs will
-	 * contain all messages found until the point of cancellation. The number of
-	 * messages found will be returned as indicated above.
-	 */
-	gint		(*search_msgs)		(Folder			*folder,
-						 FolderItem		*container,
-						 MsgNumberList		**msgs,
-						 gboolean		*on_server,
-						 MatcherList		*predicate,
-						 SearchProgressNotify	progress_cb,
-						 gpointer		progress_data);
-
-
-	/**
 	 * Remove a message from a \c FolderItem.
 	 *
 	 * \param folder The \c Folder of the message
@@ -941,13 +883,7 @@ gint   folder_item_copy_msg		(FolderItem	*dest,
 					 MsgInfo	*msginfo);
 gint   folder_item_copy_msgs		(FolderItem	*dest,
 					 GSList		*msglist);
-gint   folder_item_search_msgs		(Folder			*folder,
-					 FolderItem		*container,
-					 MsgNumberList		**msgs,
-					 gboolean		*on_server,
-					 MatcherList		*predicate,
-					 SearchProgressNotify	progress_cb,
-					 gpointer		progress_data);
+
 gint   folder_item_remove_msg		(FolderItem	*item,
 					 gint		 num);
 gint   folder_item_remove_msgs		(FolderItem	*item,
@@ -987,16 +923,6 @@ void folder_item_synchronise		(FolderItem *item);
 void folder_item_discard_cache		(FolderItem *item);
 void folder_item_commit_tags(FolderItem *item, MsgInfo *msginfo, GSList *tags_set, GSList *tags_unset);
 
-
-
-gint folder_item_search_msgs_local	(Folder			*folder,
-					 FolderItem		*container,
-					 MsgNumberList		**msgs,
-					 gboolean		*on_server,
-					 MatcherList		*predicate,
-					 SearchProgressNotify	progress_cb,
-					 gpointer		progress_data);
-
 gchar *folder_get_list_path	(void);
 gboolean folder_local_name_ok(const gchar *name);
 
blob - 3c552ac900de8a6849c6325141d72e3a9f033870
blob + 3d6a77763cd6c1369c216d8f196bd0524ba832c5
--- src/folder_item_prefs.c
+++ src/folder_item_prefs.c
@@ -225,8 +225,6 @@ void folder_item_prefs_copy_prefs(FolderItem * src, Fo
 	tmp_prefs.render_html                   = src->prefs->render_html;
 	tmp_prefs.skip_on_goto_unread_or_new    = src->prefs->skip_on_goto_unread_or_new;
 
-	prefs_matcher_read_config();
-
 	tmp_prefs.processing			= tmp_prop_list;
 
 	tmp_prefs.enable_default_from		= src->prefs->enable_default_from;
@@ -253,7 +251,6 @@ void folder_item_prefs_copy_prefs(FolderItem * src, Fo
 
 	*dest->prefs = tmp_prefs;
 	folder_item_prefs_save_config(dest);
-	prefs_matcher_write_config();
 
 	dest->collapsed = src->collapsed;
 	dest->thread_collapsed = src->thread_collapsed;
blob - 588a5f134853252a0c5ac97da10b81f55d54628d
blob + 2c4224d63379ef82188497658fee90ecc6e88feb
--- src/foldersel.c
+++ src/foldersel.c
@@ -16,7 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
blob - d15f62336d67bfc15c132b150edf423e80be335d
blob + 3d04e1885c1d8758464be6462a0e039ee08103da
--- src/folderutils.c
+++ src/folderutils.c
@@ -17,8 +17,6 @@
  *
  */
 
-#include "config.h"
-
 #include <glib.h>
 
 #include "utils.h"
blob - 46ac7693cd6b9c0f53511f61e9d74f96d17543ec
blob + 5b807c82b3cb5c7e37fa5144cbdcabe11a348d0b
--- src/folderview.c
+++ src/folderview.c
@@ -16,7 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
@@ -31,7 +30,6 @@
 #include "mainwindow.h"
 #include "folderview.h"
 #include "summaryview.h"
-#include "summary_search.h"
 #include "inputdialog.h"
 #include "manage_window.h"
 #include "alertpanel.h"
@@ -51,7 +49,6 @@
 #include "hooks.h"
 #include "folderutils.h"
 #include "prefs_folder_column.h"
-#include "quicksearch.h"
 #include "manual.h"
 #include "log.h"
 #include "gtkcmctree.h"
@@ -181,8 +178,6 @@ static void folderview_empty_trash_cb	(GtkAction 	*act
 static void folderview_send_queue_cb	(GtkAction 	*action,
 					 gpointer	 data);
 
-static void folderview_search_cb	(GtkAction 	*action,
-					 gpointer	 data);
 static void folderview_startup_folder_cb(GtkAction	*action,
 					 gpointer	 data);
 
@@ -243,7 +238,6 @@ static GtkActionEntry folderview_common_popup_entries[
 	{"FolderViewPopup/MarkAllReadRec",   NULL, N_("Mark all read recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_read_recursive_cb) },
 	{"FolderViewPopup/MarkAllUnreadRec", NULL, N_("Mark all unread recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_unread_recursive_cb) },
 	{"FolderViewPopup/---",              NULL, "---", NULL, NULL , NULL},
-	{"FolderViewPopup/SearchFolder",     NULL, N_("_Search folder..."), NULL, NULL, G_CALLBACK(folderview_search_cb) },
 	{"FolderViewPopup/OpenFolder",       NULL, N_("Open on start-up"), NULL, NULL, G_CALLBACK(folderview_startup_folder_cb) },
 	{"FolderViewPopup/Properties",       NULL, N_("_Properties..."), NULL, NULL, G_CALLBACK(folderview_property_cb) },
 	{"FolderViewPopup/EmptyTrash",       NULL, N_("Empty _trash..."), NULL, NULL, G_CALLBACK(folderview_empty_trash_cb) },
@@ -1733,8 +1727,7 @@ static gboolean folderview_update_item_claws(gpointer 
 		if ((update_info->update_flags & F_ITEM_UPDATE_CONTENT) &&
 		     update_info->item == folderview->summaryview->folder_item &&
 		     update_info->item != NULL)
-			if (!quicksearch_has_sat_predicate(folderview->summaryview->quicksearch))
-				summary_show(folderview->summaryview, update_info->item, FALSE);
+			summary_show(folderview->summaryview, update_info->item, FALSE);
 	}
 
 	return FALSE;
@@ -1883,7 +1876,6 @@ static void folderview_set_sens_and_popup_menu(FolderV
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllReadRec", "FolderViewPopup/MarkAllReadRec", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllUnreadRec", "FolderViewPopup/MarkAllUnreadRec", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Separator1", "FolderViewPopup/---", GTK_UI_MANAGER_SEPARATOR)
-	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "SearchFolder", "FolderViewPopup/SearchFolder", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "OpenFolder", "FolderViewPopup/OpenFolder", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Properties", "FolderViewPopup/Properties", GTK_UI_MANAGER_MENUITEM)
 
@@ -1915,8 +1907,6 @@ static void folderview_set_sens_and_popup_menu(FolderV
 		(item->unread_msgs != (item->total_msgs - item->ignored_msgs)));
 	SET_SENS("FolderViewPopup/MarkAllReadRec", folderview_have_unread_children(folderview,item));
 	SET_SENS("FolderViewPopup/MarkAllUnreadRec", folderview_have_read_children(folderview,item));
-	SET_SENS("FolderViewPopup/SearchFolder", item->total_msgs > 0 &&
-		 folderview->selected == folderview->opened);
 	SET_SENS("FolderViewPopup/Properties", TRUE);
 
 	if (item->node->parent != NULL) {
@@ -2040,9 +2030,6 @@ static gboolean folderview_key_pressed(GtkWidget *widg
 
 	if (!event) return FALSE;
 
-	if (quicksearch_has_focus(folderview->summaryview->quicksearch))
-		return FALSE;
-
 	switch (event->keyval) {
 	case GDK_KEY_Right:
 		if (folderview->selected) {
@@ -2475,12 +2462,6 @@ static void folderview_send_queue_cb(GtkAction *action
 	}
 }
 
-static void folderview_search_cb(GtkAction *action, gpointer data)
-{
-	FolderView *folderview = (FolderView *)data;
-	summary_search(folderview->summaryview);
-}
-
 static void folderview_startup_folder_cb(GtkAction *action, gpointer data)
 {
 	FolderView *folderview = (FolderView *)data;
blob - 78c9b0120d245e697b134201337489bcb84dea0b (mode 644)
blob + /dev/null
--- src/gtk/Makefile.am
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright 1999-2014 the Claws Mail team.
-# This file is part of Claws Mail package, and distributed under the
-# terms of the General Public License version 3 (or later).
-# See COPYING file for license details.
-
-DOCDIR = $(docdir)
-
-noinst_LTLIBRARIES = libclawsgtk.la
-
-EXTRA_DIST = \
-	claws-marshal.list
-
-libclawsgtk_la_SOURCES = \
-	about.c \
-	combobox.c \
-	description_window.c \
-	filesel.c \
-	foldersort.c \
-	gtkcmctree.c \
-	gtkcmclist.c \
-	gtksctree.c \
-	gtkunit.c \
-	gtkutils.c \
-	gtkvscrollbutton.c \
-	icon_legend.c \
-	inputdialog.c \
-	logwindow.c \
-	manage_window.c \
-	menu.c \
-	prefswindow.c \
-	progressdialog.c \
-	quicksearch.c \
-	claws-marshal.c
-
-clawsgtkincludedir = $(pkgincludedir)/gtk
-clawsgtkinclude_HEADERS = \
-	about.h \
-	authors.h \
-	combobox.h \
-	description_window.h \
-	filesel.h \
-	foldersort.h \
-	gtkutils.h \
-	gtkunit.h \
-	gtkvscrollbutton.h \
-	headers.h \
-	icon_legend.h \
-	inputdialog.h \
-	logwindow.h \
-	manage_window.h \
-	menu.h \
-	prefswindow.h \
-	progressdialog.h \
-	quicksearch.h \
-	claws-marshal.h \
-	gtkcmctree.h \
-	gtkcmclist.h \
-	gtksctree.h
-
-AM_CPPFLAGS = \
-	-I$(srcdir)/../common \
-	-I../common \
-	-I$(srcdir)/.. \
-	-I$(builddir)/.. \
-	$(GTK_CFLAGS) \
-	-DDOCDIR=\"$(DOCDIR)\"
-
-libclawsgtk_la_LIBADD = \
-	../common/libclawscommon.la \
-	$(GTK_LIBS)
-
-BUILT_SOURCES=claws-marshal.c claws-marshal.h
-
-claws-marshal.h: claws-marshal.list
-	$(GLIB_GENMARSHAL) $< --header --prefix=claws_marshal > $@
-
-claws-marshal.c: claws-marshal.list
-	$(GLIB_GENMARSHAL) $< --body --prefix=claws_marshal > $@
-
-.PHONY: test
blob - c6f56769d383857f8c82f7e8229b6e580465aea9
blob + 3457dc938b74465c949d8037adca44abcdfe0e77
--- src/gtk/about.c
+++ src/gtk/about.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <glib.h>
@@ -376,21 +371,13 @@ static GtkWidget *about_create_child_page_features(voi
 	stock_pixbuf_gdk(STOCK_PIXMAP_CHECKBOX_ON, &active_pixbuf);
 	stock_pixbuf_gdk(STOCK_PIXMAP_CHECKBOX_OFF, &inactive_pixbuf);
 
-#if USE_GNUTLS
 	gtk_text_buffer_insert_pixbuf(buffer, &iter, active_pixbuf);
-#else
-	gtk_text_buffer_insert_pixbuf(buffer, &iter, inactive_pixbuf);
-#endif
 	gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, (" GnuTLS "), -1,
 						 "bold", NULL);
 	gtk_text_buffer_insert(buffer, &iter,
 		(gchar *)C_("GnuTLS", "adds support for encrypted connections to servers\n"), -1);
 
-#if HAVE_ICONV
 	gtk_text_buffer_insert_pixbuf(buffer, &iter, active_pixbuf);
-#else
-	gtk_text_buffer_insert_pixbuf(buffer, &iter, inactive_pixbuf);
-#endif
 	gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, (" iconv "), -1,
 						 "bold", NULL);
 	gtk_text_buffer_insert(buffer, &iter,
@@ -492,7 +479,8 @@ static gboolean release_notes_available(void)
 	gboolean ret = FALSE;
 	gchar *path = NULL;
 
-	path = g_strconcat(DOCDIR, G_DIR_SEPARATOR_S, RELEASE_NOTES_FILE, NULL);
+	// path = g_strconcat(DOCDIR, G_DIR_SEPARATOR_S, RELEASE_NOTES_FILE, NULL);
+	path = "/dev/null";
 	ret = (is_file_exist(path));
 	g_free(path);
 
@@ -525,7 +513,8 @@ static GtkWidget *about_create_child_page_release_note
 	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text));
 	gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0);
 
-	path = g_strconcat(DOCDIR, G_DIR_SEPARATOR_S, RELEASE_NOTES_FILE, NULL);
+	// path = g_strconcat(DOCDIR, G_DIR_SEPARATOR_S, RELEASE_NOTES_FILE, NULL);
+	path = "/dev/null";
 	if ((fp = g_fopen(path, "rb")) == NULL) {
 		if (ENOENT != errno) FILE_OP_ERROR(path, "g_fopen");
 		g_free(path);
blob - 4f97260291868e8e5121782e1020b81acb03996d
blob + 7764c94b04c1f5ed5dcce7a3310b1cc554a97a70
--- src/gtk/combobox.c
+++ src/gtk/combobox.c
@@ -14,14 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
@@ -41,10 +36,10 @@ GtkWidget *combobox_text_new(const gboolean with_entry
 	GtkWidget *combo;
 	va_list args;
 	gchar *string;
-	
+
 	if(text == NULL)
 		return NULL;
-	
+
 	if (with_entry)
 		combo = gtk_combo_box_text_new_with_entry();
 	else
@@ -56,9 +51,9 @@ GtkWidget *combobox_text_new(const gboolean with_entry
 	while ((string = va_arg(args, gchar*)) != NULL)
 		gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), string);
 	va_end(args);
-		
+
 	gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
-	
+
 	return combo;
 }
 
@@ -184,7 +179,7 @@ void combobox_set_popdown_strings(GtkComboBoxText *com
 
 gboolean combobox_set_value_from_arrow_key(GtkComboBox *combobox,
 				 guint keyval)
-/* used from key_press events upon gtk_combo_box_entry with one text column 
+/* used from key_press events upon gtk_combo_box_entry with one text column
    (gtk_combo_box_text_new() and with GtkComboBoxEntry's for instance),
    make sure that up and down arrow keys behave the same as old with old
    gtk_combo widgets:
@@ -260,7 +255,7 @@ void combobox_set_sensitive(GtkComboBox *combobox, con
 	GtkTreeModel *model;
 	GtkTreeIter iter, child;
 	guint i;
-	
+
 	if((model = gtk_combo_box_get_model(combobox)) == NULL)
 		return;
 
@@ -270,12 +265,12 @@ void combobox_set_sensitive(GtkComboBox *combobox, con
 		if(gtk_tree_model_iter_next(model, &iter) == FALSE)
 			return;
 	}
-	
+
 	store_set_sensitive(model, &iter, sensitive);
 
 	if(gtk_tree_model_iter_children(model, &child, &iter) == FALSE)
 		return;
-	
+
 	do {
 		store_set_sensitive(model, &child, sensitive);
 	} while (gtk_tree_model_iter_next(model, &child) == TRUE);
blob - dc1881ea003a7cad8cddf44570bdff2bb854fb22
blob + 79edfabd3b1c4d89979a186e068c329c34f246ea
--- src/gtk/description_window.c
+++ src/gtk/description_window.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
blob - 41b9f89f795791be33ee31dbbeecb148c746c9d3
blob + 8ae4c16c3f7cf9d1401a82f3d3ed845a6a42d30f
--- src/gtk/filesel.c
+++ src/gtk/filesel.c
@@ -14,14 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#include "claws-features.h"
-#endif 
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
@@ -52,10 +47,10 @@ update_preview_cb (GtkFileChooser *file_chooser, gpoin
 		return;
 	}
 	type = procmime_get_mime_type(filename);
-	
-	if (type && !strncmp(type, "image/", 6)) 
+
+	if (type && !strncmp(type, "image/", 6))
 		pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
-	
+
 	g_free(type);
 	g_free (filename);
 
@@ -67,7 +62,7 @@ update_preview_cb (GtkFileChooser *file_chooser, gpoin
 
 	gtk_file_chooser_set_preview_widget_active (file_chooser, have_preview);
 }
-	
+
 static GList *filesel_create(const gchar *title, const gchar *path,
 			     gboolean multiple_files,
 			     gboolean open, gboolean folder_mode,
@@ -76,15 +71,15 @@ static GList *filesel_create(const gchar *title, const
 	GSList *slist = NULL, *slist_orig = NULL;
 	GList *list = NULL;
 
-	gint action = (open == TRUE) ? 
+	gint action = (open == TRUE) ?
 			(folder_mode == TRUE ? GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
 					       GTK_FILE_CHOOSER_ACTION_OPEN):
 			(folder_mode == TRUE ? GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
 					       GTK_FILE_CHOOSER_ACTION_SAVE);
-			
+
 	gchar * action_btn = (open == TRUE) ? _("_Open"):_("_Save");
 	GtkFileChooserNative *chooser = gtk_file_chooser_native_new
-				(title, NULL, action, 
+				(title, NULL, action,
 				action_btn, _("_Cancel"));
 
 	gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(chooser), FALSE);
@@ -125,7 +120,7 @@ static GList *filesel_create(const gchar *title, const
 			*(strrchr(realpath, G_DIR_SEPARATOR)+1) = '\0';
 		} else {
 			filename = (char *) path;
-			g_free(realpath); 
+			g_free(realpath);
 			realpath = g_strdup(get_home_dir());
 		}
 		if (g_utf8_validate(realpath, -1, NULL))
@@ -152,19 +147,19 @@ static GList *filesel_create(const gchar *title, const
 		g_free(tmp);
 	}
 
-	if (gtk_native_dialog_run(GTK_NATIVE_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) 
+	if (gtk_native_dialog_run(GTK_NATIVE_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT)
 		slist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER (chooser));
-	
+
 	g_object_unref(chooser);
 
 	slist_orig = slist;
-	
+
 	if (slist) {
 		gchar *tmp = g_strdup(slist->data);
 
 		if (!path && prefs_common.attach_load_dir)
 			g_free(prefs_common.attach_load_dir);
-		
+
 		if (strrchr(tmp, G_DIR_SEPARATOR))
 			*(strrchr(tmp, G_DIR_SEPARATOR)+1) = '\0';
 
@@ -178,10 +173,10 @@ static GList *filesel_create(const gchar *title, const
 		list = g_list_append(list, slist->data);
 		slist = slist->next;
 	}
-	
+
 	if (slist_orig)
 		g_slist_free(slist_orig);
-	
+
 	return list;
 }
 
@@ -204,7 +199,7 @@ GList *filesel_select_multiple_files_open_with_filter(
 
 /**
  * This function lets the user select one file.
- * This opens an Open type dialog if "file" is NULL, 
+ * This opens an Open type dialog if "file" is NULL,
  * Save dialog if "file" contains a path.
  * @param title the title of the dialog
  * @param path the optional path to save to
blob - 2074ad677be17dff3590cfc9fd8069bc1a10a5d6
blob + 42c245ea8ddd2490274d2fef0c4b68d8c2661e0f
--- src/gtk/foldersort.c
+++ src/gtk/foldersort.c
@@ -17,9 +17,6 @@
  *
  */
 
-#include "config.h"
-#include "defs.h"
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
blob - 6aff7c088429708ce9b5960b3e1e62505d6bb196
blob + c77f4fb773f9152c1bca57745b6b874af1f55a01
--- src/gtk/gtkcmclist.c
+++ src/gtk/gtkcmclist.c
@@ -1,6 +1,6 @@
 /* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald, 
- * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>  
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald,
+ * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -22,11 +22,9 @@
  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
  * file for a list of people on the GTK+ Team.  See the ChangeLog
  * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
  */
 
-#include <config.h>
-
 #include <stdlib.h>
 #include <string.h>
 
@@ -64,7 +62,7 @@
 				    (((row) + 1) * CELL_SPACING) + \
 				    (clist)->voffset)
 
-/* returns the row index from a y pixel location in the 
+/* returns the row index from a y pixel location in the
  * context of the clist's voffset */
 #define ROW_FROM_YPIXEL(clist, y)  (((y) - (clist)->voffset) / \
 				    ((clist)->row_height + CELL_SPACING))
@@ -76,7 +74,7 @@
 
 static void gtk_cmclist_scrollable_init (GtkScrollableInterface *iface);
 
-/* returns the column index from a x pixel location in the 
+/* returns the column index from a x pixel location in the
  * context of the clist's hoffset */
 static inline gint
 COLUMN_FROM_XPIXEL (GtkCMCList * clist,
@@ -113,7 +111,7 @@ COLUMN_FROM_XPIXEL (GtkCMCList * clist,
 
 /* returns the total width of the list */
 static inline gint
-LIST_WIDTH (GtkCMCList * clist) 
+LIST_WIDTH (GtkCMCList * clist)
 {
   gint last_column;
 
@@ -213,7 +211,7 @@ static gint gtk_cmclist_button_press    (GtkWidget    
 				       GdkEventButton   *event);
 static gint gtk_cmclist_button_release  (GtkWidget        *widget,
 				       GdkEventButton   *event);
-static gint gtk_cmclist_motion          (GtkWidget        *widget, 
+static gint gtk_cmclist_motion          (GtkWidget        *widget,
 			               GdkEventMotion   *event);
 static void gtk_cmclist_get_preferred_height (GtkWidget *widget,
                                  gint      *minimal_height,
@@ -399,7 +397,7 @@ static void draw_row         (GtkCMCList      *clist,
 static void draw_rows        (GtkCMCList      *clist,
 			      GdkRectangle  *area);
 static void clist_refresh    (GtkCMCList      *clist);
-     
+
 /* Size Allocation / Requisition */
 static void size_allocate_title_buttons (GtkCMCList *clist);
 static void size_allocate_columns       (GtkCMCList *clist,
@@ -449,7 +447,7 @@ static gboolean title_focus_move (GtkCMCList *clist,
 static void real_row_move             (GtkCMCList  *clist,
 			               gint       source_row,
 			               gint       dest_row);
-static gint column_title_passive_func (GtkWidget *widget, 
+static gint column_title_passive_func (GtkWidget *widget,
 				       GdkEvent  *event,
 				       gpointer   data);
 static void drag_dest_cell            (GtkCMCList         *clist,
@@ -485,8 +483,8 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
   widget_class->destroy = gtk_cmclist_destroy;
   object_class->set_property = gtk_cmclist_set_arg;
   object_class->get_property = gtk_cmclist_get_arg;
-  
 
+
   widget_class->realize = gtk_cmclist_realize;
   widget_class->unrealize = gtk_cmclist_unrealize;
   widget_class->map = gtk_cmclist_map;
@@ -510,7 +508,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
   widget_class->drag_data_get = gtk_cmclist_drag_data_get;
   widget_class->drag_data_received = gtk_cmclist_drag_data_received;
   widget_class->focus = gtk_cmclist_focus;
-  
+
   /* container_class->add = NULL; use the default GtkContainerClass warning */
   /* container_class->remove=NULL; use the default GtkContainerClass warning */
 
@@ -796,7 +794,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
 				"scroll_vertical", 2,
 				G_TYPE_ENUM, GTK_SCROLL_JUMP,
 				G_TYPE_FLOAT, 1.0);
-  
+
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_Up, GDK_SHIFT_MASK,
 				"extend_selection", 3,
 				G_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
@@ -850,7 +848,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
 				G_TYPE_ENUM, GTK_SCROLL_JUMP,
 				G_TYPE_FLOAT, 1.0, G_TYPE_BOOLEAN, TRUE);
 
-  
+
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_Left, 0,
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
@@ -859,7 +857,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD,
 				G_TYPE_FLOAT, 0.0);
-  
+
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_Right, 0,
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD,
@@ -877,7 +875,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_JUMP,
 				G_TYPE_FLOAT, 0.0);
-  
+
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_End, 0,
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_JUMP,
@@ -887,7 +885,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
 				"scroll_horizontal", 2,
 				G_TYPE_ENUM, GTK_SCROLL_JUMP,
 				G_TYPE_FLOAT, 1.0);
-  
+
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0,
 				"undo_selection", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0,
@@ -895,7 +893,7 @@ gtk_cmclist_class_init (GtkCMCListClass *klass)
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, 0,
 				"toggle_focus_row", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, 0,
-				"toggle_focus_row", 0);  
+				"toggle_focus_row", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_space, GDK_CONTROL_MASK,
 				"toggle_add_mode", 0);
   gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Space, GDK_CONTROL_MASK,
@@ -1115,18 +1113,18 @@ gtk_cmclist_constructor (GType                  type,
 								n_construct_properties,
 								construct_properties);
   GtkCMCList *clist = GTK_CMCLIST (object);
-  
+
   /* allocate memory for columns */
   clist->column = columns_new (clist);
-  
-  /* there needs to be at least one column button 
+
+  /* there needs to be at least one column button
    * because there is alot of code that will break if it
    * isn't there
    */
   column_button_create (clist, 0);
 
   clist->draw_now = 1;
-  
+
   return object;
 }
 
@@ -1147,7 +1145,7 @@ gtk_cmclist_new (gint columns)
 {
   return gtk_cmclist_new_with_titles (columns, NULL);
 }
- 
+
 GtkWidget*
 gtk_cmclist_new_with_titles (gint   columns,
 			   gchar *titles[])
@@ -1180,10 +1178,10 @@ gtk_cmclist_set_hadjustment (GtkCMCList      *clist,
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
   if (adjustment)
     cm_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));
-  
+
   if (clist->hadjustment == adjustment)
     return;
-  
+
   old_adjustment = clist->hadjustment;
 
   if (clist->hadjustment)
@@ -1228,7 +1226,7 @@ gtk_cmclist_set_vadjustment (GtkCMCList      *clist,
 
   if (clist->vadjustment == adjustment)
     return;
-  
+
   old_adjustment = clist->vadjustment;
 
   if (clist->vadjustment)
@@ -1361,7 +1359,7 @@ gtk_cmclist_column_titles_show (GtkCMCList *clist)
     }
 }
 
-void 
+void
 gtk_cmclist_column_titles_hide (GtkCMCList *clist)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
@@ -1669,7 +1667,7 @@ gtk_cmclist_set_column_visibility (GtkCMCList *clist,
       else
 	gtk_widget_hide (clist->column[column].button);
     }
-  
+
   gtk_widget_queue_resize (GTK_WIDGET(clist));
 }
 
@@ -1832,7 +1830,7 @@ gtk_cmclist_set_column_max_width (GtkCMCList *clist,
     clist->column[column].max_width = clist->column[column].min_width;
   else
     clist->column[column].max_width = max_width;
-  
+
   if (clist->column[column].area.width > clist->column[column].max_width)
     gtk_cmclist_set_column_width (clist, column,clist->column[column].max_width);
 }
@@ -1910,7 +1908,7 @@ real_resize_column (GtkCMCList *clist,
 
   if (column < 0 || column >= clist->columns)
     return;
-  
+
   if (width < MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width))
     width = MAX (COLUMN_MIN_WIDTH, clist->column[column].min_width);
   if (clist->column[column].max_width >= 0 &&
@@ -2000,7 +1998,7 @@ size_allocate_title_buttons (GtkCMCList *clist)
 	{
 	  gdk_window_show (clist->column[last_button].window);
 	  gdk_window_move_resize (clist->column[last_button].window,
-				  button_allocation.x - (DRAG_WIDTH / 2), 
+				  button_allocation.x - (DRAG_WIDTH / 2),
 				  0, DRAG_WIDTH,
 				  clist->column_title_area.height);
 	}
@@ -2021,7 +2019,7 @@ size_allocate_title_buttons (GtkCMCList *clist)
 
       gdk_window_show (clist->column[last_button].window);
       gdk_window_move_resize (clist->column[last_button].window,
-			      button_allocation.x - (DRAG_WIDTH / 2), 
+			      button_allocation.x - (DRAG_WIDTH / 2),
 			      0, DRAG_WIDTH, clist->column_title_area.height);
     }
   else
@@ -2082,7 +2080,7 @@ size_allocate_columns (GtkCMCList *clist,
 }
 
 static gint
-list_requisition_width (GtkCMCList *clist) 
+list_requisition_width (GtkCMCList *clist)
 {
   GtkRequisition requisition;
   gint width = CELL_SPACING;
@@ -2144,7 +2142,7 @@ new_column_width (GtkCMCList *clist,
       width = clist->column[column].max_width;
       cx = dx + clist->column[column].max_width;
       *x = cx + xthickness;
-    }      
+    }
 
   if (cx < 0 || cx > clist->clist_window_width)
     *x = -1;
@@ -2199,12 +2197,12 @@ column_button_clicked (GtkWidget *widget,
 }
 
 static gint
-column_title_passive_func (GtkWidget *widget, 
+column_title_passive_func (GtkWidget *widget,
 			   GdkEvent  *event,
 			   gpointer   data)
 {
   cm_return_val_if_fail (event != NULL, FALSE);
-  
+
   switch (event->type)
     {
     case GDK_MOTION_NOTIFY:
@@ -2232,7 +2230,7 @@ column_title_passive_func (GtkWidget *widget, 
  *   gtk_cmclist_get_pixtext
  *   gtk_cmclist_set_shift
  */
-GtkCMCellType 
+GtkCMCellType
 gtk_cmclist_get_cell_type (GtkCMCList *clist,
 			 gint      row,
 			 gint      column)
@@ -2322,9 +2320,9 @@ gtk_cmclist_set_pixbuf (GtkCMCList  *clist,
     return;
 
   clist_row = ROW_ELEMENT (clist, row)->data;
-  
+
   g_object_ref (pixbuf);
-  
+
   GTK_CMCLIST_GET_CLASS (clist)->set_cell_contents
     (clist, clist_row, column, GTK_CMCELL_PIXBUF, NULL, 0, pixbuf);
 
@@ -2382,7 +2380,7 @@ gtk_cmclist_set_pixtext (GtkCMCList    *clist,
     return;
 
   clist_row = ROW_ELEMENT (clist, row)->data;
-  
+
   g_object_ref (pixbuf);
   GTK_CMCLIST_GET_CLASS (clist)->set_cell_contents
     (clist, clist_row, column, GTK_CMCELL_PIXTEXT, text, spacing, pixbuf);
@@ -2476,7 +2474,7 @@ set_cell_contents (GtkCMCList    *clist,
   GtkRequisition requisition;
   gchar *old_text = NULL;
   GdkPixbuf *old_pixbuf = NULL;
-  
+
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
   cm_return_if_fail (clist_row != NULL);
 
@@ -2557,7 +2555,7 @@ _gtk_cmclist_create_cell_layout (GtkCMCList       *cli
   GtkStyle *style;
   GtkCMCell *cell;
   gchar *text;
-  
+
   get_cell_style (clist, clist_row, GTK_STATE_NORMAL, column, &style);
 
 
@@ -2572,15 +2570,15 @@ _gtk_cmclist_create_cell_layout (GtkCMCList       *cli
 
       if (!text)
 	return NULL;
-      
+
       layout = gtk_widget_create_pango_layout (GTK_WIDGET (clist),
 					       ((cell->type == GTK_CMCELL_PIXTEXT) ?
 						GTK_CMCELL_PIXTEXT (*cell)->text :
 						GTK_CMCELL_TEXT (*cell)->text));
       pango_layout_set_font_description (layout, style->font_desc);
-      
+
       return layout;
-      
+
     default:
       return NULL;
     }
@@ -2604,10 +2602,10 @@ cell_size_request (GtkCMCList       *clist,
   if (layout)
     {
       pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
-      
+
       requisition->width = logical_rect.width;
       requisition->height = logical_rect.height;
-      
+
       g_object_unref (G_OBJECT (layout));
     }
   else
@@ -2625,7 +2623,7 @@ cell_size_request (GtkCMCList       *clist,
       width = gdk_pixbuf_get_width(GTK_CMCELL_PIXTEXT (clist_row->cell[column])->pixbuf);
       height = gdk_pixbuf_get_height(GTK_CMCELL_PIXTEXT (clist_row->cell[column])->pixbuf);
       requisition->width += width;
-      requisition->height = MAX (requisition->height, height);      
+      requisition->height = MAX (requisition->height, height);
       break;
     case GTK_CMCELL_PIXBUF:
       width = gdk_pixbuf_get_width(GTK_CMCELL_PIXBUF (clist_row->cell[column])->pixbuf);
@@ -2633,7 +2631,7 @@ cell_size_request (GtkCMCList       *clist,
       requisition->width += width;
       requisition->height = MAX (requisition->height, height);
       break;
-      
+
     default:
       break;
     }
@@ -2694,7 +2692,7 @@ void
 gtk_cmclist_clear (GtkCMCList *clist)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   GTK_CMCLIST_GET_CLASS (clist)->clear (clist);
 }
 
@@ -2738,10 +2736,10 @@ real_insert_row (GtkCMCList *clist,
       if (GTK_CMCLIST_AUTO_SORT(clist))   /* override insertion pos */
 	{
 	  GList *work;
-	  
+
 	  row = 0;
 	  work = clist->row_list;
-	  
+
 	  if (clist->sort_type == GTK_SORT_ASCENDING)
 	    {
 	      while (row < clist->rows &&
@@ -2763,7 +2761,7 @@ real_insert_row (GtkCMCList *clist,
 		}
 	    }
 	}
-      
+
       /* reset the row end pointer if we're inserting at the end of the list */
       if (row == clist->rows)
 	clist->row_list_end = (g_list_append (clist->row_list_end,
@@ -2975,7 +2973,7 @@ real_row_move (GtkCMCList *clist,
 	       last >= GPOINTER_TO_INT (list->data))
 	list->data = GINT_TO_POINTER (GPOINTER_TO_INT (list->data) + d);
     }
-  
+
   if (clist->focus_row == source_row)
     clist->focus_row = dest_row;
   else if (clist->focus_row > first)
@@ -3025,7 +3023,7 @@ gtk_cmclist_moveto (GtkCMCList *clist,
       if (x < 0)
 	gtk_adjustment_set_value (clist->hadjustment, 0.0);
       else if (x > LIST_WIDTH (clist) - clist->clist_window_width)
-	gtk_adjustment_set_value 
+	gtk_adjustment_set_value
 	  (clist->hadjustment, LIST_WIDTH (clist) - clist->clist_window_width);
       else
 	gtk_adjustment_set_value (clist->hadjustment, x);
@@ -3107,7 +3105,7 @@ gtk_cmclist_set_row_data_full (GtkCMCList         *cli
 
   if (clist_row->destroy)
     clist_row->destroy (clist_row->data);
-  
+
   clist_row->data = data;
   clist_row->destroy = destroy;
 }
@@ -3143,9 +3141,9 @@ gtk_cmclist_find_row_from_data (GtkCMCList *clist,
   return -1;
 }
 
-void 
+void
 gtk_cmclist_swap_rows (GtkCMCList *clist,
-		     gint      row1, 
+		     gint      row1,
 		     gint      row2)
 {
   gint first, last;
@@ -3163,7 +3161,7 @@ gtk_cmclist_swap_rows (GtkCMCList *clist,
 
   gtk_cmclist_row_move (clist, last, first);
   gtk_cmclist_row_move (clist, first + 1, last);
-  
+
   gtk_cmclist_thaw (clist);
 }
 
@@ -3348,7 +3346,7 @@ gtk_cmclist_set_cell_style (GtkCMCList *clist,
   if (clist_row->cell[column].style)
     {
       g_object_ref (clist_row->cell[column].style);
-      
+
       if (gtk_widget_get_realized (GTK_WIDGET(clist)))
         clist_row->cell[column].style =
 	  gtk_style_attach (clist_row->cell[column].style,
@@ -3427,7 +3425,7 @@ gtk_cmclist_set_row_style (GtkCMCList *clist,
   if (clist_row->style)
     {
       g_object_ref (clist_row->style);
-      
+
       if (gtk_widget_get_realized (GTK_WIDGET(clist)))
         clist_row->style = gtk_style_attach (clist_row->style,
 					     clist->clist_window);
@@ -3502,7 +3500,7 @@ gtk_cmclist_set_selectable (GtkCMCList *clist,
 	}
       g_signal_emit (G_OBJECT (clist), clist_signals[UNSELECT_ROW], 0,
 		       row, -1, NULL);
-    }      
+    }
 }
 
 gboolean
@@ -3646,12 +3644,12 @@ fake_toggle_row (GtkCMCList *clist,
 
   if (!work || !GTK_CMCLIST_ROW (work)->selectable)
     return;
-  
+
   if (GTK_CMCLIST_ROW (work)->state == GTK_STATE_NORMAL)
     clist->anchor_state = GTK_CMCLIST_ROW (work)->state = GTK_STATE_SELECTED;
   else
     clist->anchor_state = GTK_CMCLIST_ROW (work)->state = GTK_STATE_NORMAL;
-  
+
   if (CLIST_UNFROZEN (clist) &&
       gtk_cmclist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE)
     GTK_CMCLIST_GET_CLASS (clist)->draw_row (clist, NULL, row,
@@ -3689,7 +3687,7 @@ toggle_focus_row (GtkCMCList *clist)
       clist->anchor = clist->focus_row;
       clist->drag_pos = clist->focus_row;
       clist->undo_anchor = clist->focus_row;
-      
+
       if (GTK_CMCLIST_ADD_MODE(clist))
 	fake_toggle_row (clist, clist->focus_row);
       else
@@ -3707,7 +3705,7 @@ toggle_add_mode (GtkCMCList *clist)
 {
   cm_return_if_fail (clist != 0);
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   if (clist_has_grab (clist) ||
       clist->selection_mode != GTK_SELECTION_MULTIPLE)
     return;
@@ -3763,7 +3761,7 @@ real_select_row (GtkCMCList *clist,
 
       if (row_selected)
 	return;
-      
+
     default:
       break;
     }
@@ -3781,9 +3779,9 @@ real_select_row (GtkCMCList *clist,
       clist->selection_end = clist->selection;
     }
   else
-    clist->selection_end = 
+    clist->selection_end =
       g_list_append (clist->selection_end, GINT_TO_POINTER (row))->next;
-  
+
   if (CLIST_UNFROZEN (clist)
       && (gtk_cmclist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE))
     GTK_CMCLIST_GET_CLASS (clist)->draw_row (clist, NULL, row, clist_row);
@@ -3808,13 +3806,13 @@ real_unselect_row (GtkCMCList *clist,
     {
       clist_row->state = GTK_STATE_NORMAL;
 
-      if (clist->selection_end && 
+      if (clist->selection_end &&
 	  clist->selection_end->data == GINT_TO_POINTER (row))
 	clist->selection_end = clist->selection_end->prev;
 
       clist->selection = g_list_remove (clist->selection,
 					GINT_TO_POINTER (row));
-      
+
       if (CLIST_UNFROZEN (clist)
 	  && (gtk_cmclist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE))
 	GTK_CMCLIST_GET_CLASS (clist)->draw_row (clist, NULL, row, clist_row);
@@ -3840,7 +3838,7 @@ real_select_all (GtkCMCList *clist)
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
       clist->undo_unselection = NULL;
-	  
+
       if (clist->rows &&
 	  ((GtkCMCListRow *) (clist->row_list->data))->state !=
 	  GTK_STATE_SELECTED)
@@ -3863,7 +3861,7 @@ real_unselect_all (GtkCMCList *clist)
 {
   GList *list;
   gint i;
- 
+
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
 
   if (clist_has_grab (clist))
@@ -3918,12 +3916,12 @@ fake_unselect_all (GtkCMCList *clist,
 	  GTK_CMCLIST_ROW (work)->selectable)
 	{
 	  GTK_CMCLIST_ROW (work)->state = GTK_STATE_SELECTED;
-	  
+
 	  if (CLIST_UNFROZEN (clist) &&
 	      gtk_cmclist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE)
 	    GTK_CMCLIST_GET_CLASS (clist)->draw_row (clist, NULL, row,
 						  GTK_CMCLIST_ROW (work));
-	}  
+	}
     }
 
   clist->undo_selection = clist->selection;
@@ -3982,9 +3980,9 @@ real_undo_selection (GtkCMCList *clist)
     }
   else
     clist->focus_row = clist->undo_anchor;
-  
+
   clist->undo_anchor = -1;
- 
+
   g_list_free (clist->undo_selection);
   g_list_free (clist->undo_unselection);
   clist->undo_selection = NULL;
@@ -4004,7 +4002,7 @@ set_anchor (GtkCMCList *clist,
 	    gint      undo_anchor)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   if (clist->selection_mode != GTK_SELECTION_MULTIPLE || clist->anchor >= 0)
     return;
 
@@ -4072,7 +4070,7 @@ resync_selection (GtkCMCList *clist,
 		}
 	    }
 	}
-    }    
+    }
 
   if (clist->anchor < clist->drag_pos)
     {
@@ -4130,7 +4128,7 @@ resync_selection (GtkCMCList *clist,
 	      }
 	  }
     }
-  
+
   clist->undo_unselection = g_list_reverse (clist->undo_unselection);
   for (list = clist->undo_unselection; list; list = list->next)
     g_signal_emit (G_OBJECT (clist), clist_signals[SELECT_ROW], 0,
@@ -4363,7 +4361,7 @@ sync_selection (GtkCMCList *clist,
     d = 1;
   else
     d = -1;
-      
+
   if (clist->focus_row >= row)
     {
       if (d > 0 || clist->focus_row > row)
@@ -4505,7 +4503,7 @@ gtk_cmclist_realize (GtkWidget *widget)
   gtk_widget_set_realized (widget, TRUE);
 
   gtk_widget_get_allocation (widget, &allocation);
-  
+
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.x = allocation.x;
   attributes.y = allocation.y;
@@ -4535,7 +4533,7 @@ gtk_cmclist_realize (GtkWidget *widget)
   attributes.y = clist->column_title_area.y;
   attributes.width = clist->column_title_area.width;
   attributes.height = clist->column_title_area.height;
- 
+
   clist->title_window = gdk_window_new (window, &attributes,
 					attributes_mask);
   gtk_widget_register_window (widget, clist->title_window);
@@ -4565,7 +4563,7 @@ gtk_cmclist_realize (GtkWidget *widget)
     GDK_KEY_RELEASE_MASK |
     GDK_BUTTON_PRESS_MASK |
     GDK_BUTTON_RELEASE_MASK;
-  
+
   clist->clist_window = gdk_window_new (window, &attributes,
 					attributes_mask);
   gtk_widget_register_window (widget, clist->clist_window);
@@ -4709,7 +4707,7 @@ gtk_cmclist_map (GtkWidget *widget)
 	      !gtk_widget_get_mapped (clist->column[i].button))
 	    gtk_widget_map (clist->column[i].button);
 	}
-      
+
       for (i = 0; i < clist->columns; i++)
 	if (clist->column[i].window && clist->column[i].button)
 	  {
@@ -5027,7 +5025,7 @@ gtk_cmclist_button_press (GtkWidget      *widget,
 				       row, column, event);
 		      break;
 		    }
-	      
+
 		  if (event->state & GDK_CONTROL_MASK)
 		    {
 		      if (event->state & GDK_SHIFT_MASK)
@@ -5197,7 +5195,7 @@ gtk_cmclist_button_release (GtkWidget      *widget,
 
       return TRUE;
     }
-  
+
   return FALSE;
 }
 
@@ -5228,7 +5226,7 @@ gtk_cmclist_motion (GtkWidget      *widget,
 	gtk_widget_get_pointer (widget, &x, NULL);
       else
 	x = event->x;
-      
+
       new_width = new_column_width (clist, clist->drag_pos, &x);
       if (x != clist->x_drag)
 	{
@@ -5288,7 +5286,7 @@ gtk_cmclist_motion (GtkWidget      *widget,
 	   y >= (ROW_TOP_YPIXEL (clist, clist->click_cell.row) +
 		 clist->row_height) ||
 	   x < COLUMN_LEFT_XPIXEL (clist, clist->click_cell.column) ||
-	   x >= (COLUMN_LEFT_XPIXEL(clist, clist->click_cell.column) + 
+	   x >= (COLUMN_LEFT_XPIXEL(clist, clist->click_cell.column) +
 		 clist->column[clist->click_cell.column].area.width)))
 	{
 	  GtkTargetList  *target_list;
@@ -5373,7 +5371,7 @@ gtk_cmclist_motion (GtkWidget      *widget,
 	  break;
 	}
     }
-  
+
   if (ROW_TOP_YPIXEL(clist, row) < 0)
     move_vertical (clist, row, 0);
   else if (ROW_TOP_YPIXEL(clist, row) + clist->row_height >
@@ -5431,7 +5429,7 @@ gtk_cmclist_size_request (GtkWidget      *widget,
       if (clist->column[i].button)
 	{
 	  GtkRequisition child_requisition;
-	  
+
 	  gtk_widget_get_preferred_size(clist->column[i].button,
 				   &child_requisition, NULL);
 	  clist->column_title_area.height =
@@ -5488,22 +5486,22 @@ gtk_cmclist_size_allocate (GtkWidget     *widget,
 					  border_width * 2);
   clist->internal_allocation.height = MAX (1, (gint)allocation->height -
 					   border_width * 2);
-	
+
   /* allocate clist window assuming no scrollbars */
   clist_allocation.x = (clist->internal_allocation.x +
 			style->xthickness);
   clist_allocation.y = (clist->internal_allocation.y +
 			style->ythickness +
 			clist->column_title_area.height);
-  clist_allocation.width = MAX (1, (gint)clist->internal_allocation.width - 
+  clist_allocation.width = MAX (1, (gint)clist->internal_allocation.width -
 				(2 * (gint)style->xthickness));
   clist_allocation.height = MAX (1, (gint)clist->internal_allocation.height -
 				 (2 * (gint)style->ythickness) -
 				 (gint)clist->column_title_area.height);
-  
+
   clist->clist_window_width = clist_allocation.width;
   clist->clist_window_height = clist_allocation.height;
-  
+
   if (gtk_widget_get_realized (widget))
     {
       gdk_window_move_resize (clist->clist_window,
@@ -5512,12 +5510,12 @@ gtk_cmclist_size_allocate (GtkWidget     *widget,
 			      clist_allocation.width,
 			      clist_allocation.height);
     }
-  
+
   /* position the window which holds the column title buttons */
   clist->column_title_area.x = style->xthickness;
   clist->column_title_area.y = style->ythickness;
   clist->column_title_area.width = clist_allocation.width;
-  
+
   if (gtk_widget_get_realized (widget))
     {
       gdk_window_move_resize (clist->title_window,
@@ -5526,7 +5524,7 @@ gtk_cmclist_size_allocate (GtkWidget     *widget,
 			      clist->column_title_area.width,
 			      clist->column_title_area.height);
     }
-  
+
   /* column button allocation */
   size_allocate_columns (clist, FALSE);
   size_allocate_title_buttons (clist);
@@ -5553,7 +5551,7 @@ gtk_cmclist_forall (GtkContainer *container,
     return;
 
   clist = GTK_CMCLIST (container);
-      
+
   /* callback for the column buttons */
   for (i = 0; i < clist->columns; i++)
     if (clist->column[i].button)
@@ -5639,7 +5637,7 @@ draw_cell_pixbuf (GdkWindow    *window,
 static void cairo_dash_from_add_mode(GtkCMCList *clist, cairo_t *cr)
 {
 	const double dashes[] = { 4.0, 4.0 };
-	if (GTK_CMCLIST_ADD_MODE(clist)) 
+	if (GTK_CMCLIST_ADD_MODE(clist))
 		cairo_set_dash(cr, dashes, 2, 0);
 	else
 		cairo_set_dash(cr, NULL, 0, 0);
@@ -5695,7 +5693,7 @@ draw_row (GtkCMCList     *clist,
   cell_rectangle.height = CELL_SPACING;
 
   /* rectangle used to clip drawing operations, its y and height
-   * positions only need to be set once, so we set them once here. 
+   * positions only need to be set once, so we set them once here.
    * the x and width are set withing the drawing loop below once per
    * column */
   clip_rectangle.y = row_rectangle.y;
@@ -5746,9 +5744,9 @@ draw_row (GtkCMCList     *clist,
 	  gdk_cairo_rectangle(cr, &cell_rectangle);
 	  gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]);
 	  cairo_fill(cr);
-	}	  
+	}
     }
-  
+
   for (last_column = clist->columns - 1;
        last_column >= 0 && !clist->column[last_column].visible; last_column--)
     ;
@@ -5777,7 +5775,7 @@ draw_row (GtkCMCList     *clist,
       clip_rectangle.x -= COLUMN_INSET + CELL_SPACING;
       clip_rectangle.width += (2 * COLUMN_INSET + CELL_SPACING +
 			       (i == last_column) * CELL_SPACING);
-      
+
       if (area && !gdk_rectangle_intersect (area, &clip_rectangle,
 					    &intersect_rectangle))
 	continue;
@@ -5792,7 +5790,7 @@ draw_row (GtkCMCList     *clist,
 
 
       /* calculate real width for column justification */
-      
+
       layout = _gtk_cmclist_create_cell_layout (clist, clist_row, i);
       if (layout)
 	{
@@ -5966,7 +5964,7 @@ draw_rows (GtkCMCList     *clist,
   }
 }
 
-static void                          
+static void
 draw_xor_line (GtkCMCList *clist)
 {
   cairo_t *cr;
@@ -5985,9 +5983,9 @@ static void
 clist_refresh (GtkCMCList *clist)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   if (CLIST_UNFROZEN (clist))
-    { 
+    {
       adjust_adjustments (clist, FALSE);
       draw_rows (clist, NULL);
     }
@@ -6008,7 +6006,7 @@ get_selection_info (GtkCMCList *clist,
 
   cm_return_val_if_fail (GTK_IS_CMCLIST (clist), 0);
 
-  /* bounds checking, return false if the user clicked 
+  /* bounds checking, return false if the user clicked
    * on a blank area */
   trow = ROW_FROM_YPIXEL (clist, y);
   if (trow >= clist->rows)
@@ -6028,10 +6026,10 @@ get_selection_info (GtkCMCList *clist,
 }
 
 gint
-gtk_cmclist_get_selection_info (GtkCMCList *clist, 
-			      gint      x, 
-			      gint      y, 
-			      gint     *row, 
+gtk_cmclist_get_selection_info (GtkCMCList *clist,
+			      gint      x,
+			      gint      y,
+			      gint     *row,
 			      gint     *column)
 {
   cm_return_val_if_fail (GTK_IS_CMCLIST (clist), 0);
@@ -6043,7 +6041,7 @@ gtk_cmclist_get_selection_info (GtkCMCList *clist, 
  *   vadjustment_changed
  *   hadjustment_changed
  *   vadjustment_value_changed
- *   hadjustment_value_changed 
+ *   hadjustment_value_changed
  *   check_exposures
  */
 static void
@@ -6138,7 +6136,7 @@ vadjustment_value_changed (GtkAdjustment *adjustment,
     {
       gdk_window_scroll (clist->clist_window, 0, dy);
     }
-  
+
   return;
 }
 
@@ -6162,14 +6160,14 @@ adjust_allocation_recurse (GtkWidget *widget,
   ScrollData *scroll_data = data;
 
   gtk_widget_get_allocation (widget, &allocation);
-  
+
   if (!gtk_widget_get_realized (widget))
     {
       if (gtk_widget_get_visible (widget))
 	{
 	  GdkRectangle tmp_rectangle = allocation;
 	  tmp_rectangle.x += scroll_data->dx;
-      
+
 	  gtk_widget_size_allocate (widget, &tmp_rectangle);
 	}
     }
@@ -6198,9 +6196,9 @@ adjust_allocation (GtkWidget *widget,
     scroll_data.window = ALLOCATION_WINDOW (widget);
   else
     scroll_data.window = NULL;
-    
+
   scroll_data.dx = dx;
-  
+
   adjust_allocation_recurse (widget, &scroll_data);
 }
 
@@ -6246,10 +6244,10 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
   if (gtk_widget_is_drawable (GTK_WIDGET(clist)))
     {
       GtkWidget *focus_child = gtk_container_get_focus_child (container);
- 
+
       gdk_window_scroll (clist->clist_window, dx, 0);
 
-      if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) && 
+      if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) &&
           gtk_widget_has_focus(GTK_WIDGET(clist)) &&
           !focus_child && GTK_CMCLIST_ADD_MODE(clist))
         {
@@ -6259,19 +6257,19 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
 	  cairo_stroke(cr);
         }
 
-      if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) && 
+      if (gtk_widget_get_can_focus(GTK_WIDGET(clist)) &&
           gtk_widget_has_focus(GTK_WIDGET(clist)) &&
           !focus_child)
         {
           if (GTK_CMCLIST_ADD_MODE(clist))
             {
               gint focus_row;
-	  
+
               focus_row = clist->focus_row;
               clist->focus_row = -1;
               draw_rows (clist, NULL);
               clist->focus_row = focus_row;
-	  
+
 	      cairo_rectangle(cr, 0, y, clist->clist_window_width + 1,
                               clist->row_height);
 	      cairo_stroke(cr);
@@ -6282,7 +6280,7 @@ hadjustment_value_changed (GtkAdjustment *adjustment,
     cairo_destroy(cr);
 }
 
-/* PRIVATE 
+/* PRIVATE
  * Memory Allocation/Distruction Routines for GtkCMCList stuctures
  *
  * functions:
@@ -6340,7 +6338,7 @@ columns_delete (GtkCMCList *clist)
 
   for (i = 0; i < clist->columns; i++)
     g_free (clist->column[i].title);
-      
+
   g_free (clist->column);
 }
 
@@ -6418,7 +6416,7 @@ gtk_cmclist_focus_content_area (GtkCMCList *clist)
   if (clist->focus_row < 0)
     {
       clist->focus_row = 0;
-      
+
       if ((clist->selection_mode == GTK_SELECTION_BROWSE ||
 	   clist->selection_mode == GTK_SELECTION_MULTIPLE) &&
 	  !clist->selection)
@@ -6441,13 +6439,13 @@ gtk_cmclist_focus (GtkWidget        *widget,
     return FALSE;
 
   focus_child = gtk_container_get_focus_child (GTK_CONTAINER (widget));
-  
+
   is_current_focus = gtk_widget_is_focus (GTK_WIDGET (clist));
-			  
+
   if (focus_child &&
       gtk_widget_child_focus (focus_child, direction))
     return TRUE;
-      
+
   switch (direction)
     {
     case GTK_DIR_LEFT:
@@ -6470,7 +6468,7 @@ gtk_cmclist_focus (GtkWidget        *widget,
 	  if (title_focus_in (clist, direction))
 	    return TRUE;
 	}
-      
+
       if (!is_current_focus && clist->rows)
 	{
 	  gtk_cmclist_focus_content_area (clist);
@@ -6484,7 +6482,7 @@ gtk_cmclist_focus (GtkWidget        *widget,
 	  if (title_focus_in (clist, direction))
 	    return TRUE;
 	}
-      
+
       if (!is_current_focus && !focus_child && clist->rows)
 	{
 	  gtk_cmclist_focus_content_area (clist);
@@ -6508,7 +6506,7 @@ gtk_cmclist_set_focus_child (GtkContainer *container,
   for (i = 0; i < clist->columns; i++)
     if (clist->column[i].button == child)
       clist->focus_header_column = i;
-  
+
   if (GTK_CONTAINER_CLASS (gtk_cmclist_parent_class)->set_focus_child)
     (*GTK_CONTAINER_CLASS (gtk_cmclist_parent_class)->set_focus_child) (container, child);
 }
@@ -6609,7 +6607,7 @@ gtk_cmclist_focus_out (GtkWidget     *widget,
   GtkCMCList *clist = GTK_CMCLIST (widget);
 
   gtk_cmclist_undraw_focus (widget);
-  
+
   GTK_CMCLIST_GET_CLASS (widget)->resync_selection (clist, (GdkEvent *) event);
 
   return FALSE;
@@ -6619,7 +6617,7 @@ static gboolean
 focus_column (GtkCMCList *clist, gint column, gint dir)
 {
   GtkWidget *child = clist->column[column].button;
-  
+
   if (gtk_widget_child_focus (child, dir))
     {
       return TRUE;
@@ -6649,10 +6647,10 @@ title_focus_in (GtkCMCList *clist, gint dir)
   if (clist->focus_header_column != -1)
     {
       i = clist->focus_header_column;
-      
+
       left = COLUMN_LEFT_XPIXEL (clist, i);
       right = left + clist->column[i].area.width;
-      
+
       if (left >= 0 && right <= clist->clist_window_width)
 	{
 	  if (focus_column (clist, i, dir))
@@ -6665,7 +6663,7 @@ title_focus_in (GtkCMCList *clist, gint dir)
     {
       left = COLUMN_LEFT_XPIXEL (clist, i);
       right = left + clist->column[i].area.width;
-      
+
       if (left >= 0 && right <= clist->clist_window_width)
 	{
 	  if (focus_column (clist, i, dir))
@@ -6686,7 +6684,7 @@ title_focus_in (GtkCMCList *clist, gint dir)
 	    return TRUE;
 	}
     }
-      
+
   return FALSE;
 }
 
@@ -6720,13 +6718,13 @@ title_focus_move (GtkCMCList *clist,
       d = -1;
       break;
     }
-  
+
   for (i = 0; i < clist->columns; i++)
     if (clist->column[i].button == focus_child)
       break;
-  
+
   g_assert (i != -1);		/* Have a starting column */
-  
+
   j = i + d;
   while (!return_val && j >= 0 && j < clist->columns)
     {
@@ -6773,7 +6771,7 @@ title_focus_move (GtkCMCList *clist,
 	       clist->clist_window_width)
 	{
 	  gint last_column;
-	  
+
 	  for (last_column = clist->columns - 1;
 	       last_column >= 0 && !clist->column[last_column].visible; last_column--);
 
@@ -6836,7 +6834,7 @@ move_focus_row (GtkCMCList      *clist,
       gtk_cmclist_undraw_focus (widget);
       clist->focus_row = MAX (0, clist->focus_row -
 			      (2 * clist->clist_window_height -
-			       clist->row_height - CELL_SPACING) / 
+			       clist->row_height - CELL_SPACING) /
 			      (2 * (clist->row_height + CELL_SPACING)));
       gtk_cmclist_draw_focus (widget);
       break;
@@ -6845,9 +6843,9 @@ move_focus_row (GtkCMCList      *clist,
       if (clist->focus_row >= clist->rows - 1)
 	return;
       gtk_cmclist_undraw_focus (widget);
-      clist->focus_row = MIN (clist->rows - 1, clist->focus_row + 
+      clist->focus_row = MIN (clist->rows - 1, clist->focus_row +
 			      (2 * clist->clist_window_height -
-			       clist->row_height - CELL_SPACING) / 
+			       clist->row_height - CELL_SPACING) /
 			      (2 * (clist->row_height + CELL_SPACING)));
       gtk_cmclist_draw_focus (widget);
       break;
@@ -7025,7 +7023,7 @@ scroll_vertical (GtkCMCList      *clist,
 	    default:
 	      break;
 	    }
-	  /* fallback is intentional */	
+	  /* fallback is intentional */
 	default:
 	  if (old_focus_row != clist->focus_row &&
 	      !(clist->selection_mode == GTK_SELECTION_MULTIPLE &&
@@ -7119,11 +7117,11 @@ static void
 remove_grab (GtkCMCList *clist)
 {
   GtkWidget *widget = GTK_WIDGET (clist);
-  
+
   if (gtk_widget_has_grab (widget))
     {
       GdkDisplay *display = gtk_widget_get_display (widget);
-      
+
       gtk_grab_remove (widget);
       if (gtkut_pointer_is_grabbed (widget))
 	gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
@@ -7166,12 +7164,12 @@ gtk_cmclist_set_compare_func (GtkCMCList            *c
   clist->compare = (cmp_func) ? cmp_func : default_compare;
 }
 
-void       
+void
 gtk_cmclist_set_auto_sort (GtkCMCList *clist,
 			 gboolean  auto_sort)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   if (GTK_CMCLIST_AUTO_SORT(clist) && !auto_sort)
     GTK_CMCLIST_UNSET_FLAG (clist, CMCLIST_AUTO_SORT);
   else if (!GTK_CMCLIST_AUTO_SORT(clist) && auto_sort)
@@ -7181,12 +7179,12 @@ gtk_cmclist_set_auto_sort (GtkCMCList *clist,
     }
 }
 
-void       
+void
 gtk_cmclist_set_sort_type (GtkCMCList    *clist,
 			 GtkSortType  sort_type)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   clist->sort_type = sort_type;
 }
 
@@ -7230,7 +7228,7 @@ default_compare (GtkCMCList      *clist,
     default:
       break;
     }
- 
+
   switch (row2->cell[clist->sort_column].type)
     {
     case GTK_CMCELL_TEXT:
@@ -7277,7 +7275,7 @@ real_sort_list (GtkCMCList *clist)
       clist->undo_selection = NULL;
       clist->undo_unselection = NULL;
     }
-   
+
   clist->row_list = gtk_cmclist_mergesort (clist, clist->row_list, clist->rows);
 
   work = clist->selection;
@@ -7289,7 +7287,7 @@ real_sort_list (GtkCMCList *clist)
 	  work->data = GINT_TO_POINTER (i);
 	  work = work->next;
 	}
-      
+
       if (i == clist->rows - 1)
 	clist->row_list_end = list;
     }
@@ -7432,7 +7430,7 @@ drag_dest_cell (GtkCMCList         *clist,
     }
   if (dest_info->cell.row < -1)
     dest_info->cell.row = -1;
-  
+
   x -= border_width + style->xthickness;
 
   dest_info->cell.column = COLUMN_FROM_XPIXEL (clist, x);
@@ -7443,7 +7441,7 @@ drag_dest_cell (GtkCMCList         *clist,
       gint h = 0;
 
       y_delta = y - ROW_TOP_YPIXEL (clist, dest_info->cell.row);
-      
+
       if (GTK_CMCLIST_DRAW_DRAG_RECT(clist))
 	{
 	  dest_info->insert_pos = GTK_CMCLIST_DRAG_INTO;
@@ -7544,7 +7542,7 @@ gtk_cmclist_drag_leave (GtkWidget      *widget,
   clist = GTK_CMCLIST (widget);
 
   dest_info = g_dataset_get_data (context, "gtk-clist-drag-dest");
-  
+
   if (dest_info)
     {
       if (dest_info->cell.row >= 0 &&
@@ -7616,7 +7614,7 @@ gtk_cmclist_drag_motion (GtkWidget      *widget,
 		}
 	      return TRUE;
 	    }
-		
+
 	  if (new_info.cell.row != dest_info->cell.row ||
 	      (new_info.cell.row == dest_info->cell.row &&
 	       dest_info->insert_pos != new_info.insert_pos))
@@ -7625,7 +7623,7 @@ gtk_cmclist_drag_motion (GtkWidget      *widget,
 	      dest_info->insert_pos  = new_info.insert_pos;
 	      dest_info->cell.row    = new_info.cell.row;
 	      dest_info->cell.column = new_info.cell.column;
-	      
+
 	      clist->drag_highlight_row = dest_info->cell.row;
 	      clist->drag_highlight_pos = dest_info->insert_pos;
 
@@ -7709,7 +7707,7 @@ gtk_cmclist_drag_data_received (GtkWidget        *widg
     }
 }
 
-static void  
+static void
 gtk_cmclist_drag_data_get (GtkWidget        *widget,
 			 GdkDragContext   *context,
 			 GtkSelectionData *selection_data,
@@ -7743,7 +7741,7 @@ gtk_cmclist_drag_data_get (GtkWidget        *widget,
 }
 
 void
-gtk_cmclist_set_reorderable (GtkCMCList *clist, 
+gtk_cmclist_set_reorderable (GtkCMCList *clist,
 			   gboolean  reorderable)
 {
   GtkWidget *widget;
@@ -7787,10 +7785,10 @@ gtk_cmclist_set_button_actions (GtkCMCList *clist,
 			      guint8    button_actions)
 {
   cm_return_if_fail (GTK_IS_CMCLIST (clist));
-  
+
   if (button < MAX_BUTTON)
     {
-      if (gtkut_pointer_is_grabbed (GTK_WIDGET(clist)) || 
+      if (gtkut_pointer_is_grabbed (GTK_WIDGET(clist)) ||
 	  gtk_widget_has_grab (GTK_WIDGET(clist)))
 	{
 	  remove_grab (clist);
blob - 78e3ddab6316de6010317d7695717f61303f4ca4
blob + 90fa1cfcc5129d889893201df64bf8fd6aaeb89f
--- src/gtk/gtkcmctree.c
+++ src/gtk/gtkcmctree.c
@@ -1,6 +1,6 @@
 /* GTK - The GIMP Toolkit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald, 
- * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>  
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald,
+ * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
  *
  * GtkCMCTree widget for GTK+
  * Copyright (C) 1998 Lars Hamann and Stefan Jeske
@@ -25,10 +25,9 @@
  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
  * file for a list of people on the GTK+ Team.  See the ChangeLog
  * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
  */
 
-#include <config.h>
 #include <stdlib.h>
 
 #include <gtk/gtk.h>
@@ -176,7 +175,7 @@ static void ctree_attach_styles         (GtkCMCTree   
 					 GtkCMCTreeNode   *node,
 					 gpointer        data);
 static void ctree_detach_styles         (GtkCMCTree       *ctree,
-					 GtkCMCTreeNode   *node, 
+					 GtkCMCTreeNode   *node,
 					 gpointer        data);
 static void set_cell_contents           (GtkCMCList      *clist,
 					 GtkCMCListRow   *clist_row,
@@ -196,32 +195,32 @@ static void set_node_info               (GtkCMCTree   
 static GtkCMCTreeRow *row_new             (GtkCMCTree      *ctree);
 static void row_delete                  (GtkCMCTree      *ctree,
 				 	 GtkCMCTreeRow   *ctree_row);
-static void tree_delete                 (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_delete                 (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gpointer       data);
-static void tree_delete_row             (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_delete_row             (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gpointer       data);
 static void real_clear                  (GtkCMCList      *clist);
-static void tree_update_level           (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_update_level           (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gpointer       data);
-static void tree_select                 (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_select                 (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gpointer       data);
-static void tree_unselect               (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_unselect               (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 				         gpointer       data);
 static void real_select_all             (GtkCMCList      *clist);
 static void real_unselect_all           (GtkCMCList      *clist);
-static void tree_expand                 (GtkCMCTree      *ctree, 
+static void tree_expand                 (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
 					 gpointer       data);
-static void tree_collapse               (GtkCMCTree      *ctree, 
+static void tree_collapse               (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
 					 gpointer       data);
-static void tree_collapse_to_depth      (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void tree_collapse_to_depth      (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gint           depth);
 static void tree_toggle_expansion       (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
@@ -248,7 +247,7 @@ static void real_tree_collapse          (GtkCMCTree   
 					 GtkCMCTreeNode  *node);
 static void real_tree_move              (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
-					 GtkCMCTreeNode  *new_parent, 
+					 GtkCMCTreeNode  *new_parent,
 					 GtkCMCTreeNode  *new_sibling);
 static void real_row_move               (GtkCMCList      *clist,
 					 gint           source_row,
@@ -258,15 +257,15 @@ static void gtk_cmctree_link              (GtkCMCTree 
 					 GtkCMCTreeNode  *parent,
 					 GtkCMCTreeNode  *sibling,
 					 gboolean       update_focus_row);
-static void gtk_cmctree_unlink            (GtkCMCTree      *ctree, 
+static void gtk_cmctree_unlink            (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
 					 gboolean       update_focus_row);
 static GtkCMCTreeNode * gtk_cmctree_last_visible (GtkCMCTree     *ctree,
 					      GtkCMCTreeNode *node);
-static gboolean ctree_is_hot_spot       (GtkCMCTree      *ctree, 
+static gboolean ctree_is_hot_spot       (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
-					 gint           row, 
-					 gint           x, 
+					 gint           row,
+					 gint           x,
 					 gint           y);
 static void tree_sort                   (GtkCMCTree      *ctree,
 					 GtkCMCTreeNode  *node,
@@ -279,8 +278,8 @@ static GList * selection_find           (GtkCMCList   
 static void resync_selection            (GtkCMCList      *clist,
 					 GdkEvent      *event);
 static void real_undo_selection         (GtkCMCList      *clist);
-static void select_row_recursive        (GtkCMCTree      *ctree, 
-					 GtkCMCTreeNode  *node, 
+static void select_row_recursive        (GtkCMCTree      *ctree,
+					 GtkCMCTreeNode  *node,
 					 gpointer       data);
 static gint real_insert_row             (GtkCMCList      *clist,
 					 gint           row,
@@ -521,7 +520,7 @@ static gboolean filter_fg (PangoAttribute *attribute, 
 	if (klass->type == PANGO_ATTR_FOREGROUND)
 		return TRUE;
 
-	return FALSE;	
+	return FALSE;
 }
 
 static PangoLayout *
@@ -548,7 +547,7 @@ create_cell_layout (GtkCMCList       *clist,
 
       if (!text)
 	return NULL;
-      
+
       if (!GTK_SCTREE(clist)->use_markup[column]) {
 	      layout = gtk_widget_create_pango_layout (GTK_WIDGET (clist),
 						       ((cell->type == GTK_CMCELL_PIXTEXT) ?
@@ -569,9 +568,9 @@ create_cell_layout (GtkCMCList       *clist,
 			      pango_attr_list_unref(rem);
 	      }
       }
-      
+
       return layout;
-      
+
     default:
       return NULL;
     }
@@ -589,7 +588,7 @@ draw_row (GtkCMCList     *clist,
   GtkCMCTree  *ctree;
   GdkRectangle *crect;
   GdkRectangle row_rectangle;
-  GdkRectangle cell_rectangle; 
+  GdkRectangle cell_rectangle;
   GdkRectangle clip_rectangle;
   GdkRectangle intersect_rectangle;
   gint last_column;
@@ -659,7 +658,7 @@ draw_row (GtkCMCList     *clist,
   cell_rectangle.height = CELL_SPACING;
 
   /* rectangle used to clip drawing operations, its y and height
-   * positions only need to be set once, so we set them once here. 
+   * positions only need to be set once, so we set them once here.
    * the x and width are set withing the drawing loop below once per
    * column */
   clip_rectangle.y = row_rectangle.y;
@@ -674,7 +673,7 @@ draw_row (GtkCMCList     *clist,
   state = clist_row->state;
 
   cr = gdk_cairo_create(clist->clist_window);
-  
+
   if (clist_row->fg_set && state != GTK_STATE_SELECTED)
 	fgcolor = &clist_row->foreground;
   else
@@ -714,7 +713,7 @@ draw_row (GtkCMCList     *clist,
 	  gdk_cairo_set_source_color(cr, &style->base[GTK_STATE_NORMAL]);
 	  cairo_fill(cr);
 	}
-    }	  
+    }
 
   for (last_column = clist->columns - 1;
        last_column >= 0 && !clist->column[last_column].visible; last_column--)
@@ -898,7 +897,7 @@ draw_row (GtkCMCList     *clist,
       old_offset = offset;
       offset = draw_cell_pixbuf (clist->clist_window, &clip_rectangle, cr,
 				 GTK_CMCELL_PIXTEXT (clist_row->cell[i])->pixbuf,
-				 offset, 
+				 offset,
 				 clip_rectangle.y + clist_row->cell[i].vertical
 				 + (clip_rectangle.height - height) / 2,
 				 pixbuf_width, height);
@@ -906,7 +905,7 @@ draw_row (GtkCMCList     *clist,
       if (layout)
 	{
 	  gint row_center_offset = (clist->row_height - logical_rect.height) / 2;
-	  
+
 	  if (clist->column[i].justification == GTK_JUSTIFY_RIGHT)
 	    {
 	      offset = (old_offset - string_width);
@@ -918,7 +917,7 @@ draw_row (GtkCMCList     *clist,
 	      if (GTK_CMCELL_PIXTEXT (clist_row->cell[i])->pixbuf)
 		offset += GTK_CMCELL_PIXTEXT (clist_row->cell[i])->spacing;
 	    }
-	  
+
 	  cairo_move_to(cr, offset, row_rectangle.y + row_center_offset + clist_row->cell[i].vertical);
 	  gdk_cairo_set_source_color(cr, fgcolor);
 	  pango_cairo_show_layout(cr, layout);
@@ -1141,7 +1140,7 @@ gtk_cmctree_class_init (GtkCMCTreeClass *klass)
 				GDK_KEY_KP_Add, GDK_CONTROL_MASK,
 				"change_focus_row_expansion", 1,
 				G_TYPE_ENUM, GTK_CMCTREE_EXPANSION_EXPAND_RECURSIVE);
-  
+
   gtk_binding_entry_add_signal (binding_set,
 				GDK_KEY_minus, 0,
 				"change_focus_row_expansion", 1,
@@ -1185,7 +1184,7 @@ gtk_cmctree_class_init (GtkCMCTreeClass *klass)
 				GDK_KEY_asterisk, GDK_CONTROL_MASK,
 				"change_focus_row_expansion", 1,
 				G_TYPE_ENUM,
-				GTK_CMCTREE_EXPANSION_TOGGLE_RECURSIVE);  
+				GTK_CMCTREE_EXPANSION_TOGGLE_RECURSIVE);
 }
 
 static void
@@ -1434,7 +1433,7 @@ gtk_cmctree_button_press (GtkWidget      *widget,
 	return FALSE;
 
       work = GTK_CMCTREE_NODE (g_list_nth (clist->row_list, row));
-	  
+
       if (button_actions & GTK_CMBUTTON_EXPANDS &&
 	  (GTK_CMCTREE_ROW (work)->children && !GTK_CMCTREE_ROW (work)->is_leaf  &&
 	   (event->type == GDK_2BUTTON_PRESS ||
@@ -1448,7 +1447,7 @@ gtk_cmctree_button_press (GtkWidget      *widget,
 	  return TRUE;
 	}
     }
-  
+
   return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event);
 }
 
@@ -1457,7 +1456,7 @@ gtk_cmctree_last_visible (GtkCMCTree     *ctree,
 			GtkCMCTreeNode *node)
 {
   GtkCMCTreeNode *work;
-  
+
   if (!node)
     return NULL;
 
@@ -1485,7 +1484,7 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
   GList *work;
   gboolean visible = FALSE;
   gint rows = 0;
-  
+
   if (sibling)
     cm_return_if_fail (GTK_CMCTREE_ROW (sibling)->parent == parent);
   cm_return_if_fail (node != NULL);
@@ -1497,7 +1496,7 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
   if (update_focus_row && clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -1540,7 +1539,7 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
 	  list = (GList *)GTK_CMCTREE_NODE_PREV (sibling);
 	  list->next = (GList *)node;
 	}
-      
+
       list = (GList *)node;
       list->prev = (GList *)GTK_CMCTREE_NODE_PREV (sibling);
       list_end->next = (GList *)sibling;
@@ -1557,11 +1556,11 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
 	  while (GTK_CMCTREE_ROW (work)->sibling)
 	    work = (GList *)(GTK_CMCTREE_ROW (work)->sibling);
 	  GTK_CMCTREE_ROW (work)->sibling = node;
-	  
+
 	  /* find last visible child of sibling */
 	  work = (GList *) gtk_cmctree_last_visible (ctree,
 						   GTK_CMCTREE_NODE (work));
-	  
+
 	  list_end->next = work->next;
 	  if (work->next)
 	    work->next->prev = list_end;
@@ -1600,7 +1599,7 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
 	}
     }
 
-  gtk_cmctree_pre_recursive (ctree, node, tree_update_level, NULL); 
+  gtk_cmctree_pre_recursive (ctree, node, tree_update_level, NULL);
 
   if (clist->row_list_end == NULL ||
       clist->row_list_end->next == (GList *)node)
@@ -1609,9 +1608,9 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
   if (visible && update_focus_row)
     {
       gint pos;
-	  
+
       pos = g_list_position (clist->row_list, (GList *)node);
-  
+
       if (pos <= clist->focus_row)
 	{
 	  clist->focus_row += rows;
@@ -1621,7 +1620,7 @@ gtk_cmctree_link (GtkCMCTree     *ctree,
 }
 
 static void
-gtk_cmctree_unlink (GtkCMCTree     *ctree, 
+gtk_cmctree_unlink (GtkCMCTree     *ctree,
 		  GtkCMCTreeNode *node,
                   gboolean      update_focus_row)
 {
@@ -1637,11 +1636,11 @@ gtk_cmctree_unlink (GtkCMCTree     *ctree, 
   cm_return_if_fail (node != NULL);
 
   clist = GTK_CMCLIST (ctree);
-  
+
   if (update_focus_row && clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -1675,7 +1674,7 @@ gtk_cmctree_unlink (GtkCMCTree     *ctree, 
       if (update_focus_row)
 	{
 	  gint pos;
-	  
+
 	  pos = g_list_position (clist->row_list, (GList *)node);
 	  if (pos + rows < clist->focus_row)
 	    clist->focus_row -= (rows + 1);
@@ -1685,7 +1684,7 @@ gtk_cmctree_unlink (GtkCMCTree     *ctree, 
 		clist->focus_row = MAX (pos - 1, 0);
 	      else
 		clist->focus_row = pos;
-	      
+
 	      clist->focus_row = MIN (clist->focus_row, clist->rows - 1);
 	    }
 	  clist->undo_anchor = clist->focus_row;
@@ -1766,7 +1765,7 @@ real_row_move (GtkCMCList *clist,
 
   if (source_row < dest_row)
     {
-      GtkCMCTreeNode *work; 
+      GtkCMCTreeNode *work;
 
       dest_row++;
       work = GTK_CMCTREE_ROW (node)->children;
@@ -1795,7 +1794,7 @@ real_row_move (GtkCMCList *clist,
 static void
 real_tree_move (GtkCMCTree     *ctree,
 		GtkCMCTreeNode *node,
-		GtkCMCTreeNode *new_parent, 
+		GtkCMCTreeNode *new_parent,
 		GtkCMCTreeNode *new_sibling)
 {
   GtkCMCList *clist;
@@ -1804,7 +1803,7 @@ real_tree_move (GtkCMCTree     *ctree,
 
   cm_return_if_fail (ctree != NULL);
   cm_return_if_fail (node != NULL);
-  cm_return_if_fail (!new_sibling || 
+  cm_return_if_fail (!new_sibling ||
 		    GTK_CMCTREE_ROW (new_sibling)->parent == new_parent);
 
   if (new_parent && GTK_CMCTREE_ROW (new_parent)->is_leaf)
@@ -1822,7 +1821,7 @@ real_tree_move (GtkCMCTree     *ctree,
   if (clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -1833,7 +1832,7 @@ real_tree_move (GtkCMCTree     *ctree,
     {
       if (new_parent == GTK_CMCTREE_ROW (node)->parent)
 	return;
-      
+
       if (new_parent)
 	new_sibling = GTK_CMCTREE_ROW (new_parent)->children;
       else
@@ -1844,7 +1843,7 @@ real_tree_move (GtkCMCTree     *ctree,
 	new_sibling = GTK_CMCTREE_ROW (new_sibling)->sibling;
     }
 
-  if (new_parent == GTK_CMCTREE_ROW (node)->parent && 
+  if (new_parent == GTK_CMCTREE_ROW (node)->parent &&
       new_sibling == GTK_CMCTREE_ROW (node)->sibling)
     return;
 
@@ -1853,10 +1852,10 @@ real_tree_move (GtkCMCTree     *ctree,
   work = NULL;
   if (gtk_cmctree_is_viewable (ctree, node))
     work = GTK_CMCTREE_NODE (g_list_nth (clist->row_list, clist->focus_row));
-      
+
   gtk_cmctree_unlink (ctree, node, FALSE);
   gtk_cmctree_link (ctree, node, new_parent, new_sibling, FALSE);
-  
+
   if (work)
     {
       while (work &&  !gtk_cmctree_is_viewable (ctree, work))
@@ -1886,10 +1885,10 @@ change_focus_row_expansion (GtkCMCTree          *ctree
 
   clist = GTK_CMCLIST (ctree);
 
-  if (gtkut_pointer_is_grabbed (GTK_WIDGET (ctree)) && 
+  if (gtkut_pointer_is_grabbed (GTK_WIDGET (ctree)) &&
       gtk_widget_has_grab (GTK_WIDGET(ctree)))
     return;
-  
+
   if (!(node =
 	GTK_CMCTREE_NODE (g_list_nth (clist->row_list, clist->focus_row))) ||
       GTK_CMCTREE_ROW (node)->is_leaf || !(GTK_CMCTREE_ROW (node)->children))
@@ -1918,7 +1917,7 @@ change_focus_row_expansion (GtkCMCTree          *ctree
     }
 }
 
-static void 
+static void
 real_tree_expand (GtkCMCTree     *ctree,
 		  GtkCMCTreeNode *node)
 {
@@ -1933,7 +1932,7 @@ real_tree_expand (GtkCMCTree     *ctree,
     return;
 
   clist = GTK_CMCLIST (ctree);
-  
+
   GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
 
   GTK_CMCTREE_ROW (node)->expanded = TRUE;
@@ -1946,13 +1945,13 @@ real_tree_expand (GtkCMCTree     *ctree,
       (clist, &GTK_CMCTREE_ROW (node)->row, ctree->tree_column, &requisition);
 
   /* unref/unset closed pixbuf */
-  if (GTK_CMCELL_PIXTEXT 
+  if (GTK_CMCELL_PIXTEXT
       (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf)
     {
       g_object_unref
 	(GTK_CMCELL_PIXTEXT
 	 (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf);
-      
+
       GTK_CMCELL_PIXTEXT
 	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf = NULL;
     }
@@ -1960,8 +1959,8 @@ real_tree_expand (GtkCMCTree     *ctree,
   /* set/ref opened pixbuf */
   if (GTK_CMCTREE_ROW (node)->pixbuf_opened)
     {
-      GTK_CMCELL_PIXTEXT 
-	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf = 
+      GTK_CMCELL_PIXTEXT
+	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf =
 	g_object_ref (GTK_CMCTREE_ROW (node)->pixbuf_opened);
     }
 
@@ -1974,7 +1973,7 @@ real_tree_expand (GtkCMCTree     *ctree,
       gint tmp = 0;
       gint row;
       gint i;
-      
+
       if (visible && !GTK_CMCLIST_AUTO_RESIZE_BLOCKED (clist))
 	{
 	  cell_width = g_new0 (gint, clist->columns);
@@ -2044,7 +2043,7 @@ real_tree_expand (GtkCMCTree     *ctree,
 			requisition.width);
 }
 
-static void 
+static void
 real_tree_collapse (GtkCMCTree     *ctree,
 		    GtkCMCTreeNode *node)
 {
@@ -2063,7 +2062,7 @@ real_tree_collapse (GtkCMCTree     *ctree,
   clist = GTK_CMCLIST (ctree);
 
   GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-  
+
   GTK_CMCTREE_ROW (node)->expanded = FALSE;
   level = GTK_CMCTREE_ROW (node)->level;
 
@@ -2075,13 +2074,13 @@ real_tree_collapse (GtkCMCTree     *ctree,
       (clist, &GTK_CMCTREE_ROW (node)->row, ctree->tree_column, &requisition);
 
   /* unref/unset opened pixbuf */
-  if (GTK_CMCELL_PIXTEXT 
+  if (GTK_CMCELL_PIXTEXT
       (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf)
     {
       g_object_unref
 	(GTK_CMCELL_PIXTEXT
 	 (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf);
-      
+
       GTK_CMCELL_PIXTEXT
 	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf = NULL;
     }
@@ -2089,8 +2088,8 @@ real_tree_collapse (GtkCMCTree     *ctree,
   /* set/ref closed pixbuf */
   if (GTK_CMCTREE_ROW (node)->pixbuf_closed)
     {
-      GTK_CMCELL_PIXTEXT 
-	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf = 
+      GTK_CMCELL_PIXTEXT
+	(GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->pixbuf =
 	g_object_ref (GTK_CMCTREE_ROW (node)->pixbuf_closed);
     }
 
@@ -2140,7 +2139,7 @@ real_tree_collapse (GtkCMCTree     *ctree,
     /* resize tree_column if needed */
     column_auto_resize (clist, &GTK_CMCTREE_ROW (node)->row, ctree->tree_column,
 			requisition.width);
-    
+
 }
 
 static void
@@ -2231,7 +2230,7 @@ cell_size_request (GtkCMCList       *clist,
 
       requisition->width = logical_rect.width;
       requisition->height = logical_rect.height;
-      
+
       g_object_unref (G_OBJECT (layout));
     }
   else
@@ -2251,10 +2250,10 @@ cell_size_request (GtkCMCList       *clist,
 	}
       else
 	width = height = 0;
-	  
+
       requisition->width += width;
       requisition->height = MAX (requisition->height, height);
-      
+
       if (column == ctree->tree_column)
 	{
 	  requisition->width += (ctree->tree_spacing + ctree->tree_indent *
@@ -2335,7 +2334,7 @@ set_cell_contents (GtkCMCList    *clist,
     case GTK_CMCELL_WIDGET:
       /* unimplemented */
       break;
-      
+
     default:
       break;
     }
@@ -2391,7 +2390,7 @@ set_cell_contents (GtkCMCList    *clist,
     default:
       break;
     }
-  
+
   if (visible && clist->column[column].auto_resize &&
       !GTK_CMCLIST_AUTO_RESIZE_BLOCKED (clist))
     column_auto_resize (clist, clist_row, column, requisition.width);
@@ -2401,7 +2400,7 @@ set_cell_contents (GtkCMCList    *clist,
     g_object_unref (old_pixbuf);
 }
 
-static void 
+static void
 set_node_info (GtkCMCTree     *ctree,
 	       GtkCMCTreeNode *node,
 	       const gchar  *text,
@@ -2438,14 +2437,14 @@ set_node_info (GtkCMCTree     *ctree,
   if (GTK_CMCTREE_ROW (node)->expanded)
     gtk_cmctree_node_set_pixtext (ctree, node, ctree->tree_column,
 				text, spacing, pixbuf_opened);
-  else 
+  else
     gtk_cmctree_node_set_pixtext (ctree, node, ctree->tree_column,
 				text, spacing, pixbuf_closed);
 }
 
 static void
-tree_delete (GtkCMCTree     *ctree, 
-	     GtkCMCTreeNode *node, 
+tree_delete (GtkCMCTree     *ctree,
+	     GtkCMCTreeNode *node,
 	     gpointer      data)
 {
   tree_unselect (ctree,  node, NULL);
@@ -2454,8 +2453,8 @@ tree_delete (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_delete_row (GtkCMCTree     *ctree, 
-		 GtkCMCTreeNode *node, 
+tree_delete_row (GtkCMCTree     *ctree,
+		 GtkCMCTreeNode *node,
 		 gpointer      data)
 {
   row_delete (ctree, GTK_CMCTREE_ROW (node));
@@ -2463,23 +2462,23 @@ tree_delete_row (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_update_level (GtkCMCTree     *ctree, 
-		   GtkCMCTreeNode *node, 
+tree_update_level (GtkCMCTree     *ctree,
+		   GtkCMCTreeNode *node,
 		   gpointer      data)
 {
   if (!node)
     return;
 
   if (GTK_CMCTREE_ROW (node)->parent)
-      GTK_CMCTREE_ROW (node)->level = 
+      GTK_CMCTREE_ROW (node)->level =
 	GTK_CMCTREE_ROW (GTK_CMCTREE_ROW (node)->parent)->level + 1;
   else
       GTK_CMCTREE_ROW (node)->level = 1;
 }
 
 static void
-tree_select (GtkCMCTree     *ctree, 
-	     GtkCMCTreeNode *node, 
+tree_select (GtkCMCTree     *ctree,
+	     GtkCMCTreeNode *node,
 	     gpointer      data)
 {
   if (node && GTK_CMCTREE_ROW (node)->row.state != GTK_STATE_SELECTED &&
@@ -2489,8 +2488,8 @@ tree_select (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_unselect (GtkCMCTree     *ctree, 
-	       GtkCMCTreeNode *node, 
+tree_unselect (GtkCMCTree     *ctree,
+	       GtkCMCTreeNode *node,
 	       gpointer      data)
 {
   if (node && GTK_CMCTREE_ROW (node)->row.state == GTK_STATE_SELECTED)
@@ -2499,8 +2498,8 @@ tree_unselect (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_expand (GtkCMCTree     *ctree, 
-	     GtkCMCTreeNode *node, 
+tree_expand (GtkCMCTree     *ctree,
+	     GtkCMCTreeNode *node,
 	     gpointer      data)
 {
   if (node && !GTK_CMCTREE_ROW (node)->expanded)
@@ -2508,8 +2507,8 @@ tree_expand (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_collapse (GtkCMCTree     *ctree, 
-	       GtkCMCTreeNode *node, 
+tree_collapse (GtkCMCTree     *ctree,
+	       GtkCMCTreeNode *node,
 	       gpointer      data)
 {
   if (node && GTK_CMCTREE_ROW (node)->expanded)
@@ -2517,8 +2516,8 @@ tree_collapse (GtkCMCTree     *ctree, 
 }
 
 static void
-tree_collapse_to_depth (GtkCMCTree     *ctree, 
-			GtkCMCTreeNode *node, 
+tree_collapse_to_depth (GtkCMCTree     *ctree,
+			GtkCMCTreeNode *node,
 			gint          depth)
 {
   if (node && GTK_CMCTREE_ROW (node)->level == depth)
@@ -2574,7 +2573,7 @@ row_new (GtkCMCTree *ctree)
   ctree_row->children      = NULL;
   ctree_row->pixbuf_closed = NULL;
   ctree_row->pixbuf_opened = NULL;
-  
+
   return ctree_row;
 }
 
@@ -2640,7 +2639,7 @@ real_select_row (GtkCMCList *clist,
   GList *node;
 
   cm_return_if_fail (GTK_IS_CMCTREE (clist));
-  
+
   if ((node = g_list_nth (clist->row_list, row)) &&
       GTK_CMCTREE_ROW (node)->row.selectable)
     g_signal_emit (G_OBJECT (clist), ctree_signals[TREE_SELECT_ROW],0,
@@ -2663,11 +2662,11 @@ real_unselect_row (GtkCMCList *clist,
 }
 
 static void
-tree_draw_node (GtkCMCTree     *ctree, 
+tree_draw_node (GtkCMCTree     *ctree,
                GtkCMCTreeNode *node)
 {
   GtkCMCList *clist;
-  
+
   clist = GTK_CMCLIST (ctree);
 
   if (CLIST_UNFROZEN (clist) && gtk_cmctree_is_viewable (ctree, node))
@@ -2717,7 +2716,7 @@ real_tree_select (GtkCMCTree     *ctree,
 	{
 	  sel_row = list->data;
 	  list = list->next;
-	  
+
 	  if (node == sel_row)
 	    node_selected = TRUE;
 	  else
@@ -2763,22 +2762,22 @@ real_tree_unselect (GtkCMCTree     *ctree,
     clist->selection_end = clist->selection_end->prev;
 
   clist->selection = g_list_remove (clist->selection, node);
-  
+
   GTK_CMCTREE_ROW (node)->row.state = GTK_STATE_NORMAL;
 
   tree_draw_node (ctree, node);
 }
 
 static void
-select_row_recursive (GtkCMCTree     *ctree, 
-		      GtkCMCTreeNode *node, 
+select_row_recursive (GtkCMCTree     *ctree,
+		      GtkCMCTreeNode *node,
 		      gpointer      data)
 {
   if (!node || GTK_CMCTREE_ROW (node)->row.state == GTK_STATE_SELECTED ||
       !GTK_CMCTREE_ROW (node)->row.selectable)
     return;
 
-  GTK_CMCLIST (ctree)->undo_unselection = 
+  GTK_CMCLIST (ctree)->undo_unselection =
     g_list_prepend (GTK_CMCLIST (ctree)->undo_unselection, node);
   gtk_cmctree_select (ctree, node);
 }
@@ -2788,7 +2787,7 @@ real_select_all (GtkCMCList *clist)
 {
   GtkCMCTree *ctree;
   GtkCMCTreeNode *node;
-  
+
   cm_return_if_fail (GTK_IS_CMCTREE (clist));
 
   ctree = GTK_CMCTREE (clist);
@@ -2807,7 +2806,7 @@ real_select_all (GtkCMCList *clist)
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
       clist->undo_unselection = NULL;
-	  
+
       clist->anchor_state = GTK_STATE_SELECTED;
       clist->anchor = -1;
       clist->drag_pos = -1;
@@ -2832,9 +2831,9 @@ real_unselect_all (GtkCMCList *clist)
   GtkCMCTree *ctree;
   GtkCMCTreeNode *node;
   GList *list;
- 
+
   cm_return_if_fail (GTK_IS_CMCTREE (clist));
-  
+
   ctree = GTK_CMCTREE (clist);
 
   switch (clist->selection_mode)
@@ -2875,10 +2874,10 @@ real_unselect_all (GtkCMCList *clist)
 }
 
 static gboolean
-ctree_is_hot_spot (GtkCMCTree     *ctree, 
+ctree_is_hot_spot (GtkCMCTree     *ctree,
 		   GtkCMCTreeNode *node,
-		   gint          row, 
-		   gint          x, 
+		   gint          row,
+		   gint          x,
 		   gint          y)
 {
   GtkCMCTreeRow *tree_row;
@@ -2906,7 +2905,7 @@ ctree_is_hot_spot (GtkCMCTree     *ctree, 
 	(clist->row_height - 1) % 2);
 
   if (clist->column[ctree->tree_column].justification == GTK_JUSTIFY_RIGHT)
-    xl = (clist->column[ctree->tree_column].area.x + 
+    xl = (clist->column[ctree->tree_column].area.x +
 	  clist->column[ctree->tree_column].area.width - 1 + clist->hoffset -
 	  (tree_row->level - 1) * ctree->tree_indent - hotspot_size);
   else
@@ -2940,7 +2939,7 @@ gtk_cmctree_constructor (GType                  type,
 }
 
 GtkWidget*
-gtk_cmctree_new_with_titles (gint         columns, 
+gtk_cmctree_new_with_titles (gint         columns,
 			   gint         tree_column,
 			   gchar       *titles[])
 {
@@ -2967,7 +2966,7 @@ gtk_cmctree_new_with_titles (gint         columns, 
 }
 
 GtkWidget *
-gtk_cmctree_new (gint columns, 
+gtk_cmctree_new (gint columns,
 	       gint tree_column)
 {
   return gtk_cmctree_new_with_titles (columns, tree_column, NULL);
@@ -2993,13 +2992,13 @@ real_insert_row (GtkCMCList *clist,
 
   if (GTK_CMCLIST_AUTO_SORT (clist) || !sibling)
     return g_list_position (clist->row_list, (GList *) node);
-  
+
   return row;
 }
 
-GtkCMCTreeNode * 
+GtkCMCTreeNode *
 gtk_cmctree_insert_node (GtkCMCTree     *ctree,
-		       GtkCMCTreeNode *parent, 
+		       GtkCMCTreeNode *parent,
 		       GtkCMCTreeNode *sibling,
 		       gchar        *text[],
 		       guint8        spacing,
@@ -3096,7 +3095,7 @@ gtk_cmctree_insert_gnode (GtkCMCTree          *ctree,
   cm_return_val_if_fail (func != NULL, NULL);
   if (sibling)
     cm_return_val_if_fail (GTK_CMCTREE_ROW (sibling)->parent == parent, NULL);
-  
+
   clist = GTK_CMCLIST (ctree);
 
   if (parent)
@@ -3137,8 +3136,8 @@ gtk_cmctree_insert_gnode (GtkCMCTree          *ctree,
 					  work, func, data);
       if (new_child)
 	child = new_child;
-    }	
-  
+    }
+
   gtk_cmclist_thaw (clist);
 
   return cnode;
@@ -3167,7 +3166,7 @@ gtk_cmctree_export_to_gnode (GtkCMCTree          *ctre
 
   gnode = g_node_new (NULL);
   depth = g_node_depth (parent) + 1;
-  
+
   if (!func (ctree, depth, gnode, node, data))
     {
       g_node_destroy (gnode);
@@ -3191,7 +3190,7 @@ gtk_cmctree_export_to_gnode (GtkCMCTree          *ctre
 
   return gnode;
 }
-  
+
 static void
 real_remove_row (GtkCMCList *clist,
 		 gint      row)
@@ -3207,7 +3206,7 @@ real_remove_row (GtkCMCList *clist,
 }
 
 void
-gtk_cmctree_remove_node (GtkCMCTree     *ctree, 
+gtk_cmctree_remove_node (GtkCMCTree     *ctree,
 		       GtkCMCTreeNode *node)
 {
   GtkCMCList *clist;
@@ -3256,7 +3255,7 @@ real_clear (GtkCMCList *clist)
     {
       ptr = work;
       work = GTK_CMCTREE_ROW (work)->sibling;
-      gtk_cmctree_post_recursive (ctree, ptr, GTK_CMCTREE_FUNC (tree_delete_row), 
+      gtk_cmctree_post_recursive (ctree, ptr, GTK_CMCTREE_FUNC (tree_delete_row),
 				NULL);
     }
   GTK_CMCLIST_UNSET_FLAG (clist, CMCLIST_AUTO_RESIZE_BLOCKED);
@@ -3272,7 +3271,7 @@ real_clear (GtkCMCList *clist)
 
 
 void
-gtk_cmctree_post_recursive (GtkCMCTree     *ctree, 
+gtk_cmctree_post_recursive (GtkCMCTree     *ctree,
 			  GtkCMCTreeNode *node,
 			  GtkCMCTreeFunc  func,
 			  gpointer      data)
@@ -3300,7 +3299,7 @@ gtk_cmctree_post_recursive (GtkCMCTree     *ctree, 
 }
 
 void
-gtk_cmctree_post_recursive_to_depth (GtkCMCTree     *ctree, 
+gtk_cmctree_post_recursive_to_depth (GtkCMCTree     *ctree,
 				   GtkCMCTreeNode *node,
 				   gint          depth,
 				   GtkCMCTreeFunc  func,
@@ -3338,7 +3337,7 @@ gtk_cmctree_post_recursive_to_depth (GtkCMCTree     *c
 }
 
 void
-gtk_cmctree_pre_recursive (GtkCMCTree     *ctree, 
+gtk_cmctree_pre_recursive (GtkCMCTree     *ctree,
 			 GtkCMCTreeNode *node,
 			 GtkCMCTreeFunc  func,
 			 gpointer      data)
@@ -3366,9 +3365,9 @@ gtk_cmctree_pre_recursive (GtkCMCTree     *ctree, 
 }
 
 void
-gtk_cmctree_pre_recursive_to_depth (GtkCMCTree     *ctree, 
+gtk_cmctree_pre_recursive_to_depth (GtkCMCTree     *ctree,
 				  GtkCMCTreeNode *node,
-				  gint          depth, 
+				  gint          depth,
 				  GtkCMCTreeFunc  func,
 				  gpointer      data)
 {
@@ -3405,9 +3404,9 @@ gtk_cmctree_pre_recursive_to_depth (GtkCMCTree     *ct
 }
 
 gboolean
-gtk_cmctree_is_viewable (GtkCMCTree     *ctree, 
+gtk_cmctree_is_viewable (GtkCMCTree     *ctree,
 		       GtkCMCTreeNode *node)
-{ 
+{
   GtkCMCTreeRow *work;
 
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), FALSE);
@@ -3424,21 +3423,21 @@ gtk_cmctree_is_viewable (GtkCMCTree     *ctree, 
   return FALSE;
 }
 
-GtkCMCTreeNode * 
+GtkCMCTreeNode *
 gtk_cmctree_last (GtkCMCTree     *ctree,
 		GtkCMCTreeNode *node)
 {
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), NULL);
 
-  if (!node) 
+  if (!node)
     return NULL;
 
   while (GTK_CMCTREE_ROW (node)->sibling)
     node = GTK_CMCTREE_ROW (node)->sibling;
-  
+
   if (GTK_CMCTREE_ROW (node)->children)
     return gtk_cmctree_last (ctree, GTK_CMCTREE_ROW (node)->children);
-  
+
   return node;
 }
 
@@ -3447,10 +3446,10 @@ gtk_cmctree_find_node_ptr (GtkCMCTree    *ctree,
 			 GtkCMCTreeRow *ctree_row)
 {
   GtkCMCTreeNode *node;
-  
+
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), NULL);
   cm_return_val_if_fail (ctree_row != NULL, NULL);
-  
+
   if (ctree_row->parent)
     node = GTK_CMCTREE_ROW (ctree_row->parent)->children;
   else
@@ -3458,7 +3457,7 @@ gtk_cmctree_find_node_ptr (GtkCMCTree    *ctree,
 
   while (GTK_CMCTREE_ROW (node) != ctree_row)
     node = GTK_CMCTREE_ROW (node)->sibling;
-  
+
   return node;
 }
 
@@ -3470,7 +3469,7 @@ gtk_cmctree_node_nth (GtkCMCTree *ctree,
 
   if ((row >= GTK_CMCLIST(ctree)->rows))
     return NULL;
- 
+
   return GTK_CMCTREE_NODE (g_list_nth (GTK_CMCLIST (ctree)->row_list, row));
 }
 
@@ -3487,7 +3486,7 @@ gtk_cmctree_find (GtkCMCTree     *ctree,
 
   while (node)
     {
-      if (node == child) 
+      if (node == child)
 	return TRUE;
       if (GTK_CMCTREE_ROW (node)->children)
 	{
@@ -3519,16 +3518,16 @@ gtk_cmctree_find_by_row_data (GtkCMCTree     *ctree,
 			    gpointer      data)
 {
   GtkCMCTreeNode *work;
-  
+
   if (!node)
     node = GTK_CMCTREE_NODE (GTK_CMCLIST (ctree)->row_list);
-  
+
   while (node)
     {
-      if (GTK_CMCTREE_ROW (node)->row.data == data) 
+      if (GTK_CMCTREE_ROW (node)->row.data == data)
 	return node;
       if (GTK_CMCTREE_ROW (node)->children &&
-	  (work = gtk_cmctree_find_by_row_data 
+	  (work = gtk_cmctree_find_by_row_data
 	   (ctree, GTK_CMCTREE_ROW (node)->children, data)))
 	return work;
       node = GTK_CMCTREE_ROW (node)->sibling;
@@ -3632,14 +3631,14 @@ gtk_cmctree_find_all_by_row_data_custom (GtkCMCTree   
 }
 
 gboolean
-gtk_cmctree_is_hot_spot (GtkCMCTree *ctree, 
-		       gint      x, 
+gtk_cmctree_is_hot_spot (GtkCMCTree *ctree,
+		       gint      x,
 		       gint      y)
 {
   GtkCMCTreeNode *node;
   gint column;
   gint row;
-  
+
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), FALSE);
 
   if (gtk_cmclist_get_selection_info (GTK_CMCLIST (ctree), x, y, &row, &column))
@@ -3658,12 +3657,12 @@ gtk_cmctree_is_hot_spot (GtkCMCTree *ctree, 
 void
 gtk_cmctree_move (GtkCMCTree     *ctree,
 		GtkCMCTreeNode *node,
-		GtkCMCTreeNode *new_parent, 
+		GtkCMCTreeNode *new_parent,
 		GtkCMCTreeNode *new_sibling)
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
-  
+
   g_signal_emit (G_OBJECT (ctree), ctree_signals[TREE_MOVE], 0, node,
 		   new_parent, new_sibling);
 }
@@ -3674,14 +3673,14 @@ gtk_cmctree_expand (GtkCMCTree     *ctree,
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
-  
+
   if (GTK_CMCTREE_ROW (node)->is_leaf)
     return;
 
   g_signal_emit (G_OBJECT (ctree), ctree_signals[TREE_EXPAND], 0, node);
 }
 
-void 
+void
 gtk_cmctree_expand_recursive (GtkCMCTree     *ctree,
 			    GtkCMCTreeNode *node)
 {
@@ -3707,7 +3706,7 @@ gtk_cmctree_expand_recursive (GtkCMCTree     *ctree,
     gtk_cmclist_thaw (clist);
 }
 
-void 
+void
 gtk_cmctree_expand_to_depth (GtkCMCTree     *ctree,
 			   GtkCMCTreeNode *node,
 			   gint          depth)
@@ -3741,14 +3740,14 @@ gtk_cmctree_collapse (GtkCMCTree     *ctree,
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
-  
+
   if (GTK_CMCTREE_ROW (node)->is_leaf)
     return;
 
   g_signal_emit (G_OBJECT (ctree), ctree_signals[TREE_COLLAPSE], 0, node);
 }
 
-void 
+void
 gtk_cmctree_collapse_recursive (GtkCMCTree     *ctree,
 			      GtkCMCTreeNode *node)
 {
@@ -3781,7 +3780,7 @@ gtk_cmctree_collapse_recursive (GtkCMCTree     *ctree,
     gtk_cmclist_thaw (clist);
 }
 
-void 
+void
 gtk_cmctree_collapse_to_depth (GtkCMCTree     *ctree,
 			     GtkCMCTreeNode *node,
 			     gint          depth)
@@ -3823,14 +3822,14 @@ gtk_cmctree_toggle_expansion (GtkCMCTree     *ctree,
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
-  
+
   if (GTK_CMCTREE_ROW (node)->is_leaf)
     return;
 
   tree_toggle_expansion (ctree, node, NULL);
 }
 
-void 
+void
 gtk_cmctree_toggle_expansion_recursive (GtkCMCTree     *ctree,
 				      GtkCMCTreeNode *node)
 {
@@ -3838,7 +3837,7 @@ gtk_cmctree_toggle_expansion_recursive (GtkCMCTree    
   gboolean thaw = FALSE;
 
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
-  
+
   if (node && GTK_CMCTREE_ROW (node)->is_leaf)
     return;
 
@@ -3849,7 +3848,7 @@ gtk_cmctree_toggle_expansion_recursive (GtkCMCTree    
       gtk_cmclist_freeze (clist);
       thaw = TRUE;
     }
-  
+
   gtk_cmctree_post_recursive (ctree, node,
 			    GTK_CMCTREE_FUNC (tree_toggle_expansion), NULL);
 
@@ -3858,7 +3857,7 @@ gtk_cmctree_toggle_expansion_recursive (GtkCMCTree    
 }
 
 void
-gtk_cmctree_select (GtkCMCTree     *ctree, 
+gtk_cmctree_select (GtkCMCTree     *ctree,
 		  GtkCMCTreeNode *node)
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
@@ -3870,7 +3869,7 @@ gtk_cmctree_select (GtkCMCTree     *ctree, 
 }
 
 void
-gtk_cmctree_unselect (GtkCMCTree     *ctree, 
+gtk_cmctree_unselect (GtkCMCTree     *ctree,
 		    GtkCMCTreeNode *node)
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
@@ -3881,22 +3880,22 @@ gtk_cmctree_unselect (GtkCMCTree     *ctree, 
 }
 
 void
-gtk_cmctree_select_recursive (GtkCMCTree     *ctree, 
+gtk_cmctree_select_recursive (GtkCMCTree     *ctree,
 			    GtkCMCTreeNode *node)
 {
   gtk_cmctree_real_select_recursive (ctree, node, TRUE);
 }
 
 void
-gtk_cmctree_unselect_recursive (GtkCMCTree     *ctree, 
+gtk_cmctree_unselect_recursive (GtkCMCTree     *ctree,
 			      GtkCMCTreeNode *node)
 {
   gtk_cmctree_real_select_recursive (ctree, node, FALSE);
 }
 
 void
-gtk_cmctree_real_select_recursive (GtkCMCTree     *ctree, 
-				 GtkCMCTreeNode *node, 
+gtk_cmctree_real_select_recursive (GtkCMCTree     *ctree,
+				 GtkCMCTreeNode *node,
 				 gint          state)
 {
   GtkCMCList *clist;
@@ -3906,7 +3905,7 @@ gtk_cmctree_real_select_recursive (GtkCMCTree     *ctr
 
   clist = GTK_CMCLIST (ctree);
 
-  if ((state && 
+  if ((state &&
        (clist->selection_mode ==  GTK_SELECTION_BROWSE ||
 	clist->selection_mode == GTK_SELECTION_SINGLE)) ||
       (!state && clist->selection_mode ==  GTK_SELECTION_BROWSE))
@@ -3921,7 +3920,7 @@ gtk_cmctree_real_select_recursive (GtkCMCTree     *ctr
   if (clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -3931,10 +3930,10 @@ gtk_cmctree_real_select_recursive (GtkCMCTree     *ctr
   if (state)
     gtk_cmctree_post_recursive (ctree, node,
 			      GTK_CMCTREE_FUNC (tree_select), NULL);
-  else 
+  else
     gtk_cmctree_post_recursive (ctree, node,
 			      GTK_CMCTREE_FUNC (tree_unselect), NULL);
-  
+
   if (thaw)
     gtk_cmclist_thaw (clist);
 }
@@ -3945,7 +3944,7 @@ gtk_cmctree_real_select_recursive (GtkCMCTree     *ctr
  ***********************************************************/
 
 
-void 
+void
 gtk_cmctree_node_set_text (GtkCMCTree     *ctree,
 			 GtkCMCTreeNode *node,
 			 gint          column,
@@ -3958,7 +3957,7 @@ gtk_cmctree_node_set_text (GtkCMCTree     *ctree,
 
   if (column < 0 || column >= GTK_CMCLIST (ctree)->columns)
     return;
-  
+
   clist = GTK_CMCLIST (ctree);
 
   GTK_CMCLIST_GET_CLASS (clist)->set_cell_contents
@@ -3968,7 +3967,7 @@ gtk_cmctree_node_set_text (GtkCMCTree     *ctree,
   tree_draw_node (ctree, node);
 }
 
-void 
+void
 gtk_cmctree_node_set_pixbuf (GtkCMCTree     *ctree,
 			   GtkCMCTreeNode *node,
 			   gint          column,
@@ -3994,7 +3993,7 @@ gtk_cmctree_node_set_pixbuf (GtkCMCTree     *ctree,
   tree_draw_node (ctree, node);
 }
 
-void 
+void
 gtk_cmctree_node_set_pixtext (GtkCMCTree     *ctree,
 			    GtkCMCTreeNode *node,
 			    gint          column,
@@ -4025,7 +4024,7 @@ gtk_cmctree_node_set_pixtext (GtkCMCTree     *ctree,
   tree_draw_node (ctree, node);
 }
 
-void 
+void
 gtk_cmctree_set_node_info (GtkCMCTree     *ctree,
 			 GtkCMCTreeNode *node,
 			 const gchar  *text,
@@ -4037,7 +4036,7 @@ gtk_cmctree_set_node_info (GtkCMCTree     *ctree,
 {
   gboolean old_leaf;
   gboolean old_expanded;
- 
+
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
 
@@ -4048,7 +4047,7 @@ gtk_cmctree_set_node_info (GtkCMCTree     *ctree,
     {
       GtkCMCTreeNode *work;
       GtkCMCTreeNode *ptr;
-      
+
       work = GTK_CMCTREE_ROW (node)->children;
       while (work)
 	{
@@ -4071,7 +4070,7 @@ gtk_cmctree_set_node_info (GtkCMCTree     *ctree,
     }
 
   GTK_CMCTREE_ROW (node)->expanded = (is_leaf) ? FALSE : expanded;
-  
+
   tree_draw_node (ctree, node);
 }
 
@@ -4116,7 +4115,7 @@ gtk_cmctree_node_set_shift (GtkCMCTree     *ctree,
 static void
 remove_grab (GtkCMCList *clist)
 {
-  if (gtkut_pointer_is_grabbed (GTK_WIDGET (clist)) && 
+  if (gtkut_pointer_is_grabbed (GTK_WIDGET (clist)) &&
       gtk_widget_has_grab (GTK_WIDGET(clist)))
     {
       gtk_grab_remove (GTK_WIDGET (clist));
@@ -4165,7 +4164,7 @@ gtk_cmctree_node_set_selectable (GtkCMCTree     *ctree
 	  GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
 	}
       gtk_cmctree_unselect (ctree, node);
-    }      
+    }
 }
 
 gboolean
@@ -4177,7 +4176,7 @@ gtk_cmctree_node_get_selectable (GtkCMCTree     *ctree
   return GTK_CMCTREE_ROW (node)->row.selectable;
 }
 
-GtkCMCellType 
+GtkCMCellType
 gtk_cmctree_node_get_cell_type (GtkCMCTree     *ctree,
 			      GtkCMCTreeNode *node,
 			      gint          column)
@@ -4243,22 +4242,22 @@ gtk_cmctree_node_get_pixtext (GtkCMCTree      *ctree,
 {
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), FALSE);
   cm_return_val_if_fail (node != NULL, FALSE);
-  
+
   if (column < 0 || column >= GTK_CMCLIST (ctree)->columns)
     return FALSE;
-  
+
   if (GTK_CMCTREE_ROW (node)->row.cell[column].type != GTK_CMCELL_PIXTEXT)
     return FALSE;
-  
+
   if (text)
     *text = GTK_CMCELL_PIXTEXT (GTK_CMCTREE_ROW (node)->row.cell[column])->text;
   if (spacing)
-    *spacing = GTK_CMCELL_PIXTEXT (GTK_CMCTREE_ROW 
+    *spacing = GTK_CMCELL_PIXTEXT (GTK_CMCTREE_ROW
 				 (node)->row.cell[column])->spacing;
   if (pixbuf)
-    *pixbuf = GTK_CMCELL_PIXTEXT (GTK_CMCTREE_ROW 
+    *pixbuf = GTK_CMCELL_PIXTEXT (GTK_CMCTREE_ROW
 				(node)->row.cell[column])->pixbuf;
-  
+
   return TRUE;
 }
 
@@ -4274,12 +4273,12 @@ gtk_cmctree_get_node_info (GtkCMCTree      *ctree,
 {
   cm_return_val_if_fail (GTK_IS_CMCTREE (ctree), FALSE);
   cm_return_val_if_fail (node != NULL, FALSE);
-  
+
   if (text)
-    *text = GTK_CMCELL_PIXTEXT 
+    *text = GTK_CMCELL_PIXTEXT
       (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->text;
   if (spacing)
-    *spacing = GTK_CMCELL_PIXTEXT 
+    *spacing = GTK_CMCELL_PIXTEXT
       (GTK_CMCTREE_ROW (node)->row.cell[ctree->tree_column])->spacing;
   if (pixbuf_closed)
     *pixbuf_closed = GTK_CMCTREE_ROW (node)->pixbuf_closed;
@@ -4289,7 +4288,7 @@ gtk_cmctree_get_node_info (GtkCMCTree      *ctree,
     *is_leaf = GTK_CMCTREE_ROW (node)->is_leaf;
   if (expanded)
     *expanded = GTK_CMCTREE_ROW (node)->expanded;
-  
+
   return TRUE;
 }
 
@@ -4335,7 +4334,7 @@ gtk_cmctree_node_set_cell_style (GtkCMCTree     *ctree
   if (GTK_CMCTREE_ROW (node)->row.cell[column].style)
     {
       g_object_ref (GTK_CMCTREE_ROW (node)->row.cell[column].style);
-      
+
       if (gtk_widget_get_realized (GTK_WIDGET(ctree)))
         GTK_CMCTREE_ROW (node)->row.cell[column].style =
 	  gtk_style_attach (GTK_CMCTREE_ROW (node)->row.cell[column].style,
@@ -4381,7 +4380,7 @@ gtk_cmctree_node_set_row_style (GtkCMCTree     *ctree,
 
   if (GTK_CMCTREE_ROW (node)->row.style == style)
     return;
-  
+
   visible = gtk_cmctree_is_viewable (ctree, node);
   if (visible && !GTK_CMCLIST_AUTO_RESIZE_BLOCKED (clist))
     {
@@ -4407,7 +4406,7 @@ gtk_cmctree_node_set_row_style (GtkCMCTree     *ctree,
   if (GTK_CMCTREE_ROW (node)->row.style)
     {
       g_object_ref (GTK_CMCTREE_ROW (node)->row.style);
-      
+
       if (gtk_widget_get_realized (GTK_WIDGET(ctree)))
         GTK_CMCTREE_ROW (node)->row.style =
 	  gtk_style_attach (GTK_CMCTREE_ROW (node)->row.style,
@@ -4495,13 +4494,13 @@ gtk_cmctree_node_set_row_data_full (GtkCMCTree        
 {
   GDestroyNotify dnotify;
   gpointer ddata;
-  
+
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
   cm_return_if_fail (node != NULL);
 
   dnotify = GTK_CMCTREE_ROW (node)->row.destroy;
   ddata = GTK_CMCTREE_ROW (node)->row.data;
-  
+
   GTK_CMCTREE_ROW (node)->row.data = data;
   GTK_CMCTREE_ROW (node)->row.destroy = destroy;
 
@@ -4537,19 +4536,19 @@ gtk_cmctree_node_moveto (GtkCMCTree     *ctree,
 
   if (node)
     row = g_list_position (clist->row_list, (GList *)node);
-  
+
   gtk_cmclist_moveto (clist, row, column, row_align, col_align);
 }
 
-GtkVisibility 
+GtkVisibility
 gtk_cmctree_node_is_visible (GtkCMCTree     *ctree,
                            GtkCMCTreeNode *node)
 {
   gint row;
-  
+
   cm_return_val_if_fail (ctree != NULL, 0);
   cm_return_val_if_fail (node != NULL, 0);
-  
+
   row = g_list_position (GTK_CMCLIST (ctree)->row_list, (GList*) node);
   return gtk_cmclist_row_is_visible (GTK_CMCLIST (ctree), row);
 }
@@ -4560,7 +4559,7 @@ gtk_cmctree_node_is_visible (GtkCMCTree     *ctree,
  ***********************************************************/
 
 void
-gtk_cmctree_set_indent (GtkCMCTree *ctree, 
+gtk_cmctree_set_indent (GtkCMCTree *ctree,
                       gint      indent)
 {
   GtkCMCList *clist;
@@ -4584,7 +4583,7 @@ gtk_cmctree_set_indent (GtkCMCTree *ctree, 
 }
 
 void
-gtk_cmctree_set_spacing (GtkCMCTree *ctree, 
+gtk_cmctree_set_spacing (GtkCMCTree *ctree,
 		       gint      spacing)
 {
   GtkCMCList *clist;
@@ -4611,7 +4610,7 @@ gtk_cmctree_set_spacing (GtkCMCTree *ctree, 
 }
 
 void
-gtk_cmctree_set_show_stub (GtkCMCTree *ctree, 
+gtk_cmctree_set_show_stub (GtkCMCTree *ctree,
 			 gboolean  show_stub)
 {
   cm_return_if_fail (GTK_IS_CMCTREE (ctree));
@@ -4632,14 +4631,14 @@ gtk_cmctree_set_show_stub (GtkCMCTree *ctree, 
     }
 }
 
-void 
-gtk_cmctree_set_line_style (GtkCMCTree          *ctree, 
+void
+gtk_cmctree_set_line_style (GtkCMCTree          *ctree,
 			  GtkCMCTreeLineStyle  line_style)
 {
 }
 
-void 
-gtk_cmctree_set_expander_style (GtkCMCTree              *ctree, 
+void
+gtk_cmctree_set_expander_style (GtkCMCTree              *ctree,
 			      GtkCMCTreeExpanderStyle  expander_style)
 {
   GtkCMCList *clist;
@@ -4717,13 +4716,13 @@ tree_sort (GtkCMCTree     *ctree,
 	{
 	  if (clist->sort_type == GTK_SORT_ASCENDING)
 	    {
-	      if (clist->compare 
+	      if (clist->compare
 		  (clist, GTK_CMCTREE_ROW (work), GTK_CMCTREE_ROW (cmp)) < 0)
 		cmp = work;
 	    }
 	  else
 	    {
-	      if (clist->compare 
+	      if (clist->compare
 		  (clist, GTK_CMCTREE_ROW (work), GTK_CMCTREE_ROW (cmp)) > 0)
 		cmp = work;
 	    }
@@ -4740,7 +4739,7 @@ tree_sort (GtkCMCTree     *ctree,
 }
 
 void
-gtk_cmctree_sort_recursive (GtkCMCTree     *ctree, 
+gtk_cmctree_sort_recursive (GtkCMCTree     *ctree,
 			  GtkCMCTreeNode *node)
 {
   GtkCMCList *clist;
@@ -4755,7 +4754,7 @@ gtk_cmctree_sort_recursive (GtkCMCTree     *ctree, 
   if (clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -4765,7 +4764,7 @@ gtk_cmctree_sort_recursive (GtkCMCTree     *ctree, 
   if (!node || (node && gtk_cmctree_is_viewable (ctree, node)))
     focus_node =
       GTK_CMCTREE_NODE (g_list_nth (clist->row_list, clist->focus_row));
-      
+
   gtk_cmctree_post_recursive (ctree, node, GTK_CMCTREE_FUNC (tree_sort), NULL);
 
   if (!node)
@@ -4787,7 +4786,7 @@ real_sort_list (GtkCMCList *clist)
 }
 
 void
-gtk_cmctree_sort_node (GtkCMCTree     *ctree, 
+gtk_cmctree_sort_node (GtkCMCTree     *ctree,
 		     GtkCMCTreeNode *node)
 {
   GtkCMCList *clist;
@@ -4802,7 +4801,7 @@ gtk_cmctree_sort_node (GtkCMCTree     *ctree, 
   if (clist->selection_mode == GTK_SELECTION_MULTIPLE)
     {
       GTK_CMCLIST_GET_CLASS (clist)->resync_selection (clist, NULL);
-      
+
       g_list_free (clist->undo_selection);
       g_list_free (clist->undo_unselection);
       clist->undo_selection = NULL;
@@ -4839,18 +4838,18 @@ fake_unselect_all (GtkCMCList *clist,
 	  GTK_CMCTREE_ROW (focus_node)->row.selectable)
 	{
 	  GTK_CMCTREE_ROW (focus_node)->row.state = GTK_STATE_SELECTED;
-	  
+
 	  if (CLIST_UNFROZEN (clist) &&
 	      gtk_cmclist_row_is_visible (clist, row) != GTK_VISIBILITY_NONE)
 	    GTK_CMCLIST_GET_CLASS (clist)->draw_row (clist, NULL, row,
 						  GTK_CMCLIST_ROW (focus_node));
-	}  
+	}
     }
 
   clist->undo_selection = clist->selection;
   clist->selection = NULL;
   clist->selection_end = NULL;
-  
+
   for (list = clist->undo_selection; list; list = list->next)
     {
       if (list->data == focus_node)
@@ -4889,7 +4888,7 @@ resync_selection (GtkCMCList *clist, GdkEvent *event)
     return;
 
   ctree = GTK_CMCTREE (clist);
-  
+
   clist->freeze_count++;
 
   i = MIN (clist->anchor, clist->drag_pos);
@@ -4907,7 +4906,7 @@ resync_selection (GtkCMCList *clist, GdkEvent *event)
 	{
 	  node = list->data;
 	  list = list->next;
-	  
+
 	  unselect = TRUE;
 
 	  if (gtk_cmctree_is_viewable (ctree, node))
@@ -4924,7 +4923,7 @@ resync_selection (GtkCMCList *clist, GdkEvent *event)
 						      node);
 	    }
 	}
-    }    
+    }
 
   if (clist->anchor < clist->drag_pos)
     {
@@ -5021,9 +5020,9 @@ real_undo_selection (GtkCMCList *clist)
     }
   else
     clist->focus_row = clist->undo_anchor;
-  
+
   clist->undo_anchor = -1;
- 
+
   g_list_free (clist->undo_selection);
   g_list_free (clist->undo_unselection);
   clist->undo_selection = NULL;
@@ -5130,7 +5129,7 @@ drag_dest_cell (GtkCMCList         *clist,
     }
   if (dest_info->cell.row < -1)
     dest_info->cell.row = -1;
-  
+
   x -= border_width + style->xthickness;
 
   dest_info->cell.column = COLUMN_FROM_XPIXEL (clist, x);
@@ -5141,7 +5140,7 @@ drag_dest_cell (GtkCMCList         *clist,
       gint h = 0;
 
       y_delta = y - ROW_TOP_YPIXEL (clist, dest_info->cell.row);
-      
+
       if (GTK_CMCLIST_DRAW_DRAG_RECT(clist) &&
 	  !GTK_CMCTREE_ROW (g_list_nth (clist->row_list,
 				      dest_info->cell.row))->is_leaf)
@@ -5210,7 +5209,7 @@ gtk_cmctree_drag_motion (GtkWidget      *widget,
   if (!dest_info)
     {
       dest_info = g_new (GtkCMCListDestInfo, 1);
-	  
+
       dest_info->cell.row    = -1;
       dest_info->cell.column = -1;
       dest_info->insert_pos  = GTK_CMCLIST_DRAG_NONE;
@@ -5308,7 +5307,7 @@ gtk_cmctree_drag_data_received (GtkWidget        *widg
 	  GtkCMCTreeNode *dest_node;
 
 	  drag_dest_cell (clist, x, y, &dest_info);
-	  
+
 	  source_node = GTK_CMCTREE_NODE (g_list_nth (clist->row_list,
 						    source_info->row));
 	  dest_node = GTK_CMCTREE_NODE (g_list_nth (clist->row_list,
@@ -5339,7 +5338,7 @@ gtk_cmctree_drag_data_received (GtkWidget        *widg
 	      if (check_drag (ctree, source_node, dest_node,
 			      dest_info.insert_pos))
 		gtk_cmctree_move (ctree, source_node,
-				GTK_CMCTREE_ROW (dest_node)->parent, 
+				GTK_CMCTREE_ROW (dest_node)->parent,
 				GTK_CMCTREE_ROW (dest_node)->sibling);
 	      g_dataset_remove_data (context, "gtk-clist-drag-dest");
 	      break;
@@ -5352,7 +5351,7 @@ GType
 gtk_cmctree_node_get_type (void)
 {
   static GType our_type = 0;
-  
+
   if (our_type == 0)
     our_type = g_pointer_type_register_static ("GtkCMCTreeNode");
 
blob - 68f61a31e784c7ddd82ec50e10f08577aee8d505
blob + 9fb3c48019c737e551331b62fbaf06f0fad2a34d
--- src/gtk/gtksctree.c
+++ src/gtk/gtksctree.c
@@ -26,8 +26,6 @@
  *
  */
 
-#include "config.h"
-
 #include <stdlib.h>
 
 #include "gtksctree.h"
blob - 79b4f2fa68fdf58072f9b8c16447bbd5d550da50
blob + 0d285b7c4b3e5aa40ba6496390b08d61e2f2e460
--- src/gtk/gtksctree.h
+++ src/gtk/gtksctree.h
@@ -4,7 +4,7 @@
 #define __GTK_SCTREE_H__
 
 #include <gtk/gtk.h>
-#include "gtk/gtkcmctree.h"
+#include "gtkcmctree.h"
 
 /* This code is based on "gtkflist.{h,c}" from mc-4.5.42 .*/
 
@@ -44,10 +44,10 @@ struct _GtkSCTree {
 
 struct _GtkSCTreeClass {
     	GtkCMCTreeClass parent_class;
-    
+
     	/* Signal: invoke the popup menu for rows */
     	void (* row_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
-    
+
     	/* Signal: invoke the popup menu for empty areas */
     	void (* empty_popup_menu) (GtkSCTree *sctree, GdkEventButton *event);
 
@@ -61,8 +61,8 @@ struct _GtkSCTreeClass {
 
 GType gtk_sctree_get_type (void);
 
-GtkWidget *gtk_sctree_new_with_titles	(gint		 columns, 
-					 gint		 tree_column, 
+GtkWidget *gtk_sctree_new_with_titles	(gint		 columns,
+					 gint		 tree_column,
 					 gchar		*titles[]);
 void gtk_sctree_select			(GtkSCTree	*sctree,
 					 GtkCMCTreeNode	*node);
@@ -124,7 +124,7 @@ void gtk_sctree_set_use_markup		    (GtkSCTree		*sctre
  * Returns true if the coordinates are inside a tree expander on
  * one of the rows. */
 gboolean
-gtk_sctree_is_hot_spot (GtkSCTree *ctree, 
-		       gint      x, 
+gtk_sctree_is_hot_spot (GtkSCTree *ctree,
+		       gint      x,
 		       gint      y);
 #endif /* __GTK_SCTREE_H__ */
blob - fcc88d5d89275959f50670faf21b544dd2011d96
blob + 4eb717dd9d6b40fa6f322b0631956b3f40b2a27f
--- src/gtk/gtkunit.c
+++ src/gtk/gtkunit.c
@@ -19,9 +19,6 @@
  * <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
-#include "claws-features.h"
-
 #include "gtkunit.h"
 
 #include <string.h>
blob - d66619c8914e396d3de0f25834feda26d8778fb5
blob + 03ef284e24ba5d1a2166b1501e0c4a52bd65b87a
--- src/gtk/gtkutils.c
+++ src/gtk/gtkutils.c
@@ -16,17 +16,12 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
-#include "gtk/gtksctree.h"
+#include "gtksctree.h"
 #include <stdlib.h>
 #include <stdarg.h>
 #include <sys/stat.h>
@@ -1284,7 +1279,6 @@ claws_input_add    (gint	      source,
   return result;
 }
 
-#if defined USE_GNUTLS
 static void auto_configure_done(const gchar *hostname, gint port, gboolean ssl, AutoConfigureData *data)
 {
 	gboolean smtp = strcmp(data->tls_service, "submission") == 0 ? TRUE : FALSE;
@@ -1465,7 +1459,6 @@ gboolean auto_configure_service_sync(const gchar *serv
 	g_object_unref(resolver);
 	return result;
 }
-#endif
 
 gboolean gtkut_pointer_is_grabbed(GtkWidget *widget)
 {
blob - 7e3809844c6ac1ad7613d9a772e20cbc6163df65
blob + 707cc88382da7354ed2bd9e1a7fc58f84805e13d
--- src/gtk/gtkutils.h
+++ src/gtk/gtkutils.h
@@ -217,7 +217,6 @@ claws_input_add    (gint	      source,
 	}									\
 }
 
-#if defined USE_GNUTLS
 typedef struct _AutoConfigureData {
 	const gchar *ssl_service;
 	const gchar *tls_service;
@@ -242,7 +241,6 @@ typedef struct _AutoConfigureData {
 
 void auto_configure_service(AutoConfigureData *data);
 gboolean auto_configure_service_sync(const gchar *service, const gchar *domain, gchar **srvhost, guint16 *srvport);
-#endif
 
 gboolean gtkut_pointer_is_grabbed(GtkWidget *widget);
 
blob - fd7c9231b98954a9dbd6a857972a64cdb2f1516d
blob + 2f0ecc9595c00995f072cc18f8c28e3649e74cc8
--- src/gtk/gtkvscrollbutton.c
+++ src/gtk/gtkvscrollbutton.c
@@ -19,7 +19,7 @@
  * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
  * file for a list of people on the GTK+ Team.  See the ChangeLog
  * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
  */
 
  /*
@@ -28,11 +28,6 @@
   * Modified by the Sylpheed Team and others 2003
   */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <gtk/gtk.h>
 #include "utils.h"
@@ -235,11 +230,8 @@ void gtk_vscrollbutton_set_adjustment(GtkVScrollbutton
 
     if (scrollbutton->adjustment != adjustment) {
 	if (scrollbutton->adjustment) {
-	    g_signal_handlers_disconnect_matched(scrollbutton->adjustment,
-	    					 G_SIGNAL_MATCH_DATA,
-	    					 0, 0, NULL, NULL, 
-						 (gpointer) scrollbutton);
-	    g_object_unref(G_OBJECT(scrollbutton->adjustment));
+		g_signal_handlers_disconnect_matched(scrollbutton->adjustment, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, (gpointer) scrollbutton);
+		g_object_unref(G_OBJECT(scrollbutton->adjustment));
 	}
 
 	scrollbutton->adjustment = adjustment;
@@ -323,10 +315,10 @@ gboolean gtk_vscrollbutton_scroll(GtkVScrollbutton *sc
 	    scrollbutton->timer = 0;
 	}
 	break;
-    
+
     default:
 	break;
-    
+
     }
 
 	if (new_value != value) {
@@ -401,7 +393,7 @@ static gboolean gtk_real_vscrollbutton_timer(GtkVScrol
 	return_val = FALSE;
 	if (scrollbutton->need_timer)
 	    scrollbutton->timer =
-		g_timeout_add(SCROLL_TIMER_LENGTH, 
+		g_timeout_add(SCROLL_TIMER_LENGTH,
 			      (GSourceFunc) gtk_real_vscrollbutton_timer,
 			      (gpointer) scrollbutton);
 	else {
@@ -421,11 +413,11 @@ static void gtk_vscrollbutton_set_sensitivity   (GtkAd
 	gfloat value;
 	if (!gtk_widget_get_realized(GTK_WIDGET(scrollbutton))) return;
 	if (scrollbutton->button != 0) return; /* not while something is pressed */
-	
+
 	value = gtk_adjustment_get_value(adjustment);
-	gtk_widget_set_sensitive(scrollbutton->upbutton, 
+	gtk_widget_set_sensitive(scrollbutton->upbutton,
 				 (value > gtk_adjustment_get_lower(adjustment)));
-	gtk_widget_set_sensitive(scrollbutton->downbutton, 
+	gtk_widget_set_sensitive(scrollbutton->downbutton,
 				 (value < (gtk_adjustment_get_upper(adjustment) -
                            gtk_adjustment_get_page_size(adjustment))));
 }
blob - c78dc15df6a7d025f6e4821cb5653e8b7b87f378
blob + d9a511234c003d50bddf78cc29c7cb3600ae2b66
--- src/gtk/inputdialog.c
+++ src/gtk/inputdialog.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
blob - e30e4a77cd4453c2b397066752a26b336fb44da2
blob + 358476b305bf279649a0a6daf28b4818173e60ee
--- src/gtk/logwindow.c
+++ src/gtk/logwindow.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
blob - 6dc8e1e72612ed87d7c02ee6015a6c3b14793fbb
blob + 7045166a436332dccd2be4ef7e4f4b386eda7fff
--- src/gtk/manage_window.c
+++ src/gtk/manage_window.c
@@ -14,11 +14,9 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <gtk/gtk.h>
 
@@ -34,7 +32,7 @@ gint manage_window_focus_in(GtkWidget *widget, GdkEven
 
 	if (!GTK_IS_WINDOW(widget))
 		return FALSE;
-	
+
 /*	title = gtk_window_get_title(GTK_WINDOW(widget));
 	 debug_print("Focus in event: window: %p - %s\n", widget,
 		    title ? title : "no title"); */
blob - 732dadd851505c5828af22bffff43340b9825552
blob + 63db7fa1574c75519d4bf2d526203a364a0e8115
--- src/gtk/menu.c
+++ src/gtk/menu.c
@@ -17,11 +17,6 @@
  *
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
blob - 39a49744c7da5e37f175989c294240648f762895
blob + 69efd83e92ecdf58bfc87d45e5fab249af88674c
--- src/gtk/prefswindow.c
+++ src/gtk/prefswindow.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <string.h>
blob - ae8f1ab0ab9a54c87996c26d3dcf20e0788cdc2b
blob + d3472b90d35422837c15fd757bc10003ab8061cc
--- src/gtk/progressdialog.c
+++ src/gtk/progressdialog.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
@@ -199,7 +194,7 @@ gint progress_dialog_list_set_status(ProgressDialog *p
 }
 
 /*!
- *\return	gint Row where data were set 
+ *\return	gint Row where data were set
  */
 gint progress_dialog_list_set(ProgressDialog	*progress,
 			      gint		 row,
@@ -234,13 +229,13 @@ static gint progress_dialog_insert_account(ProgressDia
 {
 	GtkTreeIter iter;
 	GtkListStore *store = progress->store;
-	gint result = -1;					
-	
+	gint result = -1;
+
 	if (account == NULL && status == NULL && image == NULL)
 		return -1;
 
 	/* see if row exists, if not append */
-	if (row < 0 || !gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), 
+	if (row < 0 || !gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store),
 						      &iter, NULL, row)) {
 		result = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store),
 							NULL);
@@ -252,16 +247,16 @@ static gint progress_dialog_insert_account(ProgressDia
 	 * XXX: uhm, when does the iter invalidate? sure not while
 	 * just setting a row's column i hope?
 	 */
-	
+
 	if (account)
-		gtk_list_store_set(store, &iter, 
+		gtk_list_store_set(store, &iter,
 				   PROGRESS_ACCOUNT, account,
 				   -1);
 	if (status)
 		gtk_list_store_set(store, &iter,
 				   PROGRESS_STATE, status,
 				   -1);
-	if (image) 
+	if (image)
 		gtk_list_store_set(store, &iter,
 				   PROGRESS_IMAGE, image,
 				   -1);
blob - a642bddb165276439f21607f7bd2cdfbd4af53c4 (mode 644)
blob + /dev/null
--- src/gtk/quicksearch.c
+++ /dev/null
@@ -1,1213 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2025 the Claws Mail team and Colin Leroy
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include <defs.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <ctype.h>
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "utils.h"
-#include "combobox.h"
-#include "menu.h"
-#include "prefs_common.h"
-#include "description_window.h"
-#include "matcher.h"
-#include "matcher_parser.h"
-#include "quicksearch.h"
-#include "folderview.h"
-#include "folder.h"
-#include "prefs_matcher.h"
-#include "claws.h"
-#include "statusbar.h"
-#include "advsearch.h"
-#include "alertpanel.h"
-
-struct _QuickSearchRequest
-{
-	AdvancedSearchType		 type;
-	gchar				*matchstring;
-};
-typedef struct _QuickSearchRequest QuickSearchRequest;
-
-struct _QuickSearch
-{
-	GtkWidget			*hbox_search;
-	GtkWidget			*search_type_combo;
-	GtkWidget			*search_string_entry;
-	GtkWidget			*search_condition_expression;
-	GtkWidget			*search_description;
-	GtkWidget			*clear_search;
-
-	gboolean			 active;
-	gchar				*search_string;
-
-	QuickSearchRequest		 request;
-	QuickSearchExecuteCallback	 callback;
-	gpointer			 callback_data;
-	gboolean			 running;
-	gboolean			 has_focus;
-	gboolean			 in_typing;
-	guint				 press_timeout_id;
-
-	GList				*normal_search_strings;
-	GList				*extended_search_strings;
-
-	AdvancedSearch			*asearch;
-	gboolean			 want_reexec;
-	gboolean			 want_history;
-};
-
-static GdkColor qs_active_bgcolor = {
-	(gulong)0,
-	(gushort)0,
-	(gushort)0,
-	(gushort)0
-};
-
-static GdkColor qs_active_color = {
-	(gulong)0,
-	(gushort)0,
-	(gushort)0,
-	(gushort)0
-};
-
-static GdkColor qs_error_bgcolor = {
-	(gulong)0,
-	(gushort)0,
-	(gushort)0,
-	(gushort)0
-};
-
-static GdkColor qs_error_color = {
-	(gulong)0,
-	(gushort)0,
-	(gushort)0,
-	(gushort)0
-};
-
-typedef enum {
-	SEARCH_TYPE_COL_TEXT,
-	SEARCH_TYPE_COL_CHECKBOX,
-	SEARCH_TYPE_COL_CHECKBOX_ACTIVE,
-	SEARCH_TYPE_COL_ACTION,
-	NUM_SEARCH_TYPE_COLS
-} QuickSearchTypeColumn;
-
-typedef enum {
-	QS_MENU_ACTION_SUBJECT,
-	QS_MENU_ACTION_FROM,
-	QS_MENU_ACTION_TO,
-	QS_MENU_ACTION_TAG,
-	QS_MENU_ACTION_MIXED,
-	QS_MENU_ACTION_EXTENDED,
-	QS_MENU_ACTION_SEPARATOR,
-	QS_MENU_ACTION_RECURSIVE,
-	QS_MENU_ACTION_STICKY,
-	QS_MENU_ACTION_TYPEAHEAD,
-	QS_MENU_ACTION_RUNONSELECT,
-	NUM_QS_MENU_ACTIONS
-} QuickSearchMenuActions;
-
-static void search_type_changed_cb(GtkComboBox *combobox,
-		gpointer user_data);
-
-void quicksearch_set_on_progress_cb(QuickSearch* search,
-		gboolean (*cb)(gpointer data, guint at, guint matched, guint total), gpointer data)
-{
-	advsearch_set_on_progress_cb(search->asearch, cb, data);
-}
-
-static void quicksearch_set_running(QuickSearch *quicksearch, gboolean run);
-static void quicksearch_set_matchstring(QuickSearch *quicksearch, const gchar *matchstring);
-static void quicksearch_set_active(QuickSearch *quicksearch, gboolean active);
-static void quicksearch_set_popdown_strings(QuickSearch *quicksearch);
-
-static void quicksearch_add_to_history(QuickSearch* quicksearch)
-{
-	gchar* search_string = quicksearch->request.matchstring;
-
-	/* add to history, for extended search add only correct matching rules */
-	if (quicksearch->want_history && !quicksearch->in_typing && search_string && strlen(search_string) != 0) {
-		switch (prefs_common.summary_quicksearch_type) {
-			case ADVANCED_SEARCH_EXTENDED:
-				if (advsearch_has_proper_predicate(quicksearch->asearch)) {
-					quicksearch->extended_search_strings =
-						add_history(quicksearch->extended_search_strings,
-								search_string);
-					prefs_common.summary_quicksearch_history =
-						add_history(prefs_common.summary_quicksearch_history,
-								search_string);
-				}
-				break;
-			default:
-				quicksearch->normal_search_strings =
-					add_history(quicksearch->normal_search_strings,
-							search_string);
-				prefs_common.summary_quicksearch_history =
-					add_history(prefs_common.summary_quicksearch_history,
-							search_string);
-				break;
-		}
-
-		quicksearch_set_popdown_strings(quicksearch);
-	}
-
-	quicksearch->want_history = FALSE;
-}
-
-static void quicksearch_invoke_execute(QuickSearch *quicksearch, gboolean run_only_if_fast)
-{
-	if (quicksearch->running) {
-		quicksearch->want_reexec = TRUE;
-		advsearch_abort(quicksearch->asearch);
-		return;
-	}
-
-	do {
-		gboolean active = quicksearch->request.matchstring != NULL
-				   && g_strcmp0(quicksearch->request.matchstring, "");
-		advsearch_set(quicksearch->asearch, quicksearch->request.type,
-				quicksearch->request.matchstring);
-
-		if (run_only_if_fast && !advsearch_is_fast(quicksearch->asearch))
-			return;
-
-		quicksearch_add_to_history(quicksearch);
-
-		quicksearch_set_active(quicksearch, active);
-
-		quicksearch->want_reexec = FALSE;
-		quicksearch_set_running(quicksearch, TRUE);
-		if (quicksearch->callback != NULL)
-			quicksearch->callback(quicksearch, quicksearch->callback_data);
-		quicksearch_set_running(quicksearch, FALSE);
-	} while (quicksearch->want_reexec);
-}
-
-gboolean quicksearch_run_on_folder(QuickSearch* quicksearch, FolderItem *folderItem, MsgInfoList **result)
-{
-	if (quicksearch_has_sat_predicate(quicksearch)) {
-		gboolean was_running = quicksearch_is_running(quicksearch);
-		gboolean searchres;
-
-		if (!was_running)
-			quicksearch_set_running(quicksearch, TRUE);
-
-		main_window_cursor_wait(mainwindow_get_mainwindow());
-		searchres = advsearch_search_msgs_in_folders(quicksearch->asearch, result, folderItem, FALSE);
-		main_window_cursor_normal(mainwindow_get_mainwindow());
-
-		if (!was_running)
-			quicksearch_set_running(quicksearch, FALSE);
-
-		if (quicksearch->want_reexec) {
-			advsearch_set(quicksearch->asearch, quicksearch->request.type, "");
-		}
-		return searchres;
-	} else
-		return FALSE;
-}
-
-gboolean quicksearch_is_fast(QuickSearch *quicksearch)
-{
-	return advsearch_is_fast(quicksearch->asearch);
-}
-
-static void quicksearch_set_type(QuickSearch *quicksearch, gint type)
-{
-	prefs_common_get_prefs()->summary_quicksearch_type = type;
-	quicksearch->request.type = type;
-}
-
-static gchar *quicksearch_get_text(QuickSearch * quicksearch)
-{
-	gchar *search_string = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry)))), 0, -1);
-
-	return search_string;
-}
-
-static void quicksearch_set_popdown_strings(QuickSearch *quicksearch)
-{
-	GtkWidget *search_string_entry = quicksearch->search_string_entry;
-
-	combobox_unset_popdown_strings(GTK_COMBO_BOX_TEXT(search_string_entry));
-	if (prefs_common.summary_quicksearch_type == ADVANCED_SEARCH_EXTENDED)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(search_string_entry),
-			quicksearch->extended_search_strings);
-	else
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(search_string_entry),
-			quicksearch->normal_search_strings);
-}
-
-static void update_extended_buttons (QuickSearch *quicksearch)
-{
-	GtkWidget *expr_btn = quicksearch->search_condition_expression;
-	GtkWidget *ext_btn = quicksearch->search_description;
-
-	cm_return_if_fail(expr_btn != NULL);
-	cm_return_if_fail(ext_btn != NULL);
-
-	if (prefs_common.summary_quicksearch_type == ADVANCED_SEARCH_EXTENDED) {
-		gtk_widget_show(expr_btn);
-		gtk_widget_show(ext_btn);
-	} else {
-		gtk_widget_hide(expr_btn);
-		gtk_widget_hide(ext_btn);
-	}
-}
-
-static gboolean searchbar_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  QuickSearch *qs)
-{
-	qs->has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean searchbar_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  QuickSearch *qs)
-{
-	qs->has_focus = FALSE;
-	qs->in_typing = FALSE;
-	return FALSE;
-}
-
-gboolean quicksearch_has_focus(QuickSearch *quicksearch)
-{
-	return quicksearch->has_focus;
-}
-
-static void searchbar_run(QuickSearch *quicksearch, gboolean run_only_if_fast)
-{
-	gchar *search_string = quicksearch_get_text(quicksearch);
-	quicksearch_set_matchstring(quicksearch, search_string);
-	g_free(search_string);
-
-	quicksearch->want_history = TRUE;
-
-	quicksearch_invoke_execute(quicksearch, run_only_if_fast);
-}
-
-static int searchbar_changed_timeout(void *data)
-{
-	QuickSearch *qs = (QuickSearch *)data;
-	if (qs && prefs_common.summary_quicksearch_dynamic) {
-		qs->in_typing = TRUE;
-		searchbar_run(qs, TRUE);
-	}
-	return FALSE;
-}
-
-static void searchbar_changed_cb(GtkWidget *widget, QuickSearch *qs)
-{
-	if (!qs->has_focus && prefs_common.summary_quicksearch_autorun) {
-		gtk_widget_grab_focus(qs->search_string_entry);
-		searchbar_run(qs, TRUE);
-		return;
-	}
-
-	if (prefs_common.summary_quicksearch_dynamic) {
-		if (qs->press_timeout_id != 0) {
-			g_source_remove(qs->press_timeout_id);
-		}
-		qs->press_timeout_id = g_timeout_add(prefs_common.qs_press_timeout,
-				searchbar_changed_timeout, qs);
-	}
-
-	if (!qs->has_focus)
-		gtk_widget_grab_focus(qs->search_string_entry);
-}
-
-static gboolean searchbar_pressed(GtkWidget *widget, GdkEventKey *event,
-			      	  QuickSearch *quicksearch)
-{
-	if (event != NULL && (event->keyval == GDK_KEY_ISO_Left_Tab)) {
-		/* Shift+Tab moves focus "back" */
-		gtk_widget_grab_focus(quicksearch->search_type_combo);
-		return TRUE;
-	}
-	if (event != NULL && (event->keyval == GDK_KEY_Tab)) {
-		/* Just Tab moves focus "forwards" */
-		gtk_widget_grab_focus(quicksearch->clear_search);
-		return TRUE;
-	}
-
-	if (event != NULL && (event->keyval == GDK_KEY_Escape)) {
-		gchar *str;
-
-		quicksearch->in_typing = FALSE;
-
-		str = quicksearch_get_text(quicksearch);
-		cm_return_val_if_fail(str != NULL, TRUE);
-
-		/* If the string entry is empty -> hide quicksearch bar. If not -> empty it */
-		if (!*str) {
-			summaryview_activate_quicksearch(
-				mainwindow_get_mainwindow()->summaryview,
-				FALSE);
-		} else {
-			quicksearch_set(quicksearch, prefs_common.summary_quicksearch_type, "");
-			gtk_widget_grab_focus(
-					mainwindow_get_mainwindow()->summaryview->ctree);
-		}
-		g_free(str);
-		return TRUE;
-	}
-
-	if (event != NULL && (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter)) {
-		if (quicksearch->press_timeout_id != 0) {
-			g_source_remove(quicksearch->press_timeout_id);
-			quicksearch->press_timeout_id = 0;
-		}
-		quicksearch->in_typing = FALSE;
-		/* add expression to history list and exec quicksearch */
-		searchbar_run(quicksearch, FALSE);
-
-		g_signal_stop_emission_by_name(G_OBJECT(widget), "key_press_event");
-		return TRUE;
-	}
-
-	if (event && (event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_Up)) {
-		combobox_set_value_from_arrow_key(
-				GTK_COMBO_BOX(quicksearch->search_string_entry),
-				event->keyval);
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-/*
- * Strings describing how to use Extended Search
- *
- * When adding new lines, remember to put 2 strings for each line
- */
-static gchar *search_descr_strings[] = {
-	"a",	 N_("all messages"),
-	"ag #",  N_("messages whose age is greater than # days"),
-	"al #",  N_("messages whose age is less than # days"),
-	"agh #",  N_("messages whose age is greater than # hours"),
-	"alh #",  N_("messages whose age is less than # hours"),
-	"b S",	 N_("messages which contain S in the message body"),
-	"B S",	 N_("messages which contain S in the whole message"),
-	"c S",	 N_("messages carbon-copied to S"),
-	"C S",	 N_("message is either To: or Cc: to S"),
-	"D",	 N_("deleted messages"), /** how I can filter deleted messages **/
-	"da \"YYYY-MM-dd HH:mm:ss\"",  N_("messages whose date is after requested date "
-					  "(time is optional)"),
-	"db \"YYYY-MM-dd HH:mm:ss\"",  N_("messages whose date is before requested date "
-					  "(time is optional)"),
-	"e S",	 N_("messages which contain S in the Sender field"),
-	"E S",	 N_("true if execute \"S\" succeeds"),
-	"f S",	 N_("messages originating from user S"),
-	"F",	 N_("forwarded messages"),
-	"h S",	 N_("messages which contain S in any header name or value"),
-	"H S",	 N_("messages which contain S in the value of any header"),
-	"ha",	 N_("messages which have attachments"),
-	"i S",	 N_("messages which contain S in Message-ID header"),
-	"I S",	 N_("messages which contain S in In-Reply-To header"),
-	"k #",	 N_("messages which are marked with color #"),
-	"L",	 N_("locked messages"),
-	"n S",	 N_("messages which are in newsgroup S"),
-	"N",	 N_("new messages"),
-	"O",	 N_("old messages"),
-	"p",	 N_("incomplete messages (not entirely downloaded)"),
-	"r",	 N_("messages which you have replied to"),
-	"R",	 N_("read messages"),
-	"s S",	 N_("messages which contain S in subject"),
-	"se #",  N_("messages whose score is equal to # points"),
-	"sg #",  N_("messages whose score is greater than # points"),
-	"sl #",  N_("messages whose score is lower than # points"),
-	"Se #",  N_("messages whose size is equal to # bytes"),
-	"Sg #",  N_("messages whose size is greater than # bytes"),
-	"Ss #",  N_("messages whose size is smaller than # bytes"),
-	"t S",	 N_("messages which have been sent to S"),
-	"tg S",  N_("messages which tags contain S"),
-	"tagged",N_("messages which have tag(s)"),
-	"T",	 N_("marked messages"),
-	"U",	 N_("unread messages"),
-	"v H V", N_("messages which contain V in header H"),
-	"x S",	 N_("messages which contain S in References header"),
-	"X \"cmd args\"", N_("messages returning 0 when passed to command - %F is message file"),
-	"",	 "" ,
-	"&amp;",	 N_("logical AND operator"),
-	"|",	 N_("logical OR operator"),
-	"! or ~",	N_("logical NOT operator"),
-	"%",	 N_("case sensitive search"),
-	"&#x00023;", N_("match using regular expressions instead of substring search"),
-	"",	 "" ,
-	" ",	 N_("all filtering expressions are allowed, but cannot be mixed "
-	            "through logical operators with the expressions above"),
-	NULL,	 NULL
-};
-
-static DescriptionWindow search_descr = {
-	NULL,
-	NULL,
-	FALSE,
-	2,
-	N_("Extended Search"),
-	N_("Extended Search allows the user to define criteria that messages must "
-           "have in order to match and be displayed in the message list.\n"
-	   "The following symbols can be used:"),
-	search_descr_strings
-};
-
-static void search_description_cb(GtkWidget *widget)
-{
-	search_descr.parent = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "description_window");
-	description_window_create(&search_descr);
-};
-
-static gboolean clear_search_cb(GtkMenuItem *widget, gpointer data)
-{
-	QuickSearch *quicksearch = (QuickSearch *)data;
-
-	quicksearch_set(quicksearch, prefs_common.summary_quicksearch_type, "");
-
-	return TRUE;
-};
-
-static void search_condition_expr_done(MatcherList * matchers)
-{
-	gchar *str;
-
-	cm_return_if_fail(
-			mainwindow_get_mainwindow()->summaryview->quicksearch != NULL);
-
-	if (matchers == NULL)
-		return;
-
-	str = matcherlist_to_string(matchers);
-
-	if (str != NULL) {
-		quicksearch_set(mainwindow_get_mainwindow()->summaryview->quicksearch,
-				prefs_common.summary_quicksearch_type, str);
-		g_free(str);
-
-		/* add expression to history list and exec quicksearch */
-		searchbar_run(mainwindow_get_mainwindow()->summaryview->quicksearch, FALSE);
-	}
-}
-
-static gboolean search_condition_expr(GtkMenuItem *widget, gpointer data)
-{
-	gchar * cond_str;
-	MatcherList * matchers = NULL;
-
-	cm_return_val_if_fail(
-			mainwindow_get_mainwindow()->summaryview->quicksearch != NULL,
-			FALSE);
-
-	/* re-use the current quicksearch value, expanding it so it also works
-	 * with extended symbols */
-	cond_str = quicksearch_get_text(mainwindow_get_mainwindow()->summaryview->quicksearch);
-
-	if (*cond_str != '\0') {
-		gchar *newstr = advsearch_expand_search_string(cond_str);
-
-		if (newstr && newstr[0] != '\0')
-			matchers = matcher_parser_get_cond(newstr, FALSE);
-		g_free(newstr);
-	}
-
-	prefs_matcher_open(matchers, search_condition_expr_done);
-
-	if (matchers != NULL)
-		matcherlist_free(matchers);
-
-	g_free(cond_str);
-
-	return TRUE;
-};
-
-static void quicksearch_set_button(GtkButton *button, const gchar *icon, const gchar *text)
-{
-	GList *children = gtk_container_get_children(GTK_CONTAINER(button));
-	GList *cur;
-	GtkWidget *box;
-	gboolean icon_visible;
-
-	g_object_get(gtk_settings_get_default(),
-					 "gtk-button-images", &icon_visible,
-					 NULL);
-
-	for (cur = children; cur; cur = cur->next)
-		gtk_container_remove(GTK_CONTAINER(button), GTK_WIDGET(cur->data));
-
-	g_list_free(children);
-	box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-
-	gtk_container_add(GTK_CONTAINER(button), box);
-	if (icon_visible || !text || !*text || icon != NULL)
-		gtk_box_pack_start(GTK_BOX(box), gtk_image_new_from_icon_name(icon,
-			GTK_ICON_SIZE_BUTTON), FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(box), gtk_label_new_with_mnemonic(text), FALSE, FALSE, 0);
-	gtk_widget_show_all(box);
-}
-
-static gboolean search_type_combo_separator_func(GtkTreeModel *model,
-		GtkTreeIter *iter, gpointer data)
-{
-	gchar *txt = NULL;
-
-	cm_return_val_if_fail(model != NULL, FALSE);
-
-	gtk_tree_model_get(model, iter, 0, &txt, -1);
-
-	if (txt == NULL)
-		return TRUE;
-
-	g_free(txt);
-	return FALSE;
-}
-
-static void quicksearch_error(gpointer data)
-{
-	alertpanel_error(_("Something went wrong during search. Please check your logs."));
-}
-
-static void select_correct_combobox_menuitem(QuickSearch *quicksearch)
-{
-	gint active_menuitem = 0;
-	gint active_type;
-	GtkWidget *combobox = quicksearch->search_type_combo;
-
-	/* Figure out which menuitem to set as active. QS_MENU_ACTION_ aliases
-	 * are in the same order as order of their menu items, so we can
-	 * use them as index for gtk_combo_box_set_active().
-	 *
-	 * However, ADVANCED_SEARCH_ aliases are in a different order,
-	 * and even if they weren't, we do not want to depend on them
-	 * always being in correct order, so we have to map them to
-	 * our QS_MENU_ACTION_ aliases manually. */
-	active_type = prefs_common_get_prefs()->summary_quicksearch_type;
-	switch (active_type) {
-		case ADVANCED_SEARCH_SUBJECT:
-			active_menuitem = QS_MENU_ACTION_SUBJECT;
-			break;
-		case ADVANCED_SEARCH_FROM:
-			active_menuitem = QS_MENU_ACTION_FROM;
-			break;
-		case ADVANCED_SEARCH_TO:
-			active_menuitem = QS_MENU_ACTION_TO;
-			break;
-		case ADVANCED_SEARCH_TAG:
-			active_menuitem = QS_MENU_ACTION_TAG;
-			break;
-		case ADVANCED_SEARCH_MIXED:
-			active_menuitem = QS_MENU_ACTION_MIXED;
-			break;
-		case ADVANCED_SEARCH_EXTENDED:
-			active_menuitem = QS_MENU_ACTION_EXTENDED;
-			break;
-		default:
-			g_warning("unhandled advsearch type %d in quicksearch", active_type);
-			break;
-	}
-
-	/* We just want to quietly make the correct menuitem active
-	 * without triggering handlers of the combobox "changed" signal,
-	 * so we temporarily block handling of that signal. */
-	g_signal_handlers_block_matched(G_OBJECT(combobox),
-			G_SIGNAL_MATCH_FUNC, 0, 0, 0,
-			(gpointer)search_type_changed_cb,
-			(gpointer)quicksearch);
-	gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), active_menuitem);
-	g_signal_handlers_unblock_matched(G_OBJECT(combobox),
-			G_SIGNAL_MATCH_FUNC, 0, 0, 0,
-			(gpointer)search_type_changed_cb,
-			(gpointer)quicksearch);
-}
-
-static gboolean set_search_type_checkboxes_func(GtkTreeModel *model,
-		GtkTreePath *path,
-		GtkTreeIter *iter,
-		gpointer data)
-{
-	gboolean has_checkbox;
-	gint action;
-	gboolean cur_active;
-	gboolean active = -1;
-	PrefsCommon *prefs = prefs_common_get_prefs();
-
-	gtk_tree_model_get(model, iter,
-			SEARCH_TYPE_COL_CHECKBOX, &has_checkbox,
-			SEARCH_TYPE_COL_CHECKBOX_ACTIVE, &cur_active,
-			SEARCH_TYPE_COL_ACTION, &action,
-			-1);
-
-	if (!has_checkbox)
-		return FALSE;
-
-	prefs = prefs_common_get_prefs();
-	switch (action) {
-		case QS_MENU_ACTION_RECURSIVE:
-			active = prefs->summary_quicksearch_recurse;
-			break;
-		case QS_MENU_ACTION_STICKY:
-			active = prefs->summary_quicksearch_sticky;
-			break;
-		case QS_MENU_ACTION_TYPEAHEAD:
-			active = prefs->summary_quicksearch_dynamic;
-			break;
-		case QS_MENU_ACTION_RUNONSELECT:
-			active = prefs->summary_quicksearch_autorun;
-			break;
-	}
-
-	if (active != cur_active) {
-		gtk_list_store_set(GTK_LIST_STORE(model), iter,
-				SEARCH_TYPE_COL_CHECKBOX_ACTIVE, active,
-				-1);
-	}
-
-	return FALSE;
-}
-
-/* A function to make status of the toggleable menu items
- * in search type combobox reflect configured prefs */
-static void set_search_type_checkboxes(GtkComboBox *combobox)
-{
-	GtkTreeModel *model;
-
-	cm_return_if_fail(combobox != NULL);
-
-	model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox));
-
-	if (model == NULL)
-		return;
-
-	gtk_tree_model_foreach(model, set_search_type_checkboxes_func, NULL);
-}
-
-static void search_type_changed_cb(GtkComboBox *combobox,
-		gpointer user_data)
-{
-	QuickSearch *quicksearch = (QuickSearch *)user_data;
-	GtkTreeIter iter;
-	GtkTreeModel *model;
-	gboolean has_checkbox, checkbox_active;
-	gint action;
-	PrefsCommon *prefs = prefs_common_get_prefs();
-
-	cm_return_if_fail(quicksearch != NULL);
-	cm_return_if_fail(gtk_combo_box_get_active_iter(combobox, &iter));
-
-	model = gtk_combo_box_get_model(combobox);
-
-	gtk_tree_model_get(model, &iter,
-			SEARCH_TYPE_COL_CHECKBOX, &has_checkbox,
-			SEARCH_TYPE_COL_CHECKBOX_ACTIVE, &checkbox_active,
-			SEARCH_TYPE_COL_ACTION, &action,
-			-1);
-
-	/* React based on which menuitem was selected */
-	switch (action) {
-		case QS_MENU_ACTION_SUBJECT:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_SUBJECT);
-			break;
-		case QS_MENU_ACTION_FROM:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_FROM);
-			break;
-		case QS_MENU_ACTION_TO:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_TO);
-			break;
-		case QS_MENU_ACTION_TAG:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_TAG);
-			break;
-		case QS_MENU_ACTION_MIXED:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_MIXED);
-			break;
-		case QS_MENU_ACTION_EXTENDED:
-			quicksearch_set_type(quicksearch, ADVANCED_SEARCH_EXTENDED);
-			break;
-		case QS_MENU_ACTION_RECURSIVE:
-			prefs->summary_quicksearch_recurse = !checkbox_active;
-			break;
-		case QS_MENU_ACTION_STICKY:
-			prefs->summary_quicksearch_sticky = !checkbox_active;
-			break;
-		case QS_MENU_ACTION_TYPEAHEAD:
-			prefs->summary_quicksearch_dynamic = !checkbox_active;
-			break;
-		case QS_MENU_ACTION_RUNONSELECT:
-			prefs->summary_quicksearch_autorun = !checkbox_active;
-			break;
-	}
-	update_extended_buttons(quicksearch);
-	/* If one of the toggleable items has been activated, there's
-	 * work to be done */
-	if (has_checkbox) {
-		/* TYPEAHEAD is mutually exclusive with RUNONSELECT */
-		if (action == QS_MENU_ACTION_TYPEAHEAD && !checkbox_active)
-			prefs->summary_quicksearch_autorun = FALSE;
-
-		/* RUNONSELECT is mutually exclusive with TYPEAHEAD */
-		if (action == QS_MENU_ACTION_RUNONSELECT && !checkbox_active)
-			prefs->summary_quicksearch_dynamic = FALSE;
-
-		/* Update state of the toggleable menu items */
-		set_search_type_checkboxes(combobox);
-
-		/* Activate one of the search types' menu entries, so that
-		 * the current search type is visible on a closed combobox */
-		select_correct_combobox_menuitem(quicksearch);
-	}
-
-	/* update history list */
-	quicksearch_set_popdown_strings(quicksearch);
-
-	/* Update search results */
-	quicksearch_invoke_execute(quicksearch, FALSE);
-
-	/* Give focus to the text entry */
-	gtk_widget_grab_focus(quicksearch->search_string_entry);
-}
-
-QuickSearch *quicksearch_new()
-{
-	QuickSearch *quicksearch;
-
-	GtkWidget *hbox_search;
-	GtkWidget *search_type_combo;
-	GtkWidget *search_string_entry;
-	GtkWidget *search_hbox;
-	GtkWidget *search_description;
-	GtkWidget *clear_search;
-	GtkWidget *search_condition_expression;
-	GtkWidget *vbox;
-	GtkListStore *menu;
-	GtkCellRenderer *renderer;
-	GtkTreeIter iter;
-
-	quicksearch = g_new0(QuickSearch, 1);
-
-	quicksearch->asearch = advsearch_new();
-	advsearch_set_on_error_cb(quicksearch->asearch, quicksearch_error, NULL);
-
-	/* init. values initally found in quicksearch_new().
-	   There's no need to init. all pointers to NULL since we use g_new0
-	 */
-	quicksearch->active = FALSE;
-	quicksearch->running = FALSE;
-	quicksearch->in_typing = FALSE;
-	quicksearch->press_timeout_id = 0;
-	quicksearch->normal_search_strings = NULL;
-	quicksearch->extended_search_strings = NULL;
-
-	/* quick search */
-	hbox_search = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-
-	menu = gtk_list_store_new(4,
-		    G_TYPE_STRING,
-		    G_TYPE_BOOLEAN,
-		    G_TYPE_BOOLEAN,
-		    G_TYPE_INT);
-
-	search_type_combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(menu));
-	gtk_widget_set_focus_on_click(GTK_WIDGET(search_type_combo), FALSE);
-	gtk_combo_box_set_row_separator_func(GTK_COMBO_BOX(search_type_combo),
-			(GtkTreeViewRowSeparatorFunc)search_type_combo_separator_func,
-			NULL, NULL);
-
-	renderer = gtk_cell_renderer_toggle_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(search_type_combo), renderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(search_type_combo),
-			renderer,
-			"visible", SEARCH_TYPE_COL_CHECKBOX,
-			"active", SEARCH_TYPE_COL_CHECKBOX_ACTIVE,
-			NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(search_type_combo), renderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(search_type_combo),
-			renderer, "text", SEARCH_TYPE_COL_TEXT, NULL);
-
-	gtk_box_pack_start(GTK_BOX(hbox_search), search_type_combo, FALSE, FALSE, HSPACING_NARROW_2);
-
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Subject"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_SUBJECT,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("From"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_FROM,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("To"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_TO,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Tag"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_TAG,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("From/To/Cc/Subject/Tag"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_MIXED,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Extended"),
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_EXTENDED,
-			-1);
-	gtk_list_store_append(menu, &iter); /* Separator */
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, NULL,
-			SEARCH_TYPE_COL_CHECKBOX, FALSE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_SEPARATOR,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Recursive"),
-			SEARCH_TYPE_COL_CHECKBOX, TRUE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_RECURSIVE,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Sticky"),
-			SEARCH_TYPE_COL_CHECKBOX, TRUE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_STICKY,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Type-ahead"),
-			SEARCH_TYPE_COL_CHECKBOX, TRUE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_TYPEAHEAD,
-			-1);
-	gtk_list_store_append(menu, &iter);
-	gtk_list_store_set(menu, &iter,
-			SEARCH_TYPE_COL_TEXT, _("Run on select"),
-			SEARCH_TYPE_COL_CHECKBOX, TRUE,
-			SEARCH_TYPE_COL_ACTION, QS_MENU_ACTION_RUNONSELECT,
-			-1);
-
-	g_signal_connect(G_OBJECT(search_type_combo), "changed",
-			G_CALLBACK(search_type_changed_cb), quicksearch);
-
-	gtk_widget_show(search_type_combo);
-
-	search_string_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(search_string_entry), -1);
-
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-	gtk_box_pack_start(GTK_BOX(vbox), search_string_entry, FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox_search), vbox, TRUE, TRUE, HSPACING_NARROW);
-
-	gtk_widget_show(vbox);
-	gtk_widget_show(search_string_entry);
-
-	search_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW+1);
-	clear_search = gtkut_stock_button("edit-clear", _("C_lear"));
-	gtk_box_pack_start(GTK_BOX(search_hbox), clear_search,
-			   FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(clear_search), "clicked",
-			 G_CALLBACK(clear_search_cb), quicksearch);
-	CLAWS_SET_TIP(clear_search,
-			     _("Clear the current search"));
-	gtk_widget_show(clear_search);
-
-	search_condition_expression = gtk_button_new_with_mnemonic(_("_Edit"));
-	gtk_box_pack_start(GTK_BOX(search_hbox), search_condition_expression,
-			   FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT (search_condition_expression), "clicked",
-			 G_CALLBACK(search_condition_expr),
-			 quicksearch);
-	CLAWS_SET_TIP(search_condition_expression,
-			     _("Edit search criteria"));
-	gtk_widget_show(search_condition_expression);
-
-	search_description = gtkut_stock_button("dialog-information", _("_Information"));
-	gtk_box_pack_start(GTK_BOX(search_hbox), search_description,
-			   FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(search_description), "clicked",
-			 G_CALLBACK(search_description_cb), NULL);
-	CLAWS_SET_TIP(search_description,
-			     _("Information about extended symbols"));
-	gtk_widget_show(search_description);
-
-	gtk_box_pack_start(GTK_BOX(hbox_search), search_hbox, FALSE, FALSE, HSPACING_NARROW_2);
-	gtk_widget_show(search_hbox);
-
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((search_string_entry)))),
-			   "key_press_event",
-			   G_CALLBACK(searchbar_pressed),
-			   quicksearch);
-
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((search_string_entry)))),
-			 "changed",
-			 G_CALLBACK(searchbar_changed_cb),
-			 quicksearch);
-
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((search_string_entry)))),
-			 "focus_in_event",
-			 G_CALLBACK(searchbar_focus_evt_in),
-			 quicksearch);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((search_string_entry)))),
-			 "focus_out_event",
-			 G_CALLBACK(searchbar_focus_evt_out),
-			 quicksearch);
-
-	quicksearch->hbox_search = hbox_search;
-	quicksearch->search_type_combo = search_type_combo;
-	quicksearch->search_string_entry = search_string_entry;
-	quicksearch->search_condition_expression = search_condition_expression;
-	quicksearch->search_description = search_description;
-	quicksearch->active = FALSE;
-	quicksearch->running = FALSE;
-	quicksearch->clear_search = clear_search;
-	quicksearch->in_typing = FALSE;
-	quicksearch->press_timeout_id = 0;
-	quicksearch->normal_search_strings = NULL;
-	quicksearch->extended_search_strings = NULL;
-
-	quicksearch_set_button(GTK_BUTTON(quicksearch->search_description), "dialog-information-symbolic",
-			       _("_Information"));
-	quicksearch_set_button(GTK_BUTTON(quicksearch->search_condition_expression), NULL, _("E_dit"));
-	quicksearch_set_button(GTK_BUTTON(quicksearch->clear_search), "edit-clear-symbolic", _("C_lear"));
-
-	update_extended_buttons(quicksearch);
-
-	GTKUT_GDKRGBA_TO_GDKCOLOR(prefs_common.color[COL_QS_ACTIVE_BG],
-					   qs_active_bgcolor);
-	GTKUT_GDKRGBA_TO_GDKCOLOR(prefs_common.color[COL_QS_ACTIVE],
-					   qs_active_color);
-	GTKUT_GDKRGBA_TO_GDKCOLOR(prefs_common.color[COL_QS_ERROR_BG],
-					   qs_error_bgcolor);
-	GTKUT_GDKRGBA_TO_GDKCOLOR(prefs_common.color[COL_QS_ERROR],
-					   qs_error_color);
-
-	/* Update state of the search type combobox to reflect
-	 * current quicksearch prefs */
-	set_search_type_checkboxes(GTK_COMBO_BOX(search_type_combo));
-	select_correct_combobox_menuitem(quicksearch);
-
-	return quicksearch;
-}
-
-void quicksearch_relayout(QuickSearch *quicksearch)
-{
-	switch (prefs_common.layout_mode) {
-	case NORMAL_LAYOUT:
-		quicksearch_set_button(GTK_BUTTON(quicksearch->search_description),
-				       "dialog-information-symbolic", _("_Information"));
-		quicksearch_set_button(GTK_BUTTON(quicksearch->search_condition_expression), NULL, _("E_dit"));
-		quicksearch_set_button(GTK_BUTTON(quicksearch->clear_search), "edit-clear-symbolic", _("C_lear"));
-		break;
-	case VERTICAL_LAYOUT:
-		quicksearch_set_button(GTK_BUTTON(quicksearch->search_description), "dialog-information-symbolic", "");
-		quicksearch_set_button(GTK_BUTTON(quicksearch->search_condition_expression), NULL, _("E_dit"));
-		quicksearch_set_button(GTK_BUTTON(quicksearch->clear_search), "edit-clear-symbolic", "");
-		break;
-	}
-}
-
-GtkWidget *quicksearch_get_widget(QuickSearch *quicksearch)
-{
-	return quicksearch->hbox_search;
-}
-
-GtkWidget *quicksearch_get_entry(QuickSearch *quicksearch)
-{
-	return gtk_bin_get_child(GTK_BIN(quicksearch->search_string_entry));
-}
-
-void quicksearch_show(QuickSearch *quicksearch)
-{
-	gint active_type;
-	MainWindow *mainwin = mainwindow_get_mainwindow();
-	gtk_widget_show(quicksearch->hbox_search);
-	update_extended_buttons(quicksearch);
-	gtk_widget_grab_focus(quicksearch->search_string_entry);
-
-	if (!mainwin || !mainwin->summaryview) {
-		return;
-	}
-
-	active_type = prefs_common_get_prefs()->summary_quicksearch_type;
-	quicksearch_set_type(quicksearch, active_type);
-}
-
-void quicksearch_hide(QuickSearch *quicksearch)
-{
-	if (quicksearch_has_sat_predicate(quicksearch)) {
-		quicksearch_set(quicksearch, prefs_common.summary_quicksearch_type, "");
-		quicksearch_set_active(quicksearch, FALSE);
-	}
-	gtk_widget_hide(quicksearch->hbox_search);
-}
-
-/*
- *\brief	Sets the matchstring.
- *
- *\param	quicksearch quicksearch to set
- *\param	matchstring the match string; it is duplicated, not stored
- */
-static void quicksearch_set_matchstring(QuickSearch *quicksearch,
-					const gchar *matchstring)
-{
-	g_free(quicksearch->request.matchstring);
-	quicksearch->request.matchstring = g_strdup(matchstring);
-}
-
-void quicksearch_set(QuickSearch *quicksearch, AdvancedSearchType type, const gchar *matchstring)
-{
-	quicksearch_set_type(quicksearch, type);
-	select_correct_combobox_menuitem(quicksearch);
-
-	if (!matchstring || !(*matchstring))
-		quicksearch->in_typing = FALSE;
-
-	quicksearch_set_matchstring(quicksearch, matchstring);
-
-	g_signal_handlers_block_by_func(G_OBJECT(gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry)))),
-					G_CALLBACK(searchbar_changed_cb), quicksearch);
-	gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry)))),
-			   matchstring);
-	g_signal_handlers_unblock_by_func(G_OBJECT(gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry)))),
-					  G_CALLBACK(searchbar_changed_cb), quicksearch);
-
-	prefs_common.summary_quicksearch_type = type;
-
-	quicksearch_invoke_execute(quicksearch, FALSE);
-}
-
-gboolean quicksearch_has_sat_predicate(QuickSearch *quicksearch)
-{
-	return quicksearch->active && advsearch_has_proper_predicate(quicksearch->asearch);
-}
-
-static void quicksearch_set_active(QuickSearch *quicksearch, gboolean active)
-{
-	gboolean error = FALSE;
-
-	quicksearch->active = active;
-
-	if (active &&
-		(prefs_common.summary_quicksearch_type == ADVANCED_SEARCH_EXTENDED
-		 && !advsearch_has_proper_predicate(quicksearch->asearch)))
-		error = TRUE;
-
-	if (active) {
-		gtk_widget_modify_base(
-			gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry))),
-			GTK_STATE_NORMAL, error ? &qs_error_bgcolor : &qs_active_bgcolor);
-		gtk_widget_modify_text(
-			gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry))),
-			GTK_STATE_NORMAL, error ? &qs_error_color : &qs_active_color);
-	} else {
-		gtk_widget_modify_base(
-			gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry))),
-			GTK_STATE_NORMAL, NULL);
-		gtk_widget_modify_text(
-			gtk_bin_get_child(GTK_BIN((quicksearch->search_string_entry))),
-			GTK_STATE_NORMAL, NULL);
-	}
-
-	if (!active) {
-		advsearch_abort(quicksearch->asearch);
-	}
-}
-
-void quicksearch_set_execute_callback(QuickSearch *quicksearch,
-				      QuickSearchExecuteCallback callback,
-				      gpointer data)
-{
-	quicksearch->callback = callback;
-	quicksearch->callback_data = data;
-}
-
-static void quicksearch_set_running(QuickSearch *quicksearch, gboolean run)
-{
-	quicksearch->running = run;
-}
-
-gboolean quicksearch_is_running(QuickSearch *quicksearch)
-{
-	return quicksearch->running;
-}
-
-gboolean quicksearch_is_in_typing(QuickSearch *quicksearch)
-{
-	return quicksearch->in_typing;
-}
-
-void quicksearch_set_search_strings(QuickSearch *quicksearch)
-{
-	GList *strings = prefs_common.summary_quicksearch_history;
-	gchar *newstr = NULL;
-	MatcherList *matcher_list = NULL;
-
-	if (!strings)
-		return;
-
-	matcher_parser_disable_warnings(TRUE);
-
-	do {
-		newstr = advsearch_expand_search_string((gchar *) strings->data);
-		if (newstr && newstr[0] != '\0') {
-			if (!strchr(newstr, ' ')) {
-				quicksearch->normal_search_strings =
-					g_list_append(
-						quicksearch->normal_search_strings,
-						g_strdup(strings->data));
-			} else {
-				matcher_list = matcher_parser_get_cond(newstr, FALSE);
-
-				if (matcher_list) {
-					quicksearch->extended_search_strings =
-						g_list_prepend(
-							quicksearch->extended_search_strings,
-							g_strdup(strings->data));
-					matcherlist_free(matcher_list);
-				} else
-					quicksearch->normal_search_strings =
-						g_list_prepend(
-							quicksearch->normal_search_strings,
-							g_strdup(strings->data));
-			}
-		}
-		g_free(newstr);
-
-	} while ((strings = g_list_next(strings)) != NULL);
-
-	matcher_parser_disable_warnings(FALSE);
-
-	quicksearch->normal_search_strings = g_list_reverse(quicksearch->normal_search_strings);
-	quicksearch->extended_search_strings = g_list_reverse(quicksearch->extended_search_strings);
-
-	quicksearch_set_popdown_strings(quicksearch);
-}
blob - a4d9079f09db3fadf9de9325418c842300a64b0e (mode 644)
blob + /dev/null
--- src/gtk/quicksearch.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net> 
- * and the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- * 
- */
-
-#ifndef QUICKSEARCH_H
-#define QUICKSEARCH_H 1
-
-#include "advsearch.h"
-
-typedef struct _QuickSearch QuickSearch;
-typedef void (*QuickSearchExecuteCallback) (QuickSearch *quicksearch, gpointer data);
-
-#include "procmsg.h"
-
-QuickSearch *quicksearch_new();
-GtkWidget *quicksearch_get_widget(QuickSearch *quicksearch);
-GtkWidget *quicksearch_get_entry(QuickSearch *quicksearch);
-void quicksearch_show(QuickSearch *quicksearch);
-void quicksearch_hide(QuickSearch *quicksearch);
-void quicksearch_set(QuickSearch *quicksearch, AdvancedSearchType type, const gchar *matchstring);
-void quicksearch_set_recursive(QuickSearch *quicksearch, gboolean recursive);
-gboolean quicksearch_has_sat_predicate(QuickSearch *quicksearch);
-void quicksearch_set_execute_callback(QuickSearch *quicksearch,
-				      QuickSearchExecuteCallback callback,
-				      gpointer data);
-void quicksearch_set_on_progress_cb(QuickSearch* search,
-		gboolean (*cb)(gpointer data, guint at, guint matched, guint total), gpointer data);
-
-gboolean quicksearch_run_on_folder(QuickSearch* quicksearch, FolderItem *folderItem, MsgInfoList **result);
-
-gboolean quicksearch_is_running(QuickSearch *quicksearch);
-gboolean quicksearch_has_focus(QuickSearch *quicksearch);
-gboolean quicksearch_is_fast(QuickSearch *quicksearch);
-gboolean quicksearch_is_in_typing(QuickSearch *quicksearch);
-void quicksearch_relayout(QuickSearch *quicksearch);
-void quicksearch_set_search_strings(QuickSearch *quicksearch);
-#endif /* QUICKSEARCH_H */
blob - 770e5a0d5e1f01aee61d06ecd4f6b467c81ba74a
blob + 0dfecab1c2342a29928dd0d3a68f5ca8a5e75462
--- src/imap.c
+++ src/imap.c
@@ -38,13 +38,9 @@
 #include <ctype.h>
 #include <time.h>
 #include <errno.h>
-#if HAVE_ICONV
-#  include <iconv.h>
-#endif
+#include <iconv.h>
 
-#ifdef USE_GNUTLS
-#  include "ssl.h"
-#endif
+#include "ssl.h"
 
 #include "folder.h"
 #include "session.h"
@@ -61,15 +57,13 @@
 #include "claws.h"
 #include "statusbar.h"
 #include "msgcache.h"
-#include "imap-thread.h"
+#include "etpan/imap-thread.h"
 #include "account.h"
 #include "tags.h"
 #include "main.h"
 #include "passwordstore.h"
 #include "file-utils.h"
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 
 typedef struct _IMAPFolder	IMAPFolder;
 typedef struct _IMAPSession	IMAPSession;
@@ -144,9 +138,7 @@ struct _IMAPNameSpace
 
 
 #define IMAP4_PORT	143
-#ifdef USE_GNUTLS
 #define IMAPS_PORT	993
-#endif
 
 #define IMAP_CMD_LIMIT	1000
 
@@ -218,14 +210,6 @@ static gint 	imap_copy_msgs		(Folder 	*folder,
 		    			 MsgInfoList 	*msglist,
 					 GHashTable 	*relation);
 
-static gint	search_msgs		(Folder			*folder,
-					 FolderItem		*container,
-					 MsgNumberList		**msgs,
-					 gboolean		*on_server,
-					 MatcherList		*predicate,
-					 SearchProgressNotify	progress_cb,
-					 gpointer		progress_data);
-
 static gint 	imap_remove_msg		(Folder 	*folder,
 					 FolderItem 	*item,
 					 gint 		 uid);
@@ -341,9 +325,7 @@ static gint imap_cmd_login	(IMAPSession	*session,
 				 const gchar	*pass,
 				 const gchar 	*type);
 static gint imap_cmd_noop	(IMAPSession	*session);
-#ifdef USE_GNUTLS
 static gint imap_cmd_starttls	(IMAPSession	*session);
-#endif
 static gint imap_cmd_select	(IMAPSession	*session,
 				 const gchar	*folder,
 				 gint		*exists,
@@ -450,7 +432,6 @@ FolderClass *imap_get_class(void)
 		imap_class.type = F_IMAP;
 		imap_class.idstr = "imap";
 		imap_class.uistr = "IMAP";
-		imap_class.supports_server_search = TRUE;
 
 		/* Folder functions */
 		imap_class.new_folder = imap_folder_new;
@@ -482,7 +463,6 @@ FolderClass *imap_get_class(void)
 		imap_class.add_msgs = imap_add_msgs;
 		imap_class.copy_msg = imap_copy_msg;
 		imap_class.copy_msgs = imap_copy_msgs;
-		imap_class.search_msgs = search_msgs;
 		imap_class.remove_msg = imap_remove_msg;
 		imap_class.remove_msgs = imap_remove_msgs;
 		imap_class.expunge = imap_expunge;
@@ -730,11 +710,9 @@ static void imap_handle_error(Session *session, const 
 	case MAILIMAP_ERROR_SASL:
 		MY_LOG_WARNING(g_strconcat(_("IMAP error on %s:"), " ", _("SASL error"), "\n", NULL), session_server)
 		break;
-#ifdef USE_GNUTLS
 	case MAILIMAP_ERROR_SSL:
 		MY_LOG_WARNING(g_strconcat(_("IMAP error on %s:"), " ", _("TLS error"), "\n", NULL), session_server)
 		break;
-#endif
 	default:
 		MY_LOG_WARNING(g_strconcat(_("IMAP error on %s:"), " ", _("Unknown error [%d]"), "\n", NULL),
 			session_server, libetpan_errcode)
@@ -898,11 +876,9 @@ static gint imap_auth(IMAPSession *session, const gcha
 	case IMAP_AUTH_PLAIN:
 		ok = imap_cmd_login(session, user, pass, "PLAIN");
 		break;
-#ifdef USE_GNUTLS
 	case IMAP_AUTH_OAUTH2:
 		ok = imap_cmd_login(session, user, pass, "XOAUTH2");
 		break;
-#endif
 	case IMAP_AUTH_LOGIN:
 		ok = imap_cmd_login(session, user, pass, "LOGIN");
 		break;
@@ -921,9 +897,7 @@ static gint imap_auth(IMAPSession *session, const gcha
 				"\t SCRAM-SHA-384 %d\n"
 				"\t SCRAM-SHA-512 %d\n"
 				"\t PLAIN %d\n"
-#ifdef USE_GNUTLS
 				"\t OAUTH2 %d\n"
-#endif
 				"\t LOGIN %d\n"
 				"\t GSSAPI %d\n",
 			imap_has_capability(session, "ANONYMOUS"),
@@ -933,9 +907,7 @@ static gint imap_auth(IMAPSession *session, const gcha
 			imap_has_capability(session, "SCRAM-SHA-384"),
 			imap_has_capability(session, "SCRAM-SHA-512"),
 			imap_has_capability(session, "PLAIN"),
-#ifdef USE_GNUTLS
 			imap_has_capability(session, "XOAUTH2"),
-#endif
 			imap_has_capability(session, "LOGIN"),
 			imap_has_capability(session, "GSSAPI"));
 		if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "SCRAM-SHA-512"))
@@ -956,10 +928,8 @@ static gint imap_auth(IMAPSession *session, const gcha
 			ok = imap_cmd_login(session, user, pass, "GSSAPI");
 		if (ok == MAILIMAP_ERROR_LOGIN) /* we always try plaintext login before giving up */
 			ok = imap_cmd_login(session, user, pass, "plaintext");
-#ifdef USE_GNUTLS
 		if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "XOAUTH2"))
 			ok = imap_cmd_login(session, user, pass, "XOAUTH2");
-#endif
 	}
 
 	if (ok == MAILIMAP_NO_ERROR)
@@ -1006,12 +976,10 @@ static gint imap_auth(IMAPSession *session, const gcha
 				     "compiled with SASL support and the "
 				     "LOGIN SASL plugin is installed.");
 		}
-#ifdef USE_GNUTLS
 		if (type == IMAP_AUTH_OAUTH2) {
 			ext_info = _("\n\nOAuth2 error. Check and correct your OAuth2 "
 				     "account preferences.");
 		}
-#endif
 		if (time(NULL) - last_login_err > 10) {
 			if (prefs_common.show_recv_err_dialog) {
 				alertpanel_error_log(_("Connection to %s failed: "
@@ -1176,29 +1144,11 @@ static IMAPSession *imap_session_new(Folder * folder,
 	int authenticated = FALSE;
 	gchar *buf;
 
-#ifdef USE_GNUTLS
-	/* FIXME: IMAP over SSL only... */
 	SSLType ssl_type;
 
 	port = account->set_imapport ? account->imapport
 		: account->ssl_imap == SSL_TUNNEL ? IMAPS_PORT : IMAP4_PORT;
 	ssl_type = account->ssl_imap;
-#else
-	if (account->ssl_imap != SSL_NONE) {
-		if (alertpanel_full(_("Insecure connection"),
-			_("This connection is configured to be secured "
-			  "using TLS, but TLS is not available "
-			  "in this build of Claws Mail. \n\n"
-			  "Do you want to continue connecting to this "
-			  "server? The communication would not be "
-			  "secure."),
-			  NULL, _("_Cancel"), NULL, _("Con_tinue connecting"), NULL, NULL,
-			  ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING) != G_ALERTALTERNATE)
-			return NULL;
-	}
-	port = account->set_imapport ? account->imapport
-		: IMAP4_PORT;
-#endif
 
 	imap_init(folder);
 	IMAP_FOLDER(folder)->max_set_size = account->imap_batch_size;
@@ -1231,11 +1181,9 @@ static IMAPSession *imap_session_new(Folder * folder,
 		authenticated = FALSE;
 	}
 	else {
-#ifdef USE_GNUTLS
 		if (r == MAILIMAP_ERROR_SSL)
 			log_error(LOG_PROTOCOL, _("TLS handshake failed\n"));
 		else
-#endif
 			imap_handle_error(NULL, account->recv_server, r);
 
 		if(prefs_common.show_recv_err_dialog) {
@@ -1267,7 +1215,6 @@ static IMAPSession *imap_session_new(Folder * folder,
 	session->folder = folder;
 	IMAP_FOLDER(session->folder)->last_seen_separator = 0;
 
-#ifdef USE_GNUTLS
 	if (account->ssl_imap == SSL_STARTTLS) {
 		gint ok;
 
@@ -1287,7 +1234,6 @@ static IMAPSession *imap_session_new(Folder * folder,
 		session->cmd_count = 1;
 	}
 	SESSION(session)->use_tls_sni = account->use_tls_sni;
-#endif
 
 	log_message(LOG_PROTOCOL, "IMAP connection is %s-authenticated\n",
 		    (session->authenticated) ? "pre" : "un");
@@ -1304,10 +1250,8 @@ static gint imap_session_authenticate(IMAPSession *ses
 	gboolean failed = FALSE;
 	gint ok = MAILIMAP_NO_ERROR;
 	g_return_val_if_fail(account->userid != NULL, MAILIMAP_ERROR_BAD_STATE);
-#ifdef USE_OAUTH2
 	if(account->imap_auth_type == IMAP_AUTH_OAUTH2)
 	        oauth2_check_passwds (account);
-#endif
 	if (!password_get(account->userid, account->recv_server, "imap",
 			 SESSION(session)->port, &acc_pass)) {
 		acc_pass = passwd_store_get_account(account->account_id,
@@ -2014,426 +1958,6 @@ static gint imap_copy_msgs(Folder *folder, FolderItem 
 	return ret;
 }
 
-static gboolean imap_matcher_type_is_local(gint matchertype)
-{
-	switch (matchertype) {
-	case MATCHCRITERIA_FROM:
-	case MATCHCRITERIA_TO:
-	case MATCHCRITERIA_CC:
-	case MATCHCRITERIA_TO_OR_CC:
-	case MATCHCRITERIA_SUBJECT:
-	case MATCHCRITERIA_REFERENCES:
-	case MATCHCRITERIA_MESSAGEID:
-	case MATCHCRITERIA_INREPLYTO:
-	case MATCHCRITERIA_AGE_GREATER:
-	case MATCHCRITERIA_AGE_LOWER:
-	case MATCHCRITERIA_FORWARDED:
-	case MATCHCRITERIA_SPAM:
-	case MATCHCRITERIA_UNREAD:
-	case MATCHCRITERIA_NEW:
-	case MATCHCRITERIA_MARKED:
-	case MATCHCRITERIA_REPLIED:
-	case MATCHCRITERIA_DELETED:
-	case MATCHCRITERIA_SIZE_GREATER:
-	case MATCHCRITERIA_SIZE_SMALLER:
-	case MATCHCRITERIA_SIZE_EQUAL:
-		return TRUE;
-	}
-	return FALSE;
-}
-
-static IMAPSearchKey* search_make_key(MatcherProp* match, gboolean* is_all)
-{
-	if (match->matchtype == MATCHTYPE_MATCHCASE || match->matchtype == MATCHTYPE_MATCH) {
-		IMAPSearchKey* result = NULL;
-		gboolean invert = FALSE;
-		gint matchertype = match->criteria;
-
-		if (is_all) {
-			*is_all = FALSE;
-		}
-
-		switch (matchertype) {
-		case MATCHCRITERIA_NOT_NEW: invert = TRUE; matchertype = MATCHCRITERIA_NEW; break;
-		case MATCHCRITERIA_NOT_MARKED: invert = TRUE; matchertype = MATCHCRITERIA_MARKED; break;
-		case MATCHCRITERIA_NOT_FORWARDED: invert = TRUE; matchertype = MATCHCRITERIA_FORWARDED; break;
-		case MATCHCRITERIA_NOT_SPAM: invert = TRUE; matchertype = MATCHCRITERIA_SPAM; break;
-		case MATCHCRITERIA_NOT_SUBJECT: invert = TRUE; matchertype = MATCHCRITERIA_SUBJECT; break;
-		case MATCHCRITERIA_NOT_FROM: invert = TRUE; matchertype = MATCHCRITERIA_FROM; break;
-		case MATCHCRITERIA_NOT_TO: invert = TRUE; matchertype = MATCHCRITERIA_TO; break;
-		case MATCHCRITERIA_NOT_CC: invert = TRUE; matchertype = MATCHCRITERIA_CC; break;
-		case MATCHCRITERIA_NOT_REFERENCES: invert = TRUE; matchertype = MATCHCRITERIA_REFERENCES; break;
-		case MATCHCRITERIA_NOT_HEADER: invert = TRUE; matchertype = MATCHCRITERIA_HEADER; break;
-		case MATCHCRITERIA_NOT_TAG: invert = TRUE; matchertype = MATCHCRITERIA_TAG; break;
-		case MATCHCRITERIA_NOT_HEADERS_PART: invert = TRUE; matchertype = MATCHCRITERIA_HEADERS_PART; break;
-		case MATCHCRITERIA_NOT_HEADERS_CONT: invert = TRUE; matchertype = MATCHCRITERIA_HEADERS_CONT; break;
-		case MATCHCRITERIA_NOT_MESSAGE: invert = TRUE; matchertype = MATCHCRITERIA_MESSAGE; break;
-		case MATCHCRITERIA_NOT_BODY_PART: invert = TRUE; matchertype = MATCHCRITERIA_BODY_PART; break;
-		case MATCHCRITERIA_NOT_TO_AND_NOT_CC: invert = TRUE; matchertype = MATCHCRITERIA_TO_OR_CC; break;
-		case MATCHCRITERIA_NOT_MESSAGEID: invert = TRUE; matchertype = MATCHCRITERIA_MESSAGEID; break;
-		case MATCHCRITERIA_NOT_INREPLYTO: invert = TRUE; matchertype = MATCHCRITERIA_INREPLYTO; break;
-		}
-
-		/*
-		 * this aborts conversion even for predicates understood by the following code.
-		 * while that might seem wasteful, claws local search for information listed below
-		 * has proven faster than IMAP search plus network roundtrips. once this changes,
-		 * consider removing these exceptions.
-		 */
-		if (imap_matcher_type_is_local(matchertype))
-			return NULL;
-
-		/* the Message-ID header is also cached */
-		if (matchertype == MATCHCRITERIA_HEADER && g_strcmp0("Message-ID", match->header) == 0) {
-			return NULL;
-		}
-
-		switch (matchertype) {
-		case MATCHCRITERIA_FORWARDED:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_TAG, NULL, RTAG_FORWARDED, 0);
-			break;
-
-		case MATCHCRITERIA_SPAM:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_TAG, NULL, RTAG_JUNK, 0);
-			break;
-
-		case MATCHCRITERIA_MESSAGEID:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_HEADER, "Message-ID", match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_INREPLYTO:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_HEADER, "In-Reply-To", match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_REFERENCES:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_HEADER, "References", match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_TO_OR_CC:
-			result = imap_search_or(
-					imap_search_new(IMAP_SEARCH_CRITERIA_TO, NULL, match->expr, 0),
-					imap_search_new(IMAP_SEARCH_CRITERIA_CC, NULL, match->expr, 0)
-					);
-			break;
-
-		case MATCHCRITERIA_HEADERS_PART:
-		case MATCHCRITERIA_HEADERS_CONT:
-			result = imap_search_and(
-					imap_search_not(imap_search_new(IMAP_SEARCH_CRITERIA_BODY, NULL, match->expr, 0)),
-					imap_search_new(IMAP_SEARCH_CRITERIA_MESSAGE, NULL, match->expr, 0)
-					);
-			break;
-
-		case MATCHCRITERIA_SIZE_EQUAL:
-			result = imap_search_and(
-					imap_search_not(imap_search_new(IMAP_SEARCH_CRITERIA_SIZE_SMALLER, NULL, NULL, match->value)),
-					imap_search_not(imap_search_new(IMAP_SEARCH_CRITERIA_SIZE_GREATER, NULL, NULL, match->value))
-					);
-			break;
-
-		case MATCHCRITERIA_NOT_UNREAD:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_READ, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_UNREAD:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_UNREAD, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_NEW:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_NEW, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_MARKED:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_MARKED, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_DELETED:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_DELETED, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_REPLIED:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_REPLIED, NULL, NULL, 0);
-			break;
-
-		case MATCHCRITERIA_TAG:
-			{
-				gchar *tmp = imap_utf8_to_modified_utf7(match->expr, TRUE);
-				result = imap_search_new(IMAP_SEARCH_CRITERIA_TAG, NULL, tmp, 0);
-				g_free(tmp);
-			}
-			break;
-
-		case MATCHCRITERIA_SUBJECT:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_SUBJECT, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_FROM:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_FROM, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_TO:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_TO, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_CC:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_CC, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_AGE_GREATER:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_AGE_GREATER, NULL, NULL, match->value);
-			break;
-
-		case MATCHCRITERIA_AGE_LOWER:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_AGE_LOWER, NULL, NULL, match->value);
-			break;
-
-		case MATCHCRITERIA_BODY_PART:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_BODY, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_MESSAGE:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_MESSAGE, NULL, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_HEADER:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_HEADER, match->header, match->expr, 0);
-			break;
-
-		case MATCHCRITERIA_SIZE_GREATER:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_SIZE_GREATER, NULL, NULL, match->value);
-			break;
-
-		case MATCHCRITERIA_SIZE_SMALLER:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_SIZE_SMALLER, NULL, NULL, match->value);
-			break;
-
-		default:
-			result = imap_search_new(IMAP_SEARCH_CRITERIA_ALL, NULL, NULL, 0);
-			if (is_all) {
-				*is_all = TRUE;
-			}
-			break;
-		}
-
-		if (invert) {
-			result = imap_search_not(result);
-			if (is_all && *is_all) {
-				*is_all = FALSE;
-			}
-		}
-
-		return result;
-	}
-
-	return NULL;
-}
-
-static void imap_change_search_charset(IMAPFolder *folder)
-{
-	/* If server supports charset in searches, but the last used one failed,
-	 * changed to the next preferred charset. If none are still available,
-	 * disable charset searches.
-	 * Charsets are tried in the following order:
-	 * UTF-8, locale's charset, UTF-7.
-	 */
-
-	if (folder->search_charset_supported) {
-		if (folder->search_charset && !strcmp(folder->search_charset, conv_get_locale_charset_str_no_utf8()))
-			folder->search_charset = "UTF-8";
-		else if (folder->search_charset && !strcmp(folder->search_charset, "UTF-8"))
-			folder->search_charset = "UTF-7";
-		else {
-			folder->search_charset = NULL;
-			folder->search_charset_supported = FALSE;
-		}
-	}
-}
-
-static MatcherProp *imap_matcher_prop_set_charset(IMAPFolder *folder,
-						  MatcherProp *utf8_prop,
-						  gchar **charset)
-{
-	/* If the match is going to be done locally, or the criteria is on
-	 * tag (special-cased to modified-UTF-7), or the expression searched
-	 * is ASCII, don't bother converting.
-	 */
-	if (imap_matcher_type_is_local(utf8_prop->criteria)
-	 || utf8_prop->criteria == MATCHCRITERIA_TAG
-	 || utf8_prop->criteria == MATCHCRITERIA_NOT_TAG
-	 || utf8_prop->expr == NULL
-	 || is_ascii_str(utf8_prop->expr))
-		return matcherprop_new(utf8_prop->criteria,
-			       utf8_prop->header,
-			       utf8_prop->matchtype,
-			       utf8_prop->expr,
-			       utf8_prop->value);
-	else {
-		gchar *conv_expr = NULL;
-
-		/* If the search is server-side and the server doesn't support
-		 * searching with the charsets we handle, bail out.
-		 */
-		if (folder->search_charset_supported == FALSE)
-			return NULL;
-
-		/* Else, convert. */
-		if (*charset == NULL)
-			*charset = g_strdup(folder->search_charset);
-
-		conv_expr = conv_codeset_strdup(utf8_prop->expr, CS_UTF_8, *charset);
-
-		if (conv_expr == NULL)
-			conv_expr = g_strdup(utf8_prop->expr);
-
-		return matcherprop_new(utf8_prop->criteria,
-			       utf8_prop->header,
-			       utf8_prop->matchtype,
-			       conv_expr,
-			       utf8_prop->value);
-	}
-}
-
-static gint	search_msgs		(Folder			*folder,
-					 FolderItem		*container,
-					 MsgNumberList		**msgs,
-					 gboolean		*on_server,
-					 MatcherList		*predicate,
-					 SearchProgressNotify	progress_cb,
-					 gpointer		progress_data)
-{
-	IMAPSearchKey* key = NULL;
-	GSList* cur;
-	int result = -1;
-	clist* uidlist = NULL;
-	gboolean server_filtering_useless = FALSE;
-        IMAPSession *session;
-	gchar *charset_to_use = NULL;
-
-	if (on_server == NULL || !*on_server) {
-		return folder_item_search_msgs_local(folder, container, msgs, on_server,
-				predicate, progress_cb, progress_data);
-	}
-
-	for (cur = predicate->matchers; cur != NULL; cur = cur->next) {
-		IMAPSearchKey* matcherPart = NULL;
-		MatcherProp* prop = (MatcherProp*) cur->data;
-		gboolean is_all;
-		MatcherProp *imap_prop = imap_matcher_prop_set_charset(IMAP_FOLDER(folder), prop, &charset_to_use);
-
-		if (imap_prop == NULL) {
-			/* Couldn't convert matcherprop to IMAP - probably not ascii
-			 * and server doesn't support the charsets we do. */
-			 return -1;
-		}
-
-		matcherPart = search_make_key(imap_prop, &is_all);
-
-		matcherprop_free(imap_prop);
-
-		if (on_server) {
-			*on_server &= matcherPart != NULL && prop->matchtype == MATCHTYPE_MATCHCASE;
-		}
-
-		if (matcherPart) {
-			if (key == NULL) {
-				key = matcherPart;
-				server_filtering_useless = is_all;
-			} else if (predicate->bool_and) {
-				key = imap_search_and(key, matcherPart);
-				server_filtering_useless &= is_all;
-			} else {
-				key = imap_search_or(key, matcherPart);
-				server_filtering_useless |= is_all;
-			}
-		}
-	}
-
-	if (server_filtering_useless) {
-		imap_search_free(key);
-		key = NULL;
-	}
-
-	if (key == NULL && progress_cb != NULL) {
-		GSList* cur;
-		GSList* list;
-		int count = 0;
-
-		progress_cb(progress_data, TRUE, 0, 0, container->total_msgs);
-		progress_cb(progress_data, TRUE, container->total_msgs, 0, container->total_msgs);
-
-		list = folder_item_get_msg_list(container);
-		for (cur = list; cur != NULL; cur = cur->next) {
-			*msgs = g_slist_prepend(*msgs, GUINT_TO_POINTER(((MsgInfo*) cur->data)->msgnum));
-			count++;
-		}
-		procmsg_msg_list_free(list);
-
-		*msgs = g_slist_reverse(*msgs);
-
-		return count;
-	}
-
-	session = imap_session_get(folder);
-        if (!session) {
-                return -1;
-        }
-	result = imap_select(session, IMAP_FOLDER(folder), FOLDER_ITEM(container),
-			 NULL, NULL, NULL, NULL, NULL, TRUE);
-	if (result != MAILIMAP_NO_ERROR)
-		return -1;
-
-	if (progress_cb)
-		progress_cb(progress_data, TRUE, 0, 0, container->total_msgs);
-	result = imap_threaded_search(folder, IMAP_SEARCH_TYPE_KEYED, key, charset_to_use, NULL, &uidlist);
-	if (progress_cb)
-		progress_cb(progress_data, TRUE, container->total_msgs, 0, container->total_msgs);
-
-	if (result == MAILIMAP_ERROR_PROTOCOL) {
-		debug_print("Server side search unavailable, using local search\n");
-		imap_handle_error(SESSION(session), NULL, result);
-		result = folder_item_search_msgs_local(folder, container, msgs,	NULL,
-						       predicate, progress_cb, progress_data);
-		if (result < 0) {
-			debug_print("search_msgs - got protocol error, aborting\n");
-			alertpanel_error_log(_("Search failed due to server error."));
-			return -1;
-		}
-
-		return result;
-	}
-
-	if (result == MAILIMAP_NO_ERROR) {
-		gint result = 0;
-
-		*msgs = imap_uid_list_from_lep(uidlist, &result);
-
-		mailimap_search_result_free(uidlist);
-
-		if (charset_to_use != NULL)
-			g_free(charset_to_use);
-
-		return result;
-	} else if (charset_to_use != NULL) {
-		/* If search failed and was on an 8-bit string, try the next
-		 * available charset to search if there still are some.
-		 */
-		g_free(charset_to_use);
-
-		imap_change_search_charset(IMAP_FOLDER(folder));
-		if (IMAP_FOLDER(folder)->search_charset_supported)
-			return search_msgs(folder, container, msgs, on_server, predicate,
-				   progress_cb, progress_data);
-		else {
-			imap_handle_error(SESSION(session), NULL, result);
-			return -1;
-		}
-	} else {
-		imap_handle_error(SESSION(session), NULL, result);
-		return -1;
-	}
-}
-
-
 static gint imap_do_remove_msgs(Folder *folder, FolderItem *dest,
 			        MsgInfoList *msglist, GHashTable *relation)
 {
@@ -3962,7 +3486,6 @@ static gint imap_cmd_login(IMAPSession *session,
 	if (!strcmp(type, "plaintext") && imap_has_capability(session, "LOGINDISABLED")) {
 		ok = MAILIMAP_ERROR_BAD_STATE;
 		if (imap_has_capability(session, "STARTTLS")) {
-#ifdef USE_GNUTLS
 			log_warning(LOG_PROTOCOL, _("Server requires STARTTLS to log in.\n"));
 			ok = imap_cmd_starttls(session);
 			if (ok != MAILIMAP_NO_ERROR) {
@@ -3977,14 +3500,6 @@ static gint imap_cmd_login(IMAPSession *session,
 					return r;
 				}
 			}
-#else
-			log_error(LOG_PROTOCOL, _("Connection to %s failed: "
-					"server requires STARTTLS, but Claws Mail "
-					"has been compiled without STARTTLS "
-					"support.\n"),
-					SESSION(session)->server);
-			return MAILIMAP_ERROR_LOGIN;
-#endif
 		} else {
 			log_error(LOG_PROTOCOL, _("Server logins are disabled.\n"));
 			return MAILIMAP_ERROR_LOGIN;
@@ -4046,7 +3561,6 @@ static gint imap_cmd_noop(IMAPSession *session)
 	return MAILIMAP_NO_ERROR;
 }
 
-#ifdef USE_GNUTLS
 static gint imap_cmd_starttls(IMAPSession *session)
 {
 	int r;
@@ -4060,7 +3574,6 @@ static gint imap_cmd_starttls(IMAPSession *session)
 	}
 	return MAILIMAP_NO_ERROR;
 }
-#endif
 
 static gint imap_cmd_select(IMAPSession *session, const gchar *folder,
 			    gint *exists, gint *recent, gint *unseen,
blob - 5bd18da1bd4c06fc4b725e11c900aab17e54001a
blob + b19236b23063d3be6534e51caea4bbebf1d776ff
--- src/inc.c
+++ src/inc.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <fcntl.h>
@@ -60,9 +55,7 @@
 #include "hooks.h"
 #include "logwindow.h"
 #include "passwordstore.h"
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 
 static GList *inc_dialog_list = NULL;
 
@@ -549,14 +542,9 @@ static void inc_session_destroy(IncSession *session)
 
 static gint pop3_get_port(Pop3Session *pop3_session)
 {
-#ifdef USE_GNUTLS
 	return pop3_session->ac_prefs->set_popport ?
 		pop3_session->ac_prefs->popport :
 		pop3_session->ac_prefs->ssl_pop == SSL_TUNNEL ? 995 : 110;
-#else
-	return pop3_session->ac_prefs->set_popport ?
-		pop3_session->ac_prefs->popport : 110;
-#endif
 }
 
 static gint inc_start(IncProgressDialog *inc_dialog)
@@ -583,11 +571,10 @@ static gint inc_start(IncProgressDialog *inc_dialog)
 			manage_window_focus_in
 				(inc_dialog->dialog->window,
 				 NULL, NULL);
-#ifdef USE_OAUTH2
+
 		if(pop3_session->ac_prefs->use_pop_auth &&
 		   pop3_session->ac_prefs->pop_auth_type == POPAUTH_OAUTH2)
 		     oauth2_check_passwds (pop3_session->ac_prefs);
-#endif
 
 		if (password_get(pop3_session->user,
 					pop3_session->ac_prefs->recv_server,
@@ -793,25 +780,10 @@ static IncState inc_pop3_session_do(IncSession *sessio
 	account_name = ac->account_name;
 	port = pop3_get_port(pop3_session);
 
-#ifdef USE_GNUTLS
 	SESSION(pop3_session)->ssl_type = ac->ssl_pop;
 	if (ac->ssl_pop != SSL_NONE)
 		SESSION(pop3_session)->nonblocking =
 			ac->use_nonblocking_ssl;
-#else
-	if (ac->ssl_pop != SSL_NONE) {
-		if (alertpanel_full(_("Insecure connection"),
-			_("This connection is configured to be secured "
-			  "using TLS, but TLS is not available "
-			  "in this build of Claws Mail. \n\n"
-			  "Do you want to continue connecting to this "
-			  "server? The communication would not be "
-			  "secure."),
-			NULL, _("_Cancel"), NULL, _("Con_tinue connecting"), NULL, NULL,
-			ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING) != G_ALERTALTERNATE)
-			return INC_CANCEL;
-	}
-#endif
 
 	buf = g_strdup_printf(_("Account '%s': Connecting to POP3 server: %s:%d..."),
 				account_name, server, port);
blob - bfa64dceab1deb374671d8ce60c47a2caf79a38d
blob + c7c879dec8d039e71d0ccb47979469b02911b315
--- src/inc.h
+++ src/inc.h
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef __INC_H__
@@ -27,7 +27,7 @@
 #include <glib.h>
 
 #include "mainwindow.h"
-#include "progressdialog.h"
+#include "gtk/progressdialog.h"
 #include "prefs_account.h"
 #include "session.h"
 #include "pop.h"
blob - ceeb89750af1aa00bd750dd6fd666c7b918882fa
blob + d538b199d205852908403d3cf40e813f56727c99
--- src/localfolder.c
+++ src/localfolder.c
@@ -17,8 +17,6 @@
  *
  */
 
-#include "config.h"
-
 #include <glib.h>
 
 #include "folder.h"
blob - 731f5f65a2fb8bf2309241cef64564d1f34ccd8d
blob + 41a8cb9425926796583bc46093dfc1925c44ce7e
--- src/main.c
+++ src/main.c
@@ -16,13 +16,8 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
+#include "common/defs.h"
 
-#include "defs.h"
-
 #include <glib.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
@@ -56,7 +51,6 @@
 #include "prefs_ext_prog.h"
 #include "prefs_message.h"
 #include "prefs_receive.h"
-#include "prefs_quote.h"
 #include "prefs_summaries.h"
 #include "prefs_themes.h"
 #include "prefs_other.h"
@@ -88,21 +82,14 @@
 #include "matcher.h"
 #include "hooks.h"
 #include "menu.h"
-#include "quicksearch.h"
-#include "advsearch.h"
 #include "avatars.h"
 #include "passwordstore.h"
 #include "file-utils.h"
-
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 
-#include "imap-thread.h"
+#include "etpan/imap-thread.h"
 #include "stock_pixmap.h"
-#ifdef USE_GNUTLS
-#  include "ssl.h"
-#endif
+#include "ssl.h"
 
 #include "version.h"
 
@@ -352,18 +339,14 @@ static void main_dump_features_list(gboolean show_debu
 		debug_print("Compiled-in features:\n");
 	else
 		g_print("Compiled-in features:\n");
-#if USE_GNUTLS
 	if (show_debug_only)
 		debug_print(" GnuTLS\n");
 	else
 		g_print(" GnuTLS\n");
-#endif
-#if HAVE_ICONV
 	if (show_debug_only)
 		debug_print(" iconv\n");
 	else
 		g_print(" iconv\n");
-#endif
 	if (show_debug_only)
 		debug_print(" libetpan %d.%d\n", LIBETPAN_VERSION_MAJOR, LIBETPAN_VERSION_MINOR);
 	else
@@ -424,7 +407,7 @@ int main(int argc, char *argv[])
 	CHDIR_RETURN_VAL_IF_FAIL(get_home_dir(), 1);
 
 	if (!is_dir_exist(get_rc_dir())) {
-		if (copy_dir(SYSCONFDIR "/skel/.claws-mail", get_rc_dir()) < 0) {
+		if (copy_dir("/etc/skel/.claws-mail", get_rc_dir()) < 0) {
 			if (!is_dir_exist(get_rc_dir()) && make_dir(get_rc_dir()) < 0) {
 				exit(1);
 			}
@@ -476,13 +459,11 @@ int main(int argc, char *argv[])
 	prefs_ext_prog_init();
 	prefs_wrapping_init();
 	prefs_compose_writing_init();
-	prefs_quote_init();
 	prefs_summaries_init();
 	prefs_message_init();
 	prefs_other_init();
 	prefs_receive_init();
 	prefs_send_init();
-	matcher_init();
 
 	codeconv_set_allow_jisx0201_kana(prefs_common.allow_jisx0201_kana);
 	codeconv_set_broken_are_utf8(prefs_common.broken_are_utf8);
@@ -518,9 +499,7 @@ int main(int argc, char *argv[])
 
 	prefs_account_init();
 	account_read_config_all();
-#ifdef USE_OAUTH2
 	account_read_oauth2_all();
-#endif
 
 	imap_main_init(prefs_common.skip_ssl_cert_check);
 	imap_main_set_timeout(prefs_common.io_timeout_secs);
@@ -561,9 +540,6 @@ int main(int argc, char *argv[])
 	folder_set_missing_folders();
 	folderview_set(folderview);
 
-	prefs_matcher_read_config();
-	quicksearch_set_search_strings(mainwin->summaryview->quicksearch);
-
 	/* make one all-folder processing before using claws */
 	main_window_cursor_wait(mainwin);
 	folder_func_to_all_folders(initial_processing, (gpointer *)mainwin);
@@ -592,11 +568,6 @@ int main(int argc, char *argv[])
 
 	num_folder_class = g_list_length(folder_get_list());
 
-	if (g_list_length(folder_get_list()) != num_folder_class) {
-		debug_print("new folders loaded, reloading processing rules\n");
-		prefs_matcher_read_config();
-	}
-
 	if (never_ran) {
 		prefs_common_write_config();
 	}
@@ -767,7 +738,6 @@ static void exit_claws(MainWindow *mainwin)
 
 	main_window_destroy_all();
 
-	matcher_done();
 	prefs_toolbar_done();
 	avatars_done();
 
@@ -776,7 +746,6 @@ static void exit_claws(MainWindow *mainwin)
 	prefs_ext_prog_done();
 	prefs_wrapping_done();
 	prefs_compose_writing_done();
-	prefs_quote_done();
 	prefs_summaries_done();
 	prefs_message_done();
 	prefs_other_done();
@@ -1077,7 +1046,6 @@ static void parse_cmd_opt(int argc, char *argv[])
 			g_print("%s\n", _("  --help -h              display this help"));
 			g_print("%s\n", _("  --version -v           output version information"));
 			g_print("%s\n", _("  --version-full -V      output version and built-in features information"));
-			g_print("%s\n", _("  --config-dir           output configuration directory"));
 			g_print("%s\n", _("  --alternate-config-dir directory\n"
 			                  "                         use specified configuration directory"));
 			g_print("%s\n", _("  --geometry -geometry [WxH][+X+Y]\n"
@@ -1085,9 +1053,6 @@ static void parse_cmd_opt(int argc, char *argv[])
 
 			g_free(base);
 			exit(1);
-		} else if (!strcmp(argv[i], "--config-dir")) {
-			g_print(RC_DIR "\n");
-			exit(0);
 		} else if (!strcmp(argv[i], "--alternate-config-dir")) {
 		    if (i+1 < argc) {
 				set_rc_dir(argv[i+1]);
@@ -1645,84 +1610,6 @@ static void lock_socket_input_cb(gpointer data,
 	} else if (!STRNCMP(buf, "import ")) {
 		const gchar *mbox_file = buf + 7;
 		mainwindow_import_mbox(mbox_file);
-	} else if (!STRNCMP(buf, "search ")) {
-		FolderItem* folderItem = NULL;
-		GSList *messages = NULL;
-		gchar *folder_name = NULL;
-		gchar *request = NULL;
-		AdvancedSearch *search;
-		gboolean recursive;
-		AdvancedSearchType searchType = ADVANCED_SEARCH_EXTENDED;
-
-		search = advsearch_new();
-
-		folder_name = g_strdup(buf+7);
-		strretchomp(folder_name);
-
-		if (fd_gets(sock, buf, sizeof(buf) - 1) <= 0)
-			goto search_exit;
-		buf[sizeof(buf) - 1] = '\0';
-
-		switch (toupper(buf[0])) {
-		case 'S': searchType = ADVANCED_SEARCH_SUBJECT; break;
-		case 'F': searchType = ADVANCED_SEARCH_FROM; break;
-		case 'T': searchType = ADVANCED_SEARCH_TO; break;
-		case 'M': searchType = ADVANCED_SEARCH_MIXED; break;
-		case 'G': searchType = ADVANCED_SEARCH_TAG; break;
-		case 'E': searchType = ADVANCED_SEARCH_EXTENDED; break;
-		}
-
-		if (fd_gets(sock, buf, sizeof(buf) - 1) <= 0)
-			goto search_exit;
-
-		buf[sizeof(buf) - 1] = '\0';
-		request = g_strdup(buf);
-		strretchomp(request);
-
-		recursive = TRUE;
-		if (fd_gets(sock, buf, sizeof(buf) - 1) > 0)
-			recursive = buf[0] != '0';
-
-		buf[sizeof(buf) - 1] = '\0';
-
-		debug_print("search: %s %i %s %i\n", folder_name, searchType, request, recursive);
-
-		folderItem = folder_find_item_from_identifier(folder_name);
-
-		if (folderItem == NULL) {
-			debug_print("Unknown folder item : '%s', searching folder\n",folder_name);
-			Folder* folder = folder_find_from_path(folder_name);
-			if (folder != NULL)
-				folderItem = FOLDER_ITEM(folder->node->data);
-			else
-				debug_print("Unknown folder: '%s'\n",folder_name);
-		} else {
-			debug_print("%s %s\n",folderItem->name, folderItem->path);
-		}
-
-		if (folderItem != NULL) {
-			advsearch_set(search, searchType, request);
-			advsearch_search_msgs_in_folders(search, &messages, folderItem, recursive);
-		} else {
-			g_print("Folder '%s' not found.\n'", folder_name);
-		}
-
-		GSList *cur;
-		for (cur = messages; cur != NULL; cur = cur->next) {
-			MsgInfo* msg = (MsgInfo *)cur->data;
-			gchar *file = procmsg_get_message_file_path(msg);
-			CM_FD_WRITE_ALL(file);
-			CM_FD_WRITE_ALL("\n");
-			g_free(file);
-		}
-		CM_FD_WRITE_ALL(".\n");
-
-search_exit:
-		g_free(folder_name);
-		g_free(request);
-		advsearch_free(search);
-		if (messages != NULL)
-			procmsg_msg_list_free(messages);
 	} else if (!STRNCMP(buf, "exit")) {
 		if (prefs_common.clean_on_exit && !prefs_common.ask_on_clean) {
 			procmsg_empty_all_trash();
blob - a1421a05256375dcaf86186a103d9a295b9b0b65
blob + 5f56a0496b38d7a369d2d6f60104d27b9a68b995
--- src/mainwindow.c
+++ src/mainwindow.c
@@ -16,7 +16,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
@@ -31,9 +30,7 @@
 #include "folderview.h"
 #include "folder_item_prefs.h"
 #include "foldersel.h"
-#include "quicksearch.h"
 #include "summaryview.h"
-#include "summary_search.h"
 #include "messageview.h"
 #include "mimeview.h"
 #include "message_search.h"
@@ -137,8 +134,6 @@ static void app_exit_cb		 (GtkAction	*action,
 
 static void search_cb		 (GtkAction	*action,
 				  gpointer	 data);
-static void search_folder_cb	 (GtkAction	*action,
-				  gpointer	 data);
 
 static void toggle_message_cb	 (GtkAction	*action,
 				  gpointer	 data);
@@ -375,8 +370,6 @@ static void mailing_list_compose(GtkWidget *w, gpointe
 
 static void mailing_list_open_uri(GtkWidget *w, gpointer *data);
 
-static void mainwindow_quicksearch		(GtkAction	*action,
-				  gpointer	 data);
 static gboolean any_folder_want_synchronise(void);
 
 static void save_part_as_cb(GtkAction *action, gpointer data);
@@ -458,8 +451,6 @@ static GtkActionEntry mainwin_entries[] =
 	{"Edit/SelectThread",           NULL, N_("Select _thread"), NULL, NULL, G_CALLBACK(select_thread_cb) },
 	{"Edit/---",                    NULL, "---", NULL, NULL, NULL },
 	{"Edit/Find",                   NULL, N_("_Find in current message..."), "<control>F", NULL, G_CALLBACK(search_cb) },
-	{"Edit/SearchFolder",			NULL, N_("_Search folder..."), "<shift><control>F", NULL, G_CALLBACK(search_folder_cb) },
-	{"Edit/QuickSearch",			NULL, N_("_Quick search"), "slash", NULL, G_CALLBACK(mainwindow_quicksearch) },
 
 	{"View/ShowHide",               NULL, N_("Show or hi_de"), NULL, NULL, NULL },
 	{"View/ShowHide/Toolbar",       NULL, N_("_Toolbar"), NULL, NULL, NULL },
@@ -840,17 +831,6 @@ static gboolean mainwindow_key_pressed (GtkWidget *wid
 	if (!mainwin || !event)
 		return FALSE;
 
-	if (quicksearch_has_focus(mainwin->summaryview->quicksearch))
-	{
-		GtkWidget *entry =
-			quicksearch_get_entry(mainwin->summaryview->quicksearch);
-		gboolean handled;
-		g_signal_emit_by_name(entry, "key-press-event", event, &handled);
-		if (handled) {
-			return TRUE;
-		}
-	}
-
 	switch (event->keyval) {
 	case GDK_KEY_Q:             /* Quit */
 		BREAK_ON_MODIFIER_KEY();
@@ -1004,8 +984,6 @@ MainWindow *main_window_create()
 	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Edit", "SelectThread", "Edit/SelectThread", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Edit", "Separator1", "Edit/---", GTK_UI_MANAGER_SEPARATOR)
 	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Edit", "Find", "Edit/Find", GTK_UI_MANAGER_MENUITEM)
-	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Edit", "SearchFolder", "Edit/SearchFolder", GTK_UI_MANAGER_MENUITEM)
-	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Edit", "QuickSearch", "Edit/QuickSearch", GTK_UI_MANAGER_MENUITEM)
 
 /* View menu */
 	MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/View", "ShowHide", "View/ShowHide", GTK_UI_MANAGER_MENU)
@@ -2332,8 +2310,6 @@ void main_window_set_menu_sensitive(MainWindow *mainwi
 
 	SET_SENSITIVE("Menu/Edit/SelectThread", M_TARGET_EXIST, M_SUMMARY_ISLIST);
 	SET_SENSITIVE("Menu/Edit/Find", M_SINGLE_TARGET_EXIST);
-	SET_SENSITIVE("Menu/Edit/QuickSearch", M_IN_MSGLIST);
-	SET_SENSITIVE("Menu/Edit/SearchFolder", M_TARGET_EXIST, M_SUMMARY_ISLIST);
 
 	SET_SENSITIVE("Menu/View/SetColumns/Folderlist", M_UNLOCKED, M_SUMMARY_ISLIST);
 	SET_SENSITIVE("Menu/View/Sort", M_EXEC, M_SUMMARY_ISLIST);
@@ -2491,14 +2467,10 @@ void main_window_set_menu_sensitive(MainWindow *mainwi
 
 	if (mainwin->summaryview->folder_item && !mainwin->summaryview->folder_item->threaded)
 		cm_toggle_menu_set_active_full(mainwin->ui_manager, "Menu/View/HideReadThreads", FALSE);
-	if ((mainwin->summaryview->folder_item && mainwin->summaryview->folder_item->hide_read_msgs) ||
-	    quicksearch_has_sat_predicate(mainwin->summaryview->quicksearch))
+	if (mainwin->summaryview->folder_item && mainwin->summaryview->folder_item->hide_read_msgs)
 		cm_menu_set_sensitive_full(mainwin->ui_manager, "Menu/View/HideReadThreads", FALSE);
-	if ((mainwin->summaryview->folder_item && mainwin->summaryview->folder_item->hide_read_threads) ||
-	    quicksearch_has_sat_predicate(mainwin->summaryview->quicksearch))
+	if (mainwin->summaryview->folder_item && mainwin->summaryview->folder_item->hide_read_threads)
 		cm_menu_set_sensitive_full(mainwin->ui_manager, "Menu/View/HideReadMessages", FALSE);
-	if (quicksearch_has_sat_predicate(mainwin->summaryview->quicksearch))
-		cm_menu_set_sensitive_full(mainwin->ui_manager, "Menu/View/HideDelMessages", FALSE);
 
 	cm_menu_set_sensitive_full(mainwin->ui_manager, "Menu/View/Goto/PrevHistory",
 		messageview_nav_has_prev(mainwin->messageview));
@@ -3077,20 +3049,6 @@ static void search_cb(GtkAction *action, gpointer data
 	message_search(mainwin->messageview);
 }
 
-static void search_folder_cb(GtkAction *action, gpointer data)
-{
-	MainWindow *mainwin = (MainWindow *)data;
-	FolderItem *item = mainwin->summaryview->folder_item;
-	cm_return_if_fail(item != NULL);
-	summary_search(mainwin->summaryview);
-}
-
-static void mainwindow_quicksearch(GtkAction *action, gpointer data)
-{
-	MainWindow *mainwin = (MainWindow *)data;
-	summaryview_activate_quicksearch(mainwin->summaryview, TRUE);
-}
-
 static void toggle_message_cb(GtkAction *action, gpointer data)
 {
 	MainWindow *mainwin = (MainWindow *)data;
blob - 15a498895058cb8e3e9760a152ac2742005ea18a
blob + f44f088425ad5df9156021c2a062bec978e6d0c6
--- src/mainwindow.h
+++ src/mainwindow.h
@@ -24,7 +24,7 @@
 typedef struct _MainWindow  MainWindow;
 
 #include "viewtypes.h"
-#include "logwindow.h"
+#include "gtk/logwindow.h"
 #include "procmsg.h"
 #include "toolbar.h"
 
blob - 0b006273be5cf705a31f5710dfb24663ed010542
blob + 27207812435ea4ca1c34a8245405d5855c80852f
--- src/manual.c
+++ src/manual.c
@@ -76,7 +76,7 @@ gboolean manual_available(ManualType type)
 
 	switch (type) {
 		case MANUAL_MANUAL_CLAWS:
-			dir = get_local_path_with_locale(MANUALDIR);
+			dir = get_local_path_with_locale("/dev/null"); // TODO: was MANUALDIR
 			if (dir != NULL) {
 				uri = g_strconcat(dir, G_DIR_SEPARATOR_S, MANUAL_HTML_INDEX, NULL);
 				g_free(dir);
@@ -101,7 +101,7 @@ void manual_open(ManualType type, gchar *url_anchor)
 
 	switch (type) {
 		case MANUAL_MANUAL_CLAWS:
-			dir = get_local_path_with_locale(MANUALDIR);
+			dir = get_local_path_with_locale("/dev/null"); // TODO: was MANUALDIR
 			if (dir != NULL) {
 				gchar *tmp_anchor = NULL;
 				if (url_anchor && *url_anchor != '\0')
blob - 57c5c8537c81317f51a4766c89a4a7f4a8f1be2d (mode 644)
blob + /dev/null
--- src/matcher.c
+++ /dev/null
@@ -1,2091 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 2002-2023 by the Claws Mail Team and 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <pthread.h>
-
-#include "defs.h"
-#include "utils.h"
-#include "procheader.h"
-#include "matcher.h"
-#include "matcher_parser.h"
-#include "prefs_gtk.h"
-#include "addr_compl.h"
-#include "codeconv.h"
-#include "quoted-printable.h"
-#include "claws.h"
-#include "prefs_common.h"
-#include "log.h"
-#include "tags.h"
-#include "folder_item_prefs.h"
-#include "procmsg.h"
-#include "file-utils.h"
-
-/*!
- *\brief	Keyword lookup element
- */
-struct _MatchParser {
-	gint id;		/*!< keyword id */
-	gchar *str;		/*!< keyword */
-};
-typedef struct _MatchParser MatchParser;
-
-/*!
- *\brief	Table with strings and ids used by the lexer and
- *		the parser. New keywords can be added here.
- */
-static const MatchParser matchparser_tab[] = {
-	/* msginfo flags */
-	{MATCHCRITERIA_ALL, "all"},
-	{MATCHCRITERIA_UNREAD, "unread"},
-	{MATCHCRITERIA_NOT_UNREAD, "~unread"},
-	{MATCHCRITERIA_NEW, "new"},
-	{MATCHCRITERIA_NOT_NEW, "~new"},
-	{MATCHCRITERIA_MARKED, "marked"},
-	{MATCHCRITERIA_NOT_MARKED, "~marked"},
-	{MATCHCRITERIA_DELETED, "deleted"},
-	{MATCHCRITERIA_NOT_DELETED, "~deleted"},
-	{MATCHCRITERIA_REPLIED, "replied"},
-	{MATCHCRITERIA_NOT_REPLIED, "~replied"},
-	{MATCHCRITERIA_FORWARDED, "forwarded"},
-	{MATCHCRITERIA_NOT_FORWARDED, "~forwarded"},
-	{MATCHCRITERIA_LOCKED, "locked"},
-	{MATCHCRITERIA_NOT_LOCKED, "~locked"},
-	{MATCHCRITERIA_IGNORE_THREAD, "ignore_thread"},
-	{MATCHCRITERIA_NOT_IGNORE_THREAD, "~ignore_thread"},
-	{MATCHCRITERIA_WATCH_THREAD, "watch_thread"},
-	{MATCHCRITERIA_NOT_WATCH_THREAD, "~watch_thread"},
-	{MATCHCRITERIA_SPAM, "spam"},
-	{MATCHCRITERIA_NOT_SPAM, "~spam"},
-	{MATCHCRITERIA_HAS_ATTACHMENT, "has_attachment"},
-	{MATCHCRITERIA_HAS_NO_ATTACHMENT, "~has_attachment"},
-	{MATCHCRITERIA_SIGNED, "signed"},
-	{MATCHCRITERIA_NOT_SIGNED, "~signed"},
-
-	/* msginfo headers */
-	{MATCHCRITERIA_SUBJECT, "subject"},
-	{MATCHCRITERIA_NOT_SUBJECT, "~subject"},
-	{MATCHCRITERIA_FROM, "from"},
-	{MATCHCRITERIA_NOT_FROM, "~from"},
-	{MATCHCRITERIA_TO, "to"},
-	{MATCHCRITERIA_NOT_TO, "~to"},
-	{MATCHCRITERIA_CC, "cc"},
-	{MATCHCRITERIA_NOT_CC, "~cc"},
-	{MATCHCRITERIA_TO_OR_CC, "to_or_cc"},
-	{MATCHCRITERIA_NOT_TO_AND_NOT_CC, "~to_or_cc"},
-	{MATCHCRITERIA_TAG, "tag"},
-	{MATCHCRITERIA_NOT_TAG, "~tag"},
-	{MATCHCRITERIA_TAGGED, "tagged"},
-	{MATCHCRITERIA_NOT_TAGGED, "~tagged"},
-	{MATCHCRITERIA_AGE_GREATER, "age_greater"},
-	{MATCHCRITERIA_AGE_LOWER, "age_lower"},
-	{MATCHCRITERIA_AGE_GREATER_HOURS, "age_greater_hours"},
-	{MATCHCRITERIA_AGE_LOWER_HOURS, "age_lower_hours"},
-	{MATCHCRITERIA_DATE_AFTER, "date_after"},
-	{MATCHCRITERIA_DATE_BEFORE, "date_before"},
-	{MATCHCRITERIA_MESSAGEID, "messageid"},
-	{MATCHCRITERIA_NOT_MESSAGEID, "~messageid"},
-	{MATCHCRITERIA_INREPLYTO, "inreplyto"},
-	{MATCHCRITERIA_NOT_INREPLYTO, "~inreplyto"},
-	{MATCHCRITERIA_REFERENCES, "references"},
-	{MATCHCRITERIA_NOT_REFERENCES, "~references"},
-	{MATCHCRITERIA_SCORE_GREATER, "score_greater"},
-	{MATCHCRITERIA_SCORE_LOWER, "score_lower"},
-	{MATCHCRITERIA_SCORE_EQUAL, "score_equal"},
-	{MATCHCRITERIA_PARTIAL, "partial"},
-	{MATCHCRITERIA_NOT_PARTIAL, "~partial"},
-	{MATCHCRITERIA_FOUND_IN_ADDRESSBOOK, "found_in_addressbook"},
-	{MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK, "~found_in_addressbook"},
-
-	{MATCHCRITERIA_SIZE_GREATER, "size_greater"},
-	{MATCHCRITERIA_SIZE_SMALLER, "size_smaller"},
-	{MATCHCRITERIA_SIZE_EQUAL,   "size_equal"},
-
-	/* content have to be read */
-	{MATCHCRITERIA_HEADER, "header"},
-	{MATCHCRITERIA_NOT_HEADER, "~header"},
-	{MATCHCRITERIA_HEADERS_PART, "headers_part"},
-	{MATCHCRITERIA_NOT_HEADERS_PART, "~headers_part"},
-	{MATCHCRITERIA_HEADERS_CONT, "headers_cont"},
-	{MATCHCRITERIA_NOT_HEADERS_CONT, "~headers_cont"},
-	{MATCHCRITERIA_MESSAGE, "message"},
-	{MATCHCRITERIA_NOT_MESSAGE, "~message"},
-	{MATCHCRITERIA_BODY_PART, "body_part"},
-	{MATCHCRITERIA_NOT_BODY_PART, "~body_part"},
-	{MATCHCRITERIA_TEST, "test"},
-	{MATCHCRITERIA_NOT_TEST, "~test"},
-
-	/* match type */
-	{MATCHTYPE_MATCHCASE, "matchcase"},
-	{MATCHTYPE_MATCH, "match"},
-	{MATCHTYPE_REGEXPCASE, "regexpcase"},
-	{MATCHTYPE_REGEXP, "regexp"},
-
-	/* actions */
-	{MATCHACTION_SCORE, "score"},    /* for backward compatibility */
-	{MATCHACTION_MOVE, "move"},
-	{MATCHACTION_COPY, "copy"},
-	{MATCHACTION_DELETE, "delete"},
-	{MATCHACTION_MARK, "mark"},
-	{MATCHACTION_UNMARK, "unmark"},
-	{MATCHACTION_LOCK, "lock"},
-	{MATCHACTION_UNLOCK, "unlock"},
-	{MATCHACTION_MARK_AS_READ, "mark_as_read"},
-	{MATCHACTION_MARK_AS_UNREAD, "mark_as_unread"},
-	{MATCHACTION_FORWARD, "forward"},
-	{MATCHACTION_FORWARD_AS_ATTACHMENT, "forward_as_attachment"},
-	{MATCHACTION_EXECUTE, "execute"},
-	{MATCHACTION_COLOR, "color"},
-	{MATCHACTION_REDIRECT, "redirect"},
-	{MATCHACTION_CHANGE_SCORE, "change_score"},
-	{MATCHACTION_SET_SCORE, "set_score"},
-	{MATCHACTION_STOP, "stop"},
-	{MATCHACTION_HIDE, "hide"},
-	{MATCHACTION_IGNORE, "ignore"},
-	{MATCHACTION_WATCH, "watch"},
-	{MATCHACTION_ADD_TO_ADDRESSBOOK, "add_to_addressbook"},
-	{MATCHACTION_SET_TAG, "set_tag"},
-	{MATCHACTION_UNSET_TAG, "unset_tag"},
-	{MATCHACTION_CLEAR_TAGS, "clear_tags"},
-};
-
-enum {
-	MATCH_ANY = 0,
-	MATCH_ALL = 1,
-	MATCH_ONE = 2
-};
-
-enum {
-	CONTEXT_SUBJECT,
-	CONTEXT_FROM,
-	CONTEXT_TO,
-	CONTEXT_CC,
-	CONTEXT_NEWSGROUPS,
-	CONTEXT_MESSAGEID,
-	CONTEXT_IN_REPLY_TO,
-	CONTEXT_REFERENCES,
-	CONTEXT_HEADER,
-	CONTEXT_HEADER_LINE,
-	CONTEXT_BODY_LINE,
-	CONTEXT_TAG,
-	N_CONTEXT_STRS
-};
-
-static gchar *context_str[N_CONTEXT_STRS];
-
-void matcher_init(void)
-{
-	if (context_str[CONTEXT_SUBJECT] != NULL)
-		return;
-
-	context_str[CONTEXT_SUBJECT] = g_strdup_printf(_("%s header"), "Subject:");
-	context_str[CONTEXT_FROM] = g_strdup_printf(_("%s header"), "From:");
-	context_str[CONTEXT_TO] = g_strdup_printf(_("%s header"), "To:");
-	context_str[CONTEXT_CC] = g_strdup_printf(_("%s header"), "Cc:");
-	context_str[CONTEXT_NEWSGROUPS] = g_strdup_printf(_("%s header"), "Newsgroups:");
-	context_str[CONTEXT_MESSAGEID] = g_strdup_printf(_("%s header"), "Message-ID:");
-	context_str[CONTEXT_IN_REPLY_TO] = g_strdup_printf(_("%s header"), "In-Reply-To:");
-	context_str[CONTEXT_REFERENCES] = g_strdup_printf(_("%s header"), "References:");
-	context_str[CONTEXT_HEADER] = g_strdup(_("header"));
-	context_str[CONTEXT_HEADER_LINE] = g_strdup(_("header line"));
-	context_str[CONTEXT_BODY_LINE] = g_strdup(_("body line"));
-	context_str[CONTEXT_TAG]  = g_strdup(_("tag"));
-}
-
-void matcher_done(void)
-{
-	int i;
-	for (i = 0; i < N_CONTEXT_STRS; i++) {
-		g_free(context_str[i]);
-		context_str[i] = NULL;
-	}
-}
-
-extern gboolean debug_filtering_session;
-
-/*!
- *\brief	Look up table with keywords defined in \sa matchparser_tab
- */
-static GHashTable *matchparser_hashtab;
-
-/*!
- *\brief	Translate keyword id to keyword string
- *
- *\param	id Id of keyword
- *
- *\return	const gchar * Keyword
- */
-const gchar *get_matchparser_tab_str(gint id)
-{
-	gint i;
-
-	for (i = 0; i < sizeof matchparser_tab / sizeof matchparser_tab[0]; i++) {
-		if (matchparser_tab[i].id == id)
-			return matchparser_tab[i].str;
-	}
-	return NULL;
-}
-
-/*!
- *\brief	Create keyword lookup table
- */
-static void create_matchparser_hashtab(void)
-{
-	int i;
-
-	if (matchparser_hashtab) return;
-	matchparser_hashtab = g_hash_table_new(g_str_hash, g_str_equal);
-	for (i = 0; i < sizeof matchparser_tab / sizeof matchparser_tab[0]; i++)
-		g_hash_table_insert(matchparser_hashtab,
-				    matchparser_tab[i].str,
-				    (gpointer) &matchparser_tab[i]);
-}
-
-/*!
- *\brief	Return a keyword id from a keyword string
- *
- *\param	str Keyword string
- *
- *\return	gint Keyword id
- */
-gint get_matchparser_tab_id(const gchar *str)
-{
-	MatchParser *res;
-
-	if (NULL != (res = g_hash_table_lookup(matchparser_hashtab, str))) {
-		return res->id;
-	} else
-		return -1;
-}
-
-/* **************** data structure allocation **************** */
-
-/*!
- *\brief	Allocate a structure for a filtering / scoring
- *		"condition" (a matcher structure)
- *
- *\param	criteria Criteria ID (MATCHCRITERIA_XXXX)
- *\param	header Header string (if criteria is MATCHCRITERIA_HEADER
-			or MATCHCRITERIA_FOUND_IN_ADDRESSBOOK)
- *\param	matchtype Type of action (MATCHTYPE_XXX)
- *\param	expr String value or expression to check
- *\param	value Integer value to check
- *
- *\return	MatcherProp * Pointer to newly allocated structure
- */
-MatcherProp *matcherprop_new(gint criteria, const gchar *header,
-			      gint matchtype, const gchar *expr,
-			      int value)
-{
-	MatcherProp *prop = g_new0(MatcherProp, 1);
-
-	prop->criteria = criteria;
-	prop->matchtype = matchtype;
-	prop->value = value;
-	if (header)
-		prop->header = g_strdup(header);
-	if (expr)
-	    prop->expr = g_strdup(expr);
-	return prop;
-}
-
-/*!
- *\brief	Free a matcher structure
- *
- *\param	prop Pointer to matcher structure allocated with
- *		#matcherprop_new
- */
-void matcherprop_free(MatcherProp *prop)
-{
-	g_free(prop->expr);
-	g_free(prop->header);
-	if (prop->preg != NULL) {
-		regfree(prop->preg);
-		g_free(prop->preg);
-	}
-	g_free(prop->casefold_expr);
-	g_free(prop);
-}
-
-/*!
- *\brief	Copy a matcher structure
- *
- *\param	src Matcher structure to copy
- *
- *\return	MatcherProp * Pointer to newly allocated matcher structure
- */
-MatcherProp *matcherprop_copy(const MatcherProp *src)
-{
-	MatcherProp *prop = g_new0(MatcherProp, 1);
-
-	prop->criteria = src->criteria;
-	prop->matchtype = src->matchtype;
-	prop->value = src->value;
-	prop->error = src->error;
-	if (src->header)
-		prop->header = g_strdup(src->header);
-	if (src->expr)
-		prop->expr = g_strdup(src->expr);
-	if (src->casefold_expr)
-		prop->casefold_expr = g_strdup(src->casefold_expr);
-	return prop;
-}
-
-/* ************** match ******************************/
-
-static gboolean match_with_addresses_in_addressbook
-	(MatcherProp *prop, GSList *address_list, gint type,
-	 gchar* folderpath, gint match)
-{
-	GSList *walk = NULL;
-	gboolean found = FALSE;
-	gchar *path = NULL;
-
-	cm_return_val_if_fail(address_list != NULL, FALSE);
-
-	debug_print("match_with_addresses_in_addressbook(%d, %s)\n",
-				g_slist_length(address_list), folderpath?folderpath:"(null)");
-
-	if (folderpath == NULL ||
-		strcasecmp(folderpath, "Any") == 0 ||
-		*folderpath == '\0')
-		path = NULL;
-	else
-		path = folderpath;
-
-	start_address_completion(path);
-
-	for (walk = address_list; walk != NULL; walk = walk->next) {
-		/* exact matching of email address */
-		guint num_addr = complete_address(walk->data);
-		found = FALSE;
-		if (num_addr > 1) {
-			/* skip first item (this is the search string itself) */
-			int i = 1;
-			for (; i < num_addr && !found; i++) {
-				gchar *addr = get_complete_address(i);
-				extract_address(addr);
-				if (strcasecmp(addr, walk->data) == 0) {
-					found = TRUE;
-				}
-				g_free(addr);
-			}
-		}
-		g_free(walk->data);
-
-		if (match == MATCH_ALL) {
-			/* if matching all addresses, stop if one doesn't match */
-			if (!found) {
-				break;
-			}
-		} else if (match == MATCH_ANY) {
-			/* if matching any address, stop if one does match */
-			if (found) {
-				break;
-			}
-		}
-		/* MATCH_ONE: there should be only one loop iteration */
-	}
-
-	end_address_completion();
-
-	return found;
-}
-
-/*!
- *\brief	Find out if a string matches a condition
- *
- *\param	prop Matcher structure
- *\param	str String to check
- *
- *\return	gboolean TRUE if str matches the condition in the
- *		matcher structure
- */
-static gboolean matcherprop_string_match(MatcherProp *prop, const gchar *str,
-					 const gchar *debug_context)
-{
-	gchar *str1;
-	const gchar *down_expr;
-	gboolean ret = FALSE;
-	gboolean should_free = FALSE;
-	if (str == NULL)
-		return FALSE;
-
-	if (prop->matchtype == MATCHTYPE_REGEXPCASE ||
-	    prop->matchtype == MATCHTYPE_MATCHCASE) {
-		str1 = g_utf8_casefold(str, -1);
-		if (!prop->casefold_expr) {
-			prop->casefold_expr = g_utf8_casefold(prop->expr, -1);
-		}
-		down_expr = prop->casefold_expr;
-
-		should_free = TRUE;
-	} else {
-		str1 = (gchar *)str;
-		down_expr = (gchar *)prop->expr;
-		should_free = FALSE;
-	}
-
-	switch (prop->matchtype) {
-	case MATCHTYPE_REGEXPCASE:
-	case MATCHTYPE_REGEXP:
-		if (!prop->preg && (prop->error == 0)) {
-			prop->preg = g_new0(regex_t, 1);
-			/* if regexp then don't use the escaped string */
-			if (regcomp(prop->preg, down_expr,
-				    REG_NOSUB | REG_EXTENDED
-				    | ((prop->matchtype == MATCHTYPE_REGEXPCASE)
-				    ? REG_ICASE : 0)) != 0) {
-				prop->error = 1;
-                regfree(prop->preg);
-				g_free(prop->preg);
-				prop->preg = NULL;
-			}
-		}
-		if (prop->preg == NULL) {
-			ret = FALSE;
-			goto free_strs;
-		}
-
-		if (regexec(prop->preg, str1, 0, NULL, 0) == 0)
-			ret = TRUE;
-		else
-			ret = FALSE;
-		break;
-	case MATCHTYPE_MATCHCASE:
-	case MATCHTYPE_MATCH:
-		ret = (strstr(str1, down_expr) != NULL);
-		break;
-	default:
-		break;
-	}
-
-free_strs:
-	if (should_free) {
-		g_free(str1);
-	}
-	return ret;
-}
-
-/*!
- *\brief	Find out if the string-ed list matches a condition
- *
- *\param	prop Matcher structure
- *\param	list GSList of strings to check
- *
- *\return	gboolean TRUE if str matches the condition in the
- *		matcher structure
- */
-static gboolean matcherprop_list_match(MatcherProp *prop, const GSList *list,
-const gchar *debug_context)
-{
-	const GSList *cur;
-
-	for(cur = list; cur != NULL; cur = cur->next) {
-		if (matcherprop_string_match(prop, (gchar *)cur->data, debug_context))
-			return TRUE;
-	}
-	return FALSE;
-}
-
-static gboolean matcherprop_header_line_match(MatcherProp *prop, const gchar *hdr,
-					 const gchar *str, const gboolean both,
-					 const gchar *debug_context)
-{
-	gboolean res = FALSE;
-
-	if (hdr == NULL || str == NULL)
-		return FALSE;
-
-	if (both) {
-		/* Search in all header names and content.
-		 */
-		gchar *line = g_strdup_printf("%s %s", hdr, str);
-		res = matcherprop_string_match(prop, line, debug_context);
-		g_free(line);
-	} else {
-		/* Search only in content and exclude private headers.
-		 * E.g.: searching for "H foo" in folder x/foo would return
-		 * *all* mail as SCF and RMID will match.
-		 * Searching for "H sent" would return all resent messages
-		 * as "Resent-From: whatever" will match.
-		 */
-		if (procheader_header_is_internal(hdr))
-			return FALSE;
-		res = matcherprop_string_match(prop, str, debug_context);
-	}
-
-	return res;
-}
-
-typedef struct _thread_data {
-	const gchar *cmd;
-	gboolean done;
-} thread_data;
-
-static void *matcher_test_thread(void *data)
-{
-	thread_data *td = (thread_data *)data;
-	int result = -1;
-
-	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
-	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-
-	result = system(td->cmd);
-	td->done = TRUE; /* let the caller thread join() */
-	return GINT_TO_POINTER(result);
-}
-
-/*!
- *\brief	Execute a command defined in the matcher structure
- *
- *\param	prop Pointer to matcher structure
- *\param	info Pointer to message info structure
- *
- *\return	gboolean TRUE if command was executed successfully
- */
-static gboolean matcherprop_match_test(const MatcherProp *prop,
-					  MsgInfo *info)
-{
-	gchar *file;
-	gchar *cmd;
-	gint retval;
-	pthread_t pt;
-	thread_data *td = g_new0(thread_data, 1);
-	void *res = NULL;
-	time_t start_time = time(NULL);
-
-	file = procmsg_get_message_file(info);
-	if (file == NULL) {
-		g_free(td);
-		return FALSE;
-	}
-	g_free(file);
-
-	cmd = matching_build_command(prop->expr, info);
-	if (cmd == NULL) {
-		g_free(td);
-		return FALSE;
-	}
-
-	td->cmd = cmd;
-	td->done = FALSE;
-	if (pthread_create(&pt, NULL, matcher_test_thread, td) != 0)
-		retval = system(cmd);
-	else {
-		debug_print("waiting for test thread\n");
-		while(!td->done) {
-			/* don't let the interface freeze while waiting */
-			if (time(NULL) - start_time > 0) {
-				claws_do_idle();
-			}
-			if (time(NULL) - start_time > 30) {
-				pthread_cancel(pt);
-				td->done = TRUE;
-				retval = -1;
-			}
-		}
-		pthread_join(pt, &res);
-		retval = GPOINTER_TO_INT(res);
-		debug_print(" test thread returned %d\n", retval);
-	}
-	g_free(td);
-	debug_print("Command exit code: %d\n", retval);
-
-	g_free(cmd);
-	return (retval == 0);
-}
-
-/*!
- *\brief	Check if a message matches the condition in a matcher
- *		structure.
- *
- *\param	prop Pointer to matcher structure
- *\param	info Pointer to message info
- *
- *\return	gboolean TRUE if a match
- */
-static gboolean matcherprop_match(MatcherProp *prop,
-				  MsgInfo *info)
-{
-	time_t t;
-	gint age;
-	gint age_mult_hours = 1;
-
-	switch(prop->criteria) {
-	case MATCHCRITERIA_ALL:
-		return TRUE;
-	case MATCHCRITERIA_UNREAD:
-		return MSG_IS_UNREAD(info->flags);
-	case MATCHCRITERIA_NOT_UNREAD:
-		return !MSG_IS_UNREAD(info->flags);
-	case MATCHCRITERIA_NEW:
-		return MSG_IS_NEW(info->flags);
-	case MATCHCRITERIA_NOT_NEW:
-		return !MSG_IS_NEW(info->flags);
-	case MATCHCRITERIA_MARKED:
-		return MSG_IS_MARKED(info->flags);
-	case MATCHCRITERIA_NOT_MARKED:
-		return !MSG_IS_MARKED(info->flags);
-	case MATCHCRITERIA_DELETED:
-		return MSG_IS_DELETED(info->flags);
-	case MATCHCRITERIA_NOT_DELETED:
-		return !MSG_IS_DELETED(info->flags);
-	case MATCHCRITERIA_REPLIED:
-		return MSG_IS_REPLIED(info->flags);
-	case MATCHCRITERIA_NOT_REPLIED:
-		return !MSG_IS_REPLIED(info->flags);
-	case MATCHCRITERIA_FORWARDED:
-		return MSG_IS_FORWARDED(info->flags);
-	case MATCHCRITERIA_NOT_FORWARDED:
-		return !MSG_IS_FORWARDED(info->flags);
-	case MATCHCRITERIA_LOCKED:
-		return MSG_IS_LOCKED(info->flags);
-	case MATCHCRITERIA_NOT_LOCKED:
-		return !MSG_IS_LOCKED(info->flags);
-	case MATCHCRITERIA_SPAM:
-		return MSG_IS_SPAM(info->flags);
-	case MATCHCRITERIA_NOT_SPAM:
-		return !MSG_IS_SPAM(info->flags);
-	case MATCHCRITERIA_HAS_ATTACHMENT:
-		return MSG_IS_WITH_ATTACHMENT(info->flags);
-	case MATCHCRITERIA_HAS_NO_ATTACHMENT:
-		return !MSG_IS_WITH_ATTACHMENT(info->flags);
-	case MATCHCRITERIA_SIGNED:
-		return MSG_IS_SIGNED(info->flags);
-	case MATCHCRITERIA_NOT_SIGNED:
-		return !MSG_IS_SIGNED(info->flags);
-	case MATCHCRITERIA_IGNORE_THREAD:
-		return MSG_IS_IGNORE_THREAD(info->flags);
-	case MATCHCRITERIA_NOT_IGNORE_THREAD:
-		return !MSG_IS_IGNORE_THREAD(info->flags);
-	case MATCHCRITERIA_WATCH_THREAD:
-		return MSG_IS_WATCH_THREAD(info->flags);
-	case MATCHCRITERIA_NOT_WATCH_THREAD:
-		return !MSG_IS_WATCH_THREAD(info->flags);
-	case MATCHCRITERIA_SUBJECT:
-		return matcherprop_string_match(prop, info->subject, context_str[CONTEXT_SUBJECT]);
-	case MATCHCRITERIA_NOT_SUBJECT:
-		return !matcherprop_string_match(prop, info->subject, context_str[CONTEXT_SUBJECT]);
-	case MATCHCRITERIA_FROM:
-		return matcherprop_string_match(prop, info->from, context_str[CONTEXT_FROM]);
-	case MATCHCRITERIA_NOT_FROM:
-		return !matcherprop_string_match(prop, info->from, context_str[CONTEXT_FROM]);
-	case MATCHCRITERIA_TO:
-		return matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO]);
-	case MATCHCRITERIA_NOT_TO:
-		return !matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO]);
-	case MATCHCRITERIA_CC:
-		return matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
-	case MATCHCRITERIA_NOT_CC:
-		return !matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
-	case MATCHCRITERIA_TO_OR_CC:
-		return matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO])
-		     || matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
-	case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
-		return !matcherprop_string_match(prop, info->to, context_str[CONTEXT_TO])
-		     && !matcherprop_string_match(prop, info->cc, context_str[CONTEXT_CC]);
-	case MATCHCRITERIA_AGE_GREATER:
-		age_mult_hours = 24;
-		/* Fallthrough intended */
-	case MATCHCRITERIA_AGE_GREATER_HOURS:
-		t = time(NULL);
-		age = ((t - info->date_t) / (60 * 60 * age_mult_hours));
-		return (age >= prop->value);
-	case MATCHCRITERIA_DATE_AFTER:
-		return prop->value < info->date_t;
-	case MATCHCRITERIA_AGE_LOWER:
-		age_mult_hours = 24;
-		/* Fallthrough intended */
-	case MATCHCRITERIA_AGE_LOWER_HOURS:
-		t = time(NULL);
-		age = ((t - info->date_t) / (60 * 60 * age_mult_hours));
-		return (age < prop->value);
-	case MATCHCRITERIA_DATE_BEFORE:
-		return prop->value > info->date_t;
-	case MATCHCRITERIA_SCORE_GREATER:
-		return (info->score > prop->value);
-	case MATCHCRITERIA_SCORE_LOWER:
-		return (info->score < prop->value);
-	case MATCHCRITERIA_SCORE_EQUAL:
-		return (info->score == prop->value);
-	case MATCHCRITERIA_SIZE_GREATER:
-		/* FIXME: info->size is a goffset */
-		return (info->size > (goffset) prop->value);
-	case MATCHCRITERIA_SIZE_SMALLER:
-		/* FIXME: info->size is a goffset */
-		return  (info->size < (goffset) prop->value);
-	case MATCHCRITERIA_SIZE_EQUAL:
-		/* FIXME: info->size is a goffset */
-		return (info->size == (goffset) prop->value);
-	case MATCHCRITERIA_PARTIAL:
-		/* FIXME: info->size is a goffset */
-		return (info->total_size != 0 && info->size != (goffset)info->total_size);
-	case MATCHCRITERIA_NOT_PARTIAL:
-		/* FIXME: info->size is a goffset */
-		return (info->total_size == 0 || info->size == (goffset)info->total_size);
-	case MATCHCRITERIA_MESSAGEID:
-		return matcherprop_string_match(prop, info->msgid, context_str[CONTEXT_MESSAGEID]);
-	case MATCHCRITERIA_NOT_MESSAGEID:
-		return !matcherprop_string_match(prop, info->msgid, context_str[CONTEXT_MESSAGEID]);
-	case MATCHCRITERIA_INREPLYTO:
-		return matcherprop_string_match(prop, info->inreplyto, context_str[CONTEXT_IN_REPLY_TO]);
-	case MATCHCRITERIA_NOT_INREPLYTO:
-		return !matcherprop_string_match(prop, info->inreplyto, context_str[CONTEXT_IN_REPLY_TO]);
-	case MATCHCRITERIA_REFERENCES:
-		return matcherprop_list_match(prop, info->references, context_str[CONTEXT_REFERENCES]);
-	case MATCHCRITERIA_NOT_REFERENCES:
-		return !matcherprop_list_match(prop, info->references, context_str[CONTEXT_REFERENCES]);
-	case MATCHCRITERIA_TEST:
-		return matcherprop_match_test(prop, info);
-	case MATCHCRITERIA_NOT_TEST:
-		return !matcherprop_match_test(prop, info);
-	default:
-		return FALSE;
-	}
-}
-
-/* ********************* MatcherList *************************** */
-
-/*!
- *\brief	Create a new list of matchers
- *
- *\param	matchers List of matcher structures
- *\param	bool_and Operator
- *
- *\return	MatcherList * New list
- */
-MatcherList *matcherlist_new(GSList *matchers, gboolean bool_and)
-{
-	MatcherList *cond;
-
-	cond = g_new0(MatcherList, 1);
-
-	cond->matchers = matchers;
-	cond->bool_and = bool_and;
-
-	return cond;
-}
-
-#ifdef G_OS_UNIX
-/*!
- *\brief	Builds a single regular expresion from an array of srings.
- *
- *\param	strings The lines containing the different sub-regexp.
- *
- *\return	The newly allocated regexp string.
- */
-static gchar *build_complete_regexp(gchar **strings)
-{
-	int i = 0;
-	gchar *expr = NULL;
-	while (strings && strings[i] && *strings[i]) {
-		int old_len = expr ? strlen(expr):0;
-		int new_len = 0;
-		gchar *tmpstr = NULL;
-
-		if (g_utf8_validate(strings[i], -1, NULL))
-			tmpstr = g_strdup(strings[i]);
-		else
-			tmpstr = conv_codeset_strdup(strings[i],
-					conv_get_locale_charset_str_no_utf8(),
-				 	CS_INTERNAL);
-
-		if (strstr(tmpstr, "\n"))
-			*(strstr(tmpstr, "\n")) = '\0';
-
-		new_len = strlen(tmpstr);
-
-		expr = g_realloc(expr,
-			expr ? (old_len + strlen("|()") + new_len + 1)
-			     : (strlen("()") + new_len + 1));
-
-		if (old_len) {
-			strcpy(expr + old_len, "|(");
-			strcpy(expr + old_len + 2, tmpstr);
-			strcpy(expr + old_len + 2 + new_len, ")");
-		} else {
-			strcpy(expr+old_len, "(");
-			strcpy(expr+old_len + 1, tmpstr);
-			strcpy(expr+old_len + 1 + new_len, ")");
-		}
-		g_free(tmpstr);
-		i++;
-	}
-	return expr;
-}
-#endif
-
-/*!
- *\brief	Create a new list of matchers from a multi-line string
- *
- *\param	lines String with "\n"-separated expressions
- *\param	bool_and Operator
- *\param	case_sensitive If the matching is case sensitive or not
- *
- *\return	MatcherList * New matcher list
- */
-MatcherList *matcherlist_new_from_lines(gchar *lines, gboolean bool_and,
-					gboolean case_sensitive)
-{
-	MatcherProp *m = NULL;
-	GSList *matchers = NULL;
-	gchar **strings = g_strsplit(lines, "\n", -1);
-
-#ifdef G_OS_UNIX
-	gchar *expr = NULL;
-	expr = build_complete_regexp(strings);
-	debug_print("building matcherprop for expr '%s'\n", expr?expr:"NULL");
-
-	m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL,
-			case_sensitive? MATCHTYPE_REGEXP: MATCHTYPE_REGEXPCASE,
-			expr, 0);
-	if (m == NULL) {
-		/* print error message */
-		debug_print("failed to allocate memory for matcherprop\n");
-	} else {
-		matchers = g_slist_append(matchers, m);
-	}
-
-	g_free(expr);
-#else
-	int i = 0;
-	while (strings && strings[i] && *strings[i]) {
-		m = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL,
-			case_sensitive? MATCHTYPE_MATCH: MATCHTYPE_MATCHCASE,
-			strings[i], 0);
-		if (m == NULL) {
-			/* print error message */
-			debug_print("failed to allocate memory for matcherprop\n");
-		} else {
-			matchers = g_slist_append(matchers, m);
-		}
-		i++;
-	}
-#endif
-	g_strfreev(strings);
-
-	return matcherlist_new(matchers, bool_and);
-}
-
-/*!
- *\brief	Frees a list of matchers
- *
- *\param	cond List of matchers
- */
-void matcherlist_free(MatcherList *cond)
-{
-	GSList *l;
-
-	cm_return_if_fail(cond);
-	for (l = cond->matchers ; l != NULL ; l = g_slist_next(l)) {
-		matcherprop_free((MatcherProp *) l->data);
-	}
-	g_slist_free(cond->matchers);
-	g_free(cond);
-}
-
-/*!
- *\brief	Check if a header matches a matcher condition
- *
- *\param	matcher Matcher structure to check header for
- *\param	buf Header name
- *
- *\return	boolean TRUE if matching header
- */
-static gboolean matcherprop_match_one_header(MatcherProp *matcher,
-					     gchar *buf)
-{
-	gboolean result = FALSE;
-	Header *header = NULL;
-
-	switch (matcher->criteria) {
-	case MATCHCRITERIA_HEADER:
-	case MATCHCRITERIA_NOT_HEADER:
-		header = procheader_parse_header(buf);
-		if (!header)
-			return FALSE;
-		if (procheader_headername_equal(header->name,
-						matcher->header)) {
-			if (matcher->criteria == MATCHCRITERIA_HEADER)
-				result = matcherprop_string_match(matcher, header->body, context_str[CONTEXT_HEADER]);
-			else
-				result = !matcherprop_string_match(matcher, header->body, context_str[CONTEXT_HEADER]);
-			procheader_header_free(header);
-			return result;
-		}
-		else {
-			procheader_header_free(header);
-		}
-		break;
-	case MATCHCRITERIA_HEADERS_PART:
-	case MATCHCRITERIA_HEADERS_CONT:
-	case MATCHCRITERIA_MESSAGE:
-		header = procheader_parse_header(buf);
-		if (!header)
-			return FALSE;
-		result = matcherprop_header_line_match(matcher,
-			       header->name, header->body,
-			       (matcher->criteria == MATCHCRITERIA_HEADERS_PART),
-			       context_str[CONTEXT_HEADER_LINE]);
-		procheader_header_free(header);
-		return result;
-	case MATCHCRITERIA_NOT_HEADERS_CONT:
-	case MATCHCRITERIA_NOT_HEADERS_PART:
-	case MATCHCRITERIA_NOT_MESSAGE:
-		header = procheader_parse_header(buf);
-		if (!header)
-			return FALSE;
-		result = !matcherprop_header_line_match(matcher,
-			       header->name, header->body,
-			       (matcher->criteria == MATCHCRITERIA_NOT_HEADERS_PART),
-			       context_str[CONTEXT_HEADER_LINE]);
-		procheader_header_free(header);
-		return result;
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-		{
-			GSList *address_list = NULL;
-			gint match = MATCH_ONE;
-			gboolean found = FALSE;
-
-			/* how many address headers are we trying to match? */
-			if (strcasecmp(matcher->header, "Any") == 0)
-				match = MATCH_ANY;
-			else if (strcasecmp(matcher->header, "All") == 0)
-					match = MATCH_ALL;
-
-			if (match == MATCH_ONE) {
-				/* matching one address header exactly, is that the right one? */
-				header = procheader_parse_header(buf);
-				if (!header ||
-						!procheader_headername_equal(header->name, matcher->header)) {
-					procheader_header_free(header);
-					return FALSE;
-				}
-				address_list = address_list_append(address_list, header->body);
-				if (address_list == NULL) {
-					procheader_header_free(header);
-					return FALSE;
-				}
-				procheader_header_free(header);
-
-			} else {
-				header = procheader_parse_header(buf);
-				if (!header)
-					return FALSE;
-				/* address header is one of the headers we have to match when checking
-				   for any address header or all address headers? */
-				if (procheader_headername_equal(header->name, "From") ||
-					 procheader_headername_equal(header->name, "To") ||
-					 procheader_headername_equal(header->name, "Cc") ||
-					 procheader_headername_equal(header->name, "Reply-To") ||
-					 procheader_headername_equal(header->name, "Sender") ||
-					 procheader_headername_equal(header->name, "Resent-From") ||
-					 procheader_headername_equal(header->name, "Resent-To"))
-					address_list = address_list_append(address_list, header->body);
-				procheader_header_free(header);
-				if (address_list == NULL)
-					return FALSE;
-			}
-
-			found = match_with_addresses_in_addressbook
-							(matcher, address_list, matcher->criteria,
-							 matcher->expr, match);
-			g_slist_free(address_list);
-
-			if (matcher->criteria == MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK)
-				return !found;
-			else
-				return found;
-	}
-	}
-
-	return FALSE;
-}
-
-/*!
- *\brief	Check if the matcher structure wants headers to
- *		be matched
- *
- *\param	matcher Matcher structure
- *
- *\return	gboolean TRUE if the matcher structure describes
- *		a header match condition
- */
-static gboolean matcherprop_criteria_headers(const MatcherProp *matcher)
-{
-	switch (matcher->criteria) {
-	case MATCHCRITERIA_HEADER:
-	case MATCHCRITERIA_NOT_HEADER:
-	case MATCHCRITERIA_HEADERS_PART:
-	case MATCHCRITERIA_HEADERS_CONT:
-	case MATCHCRITERIA_NOT_HEADERS_PART:
-	case MATCHCRITERIA_NOT_HEADERS_CONT:
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-		return TRUE;
-	default:
-		return FALSE;
-	}
-}
-
-/*!
- *\brief	Check if the matcher structure wants the message
- *		to be matched (just perform an action on any
- *		message)
- *
- *\param	matcher Matcher structure
- *
- *\return	gboolean TRUE if matcher condition should match
- *		a message
- */
-static gboolean matcherprop_criteria_message(MatcherProp *matcher)
-{
-	switch (matcher->criteria) {
-	case MATCHCRITERIA_MESSAGE:
-	case MATCHCRITERIA_NOT_MESSAGE:
-		return TRUE;
-	default:
-		return FALSE;
-	}
-}
-
-/*!
- *\brief	Check if a list of conditions matches one header in
- *		a message file.
- *
- *\param	matchers List of conditions
- *\param	fp Message file
- *
- *\return	gboolean TRUE if one of the headers is matched by
- *		the list of conditions.
- */
-static gboolean matcherlist_match_headers(MatcherList *matchers, FILE *fp)
-{
-	GSList *l;
-	gchar *buf = NULL;
-	gint ret;
-
-	while ((ret = procheader_get_one_field(&buf, fp, NULL)) != -1) {
-		for (l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) {
-			MatcherProp *matcher = (MatcherProp *) l->data;
-			gint match = MATCH_ANY;
-
-			if (matcher->done)
-				continue;
-
-			/* determine the match range (all, any are our concern here) */
-			if (matcher->criteria == MATCHCRITERIA_NOT_HEADERS_PART ||
-			    matcher->criteria == MATCHCRITERIA_NOT_HEADERS_CONT ||
-			    matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
-				match = MATCH_ALL;
-
-			} else if (matcher->criteria == MATCHCRITERIA_FOUND_IN_ADDRESSBOOK ||
-			 		   matcher->criteria == MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK) {
-				Header *header = NULL;
-
-				/* address header is one of the headers we have to match when checking
-				   for any address header or all address headers? */
-				header = procheader_parse_header(buf);
-				if (header &&
-					(procheader_headername_equal(header->name, "From") ||
-					 procheader_headername_equal(header->name, "To") ||
-					 procheader_headername_equal(header->name, "Cc") ||
-					 procheader_headername_equal(header->name, "Reply-To") ||
-					 procheader_headername_equal(header->name, "Sender") ||
-					 procheader_headername_equal(header->name, "Resent-From") ||
-					 procheader_headername_equal(header->name, "Resent-To"))) {
-
-					if (strcasecmp(matcher->header, "Any") == 0)
-						match = MATCH_ANY;
-					else if (strcasecmp(matcher->header, "All") == 0)
-						match = MATCH_ALL;
-					else
-						match = MATCH_ONE;
-				} else {
-					if (!header)
-						continue;
-					/* matching one address header exactly, is that the right one?
-					   further call to matcherprop_match_one_header() will tell us */
-				}
-				procheader_header_free(header);
-			}
-
-			/* ZERO line must NOT match for the rule to match.
-			 */
-			if (match == MATCH_ALL) {
-				if (matcherprop_match_one_header(matcher, buf)) {
-					matcher->result = TRUE;
-				} else {
-					matcher->result = FALSE;
-					matcher->done = TRUE;
-				}
-			/* else, just one line matching is enough for the rule to match
-			 */
-			} else if (matcherprop_criteria_headers(matcher) ||
-			           matcherprop_criteria_message(matcher)) {
-				if (matcherprop_match_one_header(matcher, buf)) {
-					matcher->result = TRUE;
-					matcher->done = TRUE;
-				}
-			}
-
-			/* if the rule matched and the matchers are OR, no need to
-			 * check the others */
-			if (matcher->result && matcher->done) {
-				if (!matchers->bool_and) {
-					g_free(buf);
-					return TRUE;
-				}
-			}
-		}
-		g_free(buf);
-		buf = NULL;
-	}
-
-	return FALSE;
-}
-
-/*!
- *\brief	Check if a matcher wants to check the message body
- *
- *\param	matcher Matcher structure
- *
- *\return	gboolean TRUE if body must be matched.
- */
-static gboolean matcherprop_criteria_body(const MatcherProp *matcher)
-{
-	switch (matcher->criteria) {
-	case MATCHCRITERIA_BODY_PART:
-	case MATCHCRITERIA_NOT_BODY_PART:
-		return TRUE;
-	default:
-		return FALSE;
-	}
-}
-
-static gboolean matcherlist_match_binary_content(MatcherList *matchers, MimeInfo *partinfo)
-{
-	FILE *outfp;
-	gchar buf[BUFFSIZE];
-	GSList *l;
-
-	if (!partinfo || partinfo->type == MIMETYPE_TEXT)
-		return FALSE;
-	else
-		outfp = procmime_get_binary_content(partinfo);
-
-	if (!outfp)
-		return FALSE;
-
-	while (fgets(buf, sizeof(buf), outfp) != NULL) {
-		strretchomp(buf);
-
-		for (l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) {
-			MatcherProp *matcher = (MatcherProp *) l->data;
-
-			if (matcher->done)
-				continue;
-
-			/* Don't scan non-text parts when looking in body, only
-			 * when looking in whole message
-			 */
-			if (matcher->criteria == MATCHCRITERIA_NOT_BODY_PART ||
-			    matcher->criteria == MATCHCRITERIA_BODY_PART)
-				continue;
-
-			/* if the criteria is ~body_part or ~message, ZERO lines
-			 * must match for the rule to match.
-			 */
-			if (matcher->criteria == MATCHCRITERIA_NOT_BODY_PART ||
-			    matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
-				if (matcherprop_string_match(matcher, buf,
-							context_str[CONTEXT_BODY_LINE])) {
-					matcher->result = FALSE;
-					matcher->done = TRUE;
-				} else
-					matcher->result = TRUE;
-			/* else, just one line has to match */
-			} else if (matcherprop_criteria_body(matcher) ||
-				   matcherprop_criteria_message(matcher)) {
-				if (matcherprop_string_match(matcher, buf,
-							context_str[CONTEXT_BODY_LINE])) {
-					matcher->result = TRUE;
-					matcher->done = TRUE;
-				}
-			}
-
-			/* if the matchers are OR'ed and the rule matched,
-			 * no need to check the others. */
-			if (matcher->result && matcher->done) {
-				if (!matchers->bool_and) {
-					fclose(outfp);
-					return TRUE;
-				}
-			}
-		}
-	}
-
-	fclose(outfp);
-	return FALSE;
-}
-
-static gboolean match_content_cb(const gchar *buf, gpointer data)
-{
-	MatcherList *matchers = (MatcherList *)data;
-	gboolean all_done = TRUE;
-	GSList *l;
-
-	for (l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) {
-		MatcherProp *matcher = (MatcherProp *) l->data;
-
-		if (matcher->done)
-			continue;
-
-		/* if the criteria is ~body_part or ~message, ZERO lines
-		 * must match for the rule to match.
-		 */
-		if (matcher->criteria == MATCHCRITERIA_NOT_BODY_PART ||
-		    matcher->criteria == MATCHCRITERIA_NOT_MESSAGE) {
-			if (matcherprop_string_match(matcher, buf,
-						context_str[CONTEXT_BODY_LINE])) {
-				matcher->result = FALSE;
-				matcher->done = TRUE;
-			} else
-				matcher->result = TRUE;
-		/* else, just one line has to match */
-		} else if (matcherprop_criteria_body(matcher) ||
-			   matcherprop_criteria_message(matcher)) {
-			if (matcherprop_string_match(matcher, buf,
-						context_str[CONTEXT_BODY_LINE])) {
-				matcher->result = TRUE;
-				matcher->done = TRUE;
-			}
-		}
-
-		/* if the matchers are OR'ed and the rule matched,
-		 * no need to check the others. */
-		if (matcher->result && matcher->done) {
-			if (!matchers->bool_and) {
-				return TRUE;
-			}
-		}
-
-		if (!matcher->done)
-			all_done = FALSE;
-	}
-	return all_done;
-}
-
-static gboolean matcherlist_match_text_content(MatcherList *matchers, MimeInfo *partinfo)
-{
-	if (partinfo->type != MIMETYPE_TEXT)
-		return FALSE;
-
-	return procmime_scan_text_content(partinfo, match_content_cb, matchers);
-}
-
-/*!
- *\brief	Check if a line in a message file's body matches
- *		the criteria
- *
- *\param	matchers List of conditions
- *\param	fp Message file
- *
- *\return	gboolean TRUE if successful match
- */
-static gboolean matcherlist_match_body(MatcherList *matchers, gboolean body_only, MsgInfo *info)
-{
-	MimeInfo *mimeinfo = NULL;
-	MimeInfo *partinfo = NULL;
-	gboolean first_text_found = FALSE;
-
-	cm_return_val_if_fail(info != NULL, FALSE);
-
-	mimeinfo = procmime_scan_message(info);
-
-	/* Skip headers */
-	partinfo = procmime_mimeinfo_next(mimeinfo);
-
-	for (; partinfo != NULL; partinfo = procmime_mimeinfo_next(partinfo)) {
-
-		if (partinfo->type != MIMETYPE_TEXT && body_only)
-			continue;
-
-		if (partinfo->type == MIMETYPE_TEXT) {
-			first_text_found = TRUE;
-			if (matcherlist_match_text_content(matchers, partinfo)) {
-				procmime_mimeinfo_free_all(&mimeinfo);
-				return TRUE;
-			}
-		} else if (matcherlist_match_binary_content(matchers, partinfo)) {
-			procmime_mimeinfo_free_all(&mimeinfo);
-			return TRUE;
-		}
-
-		if (body_only && first_text_found)
-			break;
-	}
-	procmime_mimeinfo_free_all(&mimeinfo);
-
-	return FALSE;
-}
-
-/*!
- *\brief	Check if a message file matches criteria
- *
- *\param	matchers Criteria
- *\param	info Message info
- *\param	result Default result
- *
- *\return	gboolean TRUE if matched
- */
-static gboolean matcherlist_match_file(MatcherList *matchers, MsgInfo *info,
-				gboolean result)
-{
-	gboolean read_headers;
-	gboolean read_body;
-	gboolean body_only;
-	GSList *l;
-	FILE *fp;
-	gchar *file;
-
-	/* file need to be read ? */
-
-	read_headers = FALSE;
-	read_body = FALSE;
-	body_only = TRUE;
-	for (l = matchers->matchers ; l != NULL ; l = g_slist_next(l)) {
-		MatcherProp *matcher = (MatcherProp *) l->data;
-
-		if (matcherprop_criteria_headers(matcher))
-			read_headers = TRUE;
-		if (matcherprop_criteria_body(matcher))
-			read_body = TRUE;
-		if (matcherprop_criteria_message(matcher)) {
-			read_headers = TRUE;
-			read_body = TRUE;
-			body_only = FALSE;
-		}
-		matcher->result = FALSE;
-		matcher->done = FALSE;
-	}
-
-	if (!read_headers && !read_body)
-		return result;
-
-	file = procmsg_get_message_file_full(info, read_headers, read_body);
-	if (file == NULL)
-		return FALSE;
-
-	if ((fp = g_fopen(file, "rb")) == NULL) {
-		FILE_OP_ERROR(file, "g_fopen");
-		g_free(file);
-		return result;
-	}
-
-	/* read the headers */
-
-	if (read_headers) {
-		if (matcherlist_match_headers(matchers, fp))
-			read_body = FALSE;
-	} else {
-		procheader_skip_headers(fp);
-	}
-
-	/* read the body */
-	if (read_body) {
-		matcherlist_match_body(matchers, body_only, info);
-	}
-
-	for (l = matchers->matchers; l != NULL; l = g_slist_next(l)) {
-		MatcherProp *matcher = (MatcherProp *) l->data;
-
-		if (matcherprop_criteria_headers(matcher) ||
-		    matcherprop_criteria_body(matcher)	  ||
-		    matcherprop_criteria_message(matcher)) {
-			if (matcher->result) {
-				if (!matchers->bool_and) {
-					result = TRUE;
-					break;
-				}
-			}
-			else {
-				if (matchers->bool_and) {
-					result = FALSE;
-					break;
-				}
-			}
-		}
-	}
-
-	g_free(file);
-
-	fclose(fp);
-
-	return result;
-}
-
-/*!
- *\brief	Test list of conditions on a message.
- *
- *\param	matchers List of conditions
- *\param	info Message info
- *
- *\return	gboolean TRUE if matched
- */
-gboolean matcherlist_match(MatcherList *matchers, MsgInfo *info)
-{
-	GSList *l;
-	gboolean result;
-
-	if (!matchers)
-		return FALSE;
-
-	if (matchers->bool_and)
-		result = TRUE;
-	else
-		result = FALSE;
-
-	/* test the cached elements */
-
-	for (l = matchers->matchers; l != NULL ;l = g_slist_next(l)) {
-		MatcherProp *matcher = (MatcherProp *) l->data;
-
-		switch(matcher->criteria) {
-		case MATCHCRITERIA_ALL:
-		case MATCHCRITERIA_UNREAD:
-		case MATCHCRITERIA_NOT_UNREAD:
-		case MATCHCRITERIA_NEW:
-		case MATCHCRITERIA_NOT_NEW:
-		case MATCHCRITERIA_MARKED:
-		case MATCHCRITERIA_NOT_MARKED:
-		case MATCHCRITERIA_DELETED:
-		case MATCHCRITERIA_NOT_DELETED:
-		case MATCHCRITERIA_REPLIED:
-		case MATCHCRITERIA_NOT_REPLIED:
-		case MATCHCRITERIA_FORWARDED:
-		case MATCHCRITERIA_NOT_FORWARDED:
-		case MATCHCRITERIA_LOCKED:
-		case MATCHCRITERIA_NOT_LOCKED:
-		case MATCHCRITERIA_SPAM:
-		case MATCHCRITERIA_NOT_SPAM:
-		case MATCHCRITERIA_HAS_ATTACHMENT:
-		case MATCHCRITERIA_HAS_NO_ATTACHMENT:
-		case MATCHCRITERIA_SIGNED:
-		case MATCHCRITERIA_NOT_SIGNED:
-		case MATCHCRITERIA_IGNORE_THREAD:
-		case MATCHCRITERIA_NOT_IGNORE_THREAD:
-		case MATCHCRITERIA_WATCH_THREAD:
-		case MATCHCRITERIA_NOT_WATCH_THREAD:
-		case MATCHCRITERIA_SUBJECT:
-		case MATCHCRITERIA_NOT_SUBJECT:
-		case MATCHCRITERIA_FROM:
-		case MATCHCRITERIA_NOT_FROM:
-		case MATCHCRITERIA_TO:
-		case MATCHCRITERIA_NOT_TO:
-		case MATCHCRITERIA_CC:
-		case MATCHCRITERIA_NOT_CC:
-		case MATCHCRITERIA_TO_OR_CC:
-		case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
-		case MATCHCRITERIA_TAG:
-		case MATCHCRITERIA_NOT_TAG:
-		case MATCHCRITERIA_TAGGED:
-		case MATCHCRITERIA_NOT_TAGGED:
-		case MATCHCRITERIA_AGE_GREATER:
-		case MATCHCRITERIA_AGE_LOWER:
-		case MATCHCRITERIA_AGE_GREATER_HOURS:
-		case MATCHCRITERIA_AGE_LOWER_HOURS:
-		case MATCHCRITERIA_DATE_AFTER:
-		case MATCHCRITERIA_DATE_BEFORE:
-		case MATCHCRITERIA_NEWSGROUPS:
-		case MATCHCRITERIA_NOT_NEWSGROUPS:
-		case MATCHCRITERIA_MESSAGEID:
-		case MATCHCRITERIA_NOT_MESSAGEID:
-		case MATCHCRITERIA_INREPLYTO:
-		case MATCHCRITERIA_NOT_INREPLYTO:
-		case MATCHCRITERIA_REFERENCES:
-		case MATCHCRITERIA_NOT_REFERENCES:
-		case MATCHCRITERIA_SCORE_GREATER:
-		case MATCHCRITERIA_SCORE_LOWER:
-		case MATCHCRITERIA_SCORE_EQUAL:
-		case MATCHCRITERIA_SIZE_GREATER:
-		case MATCHCRITERIA_SIZE_SMALLER:
-		case MATCHCRITERIA_SIZE_EQUAL:
-		case MATCHCRITERIA_TEST:
-		case MATCHCRITERIA_NOT_TEST:
-		case MATCHCRITERIA_PARTIAL:
-		case MATCHCRITERIA_NOT_PARTIAL:
-			if (matcherprop_match(matcher, info)) {
-				if (!matchers->bool_and) {
-					return TRUE;
-				}
-			}
-			else {
-				if (matchers->bool_and) {
-					return FALSE;
-				}
-			}
-		}
-	}
-
-	/* test the condition on the file */
-
-	if (matcherlist_match_file(matchers, info, result)) {
-		if (!matchers->bool_and) {
-			return TRUE;
-		}
-	} else {
-		if (matchers->bool_and) {
-			return FALSE;
-		}
-	}
-	return result;
-}
-
-
-static gint quote_filter_str(gchar * result, guint size,
-			     const gchar * path)
-{
-	const gchar * p;
-	gchar * result_p;
-	guint remaining;
-
-	result_p = result;
-	remaining = size;
-
-	for(p = path ; * p != '\0' ; p ++) {
-
-		if ((* p != '\"') && (* p != '\\')) {
-			if (remaining > 0) {
-				* result_p = * p;
-				result_p ++;
-				remaining --;
-			}
-			else {
-				result[size - 1] = '\0';
-				return -1;
-			}
-		}
-		else {
-			if (remaining >= 2) {
-				* result_p = '\\';
-				result_p ++;
-				* result_p = * p;
-				result_p ++;
-				remaining -= 2;
-			}
-			else {
-				result[size - 1] = '\0';
-				return -1;
-			}
-		}
-	}
-	if (remaining > 0) {
-		* result_p = '\0';
-	}
-	else {
-		result[size - 1] = '\0';
-		return -1;
-	}
-
-	return 0;
-}
-
-
-gchar * matcher_quote_str(const gchar * src)
-{
-	gchar * res;
-	gint len;
-
-	len = strlen(src) * 2 + 1;
-	res = g_malloc(len);
-	quote_filter_str(res, len, src);
-
-	return res;
-}
-
-/*!
- *\brief	Convert a matcher structure to a string
- *
- *\param	matcher Matcher structure
- *
- *\return	gchar * Newly allocated string
- */
-gchar *matcherprop_to_string(MatcherProp *matcher)
-{
-	gchar *matcher_str = NULL;
-	const gchar *criteria_str;
-	const gchar *matchtype_str;
-	int i;
-	gchar * quoted_expr;
-	gchar * quoted_header;
-
-	criteria_str = NULL;
-	for (i = 0; i < (int) (sizeof(matchparser_tab) / sizeof(MatchParser)); i++) {
-		if (matchparser_tab[i].id == matcher->criteria)
-			criteria_str = matchparser_tab[i].str;
-	}
-	if (criteria_str == NULL)
-		return NULL;
-
-	switch (matcher->criteria) {
-	case MATCHCRITERIA_AGE_GREATER:
-	case MATCHCRITERIA_AGE_LOWER:
-	case MATCHCRITERIA_AGE_GREATER_HOURS:
-	case MATCHCRITERIA_AGE_LOWER_HOURS:
-	case MATCHCRITERIA_SCORE_GREATER:
-	case MATCHCRITERIA_SCORE_LOWER:
-	case MATCHCRITERIA_SCORE_EQUAL:
-	case MATCHCRITERIA_SIZE_GREATER:
-	case MATCHCRITERIA_SIZE_SMALLER:
-	case MATCHCRITERIA_SIZE_EQUAL:
-		return g_strdup_printf("%s %i", criteria_str, matcher->value);
-	case MATCHCRITERIA_ALL:
-	case MATCHCRITERIA_UNREAD:
-	case MATCHCRITERIA_NOT_UNREAD:
-	case MATCHCRITERIA_NEW:
-	case MATCHCRITERIA_NOT_NEW:
-	case MATCHCRITERIA_MARKED:
-	case MATCHCRITERIA_NOT_MARKED:
-	case MATCHCRITERIA_DELETED:
-	case MATCHCRITERIA_NOT_DELETED:
-	case MATCHCRITERIA_REPLIED:
-	case MATCHCRITERIA_NOT_REPLIED:
-	case MATCHCRITERIA_FORWARDED:
-	case MATCHCRITERIA_NOT_FORWARDED:
-	case MATCHCRITERIA_LOCKED:
-	case MATCHCRITERIA_NOT_LOCKED:
-	case MATCHCRITERIA_SPAM:
-	case MATCHCRITERIA_NOT_SPAM:
-	case MATCHCRITERIA_HAS_ATTACHMENT:
-	case MATCHCRITERIA_HAS_NO_ATTACHMENT:
-	case MATCHCRITERIA_SIGNED:
-	case MATCHCRITERIA_NOT_SIGNED:
-	case MATCHCRITERIA_PARTIAL:
-	case MATCHCRITERIA_NOT_PARTIAL:
-	case MATCHCRITERIA_IGNORE_THREAD:
-	case MATCHCRITERIA_NOT_IGNORE_THREAD:
-	case MATCHCRITERIA_WATCH_THREAD:
-	case MATCHCRITERIA_NOT_WATCH_THREAD:
-	case MATCHCRITERIA_TAGGED:
-	case MATCHCRITERIA_NOT_TAGGED:
-		return g_strdup(criteria_str);
-	case MATCHCRITERIA_TEST:
-	case MATCHCRITERIA_NOT_TEST:
-	case MATCHCRITERIA_DATE_AFTER:
-	case MATCHCRITERIA_DATE_BEFORE:
-		quoted_expr = matcher_quote_str(matcher->expr);
-		matcher_str = g_strdup_printf("%s \"%s\"",
-					      criteria_str, quoted_expr);
-		g_free(quoted_expr);
-                return matcher_str;
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-		quoted_header = matcher_quote_str(matcher->header);
-		quoted_expr = matcher_quote_str(matcher->expr);
-		matcher_str = g_strdup_printf("%s \"%s\" in \"%s\"",
-					      criteria_str, quoted_header, quoted_expr);
-		g_free(quoted_header);
-		g_free(quoted_expr);
-		return matcher_str;
-	}
-
-	matchtype_str = NULL;
-	for (i = 0; i < sizeof matchparser_tab / sizeof matchparser_tab[0]; i++) {
-		if (matchparser_tab[i].id == matcher->matchtype)
-			matchtype_str = matchparser_tab[i].str;
-	}
-
-	if (matchtype_str == NULL)
-		return NULL;
-
-	switch (matcher->matchtype) {
-	case MATCHTYPE_MATCH:
-	case MATCHTYPE_MATCHCASE:
-	case MATCHTYPE_REGEXP:
-	case MATCHTYPE_REGEXPCASE:
-		quoted_expr = matcher_quote_str(matcher->expr);
-		if (matcher->header) {
-			quoted_header = matcher_quote_str(matcher->header);
-			matcher_str = g_strdup_printf
-					("%s \"%s\" %s \"%s\"",
-					 criteria_str, quoted_header,
-					 matchtype_str, quoted_expr);
-			g_free(quoted_header);
-		}
-		else
-			matcher_str = g_strdup_printf
-					("%s %s \"%s\"", criteria_str,
-					 matchtype_str, quoted_expr);
-                g_free(quoted_expr);
-		break;
-	}
-
-	return matcher_str;
-}
-
-/*!
- *\brief	Convert a list of conditions to a string
- *
- *\param	matchers List of conditions
- *
- *\return	gchar * Newly allocated string
- */
-gchar *matcherlist_to_string(const MatcherList *matchers)
-{
-	gint count;
-	gchar **vstr;
-	GSList *l;
-	gchar **cur_str;
-	gchar *result = NULL;
-
-	count = g_slist_length(matchers->matchers);
-	vstr = g_new(gchar *, count + 1);
-
-	for (l = matchers->matchers, cur_str = vstr; l != NULL;
-	     l = g_slist_next(l), cur_str ++) {
-		*cur_str = matcherprop_to_string((MatcherProp *) l->data);
-		if (*cur_str == NULL)
-			break;
-	}
-	*cur_str = NULL;
-
-	if (matchers->bool_and)
-		result = g_strjoinv(" & ", vstr);
-	else
-		result = g_strjoinv(" | ", vstr);
-
-	for (cur_str = vstr ; *cur_str != NULL ; cur_str ++)
-		g_free(*cur_str);
-	g_free(vstr);
-
-	return result;
-}
-
-
-#define STRLEN_ZERO(s) ((s) ? strlen(s) : 0)
-#define STRLEN_DEFAULT(s,d) ((s) ? strlen(s) : STRLEN_ZERO(d))
-
-static void add_str_default(gchar ** dest,
-			    const gchar * s, const gchar * d)
-{
-	gchar quoted_str[4096];
-	const gchar * str;
-
-        if (s != NULL)
-		str = s;
-	else
-		str = d;
-
-	quote_cmd_argument(quoted_str, sizeof(quoted_str), str);
-	strcpy(* dest, quoted_str);
-
-	(* dest) += strlen(* dest);
-}
-
-/* matching_build_command() - preferably cmd should be unescaped */
-/*!
- *\brief	Build the command-line to execute
- *
- *\param	cmd String with command-line specifiers
- *\param	info Message info to use for command
- *
- *\return	gchar * Newly allocated string
- */
-gchar *matching_build_command(const gchar *cmd, MsgInfo *info)
-{
-	const gchar *s = cmd;
-	gchar *filename = NULL;
-	gchar *processed_cmd;
-	gchar *p;
-	gint size;
-
-	const gchar *const no_subject    = _("(none)") ;
-	const gchar *const no_from       = _("(none)") ;
-	const gchar *const no_to         = _("(none)") ;
-	const gchar *const no_cc         = _("(none)") ;
-	const gchar *const no_date       = _("(none)") ;
-	const gchar *const no_msgid      = _("(none)") ;
-	const gchar *const no_references = _("(none)") ;
-
-	size = STRLEN_ZERO(cmd) + 1;
-	while (*s != '\0') {
-		if (*s == '%') {
-			s++;
-			switch (*s) {
-			case '%':
-				size -= 1;
-				break;
-			case 's': /* subject */
-				size += STRLEN_DEFAULT(info->subject, no_subject) - 2;
-				break;
-			case 'f': /* from */
-				size += STRLEN_DEFAULT(info->from, no_from) - 2;
-				break;
-			case 't': /* to */
-				size += STRLEN_DEFAULT(info->to, no_to) - 2;
-				break;
-			case 'c': /* cc */
-				size += STRLEN_DEFAULT(info->cc, no_cc) - 2;
-				break;
-			case 'd': /* date */
-				size += STRLEN_DEFAULT(info->date, no_date) - 2;
-				break;
-			case 'i': /* message-id */
-				size += STRLEN_DEFAULT(info->msgid, no_msgid) - 2;
-				break;
-			case 'r': /* references */
-                                /* FIXME: using the inreplyto header for reference */
-				size += STRLEN_DEFAULT(info->inreplyto, no_references) - 2;
-				break;
-			case 'F': /* file */
-				if (filename == NULL)
-					filename = folder_item_fetch_msg(info->folder, info->msgnum);
-
-				if (filename == NULL) {
-					g_warning("filename is not set");
-					return NULL;
-				}
-				else {
-					size += strlen(filename) - 2;
-				}
-				break;
-			}
-			s++;
-		}
-		else s++;
-	}
-
-	/* as the string can be quoted, we double the result */
-	size *= 2;
-
-	processed_cmd = g_new0(gchar, size);
-	s = cmd;
-	p = processed_cmd;
-
-	while (*s != '\0') {
-		if (*s == '%') {
-			s++;
-			switch (*s) {
-			case '%':
-				*p = '%';
-				p++;
-				break;
-			case 's': /* subject */
-				add_str_default(&p, info->subject,
-						no_subject);
-				break;
-			case 'f': /* from */
-				add_str_default(&p, info->from,
-						no_from);
-				break;
-			case 't': /* to */
-				add_str_default(&p, info->to,
-						no_to);
-				break;
-			case 'c': /* cc */
-				add_str_default(&p, info->cc,
-						no_cc);
-				break;
-			case 'd': /* date */
-				add_str_default(&p, info->date,
-						no_date);
-				break;
-			case 'i': /* message-id */
-				add_str_default(&p, info->msgid,
-						no_msgid);
-				break;
-			case 'r': /* references */
-                                /* FIXME: using the inreplyto header for references */
-				add_str_default(&p, info->inreplyto, no_references);
-				break;
-			case 'F': /* file */
-				if (filename != NULL)
-					add_str_default(&p, filename, NULL);
-				break;
-			default:
-				*p = '%';
-				p++;
-				*p = *s;
-				p++;
-				break;
-			}
-			s++;
-		}
-		else {
-			*p = *s;
-			p++;
-			s++;
-		}
-	}
-	g_free(filename);
-
-	return processed_cmd;
-}
-#undef STRLEN_DEFAULT
-#undef STRLEN_ZERO
-
-/* ************************************************************ */
-
-
-/*!
- *\brief	Write filtering list to file
- *
- *\param	fp File
- *\param	prefs_filtering List of filtering conditions
- */
-static int prefs_filtering_write(FILE *fp, GSList *prefs_filtering)
-{
-	return 0;
-}
-
-typedef struct _NodeLoopData {
-	FILE *fp;
-	gboolean error;
-} NodeLoopData;
-
-/*!
- *\brief	Write matchers from a folder item
- *
- *\param	node Node with folder info
- *\param	data File pointer
- *
- *\return	gboolean FALSE
- */
-static gboolean prefs_matcher_write_func(GNode *node, gpointer d)
-{
-	FolderItem *item;
-	NodeLoopData *data = (NodeLoopData *)d;
-	gchar *id;
-	GSList *prefs_filtering;
-
-        item = node->data;
-        /* prevent warning */
-        if (item->path == NULL)
-                return FALSE;
-        id = folder_item_get_identifier(item);
-        if (id == NULL)
-                return FALSE;
-        prefs_filtering = item->prefs->processing;
-
-	if (prefs_filtering != NULL) {
-		if (fprintf(data->fp, "[%s]\n", id) < 0) {
-			data->error = TRUE;
-			goto fail;
-		}
-		if (prefs_filtering_write(data->fp, prefs_filtering) < 0) {
-			data->error = TRUE;
-			goto fail;
-		}
-		if (fputc('\n', data->fp) == EOF) {
-			data->error = TRUE;
-			goto fail;
-		}
-	}
-fail:
-	g_free(id);
-
-	return FALSE;
-}
-
-/*!
- *\brief	Save matchers from folder items
- *
- *\param	fp File
- */
-static int prefs_matcher_save(FILE *fp)
-{
-	GList *cur;
-	NodeLoopData data;
-
-	data.fp = fp;
-	data.error = FALSE;
-
-	for (cur = folder_get_list() ; cur != NULL ; cur = g_list_next(cur)) {
-		Folder *folder;
-
-		folder = (Folder *) cur->data;
-		g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
-				prefs_matcher_write_func, &data);
-	}
-
-	if (data.error == TRUE)
-		return -1;
-	return 0;
-}
-
-/*!
- *\brief	Write filtering / matcher configuration file
- */
-void prefs_matcher_write_config(void)
-{
-	gchar *rcpath;
-	PrefFile *pfile;
-
-	debug_print("Writing matcher configuration...\n");
-
-	rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
-			     MATCHER_RC, NULL);
-
-	if ((pfile = prefs_write_open(rcpath)) == NULL) {
-		g_warning("failed to write configuration to file");
-		g_free(rcpath);
-		return;
-	}
-
-	g_free(rcpath);
-
-	if (prefs_matcher_save(pfile->fp) < 0) {
-		g_warning("failed to write configuration to file");
-		prefs_file_close_revert(pfile);
-	} else if (prefs_file_close(pfile) < 0) {
-		g_warning("failed to save configuration to file");
-	}
-}
-
-/*!
- *\brief	Read matcher configuration
- */
-void prefs_matcher_read_config(void)
-{
-	gchar *rcpath;
-	FILE *f;
-
-	create_matchparser_hashtab();
-	rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MATCHER_RC, NULL);
-
-	f = g_fopen(rcpath, "rb");
-	g_free(rcpath);
-
-	if (f != NULL) {
-		matcher_parser_start_parsing(f);
-		fclose(matcher_parserin);
-	}
-}
blob - 8a068bb19927e63cb445f7eb18f5f6d79d67c6ab
blob + 7afdd06718b1650570a0f38212dc569369e0fde2
--- src/matcher.h
+++ src/matcher.h
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef MATCHER_H
@@ -26,10 +26,6 @@
 #include "proctypes.h"
 #include "matchertypes.h"
 
-/* constants generated by yacc */
-#include "matcher_parser_lex.h"
-#include "matcher_parser_parse.h"
-
 struct _MatcherProp {
 	int matchtype;
 	int criteria;
@@ -67,97 +63,13 @@ struct _MatcherList {
 #define MB_(name) \
 	MATCHERBOOL_ ## name = MATCHER_ ## name
 
-enum {
-	/* match */
-	MC_(ALL),
-	MC_(UNREAD), MC_(NOT_UNREAD),
-	MC_(NEW), MC_(NOT_NEW),
-	MC_(MARKED), MC_(NOT_MARKED),
-	MC_(DELETED), MC_(NOT_DELETED),
-	MC_(REPLIED), MC_(NOT_REPLIED),
-	MC_(FORWARDED), MC_(NOT_FORWARDED),
-	MC_(LOCKED), MC_(NOT_LOCKED),
-	MC_(SPAM),MC_(NOT_SPAM),
-	MC_(HAS_ATTACHMENT), MC_(HAS_NO_ATTACHMENT),
-	MC_(SIGNED), MC_(NOT_SIGNED),
-	MC_(PARTIAL), MC_(NOT_PARTIAL),
-	MC_(COLORLABEL), MC_(NOT_COLORLABEL),
-	MC_(IGNORE_THREAD), MC_(NOT_IGNORE_THREAD),
-	MC_(WATCH_THREAD), MC_(NOT_WATCH_THREAD),
-	MC_(SUBJECT), MC_(NOT_SUBJECT),
-	MC_(FROM), MC_(NOT_FROM),
-	MC_(TO), MC_(NOT_TO),
-	MC_(CC), MC_(NOT_CC),
-	MC_(TO_OR_CC), MC_(NOT_TO_AND_NOT_CC),
-	MC_(AGE_GREATER), MC_(AGE_LOWER),
-	MC_(AGE_GREATER_HOURS), MC_(AGE_LOWER_HOURS),
-	MC_(DATE_AFTER), MC_(DATE_BEFORE),
-	MC_(NEWSGROUPS), MC_(NOT_NEWSGROUPS),
-	MC_(MESSAGEID), MC_(NOT_MESSAGEID),
-	MC_(INREPLYTO), MC_(NOT_INREPLYTO),
-	MC_(REFERENCES), MC_(NOT_REFERENCES),
-	MC_(SCORE_GREATER), MC_(SCORE_LOWER),
-	MC_(HEADER), MC_(NOT_HEADER),
-	MC_(HEADERS_PART), MC_(NOT_HEADERS_PART),
-	MC_(HEADERS_CONT), MC_(NOT_HEADERS_CONT),
-	MC_(MESSAGE), MC_(NOT_MESSAGE),
-	MC_(BODY_PART), MC_(NOT_BODY_PART),
-	MC_(TEST), MC_(NOT_TEST),
-	MC_(SCORE_EQUAL),
-	MC_(SIZE_GREATER), 
-	MC_(SIZE_SMALLER),
-	MC_(SIZE_EQUAL),
-	MC_(FOUND_IN_ADDRESSBOOK),MC_(NOT_FOUND_IN_ADDRESSBOOK),
-	MC_(TAG),MC_(NOT_TAG),
-	MC_(TAGGED),MC_(NOT_TAGGED),
 
-	/* match type */
-	MT_(MATCHCASE),
-	MT_(MATCH),
-	MT_(REGEXPCASE),
-	MT_(REGEXP),
-	/* actions */
-	MA_(SCORE),
-	MA_(EXECUTE),
-	MA_(MOVE),
-	MA_(COPY),
-	MA_(DELETE),
-	MA_(MARK),
-	MA_(UNMARK),
-	MA_(LOCK),
-	MA_(UNLOCK),
-	MA_(MARK_AS_READ),
-	MA_(MARK_AS_UNREAD),
-	MA_(MARK_AS_SPAM),
-	MA_(MARK_AS_HAM),
-	MA_(FORWARD),
-	MA_(FORWARD_AS_ATTACHMENT),
-	MA_(COLOR),
-	MA_(REDIRECT),
-	MA_(CHANGE_SCORE),
-	MA_(SET_SCORE),
-	MA_(STOP),
-	MA_(HIDE),
-	MA_(IGNORE),
-	MA_(WATCH),
-	MA_(ADD_TO_ADDRESSBOOK),
-	MA_(SET_TAG),
-	MA_(UNSET_TAG),
-	MA_(CLEAR_TAGS),
-	/* boolean operations */
-	MB_(OR),
-	MB_(AND)
-};
-
 void matcher_init(void);
 void matcher_done(void);
 
-const gchar *get_matchparser_tab_str	(gint id);
-gint get_matchparser_tab_id		(const gchar *str); 
-
-MatcherProp *matcherprop_new		(gint		 criteria, 
+MatcherProp *matcherprop_new		(gint		 criteria,
 					 const gchar	*header,
-					 gint		 matchtype, 
+					 gint		 matchtype,
 					 const gchar	*expr,
 					 int	         value);
 void matcherprop_free			(MatcherProp *prop);
@@ -166,7 +78,7 @@ MatcherProp *matcherprop_parse		(gchar	**str);
 
 MatcherProp *matcherprop_copy		(const MatcherProp *src);
 
-MatcherList * matcherlist_new		(GSList		*matchers, 
+MatcherList * matcherlist_new		(GSList		*matchers,
 					 gboolean	bool_and);
 MatcherList * matcherlist_new_from_lines(gchar		*lines,
 					 gboolean	bool_and,
blob - ce771842100df6b2004d3507b926ef6f7c4a9e2a (mode 644)
blob + /dev/null
--- src/matcher_parser.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (c) 2001-2002 by Hiroyuki Yamamoto & The Claws Mail Team.
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef MATCHER_PARSER_H
-#define MATCHER_PARSER_H
-
-#include <glib.h>
-
-extern FILE *matcher_parserin;
-extern int matcher_parserlineno;
-
-void matcher_parser_disable_warnings	(const gboolean disable);
-void matcher_parser_start_parsing	(FILE *f);
-int matcher_parserparse			(void);
-
-MatcherList *matcher_parser_get_cond	(gchar *str, gboolean *is_fast);
-MatcherProp *matcher_parser_get_prop	(gchar *str);
-GSList *matcher_parser_get_action_list(gchar *str);
-
-#endif
blob - 754aca19bfefd786cd83a8cd72c9323a7a74578e (mode 644)
blob + /dev/null
--- src/matcher_parser_lex.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/* The following defines are adapted from GDB sources (cp-name-parser.y):
-
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
-
-   Parts of the lexer are based on c-exp.y from GDB.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.
-*/
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
-   as well as gratuitiously global symbol names, so we can have multiple
-   yacc generated parsers in gdb.  Note that these are only the variables
-   produced by yacc.  If other parser generators (bison, byacc, etc) produce
-   additional global names that conflict at link time, then those parser
-   generators need to be fixed instead of adding those names to this list. */
-
-#define	yymaxdepth matcher_parsermaxdepth
-#define	yyparse	matcher_parserparse
-#define	yylex	matcher_parserlex
-#define	yyerror	matcher_parsererror
-#define	yylval	matcher_parserlval
-#define	yychar	matcher_parserchar
-#define	yydebug	matcher_parserdebug
-#define	yypact	matcher_parserpact	
-#define	yyr1	matcher_parserr1			
-#define	yyr2	matcher_parserr2			
-#define	yydef	matcher_parserdef		
-#define	yychk	matcher_parserchk		
-#define	yypgo	matcher_parserpgo		
-#define	yyact	matcher_parseract		
-#define	yyexca	matcher_parserexca
-#define yyerrflag matcher_parsererrflag
-#define yynerrs	matcher_parsernerrs
-#define	yyps	matcher_parserps
-#define	yypv	matcher_parserpv
-#define	yys	matcher_parsers
-#define	yy_yys	matcher_parseryys
-#define	yystate	matcher_parserstate
-#define	yytmp	matcher_parsertmp
-#define	yyv	matcher_parserv
-#define	yy_yyv	matcher_parseryyv
-#define	yyval	matcher_parserval
-#define	yylloc	matcher_parserlloc
-#define yyreds	matcher_parserreds		/* With YYDEBUG defined */
-#define yytoks	matcher_parsertoks		/* With YYDEBUG defined */
-#define yylhs	matcher_parseryylhs
-#define yylen	matcher_parseryylen
-#define yydefred matcher_parseryydefred
-#define yydgoto	matcher_parseryydgoto
-#define yysindex matcher_parseryysindex
-#define yyrindex matcher_parseryyrindex
-#define yygindex matcher_parseryygindex
-#define yytable	 matcher_parseryytable
-#define yycheck	 matcher_parseryycheck
-#define yyrestart matcher_parserrestart
blob - cdd412cb9e9c3f658e84cb1e5fab0bd15c4ec191 (mode 644)
blob + /dev/null
--- src/matcher_parser_lex.l
+++ /dev/null
@@ -1,131 +0,0 @@
-%option nounput never-interactive
-
-%{
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (c) 2001-2007 by Hiroyuki Yamamoto & The Claws Mail Team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- * 
- */
-
-#include <string.h>
-#include <glib.h>
-
-#include "codeconv.h"
-#include "matcher.h"
-#include "matcher_parser_lex.h"
-
-#ifndef YYSTYPE
-#include "matcher_parser_parse.h"
-#endif
-
-#define MAX_STR_CONST 8192
-
-static char string_buf[MAX_STR_CONST];
-static char *string_buf_ptr;
-
-static void add_char(char ch)
-{
-	if (string_buf_ptr - string_buf < sizeof(string_buf))
-		*string_buf_ptr++ = ch;
-}
-
-
-/* this function will reinitializes the parser */
-
-void matcher_parser_init(void)
-{
-        BEGIN(0);
-}
-%}
-
-%option prefix="matcher_parser"
-%option outfile="lex.yy.c"
-%option yylineno
-
-%x string
-%x section
-
-%%
-			
-"in"	return MATCHER_IN; 
-
-			/*
-			 * a keyword consists of alpha and underscore 
-			 * characters, possibly preceded by a tilde (~)
-			 */
-
-(~|[a-z])[a-z_]*	{
-				gint id;
-
-				if (-1 == (id = get_matchparser_tab_id(yytext))) { 
-					REJECT;
-				} else					
-					return id;
-			}
-[ \t]+
-"\n"		return MATCHER_EOL;
-"&"		return MATCHER_AND;
-"|"		return MATCHER_OR;
-\"		{
-		BEGIN(string);
-		string_buf_ptr = string_buf;
-		}
-<string>\"	{
-		/* get out of the state: string ends. */
-		BEGIN(0);
-		*string_buf_ptr = '\0';
-		if (!g_utf8_validate(string_buf, -1, NULL)) {
-			gchar *tmp = conv_codeset_strdup(string_buf, conv_get_locale_charset_str(), CS_INTERNAL);
-			if (tmp) {
-				g_strlcpy(string_buf, tmp, sizeof(string_buf));
-				g_free(tmp);
-			}
-		}
-		yylval.str = string_buf;
-		return MATCHER_STRING;
-		}
-<string>\\.	{
-                /* take care of quoted characters */
-		add_char(yytext[1]);
-		}
-<string>.	{
-		add_char(yytext[0]);
-		}
-^\[.*\]$	{
-                /* for section name in configuration file */
-		BEGIN(0);
-		yylval.str = yytext + 1;
-		yytext[strlen(yytext) - 1] = '\0';
-		return MATCHER_SECTION;
-		}
-[-+]?[0-9]+	{
-		yylval.str = yytext;
-		return MATCHER_INTEGER;
-		}
-rulename	{
-		return MATCHER_RULENAME;
-		}
-disabled	{
-		return MATCHER_DISABLED;
-		}
-account	{
-		return MATCHER_ACCOUNT;
-		}
-enabled	{
-		return MATCHER_ENABLED;
-		}
-.       { /* silently eat unmatched input at lexer level */ }
-%%
blob - 8228522c79b522e1aa084e572fb0120f1561fc40 (mode 644)
blob + /dev/null
--- src/matcher_parser_parse.y
+++ /dev/null
@@ -1,1363 +0,0 @@
-%{
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (c) 2001-2014 by Hiroyuki Yamamoto & The Claws Mail Team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include "utils.h"
-#include "procheader.h"
-#include "matcher.h"
-#include "matcher_parser.h"
-#include "matcher_parser_lex.h"
-#include "folder_item_prefs.h"
-
-static gint error = 0;
-static gint bool_op = 0;
-static gint match_type = 0;
-static gchar *header = NULL;
-
-static MatcherProp *prop;
-
-static GSList *matchers_list = NULL;
-
-static gboolean enabled = TRUE;
-static gchar *name = NULL;
-static gint account_id = 0;
-static MatcherList *cond;
-static GSList *action_list = NULL;
-static gboolean matcher_is_fast = TRUE;
-static gboolean disable_warnings = FALSE;
-
-static gboolean filtering_ptr_externally_managed = FALSE;
-
-static GSList **prefs_filtering = NULL;
-static int enable_compatibility = 0;
-
-enum {
-        MATCHER_PARSE_FILE,
-        MATCHER_PARSE_NO_EOL,
-	MATCHER_PARSE_ENABLED,
-	MATCHER_PARSE_NAME,
-	MATCHER_PARSE_ACCOUNT,
-        MATCHER_PARSE_CONDITION,
-        MATCHER_PARSE_FILTERING_ACTION,
-};
-
-static int matcher_parse_op = MATCHER_PARSE_FILE;
-
-
-/* ******************************************************************** */
-/* redeclarations to avoid warnings */
-void matcher_parserrestart(FILE *input_file);
-void matcher_parser_init(void);
-void matcher_parser_switch_to_buffer(void * new_buffer);
-void matcher_parser_delete_buffer(void * b);
-void matcher_parserpop_buffer_state(void);
-int matcher_parserlex(void);
-
-void matcher_parser_disable_warnings(const gboolean disable)
-{
-	disable_warnings = disable;
-}
-
-void matcher_parser_start_parsing(FILE *f)
-{
-	matcher_parserlineno = 1;
-	matcher_parserrestart(f);
-	account_id = 0;
-	matcher_parserparse();
-}
-
-
-void * matcher_parser_scan_string(const char * str);
-
-static gboolean check_quote_symetry(gchar *str)
-{
-	const gchar *walk;
-	int ret = 0;
-
-	if (str == NULL)
-		return TRUE; /* heh, that's symetric */
-	if (*str == '\0')
-		return TRUE;
-	for (walk = str; *walk; walk++) {
-		if (*walk == '\"') {
-			if (walk == str 	/* first char */
-			|| *(walk - 1) != '\\') /* not escaped */
-				ret ++;
-		}
-	}
-	return !(ret % 2);
-}
-
-MatcherList *matcher_parser_get_name(gchar *str)
-{
-	void *bufstate;
-
-	if (!check_quote_symetry(str)) {
-		cond = NULL;
-		return cond;
-	}
-
-	/* bad coding to enable the sub-grammar matching
-	   in yacc */
-	matcher_parserlineno = 1;
-	matcher_parse_op = MATCHER_PARSE_NAME;
-	matcher_parserrestart(NULL);
-	matcher_parserpop_buffer_state();
-        matcher_parser_init();
-	bufstate = matcher_parser_scan_string(str);
-	matcher_parserparse();
-	matcher_parse_op = MATCHER_PARSE_FILE;
-	matcher_parser_delete_buffer(bufstate);
-	return cond;
-}
-
-MatcherList *matcher_parser_get_enabled(gchar *str)
-{
-	void *bufstate;
-
-	if (!check_quote_symetry(str)) {
-		cond = NULL;
-		return cond;
-	}
-
-	/* bad coding to enable the sub-grammar matching
-	   in yacc */
-	matcher_parserlineno = 1;
-	matcher_parse_op = MATCHER_PARSE_ENABLED;
-	matcher_parserrestart(NULL);
-	matcher_parserpop_buffer_state();
-	matcher_parser_init();
-	bufstate = matcher_parser_scan_string(str);
-	matcher_parserparse();
-	matcher_parse_op = MATCHER_PARSE_FILE;
-	matcher_parser_delete_buffer(bufstate);
-	return cond;
-}
-
-MatcherList *matcher_parser_get_account(gchar *str)
-{
-	void *bufstate;
-
-	if (!check_quote_symetry(str)) {
-		cond = NULL;
-		return cond;
-	}
-
-	/* bad coding to enable the sub-grammar matching
-	   in yacc */
-	matcher_parserlineno = 1;
-	matcher_parse_op = MATCHER_PARSE_ACCOUNT;
-	matcher_parserrestart(NULL);
-	matcher_parserpop_buffer_state();
-	matcher_parser_init();
-	bufstate = matcher_parser_scan_string(str);
-	matcher_parserparse();
-	matcher_parse_op = MATCHER_PARSE_FILE;
-	matcher_parser_delete_buffer(bufstate);
-	return cond;
-}
-
-MatcherList *matcher_parser_get_cond(gchar *str, gboolean *is_fast)
-{
-	void *bufstate;
-
-	if (!check_quote_symetry(str)) {
-		cond = NULL;
-		return cond;
-	}
-
-	matcher_is_fast = TRUE;
-	/* bad coding to enable the sub-grammar matching
-	   in yacc */
-	matcher_parserlineno = 1;
-	matcher_parse_op = MATCHER_PARSE_CONDITION;
-	matcher_parserrestart(NULL);
-	matcher_parserpop_buffer_state();
-        matcher_parser_init();
-	bufstate = matcher_parser_scan_string(str);
-	matcher_parserparse();
-	matcher_parse_op = MATCHER_PARSE_FILE;
-	matcher_parser_delete_buffer(bufstate);
-	if (is_fast)
-		*is_fast = matcher_is_fast;
-	return cond;
-}
-
-GSList *matcher_parser_get_action_list(gchar *str)
-{
-	void *bufstate;
-
-	if (!check_quote_symetry(str)) {
-		action_list = NULL;
-		return action_list;
-	}
-
-	/* bad coding to enable the sub-grammar matching
-	   in yacc */
-	matcher_parserlineno = 1;
-	matcher_parse_op = MATCHER_PARSE_FILTERING_ACTION;
-	matcher_parserrestart(NULL);
-	matcher_parserpop_buffer_state();
-        matcher_parser_init();
-	bufstate = matcher_parser_scan_string(str);
-	matcher_parserparse();
-	matcher_parse_op = MATCHER_PARSE_FILE;
-	matcher_parser_delete_buffer(bufstate);
-	return action_list;
-}
-
-MatcherProp *matcher_parser_get_prop(gchar *str)
-{
-	MatcherList *list;
-	MatcherProp *prop;
-
-	matcher_parserlineno = 1;
-	list = matcher_parser_get_cond(str, NULL);
-	if (list == NULL)
-		return NULL;
-
-	if (list->matchers == NULL)
-		return NULL;
-
-	if (list->matchers->next != NULL)
-		return NULL;
-
-	prop = list->matchers->data;
-
-	g_slist_free(list->matchers);
-	g_free(list);
-
-	return prop;
-}
-
-void matcher_parsererror(char *str)
-{
-	GSList *l;
-
-	if (matchers_list) {
-		for (l = matchers_list; l != NULL; l = g_slist_next(l)) {
-			matcherprop_free((MatcherProp *)
-					 l->data);
-			l->data = NULL;
-		}
-		g_slist_free(matchers_list);
-		matchers_list = NULL;
-	}
-	cond = NULL;
-	if (!disable_warnings)
-		g_warning("filtering parsing: %i: %s",
-		  	matcher_parserlineno, str);
-	error = 1;
-}
-
-int matcher_parserwrap(void)
-{
-	return 1;
-}
-%}
-
-%union {
-	char *str;
-	int value;
-}
-%token MATCHER_ALL MATCHER_UNREAD  MATCHER_NOT_UNREAD
-%token MATCHER_NEW  MATCHER_NOT_NEW  MATCHER_MARKED
-%token MATCHER_NOT_MARKED  MATCHER_DELETED  MATCHER_NOT_DELETED
-%token MATCHER_REPLIED  MATCHER_NOT_REPLIED  MATCHER_FORWARDED
-%token MATCHER_NOT_FORWARDED  MATCHER_SUBJECT  MATCHER_NOT_SUBJECT
-%token MATCHER_FROM  MATCHER_NOT_FROM  MATCHER_TO  MATCHER_NOT_TO
-%token MATCHER_CC  MATCHER_NOT_CC  MATCHER_TO_OR_CC  MATCHER_NOT_TO_AND_NOT_CC
-%token MATCHER_AGE_GREATER  MATCHER_AGE_LOWER  MATCHER_NEWSGROUPS
-%token MATCHER_AGE_GREATER_HOURS  MATCHER_AGE_LOWER_HOURS
-%token MATCHER_DATE_AFTER  MATCHER_DATE_BEFORE
-%token MATCHER_NOT_NEWSGROUPS  MATCHER_INREPLYTO  MATCHER_NOT_INREPLYTO
-%token MATCHER_MESSAGEID MATCHER_NOT_MESSAGEID
-%token MATCHER_REFERENCES  MATCHER_NOT_REFERENCES  MATCHER_SCORE_GREATER
-%token MATCHER_SCORE_LOWER  MATCHER_HEADER  MATCHER_NOT_HEADER
-%token MATCHER_HEADERS_PART  MATCHER_NOT_HEADERS_PART  MATCHER_MESSAGE
-%token MATCHER_HEADERS_CONT  MATCHER_NOT_HEADERS_CONT
-%token MATCHER_NOT_MESSAGE  MATCHER_BODY_PART  MATCHER_NOT_BODY_PART
-%token MATCHER_TEST  MATCHER_NOT_TEST  MATCHER_MATCHCASE  MATCHER_MATCH
-%token MATCHER_REGEXPCASE  MATCHER_REGEXP  MATCHER_SCORE  MATCHER_MOVE
-%token MATCHER_FOUND_IN_ADDRESSBOOK MATCHER_NOT_FOUND_IN_ADDRESSBOOK MATCHER_IN
-%token MATCHER_COPY  MATCHER_DELETE  MATCHER_MARK  MATCHER_UNMARK
-%token MATCHER_LOCK MATCHER_UNLOCK
-%token MATCHER_EXECUTE
-%token MATCHER_MARK_AS_READ  MATCHER_MARK_AS_UNREAD  MATCHER_FORWARD
-%token MATCHER_MARK_AS_SPAM MATCHER_MARK_AS_HAM
-%token MATCHER_FORWARD_AS_ATTACHMENT  MATCHER_EOL
-%token MATCHER_OR MATCHER_AND
-%token MATCHER_COLOR MATCHER_SCORE_EQUAL MATCHER_REDIRECT
-%token MATCHER_SIZE_GREATER MATCHER_SIZE_SMALLER MATCHER_SIZE_EQUAL
-%token MATCHER_LOCKED MATCHER_NOT_LOCKED
-%token MATCHER_PARTIAL MATCHER_NOT_PARTIAL
-%token MATCHER_COLORLABEL MATCHER_NOT_COLORLABEL
-%token MATCHER_IGNORE_THREAD MATCHER_NOT_IGNORE_THREAD
-%token MATCHER_WATCH_THREAD MATCHER_NOT_WATCH_THREAD
-%token MATCHER_CHANGE_SCORE MATCHER_SET_SCORE
-%token MATCHER_ADD_TO_ADDRESSBOOK
-%token MATCHER_STOP MATCHER_HIDE MATCHER_IGNORE MATCHER_WATCH
-%token MATCHER_SPAM MATCHER_NOT_SPAM
-%token MATCHER_HAS_ATTACHMENT MATCHER_HAS_NO_ATTACHMENT
-%token MATCHER_SIGNED MATCHER_NOT_SIGNED
-%token MATCHER_TAG MATCHER_NOT_TAG MATCHER_SET_TAG MATCHER_UNSET_TAG
-%token MATCHER_TAGGED MATCHER_NOT_TAGGED MATCHER_CLEAR_TAGS
-
-%start file
-
-%token MATCHER_ENABLED MATCHER_DISABLED
-%token MATCHER_RULENAME
-%token MATCHER_ACCOUNT
-%token <str> MATCHER_STRING
-%token <str> MATCHER_SECTION
-%token <str> MATCHER_INTEGER
-
-%%
-
-file:
-{
-}
-file_line_list;
-
-file_line_list:
-file_line
-file_line_list
-| file_line
-;
-
-file_line:
-section_notification
-|
-{ action_list = NULL; }
-instruction
-| error MATCHER_EOL
-{
-	yyerrok;
-};
-
-section_notification:
-MATCHER_SECTION MATCHER_EOL
-{
-	gchar *folder = $1;
-	FolderItem *item = NULL;
-
-	if (matcher_parse_op == MATCHER_PARSE_FILE) {
-                enable_compatibility = 0;
-		if (!strcmp(folder, "global")) {
-                        /* backward compatibility */
-                        enable_compatibility = 1;
-                }
-                else {
-			item = folder_find_item_from_identifier(folder);
-			if (item != NULL) {
-				prefs_filtering = &item->prefs->processing;
-			} else {
-				prefs_filtering = NULL;
-			}
-		}
-	}
-}
-;
-
-instruction:
-enabled name account condition filtering MATCHER_EOL
-| enabled name account condition filtering
-| enabled name condition filtering MATCHER_EOL
-| enabled name condition filtering
-| name condition filtering MATCHER_EOL
-| name condition filtering
-{
-	if (matcher_parse_op == MATCHER_PARSE_NO_EOL)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [no eol]");
-		YYERROR;
-	}
-}
-| enabled
-{
-	if (matcher_parse_op == MATCHER_PARSE_ENABLED)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [enabled]");
-		YYERROR;
-	}
-}
-| account
-{
-	if (matcher_parse_op == MATCHER_PARSE_ACCOUNT)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [account]");
-		YYERROR;
-	}
-}
-| name
-{
-	if (matcher_parse_op == MATCHER_PARSE_NAME)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [name]");
-		YYERROR;
-	}
-}
-| condition
-{
-	if (matcher_parse_op == MATCHER_PARSE_CONDITION)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [condition]");
-		YYERROR;
-	}
-}
-| filtering_action_list
-{
-	if (matcher_parse_op == MATCHER_PARSE_FILTERING_ACTION)
-		YYACCEPT;
-	else {
-		matcher_parsererror("parse error [filtering action]");
-		YYERROR;
-	}
-}
-| MATCHER_EOL
-;
-
-enabled:
-MATCHER_ENABLED
-{
-	enabled = TRUE;
-}
-| MATCHER_DISABLED
-{
-	enabled = FALSE;
-}
-;
-
-name:
-MATCHER_RULENAME MATCHER_STRING
-{
-	name = g_strdup($2);
-}
-;
-
-account:
-MATCHER_ACCOUNT MATCHER_INTEGER
-{
-	account_id = strtol($2, NULL, 10);
-}
-;
-
-filtering:
-filtering_action_list
-{
-	enabled = TRUE;
-	account_id = 0;
-	g_free(name);
-	name = NULL;
-	cond = NULL;
-	action_list = NULL;
-}
-;
-
-filtering_action_list:
-filtering_action_b filtering_action_list
-| filtering_action_b
-;
-
-filtering_action_b:
-filtering_action
-{
-}
-;
-
-match_type:
-MATCHER_MATCHCASE
-{
-	match_type = MATCHTYPE_MATCHCASE;
-}
-| MATCHER_MATCH
-{
-	match_type = MATCHTYPE_MATCH;
-}
-| MATCHER_REGEXPCASE
-{
-	match_type = MATCHTYPE_REGEXPCASE;
-}
-| MATCHER_REGEXP
-{
-	match_type = MATCHTYPE_REGEXP;
-}
-;
-
-condition:
-condition_list
-{
-	cond = matcherlist_new(matchers_list, (bool_op == MATCHERBOOL_AND));
-	matchers_list = NULL;
-}
-;
-
-condition_list:
-condition_list bool_op one_condition
-{
-	matchers_list = g_slist_append(matchers_list, prop);
-}
-| one_condition
-{
-	matchers_list = NULL;
-	matchers_list = g_slist_append(matchers_list, prop);
-}
-;
-
-bool_op:
-MATCHER_AND
-{
-	bool_op = MATCHERBOOL_AND;
-}
-| MATCHER_OR
-{
-	bool_op = MATCHERBOOL_OR;
-}
-;
-
-one_condition:
-MATCHER_ALL
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_ALL;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_UNREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_UNREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_UNREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_UNREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NEW
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NEW;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_NEW
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_NEW;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_MARKED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_MARKED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_MARKED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_MARKED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_DELETED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_DELETED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_DELETED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_DELETED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_REPLIED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_REPLIED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_REPLIED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_REPLIED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_FORWARDED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_FORWARDED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_FORWARDED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_FORWARDED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_LOCKED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_LOCKED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_LOCKED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_LOCKED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_SPAM
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_SPAM;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_SPAM
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_SPAM;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_HAS_ATTACHMENT
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_HAS_ATTACHMENT;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_HAS_NO_ATTACHMENT
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_HAS_NO_ATTACHMENT;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_SIGNED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_SIGNED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_SIGNED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_SIGNED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_PARTIAL
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_PARTIAL;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_PARTIAL
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_PARTIAL;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_IGNORE_THREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_IGNORE_THREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_IGNORE_THREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_IGNORE_THREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_WATCH_THREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_WATCH_THREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_WATCH_THREAD
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_WATCH_THREAD;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_SUBJECT match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_SUBJECT;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_SUBJECT match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_SUBJECT;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_FROM match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_FROM;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_FROM match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_FROM;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_TO match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_TO;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_TO match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_TO;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_CC match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_CC;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_CC match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_CC;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_TO_OR_CC match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_TO_OR_CC;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_TO_AND_NOT_CC match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_TO_AND_NOT_CC;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_TAG match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_TAG;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_TAG match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_TAG;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_TAGGED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_TAGGED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_NOT_TAGGED
-{
-	gint criteria = 0;
-
-	criteria = MATCHCRITERIA_NOT_TAGGED;
-	prop = matcherprop_new(criteria, NULL, 0, NULL, 0);
-}
-| MATCHER_AGE_GREATER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_AGE_GREATER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_AGE_LOWER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_AGE_LOWER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_AGE_GREATER_HOURS MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_AGE_GREATER_HOURS;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_AGE_LOWER_HOURS MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_AGE_LOWER_HOURS;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_DATE_AFTER MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	time_t value;
-
-	criteria = MATCHCRITERIA_DATE_AFTER;
-	expr = $2;
-	value = procheader_date_parse(NULL, expr, 0);
-	prop = matcherprop_new(criteria, NULL, 0, expr, value);
-}
-| MATCHER_DATE_BEFORE MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	time_t value;
-
-	criteria = MATCHCRITERIA_DATE_BEFORE;
-	expr = $2;
-	value = procheader_date_parse(NULL, expr, 0);
-	prop = matcherprop_new(criteria, NULL, 0, expr, value);
-}
-| MATCHER_NEWSGROUPS match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NEWSGROUPS;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_NEWSGROUPS match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_NEWSGROUPS;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_MESSAGEID match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_MESSAGEID;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_MESSAGEID match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_MESSAGEID;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_INREPLYTO match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_INREPLYTO;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_INREPLYTO match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_INREPLYTO;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_REFERENCES match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_REFERENCES;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_REFERENCES match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_REFERENCES;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_SCORE_GREATER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_SCORE_GREATER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_SCORE_LOWER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_SCORE_LOWER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_SCORE_EQUAL MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value = 0;
-
-	criteria = MATCHCRITERIA_SCORE_EQUAL;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_SIZE_GREATER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value    = 0;
-	criteria = MATCHCRITERIA_SIZE_GREATER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_SIZE_SMALLER MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value    = 0;
-	criteria = MATCHCRITERIA_SIZE_SMALLER;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_SIZE_EQUAL MATCHER_INTEGER
-{
-	gint criteria = 0;
-	gint value    = 0;
-	criteria = MATCHCRITERIA_SIZE_EQUAL;
-	value = strtol($2, NULL, 0);
-	prop = matcherprop_new(criteria, NULL, 0, NULL, value);
-}
-| MATCHER_HEADER MATCHER_STRING
-{
-	header = g_strdup($2);
-} match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_HEADER;
-	expr = $2;
-	prop = matcherprop_new(criteria, header, match_type, expr, 0);
-	g_free(header);
-}
-| MATCHER_NOT_HEADER MATCHER_STRING
-{
-	header = g_strdup($2);
-} match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_HEADER;
-	expr = $2;
-	prop = matcherprop_new(criteria, header, match_type, expr, 0);
-	g_free(header);
-}
-| MATCHER_HEADERS_PART match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_HEADERS_PART;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_HEADERS_PART match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_HEADERS_PART;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_HEADERS_CONT match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_HEADERS_CONT;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_HEADERS_CONT match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_HEADERS_CONT;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_FOUND_IN_ADDRESSBOOK MATCHER_STRING
-{
-	header = g_strdup($2);
-} MATCHER_IN MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_FOUND_IN_ADDRESSBOOK;
-	expr = $2;
-	prop = matcherprop_new(criteria, header, match_type, expr, 0);
-	g_free(header);
-}
-| MATCHER_NOT_FOUND_IN_ADDRESSBOOK MATCHER_STRING
-{
-	header = g_strdup($2);
-} MATCHER_IN MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-
-	criteria = MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK;
-	expr = $2;
-	prop = matcherprop_new(criteria, header, match_type, expr, 0);
-	g_free(header);
-}
-| MATCHER_MESSAGE match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_MESSAGE;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_MESSAGE match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_MESSAGE;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_BODY_PART match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_BODY_PART;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_NOT_BODY_PART match_type MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_BODY_PART;
-	expr = $3;
-	prop = matcherprop_new(criteria, NULL, match_type, expr, 0);
-}
-| MATCHER_TEST MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_TEST;
-	expr = $2;
-	prop = matcherprop_new(criteria, NULL, MATCHTYPE_MATCH, expr, 0);
-}
-| MATCHER_NOT_TEST MATCHER_STRING
-{
-	gint criteria = 0;
-	gchar *expr = NULL;
-	matcher_is_fast = FALSE;
-	criteria = MATCHCRITERIA_NOT_TEST;
-	expr = $2;
-	prop = matcherprop_new(criteria, NULL, MATCHTYPE_MATCH, expr, 0);
-}
-;
-
-filtering_action:
-MATCHER_EXECUTE MATCHER_STRING
-{
-	gchar *cmd = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_EXECUTE;
-	cmd = $2;
-}
-| MATCHER_MOVE MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MOVE;
-	destination = $2;
-}
-| MATCHER_SET_TAG MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_SET_TAG;
-	destination = $2;
-}
-| MATCHER_UNSET_TAG MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_UNSET_TAG;
-	destination = $2;
-}
-| MATCHER_CLEAR_TAGS
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_CLEAR_TAGS;
-}
-| MATCHER_COPY MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_COPY;
-	destination = $2;
-}
-| MATCHER_DELETE
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_DELETE;
-}
-| MATCHER_MARK
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MARK;
-}
-| MATCHER_UNMARK
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_UNMARK;
-}
-| MATCHER_LOCK
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_LOCK;
-}
-| MATCHER_UNLOCK
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_UNLOCK;
-}
-| MATCHER_MARK_AS_READ
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MARK_AS_READ;
-}
-| MATCHER_MARK_AS_UNREAD
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MARK_AS_UNREAD;
-}
-| MATCHER_MARK_AS_SPAM
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MARK_AS_SPAM;
-}
-| MATCHER_MARK_AS_HAM
-{
-	gint action_type = 0;
-
-	action_type = MATCHACTION_MARK_AS_HAM;
-}
-| MATCHER_FORWARD MATCHER_INTEGER MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-	gint account_id = 0;
-
-	action_type = MATCHACTION_FORWARD;
-	account_id = strtol($2, NULL, 10);
-	destination = $3;
-}
-| MATCHER_FORWARD_AS_ATTACHMENT MATCHER_INTEGER MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-	gint account_id = 0;
-
-	action_type = MATCHACTION_FORWARD_AS_ATTACHMENT;
-	account_id = strtol($2, NULL, 10);
-	destination = $3;
-}
-| MATCHER_REDIRECT MATCHER_INTEGER MATCHER_STRING
-{
-	gchar *destination = NULL;
-	gint action_type = 0;
-	gint account_id = 0;
-
-	action_type = MATCHACTION_REDIRECT;
-	account_id = strtol($2, NULL, 10);
-	destination = $3;
-}
-| MATCHER_COLOR MATCHER_INTEGER
-{
-	gint action_type = 0;
-	gint color = 0;
-
-	action_type = MATCHACTION_COLOR;
-	color = strtol($2, NULL, 10);
-}
-| MATCHER_CHANGE_SCORE MATCHER_INTEGER
-{
-        gint score = 0;
-
-        score = strtol($2, NULL, 10);
-}
-/* backward compatibility */
-| MATCHER_SCORE MATCHER_INTEGER
-{
-        gint score = 0;
-
-        score = strtol($2, NULL, 10);
-}
-| MATCHER_SET_SCORE MATCHER_INTEGER
-{
-        gint score = 0;
-
-        score = strtol($2, NULL, 10);
-}
-| MATCHER_HIDE
-{
-}
-| MATCHER_IGNORE
-{
-}
-| MATCHER_WATCH
-{
-}
-| MATCHER_ADD_TO_ADDRESSBOOK MATCHER_STRING
-{
-	header = g_strdup($2);
-} MATCHER_STRING
-{
-	gchar *addressbook = NULL;
-	gint action_type = 0;
-
-	action_type = MATCHACTION_ADD_TO_ADDRESSBOOK;
-	addressbook = $2;
-	g_free(header);
-}
-| MATCHER_STOP
-{
-}
-;
blob - faaa16cb73c1f952387963eb2adfada6825f343f
blob + 72d2996dc7b4d7a8afa8ed25919041868a97c139
--- src/messageview.c
+++ src/messageview.c
@@ -16,7 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
blob - 7706c15bee311470f432bbe62801e3f179c7ea41
blob + 8497a870f195d931ce09c593604eae4fbd027dcd
--- src/messageview.h
+++ src/messageview.h
@@ -34,7 +34,6 @@
 
 #define MESSAGE_VIEW_SHOW_DONE_HOOKLIST "message_view_show_done_hooklist"
 
-
 struct _MessageView
 {
 	GtkWidget *vbox;
blob - abd39987b3880bbfb3a757f18096b0ae91a4fd13
blob + 19ae4d124ee75182ff042ee1acce73c2a2c853d5
--- src/mh.c
+++ src/mh.c
@@ -134,7 +134,6 @@ FolderClass *mh_get_class(void)
 		mh_class.type = F_MH;
 		mh_class.idstr = "mh";
 		mh_class.uistr = "MH";
-		mh_class.supports_server_search = FALSE;
 
 		/* Folder functions */
 		mh_class.new_folder = mh_folder_new;
@@ -162,7 +161,6 @@ FolderClass *mh_get_class(void)
 		mh_class.add_msgs = mh_add_msgs;
 		mh_class.copy_msg = mh_copy_msg;
 		mh_class.copy_msgs = mh_copy_msgs;
-		mh_class.search_msgs = folder_item_search_msgs_local;
 		mh_class.remove_msg = mh_remove_msg;
 		mh_class.remove_msgs = mh_remove_msgs;
 		mh_class.remove_all_msg = mh_remove_all_msg;
blob - 48e43950bb2df95f3eab854c3babb7791079f3ba
blob + b65cce8a5bf5df6969bb7f804b8651c6c503bcbd
--- src/mimeview.c
+++ src/mimeview.c
@@ -2624,14 +2624,5 @@ void mimeview_handle_cmd(MimeView *mimeview, const gch
 	} else if (!strcmp(cmd, "cm://menu_attachment") && data != NULL) {
 		mimeview->spec_part = (MimeInfo *)data;
 		part_button_pressed(mimeview, event, (MimeInfo *)data);
-	} else if (!strncmp(cmd, "cm://search_tags:", strlen("cm://search_tags:"))) {
-		const gchar *tagname = cmd + strlen("cm://search_tags:");
-		gchar *buf = g_strdup_printf("tag matchcase \"%s\"", tagname);
-		gtk_toggle_button_set_active(
-				GTK_TOGGLE_BUTTON(mimeview->messageview->mainwin->summaryview->toggle_search),
-				TRUE);
-		quicksearch_set(mimeview->messageview->mainwin->summaryview->quicksearch,
-				ADVANCED_SEARCH_EXTENDED, buf);
-		g_free(buf);
 	}
 }
blob - b94a016bd3b312b06f9ce241c4772a68abdca613
blob + 7bd124d5ed87ca5192be5cf097fe5fe99541efd4
--- src/noticeview.h
+++ src/noticeview.h
@@ -1,4 +1,4 @@
-/* 
+/*
  * Claws Mail -- a GTK based, lightweight, and fast e-mail client
  * Copyright (C) 2002-2012 Hiroyuki Yamamoto & The Claws Mail Team
  *
@@ -49,10 +49,10 @@ void		 noticeview_set_icon	(NoticeView	*noticeview,
 					 StockPixmap	 icon);
 void		 noticeview_set_text	(NoticeView	*noticeview,
 					 const gchar	*text);
-void		 noticeview_set_button_text 
+void		 noticeview_set_button_text
 					(NoticeView	*noticeview,
 					 const gchar    *text);
-void		 noticeview_set_2ndbutton_text 
+void		 noticeview_set_2ndbutton_text
 					(NoticeView	*noticeview,
 					 const gchar    *text);
 gboolean	 noticeview_is_visible  (NoticeView	*noticeview);
blob - 196ca1caca4f0ca8710e2d10952880bca9eaac1d
blob + 3fca9de6f80714c6be083e43d6f8ec47db245ff3
--- src/oauth2.c
+++ src/oauth2.c
@@ -22,8 +22,6 @@
 #include "claws-features.h"
 #endif
 
-#ifdef USE_OAUTH2
-
 #include "defs.h"
 #include <glib.h>
 #ifdef ENABLE_NLS
@@ -901,5 +899,3 @@ gint oauth2_init (OAUTH2Data *OAUTH2Data)
 
 	 return (0);
 }
-
-#endif	/* USE_OAUTH2 */
blob - 9d441f57183c68e24f9192706bab97dd80c9e7ef
blob + 487a0f84251e2b54ebcf2d2ead7cea60c54f42d6
--- src/oauth2.h
+++ src/oauth2.h
@@ -14,15 +14,12 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
-#ifdef HAVE_CONFIG_H
-#include "claws-features.h"
-#endif
+#ifndef _OAUTH2_H_
+#define _OAUTH2_H_
 
-#ifdef USE_OAUTH2
-
 #include <glib.h>
 
 #include "socket.h"
@@ -85,4 +82,4 @@ typedef struct _Oauth2Info  Oauth2Info;
 
 void account_read_oauth2_all (void);
 
-#endif	/* USE_OAUTH2 */
+#endif /* _OAUTH2_H_ */
blob - f36f77ab8b322829d5077e63b1d0bf8dfe120649
blob + 2e23e403d81d150fa08339049c5365fc15dc16be
--- src/pop.c
+++ src/pop.c
@@ -39,9 +39,7 @@
 #include "file-utils.h"
 #include "oauth2.h"
 
-#ifdef USE_OAUTH2
 #include "defs.h"
-#endif
 
 typedef enum {
 	POP3_TOTALLY_RECEIVED	= 0,
@@ -53,10 +51,8 @@ static gint pop3_greeting_recv		(Pop3Session *session,
 					 const gchar *msg);
 static gint pop3_getauth_user_send	(Pop3Session *session);
 static gint pop3_getauth_pass_send	(Pop3Session *session);
-#ifdef USE_GNUTLS
 static gint pop3_stls_send		(Pop3Session *session);
 static gint pop3_stls_recv		(Pop3Session *session);
-#endif
 static gint pop3_getrange_stat_send	(Pop3Session *session);
 static gint pop3_getrange_stat_recv	(Pop3Session *session,
 					 const gchar *msg);
@@ -108,7 +104,6 @@ static gint pop3_greeting_recv(Pop3Session *session, c
 	return PS_SUCCESS;
 }
 
-#ifdef USE_GNUTLS
 static gint pop3_stls_send(Pop3Session *session)
 {
 	session->state = POP3_STLS;
@@ -124,7 +119,6 @@ static gint pop3_stls_recv(Pop3Session *session)
 	}
 	return PS_SUCCESS;
 }
-#endif /* USE_GNUTLS */
 
 static gint pop3_getauth_user_send(Pop3Session *session)
 {
@@ -144,7 +138,6 @@ static gint pop3_getauth_pass_send(Pop3Session *sessio
 	return PS_SUCCESS;
 }
 
-#ifdef USE_OAUTH2
 static gint pop3_getauth_oauth2_send_generic(Pop3Session *session)
 {
 	gchar buf[MESSAGEBUFSIZE], *b64buf, *out;
@@ -215,7 +208,6 @@ static gint pop3_getauth_oauth2_send(Pop3Session *sess
 		 : pop3_getauth_oauth2_send_generic(session)
 		 );
 }
-#endif
 
 static gint pop3_getrange_stat_send(Pop3Session *session)
 {
@@ -516,10 +508,8 @@ static void pop3_gen_send(Pop3Session *session, const 
 
 	if (!g_ascii_strncasecmp(buf, "PASS ", 5))
 		log_print(LOG_PROTOCOL, "POP> PASS ********\n");
-#ifdef USE_OAUTH2
 	else if  (!g_ascii_strncasecmp(buf, "AUTH XOAUTH2", 12))
 		log_print(LOG_PROTOCOL, "POP> AUTH XOAUTH2  ********\n");
-#endif
 	else if (length > 128)
 		log_print(LOG_PROTOCOL, "POP> %.128s... (truncated from %d)\n", buf, length);
 	else
@@ -548,12 +538,10 @@ Session *pop3_session_new(PrefsAccount *account)
 	SESSION(session)->ssl_cert_auto_accept = TRUE;
 	SESSION(session)->destroy = pop3_session_destroy;
 
-#ifdef USE_GNUTLS
 	if (account->set_gnutls_priority && account->gnutls_priority &&
 			strlen(account->gnutls_priority) != 0)
 		SESSION(session)->gnutls_priority = g_strdup(account->gnutls_priority);
 	SESSION(session)->use_tls_sni = account->use_tls_sni;
-#endif
 
 	session->state = POP3_READY;
 	session->ac_prefs = account;
@@ -563,7 +551,6 @@ Session *pop3_session_new(PrefsAccount *account)
 	session->error_val = PS_SUCCESS;
 	session->error_msg = NULL;
 
-#ifdef USE_OAUTH2
 	if(session->ac_prefs->use_pop_auth && session->ac_prefs->pop_auth_type == POPAUTH_OAUTH2){
 	       //Set up for two stage sessions - link provider selected in ac_prefs to the config file
 	       GList *oauth2_providers_list = oauth2_providers_get_list();
@@ -573,7 +560,6 @@ Session *pop3_session_new(PrefsAccount *account)
 	       debug_print("POP - Oauth2 name: %s Two stage POP: %i\n", oa2->oa2_name, oa2->oa2_two_stage_pop);
 	       session->two_stage_pop = oa2->oa2_two_stage_pop;
 	}
-#endif
 
 	return SESSION(session);
 }
@@ -901,12 +887,10 @@ static Pop3ErrorValue pop3_ok(Pop3Session *session, co
 			ok = PS_ERROR;
 		} else {
 			switch (session->state) {
-#ifdef USE_GNUTLS
 			case POP3_STLS:
 				log_error(LOG_PROTOCOL, _("couldn't start STARTTLS session\n"));
 				ok = PS_ERROR;
 				break;
-#endif
 			case POP3_GETAUTH_USER:
 			case POP3_GETAUTH_PASS:
 				log_error(LOG_PROTOCOL, _("error occurred on authentication\n"));
@@ -964,42 +948,30 @@ static gint pop3_session_recv_msg(Session *session, co
 	case POP3_READY:
 	case POP3_GREETING:
 		pop3_greeting_recv(pop3_session, body);
-#ifdef USE_GNUTLS
 		if (pop3_session->ac_prefs->ssl_pop == SSL_STARTTLS)
 			val = pop3_stls_send(pop3_session);
 		else
-#endif
-#ifdef USE_OAUTH2
 		if (pop3_session->ac_prefs->use_pop_auth && pop3_session->ac_prefs->pop_auth_type == POPAUTH_OAUTH2)
 			val = pop3_getauth_oauth2_send(pop3_session);
 		else
-#endif
 			val = pop3_getauth_user_send(pop3_session);
 		break;
-#ifdef USE_GNUTLS
 	case POP3_STLS:
 		if (pop3_stls_recv(pop3_session) != PS_SUCCESS)
 			return -1;
-#ifdef USE_OAUTH2
 		else if (pop3_session->ac_prefs->use_pop_auth && pop3_session->ac_prefs->pop_auth_type == POPAUTH_OAUTH2)
 			val = pop3_getauth_oauth2_send(pop3_session);
-#endif
 		else
 			val = pop3_getauth_user_send(pop3_session);
 		break;
-#endif
 	case POP3_GETAUTH_USER:
 		val = pop3_getauth_pass_send(pop3_session);
 		break;
-#ifdef USE_OAUTH2
 	case POP3_GETAUTH_USER_PHASE2:
 		val = pop3_getauth_oauth2_send_microsoft_2(pop3_session);
 		break;
-#endif
 	case POP3_GETAUTH_PASS:
-#ifdef USE_OAUTH2
 	case POP3_GETAUTH_OAUTH2:
-#endif
 		if (!pop3_session->pop_before_smtp)
 			val = pop3_getrange_stat_send(pop3_session);
 		else
blob - d84cef6ab00ec85bffedc2d2212f82b305789e64
blob + 7b2c0853cbd64e4b9d1386a1941980bd23e1c591
--- src/pop.h
+++ src/pop.h
@@ -16,13 +16,9 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef __POP_H__
-#define __POP_H__
+#ifndef _POP_H_
+#define _POP_H_
 
-#ifdef HAVE_CONFIG_H
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <time.h>
 
@@ -46,9 +42,7 @@ typedef struct _MailReceiveData	MailReceiveData;
 typedef enum {
 	POP3_READY,
 	POP3_GREETING,
-#ifdef USE_GNUTLS
 	POP3_STLS,
-#endif
 	POP3_GETAUTH_USER,
 	POP3_GETAUTH_USER_PHASE2,
 	POP3_GETAUTH_PASS,
@@ -130,9 +124,8 @@ struct _Pop3Session
 	gint cur_total_bytes;
 	gint cur_total_recv_bytes;
 
-#ifdef USE_OAUTH2
         gint two_stage_pop;
-#endif
+
 	Pop3MsgInfo *msg;
 
 	GHashTable *uidl_table;
@@ -160,4 +153,4 @@ struct _Pop3Session
 Session *pop3_session_new	(PrefsAccount	*account);
 gint pop3_write_uidl_list	(Pop3Session	*session);
 
-#endif /* __POP_H__ */
+#endif /* _POP_H_ */
blob - be0645c39396429c38d93e9b8aaa67cdbe84094e
blob + e82575f19b9355a780015381c228da6275eca4fb
--- src/prefs_account.c
+++ src/prefs_account.c
@@ -56,22 +56,17 @@
 #include "smtp.h"
 #include "imap.h"
 #include "pop.h"
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 #include "remotefolder.h"
 #include "combobox.h"
 #include "setup.h"
-#include "quote_fmt.h"
 #include "hooks.h"
 #include "privacy.h"
 #include "inputdialog.h"
-#include "ssl_certificate.h"
+#include "common/ssl_certificate.h"
 #include "passwordstore.h"
 #include "file-utils.h"
-#ifdef USE_GNUTLS
 #include <gnutls/gnutls.h>
-#endif
 
 static gboolean cancelled;
 static gboolean new_account;
@@ -84,12 +79,10 @@ static GtkWidget *entry_sigpath;
 static GtkWidget *signature_browse_button;
 static GtkWidget *signature_edit_button;
 
-#ifdef USE_GNUTLS
 static GtkWidget *entry_in_cert_file;
 static GtkWidget *entry_out_cert_file;
 static GtkWidget *in_ssl_cert_browse_button;
 static GtkWidget *out_ssl_cert_browse_button;
-#endif
 
 struct AutocheckWidgets {
 	GtkWidget *autochk_hour_spinbtn;
@@ -99,11 +92,9 @@ struct AutocheckWidgets {
 
 static GSList *prefs_pages = NULL;
 
-#ifdef USE_OAUTH2
 static GTask *oauth2_listener_task;
 static int oauth2_listener_cancel = 0;
 static int oauth2_listener_closed = 0;
-#endif
 
 typedef struct BasicPage
 {
@@ -196,7 +187,6 @@ typedef struct SendPage
 	GtkWidget *pop_auth_minutes_lbl;
 } SendPage;
 
-#ifdef USE_OAUTH2
 typedef struct Oauth2Page
 {
 	PrefsPage page;
@@ -214,7 +204,6 @@ typedef struct Oauth2Page
 	GtkWidget *oauth2_client_id_entry;
 	GtkWidget *oauth2_client_secret_entry;
 } Oauth2Page;
-#endif
 
 typedef struct
 {
@@ -332,14 +321,10 @@ typedef struct AdvancedPage
 static BasicPage basic_page;
 static ReceivePage receive_page;
 static SendPage send_page;
-#ifdef USE_OAUTH2
 static Oauth2Page oauth2_page;
-#endif
 static ComposePage compose_page;
 static PrivacyPage privacy_page;
-#ifdef USE_GNUTLS
 static SSLPage ssl_page;
-#endif
 static AdvancedPage advanced_page;
 
 struct BasicProtocol {
@@ -357,14 +342,12 @@ static char *protocol_names[] = {
 	N_("None (SMTP only)")
 };
 
-#ifdef USE_OAUTH2
 struct Oauth2Listener {
 	int success;
   	Oauth2Service service;
 	OAUTH2Data *OAUTH2Data;
 	gchar *trim_text;
 };
-#endif
 
 static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam);
 static void prefs_account_protocol_set_optmenu		(PrefParam *pparam);
@@ -379,7 +362,7 @@ static void prefs_account_smtp_auth_type_set_data_from
 static void prefs_account_smtp_auth_type_set_optmenu	(PrefParam *pparam);
 static void prefs_account_pop_auth_type_set_data_from_optmenu (PrefParam *pparam);
 static void prefs_account_pop_auth_type_set_optmenu	(PrefParam *pparam);
-#ifdef USE_OAUTH2
+
 static void prefs_account_oauth2_provider_set_data_from_optmenu	(PrefParam *pparam);
 static void prefs_account_oauth2_provider_set_optmenu	(PrefParam *pparam);
 static void prefs_account_oauth2_copy_url                       (GtkButton *button, gpointer data);
@@ -389,7 +372,7 @@ static int  prefs_account_oauth2_get_line(int sock, ch
 static void prefs_account_oauth2_set_sensitivity(void);
 static void prefs_account_oauth2_set_auth_sensitivity(void);
 static void prefs_account_oauth2_obtain_tokens(GtkButton *button, gpointer data);
-#endif
+
 static void prefs_account_set_autochk_interval_from_widgets(PrefParam *pparam);
 static void prefs_account_set_autochk_interval_to_widgets(PrefParam *pparam);
 
@@ -559,7 +542,6 @@ static PrefParam send_param[] = {
 };
 
 static PrefParam oauth2_param[] = {
-#ifdef USE_OAUTH2
 	{"oauth2_auth_provider", "0", &tmp_ac_prefs.oauth2_provider, P_ENUM,
 	 &oauth2_page.oauth2_auth_optmenu,
 	 prefs_account_oauth2_provider_set_data_from_optmenu,
@@ -576,24 +558,7 @@ static PrefParam oauth2_param[] = {
 
 	{"oauth2_client_secret", NULL, &tmp_ac_prefs.oauth2_client_secret, P_STRING,
 	 &oauth2_page.oauth2_client_secret_entry, prefs_set_data_from_entry, prefs_set_entry},
-#else
-	{"oauth2_auth_provider", "0", &tmp_ac_prefs.oauth2_provider, P_ENUM,
-	 NULL, NULL, NULL},
 
-	{"oauth2_date", 0, &tmp_ac_prefs.oauth2_date, P_INT,
-	 NULL, NULL, NULL},
-
-	{"oauth2_authcode", NULL, &tmp_ac_prefs.oauth2_authcode, P_PASSWORD,
-	 NULL, NULL, NULL},
-
-	{"oauth2_client_id", NULL, &tmp_ac_prefs.oauth2_client_id, P_STRING,
-	 NULL, NULL, NULL},
-
-	{"oauth2_client_secret", NULL, &tmp_ac_prefs.oauth2_client_secret, P_STRING,
-	 NULL, NULL, NULL},
-
-#endif
-
 	{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
 };
 
@@ -683,7 +648,6 @@ static PrefParam privacy_param[] = {
 };
 
 static PrefParam ssl_param[] = {
-#ifdef USE_GNUTLS
 	{"ssl_pop", "1", &tmp_ac_prefs.ssl_pop, P_ENUM,
 	 &ssl_page.pop_nossl_radiobtn,
 	 prefs_account_enum_set_data_from_radiobtn,
@@ -717,32 +681,7 @@ static PrefParam ssl_param[] = {
 
 	{"out_ssl_client_cert_pass", "", &tmp_ac_prefs.out_ssl_client_cert_pass, P_PASSWORD,
 	 NULL, NULL, NULL},
-#else
-	{"ssl_pop", "0", &tmp_ac_prefs.ssl_pop, P_ENUM,
-	 NULL, NULL, NULL},
 
-	{"ssl_imap", "0", &tmp_ac_prefs.ssl_imap, P_ENUM,
-	 NULL, NULL, NULL},
-
-	{"ssl_smtp", "0", &tmp_ac_prefs.ssl_smtp, P_ENUM,
-	 NULL, NULL, NULL},
-
-	{"in_ssl_client_cert_file", "", &tmp_ac_prefs.in_ssl_client_cert_file, P_STRING,
-	 NULL, NULL, NULL},
-
-	{"in_ssl_client_cert_pass", "", &tmp_ac_prefs.in_ssl_client_cert_pass, P_PASSWORD,
-	 NULL, NULL, NULL},
-
-	{"out_ssl_client_cert_file", "", &tmp_ac_prefs.out_ssl_client_cert_file, P_STRING,
-	 NULL, NULL, NULL},
-
-	{"out_ssl_client_cert_pass", "", &tmp_ac_prefs.out_ssl_client_cert_pass, P_PASSWORD,
-	 NULL, NULL, NULL},
-
-	{"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
-	 NULL, NULL, NULL},
-#endif /* USE_GNUTLS */
-
 	{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
 };
 
@@ -779,13 +718,11 @@ static PrefParam advanced_param[] = {
 	 &advanced_page.domain_entry,
 	 prefs_set_data_from_entry, prefs_set_entry},
 
-#ifdef USE_GNUTLS
 	{"gnutls_set_priority", "FALSE", &tmp_ac_prefs.set_gnutls_priority, P_BOOL,
 	 NULL, NULL, NULL},
 
 	{"gnutls_priority", NULL, &tmp_ac_prefs.gnutls_priority, P_STRING,
 	 NULL, NULL, NULL},
-#endif
 
 	{"set_tunnelcmd", "FALSE", &tmp_ac_prefs.set_tunnelcmd, P_BOOL,
 	 &advanced_page.tunnelcmd_checkbtn,
@@ -836,19 +773,15 @@ static void prefs_account_sigfile_radiobtn_cb	(GtkWidg
 static void prefs_account_sigcmd_radiobtn_cb	(GtkWidget	*widget, gpointer	 data);
 
 static void prefs_account_signature_browse_cb	(GtkWidget	*widget, gpointer	 data);
-#ifdef USE_GNUTLS
 static void prefs_account_in_cert_browse_cb	(GtkWidget	*widget, gpointer	 data);
 
 static void prefs_account_out_cert_browse_cb	(GtkWidget	*widget, gpointer	 data);
-#endif
 static void prefs_account_signature_edit_cb	(GtkWidget	*widget, gpointer	 data);
 
 static void pop_bfr_smtp_tm_set_sens		(GtkWidget	*widget, gpointer	 data);
 
-#if (defined USE_GNUTLS)
 static void auto_configure_cb			(GtkWidget	*widget, gpointer	 data);
 
-#endif
 static void prefs_account_edit_custom_header	(void);
 
 static void prefs_account_receive_itv_spinbutton_value_changed_cb(GtkWidget *w, gpointer data);
@@ -1057,14 +990,12 @@ static void basic_create_widget_func(PrefsPage * _page
 	auto_configure_lbl = gtk_label_new("");
 	gtk_label_set_justify(GTK_LABEL(auto_configure_lbl), GTK_JUSTIFY_LEFT);
 	gtk_box_pack_start(GTK_BOX (optmenubox), auto_configure_lbl, FALSE, FALSE, 0);
-#if (defined USE_GNUTLS)
 	gtk_widget_show(auto_configure_btn);
 	gtk_widget_show(auto_configure_lbl);
 	g_signal_connect (G_OBJECT (auto_configure_btn), "clicked",
 			  G_CALLBACK (auto_configure_cb), NULL);
 	g_signal_connect (G_OBJECT (auto_configure_cancel_btn), "clicked",
 			  G_CALLBACK (auto_configure_cb), NULL);
-#endif
 
 	no_imap_warn_icon = gtk_image_new_from_icon_name
                         ("dialog-warning-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
@@ -1335,9 +1266,6 @@ static void receive_create_widget_func(PrefsPage * _pa
 	COMBOBOX_ADD (menu2, _("Select"), 0);
 	COMBOBOX_ADD (menu2, NULL, 0);
 	COMBOBOX_ADD (menu2, "OAuth2", POPAUTH_OAUTH2);
-#ifndef USE_OAUTH2
-	gtk_list_store_set(menu2, &iter, COMBOBOX_SENS, FALSE, -1);
-#endif
 
 	SET_TOGGLE_SENSITIVITY (pop_auth_checkbtn, vbox5);
 
@@ -1433,9 +1361,6 @@ static void receive_create_widget_func(PrefsPage * _pa
 	COMBOBOX_ADD (menu, "PLAIN", IMAP_AUTH_PLAIN);
 	COMBOBOX_ADD (menu, "LOGIN", IMAP_AUTH_LOGIN);
 	COMBOBOX_ADD (menu, "OAUTH2", IMAP_AUTH_OAUTH2);
-#ifndef USE_OAUTH2
-	gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1);
-#endif
 
 	hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
 	gtk_widget_show (hbox1);
@@ -1684,10 +1609,7 @@ static void send_create_widget_func(PrefsPage * _page,
 	COMBOBOX_ADD (menu, "PLAIN", SMTPAUTH_PLAIN);
 	COMBOBOX_ADD (menu, "LOGIN", SMTPAUTH_LOGIN);
 	COMBOBOX_ADD (menu, "OAUTH2", SMTPAUTH_OAUTH2);
-#ifndef USE_OAUTH2
 	gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1);
-#endif
-	gtk_list_store_set(menu, &iter, COMBOBOX_SENS, FALSE, -1);
 
 	PACK_SPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
 
@@ -1816,7 +1738,6 @@ static void send_create_widget_func(PrefsPage * _page,
 	page->page.widget = vbox1;
 }
 
-#ifdef USE_OAUTH2
 static void oauth2_create_widget_func(PrefsPage * _page,
                                            GtkWindow * window,
                                            gpointer data)
@@ -2033,7 +1954,6 @@ static void oauth2_create_widget_func(PrefsPage * _pag
 		}
 	}
 }
-#endif
 
 static void compose_create_widget_func(PrefsPage * _page,
                                            GtkWindow * window,
@@ -2312,8 +2232,6 @@ static void privacy_create_widget_func(PrefsPage * _pa
 			   GINT_TO_POINTER (data));			\
 }
 
-#ifdef USE_GNUTLS
-
 #define CREATE_RADIO_BUTTONS(box,					\
 			     btn1, btn1_label, btn1_data,		\
 			     btn2, btn2_label, btn2_data,		\
@@ -2609,7 +2527,6 @@ static void ssl_create_widget_func(PrefsPage * _page,
 }
 
 #undef CREATE_RADIO_BUTTONS
-#endif /* USE_GNUTLS */
 
 static void advanced_create_widget_func(PrefsPage * _page,
                                            GtkWindow * window,
@@ -2901,10 +2818,8 @@ static gint prefs_basic_apply(void)
 			gtk_entry_get_text(GTK_ENTRY(basic_page.pass_entry)),
 			FALSE);
 
-#ifdef USE_OAUTH2
 	/* Manual password change - reset expiry on OAUTH2 tokens*/
 	passwd_store_set_account(tmp_ac_prefs.account_id, PWS_ACCOUNT_OAUTH2_EXPIRY, "0", FALSE);
-#endif
 
 	if (protocol == A_IMAP4) {
 		new_id = g_strdup_printf("#imap/%s", tmp_ac_prefs.account_name);
@@ -2943,16 +2858,13 @@ static gint prefs_send_apply(void)
 			PWS_ACCOUNT_SEND,
 			gtk_entry_get_text(GTK_ENTRY(send_page.smtp_pass_entry)),
 			FALSE);
-#ifdef USE_OAUTH2
 	/* Manual password change - reset expiry on OAUTH2 tokens*/
 	if (tmp_ac_prefs.use_smtp_auth && tmp_ac_prefs.smtp_auth_type == SMTPAUTH_OAUTH2)
 		passwd_store_set_account(tmp_ac_prefs.account_id, PWS_ACCOUNT_OAUTH2_EXPIRY, "0", FALSE);
-#endif
 
 	return 0;
 }
 
-#ifdef USE_OAUTH2
 static gint prefs_oauth2_apply(void)
 {
 	prefs_set_data_from_dialog(oauth2_param);
@@ -2965,7 +2877,6 @@ static gint prefs_oauth2_apply(void)
 
  	return 0;
 }
-#endif
 
 static gint prefs_compose_apply(void)
 {
@@ -2979,7 +2890,6 @@ static gint prefs_privacy_apply(void)
 	return 0;
 }
 
-#ifdef USE_GNUTLS
 static gint prefs_ssl_apply(void)
 {
 	prefs_set_data_from_dialog(ssl_param);
@@ -2996,7 +2906,6 @@ static gint prefs_ssl_apply(void)
 
 	return 0;
 }
-#endif
 
 static gint prefs_advanced_apply(void)
 {
@@ -3045,7 +2954,6 @@ static void send_destroy_widget_func(PrefsPage *_page)
 	/* SendPage *page = (SendPage *) _page; */
 }
 
-#ifdef USE_OAUTH2
 static void oauth2_destroy_widget_func(PrefsPage *_page)
 {
 	/* Oauth2Page *page = (Oauth2Page *) _page; */
@@ -3055,7 +2963,6 @@ static void oauth2_destroy_widget_func(PrefsPage *_pag
 		oauth2_listener_cancel = 1;
 	}
 }
-#endif
 
 static void compose_destroy_widget_func(PrefsPage *_page)
 {
@@ -3067,12 +2974,10 @@ static void privacy_destroy_widget_func(PrefsPage *_pa
 	/* PrivacyPage *page = (PrivacyPage *) _page; */
 }
 
-#ifdef USE_GNUTLS
 static void ssl_destroy_widget_func(PrefsPage *_page)
 {
 	/* SSLPage *page = (SSLPage *) _page; */
 }
-#endif
 
 static void advanced_destroy_widget_func(PrefsPage *_page)
 {
@@ -3109,7 +3014,6 @@ static gboolean send_can_close_func(PrefsPage *_page)
 	return prefs_send_apply() >= 0;
 }
 
-#ifdef USE_OAUTH2
 static gboolean oauth2_can_close_func(PrefsPage *_page)
 {
 	Oauth2Page *page = (Oauth2Page *) _page;
@@ -3119,7 +3023,6 @@ static gboolean oauth2_can_close_func(PrefsPage *_page
 
 	return prefs_oauth2_apply() >= 0;
 }
-#endif
 
 static gboolean compose_can_close_func(PrefsPage *_page)
 {
@@ -3141,7 +3044,6 @@ static gboolean privacy_can_close_func(PrefsPage *_pag
 	return prefs_privacy_apply() >= 0;
 }
 
-#ifdef USE_GNUTLS
 static gboolean ssl_can_close_func(PrefsPage *_page)
 {
 	SSLPage *page = (SSLPage *) _page;
@@ -3151,7 +3053,6 @@ static gboolean ssl_can_close_func(PrefsPage *_page)
 
 	return prefs_ssl_apply() >= 0;
 }
-#endif
 
 static gboolean advanced_can_close_func(PrefsPage *_page)
 {
@@ -3196,7 +3097,6 @@ static void send_save_func(PrefsPage *_page)
 		cancelled = FALSE;
 }
 
-#ifdef USE_OAUTH2
 static void oauth2_save_func(PrefsPage *_page)
 {
 	Oauth2Page *page = (Oauth2Page *) _page;
@@ -3207,7 +3107,6 @@ static void oauth2_save_func(PrefsPage *_page)
 	if (prefs_oauth2_apply() >= 0)
 		cancelled = FALSE;
 }
-#endif
 
 static void compose_save_func(PrefsPage *_page)
 {
@@ -3231,7 +3130,6 @@ static void privacy_save_func(PrefsPage *_page)
 		cancelled = FALSE;
 }
 
-#ifdef USE_GNUTLS
 static void ssl_save_func(PrefsPage *_page)
 {
 	SSLPage *page = (SSLPage *) _page;
@@ -3242,7 +3140,6 @@ static void ssl_save_func(PrefsPage *_page)
 	if (prefs_ssl_apply() >= 0)
 		cancelled = FALSE;
 }
-#endif
 
 static void advanced_save_func(PrefsPage *_page)
 {
@@ -3309,7 +3206,6 @@ static void register_send_page(void)
 	prefs_account_register_page((PrefsPage *) &send_page);
 }
 
-#ifdef USE_OAUTH2
 static void register_oauth2_page(void)
 {
 	static gchar *path[3];
@@ -3327,7 +3223,6 @@ static void register_oauth2_page(void)
 
 	prefs_account_register_page((PrefsPage *) &oauth2_page);
 }
-#endif
 
 static void register_compose_page(void)
 {
@@ -3365,7 +3260,6 @@ static void register_privacy_page(void)
 	prefs_account_register_page((PrefsPage *) &privacy_page);
 }
 
-#ifdef USE_GNUTLS
 static void register_ssl_page(void)
 {
 	static gchar *path[3];
@@ -3447,7 +3341,6 @@ static gboolean sslcert_get_password(gpointer source, 
 
 	return TRUE;
 }
-#endif
 
 static void register_advanced_page(void)
 {
@@ -3474,14 +3367,10 @@ void prefs_account_init()
 	register_send_page();
 	register_compose_page();
 	register_privacy_page();
-#ifdef USE_GNUTLS
 	register_ssl_page();
 	hooks_register_hook(SSLCERT_GET_CLIENT_CERT_HOOKLIST, sslcert_get_client_cert_hook, NULL);
 	hooks_register_hook(SSL_CERT_GET_PASSWORD, sslcert_get_password, NULL);
-#endif
-#ifdef USE_OAUTH2
 	register_oauth2_page();
-#endif
 	register_advanced_page();
 }
 
@@ -3856,7 +3745,6 @@ static void prefs_account_select_folder_cb(GtkWidget *
 	}
 }
 
-#if (defined USE_GNUTLS)
 static void auto_configure_cb (GtkWidget *widget, gpointer data)
 {
 	gchar *address = NULL;
@@ -3956,7 +3844,6 @@ static void auto_configure_cb (GtkWidget *widget, gpoi
 
 	g_free(address);
 }
-#endif
 
 static void prefs_account_sigfile_radiobtn_cb(GtkWidget *widget, gpointer data)
 {
@@ -3987,7 +3874,6 @@ static void prefs_account_signature_browse_cb(GtkWidge
 	g_free(utf8_filename);
 }
 
-#ifdef USE_GNUTLS
 static void prefs_account_in_cert_browse_cb(GtkWidget *widget, gpointer data)
 {
 	gchar *filename;
@@ -4021,7 +3907,6 @@ static void prefs_account_out_cert_browse_cb(GtkWidget
 	gtk_entry_set_text(GTK_ENTRY(entry_out_cert_file), utf8_filename);
 	g_free(utf8_filename);
 }
-#endif
 
 static void prefs_account_signature_edit_cb(GtkWidget *widget, gpointer data)
 {
@@ -4181,7 +4066,6 @@ static void prefs_account_pop_auth_type_set_optmenu(Pr
 	combobox_select_by_data(optmenu, type);
 }
 
-#ifdef USE_OAUTH2
 static void prefs_account_oauth2_provider_set_data_from_optmenu(PrefParam *pparam)
 {
 	*((Oauth2Service *)pparam->data) =
@@ -4338,7 +4222,6 @@ static void prefs_account_oauth2_obtain_tokens(GtkButt
 	g_free(trim_text);
 	g_free(OAUTH2Data);
 }
-#endif
 
 static void prefs_account_set_autochk_interval_to_widgets(PrefParam *pparam)
 {
@@ -4511,11 +4394,9 @@ static void prefs_account_protocol_changed(GtkComboBox
 				 TRUE);
 		}
 
-#ifdef USE_GNUTLS
 		gtk_widget_hide(ssl_page.pop_frame);
 		gtk_widget_hide(ssl_page.imap_frame);
 		gtk_widget_show(ssl_page.send_frame);
-#endif
 		gtk_widget_hide(advanced_page.popport_hbox);
 		gtk_widget_hide(advanced_page.imapport_hbox);
 		gtk_widget_hide(advanced_page.tunnelcmd_checkbtn);
@@ -4574,11 +4455,9 @@ static void prefs_account_protocol_changed(GtkComboBox
 				 FALSE);
 		}
 
-#ifdef USE_GNUTLS
 		gtk_widget_hide(ssl_page.pop_frame);
 		gtk_widget_show(ssl_page.imap_frame);
 		gtk_widget_show(ssl_page.send_frame);
-#endif
 		gtk_widget_hide(advanced_page.popport_hbox);
 		gtk_widget_show(advanced_page.imapport_hbox);
 		gtk_widget_show(advanced_page.tunnelcmd_checkbtn);
@@ -4632,11 +4511,9 @@ static void prefs_account_protocol_changed(GtkComboBox
 		gtk_toggle_button_set_active
 			(GTK_TOGGLE_BUTTON(receive_page.recvatgetall_checkbtn), FALSE);
 
-#ifdef USE_GNUTLS
 		gtk_widget_hide(ssl_page.pop_frame);
 		gtk_widget_hide(ssl_page.imap_frame);
 		gtk_widget_show(ssl_page.send_frame);
-#endif
 		gtk_widget_hide(advanced_page.popport_hbox);
 		gtk_widget_hide(advanced_page.imapport_hbox);
 		gtk_widget_hide(advanced_page.tunnelcmd_checkbtn);
@@ -4695,11 +4572,9 @@ static void prefs_account_protocol_changed(GtkComboBox
 				 TRUE);
 		}
 
-#ifdef USE_GNUTLS
 		gtk_widget_show(ssl_page.pop_frame);
 		gtk_widget_hide(ssl_page.imap_frame);
 		gtk_widget_show(ssl_page.send_frame);
-#endif
 		gtk_widget_show(advanced_page.popport_hbox);
 		gtk_widget_hide(advanced_page.imapport_hbox);
 		gtk_widget_hide(advanced_page.tunnelcmd_checkbtn);
@@ -4790,8 +4665,7 @@ gchar *prefs_account_generate_msgid(PrefsAccount *acco
 	now = (prefs_common.hide_timezone)? g_date_time_new_now_utc() :
 					    g_date_time_new_now_local();
 	tmbuf = g_date_time_format(now, "%Y%m%d%H%M%S");
-	buf = g_strdup_printf("%s.%08x%s",
-			tmbuf, (guint)rand(), addr);
+	buf = g_strdup_printf("%s.%08x%s", tmbuf, (guint)rand(), addr);
 	g_date_time_unref(now);
 	g_free(tmbuf);
 	g_free(addr);
@@ -4850,7 +4724,6 @@ static void prefs_account_receive_itv_spinbutton_value
 	}
 }
 
-#ifdef USE_OAUTH2
 //Automation of the oauth2 authorisation process to receive loopback callback generated by redirect in browser
 static void prefs_account_oauth2_listener(GTask *task, gpointer source, gpointer task_data, GCancellable *cancellable)
 {
@@ -5041,4 +4914,3 @@ static int prefs_account_oauth2_get_line(int sock, cha
 
         return (i);
 }
-#endif
blob - 50616c5f01f61e1d49e65f1681c12f53c3c6b928
blob + 8a85530fbd2af8cdc1c8369b273b83b1da62fc18
--- src/prefs_actions.c
+++ src/prefs_actions.c
@@ -45,7 +45,6 @@
 #include "description_window.h"
 #include "manual.h"
 #include "menu.h"
-#include "matcher_parser.h"
 #include "prefs_toolbar.h"
 #include "file-utils.h"
 
blob - ff89c77b4483af717c8ea8ec12c252a1cb2f3a0d
blob + 581c9d24dfbf5cf06ea3f44a181c2eca65f91f83
--- src/prefs_compose_writing.c
+++ src/prefs_compose_writing.c
@@ -40,8 +40,6 @@
 
 #include "manage_window.h"
 
-#include "quote_fmt.h"
-#include "prefs_template.h"
 #include "alertpanel.h"
 #include "combobox.h"
 
@@ -217,7 +215,6 @@ static void prefs_compose_writing_create_widget(PrefsP
 	PACK_CHECK_BUTTON (vbox2, checkbtn_forward_as_attachment, "Forward as attachment");
 	text = "Keep the original 'From' header when redirecting";
 	PACK_CHECK_BUTTON (vbox2, checkbtn_redirect_keep_from, text);
-	g_free(text);
 
 	/* dnd insert or attach */
 	label_dnd_insert_or_attach = gtk_label_new (_("When dropping files into the Write window"));
blob - 3f030ebb7e351000152710a2baa7280ce06fe9e8
blob + ddffe246e6ad6f76a934cb6e5c9e8e5f6af27782
--- src/prefs_folder_item.c
+++ src/prefs_folder_item.c
@@ -44,7 +44,6 @@
 #include "gtkutils.h"
 #include "folder_item_prefs.h"
 #include "string_match.h"
-#include "quote_fmt.h"
 #include "combobox.h"
 #include "stock_pixmap.h"
 #include "file-utils.h"
blob - 93415de979725e514b0786263ae465229b52a384 (mode 644)
blob + /dev/null
--- src/prefs_matcher.c
+++ /dev/null
@@ -1,2573 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2025 the Claws Mail team and 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "main.h"
-#include "prefs_gtk.h"
-#include "prefs_matcher.h"
-#include "prefs_common.h"
-#include "procheader.h"
-#include "mainwindow.h"
-#include "foldersel.h"
-#include "manage_window.h"
-#include "inc.h"
-#include "matcher.h"
-#include "utils.h"
-#include "gtkutils.h"
-#include "alertpanel.h"
-#include "folder.h"
-#include "description_window.h"
-#include "combobox.h"
-
-#include "matcher_parser.h"
-#include "addressbook.h"
-
-static void prefs_matcher_addressbook_select(void);
-static void prefs_matcher_test_info(GtkWidget *widget, GtkWidget *parent);
-
-enum {
-	PREFS_MATCHER_COND,
-	PREFS_MATCHER_COND_VALID,
-	N_PREFS_MATCHER_COLUMNS
-};
-
-/*!
- *\brief	UI data for matcher dialog
- */
-static struct Matcher {
-	GtkWidget *window;
-
-	GtkWidget *ok_btn;
-
-	GtkWidget *match_combo;
-	GtkWidget *header_addr_combo;
-	GtkWidget *bool_op_combo;
-	GtkWidget *criteria_label2;
-	GtkWidget *criteria_combo;
-	GtkWidget *criteria_combo2;
-	GtkWidget *match_combo2;
-	GtkWidget *match_label;
-	GtkWidget *match_label2;
-	GtkWidget *headers_combo;
-	GtkWidget *upper_filler;
-	GtkWidget *lower_filler;
-
-	GtkWidget *header_entry;
-	GtkWidget *header_addr_entry;
-	GtkWidget *string_entry;
-	GtkWidget *numeric_entry;
-	GtkWidget *numeric_label;
-	GtkWidget *addressbook_folder_combo;
-	GtkWidget *case_checkbtn;
-	GtkWidget *regexp_checkbtn;
-	GtkWidget *calendar;
-	GtkWidget *time_label;
-	GtkWidget *time_entry;
-
-	GtkWidget *test_btn;
-	GtkWidget *addressbook_select_btn;
-
-	GtkTreeModel *model_age;
-	GtkTreeModel *model_date;
-	GtkTreeModel *model_age_units;
-	GtkTreeModel *model_contain;
-	GtkTreeModel *model_found;
-	GtkTreeModel *model_flags;
-	GtkTreeModel *model_headers;
-	GtkTreeModel *model_partial;
-	GtkTreeModel *model_phrase;
-	GtkTreeModel *model_score;
-	GtkTreeModel *model_set;
-	GtkTreeModel *model_size;
-	GtkTreeModel *model_size_units;
-	GtkTreeModel *model_test;
-	GtkTreeModel *model_thread;
-
-	GtkWidget *cond_list_view;
-
-	gint selected_criteria; /*!< selected criteria in combobox */
-} matcher;
-
-/*!
- *\brief	Conditions with a negate counterpart (like unread and ~unread)
- *		have the same CRITERIA_XXX id). I.e. both unread and ~unread
- *		have criteria id CRITERIA_UNREAD. This id is passed as the
- *		first parameter to #matcherprop_new and #matcherprop_unquote_new.
- */
-enum {
-	CRITERIA_ALL = 0,
-
-	CRITERIA_SUBJECT = 1,
-	CRITERIA_FROM = 2,
-	CRITERIA_TO = 3,
-	CRITERIA_CC = 4,
-	CRITERIA_TO_OR_CC = 5,
-	CRITERIA_NEWSGROUPS = 6,
-	CRITERIA_INREPLYTO = 7,
-	CRITERIA_REFERENCES = 8,
-	CRITERIA_AGE_GREATER = 9,
-	CRITERIA_AGE_LOWER = 10,
-	CRITERIA_HEADER = 11,
-	CRITERIA_HEADERS_PART = 12,
-	CRITERIA_BODY_PART = 13,
-	CRITERIA_MESSAGE = 14,
-
-	CRITERIA_UNREAD = 15,
-	CRITERIA_NEW = 16,
-	CRITERIA_MARKED = 17,
-	CRITERIA_DELETED = 18,
-	CRITERIA_REPLIED = 19,
-	CRITERIA_FORWARDED = 20,
-	CRITERIA_LOCKED = 21,
-	CRITERIA_SPAM = 22,
-	CRITERIA_COLORLABEL = 23,
-	CRITERIA_IGNORE_THREAD = 24,
-	CRITERIA_WATCH_THREAD = 25,
-
-	CRITERIA_SCORE_GREATER = 26,
-	CRITERIA_SCORE_LOWER = 27,
-	CRITERIA_SCORE_EQUAL = 28,
-
-	CRITERIA_TEST = 29,
-
-	CRITERIA_SIZE_GREATER = 30,
-	CRITERIA_SIZE_SMALLER = 31,
-	CRITERIA_SIZE_EQUAL   = 32,
-
-	CRITERIA_PARTIAL = 33,
-
-	CRITERIA_FOUND_IN_ADDRESSBOOK = 34,
-
-	CRITERIA_TAG = 35,
-	CRITERIA_TAGGED = 36,
-
-	CRITERIA_HAS_ATTACHMENT = 37,
-	CRITERIA_SIGNED = 38,
-
-	CRITERIA_AGE_GREATER_HOURS = 39,
-	CRITERIA_AGE_LOWER_HOURS = 40,
-
-	CRITERIA_MESSAGEID = 41,
-	CRITERIA_HEADERS_CONT = 42,
-
-	CRITERIA_DATE_AFTER = 43,
-	CRITERIA_DATE_BEFORE = 44
-};
-
-enum {
-	MATCH_ALL	= 0,
-	MATCH_HEADER	= 1,
-	MATCH_AGE	= 2,
-	MATCH_PHRASE	= 3,
-	MATCH_FLAG	= 4,
-	MATCH_LABEL	= 5,
-	MATCH_THREAD	= 6,
-	MATCH_SCORE	= 7,
-	MATCH_SIZE	= 8,
-	MATCH_PARTIAL	= 9,
-	MATCH_ABOOK	= 10,
-	MATCH_TAGS	= 11,
-	MATCH_TEST	= 12,
-	MATCH_DATE	= 13
-};
-
-enum {
-	AGE_HOURS = 0,
-	AGE_DAYS  = 1,
-	AGE_WEEKS = 2
-};
-
-enum {
-	SIZE_UNIT_BYTES  = 0,
-	SIZE_UNIT_KBYTES = 1,
-	SIZE_UNIT_MBYTES = 2
-};
-
-#define MB_SIZE 0x100000
-#define KB_SIZE 0x000400
-
-enum {
-	THREAD_IGNORED = 0,
-	THREAD_NOT_IGNORED = 1,
-	THREAD_WATCHED = 2,
-	THREAD_NOT_WATCHED = 3
-};
-
-/*!
- *\brief	Contains predicate
- */
-enum {
-	PREDICATE_CONTAINS = 0,
-	PREDICATE_DOES_NOT_CONTAIN = 1
-};
-
-/*!
- *\brief	Enabled predicate
- */
-enum {
-	PREDICATE_FLAG_ENABLED = 0,
-	PREDICATE_FLAG_DISABLED = 1
-};
-
-/*!
- *\brief	Hooks
- */
-static PrefsMatcherSignal *matchers_callback;
-
-/* widget creating functions */
-static void prefs_matcher_create	(void);
-
-static void prefs_matcher_set_dialog	(MatcherList *matchers);
-static void prefs_matcher_list_view_set_row	(GtkTreeIter *row,
-						 MatcherProp *prop);
-
-/* callback functions */
-
-static void prefs_matcher_register_cb	(void);
-static void prefs_matcher_substitute_cb	(void);
-static void prefs_matcher_delete_cb	(void);
-static void prefs_matcher_up		(void);
-static void prefs_matcher_down		(void);
-static void prefs_matcher_ok		(void);
-static void prefs_matcher_cancel	(void);
-static gint prefs_matcher_deleted	(GtkWidget *widget, GdkEventAny *event,
-					 gpointer data);
-static void prefs_matcher_criteria_select	(GtkWidget *widget,
-						 gpointer   user_data);
-static void prefs_matcher_second_criteria_sel	(GtkWidget *widget,
-						 gpointer   user_data);
-static void prefs_matcher_set_model		(GtkWidget *wiget,
-						 GtkTreeModel *model);
-static MatcherList *prefs_matcher_get_list	(void);
-
-static GtkListStore* prefs_matcher_create_data_store	(void);
-
-static void prefs_matcher_list_view_insert_matcher	(GtkWidget *list_view,
-							 GtkTreeIter *row_iter,
-							 const gchar *matcher,
-							 gboolean is_valid);
-
-static GtkWidget *prefs_matcher_list_view_create	(void);
-
-static void prefs_matcher_create_list_view_columns	(GtkWidget *list_view);
-
-static gboolean prefs_matcher_selected			(GtkTreeSelection *selector,
-							 GtkTreeModel *model,
-							 GtkTreePath *path,
-							 gboolean currently_selected,
-							 gpointer data);
-
-static int header_name_to_crit(const gchar *header)
-{
-	if (header == NULL)
-		return CRITERIA_HEADER;
-
-	if (!strcasecmp(header, "Subject"))
-		return CRITERIA_SUBJECT;
-	if (!strcasecmp(header, "From"))
-		return CRITERIA_FROM;
-	if (!strcasecmp(header, "To"))
-		return CRITERIA_TO;
-	if (!strcasecmp(header, "Cc"))
-		return CRITERIA_CC;
-	if (!strcasecmp(header, "To or Cc"))
-		return CRITERIA_TO_OR_CC;
-	if (!strcasecmp(header, "Message-ID"))
-		return CRITERIA_MESSAGEID;
-	if (!strcasecmp(header, "In-Reply-To"))
-		return CRITERIA_INREPLYTO;
-	if (!strcasecmp(header, "References"))
-		return CRITERIA_REFERENCES;
-
-	return CRITERIA_HEADER;
-}
-
-static void prefs_matcher_models_create(void)
-{
-	GtkListStore *store;
-	GtkTreeIter iter;
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("more than"), CRITERIA_AGE_GREATER);
-	COMBOBOX_ADD(store, _("less than"), CRITERIA_AGE_LOWER);
-	matcher.model_age = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("hours"), AGE_HOURS);
-	COMBOBOX_ADD(store, _("days"), AGE_DAYS);
-	COMBOBOX_ADD(store, _("weeks"), AGE_WEEKS);
-	matcher.model_age_units = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("after"), CRITERIA_DATE_AFTER);
-	COMBOBOX_ADD(store, _("before"), CRITERIA_DATE_BEFORE);
-	matcher.model_date = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("higher than"), CRITERIA_SCORE_GREATER);
-	COMBOBOX_ADD(store, _("lower than"), CRITERIA_SCORE_LOWER);
-	COMBOBOX_ADD(store, _("exactly"), CRITERIA_SCORE_EQUAL);
-	matcher.model_score = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("greater than"), CRITERIA_SIZE_GREATER);
-	COMBOBOX_ADD(store, _("smaller than"), CRITERIA_SIZE_SMALLER);
-	COMBOBOX_ADD(store, _("exactly"), CRITERIA_SIZE_EQUAL);
-	matcher.model_size = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("bytes"), SIZE_UNIT_BYTES);
-	COMBOBOX_ADD(store, _("kibibytes"), SIZE_UNIT_KBYTES);
-	COMBOBOX_ADD(store, _("mebibytes"), SIZE_UNIT_MBYTES);
-	matcher.model_size_units = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("contains"), 0);
-	COMBOBOX_ADD(store, _("doesn't contain"), 0);
-	matcher.model_contain = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, "Subject", CRITERIA_SUBJECT);
-	COMBOBOX_ADD(store, "From", CRITERIA_FROM);
-	COMBOBOX_ADD(store, "To", CRITERIA_TO);
-	COMBOBOX_ADD(store, "Cc", CRITERIA_CC);
-	COMBOBOX_ADD(store, "To or Cc", CRITERIA_TO_OR_CC);
-	COMBOBOX_ADD(store, "Message-ID", CRITERIA_MESSAGEID);
-	COMBOBOX_ADD(store, "In-Reply-To", CRITERIA_INREPLYTO);
-	COMBOBOX_ADD(store, "References", CRITERIA_REFERENCES);
-	COMBOBOX_ADD(store, "Sender", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "X-ML-Name", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "X-List", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "X-Sequence", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "X-Mailer", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "X-BeenThere", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "List-Post", CRITERIA_HEADER);
-	COMBOBOX_ADD(store, "List-Id", CRITERIA_HEADER);
-	matcher.model_headers = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("headers part"), CRITERIA_HEADERS_PART);
-	COMBOBOX_ADD(store, _("headers values"), CRITERIA_HEADERS_CONT);
-	COMBOBOX_ADD(store, _("body part"), CRITERIA_BODY_PART);
-	COMBOBOX_ADD(store, _("whole message"), CRITERIA_MESSAGE);
-	matcher.model_phrase = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("Unread"), CRITERIA_UNREAD);
-	COMBOBOX_ADD(store, _("New"), CRITERIA_NEW);
-	COMBOBOX_ADD(store, _("Marked"), CRITERIA_MARKED);
-	COMBOBOX_ADD(store, _("Deleted"), CRITERIA_DELETED);
-	COMBOBOX_ADD(store, _("Replied"), CRITERIA_REPLIED);
-	COMBOBOX_ADD(store, _("Forwarded"), CRITERIA_FORWARDED);
-	COMBOBOX_ADD(store, _("Locked"), CRITERIA_LOCKED);
-	COMBOBOX_ADD(store, _("Spam"), CRITERIA_SPAM);
-	COMBOBOX_ADD(store, _("Has attachment"), CRITERIA_HAS_ATTACHMENT);
-	COMBOBOX_ADD(store, _("Signed"), CRITERIA_SIGNED);
-	matcher.model_flags = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("set"), 0);
-	COMBOBOX_ADD(store, _("not set"), 1);
-	matcher.model_set = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("yes"), CRITERIA_PARTIAL);
-	COMBOBOX_ADD(store, _("no"), CRITERIA_PARTIAL);
-	matcher.model_partial = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("ignored"), CRITERIA_IGNORE_THREAD);
-	COMBOBOX_ADD(store, _("not ignored"), CRITERIA_IGNORE_THREAD);
-	COMBOBOX_ADD(store, _("watched"), CRITERIA_WATCH_THREAD);
-	COMBOBOX_ADD(store, _("not watched"), CRITERIA_WATCH_THREAD);
-	matcher.model_thread = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("found"), 0);
-	COMBOBOX_ADD(store, _("not found"), 1);
-	matcher.model_found = GTK_TREE_MODEL(store);
-
-	store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
-	COMBOBOX_ADD(store, _("0 (Passed)"), 0);
-	COMBOBOX_ADD(store, _("non-0 (Failed)"), 1);
-	matcher.model_test = GTK_TREE_MODEL(store);
-}
-
-/*!
- *\brief	Opens the matcher dialog with a list of conditions
- *
- *\param	matchers List of conditions
- *\param	cb Callback
- *
- */
-void prefs_matcher_open(MatcherList *matchers, PrefsMatcherSignal *cb)
-{
-	inc_lock();
-
-	if (!matcher.window) {
-		prefs_matcher_models_create();
-		prefs_matcher_create();
-	}
-
-	manage_window_set_transient(GTK_WINDOW(matcher.window));
-	gtk_widget_grab_focus(matcher.ok_btn);
-
-	matchers_callback = cb;
-
-	prefs_matcher_set_dialog(matchers);
-
-	gtk_widget_show(matcher.window);
-	gtk_window_set_modal(GTK_WINDOW(matcher.window), TRUE);
-}
-
-/*!
- *\brief	Save Gtk object size to prefs dataset
- */
-static void prefs_matcher_size_allocate_cb(GtkWidget *widget,
-					 GtkAllocation *allocation)
-{
-	cm_return_if_fail(allocation != NULL);
-
-	gtk_window_get_size(GTK_WINDOW(widget),
-		&prefs_common.matcherwin_width, &prefs_common.matcherwin_height);
-}
-
-/*!
- *\brief	Create the matcher dialog
- */
-static void prefs_matcher_create(void)
-{
-	GtkWidget *window;
-	GtkWidget *vbox;
-	GtkWidget *ok_btn;
-	GtkWidget *cancel_btn;
-	GtkWidget *confirm_area;
-
-	GtkWidget *vbox1;
-	GtkWidget *frame;
-	GtkWidget *table;
-	GtkWidget *upper_hbox;
-	GtkWidget *lower_hbox;
-	GtkWidget *match_hbox;
-	GtkWidget *criteria_combo;
-	GtkWidget *criteria_label;
-	GtkWidget *match_label;
-	GtkWidget *criteria_label2;
-	GtkWidget *headers_combo;
-	GtkWidget *match_combo2;
-	GtkWidget *match_label2;
-
-	GtkWidget *hbox;
-	GtkWidget *upper_filler;
-	GtkWidget *lower_filler;
-
-	GtkWidget *criteria_combo2;
-	GtkWidget *header_entry;
-	GtkWidget *header_addr_combo;
-	GtkWidget *header_addr_entry;
-	GtkWidget *string_entry;
-	GtkWidget *addressbook_folder_combo;
-	GtkWidget *match_combo;
-	GtkWidget *bool_op_combo;
-	GtkWidget *bool_op_label;
-
-	GtkWidget *numeric_hbox;
-	GtkWidget *numeric_entry;
-	GtkWidget *numeric_label;
-
-	GtkWidget *regexp_checkbtn;
-	GtkWidget *case_checkbtn;
-
-	GtkWidget *reg_hbox;
-	GtkWidget *btn_hbox;
-	GtkWidget *arrow;
-	GtkWidget *reg_btn;
-	GtkWidget *subst_btn;
-	GtkWidget *del_btn;
-
-	GtkWidget *cond_hbox;
-	GtkWidget *cond_scrolledwin;
-	GtkWidget *cond_list_view;
-
-	GtkWidget *btn_vbox;
-	GtkWidget *up_btn;
-	GtkWidget *down_btn;
-
-	GtkWidget *test_btn;
-	GtkWidget *addressbook_select_btn;
-	GtkWidget *calendar;
-	GtkWidget *time_label;
-	GtkWidget *time_entry;
-	GtkWidget *date_hbox;
-	GtkWidget *date_vbox;
-
-	static GdkGeometry geometry;
-	GtkSizeGroup *size_group;
-	GtkListStore *store;
-	GtkTreeIter iter;
-
-	debug_print("Creating matcher configuration window...\n");
-
-	window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "prefs_matcher");
-	gtk_container_set_border_width(GTK_CONTAINER(window), 4);
-	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
-	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
-
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_container_add(GTK_CONTAINER(window), vbox);
-
-	gtkut_stock_button_set_create(&confirm_area, &cancel_btn, NULL, _("_Cancel"),
-				      &ok_btn, NULL, _("_OK"), NULL, NULL, NULL);
-	gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
-	gtk_widget_grab_default(ok_btn);
-
-	gtk_window_set_title(GTK_WINDOW(window),
-			     _("Condition configuration"));
-	g_signal_connect(G_OBJECT(window), "delete_event",
-			 G_CALLBACK(prefs_matcher_deleted), NULL);
-	g_signal_connect(G_OBJECT(window), "size_allocate",
-			 G_CALLBACK(prefs_matcher_size_allocate_cb), NULL);
-	MANAGE_WINDOW_SIGNALS_CONNECT(window);
-	g_signal_connect(G_OBJECT(ok_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_ok), NULL);
-	g_signal_connect(G_OBJECT(cancel_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_cancel), NULL);
-
-	vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING);
-	gtk_box_pack_start(GTK_BOX(vbox), vbox1, TRUE, TRUE, 0);
-	gtk_container_set_border_width(GTK_CONTAINER (vbox1), 2);
-
-	frame = gtk_frame_new(_("Rule"));
-	gtk_frame_set_label_align(GTK_FRAME(frame), 0.01, 0.5);
-	gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 0);
-
-	table = gtk_grid_new();
-	gtk_container_set_border_width(GTK_CONTAINER(table), VSPACING_NARROW);
-	gtk_grid_set_row_spacing(GTK_GRID(table), VSPACING_NARROW_2);
-	gtk_grid_set_column_spacing(GTK_GRID(table), HSPACING_NARROW);
-	gtk_container_add(GTK_CONTAINER(frame), table);
-
-	upper_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(hbox), upper_hbox, FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(""), TRUE, TRUE, 0);
-	gtk_grid_attach(GTK_GRID(table), hbox, 2, 0, 1, 1);
-	gtk_widget_set_hexpand(hbox, TRUE);
-	gtk_widget_set_halign(hbox, GTK_ALIGN_FILL);
-
-	lower_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(hbox), lower_hbox, FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(""), TRUE, TRUE, 0);
-	gtk_grid_attach(GTK_GRID(table), hbox, 2, 1, 1, 1);
-	gtk_widget_set_hexpand(hbox, TRUE);
-	gtk_widget_set_halign(hbox, GTK_ALIGN_FILL);
-
-	size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-	gtk_size_group_add_widget(size_group, upper_hbox);
-	gtk_size_group_add_widget(size_group, lower_hbox);
-
-	/* criteria combo box */
-	criteria_label = gtk_label_new(_("Match criteria"));
-	gtk_label_set_xalign(GTK_LABEL(criteria_label), 1.0);
-	gtk_widget_set_size_request(criteria_label, -1, -1);
-	gtk_grid_attach(GTK_GRID(table), criteria_label, 0, 0, 1, 1);
-
-	criteria_combo = gtkut_sc_combobox_create(NULL, FALSE);
-	store = GTK_LIST_STORE(gtk_combo_box_get_model(
-				GTK_COMBO_BOX(criteria_combo)));
-	COMBOBOX_ADD(store, _("All messages"), MATCH_ALL);
-	COMBOBOX_ADD(store, _("Header"), MATCH_HEADER);
-	COMBOBOX_ADD(store, _("Age"), MATCH_AGE);
-	COMBOBOX_ADD(store, _("Phrase"), MATCH_PHRASE);
-	COMBOBOX_ADD(store, _("Flags"), MATCH_FLAG);
-	COMBOBOX_ADD(store, _("Thread"), MATCH_THREAD);
-	COMBOBOX_ADD(store, _("Score"), MATCH_SCORE);
-	COMBOBOX_ADD(store, _("Size"), MATCH_SIZE);
-	COMBOBOX_ADD(store, _("Partially downloaded"), MATCH_PARTIAL);
-	COMBOBOX_ADD(store, _("Address book"), MATCH_ABOOK);
-	COMBOBOX_ADD(store, _("External program test"), MATCH_TEST);
-	COMBOBOX_ADD(store, _("Date"), MATCH_DATE);
-
-	gtk_widget_set_size_request(criteria_combo, 150, -1);
-	gtk_combo_box_set_active(GTK_COMBO_BOX(criteria_combo), MATCH_ALL);
-	gtk_grid_attach(GTK_GRID(table), criteria_combo, 1, 0, 1, 1);
-	g_signal_connect(G_OBJECT(criteria_combo), "changed",
-			 G_CALLBACK(prefs_matcher_criteria_select),
-			 NULL);
-
-	upper_filler = gtk_label_new("");
-	gtk_box_pack_start(GTK_BOX(upper_hbox), upper_filler, TRUE, TRUE, 0);
-
-	lower_filler = gtk_label_new("");
-	gtk_box_pack_start(GTK_BOX(lower_hbox), lower_filler, TRUE, TRUE, 0);
-
-	criteria_label2 = gtk_label_new("");
-	gtk_box_pack_start(GTK_BOX(upper_hbox), criteria_label2, FALSE, FALSE, 0);
-
-	/* headers combo box entry */
-	headers_combo = gtk_combo_box_new_with_model_and_entry(matcher.model_headers);
-	GtkCellRenderer *cell = gtk_cell_renderer_text_new();
-	gtk_cell_renderer_set_alignment(cell, 0.0, 0.5);
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(headers_combo), cell, TRUE);
-	gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(headers_combo), 0);
-	gtk_widget_set_size_request(headers_combo, 100, -1);
-	gtk_box_pack_start(GTK_BOX(upper_hbox), headers_combo, TRUE, TRUE, 0);
-	header_entry = gtk_bin_get_child(GTK_BIN((headers_combo)));
-	CLAWS_SET_TIP(header_entry, _("Use selector on the right to pick "
-		"the header name. Type the name of the header if not "
-		"available in the list."));
-
-	criteria_combo2 = gtkut_sc_combobox_create(NULL, TRUE);
-	prefs_matcher_set_model(criteria_combo2, matcher.model_phrase);
-	gtk_box_pack_start(GTK_BOX(upper_hbox), criteria_combo2, TRUE, TRUE, 0);
-	g_signal_connect(G_OBJECT(criteria_combo2), "changed",
-			 G_CALLBACK(prefs_matcher_second_criteria_sel),
-			 NULL);
-
-	/* book/folder value */
-	addressbook_folder_combo = combobox_text_new(TRUE, _("Any"), NULL);
-	gtk_widget_set_size_request(addressbook_folder_combo, 250, -1);
-	gtk_box_pack_start(GTK_BOX(upper_hbox), addressbook_folder_combo, TRUE, TRUE, 0);
-
-	addressbook_select_btn = gtk_button_new_with_label(_("Select..."));
-	gtk_box_pack_start(GTK_BOX(upper_hbox), addressbook_select_btn, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT (addressbook_select_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_addressbook_select),
-			 NULL);
-	match_label = gtk_label_new("");
-	gtk_label_set_xalign(GTK_LABEL(match_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table), match_label, 0, 1, 1, 1);
-
-	match_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_grid_attach(GTK_GRID(table), match_hbox, 1, 1, 1, 1);
-	gtk_widget_set_hexpand(match_hbox, TRUE);
-	gtk_widget_set_halign(match_hbox, GTK_ALIGN_FILL);
-
-	match_combo = gtkut_sc_combobox_create(NULL, TRUE);
-	gtk_box_pack_start(GTK_BOX(match_hbox), match_combo, TRUE, TRUE, 0);
-
-	/* address header name */
-	header_addr_combo = combobox_text_new(TRUE,
-			      C_("Filtering Matcher Menu", "All"), _("Any"),
-			      "From", "To", "Cc", "Reply-To", "Sender", "Resent-From", "Resent-To", NULL);
-	gtk_box_pack_start(GTK_BOX(match_hbox), header_addr_combo, FALSE, FALSE, 0);
-	header_addr_entry = gtk_bin_get_child(GTK_BIN((header_addr_combo)));
-	gtk_widget_set_size_request(header_addr_combo, 150, -1);
-
-	match_label2 = gtk_label_new("");
-	gtk_box_pack_start(GTK_BOX(lower_hbox), match_label2, FALSE, FALSE, 0);
-
-	/* numeric value */
-	numeric_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_box_pack_start(GTK_BOX(lower_hbox), numeric_hbox, FALSE, FALSE, 0);
-
-	numeric_entry = gtk_spin_button_new_with_range(0, 1000, 1);
-	gtk_spin_button_set_digits(GTK_SPIN_BUTTON(numeric_entry), 0);
-	gtk_box_pack_start(GTK_BOX(numeric_hbox), numeric_entry, FALSE, FALSE, 0);
-
-	numeric_label = gtk_label_new("");
-	gtk_box_pack_start(GTK_BOX(numeric_hbox), numeric_label, FALSE, FALSE, 0);
-	gtk_box_pack_end(GTK_BOX(numeric_hbox), gtk_label_new(""), TRUE, TRUE, 0);
-
-	match_combo2 = gtkut_sc_combobox_create(NULL, TRUE);
-	gtk_box_pack_start(GTK_BOX(lower_hbox), match_combo2, TRUE, TRUE, 0);
-
-	/* string value */
-	string_entry = gtk_entry_new();
-	gtk_box_pack_start(GTK_BOX(lower_hbox), string_entry, TRUE, TRUE, 0);
-	gtk_widget_set_size_request(string_entry, 300, -1);
-
-	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_size_group_add_widget(size_group, hbox);
-
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING_NARROW);
-	PACK_CHECK_BUTTON(vbox, case_checkbtn, _("Case sensitive"));
-	PACK_CHECK_BUTTON(vbox, regexp_checkbtn, _("Use regexp"));
-	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
-
-	gtk_box_pack_end(GTK_BOX(hbox), gtk_label_new(""), TRUE, TRUE, 0);
-	gtk_grid_attach(GTK_GRID(table), hbox, 2, 2, 1, 1);
-	gtk_widget_set_hexpand(hbox, TRUE);
-	gtk_widget_set_halign(hbox, GTK_ALIGN_FILL);
-
-	/* Date widgets */
-	date_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING_NARROW);
-	calendar = gtk_calendar_new();
-	gtk_box_pack_start(GTK_BOX(hbox), calendar, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(lower_hbox), date_vbox, FALSE, FALSE, 0);
-
-	date_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_box_pack_start(GTK_BOX(date_vbox), date_hbox, FALSE, FALSE, 0);
-
-	time_entry = gtkut_time_select_combo_new();
-	gtk_box_pack_start(GTK_BOX(date_hbox), time_entry, FALSE, FALSE, 0);
-	time_label = gtk_label_new(_("on:"));
-	gtk_label_set_xalign(GTK_LABEL(time_label),0);
-	gtk_label_set_yalign(GTK_LABEL(time_label),0.5);
-	gtk_box_pack_start(GTK_BOX(date_hbox), time_label, FALSE, FALSE, 0);
-
-	/* test info button */
-	test_btn = gtkut_stock_button("dialog-information", _("_Information"));
-	gtk_box_pack_start(GTK_BOX(lower_hbox), test_btn, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT (test_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_test_info),
-			 window);
-
-	/* register / substitute / delete */
-	reg_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_box_pack_start(GTK_BOX(vbox1), reg_hbox, FALSE, FALSE, 0);
-
-	arrow = gtk_image_new_from_icon_name("pan-down-symbolic", GTK_ICON_SIZE_MENU);
-	gtk_box_pack_start(GTK_BOX(reg_hbox), arrow, FALSE, FALSE, 0);
-	gtk_widget_set_size_request(arrow, -1, 16);
-
-	btn_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_box_pack_start(GTK_BOX(reg_hbox), btn_hbox, FALSE, FALSE, 0);
-
-	reg_btn = gtkut_stock_button("list-add", _("_Add"));
-	gtk_box_pack_start(GTK_BOX(btn_hbox), reg_btn, FALSE, TRUE, 0);
-	g_signal_connect(G_OBJECT(reg_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_register_cb), NULL);
-
-	subst_btn = gtkut_get_replace_btn(_("_Replace"));
-	gtk_box_pack_start(GTK_BOX(btn_hbox), subst_btn, FALSE, TRUE, 0);
-	g_signal_connect(G_OBJECT(subst_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_substitute_cb),
-			 NULL);
-
-	del_btn = gtkut_stock_button("list-remove", _("_Remove"));
-	gtk_box_pack_start(GTK_BOX(btn_hbox), del_btn, FALSE, TRUE, 0);
-	g_signal_connect(G_OBJECT(del_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_delete_cb), NULL);
-
-	cond_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VBOX_BORDER);
-	gtk_box_pack_start(GTK_BOX(vbox1), cond_hbox, TRUE, TRUE, 0);
-
-	cond_scrolledwin = gtk_scrolled_window_new(NULL, NULL);
-	gtk_widget_set_size_request(cond_scrolledwin, -1, 150);
-	gtk_box_pack_start(GTK_BOX(cond_hbox), cond_scrolledwin,
-			   TRUE, TRUE, 0);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cond_scrolledwin),
-				       GTK_POLICY_AUTOMATIC,
-				       GTK_POLICY_AUTOMATIC);
-
-	cond_list_view = prefs_matcher_list_view_create();
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(cond_scrolledwin),
-					    GTK_SHADOW_ETCHED_IN);
-	gtk_container_add(GTK_CONTAINER(cond_scrolledwin), cond_list_view);
-
-	btn_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, VBOX_BORDER);
-	gtk_box_pack_start(GTK_BOX(cond_hbox), btn_vbox, FALSE, FALSE, 0);
-
-	up_btn = gtkut_stock_button("go-up", _("_Up"));
-	gtk_box_pack_start(GTK_BOX(btn_vbox), up_btn, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(up_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_up), NULL);
-
-	down_btn = gtkut_stock_button("go-down", _("_Down"));
-	gtk_box_pack_start(GTK_BOX(btn_vbox), down_btn, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(down_btn), "clicked",
-			 G_CALLBACK(prefs_matcher_down), NULL);
-
-	/* boolean operation */
-	GtkWidget *hbox_bool = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, HSPACING_NARROW);
-	gtk_box_pack_start(GTK_BOX(vbox1), hbox_bool, FALSE, FALSE, 0);
-
-	bool_op_label = gtk_label_new(_("Message must match"));
-	gtk_box_pack_start(GTK_BOX(hbox_bool), bool_op_label,
-			   FALSE, FALSE, 0);
-
-	bool_op_combo = combobox_text_new(FALSE, _("at least one"),
-					  _("all"), NULL);
-	gtk_box_pack_start(GTK_BOX(hbox_bool), bool_op_combo,
-			   FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox_bool), gtk_label_new(_("of above rules")),
-			   FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(hbox_bool), gtk_label_new(""),
-			   TRUE, TRUE, 0);
-
-	if (!geometry.min_height) {
-		geometry.min_width = 630;
-		geometry.min_height = 368;
-	}
-
-	gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
-				      GDK_HINT_MIN_SIZE);
-	gtk_window_set_default_size(GTK_WINDOW(window), prefs_common.matcherwin_width,
-				    prefs_common.matcherwin_height);
-
-	gtk_widget_show_all(window);
-
-	matcher.window    = window;
-
-	matcher.ok_btn = ok_btn;
-
-	matcher.criteria_combo = criteria_combo;
-	matcher.criteria_combo2 = criteria_combo2;
-	matcher.header_entry = header_entry;
-	matcher.header_addr_combo = header_addr_combo;
-	matcher.header_addr_entry = header_addr_entry;
-	matcher.string_entry = string_entry;
-	matcher.numeric_entry = numeric_entry;
-	matcher.numeric_label = numeric_label;
-	matcher.addressbook_folder_combo = addressbook_folder_combo;
-	matcher.match_combo = match_combo;
-	matcher.case_checkbtn = case_checkbtn;
-	matcher.regexp_checkbtn = regexp_checkbtn;
-	matcher.bool_op_combo = bool_op_combo;
-	matcher.test_btn = test_btn;
-	matcher.calendar = calendar;
-	matcher.time_label = time_label;
-	matcher.time_entry = time_entry;
-	matcher.addressbook_select_btn = addressbook_select_btn;
-	matcher.match_label = match_label;
-	matcher.criteria_label2 = criteria_label2;
-	matcher.headers_combo = headers_combo;
-	matcher.match_combo2 = match_combo2;
-	matcher.match_label2 = match_label2;
-	matcher.upper_filler = upper_filler;
-	matcher.lower_filler = lower_filler;
-
-	matcher.cond_list_view = cond_list_view;
-
-	matcher.selected_criteria = -1;
-	prefs_matcher_criteria_select(criteria_combo, NULL);
-}
-
-/*!
- *\brief	Set the contents of a row
- *
- *\param	row Index of row to set
- *\param	prop Condition to set
- *
- *\return	gint Row index \a prop has been added
- */
-static void prefs_matcher_list_view_set_row(GtkTreeIter *row, MatcherProp *prop)
-{
-	gchar *matcher_str;
-
-	if (prop == NULL) {
-		prefs_matcher_list_view_insert_matcher(matcher.cond_list_view,
-						       NULL, _("(New)"), FALSE);
-		return;
-	}
-
-	matcher_str = matcherprop_to_string(prop);
-	if (!row)
-		prefs_matcher_list_view_insert_matcher(matcher.cond_list_view,
-						       NULL, matcher_str,
-						       TRUE);
-	else
-		prefs_matcher_list_view_insert_matcher(matcher.cond_list_view,
-						       row, matcher_str,
-						       TRUE);
-	g_free(matcher_str);
-}
-
-static gboolean match_combo2_model_set(void)
-{
-	GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(matcher.match_combo2));
-	if (model == matcher.model_age_units ||
-	    model == matcher.model_found ||
-	    model == matcher.model_partial ||
-	    model == matcher.model_phrase ||
-	    model == matcher.model_set ||
-	    model == matcher.model_size_units ||
-	    model == matcher.model_thread)
-		return TRUE;
-	else
-		debug_print("match_combo2 model unset.\n");
-
-	return FALSE;
-}
-
-static gboolean match_combo_model_set(void)
-{
-	GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(matcher.match_combo));
-	if (model == matcher.model_age ||
-	    model == matcher.model_contain ||
-	    model == matcher.model_flags ||
-	    model == matcher.model_score ||
-	    model == matcher.model_size ||
-	    model == matcher.model_test)
-		return TRUE;
-	else
-		debug_print("match_combo model unset.\n");
-
-	return FALSE;
-}
-
-/*!
- *\brief	Clears a condition in the list widget
- */
-static void prefs_matcher_reset_condition(void)
-{
-	gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo), MATCH_ALL);
-	gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo2), 0);
-	if (match_combo_model_set())
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo), 0);
-	if (match_combo2_model_set())
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2), 0);
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0);
-	gtk_entry_set_text(GTK_ENTRY(matcher.header_entry), "");
-	gtk_entry_set_text(GTK_ENTRY(matcher.header_addr_entry), "");
-	gtk_entry_set_text(GTK_ENTRY(matcher.string_entry), "");
-	gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((matcher.addressbook_folder_combo)))), "");
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), FALSE);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), FALSE);
-
-	gtk_calendar_select_today(GTK_CALENDAR(matcher.calendar));
-	gtkut_time_select_select_by_time(GTK_COMBO_BOX(matcher.time_entry), 0, 0);
-}
-
-/*!
- *\brief	Initializes dialog with a set of conditions
- *
- *\param	matchers List of conditions
- */
-static void prefs_matcher_set_dialog(MatcherList *matchers)
-{
-	GSList *cur;
-	gboolean bool_op = 1;
-	GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model
-				(GTK_TREE_VIEW(matcher.cond_list_view)));
-
-	gtk_list_store_clear(store);
-
-	prefs_matcher_list_view_set_row(NULL, NULL);
-	if (matchers != NULL) {
-		for (cur = matchers->matchers; cur != NULL;
-		     cur = g_slist_next(cur)) {
-			MatcherProp *prop;
-			prop = (MatcherProp *) cur->data;
-			prefs_matcher_list_view_set_row(NULL, prop);
-		}
-
-		bool_op = matchers->bool_and;
-	}
-
-	gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.bool_op_combo), bool_op);
-
-	prefs_matcher_reset_condition();
-}
-
-/*!
- *\brief	Converts current conditions in list box in
- *		a matcher list used by the matcher.
- *
- *\return	MatcherList * List of conditions.
- */
-static MatcherList *prefs_matcher_get_list(void)
-{
-	gchar *matcher_str;
-	MatcherProp *prop;
-	gboolean bool_and;
-	GSList *matcher_list;
-	MatcherList *matchers;
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-
-	model = gtk_tree_view_get_model(GTK_TREE_VIEW(matcher.cond_list_view));
-	if (!gtk_tree_model_get_iter_first(model, &iter))
-		return NULL;
-
-	matcher_list = NULL;
-
-	do {
-		gboolean is_valid;
-
-		gtk_tree_model_get(model, &iter,
-				   PREFS_MATCHER_COND, &matcher_str,
-				   PREFS_MATCHER_COND_VALID, &is_valid,
-				   -1);
-
-		if (is_valid) {
-			/* tmp = matcher_str; */
-			prop = matcher_parser_get_prop(matcher_str);
-			if (prop == NULL) {
-				g_free(matcher_str);
-				break;
-			}
-
-			matcher_list = g_slist_append(matcher_list, prop);
-		}
-		g_free(matcher_str);
-	} while (gtk_tree_model_iter_next(model, &iter));
-
-	bool_and = gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.bool_op_combo));
-
-	matchers = matcherlist_new(matcher_list, bool_and);
-
-	return matchers;
-}
-
-/*!
- *\brief	Maps a keyword id (see #get_matchparser_tab_id) to a
- *		criteria type (see first parameter of #matcherprop_new
- *		or #matcherprop_unquote_new)
- *
- *\param	matching_id Id returned by the matcher parser.
- *
- *\return	gint One of the CRITERIA_xxx constants.
- */
-static gint prefs_matcher_get_criteria_from_matching(gint matching_id)
-{
-	switch(matching_id) {
-	case MATCHCRITERIA_ALL:
-		return CRITERIA_ALL;
-	case MATCHCRITERIA_NOT_UNREAD:
-	case MATCHCRITERIA_UNREAD:
-		return CRITERIA_UNREAD;
-	case MATCHCRITERIA_NOT_NEW:
-	case MATCHCRITERIA_NEW:
-		return CRITERIA_NEW;
-	case MATCHCRITERIA_NOT_MARKED:
-	case MATCHCRITERIA_MARKED:
-		return CRITERIA_MARKED;
-	case MATCHCRITERIA_NOT_DELETED:
-	case MATCHCRITERIA_DELETED:
-		return CRITERIA_DELETED;
-	case MATCHCRITERIA_NOT_REPLIED:
-	case MATCHCRITERIA_REPLIED:
-		return CRITERIA_REPLIED;
-	case MATCHCRITERIA_NOT_FORWARDED:
-	case MATCHCRITERIA_FORWARDED:
-		return CRITERIA_FORWARDED;
-	case MATCHCRITERIA_LOCKED:
-	case MATCHCRITERIA_NOT_LOCKED:
-		return CRITERIA_LOCKED;
-	case MATCHCRITERIA_NOT_SPAM:
-	case MATCHCRITERIA_SPAM:
-		return CRITERIA_SPAM;
-	case MATCHCRITERIA_HAS_ATTACHMENT:
-	case MATCHCRITERIA_HAS_NO_ATTACHMENT:
-		return CRITERIA_HAS_ATTACHMENT;
-	case MATCHCRITERIA_SIGNED:
-	case MATCHCRITERIA_NOT_SIGNED:
-		return CRITERIA_SIGNED;
-	case MATCHCRITERIA_PARTIAL:
-	case MATCHCRITERIA_NOT_PARTIAL:
-		return CRITERIA_PARTIAL;
-	case MATCHCRITERIA_IGNORE_THREAD:
-	case MATCHCRITERIA_NOT_IGNORE_THREAD:
-		return CRITERIA_IGNORE_THREAD;
-	case MATCHCRITERIA_WATCH_THREAD:
-	case MATCHCRITERIA_NOT_WATCH_THREAD:
-		return CRITERIA_WATCH_THREAD;
-	case MATCHCRITERIA_NOT_SUBJECT:
-	case MATCHCRITERIA_SUBJECT:
-		return CRITERIA_SUBJECT;
-	case MATCHCRITERIA_NOT_FROM:
-	case MATCHCRITERIA_FROM:
-		return CRITERIA_FROM;
-	case MATCHCRITERIA_NOT_TO:
-	case MATCHCRITERIA_TO:
-		return CRITERIA_TO;
-	case MATCHCRITERIA_NOT_CC:
-	case MATCHCRITERIA_CC:
-		return CRITERIA_CC;
-	case MATCHCRITERIA_NOT_MESSAGEID:
-	case MATCHCRITERIA_MESSAGEID:
-		return CRITERIA_MESSAGEID;
-	case MATCHCRITERIA_NOT_INREPLYTO:
-	case MATCHCRITERIA_INREPLYTO:
-		return CRITERIA_INREPLYTO;
-	case MATCHCRITERIA_NOT_REFERENCES:
-	case MATCHCRITERIA_REFERENCES:
-		return CRITERIA_REFERENCES;
-	case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
-	case MATCHCRITERIA_TO_OR_CC:
-		return CRITERIA_TO_OR_CC;
-	case MATCHCRITERIA_NOT_BODY_PART:
-	case MATCHCRITERIA_BODY_PART:
-		return CRITERIA_BODY_PART;
-	case MATCHCRITERIA_NOT_MESSAGE:
-	case MATCHCRITERIA_MESSAGE:
-		return CRITERIA_MESSAGE;
-	case MATCHCRITERIA_NOT_HEADERS_PART:
-	case MATCHCRITERIA_HEADERS_PART:
-		return CRITERIA_HEADERS_PART;
-	case MATCHCRITERIA_NOT_HEADERS_CONT:
-	case MATCHCRITERIA_HEADERS_CONT:
-		return CRITERIA_HEADERS_CONT;
-	case MATCHCRITERIA_NOT_HEADER:
-	case MATCHCRITERIA_HEADER:
-		return CRITERIA_HEADER;
-	case MATCHCRITERIA_AGE_GREATER_HOURS:
-		return CRITERIA_AGE_GREATER_HOURS;
-	case MATCHCRITERIA_AGE_LOWER_HOURS:
-		return CRITERIA_AGE_LOWER_HOURS;
-	case MATCHCRITERIA_AGE_GREATER:
-		return CRITERIA_AGE_GREATER;
-	case MATCHCRITERIA_AGE_LOWER:
-		return CRITERIA_AGE_LOWER;
-	case MATCHCRITERIA_DATE_AFTER:
-		return CRITERIA_DATE_AFTER;
-	case MATCHCRITERIA_DATE_BEFORE:
-		return CRITERIA_DATE_BEFORE;
-	case MATCHCRITERIA_SCORE_GREATER:
-		return CRITERIA_SCORE_GREATER;
-	case MATCHCRITERIA_SCORE_LOWER:
-		return CRITERIA_SCORE_LOWER;
-	case MATCHCRITERIA_SCORE_EQUAL:
-		return CRITERIA_SCORE_EQUAL;
-	case MATCHCRITERIA_NOT_TEST:
-	case MATCHCRITERIA_TEST:
-		return CRITERIA_TEST;
-	case MATCHCRITERIA_SIZE_GREATER:
-		return CRITERIA_SIZE_GREATER;
-	case MATCHCRITERIA_SIZE_SMALLER:
-		return CRITERIA_SIZE_SMALLER;
-	case MATCHCRITERIA_SIZE_EQUAL:
-		return CRITERIA_SIZE_EQUAL;
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-		return CRITERIA_FOUND_IN_ADDRESSBOOK;
-	default:
-		return -1;
-	}
-}
-
-/*!
- *\brief	Returns the matcher keyword id from a criteria id
- *
- *\param	criteria_id Criteria id (should not be the negate
- *		one)
- *
- *\return	gint A matcher keyword id. See #get_matchparser_tab_id.
- */
-static gint prefs_matcher_get_matching_from_criteria(gint criteria_id)
-{
-	switch (criteria_id) {
-	case CRITERIA_ALL:
-		return MATCHCRITERIA_ALL;
-	case CRITERIA_UNREAD:
-		return MATCHCRITERIA_UNREAD;
-	case CRITERIA_NEW:
-		return MATCHCRITERIA_NEW;
-	case CRITERIA_MARKED:
-		return MATCHCRITERIA_MARKED;
-	case CRITERIA_DELETED:
-		return MATCHCRITERIA_DELETED;
-	case CRITERIA_REPLIED:
-		return MATCHCRITERIA_REPLIED;
-	case CRITERIA_FORWARDED:
-		return MATCHCRITERIA_FORWARDED;
-	case CRITERIA_LOCKED:
-		return MATCHCRITERIA_LOCKED;
-	case CRITERIA_SPAM:
-		return MATCHCRITERIA_SPAM;
-	case CRITERIA_HAS_ATTACHMENT:
-		return MATCHCRITERIA_HAS_ATTACHMENT;
-	case CRITERIA_SIGNED:
-		return MATCHCRITERIA_SIGNED;
-	case CRITERIA_PARTIAL:
-		return MATCHCRITERIA_PARTIAL;
-	case CRITERIA_IGNORE_THREAD:
-		return MATCHCRITERIA_IGNORE_THREAD;
-	case CRITERIA_WATCH_THREAD:
-		return MATCHCRITERIA_WATCH_THREAD;
-	case CRITERIA_SUBJECT:
-		return MATCHCRITERIA_SUBJECT;
-	case CRITERIA_FROM:
-		return MATCHCRITERIA_FROM;
-	case CRITERIA_TO:
-		return MATCHCRITERIA_TO;
-	case CRITERIA_CC:
-		return MATCHCRITERIA_CC;
-	case CRITERIA_TO_OR_CC:
-		return MATCHCRITERIA_TO_OR_CC;
-	case CRITERIA_MESSAGEID:
-		return MATCHCRITERIA_MESSAGEID;
-	case CRITERIA_INREPLYTO:
-		return MATCHCRITERIA_INREPLYTO;
-	case CRITERIA_REFERENCES:
-		return MATCHCRITERIA_REFERENCES;
-	case CRITERIA_AGE_GREATER:
-		return MATCHCRITERIA_AGE_GREATER;
-	case CRITERIA_AGE_LOWER:
-		return MATCHCRITERIA_AGE_LOWER;
-	case CRITERIA_AGE_GREATER_HOURS:
-		return MATCHCRITERIA_AGE_GREATER_HOURS;
-	case CRITERIA_AGE_LOWER_HOURS:
-		return MATCHCRITERIA_AGE_LOWER_HOURS;
-	case CRITERIA_DATE_AFTER:
-		return MATCHCRITERIA_DATE_AFTER;
-	case CRITERIA_DATE_BEFORE:
-		return MATCHCRITERIA_DATE_BEFORE;
-	case CRITERIA_SCORE_GREATER:
-		return MATCHCRITERIA_SCORE_GREATER;
-	case CRITERIA_SCORE_LOWER:
-		return MATCHCRITERIA_SCORE_LOWER;
-	case CRITERIA_SCORE_EQUAL:
-		return MATCHCRITERIA_SCORE_EQUAL;
-	case CRITERIA_HEADER:
-		return MATCHCRITERIA_HEADER;
-	case CRITERIA_HEADERS_PART:
-		return MATCHCRITERIA_HEADERS_PART;
-	case CRITERIA_HEADERS_CONT:
-		return MATCHCRITERIA_HEADERS_CONT;
-	case CRITERIA_BODY_PART:
-		return MATCHCRITERIA_BODY_PART;
-	case CRITERIA_MESSAGE:
-		return MATCHCRITERIA_MESSAGE;
-	case CRITERIA_TEST:
-		return MATCHCRITERIA_TEST;
-	case CRITERIA_SIZE_GREATER:
-		return MATCHCRITERIA_SIZE_GREATER;
-	case CRITERIA_SIZE_SMALLER:
-		return MATCHCRITERIA_SIZE_SMALLER;
-	case CRITERIA_SIZE_EQUAL:
-		return MATCHCRITERIA_SIZE_EQUAL;
-	case CRITERIA_FOUND_IN_ADDRESSBOOK:
-		return MATCHCRITERIA_FOUND_IN_ADDRESSBOOK;
-	default:
-		return -1;
-	}
-}
-
-/*!
- *\brief	Returns the negate matcher keyword id from a matcher keyword
- *		id.
- *
- *\param	matcher_criteria Matcher keyword id.
- *
- *\return	gint A matcher keyword id. See #get_matchparser_tab_id.
- */
-static gint prefs_matcher_not_criteria(gint matcher_criteria)
-{
-	switch(matcher_criteria) {
-	case MATCHCRITERIA_UNREAD:
-		return MATCHCRITERIA_NOT_UNREAD;
-	case MATCHCRITERIA_NEW:
-		return MATCHCRITERIA_NOT_NEW;
-	case MATCHCRITERIA_MARKED:
-		return MATCHCRITERIA_NOT_MARKED;
-	case MATCHCRITERIA_DELETED:
-		return MATCHCRITERIA_NOT_DELETED;
-	case MATCHCRITERIA_REPLIED:
-		return MATCHCRITERIA_NOT_REPLIED;
-	case MATCHCRITERIA_FORWARDED:
-		return MATCHCRITERIA_NOT_FORWARDED;
-	case MATCHCRITERIA_LOCKED:
-		return MATCHCRITERIA_NOT_LOCKED;
-	case MATCHCRITERIA_SPAM:
-		return MATCHCRITERIA_NOT_SPAM;
-	case MATCHCRITERIA_HAS_ATTACHMENT:
-		return MATCHCRITERIA_HAS_NO_ATTACHMENT;
-	case MATCHCRITERIA_SIGNED:
-		return MATCHCRITERIA_NOT_SIGNED;
-	case MATCHCRITERIA_PARTIAL:
-		return MATCHCRITERIA_NOT_PARTIAL;
-	case MATCHCRITERIA_IGNORE_THREAD:
-		return MATCHCRITERIA_NOT_IGNORE_THREAD;
-	case MATCHCRITERIA_WATCH_THREAD:
-		return MATCHCRITERIA_NOT_WATCH_THREAD;
-	case MATCHCRITERIA_SUBJECT:
-		return MATCHCRITERIA_NOT_SUBJECT;
-	case MATCHCRITERIA_FROM:
-		return MATCHCRITERIA_NOT_FROM;
-	case MATCHCRITERIA_TO:
-		return MATCHCRITERIA_NOT_TO;
-	case MATCHCRITERIA_CC:
-		return MATCHCRITERIA_NOT_CC;
-	case MATCHCRITERIA_TO_OR_CC:
-		return MATCHCRITERIA_NOT_TO_AND_NOT_CC;
-	case MATCHCRITERIA_MESSAGEID:
-		return MATCHCRITERIA_NOT_MESSAGEID;
-	case MATCHCRITERIA_INREPLYTO:
-		return MATCHCRITERIA_NOT_INREPLYTO;
-	case MATCHCRITERIA_REFERENCES:
-		return MATCHCRITERIA_NOT_REFERENCES;
-	case MATCHCRITERIA_HEADER:
-		return MATCHCRITERIA_NOT_HEADER;
-	case MATCHCRITERIA_HEADERS_PART:
-		return MATCHCRITERIA_NOT_HEADERS_PART;
-	case MATCHCRITERIA_HEADERS_CONT:
-		return MATCHCRITERIA_NOT_HEADERS_CONT;
-	case MATCHCRITERIA_MESSAGE:
-		return MATCHCRITERIA_NOT_MESSAGE;
-	case MATCHCRITERIA_TEST:
-		return MATCHCRITERIA_NOT_TEST;
-	case MATCHCRITERIA_BODY_PART:
-		return MATCHCRITERIA_NOT_BODY_PART;
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-		return MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK;
-	default:
-		return matcher_criteria;
-	}
-}
-
-static gint prefs_matcher_get_criteria(void)
-{
-	gint match_criteria = gtk_combo_box_get_active(GTK_COMBO_BOX(
-					matcher.criteria_combo));
-	const gchar *header = NULL;
-
-	switch (match_criteria) {
-	case MATCH_ABOOK:
-		return CRITERIA_FOUND_IN_ADDRESSBOOK;
-	case MATCH_ALL:
-		return CRITERIA_ALL;
-	case MATCH_AGE:
-	case MATCH_DATE:
-	case MATCH_SCORE:
-	case MATCH_SIZE:
-	case MATCH_FLAG:
-		return combobox_get_active_data(GTK_COMBO_BOX(
-					matcher.match_combo));
-	case MATCH_HEADER:
-		header = gtk_entry_get_text(GTK_ENTRY(matcher.header_entry));
-		return header_name_to_crit(header);
-	case MATCH_PARTIAL:
-		return CRITERIA_PARTIAL;
-	case MATCH_TEST:
-		return CRITERIA_TEST;
-	case MATCH_PHRASE:
-	case MATCH_THREAD:
-		return combobox_get_active_data(GTK_COMBO_BOX(
-					matcher.criteria_combo2));
-	}
-
-	return -1;
-}
-
-static gint prefs_matcher_get_pred(const gint criteria)
-{
-	switch(criteria) {
-	case CRITERIA_SUBJECT:
-	case CRITERIA_FROM:
-	case CRITERIA_TO:
-	case CRITERIA_CC:
-	case CRITERIA_TO_OR_CC:
-	case CRITERIA_MESSAGEID:
-	case CRITERIA_INREPLYTO:
-	case CRITERIA_REFERENCES:
-	case CRITERIA_HEADER:
-	case CRITERIA_HEADERS_PART:
-	case CRITERIA_HEADERS_CONT:
-	case CRITERIA_BODY_PART:
-	case CRITERIA_MESSAGE:
-	case CRITERIA_TEST:
-		return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo));
-	case CRITERIA_FOUND_IN_ADDRESSBOOK:
-	case CRITERIA_UNREAD:
-	case CRITERIA_NEW:
-	case CRITERIA_MARKED:
-	case CRITERIA_DELETED:
-	case CRITERIA_REPLIED:
-	case CRITERIA_FORWARDED:
-	case CRITERIA_LOCKED:
-	case CRITERIA_SPAM:
-	case CRITERIA_HAS_ATTACHMENT:
-	case CRITERIA_SIGNED:
-		return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2));
-	case CRITERIA_WATCH_THREAD:
-		return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.criteria_combo2)) - 2;
-	case CRITERIA_IGNORE_THREAD:
-	case CRITERIA_PARTIAL:
-		return gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.criteria_combo2));
-	}
-
-	return 0;
-}
-
-/*!
- *\brief	Converts the text in the selected row to a
- *		matcher structure
- *
- *\return	MatcherProp * Newly allocated matcher structure.
- */
-static MatcherProp *prefs_matcher_dialog_to_matcher(void)
-{
-	MatcherProp *matcherprop;
-	gint criteria;
-	gint matchtype;
-	gint value_pred;
-	gint value_criteria = prefs_matcher_get_criteria();
-	gboolean use_regexp;
-	gboolean case_sensitive;
-	const gchar *header;
-	const gchar *expr;
-    	gboolean expr_to_free = FALSE;
-	gint value, sel;
-	gint year, month, day, hour, minute;
-
-	if (value_criteria == -1)
-		return NULL;
-
-	use_regexp = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn));
-	case_sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn));
-
-	if (use_regexp) {
-		if (case_sensitive)
-			matchtype = MATCHTYPE_REGEXP;
-		else
-			matchtype = MATCHTYPE_REGEXPCASE;
-	}
-	else {
-		if (case_sensitive)
-			matchtype = MATCHTYPE_MATCH;
-		else
-			matchtype = MATCHTYPE_MATCHCASE;
-	}
-
-	header = NULL;
-	expr = NULL;
-	value = 0;
-
-	switch (value_criteria) {
-	case CRITERIA_ALL:
-	case CRITERIA_UNREAD:
-	case CRITERIA_NEW:
-	case CRITERIA_MARKED:
-	case CRITERIA_DELETED:
-	case CRITERIA_REPLIED:
-	case CRITERIA_FORWARDED:
-	case CRITERIA_LOCKED:
-	case CRITERIA_SPAM:
-	case CRITERIA_HAS_ATTACHMENT:
-	case CRITERIA_SIGNED:
-	case CRITERIA_PARTIAL:
-	case CRITERIA_IGNORE_THREAD:
-	case CRITERIA_WATCH_THREAD:
-		break;
-
-	case CRITERIA_SUBJECT:
-	case CRITERIA_FROM:
-	case CRITERIA_TO:
-	case CRITERIA_CC:
-	case CRITERIA_TO_OR_CC:
-	case CRITERIA_MESSAGEID:
-	case CRITERIA_INREPLYTO:
-	case CRITERIA_REFERENCES:
-	case CRITERIA_HEADERS_PART:
-	case CRITERIA_HEADERS_CONT:
-	case CRITERIA_BODY_PART:
-	case CRITERIA_MESSAGE:
-		expr = gtk_entry_get_text(GTK_ENTRY(matcher.string_entry));
-
-		if(*expr == '\0') {
-			alertpanel_error(_("Search pattern is not set."));
-			return NULL;
-		}
-		break;
-
-	case CRITERIA_DATE_AFTER:
-	case CRITERIA_DATE_BEFORE:
-		expr = NULL;
-		gtk_calendar_get_date(GTK_CALENDAR(matcher.calendar), &year, &month, &day);
-		if (gtkut_time_select_get_time(GTK_COMBO_BOX(matcher.time_entry), &hour, &minute))
-			expr = g_strdup_printf("%4d-%02d-%02d %02d:%02d:00",
-				year, month + 1, day, hour, minute);
-
-		if (expr == NULL) {
-			alertpanel_error(_("Invalid hour."));
-			return NULL;
-		}
-		expr_to_free = TRUE;
-		break;
-
-	case CRITERIA_TEST:
-		expr = gtk_entry_get_text(GTK_ENTRY(matcher.string_entry));
-
-		if(*expr == '\0') {
-			alertpanel_error(_("Test command is not set."));
-			return NULL;
-		}
-		break;
-
-	case CRITERIA_AGE_GREATER:
-	case CRITERIA_AGE_LOWER:
-		value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(
-							 matcher.numeric_entry));
-		sel = gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2));
-		if(sel == AGE_WEEKS)
-			value *= 7;
-		else if (sel == AGE_HOURS) {
-			if (value_criteria == CRITERIA_AGE_GREATER)
-				value_criteria = CRITERIA_AGE_GREATER_HOURS;
-			else
-				value_criteria = CRITERIA_AGE_LOWER_HOURS;
-		}
-		break;
-
-	case CRITERIA_SCORE_GREATER:
-	case CRITERIA_SCORE_LOWER:
-	case CRITERIA_SCORE_EQUAL:
-		value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(
-							 matcher.numeric_entry));
-		break;
-
-	case CRITERIA_SIZE_GREATER:
-	case CRITERIA_SIZE_SMALLER:
-	case CRITERIA_SIZE_EQUAL:
-		value = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(
-							 matcher.numeric_entry));
-		sel = gtk_combo_box_get_active(GTK_COMBO_BOX(matcher.match_combo2));
-		if(sel == SIZE_UNIT_MBYTES)
-			value *= MB_SIZE;
-		if(sel == SIZE_UNIT_KBYTES)
-			value *= KB_SIZE;
-		break;
-
-	case CRITERIA_HEADER:
-		header = gtk_entry_get_text(GTK_ENTRY(matcher.header_entry));
-		expr = gtk_entry_get_text(GTK_ENTRY(matcher.string_entry));
-
-		if (*header == '\0') {
-		    alertpanel_error(_("Header name is not set."));
-		    return NULL;
-		}
-
-		if(*expr == '\0') {
-			alertpanel_error(_("Search pattern is not set."));
-			return NULL;
-		}
-		break;
-
-	case CRITERIA_FOUND_IN_ADDRESSBOOK:
-		header = gtk_entry_get_text(GTK_ENTRY(matcher.header_addr_entry));
-		expr = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((matcher.addressbook_folder_combo)))));
-
-		if (*header == '\0') {
-		    alertpanel_error(_("Header name is not set."));
-		    return NULL;
-		}
-		if (*expr == '\0') {
-			gchar *tmp;
-
-			if (g_utf8_collate(header, C_("Filtering Matcher Menu", "All")) == 0)
-				tmp = g_strdup(_("all addresses in all headers"));
-			else
-			if (g_utf8_collate(header, _("Any")) == 0)
-				tmp = g_strdup(_("any address in any header"));
-			else
-				tmp = g_strdup_printf(_("the address(es) in header '%s'"), header);
-			alertpanel_error(_("Book/folder path is not set.\n\n"
-						"If you want to match %s against the whole address book, "
-						"you have to select '%s' from the book/folder drop-down list."),
-						tmp, _("Any"));
-			g_free(tmp);
-		    return NULL;
-		}
-		/* store UNtranslated "Any"/"All" in matcher expressions */
-		if (g_utf8_collate(header, C_("Filtering Matcher Menu", "All")) == 0)
-			header = "All";
-		else
-			if (g_utf8_collate(header, _("Any")) == 0)
-				header = "Any";
-		if (g_utf8_collate(expr, _("Any")) == 0)
-			expr = "Any";
-		break;
-	}
-
-	criteria = prefs_matcher_get_matching_from_criteria(value_criteria);
-
-	value_pred = prefs_matcher_get_pred(value_criteria);
-	if(value_pred)
-		criteria = prefs_matcher_not_criteria(criteria);
-
-	matcherprop = matcherprop_new(criteria, header, matchtype,
-				      expr, value);
-
-	if (expr_to_free)
-		g_free((gchar *)expr);
-
-	return matcherprop;
-}
-
-/*!
- *\brief	Signal handler for register button
- */
-static void prefs_matcher_register_cb(void)
-{
-	MatcherProp *matcherprop;
-
-	matcherprop = prefs_matcher_dialog_to_matcher();
-	if (matcherprop == NULL)
-		return;
-
-	prefs_matcher_list_view_set_row(NULL, matcherprop);
-
-	matcherprop_free(matcherprop);
-
-	prefs_matcher_reset_condition();
-}
-
-/*!
- *\brief	Signal handler for substitute button
- */
-static void prefs_matcher_substitute_cb(void)
-{
-	MatcherProp *matcherprop;
-	GtkTreeIter row;
-	GtkTreeSelection *selection;
-	GtkTreeModel *model;
-	gboolean is_valid;
-
-	selection = gtk_tree_view_get_selection
-			(GTK_TREE_VIEW(matcher.cond_list_view));
-
-	if (!gtk_tree_selection_get_selected(selection, &model, &row))
-		return;
-
-	gtk_tree_model_get(model, &row,
-			   PREFS_MATCHER_COND_VALID, &is_valid,
-			   -1);
-	if (!is_valid)
-		return;
-
-	matcherprop = prefs_matcher_dialog_to_matcher();
-	if (matcherprop == NULL)
-		return;
-
-	prefs_matcher_list_view_set_row(&row, matcherprop);
-
-	matcherprop_free(matcherprop);
-}
-
-/*!
- *\brief	Signal handler for delete button
- */
-static void prefs_matcher_delete_cb(void)
-{
-	GtkTreeIter row;
-	GtkTreeSelection *selection;
-	GtkTreeModel *model;
-	gboolean is_valid;
-
-	selection = gtk_tree_view_get_selection
-			(GTK_TREE_VIEW(matcher.cond_list_view));
-
-	if (!gtk_tree_selection_get_selected(selection, &model, &row))
-		return;
-
-	gtk_tree_model_get(model, &row,
-			   PREFS_MATCHER_COND_VALID, &is_valid,
-			   -1);
-
-	if (!is_valid)
-		return;
-
-	gtk_list_store_remove(GTK_LIST_STORE(model), &row);
-
-	prefs_matcher_reset_condition();
-}
-
-/*!
- *\brief	Signal handler for 'move up' button
- */
-static void prefs_matcher_up(void)
-{
-	GtkTreePath *prev, *sel, *try;
-	GtkTreeIter isel;
-	GtkListStore *store = NULL;
-	GtkTreeModel *model = NULL;
-	GtkTreeIter iprev;
-
-	if (!gtk_tree_selection_get_selected
-		(gtk_tree_view_get_selection
-			(GTK_TREE_VIEW(matcher.cond_list_view)),
-		 &model,
-		 &isel))
-		return;
-	store = (GtkListStore *)model;
-	sel = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &isel);
-	if (!sel)
-		return;
-
-	/* no move if we're at row 0 or 1, looks phony, but other
-	 * solutions are more convoluted... */
-	try = gtk_tree_path_copy(sel);
-	if (!gtk_tree_path_prev(try) || !gtk_tree_path_prev(try)) {
-		gtk_tree_path_free(try);
-		gtk_tree_path_free(sel);
-		return;
-	}
-	gtk_tree_path_free(try);
-
-	prev = gtk_tree_path_copy(sel);
-	if (gtk_tree_path_prev(prev)) {
-		gtk_tree_model_get_iter(GTK_TREE_MODEL(store),
-					&iprev, prev);
-		gtk_list_store_swap(store, &iprev, &isel);
-		/* XXX: GTK2 select row?? */
-	}
-
-	gtk_tree_path_free(sel);
-	gtk_tree_path_free(prev);
-}
-
-/*!
- *\brief	Signal handler for 'move down' button
- */
-static void prefs_matcher_down(void)
-{
-	GtkListStore *store = NULL;
-	GtkTreeModel *model = NULL;
-	GtkTreeIter next, sel;
-	GtkTreePath *try;
-
-	if (!gtk_tree_selection_get_selected
-		(gtk_tree_view_get_selection
-			(GTK_TREE_VIEW(matcher.cond_list_view)),
-		 &model,
-		 &sel))
-		return;
-	store = (GtkListStore *)model;
-	try = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &sel);
-	if (!try)
-		return;
-
-	/* move when not at row 0 ... */
-	if (gtk_tree_path_prev(try)) {
-		next = sel;
-		if (gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &next))
-			gtk_list_store_swap(store, &next, &sel);
-	}
-
-	gtk_tree_path_free(try);
-}
-
-static void prefs_matcher_enable_widget(GtkWidget* widget, const gboolean enable)
-{
-	cm_return_if_fail(widget != NULL);
-
-	if(enable == TRUE) {
-		gtk_widget_set_sensitive(widget, TRUE);
-		gtk_widget_show(widget);
-	} else {
-		gtk_widget_set_sensitive(widget, FALSE);
-		gtk_widget_hide(widget);
-	}
-}
-
-static void prefs_matcher_set_model(GtkWidget *widget, GtkTreeModel *model)
-{
-	cm_return_if_fail(widget != NULL);
-	cm_return_if_fail(model != NULL);
-
-	gtk_combo_box_set_model(GTK_COMBO_BOX(widget), model);
-	gtk_combo_box_set_active(GTK_COMBO_BOX(widget), 0);
-}
-
-static void prefs_matcher_second_criteria_sel(GtkWidget *widget,
-					      gpointer user_data)
-{
-	gint criteria = gtk_combo_box_get_active(GTK_COMBO_BOX(
-						matcher.criteria_combo));
-	gint criteria2 = combobox_get_active_data(GTK_COMBO_BOX(
-						matcher.criteria_combo2));
-
-	if(criteria != MATCH_PHRASE) return;
-
-	if(criteria == MATCH_PHRASE) {
-		switch(criteria2) {
-		case CRITERIA_HEADERS_PART:
-			gtk_label_set_text(GTK_LABEL(matcher.match_label),
-					_("Headers part"));
-			break;
-		case CRITERIA_HEADERS_CONT:
-			gtk_label_set_text(GTK_LABEL(matcher.match_label),
-					_("Headers values"));
-			break;
-		case CRITERIA_BODY_PART:
-			gtk_label_set_text(GTK_LABEL(matcher.match_label),
-					_("Body part"));
-			break;
-		case CRITERIA_MESSAGE:
-			gtk_label_set_text(GTK_LABEL(matcher.match_label),
-					_("Whole message"));
-			break;
-		}
-	}
-}
-
-#define MATCH_COMBO_IS_ENABLED(x) (x != MATCH_ALL && x != MATCH_ABOOK && \
-		x != MATCH_PARTIAL && x != MATCH_THREAD && x != MATCH_LABEL) ? TRUE : FALSE
-#define MATCH_CASE_REGEXP(x) (x == MATCH_HEADER || x == MATCH_PHRASE) ? TRUE : FALSE
-#define MATCH_NUMERIC(x) (x == MATCH_AGE || x == MATCH_SCORE || \
-			  x == MATCH_SIZE) ? TRUE : FALSE
-
-/*!
- *\brief	Change widgets depending on the selected condition
- *
- *\param	criteria combo widget
- *\param	user_data Not used
- */
-static void prefs_matcher_criteria_select(GtkWidget *widget,
-					  gpointer user_data)
-{
-	gint value, old_value;
-
-	old_value = matcher.selected_criteria;
-	matcher.selected_criteria = value = gtk_combo_box_get_active
-		(GTK_COMBO_BOX(matcher.criteria_combo));
-
-	if (old_value == matcher.selected_criteria)
-		return;
-
-	prefs_matcher_enable_widget(matcher.criteria_label2,
-				    (value == MATCH_ABOOK   ||
-				     value == MATCH_PHRASE  ||
-				     value == MATCH_HEADER  ||
-				     value == MATCH_PARTIAL ||
-				     value == MATCH_THREAD));
-	prefs_matcher_enable_widget(matcher.headers_combo,
-				    (value == MATCH_HEADER));
-	prefs_matcher_enable_widget(matcher.criteria_combo2,
-				    (value == MATCH_PHRASE  ||
-				     value == MATCH_PARTIAL ||
-				     value == MATCH_THREAD));
-	prefs_matcher_enable_widget(matcher.match_combo2,
-				    (value == MATCH_ABOOK ||
-				     value == MATCH_AGE   ||
-				     value == MATCH_FLAG  ||
-				     value == MATCH_LABEL ||
-				     value == MATCH_SIZE));
-	prefs_matcher_enable_widget(matcher.match_label2,
-				    (value == MATCH_ABOOK ||
-				     value == MATCH_FLAG  ||
-				     value == MATCH_LABEL));
-	prefs_matcher_enable_widget(matcher.header_addr_combo,
-				    (value == MATCH_ABOOK));
-	prefs_matcher_enable_widget(matcher.string_entry,
-				    (MATCH_CASE_REGEXP(value) ||
-				     value == MATCH_TEST));
-	prefs_matcher_enable_widget(matcher.calendar,
-				    (value == MATCH_DATE));
-	prefs_matcher_enable_widget(matcher.time_label,
-				    (value == MATCH_DATE));
-	prefs_matcher_enable_widget(matcher.time_entry,
-				    (value == MATCH_DATE));
-	prefs_matcher_enable_widget(matcher.numeric_entry,
-				    MATCH_NUMERIC(value));
-	prefs_matcher_enable_widget(matcher.numeric_label,
-				    (value == MATCH_SCORE));
-	prefs_matcher_enable_widget(matcher.addressbook_folder_combo,
-				    (value == MATCH_ABOOK));
-	prefs_matcher_enable_widget(matcher.match_combo,
-				    MATCH_COMBO_IS_ENABLED(value));
-	prefs_matcher_enable_widget(matcher.case_checkbtn,
-				    MATCH_CASE_REGEXP(value));
-	prefs_matcher_enable_widget(matcher.regexp_checkbtn,
-				    MATCH_CASE_REGEXP(value));
-	prefs_matcher_enable_widget(matcher.test_btn,
-				    (value == MATCH_TEST));
-	prefs_matcher_enable_widget(matcher.addressbook_select_btn,
-				    (value == MATCH_ABOOK));
-	prefs_matcher_enable_widget(matcher.upper_filler,
-				    MATCH_CASE_REGEXP(value));
-	prefs_matcher_enable_widget(matcher.lower_filler,
-				    (value == MATCH_ABOOK));
-
-	gtk_label_set_text(GTK_LABEL(matcher.match_label), "");
-	gtk_entry_set_text(GTK_ENTRY(matcher.string_entry), "");
-
-	switch(value) {
-	case MATCH_ABOOK:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.header_addr_combo), 0);
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.addressbook_folder_combo), 0);
-		prefs_matcher_set_model(matcher.match_combo2, matcher.model_found);
-		gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("in"));
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Header"));
-		gtk_label_set_text(GTK_LABEL(matcher.match_label2), _("content is"));
-		break;
-	case MATCH_DATE:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_date);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Date is"));
-		gtk_calendar_select_today(GTK_CALENDAR(matcher.calendar));
-		gtkut_time_select_select_by_time(GTK_COMBO_BOX(matcher.time_entry), 0, 0);
-		break;
-	case MATCH_AGE:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_age);
-		prefs_matcher_set_model(matcher.match_combo2, matcher.model_age_units);
-		gtk_spin_button_set_range(GTK_SPIN_BUTTON(
-				  matcher.numeric_entry), 0, 10000);
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0);
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2), AGE_DAYS);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Age is"));
-		break;
-	case MATCH_FLAG:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_flags);
-		prefs_matcher_set_model(matcher.match_combo2, matcher.model_set);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Flag"));
-		gtk_label_set_text(GTK_LABEL(matcher.match_label2), _("is"));
-		break;
-	case MATCH_HEADER:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.headers_combo), 0);
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_contain);
-		gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("Name:"));
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Header"));
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), FALSE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), FALSE);
-		break;
-	case MATCH_PARTIAL:
-		prefs_matcher_set_model(matcher.criteria_combo2, matcher.model_partial);
-		gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("Value:"));
-		break;
-	case MATCH_PHRASE:
-		prefs_matcher_set_model(matcher.criteria_combo2, matcher.model_phrase);
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_contain);
-		gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("in"));
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), FALSE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), FALSE);
-		prefs_matcher_second_criteria_sel(NULL, NULL);
-		break;
-	case MATCH_SCORE:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_score);
-		gtk_spin_button_set_range(GTK_SPIN_BUTTON(
-				  	  matcher.numeric_entry), -1000, 1000);
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Score is"));
-		gtk_label_set_text(GTK_LABEL(matcher.numeric_label), _("points"));
-		break;
-	case MATCH_SIZE:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_size);
-		prefs_matcher_set_model(matcher.match_combo2, matcher.model_size_units);
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-					 SIZE_UNIT_KBYTES);
-		gtk_spin_button_set_range(GTK_SPIN_BUTTON(
-				  	  matcher.numeric_entry), 0, 100000);
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry), 0);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Size is"));
-		break;
-	case MATCH_THREAD:
-		prefs_matcher_set_model(matcher.criteria_combo2, matcher.model_thread);
-		gtk_label_set_text(GTK_LABEL(matcher.criteria_label2), _("type is"));
-		break;
-	case MATCH_TEST:
-		prefs_matcher_set_model(matcher.match_combo, matcher.model_test);
-		gtk_label_set_text(GTK_LABEL(matcher.match_label), _("Program returns"));
-		break;
-	}
-}
-
-/*!
- *\brief	Cancel matcher dialog
- */
-static void prefs_matcher_cancel(void)
-{
-	gtk_widget_hide(matcher.window);
-	gtk_window_set_modal(GTK_WINDOW(matcher.window), FALSE);
-	inc_unlock();
-}
-
-/*!
- *\brief	Accept current matchers
- */
-static void prefs_matcher_ok(void)
-{
-	MatcherList *matchers;
-	MatcherProp *matcherprop;
-	AlertValue val;
-	gchar *matcher_str = NULL;
-	gchar *str = NULL;
-	gint row = 1;
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-
-	matchers = prefs_matcher_get_list();
-
-	if (matchers != NULL) {
-		matcherprop = prefs_matcher_dialog_to_matcher();
-		if (matcherprop != NULL) {
-			str = matcherprop_to_string(matcherprop);
-			matcherprop_free(matcherprop);
-			if (strcmp(str, "all") != 0) {
-				model = gtk_tree_view_get_model(GTK_TREE_VIEW
-						(matcher.cond_list_view));
-
-				while (gtk_tree_model_iter_nth_child(model, &iter, NULL, row)) {
-					gtk_tree_model_get(model, &iter,
-							   PREFS_MATCHER_COND, &matcher_str,
-							   -1);
-					if (matcher_str && strcmp(matcher_str, str) == 0)
-						break;
-					row++;
-					g_free(matcher_str);
-					matcher_str = NULL;
-				}
-
-				if (!matcher_str || strcmp(matcher_str, str) != 0) {
-	                        	val = alertpanel(_("Entry not saved"),
-       		                        	 _("The entry was not saved.\nClose anyway?"),
-               		                	 NULL, _("_Close"),
-						 NULL, _("_Continue editing"),
-						 NULL, NULL,
-						 ALERTFOCUS_SECOND);
-					if (G_ALERTDEFAULT != val) {
-						g_free(matcher_str);
-						g_free(str);
-						matcherlist_free(matchers);
-						return;
-					}
-				}
-				g_free(matcher_str);
-			}
-		}
-		g_free(str);
-		gtk_widget_hide(matcher.window);
-		gtk_window_set_modal(GTK_WINDOW(matcher.window), FALSE);
-		if (matchers_callback != NULL)
-			matchers_callback(matchers);
-		matcherlist_free(matchers);
-	}
-	inc_unlock();
-}
-
-/*!
- *\brief	Called when closing dialog box
- *
- *\param	widget Dialog widget
- *\param	event Event info
- *\param	data User data
- *
- *\return	gint TRUE
- */
-static gint prefs_matcher_deleted(GtkWidget *widget, GdkEventAny *event,
-				  gpointer data)
-{
-	prefs_matcher_cancel();
-	return TRUE;
-}
-
-/*
- * Strings describing test format strings
- *
- * When adding new lines, remember to put 2 strings for each line
- */
-static gchar *test_desc_strings[] = {
-	"%%",	N_("literal %"),
-	"%s",	N_("Subject"),
-	"%f",	N_("From"),
-	"%t",	N_("To"),
-	"%c",	N_("Cc"),
-	"%d",	N_("Date"),
-	"%i",	N_("Message-ID"),
-	"%n",	N_("Newsgroups"),
-	"%r",	N_("References"),
-	"%F",	N_("filename (should not be modified)"),
-	"\\n",	N_("new line"),
-	"\\",	N_("escape character for quotes"),
-	"\\\"", N_("quote character"),
-	NULL,   NULL
-};
-
-static DescriptionWindow test_desc_win = {
-	NULL,
-        NULL,
-	TRUE,
-        2,
-        N_("Match Type: 'Test'"),
-	N_("'Test' allows you to test a message or message element "
-	   "using an external program or script. The program will "
-	   "return either 0 or 1.\n\n"
-	   "The following symbols can be used:"),
-        test_desc_strings
-};
-
-
-
-/*!
- *\brief	Show Test action's info
- */
-static void prefs_matcher_test_info(GtkWidget *widget, GtkWidget *parent)
-{
-	test_desc_win.parent = parent;
-	description_window_create(&test_desc_win);
-}
-
-static void prefs_matcher_addressbook_select(void)
-{
-	const gchar *folderpath = NULL;
-	gchar *new_path = NULL;
-
-	folderpath = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((matcher.addressbook_folder_combo)))));
-	new_path = addressbook_folder_selection(folderpath);
-	if (new_path) {
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((matcher.addressbook_folder_combo)))), new_path);
-		g_free(new_path);
-	}
-}
-
-/*
- * list view
- */
-
-static GtkListStore* prefs_matcher_create_data_store(void)
-{
-	return gtk_list_store_new(N_PREFS_MATCHER_COLUMNS,
-				  G_TYPE_STRING,
-				  G_TYPE_BOOLEAN,
-				  -1);
-}
-
-static void prefs_matcher_list_view_insert_matcher(GtkWidget *list_view,
-						   GtkTreeIter *row_iter,
-						   const gchar *matcher,
-						   gboolean is_valid)
-{
-	GtkTreeIter iter;
-	GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model
-					(GTK_TREE_VIEW(list_view)));
-
-	if (row_iter == NULL) {
-		/* append new */
-		gtk_list_store_append(list_store, &iter);
-	} else {
-		/* change existing */
-		iter = *row_iter;
-	}
-
-	gtk_list_store_set(list_store, &iter,
-			   PREFS_MATCHER_COND, matcher,
-			   PREFS_MATCHER_COND_VALID, is_valid,
-			   -1);
-}
-
-static GtkWidget *prefs_matcher_list_view_create(void)
-{
-	GtkTreeView *list_view;
-	GtkTreeSelection *selector;
-	GtkTreeModel *model;
-
-	model = GTK_TREE_MODEL(prefs_matcher_create_data_store());
-	list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model));
-	g_object_unref(model);
-
-	gtk_tree_view_set_reorderable(list_view, TRUE);
-
-	selector = gtk_tree_view_get_selection(list_view);
-	gtk_tree_selection_set_mode(selector, GTK_SELECTION_BROWSE);
-	gtk_tree_selection_set_select_function(selector, prefs_matcher_selected,
-					       NULL, NULL);
-
-	/* create the columns */
-	prefs_matcher_create_list_view_columns(GTK_WIDGET(list_view));
-
-	return GTK_WIDGET(list_view);
-}
-
-static void prefs_matcher_create_list_view_columns(GtkWidget *list_view)
-{
-	GtkTreeViewColumn *column;
-	GtkCellRenderer *renderer;
-
-	renderer = gtk_cell_renderer_text_new();
-	column = gtk_tree_view_column_new_with_attributes
-		(_("Current condition rules"),
-		 renderer,
-		 "text", PREFS_MATCHER_COND,
-		 NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
-}
-
-static void prefs_matcher_set_criteria(const gint criteria)
-{
-	gint match_criteria = 0;
-
-	switch (criteria) {
-	case CRITERIA_FOUND_IN_ADDRESSBOOK:
-		match_criteria = MATCH_ABOOK;
-		break;
-	case CRITERIA_ALL:
-		match_criteria = MATCH_ALL;
-		break;
-	case CRITERIA_AGE_GREATER:
-	case CRITERIA_AGE_LOWER:
-	case CRITERIA_AGE_GREATER_HOURS:
-	case CRITERIA_AGE_LOWER_HOURS:
-		match_criteria = MATCH_AGE;
-		break;
-	case CRITERIA_DATE_AFTER:
-	case CRITERIA_DATE_BEFORE:
-		match_criteria = MATCH_DATE;
-		break;
-	case CRITERIA_SCORE_GREATER:
-	case CRITERIA_SCORE_LOWER:
-	case CRITERIA_SCORE_EQUAL:
-		match_criteria = MATCH_SCORE;
-		break;
-	case CRITERIA_SIZE_GREATER:
-	case CRITERIA_SIZE_SMALLER:
-	case CRITERIA_SIZE_EQUAL:
-		match_criteria = MATCH_SIZE;
-		break;
-	case CRITERIA_SUBJECT:
-	case CRITERIA_FROM:
-	case CRITERIA_TO:
-	case CRITERIA_CC:
-	case CRITERIA_TO_OR_CC:
-	case CRITERIA_MESSAGEID:
-	case CRITERIA_INREPLYTO:
-	case CRITERIA_REFERENCES:
-	case CRITERIA_HEADER:
-		match_criteria = MATCH_HEADER;
-		break;
-	case CRITERIA_HEADERS_PART:
-	case CRITERIA_HEADERS_CONT:
-	case CRITERIA_BODY_PART:
-	case CRITERIA_MESSAGE:
-		match_criteria = MATCH_PHRASE;
-		break;
-	case CRITERIA_TEST:
-		match_criteria = MATCH_TEST;
-		break;
-	case CRITERIA_UNREAD:
-	case CRITERIA_NEW:
-	case CRITERIA_MARKED:
-	case CRITERIA_DELETED:
-	case CRITERIA_REPLIED:
-	case CRITERIA_FORWARDED:
-	case CRITERIA_LOCKED:
-	case CRITERIA_SPAM:
-	case CRITERIA_HAS_ATTACHMENT:
-	case CRITERIA_SIGNED:
-		match_criteria = MATCH_FLAG;
-		break;
-	case CRITERIA_PARTIAL:
-		match_criteria = MATCH_PARTIAL;
-		break;
-	case CRITERIA_IGNORE_THREAD:
-	case CRITERIA_WATCH_THREAD:
-		match_criteria = MATCH_THREAD;
-		break;
-	}
-
-	gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo),
-				 match_criteria);
-
-	switch(match_criteria) {
-	case MATCH_HEADER:
-		if(criteria != CRITERIA_HEADER)
-			combobox_select_by_data(GTK_COMBO_BOX(
-						matcher.headers_combo),
-						criteria);
-		break;
-	case MATCH_AGE:
-	case MATCH_DATE:
-	case MATCH_SCORE:
-	case MATCH_SIZE:
-	case MATCH_FLAG:
-		combobox_select_by_data(GTK_COMBO_BOX(
-					matcher.match_combo), criteria);
-		break;
-	case MATCH_PHRASE:
-		combobox_select_by_data(GTK_COMBO_BOX(
-					matcher.criteria_combo2), criteria);
-		break;
-	}
-}
-
-static gboolean prefs_matcher_selected(GtkTreeSelection *selector,
-				       GtkTreeModel *model,
-				       GtkTreePath *path,
-				       gboolean currently_selected,
-				       gpointer data)
-{
-	gchar *matcher_str;
-	MatcherProp *prop;
-	gboolean negative_cond;
-	gint criteria;
-	GtkTreeIter iter;
-	gboolean is_valid;
-	struct tm lt;
-	char  zone[6];
-
-	if (currently_selected)
-		return TRUE;
-
-	if (!gtk_tree_model_get_iter(model, &iter, path))
-		return TRUE;
-
-	gtk_tree_model_get(model, &iter,
-			   PREFS_MATCHER_COND_VALID,  &is_valid,
-			   PREFS_MATCHER_COND, &matcher_str,
-			   -1);
-
-	if (!is_valid) {
-		g_free(matcher_str);
-		prefs_matcher_reset_condition();
-		return TRUE;
-	}
-
-	negative_cond = FALSE;
-
-	prop = matcher_parser_get_prop(matcher_str);
-	if (prop == NULL) {
-		g_free(matcher_str);
-		return TRUE;
-	}
-
-	criteria = prefs_matcher_get_criteria_from_matching(prop->criteria);
-	prefs_matcher_set_criteria(criteria);
-
-	switch(prop->criteria) {
-	case MATCHCRITERIA_NOT_UNREAD:
-	case MATCHCRITERIA_NOT_NEW:
-	case MATCHCRITERIA_NOT_MARKED:
-	case MATCHCRITERIA_NOT_DELETED:
-	case MATCHCRITERIA_NOT_REPLIED:
-	case MATCHCRITERIA_NOT_FORWARDED:
-	case MATCHCRITERIA_NOT_LOCKED:
-	case MATCHCRITERIA_NOT_SPAM:
-	case MATCHCRITERIA_HAS_NO_ATTACHMENT:
-	case MATCHCRITERIA_NOT_SIGNED:
-	case MATCHCRITERIA_NOT_PARTIAL:
-	case MATCHCRITERIA_NOT_IGNORE_THREAD:
-	case MATCHCRITERIA_NOT_WATCH_THREAD:
-	case MATCHCRITERIA_NOT_SUBJECT:
-	case MATCHCRITERIA_NOT_FROM:
-	case MATCHCRITERIA_NOT_TO:
-	case MATCHCRITERIA_NOT_CC:
-	case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
-	case MATCHCRITERIA_NOT_MESSAGEID:
-	case MATCHCRITERIA_NOT_INREPLYTO:
-	case MATCHCRITERIA_NOT_REFERENCES:
-	case MATCHCRITERIA_NOT_HEADER:
-	case MATCHCRITERIA_NOT_HEADERS_PART:
-	case MATCHCRITERIA_NOT_HEADERS_CONT:
-	case MATCHCRITERIA_NOT_MESSAGE:
-	case MATCHCRITERIA_NOT_BODY_PART:
-	case MATCHCRITERIA_NOT_TEST:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-		negative_cond = TRUE;
-		break;
-	}
-
-	switch(prop->criteria) {
-	case MATCHCRITERIA_ALL:
-		break;
-
-	case MATCHCRITERIA_NOT_SUBJECT:
-	case MATCHCRITERIA_NOT_FROM:
-	case MATCHCRITERIA_NOT_TO:
-	case MATCHCRITERIA_NOT_CC:
-	case MATCHCRITERIA_NOT_TO_AND_NOT_CC:
-	case MATCHCRITERIA_NOT_MESSAGEID:
-	case MATCHCRITERIA_NOT_INREPLYTO:
-	case MATCHCRITERIA_NOT_REFERENCES:
-	case MATCHCRITERIA_NOT_HEADERS_PART:
-	case MATCHCRITERIA_NOT_HEADERS_CONT:
-	case MATCHCRITERIA_NOT_BODY_PART:
-	case MATCHCRITERIA_NOT_MESSAGE:
-	case MATCHCRITERIA_NOT_TEST:
-	case MATCHCRITERIA_SUBJECT:
-	case MATCHCRITERIA_FROM:
-	case MATCHCRITERIA_TO:
-	case MATCHCRITERIA_CC:
-	case MATCHCRITERIA_TO_OR_CC:
-	case MATCHCRITERIA_MESSAGEID:
-	case MATCHCRITERIA_INREPLYTO:
-	case MATCHCRITERIA_REFERENCES:
-	case MATCHCRITERIA_HEADERS_PART:
-	case MATCHCRITERIA_HEADERS_CONT:
-	case MATCHCRITERIA_BODY_PART:
-	case MATCHCRITERIA_MESSAGE:
-	case MATCHCRITERIA_TEST:
-		gtk_entry_set_text(GTK_ENTRY(matcher.string_entry), prop->expr);
-		break;
-
-	case MATCHCRITERIA_DATE_AFTER:
-	case MATCHCRITERIA_DATE_BEFORE:
-		zone[0] = '\0';
-		procheader_date_parse_to_tm(prop->expr, &lt, zone);
-		gtk_calendar_select_day(GTK_CALENDAR(matcher.calendar), lt.tm_mday);
-		gtk_calendar_select_month(GTK_CALENDAR(matcher.calendar), lt.tm_mon, lt.tm_year + 1900);
-		gtkut_time_select_select_by_time(GTK_COMBO_BOX(matcher.time_entry), lt.tm_hour, lt.tm_min);
-
-		break;
-
-	case MATCHCRITERIA_FOUND_IN_ADDRESSBOOK:
-	case MATCHCRITERIA_NOT_FOUND_IN_ADDRESSBOOK:
-	{
-		gchar *header;
-		gchar *expr;
-
-		/* matcher expressions contain UNtranslated "Any"/"All",
-		  select the relevant translated combo item */
-		if (strcasecmp(prop->header, "All") == 0)
-			header = (gchar*)C_("Filtering Matcher Menu", "All");
-		else
-			if (strcasecmp(prop->header, "Any") == 0)
-				header = _("Any");
-			else
-				header = prop->header;
-		if (strcasecmp(prop->expr, "Any") == 0)
-			expr = _("Any");
-		else
-			expr = prop->expr;
-
-		gtk_entry_set_text(GTK_ENTRY(matcher.header_addr_entry), header);
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((matcher.addressbook_folder_combo)))), expr);
-		break;
-	}
-
-	case MATCHCRITERIA_AGE_GREATER:
-	case MATCHCRITERIA_AGE_LOWER:
-		if(prop->value >= 7 && !(prop->value % 7)) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-						 AGE_WEEKS);
-			gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-					matcher.numeric_entry), prop->value/7);
-		} else {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-						 AGE_DAYS);
-			gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-					matcher.numeric_entry), prop->value);
-		}
-		break;
-
-	case MATCHCRITERIA_AGE_GREATER_HOURS:
-	case MATCHCRITERIA_AGE_LOWER_HOURS:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-					 AGE_HOURS);
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-				matcher.numeric_entry), prop->value);
-		break;
-
-	case MATCHCRITERIA_SCORE_GREATER:
-	case MATCHCRITERIA_SCORE_LOWER:
-	case MATCHCRITERIA_SCORE_EQUAL:
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(matcher.numeric_entry),
-					  prop->value);
-		break;
-
-	case MATCHCRITERIA_SIZE_GREATER:
-	case MATCHCRITERIA_SIZE_SMALLER:
-	case MATCHCRITERIA_SIZE_EQUAL:
-		if(prop->value >= MB_SIZE && !(prop->value % MB_SIZE)) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-						 SIZE_UNIT_MBYTES);
-			gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-					matcher.numeric_entry), prop->value/MB_SIZE);
-		} else if(prop->value >= KB_SIZE && !(prop->value % KB_SIZE)) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-						 SIZE_UNIT_KBYTES);
-			gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-					matcher.numeric_entry), prop->value/KB_SIZE);
-		} else {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-						 SIZE_UNIT_BYTES);
-			gtk_spin_button_set_value(GTK_SPIN_BUTTON(
-					matcher.numeric_entry), prop->value);
-		}
-		break;
-
-	case MATCHCRITERIA_NOT_HEADER:
-	case MATCHCRITERIA_HEADER:
-		gtk_entry_set_text(GTK_ENTRY(matcher.header_entry), prop->header);
-		gtk_entry_set_text(GTK_ENTRY(matcher.string_entry), prop->expr);
-		break;
-	}
-
-	switch(criteria) {
-	case CRITERIA_SUBJECT:
-	case CRITERIA_FROM:
-	case CRITERIA_TO:
-	case CRITERIA_CC:
-	case CRITERIA_TO_OR_CC:
-	case CRITERIA_MESSAGEID:
-	case CRITERIA_INREPLYTO:
-	case CRITERIA_REFERENCES:
-	case CRITERIA_HEADER:
-	case CRITERIA_HEADERS_PART:
-	case CRITERIA_HEADERS_CONT:
-	case CRITERIA_BODY_PART:
-	case CRITERIA_MESSAGE:
-	case CRITERIA_TEST:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo),
-					negative_cond ? PREDICATE_DOES_NOT_CONTAIN :
-							PREDICATE_CONTAINS);
-		break;
-	case CRITERIA_FOUND_IN_ADDRESSBOOK:
-	case CRITERIA_UNREAD:
-	case CRITERIA_NEW:
-	case CRITERIA_MARKED:
-	case CRITERIA_DELETED:
-	case CRITERIA_REPLIED:
-	case CRITERIA_FORWARDED:
-	case CRITERIA_LOCKED:
-	case CRITERIA_SPAM:
-	case CRITERIA_HAS_ATTACHMENT:
-	case CRITERIA_SIGNED:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.match_combo2),
-					 negative_cond ? PREDICATE_FLAG_DISABLED :
-					 		 PREDICATE_FLAG_ENABLED);
-		break;
-	case CRITERIA_WATCH_THREAD:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo2),
-					 negative_cond ? THREAD_NOT_WATCHED :
-					 		 THREAD_WATCHED);
-		break;
-	case CRITERIA_IGNORE_THREAD:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo2),
-					 negative_cond ? THREAD_NOT_IGNORED :
-					 		 THREAD_IGNORED);
-		break;
-	case CRITERIA_PARTIAL:
-		gtk_combo_box_set_active(GTK_COMBO_BOX(matcher.criteria_combo2),
-					 negative_cond ? PREDICATE_FLAG_DISABLED :
-					 		 PREDICATE_FLAG_ENABLED);
-		break;
-	}
-
-	switch(prop->matchtype) {
-	case MATCHTYPE_MATCH:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), FALSE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), TRUE);
-		break;
-
-	case MATCHTYPE_MATCHCASE:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), FALSE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), FALSE);
-		break;
-
-	case MATCHTYPE_REGEXP:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), TRUE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), TRUE);
-		break;
-
-	case MATCHTYPE_REGEXPCASE:
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.regexp_checkbtn), TRUE);
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(matcher.case_checkbtn), FALSE);
-		break;
-	}
-
-	g_free(matcher_str);
-	return TRUE;
-}
-
blob - d8be7e816a4d25a281c1a98b65573edc747689c6
blob + 7c2366c751e1ae01a8f4a0bcd45d10c1dac23cfd
--- src/prefs_other.c
+++ src/prefs_other.c
@@ -35,13 +35,13 @@
 #include "prefs_gtk.h"
 
 #include "gtk/gtkutils.h"
+#include "gtk/manage_window.h"
 #include "gtk/prefswindow.h"
 #include "combobox.h"
 
-#include "manage_window.h"
-#include "imap-thread.h"
+#include "etpan/imap-thread.h"
 
-#include "file-utils.h"
+#include "common/file-utils.h"
 
 typedef struct _OtherPage
 {
@@ -105,8 +105,6 @@ static void prefs_keybind_preset_changed(GtkComboBox *
 		{"<Actions>/Menu/Edit/Copy",				"<control>C"},
 		{"<Actions>/Menu/Edit/SelectAll",			"<control>A"},
 		{"<Actions>/Menu/Edit/Find",				"<control>F"},
-		{"<Actions>/Menu/Edit/SearchFolder",			"<shift><control>F"},
-		{"<Actions>/Menu/Edit/QuickSearch",			"slash"},
 
 		{"<Actions>/Menu/View/ShowHide/MenuBar",		"<control>F12"},
 		{"<Actions>/Menu/View/ShowHide/MessageView",		"V"},
blob - 7337ce7277fc28969c3f8e5383173ca57800a79f (mode 644)
blob + /dev/null
--- src/prefs_quote.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2025 The Claws Mail Team and Colin Leroy
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include "defs.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "prefs_common.h"
-#include "prefs_gtk.h"
-#include "prefs_template.h"
-#include "alertpanel.h"
-
-#include "gtk/gtkutils.h"
-#include "gtk/prefswindow.h"
-
-#include "manage_window.h"
-#include "quote_fmt.h"
-
-typedef struct _QuotePage
-{
-	PrefsPage page;
-
-	GtkWidget *window;
-
-	GtkWidget *checkbtn_compose_with_format;
-	GtkWidget *entry_subject;
-	GtkWidget *text_format;
-	GtkWidget *text_quotefmt;
-	GtkWidget *text_fw_quotefmt;
-	GtkWidget *btn_quotedesc;
-} QuotePage;
-
-QuotePage *prefs_quote;
-
-static void prefs_quote_set_default_new_msg_fmt(void)
-{
-	cm_return_if_fail(prefs_quote->text_format != NULL);
-
-	pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_format),
-		_("Hello,\\n"));
-}
-
-static void prefs_quote_set_default_reply_fmt(void)
-{
-	cm_return_if_fail(prefs_quote->text_quotefmt != NULL);
-
-	pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_quotefmt),
-		_("On %d\\n%f wrote:\\n\\n%q"));
-}
-
-static void prefs_quote_set_default_forward_fmt(void)
-{
-	cm_return_if_fail(prefs_quote->text_fw_quotefmt != NULL);
-
-	pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_fw_quotefmt),
-		_("\\n\\nBegin forwarded message:\\n\\n"
-		"?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
-		"?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"));
-}
-
-static void prefs_quote_create_widget(PrefsPage *_page, GtkWindow *window,
-			       	  gpointer data)
-{
-	QuotePage *prefs_quote = (QuotePage *) _page;
-
-	GtkWidget *vbox;
-	GtkWidget *vbox2;
-	GtkWidget *notebook;
-
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-	gtk_widget_show (vbox);
-
-	notebook = gtk_notebook_new();
-	gtk_widget_show(notebook);
-	gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
-
-	/* new message */
-	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING);
-	gtk_widget_show (vbox2);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
-
-	quotefmt_create_new_msg_fmt_widgets(
-				window,
-				vbox2,
-				&prefs_quote->checkbtn_compose_with_format,
-				NULL,
-				&prefs_quote->entry_subject,
-				&prefs_quote->text_format,
-				TRUE, prefs_quote_set_default_new_msg_fmt);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(C_("Templates", "New")));
-
-	/* reply */
-	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING);
-	gtk_widget_show (vbox2);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
-
-	quotefmt_create_reply_fmt_widgets(
-				window,
-				vbox2,
-				NULL,
-				NULL,
-				&prefs_quote->text_quotefmt,
-				TRUE, prefs_quote_set_default_reply_fmt);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(C_("Templates", "Reply")));
-
-	/* forward */
-	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING);
-	gtk_widget_show (vbox2);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
-
-	quotefmt_create_forward_fmt_widgets(
-				window,
-				vbox2,
-				NULL,
-				NULL,
-				&prefs_quote->text_fw_quotefmt,
-				TRUE, prefs_quote_set_default_forward_fmt);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, gtk_label_new(C_("Templates", "Forward")));
-
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_quote->checkbtn_compose_with_format),
-			prefs_common.compose_with_format);
-	pref_set_entry_from_pref(GTK_ENTRY(prefs_quote->entry_subject),
-			prefs_common.compose_subject_format);
-	if (prefs_common.compose_body_format)
-		pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_format),
-				prefs_common.compose_body_format);
-	else
-		prefs_quote_set_default_new_msg_fmt();
-
-	if (prefs_common.quotefmt)
-		pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_quotefmt),
-				prefs_common.quotefmt);
-	else
-		prefs_quote_set_default_reply_fmt();
-
-	if (prefs_common.fw_quotefmt)
-		pref_set_textview_from_pref(GTK_TEXT_VIEW(prefs_quote->text_fw_quotefmt),
-				prefs_common.fw_quotefmt);
-	else
-		prefs_quote_set_default_forward_fmt();
-
-	prefs_quote->window		= GTK_WIDGET(window);
-	prefs_quote->page.widget = vbox;
-}
-
-static void prefs_quote_save(PrefsPage *_page)
-{
-	QuotePage *page = (QuotePage *) _page;
-
-	g_free(prefs_common.compose_subject_format);
-	prefs_common.compose_subject_format = NULL;
-	g_free(prefs_common.compose_body_format);
-	prefs_common.compose_body_format = NULL;
-	g_free(prefs_common.quotefmt);
-	prefs_common.quotefmt = NULL;
-	g_free(prefs_common.fw_quotefmt);
-	prefs_common.fw_quotefmt = NULL;
-
-	prefs_common.compose_with_format =
-		gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_compose_with_format));
-	prefs_common.compose_subject_format = pref_get_pref_from_entry(
-			GTK_ENTRY(page->entry_subject));
-	prefs_common.compose_body_format = pref_get_pref_from_textview(
-			GTK_TEXT_VIEW(page->text_format));
-	quotefmt_check_new_msg_formats(prefs_common.compose_with_format,
-								   NULL,
-								   prefs_common.compose_subject_format,
-								   prefs_common.compose_body_format);
-
-	prefs_common.quotefmt = pref_get_pref_from_textview(
-			GTK_TEXT_VIEW(page->text_quotefmt));
-	quotefmt_check_reply_formats(TRUE, NULL, prefs_common.quotefmt);
-
-	prefs_common.fw_quotefmt = pref_get_pref_from_textview(
-			GTK_TEXT_VIEW(page->text_fw_quotefmt));
-	quotefmt_check_forward_formats(TRUE, NULL, prefs_common.fw_quotefmt);
-}
-
-static void prefs_quote_destroy_widget(PrefsPage *_page)
-{
-}
-
-void prefs_quote_init(void)
-{
-	QuotePage *page;
-	static gchar *path[3];
-
-	path[0] = _("Write");
-	path[1] = _("Templates");
-	path[2] = NULL;
-
-	page = g_new0(QuotePage, 1);
-	page->page.path = path;
-	page->page.create_widget = prefs_quote_create_widget;
-	page->page.destroy_widget = prefs_quote_destroy_widget;
-	page->page.save_page = prefs_quote_save;
-	page->page.weight = 185.0;
-	prefs_gtk_register_page((PrefsPage *) page);
-	prefs_quote = page;
-}
-
-void prefs_quote_done(void)
-{
-	prefs_gtk_unregister_page((PrefsPage *) prefs_quote);
-	g_free(prefs_quote);
-}
blob - 8fba512120a755c0fec132f8af1d56f54bd0ccdf (mode 644)
blob + /dev/null
--- src/prefs_quote.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2012 Colin Leroy <colin@colino.net> & the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- * 
- */
-
-#ifndef PREFS_QUOTE_H
-#define PREFS_QUOTE_H
-
-void prefs_quote_init	(void);
-void prefs_quote_done	(void);
-
-#endif /* PREFS_QUOTE_H */ 
blob - 56e7ae4bfbfe54f30a5a7c6668544bc763d88e5c
blob + 400bf6015e423f4161bdff135f36defac37fca2b
--- src/prefs_summaries.c
+++ src/prefs_summaries.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
 #include "defs.h"
 
 #include <stdio.h>
blob - 928d9a1b812ee74671940e1011d73dacdf8b58f6 (mode 644)
blob + /dev/null
--- src/prefs_template.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Claws Mail templates subsystem
- * Copyright (C) 2001 Alexander Barinov
- * Copyright (C) 2001-2025 The Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#include "compose.h"
-#include "quote_fmt.h"
-#include "prefs_common.h"
-#include "account.h"
-
-gboolean prefs_template_string_is_valid(gchar *string, gint *line, gboolean escaped_string, gboolean email)
-{
-	gboolean result = TRUE;
-	if (string && *string != '\0') {
-		gchar *tmp = NULL;
-		gchar *parsed_buf;
-		MsgInfo dummyinfo;
-		PrefsAccount *account = account_get_default();
-
-		if (escaped_string) {
-			tmp = malloc(strlen(string)+1);
-			pref_get_unescaped_pref(tmp, string);
-		} else {
-			tmp = g_strdup(string);
-		}
-		memset(&dummyinfo, 0, sizeof(MsgInfo));
-		/* init dummy fields, so we can test the result of the parse */
-		dummyinfo.date="Sat, 30 May 2009 01:23:45 +0200";
-		dummyinfo.fromname="John Doe";
-		dummyinfo.from="John Doe <john@example.com>";
-		dummyinfo.to="John Doe <john@example.com>";
-		dummyinfo.cc="John Doe <john@example.com>";
-		dummyinfo.msgid="<1234john@example.com>";
-		dummyinfo.inreplyto="<1234john@example.com>";
-		dummyinfo.subject="subject";
-
-		quote_fmt_init(&dummyinfo, NULL, NULL, TRUE, account, FALSE);
-		quote_fmt_scan_string(tmp);
-		quote_fmt_parse();
-		g_free(tmp);
-		parsed_buf = quote_fmt_get_buffer();
-		if (!parsed_buf) {
-			if (line)
-				*line = quote_fmt_get_line();
-			quote_fmtlex_destroy();
-			return FALSE;
-		}
-		quote_fmt_reset_vartable();
-		quote_fmtlex_destroy();
-	}
-	return result;
-}
blob - 2ef529bbfa8755c0219c7b5e38ef8a1cc9f6e999 (mode 644)
blob + /dev/null
--- src/prefs_template.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Claws Mail templates subsystem
- * Copyright (C) 2001 Alexander Barinov
- * Copyright (C) 2001-2018 The Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef __PREFS_TEMPLATES_H__
-#define __PREFS_TEMPLATES_H__
-
-gboolean prefs_template_string_is_valid(gchar *string, gint *line,
-			gboolean escaped_string, gboolean email);
-
-#endif /* __PREFS_TEMPLATES_H__ */
blob - 27ff823007e1dd61972678734f753f44c50c299b
blob + 3bd3f18d16d9304a0f76fb9a1bf6c126ef59a7ff
--- src/prefs_themes.c
+++ src/prefs_themes.c
@@ -269,20 +269,7 @@ static void prefs_themes_foreach_file(const gchar *dir
 
 static gboolean prefs_themes_is_system_theme(const gchar *dirname)
 {
-	gint len;
-	gchar *system_theme_dir;
-	gboolean is_sys = FALSE;
-
-	cm_return_val_if_fail(dirname != NULL, FALSE);
-
-	system_theme_dir = stock_pixmap_get_system_theme_dir_for_theme(NULL);
-	len = strlen(system_theme_dir);
-	if (strlen(dirname) > len && 0 == strncmp(dirname, system_theme_dir, len))
-		is_sys = TRUE;
-
-	g_free(system_theme_dir);
-
-	return is_sys;
+	return FALSE;
 }
 
 static void prefs_themes_set_themes_menu(GtkComboBox *combo, const ThemesData *tdata)
blob - 306ddfe3130b6dddc9efb20521cb6b643e798e22
blob + d6a2bfcde3ce2100bc0fe44829e08af52712ba1d
--- src/privacy.c
+++ src/privacy.c
@@ -17,8 +17,6 @@
  *
  */
 
-#include "config.h"
-
 #include <glib.h>
 #include <glib/gi18n.h>
 
blob - 65051dafc8f0c6b128384070754e58b73700c86f
blob + afe168ef00edaf09a2fd1e5788aebc6d1d9bfd5c
--- src/privacy.h
+++ src/privacy.h
@@ -109,7 +109,7 @@ struct _PrivacySystem {
 
 	gboolean	   can_sign;
 	gboolean	 (*sign)		(MimeInfo *mimeinfo,
-						 PrefsAccount *account, 
+						 PrefsAccount *account,
 						 const gchar *from_addr);
 
 	gboolean	   can_encrypt;
blob - f9859013792f4cdaeed2969f1f68060c12237af9
blob + 647a3419e2a95bab60837ca3212f4141200ab6b7
--- src/procmime.c
+++ src/procmime.c
@@ -1148,18 +1148,12 @@ GList *procmime_get_mime_type_list(void)
 	if (mime_type_list)
 		return mime_type_list;
 
-#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
-	if ((fp = g_fopen(DATAROOTDIR "/mime/globs", "rb")) == NULL)
-#else
 	if ((fp = g_fopen("/usr/share/mime/globs", "rb")) == NULL)
-#endif
 	{
 		fp_is_glob_file = FALSE;
 		if ((fp = g_fopen("/etc/mime.types", "rb")) == NULL) {
-			if ((fp = g_fopen(SYSCONFDIR "/mime.types", "rb"))
-				== NULL) {
-				FILE_OP_ERROR(SYSCONFDIR "/mime.types",
-					"g_fopen");
+			if ((fp = g_fopen("/usr/share/misc/mime.types", "rb")) == NULL) {
+				FILE_OP_ERROR("/usr/share/misc/mime.types", "g_fopen");
 				return NULL;
 			}
 		}
blob - dfc94fa44f848d71dae52ef665b2a62d66b037a6
blob + c502373fc636957efdb626195ee2ab70b8dbcc37
--- src/procmime.h
+++ src/procmime.h
@@ -161,12 +161,6 @@ struct _MimeInfo
 #define IS_BOUNDARY(s, bnd, len) \
 	(bnd && s[0] == '-' && s[1] == '-' && !strncmp(s + 2, bnd, len))
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* MimeInfo handling */
-
 MimeInfo *procmime_mimeinfo_new		(void);
 void procmime_mimeinfo_free_all		(MimeInfo	**mimeinfo_ptr);
 
@@ -228,7 +222,7 @@ gchar *procmime_get_content_type_str		(MimeMediaType  
 void procmime_force_charset			(const gchar 	*str);
 void procmime_force_encoding			(EncodingType	 encoding);
 gboolean procmime_msginfo_is_encrypted		(MsgInfo 	*msginfo);
-int procmime_write_mime_header			(MimeInfo 	*mimeinfo, 
+int procmime_write_mime_header			(MimeInfo 	*mimeinfo,
 						 FILE 		*fp);
 void renderer_read_config(void);
 
@@ -252,8 +246,4 @@ void *procmime_get_part_as_string(MimeInfo *mimeinfo,
 GInputStream *procmime_get_part_as_inputstream(MimeInfo *mimeinfo);
 GdkPixbuf *procmime_get_part_as_pixbuf(MimeInfo *mimeinfo, GError **error);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
 #endif /* __PROCMIME_H__ */
blob - 3fdb63225d4507c3fb35dd2dd3a3d21b315d8282
blob + 548b88c1b3a75a68a05e113242d9385021083b99
--- src/procmsg.c
+++ src/procmsg.c
@@ -16,7 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
blob - 027a60392c240c682c4aec2ae41d228430884712 (mode 644)
blob + /dev/null
--- src/quote_fmt.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2025 the Claws Mail team and 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "manage_window.h"
-#include "description_window.h"
-#include "gtkutils.h"
-
-#include "prefs_gtk.h"
-#include "prefs_common.h"
-#include "quote_fmt.h"
-#include "alertpanel.h"
-#include "prefs_template.h"
-
-
-/*
- * Strings describing quote format strings
- *
- * When adding new lines, remember to put 2 strings for each line
- */
-static gchar *quote_desc_strings[] = {
-	N_("<span weight=\"bold\">symbols:</span>"),				NULL,
-	"%date_fmt{<span style=\"oblique\">fmt</span>} (%D{<span style=\"oblique\">fmt</span>})",	N_("customized date format (see 'man strftime')"), /* date expression */
-	"%date (%d)",				N_("Date"), /* date */
-	"%from (%f)",				N_("From"), /* from */
-	"%email (%A)",				N_("email address of sender"), /* email address */
-	"%fullname (%N)",			N_("full name of sender"), /* full name */
-	"%firstname (%F)",			N_("first name of sender"), /* first name */
-	"%lastname (%L)",			N_("last name of sender"), /* last name */
-	"%initials (%I)",			N_("initials of sender"), /* initial of sender */
-	"%subject (%s)",			N_("Subject"), /* subject */
-	"%to (%t)",					N_("To"), /* to */
-	"%cc (%c)",					N_("Cc"), /* cc */
-	"%references (%r)",			N_("References"), /* references */
-	"%messageid (%i)",			N_("Message-ID"), /* message-id */
-	"%msg (%M)",				N_("message body"), /* message */
-	"%quoted_msg (%Q)",			N_("quoted message body"), /* quoted message */
-	"%msg_no_sig (%m)",			N_("message body without signature"), /* message with no signature */
-	"%quoted_msg_no_sig (%q)",	N_("quoted message body without signature"), /* quoted message with no signature */
-	"%tags",				N_("message tags"), /* message tags */
-	"%cursor (%X)",				N_("cursor position"), /* X marks the cursor spot */
-	"%account_fullname (%af)",	N_("account property: your name"), /* full name in compose account */
-	"%account_email (%am)",		N_("account property: your email address"), /* mail address in compose account */
-	"%account_name (%an)",		N_("account property: account name"), /* compose account name itself */
-	"%account_org (%ao)",		N_("account property: organization"), /* organization in compose account */
-	"%account_sig (%as)",		N_("account property: signature"), /* signature set in account prefs */
-	"%account_sigpath (%asp)",	N_("account property: signature path"), /* signature path set in account prefs */
-	"%addrbook_cc (%ABc)",		N_("address book <span style=\"oblique\">completion</span>: Cc"), /* completion of 'Cc' from address book */
-	"%addrbook_from (%ABf)",	N_("address book <span style=\"oblique\">completion</span>: From"), /* completion of 'From' from address book */
-	"%addrbook_to (%ABt)",		N_("address book <span style=\"oblique\">completion</span>: To"), /* completion of 'To' from address book */
-	"\\%", 				N_("literal %"),
-	"\\\\",				N_("literal backslash"),
-	"\\?",				N_("literal question mark"),
-	"\\!",				N_("literal exclamation mark"),
-	"\\|",				N_("literal pipe"),
-	"\\{",				N_("literal opening curly brace"),
-	"\\}",				N_("literal closing curly brace"),
-	"\\t", 				N_("tab"),
-	"\\n", 				N_("new line"),
-	"",					NULL,
-	N_("<span weight=\"bold\">commands:</span>"),		NULL,
-	"?x{<span style=\"oblique\">expr</span>}\n\n",		N_("insert <span style=\"oblique\">expr</span> if x is set, where x is one of\nthe [dfNFLIstcnriT, ad, af, ao, as, asp, aT, ABc, ABf, ABt]\nsymbols (or their long equivalent)"),
-	"!x{<span style=\"oblique\">expr</span>}\n\n",		N_("insert <span style=\"oblique\">expr</span> if x is not set, where x is one of\nthe [dfNFLIstcnriT, ad, af, ao, as, asp, aT, ABc, ABf, ABt]\nsymbols (or their long equivalent)"),
-	"|file{<span style=\"oblique\">sub_expr</span>}\n(|f{<span style=\"oblique\">sub_expr</span>})",		N_("insert file:\n<span style=\"oblique\">sub_expr</span> is evaluated as the path of the file to insert"), /* insert file */
-	"|program{<span style=\"oblique\">sub_expr</span>}\n(|p{<span style=\"oblique\">sub_expr</span>})\n",	N_("insert program output:\n<span style=\"oblique\">sub_expr</span> is evaluated as a command-line to get\nthe output from"), /* insert program output */
-	"|input{<span style=\"oblique\">sub_expr</span>}\n(|i{<span style=\"oblique\">sub_expr</span>})\n",		N_("insert user input:\n<span style=\"oblique\">sub_expr</span> is a variable to be replaced by\nuser-entered text"), /* insert user input */
-	"|attach{<span style=\"oblique\">sub_expr</span>}\n(|a{<span style=\"oblique\">sub_expr</span>})",		N_("attach file:\n<span style=\"oblique\">sub_expr</span> is evaluated as the path of the file to attach"), /* attach file */
-	"|attach_program{<span style=\"oblique\">sub_expr</span>}\n(|A{<span style=\"oblique\">sub_expr</span>})",	N_("attach file:\n<span style=\"oblique\">sub_expr</span> is evaluated as a command-line to get\nthe filename from"), /* attach file whose name's got from program output */
-	"",					NULL,
-	N_("<span weight=\"bold\">definition of terms:</span>"),	NULL,
-	"<span style=\"oblique\">expr</span>\n",			N_("text that can contain any of the symbols or\ncommands above"),
-	"<span style=\"oblique\">sub_expr</span>\n",		N_("text that can contain any of the symbols (no\ncommands) above"),
-	"<span style=\"oblique\">completion</span>\n\n\n",	N_("completion from address book only works with the first\naddress of the header, it outputs the full name\nof the contact if that address matches exactly\none contact in the address book"),
-	NULL,NULL
-};
-
-static DescriptionWindow quote_desc_win = {
-        NULL,
-	NULL,
-	TRUE,
-        2,
-        N_("Description of symbols"),
-	N_("The following symbols and commands can be used:"),
-        quote_desc_strings
-};
-
-
-void quote_fmt_quote_description(GtkWidget *widget, GtkWidget *pref_window)
-{
-	quote_desc_win.parent = pref_window;
-	description_window_create(&quote_desc_win);
-}
-
-static void quote_fmt_add_buttons(GtkWindow* parent_window, GtkWidget *parent_box,
-			gboolean add_info_button, void(*set_defaults_func)(void)) {
-	GtkWidget *hbox_btns;
-
-	if (!add_info_button && !set_defaults_func)
-		return;
-
-	hbox_btns = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_end (GTK_BOX(parent_box), hbox_btns, FALSE, TRUE, 0);
-
-	if (add_info_button)
-		quotefmt_add_info_button(parent_window, hbox_btns);
-	if (set_defaults_func)
-		quotefmt_add_defaults_button(parent_window, hbox_btns, set_defaults_func);
-
-	gtk_widget_show(GTK_WIDGET(hbox_btns));
-}
-
-void quotefmt_create_new_msg_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_compose_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_subject_format,
-						GtkWidget **edit_body_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void))
-{
-	GtkWidget *checkbtn_use_format = NULL;
-	GtkWidget *vbox_format;
-	GtkWidget *hbox_format;
-	GtkWidget *hbox2_format;
-	GtkWidget *label_from = NULL;
-	GtkWidget *entry_from = NULL;
-	GtkWidget *label_subject;
-	GtkWidget *entry_subject;
-	GtkWidget *scrolledwin_format;
-	GtkWidget *text_format;
-	GtkSizeGroup *size_group;
-
-	if (add_info_button)
-		cm_return_if_fail(parent_window != NULL);
-	cm_return_if_fail(parent_box != NULL);
-	if (checkbtn_compose_with_format)
-		cm_return_if_fail(checkbtn_compose_with_format != NULL);
-
-	cm_return_if_fail(edit_subject_format != NULL);
-	cm_return_if_fail(edit_body_format != NULL);
-
-	size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	if (checkbtn_compose_with_format)
-		PACK_CHECK_BUTTON (parent_box, checkbtn_use_format,
-				   _("Use template when writing new messages"));
-
-	vbox_format = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
-	gtk_widget_show(vbox_format);
-	gtk_container_add(GTK_CONTAINER (parent_box), vbox_format);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox_format), 8);
-
-	if (override_from_format) {
-		hbox2_format = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-		gtk_widget_show (hbox2_format);
-		gtk_box_pack_start (GTK_BOX (vbox_format), hbox2_format, FALSE, FALSE, 0);
-
-		label_from = gtk_label_new ("From");
-		gtk_label_set_xalign(GTK_LABEL(label_from), 1.0);
-		gtk_widget_show (label_from);
-		gtk_box_pack_start (GTK_BOX (hbox2_format), label_from, FALSE, FALSE, 0);
-		gtk_size_group_add_widget(size_group, label_from);
-
-		entry_from = gtk_entry_new ();
-		gtk_widget_show (entry_from);
-		gtk_box_pack_start (GTK_BOX (hbox2_format), entry_from, TRUE, TRUE, 0);
-
-		CLAWS_SET_TIP(entry_from,
-				_("Override From header. This doesn't change the account used to compose the new message."));
-	}
-
-	hbox_format = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-	gtk_widget_show (hbox_format);
-	gtk_box_pack_start (GTK_BOX (vbox_format), hbox_format, FALSE, FALSE, 0);
-
-	label_subject = gtk_label_new ("Subject");
-	gtk_label_set_xalign(GTK_LABEL(label_subject), 1.0);
-	gtk_widget_show (label_subject);
-	gtk_box_pack_start (GTK_BOX (hbox_format), label_subject, FALSE, FALSE, 0);
-	gtk_size_group_add_widget(size_group, label_subject);
-
-	entry_subject = gtk_entry_new ();
-	gtk_widget_show (entry_subject);
-	gtk_box_pack_start (GTK_BOX (hbox_format), entry_subject, TRUE, TRUE, 0);
-
-	scrolledwin_format = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (scrolledwin_format);
-	gtk_box_pack_start (GTK_BOX (vbox_format), scrolledwin_format,
-			    TRUE, TRUE, 0);
-	gtk_scrolled_window_set_policy
-		(GTK_SCROLLED_WINDOW (scrolledwin_format),
-		 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type
-		(GTK_SCROLLED_WINDOW (scrolledwin_format), GTK_SHADOW_IN);
-	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_format), 260);
-
-	text_format = gtk_text_view_new ();
-	gtk_widget_show(text_format);
-	gtk_container_add(GTK_CONTAINER(scrolledwin_format), text_format);
-	gtk_text_view_set_editable (GTK_TEXT_VIEW (text_format), TRUE);
-
-	if (checkbtn_compose_with_format) {
-		SET_TOGGLE_SENSITIVITY(checkbtn_use_format, label_subject);
-		if (override_from_format) {
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, entry_from);
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, label_from);
-		}
-		SET_TOGGLE_SENSITIVITY(checkbtn_use_format, entry_subject);
-		SET_TOGGLE_SENSITIVITY(checkbtn_use_format, text_format);
-	}
-
-	quote_fmt_add_buttons(parent_window, vbox_format,
-				add_info_button, set_defaults_func);
-
-	if (checkbtn_compose_with_format)
-		*checkbtn_compose_with_format = checkbtn_use_format;
-	if (override_from_format)
-		*override_from_format = entry_from;
-	*edit_subject_format = entry_subject;
-	*edit_body_format = text_format;
-
-	g_object_unref(G_OBJECT(size_group));
-}
-
-void quotefmt_create_reply_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_reply_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_reply_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void))
-{
-	GtkWidget *checkbtn_use_format = NULL;
-	GtkWidget *vbox_quote;
-	GtkWidget *hbox1;
-	GtkWidget *hbox2;
-	GtkWidget *hbox3;
-	GtkWidget *label_from = NULL;
-	GtkWidget *entry_from = NULL;
-	GtkWidget *scrolledwin_quotefmt;
-	GtkWidget *text_quotefmt;
-	GtkSizeGroup *size_group;
-
-	if (add_info_button)
-		cm_return_if_fail(parent_window != NULL);
-	cm_return_if_fail(parent_box != NULL);
-	if (checkbtn_reply_with_format)
-		cm_return_if_fail(checkbtn_reply_with_format != NULL);
-
-	cm_return_if_fail(edit_reply_format != NULL);
-
-	size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	if (checkbtn_reply_with_format)
-		PACK_CHECK_BUTTON (parent_box, checkbtn_use_format,
-				   _("Use template when replying to messages"));
-
-	vbox_quote = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
-	gtk_widget_show(vbox_quote);
-	gtk_container_add(GTK_CONTAINER (parent_box), vbox_quote);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
-
-	if (override_from_format) {
-		hbox3 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-		gtk_widget_show (hbox3);
-		gtk_box_pack_start (GTK_BOX (vbox_quote), hbox3, FALSE, FALSE, 0);
-
-		label_from = gtk_label_new ("From:");
-		gtk_label_set_xalign(GTK_LABEL(label_from), 1.0);
-		gtk_widget_show (label_from);
-		gtk_box_pack_start (GTK_BOX (hbox3), label_from, FALSE, FALSE, 0);
-		gtk_size_group_add_widget(size_group, label_from);
-
-		entry_from = gtk_entry_new ();
-		gtk_widget_show (entry_from);
-		gtk_box_pack_start (GTK_BOX (hbox3), entry_from, TRUE, TRUE, 0);
-
-		CLAWS_SET_TIP(entry_from,
-				_("Override From header. This doesn't change the account used to reply."));
-	}
-
-	hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 32);
-	gtk_widget_show (hbox1);
-	gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
-
-	hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-	gtk_widget_show (hbox2);
-	gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
-
-	scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (scrolledwin_quotefmt);
-	gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
-			    TRUE, TRUE, 0);
-	gtk_scrolled_window_set_policy
-		(GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
-		 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type
-		(GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
-	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_quotefmt), 260);
-
-	text_quotefmt = gtk_text_view_new ();
-	gtk_widget_show(text_quotefmt);
-	gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt);
-	gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE);
-
-	if (checkbtn_reply_with_format) {
-		if (override_from_format) {
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, entry_from);
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, label_from);
-		}
-		SET_TOGGLE_SENSITIVITY(checkbtn_use_format, text_quotefmt);
-	}
-
-	quote_fmt_add_buttons(parent_window, vbox_quote,
-				add_info_button, set_defaults_func);
-
-	if (checkbtn_reply_with_format)
-		*checkbtn_reply_with_format = checkbtn_use_format;
-	if (override_from_format)
-		*override_from_format = entry_from;
-	*edit_reply_format = text_quotefmt;
-
-	g_object_unref(G_OBJECT(size_group));
-}
-
-void quotefmt_create_forward_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_forward_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_fw_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void))
-{
-	GtkWidget *checkbtn_use_format = NULL;
-	GtkWidget *vbox_quote;
-	GtkWidget *hbox1;
-	GtkWidget *hbox2;
-	GtkWidget *hbox3;
-	GtkWidget *label_from = NULL;
-	GtkWidget *entry_from = NULL;
-	GtkWidget *scrolledwin_quotefmt;
-	GtkWidget *text_fw_quotefmt;
-	GtkSizeGroup *size_group;
-
-	if (add_info_button)
-		cm_return_if_fail(parent_window != NULL);
-	cm_return_if_fail(parent_box != NULL);
-	if (checkbtn_forward_with_format) {
-		cm_return_if_fail(checkbtn_forward_with_format != NULL);
-	}
-	cm_return_if_fail(edit_fw_format != NULL);
-
-	size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	if (checkbtn_forward_with_format)
-		PACK_CHECK_BUTTON (parent_box, checkbtn_use_format,
-				   _("Use template when forwarding messages"));
-
-	vbox_quote = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
-	gtk_widget_show(vbox_quote);
-	gtk_container_add(GTK_CONTAINER (parent_box), vbox_quote);
-	gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8);
-
-	if (override_from_format) {
-		hbox3 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-		gtk_widget_show (hbox3);
-		gtk_box_pack_start (GTK_BOX (vbox_quote), hbox3, FALSE, FALSE, 0);
-
-		label_from = gtk_label_new ("From:");
-		gtk_label_set_xalign(GTK_LABEL(label_from), 1.0);
-		gtk_widget_show (label_from);
-		gtk_box_pack_start (GTK_BOX (hbox3), label_from, FALSE, FALSE, 0);
-		gtk_size_group_add_widget(size_group, label_from);
-
-		entry_from = gtk_entry_new ();
-		gtk_widget_show (entry_from);
-		gtk_box_pack_start (GTK_BOX (hbox3), entry_from, TRUE, TRUE, 0);
-
-		CLAWS_SET_TIP(entry_from,
-				_("Override From header. This doesn't change the account used to forward."));
-	}
-
-	hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 32);
-	gtk_widget_show (hbox1);
-	gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, FALSE, FALSE, 0);
-
-	hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-	gtk_widget_show (hbox2);
-	gtk_box_pack_start (GTK_BOX (hbox1), hbox2, FALSE, FALSE, 0);
-
-	scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL);
-	gtk_widget_show (scrolledwin_quotefmt);
-	gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt,
-			    TRUE, TRUE, 0);
-	gtk_scrolled_window_set_policy
-		(GTK_SCROLLED_WINDOW (scrolledwin_quotefmt),
-		 GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type
-		(GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), GTK_SHADOW_IN);
-	gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_quotefmt), 260);
-
-	text_fw_quotefmt = gtk_text_view_new ();
-	gtk_widget_show(text_fw_quotefmt);
-	gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt),
-			  text_fw_quotefmt);
-	gtk_text_view_set_editable (GTK_TEXT_VIEW (text_fw_quotefmt), TRUE);
-
-	if (checkbtn_forward_with_format) {
-		if (override_from_format) {
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, entry_from);
-			SET_TOGGLE_SENSITIVITY(checkbtn_use_format, label_from);
-		}
-		SET_TOGGLE_SENSITIVITY(checkbtn_use_format, text_fw_quotefmt);
-	}
-
-	quote_fmt_add_buttons(parent_window, vbox_quote,
-				add_info_button, set_defaults_func);
-
-	if (checkbtn_forward_with_format)
-		*checkbtn_forward_with_format = checkbtn_use_format;
-	if (override_from_format)
-		*override_from_format = entry_from;
-	*edit_fw_format = text_fw_quotefmt;
-
-	g_object_unref(G_OBJECT(size_group));
-}
-
-void quotefmt_add_info_button(GtkWindow *parent_window, GtkWidget *parent_box)
-{
-	GtkWidget *btn_formatdesc;
-
-	btn_formatdesc = gtkut_stock_button("dialog-information", _("_Information"));
-	gtk_widget_show (btn_formatdesc);
-	gtk_box_pack_start (GTK_BOX (parent_box), btn_formatdesc, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(btn_formatdesc), "clicked",
-			 G_CALLBACK(quote_fmt_quote_description), GTK_WIDGET(parent_window));
-}
-
-void quotefmt_add_defaults_button(GtkWindow *parent_window,
-								  GtkWidget *parent_box,
-								  void(*set_defaults_func)(void))
-{
-	GtkWidget *btn_formatdesc;
-
-	cm_return_if_fail(set_defaults_func != NULL);
-
-	btn_formatdesc = gtk_button_new_with_mnemonic (_("Defaults"));
-	gtk_button_set_image (GTK_BUTTON(btn_formatdesc),
-		gtk_image_new_from_icon_name("edit-undo-symbolic", GTK_ICON_SIZE_BUTTON));
-	gtk_widget_show (btn_formatdesc);
-	gtk_box_pack_end (GTK_BOX (parent_box), btn_formatdesc, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(btn_formatdesc), "clicked",
-			 G_CALLBACK(set_defaults_func), GTK_WIDGET(parent_window));
-}
-
-void quotefmt_check_new_msg_formats(gboolean use_format,
-				    gchar *override_from_fmt,
-				    gchar *subject_fmt,
-				    gchar *body_fmt)
-{
-	if (use_format) {
-		gint line;
-
-		if (override_from_fmt && !prefs_template_string_is_valid(override_from_fmt, NULL, TRUE, TRUE))
-			alertpanel_error(_("The \"From\" field of the \"New message\" template contains an invalid email address."));
-
-		if (!prefs_template_string_is_valid(subject_fmt, NULL, TRUE, FALSE))
-			alertpanel_error(_("The \"Subject\" field of the \"New message\" template is invalid."));
-
-		if (!prefs_template_string_is_valid(body_fmt, &line, TRUE, FALSE)) {
-			alertpanel_error(_("The body of the \"New message\" template has an error at line %d."), line);
-		}
-	}
-}
-
-void quotefmt_check_reply_formats(gboolean use_format,
-				  gchar *override_from_fmt,
-				  gchar *body_fmt)
-{
-	if (use_format) {
-		int line;
-		if (override_from_fmt && !prefs_template_string_is_valid(override_from_fmt, NULL, TRUE, TRUE))
-			alertpanel_error(_("The \"From\" field of the \"Reply\" template contains an invalid email address."));
-
-		if (!prefs_template_string_is_valid(body_fmt, &line, TRUE, FALSE)) {
-			alertpanel_error(_("The body of the \"Reply\" template has an error at line %d."), line);
-		}
-	}
-}
-
-void quotefmt_check_forward_formats(gboolean use_format,
-				    gchar *override_from_fmt,
-				    gchar *body_fmt)
-{
-	if (use_format) {
-		int line;
-		if (override_from_fmt && !prefs_template_string_is_valid(override_from_fmt, NULL, TRUE, TRUE))
-			alertpanel_error(_("The \"From\" field of the \"Forward\" template contains an invalid email address."));
-
-		if (!prefs_template_string_is_valid(body_fmt, &line, TRUE, FALSE)) {
-			alertpanel_error(_("The body of the \"Forward\" template has an error at line %d."), line);
-		}
-	}
-}
blob - 2900b947b1ccd756811c85a87e0ceba89ecc6fc9 (mode 644)
blob + /dev/null
--- src/quote_fmt.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef __QUOTE_FMT_H__
-
-#define __QUOTE_FMT_H__
-
-#define quote_fmt_parse	quote_fmtparse
-
-void quote_fmt_quote_description(GtkWidget *widget, GtkWidget *pref_window);
-
-gchar *quote_fmt_get_buffer(void);
-GList *quote_fmt_get_attachments_list(void);
-gint quote_fmt_get_line(void);
-
-void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str,
-		    const gchar *my_body, gboolean my_dry_run,
-			PrefsAccount *account,
-			gboolean escaped_string);
-gint quote_fmtparse(void);
-int quote_fmtlex_destroy(void);
-void quote_fmt_scan_string(const gchar *str);
-void quote_fmt_reset_vartable(void);
-gint quote_fmt_get_cursor_pos(void);
-
-void quotefmt_create_new_msg_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_compose_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_subject_format,
-						GtkWidget **edit_body_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void));
-void quotefmt_create_reply_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_reply_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_reply_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void));
-void quotefmt_create_forward_fmt_widgets(GtkWindow *parent_window,
-						GtkWidget *parent_box,
-						GtkWidget **checkbtn_forward_with_format,
-						GtkWidget **override_from_format,
-						GtkWidget **edit_fw_format,
-						gboolean add_info_button,
-						void(*set_defaults_func)(void));
-void quotefmt_add_info_button(GtkWindow *parent_window, GtkWidget *parent_box);
-void quotefmt_add_defaults_button(GtkWindow *parent_window,
-								  GtkWidget *parent_box,
-								  void(*set_defaults_func)(void));
-
-void quotefmt_check_new_msg_formats(gboolean use_format,
-									gchar *override_from_fmt,
-									gchar *subject_fmt,
-									gchar *body_fmt);
-void quotefmt_check_reply_formats(gboolean use_format,
-									gchar *override_from_fmt,
-									gchar *body_fmt);
-void quotefmt_check_forward_formats(gboolean use_format,
-									gchar *override_from_fmt,
-									gchar *body_fmt);
-
-#endif /* __QUOTE_FMT_H__ */
blob - 6fff24b66470621b42b9c05f1c622aee2ab3ea01 (mode 644)
blob + /dev/null
--- src/quote_fmt_lex.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/* The following defines are adapted from GDB sources (cp-name-parser.y):
-
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
-
-   Parts of the lexer are based on c-exp.y from GDB.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.
-*/
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
-   as well as gratuitiously global symbol names, so we can have multiple
-   yacc generated parsers in gdb.  Note that these are only the variables
-   produced by yacc.  If other parser generators (bison, byacc, etc) produce
-   additional global names that conflict at link time, then those parser
-   generators need to be fixed instead of adding those names to this list. */
-
-#define	yymaxdepth quote_fmtmaxdepth
-#define	yyparse	quote_fmtparse
-#define	yylex	quote_fmtlex
-#define	yyerror	quote_fmterror
-#define	yylval	quote_fmtlval
-#define	yychar	quote_fmtchar
-#define	yydebug	quote_fmtdebug
-#define	yypact	quote_fmtpact	
-#define	yyr1	quote_fmtr1			
-#define	yyr2	quote_fmtr2			
-#define	yydef	quote_fmtdef		
-#define	yychk	quote_fmtchk		
-#define	yypgo	quote_fmtpgo		
-#define	yyact	quote_fmtact		
-#define	yyexca	quote_fmtexca
-#define yyerrflag quote_fmterrflag
-#define yynerrs	quote_fmtnerrs
-#define	yyps	quote_fmtps
-#define	yypv	quote_fmtpv
-#define	yys	quote_fmts
-#define	yy_yys	quote_fmtyys
-#define	yystate	quote_fmtstate
-#define	yytmp	quote_fmttmp
-#define	yyv	quote_fmtv
-#define	yy_yyv	quote_fmtyyv
-#define	yyval	quote_fmtval
-#define	yylloc	quote_fmtlloc
-#define yyreds	quote_fmtreds		/* With YYDEBUG defined */
-#define yytoks	quote_fmttoks		/* With YYDEBUG defined */
-#define yylhs	quote_fmtyylhs
-#define yylen	quote_fmtyylen
-#define yydefred quote_fmtyydefred
-#define yydgoto	quote_fmtyydgoto
-#define yysindex quote_fmtyysindex
-#define yyrindex quote_fmtyyrindex
-#define yygindex quote_fmtyygindex
-#define yytable	 quote_fmtyytable
-#define yycheck	 quote_fmtyycheck
blob - ddc5e83d5d4065128535dd73976449867c36a4ae (mode 644)
blob + /dev/null
--- src/quote_fmt_lex.l
+++ /dev/null
@@ -1,153 +0,0 @@
-%option nounput never-interactive
-
-%{
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (c) 1999-2007 by Hiroyuki Yamamoto & The Claws Mail Team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "quote_fmt_lex.h"
-#include "quote_fmt_parse.h"
-
-%}
-
-%option prefix="quote_fmt"
-%option outfile="lex.yy.c"
-
-%s S_NORMAL S_DATE
-
-%{
-/*
- * see notes below.
- */
-int quote_fmt_firsttime = 1;
-int line = -1;
-int escaped_string = 0;
-%}
-
-%%
-
-%{
-/*
- * NOTES:
- * this lex script used to use characters also in use
- * by strftime() (which we want to use for custom
- * time formats in replies and templates). to circumvent
- * this we have to play a little bit with states.
- *
- * these are the characters we also want to use in the
- * %D time customizer:
- *
- * %a %A %b %B %c %C %d %H %I %j %m %M %p %S %w %x %y %Y %Z
- *
- * you can use these characters too, but don't forget to
- * prepend them with the <S_NORMAL> state.
- *
- * also there is also work around for resetting the state
- * (firsttime variable). this assumes that yylex() will
- * always return to S_NORMAL after quote fmt parsing is
- * done.
- */
-%}
-
-%{
-	if (quote_fmt_firsttime) {
-		BEGIN S_NORMAL;
-		quote_fmt_firsttime = 0;
-	}
-%}
-
-<S_NORMAL>("%X"|"%cursor") /* cursor pos */ return SET_CURSOR_POS;
-<S_NORMAL>("%A"|"%email") /* email address */ return SHOW_MAIL_ADDRESS;
-<S_NORMAL>("%c"|"%cc") /* cc */ return SHOW_CC;
-<S_NORMAL>("%d"|"%date") /* date */ return SHOW_DATE;
-<S_NORMAL>("%D"|"%date_fmt") /* date */ { BEGIN S_DATE; return SHOW_DATE_EXPR; }
-<S_NORMAL>("%f"|"%from") /* from */ return SHOW_FROM;
-<S_NORMAL>("%F"|"%firstname") /* first name */ return SHOW_FIRST_NAME;
-<S_NORMAL>("%i"|"%messageid") /* message-id */ return SHOW_MESSAGEID;
-<S_NORMAL>("%I"|"%initials") /* initial of sender */ return SHOW_SENDER_INITIAL;
-<S_NORMAL>("%m"|"%msg_no_sig") /* message with no signature */ return SHOW_MESSAGE_NO_SIGNATURE;
-<S_NORMAL>("%M"|"%msg") /* message */ return SHOW_MESSAGE;
-<S_NORMAL>("%N"|"%fullname") /* full name */ return SHOW_FULLNAME;
-<S_NORMAL>("%L"|"%lastname") /* last name */ return SHOW_LAST_NAME;
-<S_NORMAL>("%r"|"%references") /* references */ return SHOW_REFERENCES;
-<S_NORMAL>("%s"|"%subject") /* subject */ return SHOW_SUBJECT;
-<S_NORMAL>("%t"|"%to") /* to */ return SHOW_TO;
-<S_NORMAL>("%tags") /* tags */ return SHOW_TAGS;
-<S_NORMAL>("%Q"|"%quoted_msg") /* quoted message */ return SHOW_QUOTED_MESSAGE;
-<S_NORMAL>("%q"|"%quoted_msg_no_sig") /* quoted message with no signature */ return SHOW_QUOTED_MESSAGE_NO_SIGNATURE;
-<S_NORMAL>("%af"|"%account_fullname") /* full name in compose account */ return SHOW_ACCOUNT_FULL_NAME;
-<S_NORMAL>("%am"|"%account_email") /* mail address in compose account */ return SHOW_ACCOUNT_MAIL_ADDRESS;
-<S_NORMAL>("%an"|"%account_name") /* compose account name itself */ return SHOW_ACCOUNT_NAME;
-<S_NORMAL>("%ao"|"%account_org") /* organization in compose account */ return SHOW_ACCOUNT_ORGANIZATION;
-<S_NORMAL>("%as"|"%account_sig") /* signature in compose account */ return SHOW_ACCOUNT_SIG;
-<S_NORMAL>("%asp"|"%account_sigpath") /* signature path in compose account */ return SHOW_ACCOUNT_SIGPATH;
-<S_NORMAL>("%ABc"|"%addrbook_cc") /* completion of 'Cc' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_CC;
-<S_NORMAL>("%ABf"|"%addrbook_from") /* completion of 'From' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_FROM;
-<S_NORMAL>("%ABt"|"%addrbook_to") /* completion of 'To' from the address book */ return SHOW_ADDRESSBOOK_COMPLETION_FOR_TO;
-"\\\%" /* % */ return SHOW_PERCENT;
-"\\\\" /* \ */ return SHOW_BACKSLASH;
-"\\t"|"\t" /* tab */ return SHOW_TAB;
-"\n" /* return */ { line++; return SHOW_EOL; }
-"\\n" /* escaped return */ { if (escaped_string) line++; return SHOW_EOL; }
-"\\?" /* ? */ return SHOW_QUESTION_MARK;
-"\\!" return SHOW_EXCLAMATION_MARK;
-"\\|" return SHOW_PIPE;
-"\\{" return SHOW_OPARENT;
-"\\}" return SHOW_CPARENT;
-("?d"|"?date") /* query date */ return QUERY_DATE;
-("?f"|"?from") /* query from */ return QUERY_FROM;
-("?N"|"?F"|"?L"|"?I"|"?fullname"|"?firstname"|"?lastname"|"?initials") /* query from name */ return QUERY_FULLNAME;
-("?s"|"?subject") /* query subject */ return QUERY_SUBJECT;
-("?t"|"?to") /* query to */ return QUERY_TO;
-("?c"|"?cc") /* query cc */ return QUERY_CC;
-("?i"|"?messageid") /* query message-id */ return QUERY_MESSAGEID;
-("?r"|"?references") /* query references */ return QUERY_REFERENCES;
-("?af"|"?account_fullname") /* query full name in compose account */ return QUERY_ACCOUNT_FULL_NAME;
-("?ao"|"?account_org") /* query organization in compose account */ return QUERY_ACCOUNT_ORGANIZATION;
-("?as"|"?account_sig") /* query signature */ return QUERY_ACCOUNT_SIG;
-("?asp"|"?account_sigpath") /* query signature path */ return QUERY_ACCOUNT_SIGPATH;
-("?ABc"|"?addrbook_cc") /* query completion for 'Cc' in address book */ return QUERY_CC_FOUND_IN_ADDRESSBOOK;
-("?ABf"|"?addrbook_from") /* query completion for 'From' in address book */ return QUERY_FROM_FOUND_IN_ADDRESSBOOK;
-("?ABt"|"?addrbook_to") /* query completion for 'To' in address book */ return QUERY_TO_FOUND_IN_ADDRESSBOOK;
-("!d"|"!date") /* query not(date) */ return QUERY_NOT_DATE;
-("!f"|"!from") /* query not(from) */ return QUERY_NOT_FROM;
-("!N"|"!F"|"!L"|"!I"|"!fullname"|"!firstname"|"!lastname"|"!initials") /* query not(from name) */ return QUERY_NOT_FULLNAME;
-("!s"|"!subject") /* query not(subject) */ return QUERY_NOT_SUBJECT;
-("!t"|"!to") /* query not(to) */ return QUERY_NOT_TO;
-("!c"|"!cc") /* query not(cc) */ return QUERY_NOT_CC;
-("!i"|"!messageid") /* query not(message-id) */ return QUERY_NOT_MESSAGEID;
-("!r"|"!references") /* query not(references) */ return QUERY_NOT_REFERENCES;
-("!af"|"!account_fullname") /* query not(full name in compose account) */ return QUERY_NOT_ACCOUNT_FULL_NAME;
-("!ao"|"!account_org") /* query not(organization in compose account) */ return QUERY_NOT_ACCOUNT_ORGANIZATION;
-("!as"|"!account_sig") /* query not(signature) */ return QUERY_NOT_ACCOUNT_SIG;
-("!asp"|"!account_sigpath") /* query not(signature path) */ return QUERY_NOT_ACCOUNT_SIGPATH;
-("!ABc"|"!addrbook_cc") /* query not(completion for 'Cc' in address book) */ return QUERY_NOT_CC_FOUND_IN_ADDRESSBOOK;
-("!ABf"|"!addrbook_from") /* query not(completion for 'From' in address book) */ return QUERY_NOT_FROM_FOUND_IN_ADDRESSBOOK;
-("!ABt"|"!addrbook_to") /* query not(completion for 'To' in address book) */ return QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK;
-("|f"|"|file") /* insert file */ return INSERT_FILE;
-("|p"|"|program") /* insert program output */ return INSERT_PROGRAMOUTPUT;
-("|i"|"|input") /* insert user input */ return INSERT_USERINPUT;
-("|a"|"|attach") /* attach file */ return ATTACH_FILE;
-("|A"|"|attach_program") /*  file whose name's got from program output */ return ATTACH_PROGRAMOUTPUT;
-<S_DATE>"{" return OPARENT;
-<S_DATE>"}" { BEGIN S_NORMAL; return CPARENT; }
-<S_NORMAL>"{" return OPARENT;
-<S_NORMAL>"}" return CPARENT;
-. { yylval.chr = yytext[0]; return CHARACTER; }
-
-%%
blob - e2ffe9eed119b172bbbbe4de04c4958cc64c992d (mode 644)
blob + /dev/null
--- src/quote_fmt_parse.y
+++ /dev/null
@@ -1,1237 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2020 The Claws Mail Team and 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 3 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, see <http://www.gnu.org/licenses/>.
- *
- */
-
-%{
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-
-#include <ctype.h>
-
-#include "procmsg.h"
-#include "procmime.h"
-#include "utils.h"
-#include "codeconv.h"
-#include "procheader.h"
-#include "addr_compl.h"
-#include "gtk/inputdialog.h"
-
-#include "quote_fmt.h"
-#include "quote_fmt_lex.h"
-#include "account.h"
-#include "file-utils.h"
-
-/* decl */
-/*
-flex quote_fmt.l
-bison -p quote_fmt quote_fmt.y
-*/
-
-int yylex(void);
-
-static MsgInfo *msginfo = NULL;
-static PrefsAccount *account = NULL;
-static gboolean *visible = NULL;
-static gboolean dry_run = FALSE;
-static gint maxsize = 0;
-static gint stacksize = 0;
-static GHashTable *var_table = NULL;
-static GList *attachments = NULL;
-
-typedef struct st_buffer
-{
-	gchar *buffer;
-	gint bufsize;
-	gint bufmax;
-} st_buffer;
-
-static struct st_buffer main_expr = { NULL, 0, 0 };
-static struct st_buffer sub_expr = { NULL, 0, 0 };
-static struct st_buffer* current = NULL;
-
-static const gchar *quote_str = NULL;
-static const gchar *body = NULL;
-static gint error = 0;
-
-static gint cursor_pos = -1;
-
-extern int quote_fmt_firsttime;
-extern int line;
-extern int escaped_string;
-
-static void add_visibility(gboolean val)
-{
-	stacksize++;
-	if (maxsize < stacksize) {
-		maxsize += 128;
-		visible = g_realloc(visible, maxsize * sizeof(gboolean));
-		if (visible == NULL)
-			maxsize = 0;
-	}
-	if (visible != NULL)
-		visible[stacksize - 1] = val;
-}
-
-static void remove_visibility(void)
-{
-	stacksize--;
-	if (stacksize < 0) {
-		g_warning("error: visibility stack underflow");
-		stacksize = 0;
-	}
-}
-
-static void add_buffer(const gchar *s)
-{
-	gint len;
-
-	if (s == NULL)
-		return;
-
-	len = strlen(s);
-	if (current->bufsize + len + 1 > current->bufmax) {
-		if (current->bufmax == 0)
-			current->bufmax = 128;
-		while (current->bufsize + len + 1 > current->bufmax)
-			current->bufmax *= 2;
-		current->buffer = g_realloc(current->buffer, current->bufmax);
-	}
-	strcpy(current->buffer + current->bufsize, s);
-	current->bufsize += len;
-}
-
-static void clear_buffer(void)
-{
-	if (current->buffer)
-		*current->buffer = '\0';
-	else
-		/* force to an empty string, as buffer should not be left unallocated */
-		add_buffer("");
-	current->bufsize = 0;
-}
-
-gchar *quote_fmt_get_buffer(void)
-{
-	if (current != &main_expr)
-		g_warning("error: parser still in sub-expr mode");
-
-	if (error != 0)
-		return NULL;
-	else
-		return current->buffer;
-}
-
-GList *quote_fmt_get_attachments_list(void)
-{
-	return attachments;
-}
-
-gint quote_fmt_get_line(void)
-{
-	return line;
-}
-
-gint quote_fmt_get_cursor_pos(void)
-{
-	return cursor_pos;
-}
-
-#define INSERT(buf) \
-	if (stacksize != 0 && visible[stacksize - 1])\
-		add_buffer(buf); \
-
-#define INSERT_CHARACTER(chr) \
-	if (stacksize != 0 && visible[stacksize - 1]) { \
-		gchar tmp[2]; \
-		tmp[0] = (chr); \
-		tmp[1] = '\0'; \
-		add_buffer(tmp); \
-	}
-
-void quote_fmt_reset_vartable(void)
-{
-	if (var_table) {
-		g_hash_table_destroy(var_table);
-		var_table = NULL;
-	}
-	if (attachments) {
-		GList *cur = attachments;
-		while (cur) {
-			g_free(cur->data);
-			cur = g_list_next(cur);
-		}
-		g_list_free(attachments);
-		attachments = NULL;
-	}
-}
-
-
-void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str,
-		    const gchar *my_body, gboolean my_dry_run,
-			PrefsAccount *compose_account,
-			gboolean string_is_escaped)
-{
-	quote_str = my_quote_str;
-	body = my_body;
-	msginfo = info;
-	account = compose_account;
-	dry_run = my_dry_run;
-	stacksize = 0;
-	add_visibility(TRUE);
-	main_expr.bufmax = 0;
-	sub_expr.bufmax = 0;
-	current = &main_expr;
-	clear_buffer();
-	error = 0;
-	line = 1;
-	escaped_string = string_is_escaped;
-
-	if (!var_table)
-		var_table = g_hash_table_new_full(g_str_hash, g_str_equal,
-				g_free, g_free);
-
-        /*
-         * force LEX initialization
-         */
-	quote_fmt_firsttime = 1;
-	cursor_pos = -1;
-}
-
-void quote_fmterror(char *str)
-{
-	g_warning("error: %s at line %d", str, line);
-	error = 1;
-}
-
-int quote_fmtwrap(void)
-{
-	return 1;
-}
-
-static int isseparator(int ch)
-{
-	return g_ascii_isspace(ch) || ch == '.' || ch == '-';
-}
-
-/*
- * Search for glibc extended strftime timezone specs within haystack.
- * If not found NULL is returned and the integer pointed by tzspeclen is
- * not changed.
- * If found a pointer to the start of the specification within haystack
- * is returned and the integer pointed by tzspeclen is set to the lenght
- * of specification.
- */
-static const char* strtzspec(const char *haystack, int *tzspeclen)
-{
-	const char *p = NULL;
-	const char *q = NULL;
-	const char *r = NULL;
-
-	p = strstr(haystack, "%");
-	while (p != NULL) {
-		q = p + 1;
-		if (!*q) return NULL;
-		r = strchr("_-0^#", *q); /* skip flags */
-		if (r != NULL) {
-			++q;
-			if (!*q) return NULL;
-		}
-		while (*q >= '0' && *q <= '9') ++q; /* skip width */
-		if (!*q) return NULL;
-		if (*q == 'z' || *q == 'Z') { /* numeric or name */
-			*tzspeclen = 1 + (q - p);
-			return p;
-		}
-		p = strstr(q, "%");
-	}
-	return NULL;
-}
-
-static void quote_fmt_show_date(const MsgInfo *msginfo, const gchar *format)
-{
-	char  result[100];
-	char *rptr;
-	char  zone[6];
-	struct tm lt;
-	const char *fptr;
-	const char *zptr;
-
-	if (!msginfo->date)
-		return;
-
-	/*
-	 * ALF - GNU C's strftime() has a nice format specifier
-	 * for time zone offset (%z). Non-standard however, so
-	 * emulate it.
-	 */
-
-#define RLEFT (sizeof result) - (rptr - result)
-
-	zone[0] = 0;
-    result[0] = '\0';
-
-	if (procheader_date_parse_to_tm(msginfo->date, &lt, zone)) {
-		/*
-		 * break up format string in tiny bits delimited by valid %z's and
-		 * feed it to strftime(). don't forget that '%%z' mean literal '%z'.
-		 */
-		for (rptr = result, fptr = format; fptr && *fptr && rptr < &result[sizeof result - 1];) {
-			int	    perc, zlen;
-			const char *p;
-			char	   *tmp;
-
-			if (NULL != (zptr = strtzspec(fptr, &zlen))) {
-				/*
-				 * count nr. of prepended percent chars
-				 */
-				for (perc = 0, p = zptr; p && p >= format && *p == '%'; p--, perc++)
-					;
-				/*
-				 * feed to strftime()
-				 */
-				tmp = g_strndup(fptr, zptr - fptr + (perc % 2 ? 0 : zlen));
-				if (tmp) {
-					rptr += strftime(rptr, RLEFT, tmp, &lt);
-					g_free(tmp);
-				}
-				/*
-				 * append time zone offset
-				 */
-				if (zone[0] && perc % 2)
-					rptr += g_snprintf(rptr, RLEFT, "%s", zone);
-				fptr = zptr + zlen;
-			} else {
-				rptr += strftime(rptr, RLEFT, fptr, &lt);
-				fptr  = NULL;
-			}
-		}
-
-		if (g_utf8_validate(result, -1, NULL)) {
-			INSERT(result);
-		} else {
-			gchar *utf = conv_codeset_strdup(result,
-				conv_get_locale_charset_str_no_utf8(),
-				CS_INTERNAL);
-			if (utf == NULL ||
-			    !g_utf8_validate(utf, -1, NULL)) {
-				g_free(utf);
-				utf = g_malloc(strlen(result)*2+1);
-				conv_localetodisp(utf,
-					strlen(result)*2+1, result);
-			}
-			if (g_utf8_validate(utf, -1, NULL)) {
-				INSERT(utf);
-			}
-			g_free(utf);
-		}
-	}
-#undef RLEFT
-}
-
-static void quote_fmt_show_first_name(const MsgInfo *msginfo)
-{
-	guchar *p;
-	gchar *str;
-
-	if (!msginfo->fromname)
-		return;
-
-	p = (guchar*)strchr(msginfo->fromname, ',');
-	if (p != NULL) {
-		/* fromname is like "Duck, Donald" */
-		p++;
-		while (*p && isspace(*p)) p++;
-		str = alloca(strlen((char *)p) + 1);
-		if (str != NULL) {
-			strcpy(str, (char *)p);
-			INSERT(str);
-		}
-	} else {
-		/* fromname is like "Donald Duck" */
-		str = alloca(strlen(msginfo->fromname) + 1);
-		if (str != NULL) {
-			strcpy(str, msginfo->fromname);
-			p = (guchar *)str;
-			while (*p && !isspace(*p)) p++;
-			*p = '\0';
-			INSERT(str);
-		}
-	}
-}
-
-static void quote_fmt_show_last_name(const MsgInfo *msginfo)
-{
-	gchar *p;
-	gchar *str;
-
-	/* This probably won't work together very well with Middle
-           names and the like - thth */
-	if (!msginfo->fromname)
-		return;
-
-	str = alloca(strlen(msginfo->fromname) + 1);
-	if (str != NULL) {
-		strcpy(str, msginfo->fromname);
-		p = strchr(str, ',');
-		if (p != NULL) {
-			/* fromname is like "Duck, Donald" */
-			*p = '\0';
-			INSERT(str);
-		} else {
-			/* fromname is like "Donald Duck" */
-			p = str;
-			while (*p && !isspace(*p)) p++;
-			if (*p) {
-			    /* We found a space. Get first
-			     none-space char and insert
-			     rest of string from there. */
-			    while (*p && isspace(*p)) p++;
-			    if (*p) {
-				INSERT(p);
-			    } else {
-				/* If there is no none-space
-				 char, just insert whole
-				 fromname. */
-				INSERT(str);
-			    }
-			} else {
-			    /* If there is no space, just
-			     insert whole fromname. */
-			    INSERT(str);
-			}
-		}
-	}
-}
-
-static void quote_fmt_show_sender_initial(const MsgInfo *msginfo)
-{
-#define MAX_SENDER_INITIAL 20
-	gchar tmp[MAX_SENDER_INITIAL];
-	guchar *p;
-	gchar *cur;
-	gint len = 0;
-
-	if (!msginfo->fromname)
-		return;
-
-	p = (guchar *)msginfo->fromname;
-	cur = tmp;
-	while (*p) {
-		if (*p && g_utf8_validate((gchar *)p, 1, NULL)) {
-			*cur = toupper(*p);
-				cur++;
-			len++;
-			if (len >= MAX_SENDER_INITIAL - 1)
-				break;
-		} else
-			break;
-		while (*p && !isseparator(*p)) p++;
-		while (*p && isseparator(*p)) p++;
-	}
-	*cur = '\0';
-	INSERT(tmp);
-}
-
-static void quote_fmt_show_msg(MsgInfo *msginfo, const gchar *body,
-			       gboolean quoted, gboolean signature,
-			       const gchar *quote_str)
-{
-	gchar buf[BUFFSIZE];
-	FILE *fp;
-
-	if (!(msginfo->folder || body))
-		return;
-
-	if (body)
-		fp = str_open_as_stream(body);
-	else {
-		if (MSG_IS_ENCRYPTED(msginfo->flags))
-			fp = procmime_get_first_encrypted_text_content(msginfo);
-		else
-			fp = procmime_get_first_text_content(msginfo);
-	}
-
-	if (fp == NULL)
-		g_warning("can't get text part");
-	else {
-		account_sigsep_matchlist_create();
-		while (fgets(buf, sizeof(buf), fp) != NULL) {
-			strcrchomp(buf);
-
-			if (!signature && account_sigsep_matchlist_nchar_found(buf, "%s\n"))
-				break;
-
-			if (quoted && quote_str)
-				INSERT(quote_str);
-
-			INSERT(buf);
-		}
-		account_sigsep_matchlist_delete();
-		fclose(fp);
-	}
-}
-
-static void quote_fmt_insert_file(const gchar *filename)
-{
-	FILE *file;
-	char buffer[PATH_MAX];
-
-	if ((file = g_fopen(filename, "rb")) != NULL) {
-		while (fgets(buffer, sizeof(buffer), file)) {
-			INSERT(buffer);
-		}
-		fclose(file);
-	}
-
-}
-
-static void quote_fmt_insert_program_output(const gchar *progname)
-{
-	FILE *file;
-	char buffer[BUFFSIZE];
-
-	if ((file = get_command_output_stream(progname)) != NULL) {
-		while (fgets(buffer, sizeof(buffer), file)) {
-			INSERT(buffer);
-		}
-		fclose(file);
-	}
-}
-
-static void quote_fmt_insert_user_input(const gchar *varname)
-{
-    gchar *buf = NULL;
-    gchar *text = NULL;
-
-    if (dry_run)
-	    return;
-
-    if ((text = g_hash_table_lookup(var_table, varname)) == NULL) {
-	    buf = g_strdup_printf(_("Enter text to replace '%s'"), varname);
-	    text = input_dialog(_("Enter variable"), buf, "");
-	    g_free(buf);
-	    if (!text)
-		    return;
-	    g_hash_table_insert(var_table, g_strdup(varname), g_strdup(text));
-    } else {
-	    /* don't free the one in hashtable at the end */
-	    text = g_strdup(text);
-    }
-
-    if (!text)
-	    return;
-    INSERT(text);
-    g_free(text);
-}
-
-static void quote_fmt_attach_file(const gchar *filename)
-{
-	attachments = g_list_append(attachments, g_strdup(filename));
-}
-
-static void quote_fmt_attach_file_program_output(const gchar *progname)
-{
-	FILE *file;
-	char buffer[BUFFSIZE];
-
-	if ((file = get_command_output_stream(progname)) != NULL) {
-		/* get first line only */
-		if (fgets(buffer, sizeof(buffer), file)) {
-			/* trim trailing CR/LF */
-			strretchomp(buffer);
-			attachments = g_list_append(attachments, g_strdup(buffer));
-		}
-		fclose(file);
-	}
-}
-
-static gchar *quote_fmt_complete_address(const gchar *addr)
-{
-	gint count;
-	gchar *res, *tmp, *email_addr;
-	gchar **split;
-
-	debug_print("quote_fmt_complete_address: %s\n", addr);
-	if (addr == NULL)
-		return NULL;
-
-	/* if addr is a list of message, try the 1st element only */
-	split = g_strsplit(addr, ",", -1);
-	if (!split || !split[0] || *split[0] == '\0') {
-		g_strfreev(split);
-		return NULL;
-	}
-
-	Xstrdup_a(email_addr, split[0], {
-                g_strfreev(split);
-                return NULL;
-        });
-	extract_address(email_addr);
-	if (!*email_addr) {
-		g_strfreev(split);
-		return NULL;
-	}
-
-	res = NULL;
-	start_address_completion(NULL);
-	if (1 < (count = complete_address(email_addr))) {
-		tmp = get_complete_address(1);
-		res = procheader_get_fromname(tmp);
-		g_free(tmp);
-	}
-	end_address_completion();
-	g_strfreev(split);
-
-	debug_print("quote_fmt_complete_address: matched %s\n", res);
-	return res;
-}
-
-%}
-
-%union {
-	char chr;
-	char str[256];
-}
-
-/* tokens SHOW */
-%token SHOW_NEWSGROUPS
-%token SHOW_DATE SHOW_FROM SHOW_FULLNAME SHOW_FIRST_NAME SHOW_LAST_NAME
-%token SHOW_SENDER_INITIAL SHOW_SUBJECT SHOW_TO SHOW_MESSAGEID
-%token SHOW_PERCENT SHOW_CC SHOW_REFERENCES SHOW_MESSAGE
-%token SHOW_QUOTED_MESSAGE SHOW_BACKSLASH SHOW_TAB SHOW_MAIL_ADDRESS
-%token SHOW_QUOTED_MESSAGE_NO_SIGNATURE SHOW_MESSAGE_NO_SIGNATURE
-%token SHOW_EOL SHOW_QUESTION_MARK SHOW_EXCLAMATION_MARK SHOW_PIPE SHOW_OPARENT SHOW_CPARENT
-%token SHOW_ACCOUNT_FULL_NAME SHOW_ACCOUNT_MAIL_ADDRESS SHOW_ACCOUNT_NAME SHOW_ACCOUNT_ORGANIZATION
-%token SHOW_ACCOUNT_SIG SHOW_ACCOUNT_SIGPATH
-%token SHOW_TAGS
-%token SHOW_ADDRESSBOOK_COMPLETION_FOR_CC
-%token SHOW_ADDRESSBOOK_COMPLETION_FOR_FROM
-%token SHOW_ADDRESSBOOK_COMPLETION_FOR_TO
-/* tokens QUERY */
-%token QUERY_DATE QUERY_FROM
-%token QUERY_FULLNAME QUERY_SUBJECT QUERY_TO QUERY_NEWSGROUPS
-%token QUERY_MESSAGEID QUERY_CC QUERY_REFERENCES
-%token QUERY_ACCOUNT_FULL_NAME QUERY_ACCOUNT_ORGANIZATION
-%token QUERY_ACCOUNT_SIG QUERY_ACCOUNT_SIGPATH
-%token QUERY_CC_FOUND_IN_ADDRESSBOOK
-%token QUERY_FROM_FOUND_IN_ADDRESSBOOK
-%token QUERY_TO_FOUND_IN_ADDRESSBOOK
-/* tokens QUERY_NOT */
-%token QUERY_NOT_DATE QUERY_NOT_FROM
-%token QUERY_NOT_FULLNAME QUERY_NOT_SUBJECT QUERY_NOT_TO QUERY_NOT_NEWSGROUPS
-%token QUERY_NOT_MESSAGEID QUERY_NOT_CC QUERY_NOT_REFERENCES
-%token QUERY_NOT_ACCOUNT_FULL_NAME QUERY_NOT_ACCOUNT_ORGANIZATION
-%token QUERY_NOT_ACCOUNT_SIG QUERY_NOT_ACCOUNT_SIGPATH
-%token QUERY_NOT_CC_FOUND_IN_ADDRESSBOOK
-%token QUERY_NOT_FROM_FOUND_IN_ADDRESSBOOK
-%token QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK
-/* other tokens */
-%token INSERT_FILE INSERT_PROGRAMOUTPUT INSERT_USERINPUT
-%token ATTACH_FILE ATTACH_PROGRAMOUTPUT
-%token OPARENT CPARENT
-%token CHARACTER
-%token SHOW_DATE_EXPR
-%token SET_CURSOR_POS
-
-%start quote_fmt
-
-%type <chr> CHARACTER
-%type <chr> character
-%type <str> string
-
-%%
-
-quote_fmt:
-	character_or_special_or_insert_or_query_list ;
-
-sub_expr:
-	character_or_special_list ;
-
-character_or_special_or_insert_or_query_list:
-	character_or_special_or_insert_or_query character_or_special_or_insert_or_query_list
-	| character_or_special_or_insert_or_query ;
-
-character_or_special_list:
-	character_or_special character_or_special_list
-	| character_or_special ;
-
-character_or_special_or_insert_or_query:
-	character_or_special
-	| query
-	| query_not
-	| insert
-	| attach ;
-
-character_or_special:
-	special
-	| character
-	{
-		INSERT_CHARACTER($1);
-	};
-
-character:
-	CHARACTER
-	;
-
-string:
-	CHARACTER
-	{
-		$$[0] = $1;
-		$$[1] = '\0';
-	}
-	| string CHARACTER
-	{
-		size_t len;
-
-		strncpy($$, $1, sizeof($$));
-		$$[sizeof($$) - 1] = '\0';
-		len = strlen($$);
-		if (len + 1 < sizeof($$)) {
-			$$[len + 1] = '\0';
-			$$[len] = $2;
-		}
-	};
-
-special:
-	SHOW_DATE_EXPR OPARENT string CPARENT
-	{
-		quote_fmt_show_date(msginfo, $3);
-	}
-	| SHOW_DATE
-	{
-		if (msginfo->date)
-			INSERT(msginfo->date);
-	}
-	| SHOW_FROM
-	{
-		if (msginfo->from)
-			INSERT(msginfo->from);
-	}
-	| SHOW_MAIL_ADDRESS
-	{
-		if (msginfo->from) {
-			gchar *stripped_address = g_strdup(msginfo->from);
-			extract_address(stripped_address);
-			INSERT(stripped_address);
-			g_free(stripped_address);
-		}
-	}
-	| SHOW_FULLNAME
-	{
-		if (msginfo->fromname)
-			INSERT(msginfo->fromname);
-	}
-	| SHOW_FIRST_NAME
-	{
-		quote_fmt_show_first_name(msginfo);
-	}
-	| SHOW_LAST_NAME
-    {
-		quote_fmt_show_last_name(msginfo);
-	}
-	| SHOW_SENDER_INITIAL
-	{
-		quote_fmt_show_sender_initial(msginfo);
-	}
-	| SHOW_SUBJECT
-	{
-		if (msginfo->subject)
-			INSERT(msginfo->subject);
-	}
-	| SHOW_TO
-	{
-		if (msginfo->to)
-			INSERT(msginfo->to);
-	}
-	| SHOW_MESSAGEID
-	{
-		if (msginfo->msgid)
-			INSERT(msginfo->msgid);
-	}
-	| SHOW_PERCENT
-	{
-		INSERT("%");
-	}
-	| SHOW_CC
-	{
-		if (msginfo->cc)
-			INSERT(msginfo->cc);
-	}
-	| SHOW_REFERENCES
-	{
-		GSList *item;
-
-		INSERT(msginfo->inreplyto);
-		for (item = msginfo->references; item != NULL; item = g_slist_next(item))
-			if (item->data)
-				INSERT(item->data);
-	}
-	| SHOW_MESSAGE
-	{
-		quote_fmt_show_msg(msginfo, body, FALSE, TRUE, quote_str);
-	}
-	| SHOW_QUOTED_MESSAGE
-	{
-		quote_fmt_show_msg(msginfo, body, TRUE, TRUE, quote_str);
-	}
-	| SHOW_MESSAGE_NO_SIGNATURE
-	{
-		quote_fmt_show_msg(msginfo, body, FALSE, FALSE, quote_str);
-	}
-	| SHOW_QUOTED_MESSAGE_NO_SIGNATURE
-	{
-		quote_fmt_show_msg(msginfo, body, TRUE, FALSE, quote_str);
-	}
-	| SHOW_ACCOUNT_FULL_NAME
-	{
-		if (account && account->name)
-			INSERT(account->name);
-	}
-	| SHOW_ACCOUNT_MAIL_ADDRESS
-	{
-		if (account && account->address)
-			INSERT(account->address);
-	}
-	| SHOW_ACCOUNT_NAME
-	{
-		if (account && account->account_name)
-			INSERT(account->account_name);
-	}
-	| SHOW_ACCOUNT_ORGANIZATION
-	{
-		if (account && account->organization)
-			INSERT(account->organization);
-	}
-	| SHOW_ACCOUNT_SIG
-	{
-		gchar *str = account_get_signature_str(account);
-		INSERT(str);
-		g_free(str);
-	}
-	| SHOW_ACCOUNT_SIGPATH
-	{
-		if (account && account->sig_path)
-			INSERT(account->sig_path);
-	}
-	| SHOW_BACKSLASH
-	{
-		INSERT("\\");
-	}
-	| SHOW_TAB
-	{
-		INSERT("\t");
-	}
-	| SHOW_EOL
-	{
-		INSERT("\n");
-	}
-	| SHOW_QUESTION_MARK
-	{
-		INSERT("?");
-	}
-	| SHOW_EXCLAMATION_MARK
-	{
-		INSERT("!");
-	}
-	| SHOW_PIPE
-	{
-		INSERT("|");
-	}
-	| SHOW_OPARENT
-	{
-		INSERT("{");
-	}
-	| SHOW_CPARENT
-	{
-		INSERT("}");
-	}
-	| SET_CURSOR_POS
-	{
-		if (current->buffer)
-			cursor_pos = g_utf8_strlen(current->buffer, -1);
-		else
-			cursor_pos = 0;
-	}
-	| SHOW_ADDRESSBOOK_COMPLETION_FOR_CC
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->cc);
-		if (tmp) {
-			INSERT(tmp);
-			g_free(tmp);
-		}
-	}
-	| SHOW_ADDRESSBOOK_COMPLETION_FOR_FROM
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->from);
-		if (tmp) {
-			INSERT(tmp);
-			g_free(tmp);
-		}
-	}
-	| SHOW_ADDRESSBOOK_COMPLETION_FOR_TO
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->to);
-		if (tmp) {
-			INSERT(tmp);
-			g_free(tmp);
-		}
-	};
-
-query:
-	QUERY_DATE
-	{
-		add_visibility(msginfo->date != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_FROM
-	{
-		add_visibility(msginfo->from != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_FULLNAME
-	{
-		add_visibility(msginfo->fromname != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_SUBJECT
-	{
-		add_visibility(msginfo->subject != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_TO
-	{
-		add_visibility(msginfo->to != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_MESSAGEID
-	{
-		add_visibility(msginfo->msgid != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_CC
-	{
-		add_visibility(msginfo->cc != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_REFERENCES
-	{
-		gboolean found;
-		GSList *item;
-
-		found = (msginfo->inreplyto != NULL);
-		for (item = msginfo->references; found == FALSE && item != NULL; item = g_slist_next(item))
-			if (item->data)
-				found = TRUE;
-		add_visibility(found == TRUE);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_ACCOUNT_FULL_NAME
-	{
-		add_visibility(account != NULL && account->name != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_ACCOUNT_ORGANIZATION
-	{
-		add_visibility(account != NULL && account->organization != NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_ACCOUNT_SIG
-	{
-		gchar *str = account_get_signature_str(account);
-		add_visibility(str != NULL && * str != '\0');
-		g_free(str);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_ACCOUNT_SIGPATH
-	{
-		add_visibility(account != NULL && account->sig_path != NULL
-				&& *account->sig_path != '\0');
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_CC_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->cc);
-		add_visibility(tmp != NULL && *tmp != '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_FROM_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->from);
-		add_visibility(tmp != NULL && *tmp != '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_TO_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->to);
-		add_visibility(tmp != NULL && *tmp != '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	};
-
-query_not:
-	QUERY_NOT_DATE
-	{
-		add_visibility(msginfo->date == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_FROM
-	{
-		add_visibility(msginfo->from == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_FULLNAME
-	{
-		add_visibility(msginfo->fromname == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_SUBJECT
-	{
-		add_visibility(msginfo->subject == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_TO
-	{
-		add_visibility(msginfo->to == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_MESSAGEID
-	{
-		add_visibility(msginfo->msgid == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_CC
-	{
-		add_visibility(msginfo->cc == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_REFERENCES
-	{
-		gboolean found;
-		GSList *item;
-
-		found = (msginfo->inreplyto != NULL);
-		for (item = msginfo->references; found == FALSE && item != NULL; item = g_slist_next(item))
-			if (item->data)
-				found = TRUE;
-		add_visibility(found == FALSE);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_ACCOUNT_FULL_NAME
-	{
-		add_visibility(account == NULL || account->name == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_ACCOUNT_ORGANIZATION
-	{
-		add_visibility(account == NULL || account->organization == NULL);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_ACCOUNT_SIG
-	{
-		gchar *str = account_get_signature_str(account);
-		add_visibility(str == NULL || *str == '\0');
-		g_free(str);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_ACCOUNT_SIGPATH
-	{
-		add_visibility(account == NULL || account->sig_path == NULL
-				|| *account->sig_path == '\0');
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_CC_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->cc);
-		add_visibility(tmp == NULL || *tmp == '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_FROM_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->from);
-		add_visibility(tmp == NULL || *tmp == '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	}
-	| QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK
-	{
-		gchar *tmp = quote_fmt_complete_address(msginfo->to);
-		add_visibility(tmp == NULL || *tmp == '\0');
-		g_free(tmp);
-	}
-	OPARENT quote_fmt CPARENT
-	{
-		remove_visibility();
-	};
-
-insert:
-	INSERT_FILE
-	{
-		current = &sub_expr;
-		clear_buffer();
-	}
-	OPARENT sub_expr CPARENT
-	{
-		current = &main_expr;
-		if (!dry_run) {
-			quote_fmt_insert_file(sub_expr.buffer);
-		}
-	}
-	| INSERT_PROGRAMOUTPUT
-	{
-		current = &sub_expr;
-		clear_buffer();
-	}
-	OPARENT sub_expr CPARENT
-	{
-		current = &main_expr;
-		if (!dry_run) {
-			quote_fmt_insert_program_output(sub_expr.buffer);
-		}
-	}
-	| INSERT_USERINPUT
-	{
-		current = &sub_expr;
-		clear_buffer();
-	}
-	OPARENT sub_expr CPARENT
-	{
-		current = &main_expr;
-		if (!dry_run) {
-			quote_fmt_insert_user_input(sub_expr.buffer);
-		}
-	};
-
-attach:
-	ATTACH_FILE
-	{
-		current = &sub_expr;
-		clear_buffer();
-	}
-	OPARENT sub_expr CPARENT
-	{
-		current = &main_expr;
-		if (!dry_run) {
-			quote_fmt_attach_file(sub_expr.buffer);
-		}
-	}
-	| ATTACH_PROGRAMOUTPUT
-	{
-		current = &sub_expr;
-		clear_buffer();
-	}
-	OPARENT sub_expr CPARENT
-	{
-		current = &main_expr;
-		if (!dry_run) {
-			quote_fmt_attach_file_program_output(sub_expr.buffer);
-		}
-	};
-;
blob - 139bd6dd9c8af68db49e2aaf70c2d1a4f4955e24
blob + 222b026d586c0c974a07cad70c8ea44b542a9864
--- src/send_message.c
+++ src/send_message.c
@@ -53,9 +53,7 @@
 #include "inc.h"
 #include "log.h"
 #include "passwordstore.h"
-#ifdef USE_OAUTH2
 #include "oauth2.h"
-#endif
 
 typedef struct _SendProgressDialog	SendProgressDialog;
 
@@ -263,7 +261,6 @@ gint send_message_smtp_full(PrefsAccount *ac_prefs, GS
 			smtp_session->hostname = NULL;
 		}
 
-#ifdef USE_GNUTLS
 		port = ac_prefs->set_smtpport ? ac_prefs->smtpport :
 			ac_prefs->ssl_smtp == SSL_TUNNEL ? SSMTP_PORT : SMTP_PORT;
 		session->ssl_type = ac_prefs->ssl_smtp;
@@ -273,27 +270,8 @@ gint send_message_smtp_full(PrefsAccount *ac_prefs, GS
 		    strlen(ac_prefs->gnutls_priority))
 			session->gnutls_priority = g_strdup(ac_prefs->gnutls_priority);
 		session->use_tls_sni = ac_prefs->use_tls_sni;
-#ifdef USE_OAUTH2
 		if (ac_prefs->use_smtp_auth && ac_prefs->smtp_auth_type == SMTPAUTH_OAUTH2)
 		        oauth2_check_passwds(ac_prefs);
-#endif
-#else
-		if (ac_prefs->ssl_smtp != SSL_NONE) {
-			if (alertpanel_full(_("Insecure connection"),
-				_("This connection is configured to be secured "
-				  "using TLS, but TLS is not available "
-				  "in this build of Claws Mail. \n\n"
-				  "Do you want to continue connecting to this "
-				  "server? The communication would not be "
-				  "secure."),
-				  NULL, _("_Cancel"), NULL, _("Con_tinue connecting"),
-				  NULL, NULL, ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING) != G_ALERTALTERNATE) {
-				session_destroy(session);
-				return -1;
-			}
-		}
-		port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT;
-#endif
 
 		if (ac_prefs->use_smtp_auth) {
 			smtp_session->forced_auth_type = ac_prefs->smtp_auth_type;
blob - 926e8eb0d0130928924c4ada9eecc7f12646a28a
blob + d66574df0bc87374ac29c91d661d8f32fc2725d1
--- src/send_message.h
+++ src/send_message.h
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 #ifndef __SEND_MESSAGE_H__
@@ -25,9 +25,7 @@
 #include "prefs_account.h"
 
 #define SMTP_PORT	25
-#ifdef USE_GNUTLS
 #define SSMTP_PORT	465
-#endif
 
 gint send_message		(const gchar	*file,
 				 PrefsAccount	*ac_prefs,
blob - 5b946afef895470ee6d134e4cf9560c29f6e24a5
blob + d94dd8d83e420a36e2da9576cd27e420a25adee4
--- src/sourcewindow.c
+++ src/sourcewindow.c
@@ -17,7 +17,6 @@
  *
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
blob - 67cde88183be4e97a90802f8421298679c298022
blob + 26d17c0cfbaf70b83355a94943312fdc4388ab27
--- src/sourcewindow.h
+++ src/sourcewindow.h
@@ -32,7 +32,7 @@ struct _SourceWindow
 	GtkWidget *window;
 	GtkWidget *scrolledwin;
 	GtkWidget *text;
-	
+
 	gboolean updating;
 	gboolean deferred_destroy;
 };
blob - 1f3e722e453b12d890cda5de7cd263f24d2994c0
blob + f0ba1d33447d015b543f34c36900b12172a791da
--- src/stock_pixmap.c
+++ src/stock_pixmap.c
@@ -16,11 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <string.h>
@@ -642,17 +637,6 @@ static void stock_pixmap_find_themes_in_dir(GList **li
 	g_dir_close(dp);
 }
 
-gchar *stock_pixmap_get_system_theme_dir_for_theme(const gchar *theme)
-{
-	if (theme && *theme) {
-		return g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S,
-	        	   PIXMAP_THEME_DIR, G_DIR_SEPARATOR_S, theme, NULL);
-	} else {
-		return g_strconcat(PACKAGE_DATA_DIR, G_DIR_SEPARATOR_S,
-	        	   PIXMAP_THEME_DIR, NULL);
-	}
-}
-
 GList *stock_pixmap_themes_list_new(void)
 {
 	gchar *defaulttheme;
@@ -661,17 +645,7 @@ GList *stock_pixmap_themes_list_new(void)
 	GList *list = NULL;
 
 	defaulttheme = g_strdup(DEFAULT_PIXMAP_THEME);
-	userthemes   = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
-				   PIXMAP_THEME_DIR, NULL);
-	systemthemes = stock_pixmap_get_system_theme_dir_for_theme(NULL);
-
-	list = g_list_append(list, defaulttheme);
-	stock_pixmap_find_themes_in_dir(&list, userthemes);
-	stock_pixmap_find_themes_in_dir(&list, systemthemes);
-
-	g_free(userthemes);
-	g_free(systemthemes);
-	return list;
+	return g_list_append(list, defaulttheme);
 }
 
 void stock_pixmap_themes_list_free(GList *list)
blob - 78b1af404cb560b58ccb42e5034f0d6759c9c553 (mode 644)
blob + /dev/null
--- src/summary_search.c
+++ /dev/null
@@ -1,1097 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2025 the Claws Mail team and 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "main.h"
-#include "summary_search.h"
-#include "summaryview.h"
-#include "messageview.h"
-#include "mainwindow.h"
-#include "menu.h"
-#include "utils.h"
-#include "gtkutils.h"
-#include "combobox.h"
-#include "prefs_gtk.h"
-#include "manage_window.h"
-#include "alertpanel.h"
-#include "advsearch.h"
-#include "matcher.h"
-#include "matcher_parser.h"
-#include "prefs_matcher.h"
-#include "manual.h"
-#include "prefs_common.h"
-#include "statusbar.h"
-
-static struct SummarySearchWindow {
-	GtkWidget *window;
-
-	GtkWidget *bool_optmenu;
-
-	GtkWidget *from_label;
-	GtkWidget *from_entry;
-	GtkWidget *to_label;
-	GtkWidget *to_entry;
-	GtkWidget *subject_label;
-	GtkWidget *subject_entry;
-	GtkWidget *body_label;
-	GtkWidget *body_entry;
-
-	GtkWidget *adv_condition_label;
-	GtkWidget *adv_condition_entry;
-	GtkWidget *adv_condition_btn;
-	GtkWidget *adv_search_checkbtn;
-
-	GtkWidget *case_checkbtn;
-
-	GtkWidget *clear_btn;
-	GtkWidget *help_btn;
-	GtkWidget *all_btn;
-	GtkWidget *prev_btn;
-	GtkWidget *next_btn;
-	GtkWidget *close_btn;
-	GtkWidget *stop_btn;
-
-	SummaryView *summaryview;
-
-	AdvancedSearch	*advsearch;
-	gboolean	is_fast;
-	gboolean	matcher_is_outdated;
-	gboolean	search_in_progress;
-	GHashTable	*matched_msgnums;
-
-	gboolean is_searching;
-	gboolean from_entry_has_focus;
-	gboolean to_entry_has_focus;
-	gboolean subject_entry_has_focus;
-	gboolean body_entry_has_focus;
-	gboolean adv_condition_entry_has_focus;
-} search_window;
-
-static gchar* add_history_get(GtkWidget *from, GList **history);
-
-static void summary_search_create	(void);
-
-static gboolean summary_search_verify_match		(MsgInfo *msg);
-static gboolean summary_search_prepare_matcher		();
-static gboolean summary_search_prereduce_msg_list	();
-
-static void summary_search_execute	(gboolean	 backward,
-					 gboolean	 search_all);
-
-static void summary_search_clear	(GtkButton	*button,
-					 gpointer	 data);
-static void summary_search_prev_clicked	(GtkButton	*button,
-					 gpointer	 data);
-static void summary_search_next_clicked	(GtkButton	*button,
-					 gpointer	 data);
-static void summary_search_all_clicked	(GtkButton	*button,
-					 gpointer	 data);
-static void summary_search_stop_clicked	(GtkButton	*button,
-					 gpointer	 data);
-static void adv_condition_btn_clicked	(GtkButton	*button,
-					 gpointer	 data);
-
-static void optmenu_changed			(GtkComboBox *widget, gpointer user_data);
-static void from_changed			(void);
-static void to_changed				(void);
-static void subject_changed			(void);
-static void body_changed			(void);
-static void adv_condition_changed	(void);
-static void case_changed			(GtkToggleButton *togglebutton, gpointer user_data);
-
-static gboolean from_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean from_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean to_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean to_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean subject_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean subject_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean adv_condition_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean adv_condition_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data);
-static gboolean key_pressed		(GtkWidget	*widget,
-					 GdkEventKey	*event,
-					 gpointer	 data);
-
-#define GTK_BUTTON_SET_SENSITIVE(widget,sensitive) {					\
-	gtk_widget_set_sensitive(widget, sensitive);					\
-}
-
-static gchar* add_history_get(GtkWidget *from, GList **history)
-{
-	gchar *result;
-
-	result = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(from));
-	if (!result)
-		result = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(from))), 0, -1);
-
-	if (result && result[0] != '\0') {
-		/* add to history */
-		combobox_unset_popdown_strings(GTK_COMBO_BOX_TEXT(from));
-		*history = add_history(*history, result);
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(from), *history);
-
-		return result;
-	} else {
-		g_free(result);
-		return NULL;
-	}
-}
-
-void summary_search(SummaryView *summaryview)
-{
-	if (!search_window.window) {
-		summary_search_create();
-	} else {
-		gtk_widget_hide(search_window.window);
-	}
-
-	search_window.summaryview = summaryview;
-
-	gtk_widget_grab_focus(search_window.next_btn);
-	gtk_widget_grab_focus(search_window.subject_entry);
-	gtk_widget_show(search_window.window);
-}
-
-static void summary_show_stop_button(void)
-{
-	gtk_widget_hide(search_window.close_btn);
-	gtk_widget_show(search_window.stop_btn);
-	GTK_BUTTON_SET_SENSITIVE(search_window.clear_btn, FALSE)
-	GTK_BUTTON_SET_SENSITIVE(search_window.all_btn, FALSE)
-	GTK_BUTTON_SET_SENSITIVE(search_window.prev_btn, FALSE)
-	GTK_BUTTON_SET_SENSITIVE(search_window.next_btn, FALSE)
-	gtk_widget_set_sensitive(search_window.adv_condition_label, FALSE);
-	gtk_widget_set_sensitive(search_window.adv_condition_entry, FALSE);
-	gtk_widget_set_sensitive(search_window.adv_condition_btn, FALSE);
-	gtk_widget_set_sensitive(search_window.to_label, FALSE);
-	gtk_widget_set_sensitive(search_window.to_entry, FALSE);
-	gtk_widget_set_sensitive(search_window.from_label, FALSE);
-	gtk_widget_set_sensitive(search_window.from_entry, FALSE);
-	gtk_widget_set_sensitive(search_window.subject_label, FALSE);
-	gtk_widget_set_sensitive(search_window.subject_entry, FALSE);
-	gtk_widget_set_sensitive(search_window.body_label, FALSE);
-	gtk_widget_set_sensitive(search_window.body_entry, FALSE);
-	gtk_widget_set_sensitive(search_window.bool_optmenu, FALSE);
-	gtk_widget_set_sensitive(search_window.clear_btn, FALSE);
-	gtk_widget_set_sensitive(search_window.case_checkbtn, FALSE);
-	gtk_widget_set_sensitive(search_window.adv_search_checkbtn, FALSE);
-}
-
-static void summary_hide_stop_button(void)
-{
-	GTK_BUTTON_SET_SENSITIVE(search_window.clear_btn, TRUE)
-	gtk_widget_hide(search_window.stop_btn);
-	gtk_widget_show(search_window.close_btn);
-	if (gtk_toggle_button_get_active
-			(GTK_TOGGLE_BUTTON(search_window.adv_search_checkbtn))) {
-		gtk_widget_set_sensitive(search_window.adv_condition_label, TRUE);
-		gtk_widget_set_sensitive(search_window.adv_condition_entry, TRUE);
-		gtk_widget_set_sensitive(search_window.adv_condition_btn, TRUE);
-		gtk_widget_set_sensitive(search_window.case_checkbtn, FALSE);
-		gtk_widget_set_sensitive(search_window.bool_optmenu, FALSE);
-	} else {
-		gtk_widget_set_sensitive(search_window.to_label, TRUE);
-		gtk_widget_set_sensitive(search_window.to_entry, TRUE);
-		gtk_widget_set_sensitive(search_window.from_label, TRUE);
-		gtk_widget_set_sensitive(search_window.from_entry, TRUE);
-		gtk_widget_set_sensitive(search_window.subject_label, TRUE);
-		gtk_widget_set_sensitive(search_window.subject_entry, TRUE);
-		gtk_widget_set_sensitive(search_window.body_label, TRUE);
-		gtk_widget_set_sensitive(search_window.body_entry, TRUE);
-		gtk_widget_set_sensitive(search_window.case_checkbtn, TRUE);
-		gtk_widget_set_sensitive(search_window.bool_optmenu, TRUE);
-	}
-	gtk_widget_set_sensitive(search_window.clear_btn, TRUE);
-	gtk_widget_set_sensitive(search_window.all_btn, TRUE);
-	gtk_widget_set_sensitive(search_window.prev_btn, TRUE);
-	gtk_widget_set_sensitive(search_window.next_btn, TRUE);
-	gtk_widget_set_sensitive(search_window.adv_search_checkbtn, TRUE);
-}
-
-static void summary_search_create(void)
-{
-	GtkWidget *window;
-	GtkWidget *vbox1;
-	GtkWidget *bool_hbox;
-	GtkWidget *bool_optmenu;
-	GtkListStore *menu;
-	GtkTreeIter iter;
-	GtkWidget *clear_btn;
-
-	GtkWidget *table1;
-	GtkWidget *from_label;
-	GtkWidget *from_entry;
-	GtkWidget *to_label;
-	GtkWidget *to_entry;
-	GtkWidget *subject_label;
-	GtkWidget *subject_entry;
-	GtkWidget *body_label;
-	GtkWidget *body_entry;
-	GtkWidget *adv_condition_label;
-	GtkWidget *adv_condition_entry;
-	GtkWidget *adv_condition_btn;
-
-	GtkWidget *checkbtn_hbox;
-	GtkWidget *adv_search_checkbtn;
-	GtkWidget *case_checkbtn;
-
-	GtkWidget *confirm_area;
-	GtkWidget *help_btn;
-	GtkWidget *all_btn;
-	GtkWidget *prev_btn;
-	GtkWidget *next_btn;
-	GtkWidget *close_btn;
-	GtkWidget *stop_btn;
-	gboolean is_searching = FALSE;
-
-	window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "summary_search");
-	gtk_window_set_title(GTK_WINDOW (window), _("Search messages"));
-	gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
-	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
-	gtk_container_set_border_width(GTK_CONTAINER (window), 8);
-	g_signal_connect(G_OBJECT(window), "delete_event",
-			 G_CALLBACK(gtk_widget_hide_on_delete), NULL);
-	g_signal_connect(G_OBJECT(window), "key_press_event",
-			 G_CALLBACK(key_pressed), NULL);
-	MANAGE_WINDOW_SIGNALS_CONNECT(window);
-
-	vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-	gtk_widget_show (vbox1);
-	gtk_container_add (GTK_CONTAINER (window), vbox1);
-
-	bool_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
-	gtk_widget_show(bool_hbox);
-	gtk_box_pack_start(GTK_BOX(vbox1), bool_hbox, FALSE, FALSE, 0);
-
-	bool_optmenu = gtkut_sc_combobox_create(NULL, FALSE);
-	menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(bool_optmenu)));
-	gtk_widget_show(bool_optmenu);
-	gtk_box_pack_start(GTK_BOX(bool_hbox), bool_optmenu, FALSE, FALSE, 0);
-
-	COMBOBOX_ADD(menu, _("Match any of the following"), 0);
-	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(bool_optmenu), &iter);
-	COMBOBOX_ADD(menu, _("Match all of the following"), 1);
-	g_signal_connect(G_OBJECT(bool_optmenu), "changed",
-			 G_CALLBACK(optmenu_changed), NULL);
-
-	clear_btn = gtkut_stock_button("edit-clear", _("C_lear"));
-	gtk_widget_show(clear_btn);
-	gtk_box_pack_end(GTK_BOX(bool_hbox), clear_btn, FALSE, FALSE, 0);
-
-	table1 = gtk_grid_new();
-	gtk_widget_show (table1);
-	gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
-	gtk_container_set_border_width (GTK_CONTAINER (table1), 4);
-	gtk_grid_set_row_spacing(GTK_GRID(table1), 8);
-	gtk_grid_set_column_spacing(GTK_GRID(table1), 8);
-
-	from_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(from_entry), -1);
-	if (prefs_common.summary_search_from_history)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(from_entry),
-				prefs_common.summary_search_from_history);
-	gtk_widget_show (from_entry);
-	gtk_grid_attach(GTK_GRID(table1), from_entry, 1, 0, 1, 1);
-	gtk_widget_set_hexpand(from_entry, TRUE);
-	gtk_widget_set_halign(from_entry, GTK_ALIGN_FILL);
-
-	g_signal_connect(G_OBJECT(from_entry), "changed",
-			 G_CALLBACK(from_changed), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((from_entry)))),
-			 "focus_in_event", G_CALLBACK(from_entry_focus_evt_in), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((from_entry)))),
-			 "focus_out_event", G_CALLBACK(from_entry_focus_evt_out), NULL);
-
-	to_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(to_entry), -1);
-	if (prefs_common.summary_search_to_history)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(to_entry),
-				prefs_common.summary_search_to_history);
-	gtk_widget_show (to_entry);
-	gtk_grid_attach(GTK_GRID(table1), to_entry, 1, 1, 1, 1);
-	gtk_widget_set_hexpand(to_entry, TRUE);
-	gtk_widget_set_halign(to_entry, GTK_ALIGN_FILL);
-
-	g_signal_connect(G_OBJECT(to_entry), "changed",
-			 G_CALLBACK(to_changed), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((to_entry)))),
-			 "focus_in_event", G_CALLBACK(to_entry_focus_evt_in), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((to_entry)))),
-			 "focus_out_event", G_CALLBACK(to_entry_focus_evt_out), NULL);
-
-	subject_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(subject_entry), -1);
-	if (prefs_common.summary_search_subject_history)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(subject_entry),
-				prefs_common.summary_search_subject_history);
-	gtk_widget_show (subject_entry);
-	gtk_grid_attach(GTK_GRID(table1), subject_entry, 1, 2, 1, 1);
-	gtk_widget_set_hexpand(subject_entry, TRUE);
-	gtk_widget_set_halign(subject_entry, GTK_ALIGN_FILL);
-
-	g_signal_connect(G_OBJECT(subject_entry), "changed",
-			 G_CALLBACK(subject_changed), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((subject_entry)))),
-			 "focus_in_event", G_CALLBACK(subject_entry_focus_evt_in), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((subject_entry)))),
-			 "focus_out_event", G_CALLBACK(subject_entry_focus_evt_out), NULL);
-
-	body_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(body_entry), -1);
-	if (prefs_common.summary_search_body_history)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(body_entry),
-				prefs_common.summary_search_body_history);
-	gtk_widget_show (body_entry);
-	gtk_grid_attach(GTK_GRID(table1), body_entry, 1, 3, 1, 1);
-	gtk_widget_set_hexpand(body_entry, TRUE);
-	gtk_widget_set_halign(body_entry, GTK_ALIGN_FILL);
-
-	g_signal_connect(G_OBJECT(body_entry), "changed",
-			 G_CALLBACK(body_changed), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((body_entry)))),
-			 "focus_in_event", G_CALLBACK(body_entry_focus_evt_in), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((body_entry)))),
-			 "focus_out_event", G_CALLBACK(body_entry_focus_evt_out), NULL);
-
-	adv_condition_entry = gtk_combo_box_text_new_with_entry ();
-	gtk_combo_box_set_active(GTK_COMBO_BOX(adv_condition_entry), -1);
-	if (prefs_common.summary_search_adv_condition_history)
-		combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(adv_condition_entry),
-				prefs_common.summary_search_adv_condition_history);
-	gtk_widget_show (adv_condition_entry);
-	gtk_grid_attach(GTK_GRID(table1), adv_condition_entry, 1, 4, 1, 1);
-	gtk_widget_set_hexpand(adv_condition_entry, TRUE);
-	gtk_widget_set_halign(adv_condition_entry, GTK_ALIGN_FILL);
-
-	g_signal_connect(G_OBJECT(adv_condition_entry), "changed",
-			 G_CALLBACK(adv_condition_changed), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((adv_condition_entry)))),
-			 "focus_in_event", G_CALLBACK(adv_condition_entry_focus_evt_in), NULL);
-	g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN((adv_condition_entry)))),
-			 "focus_out_event", G_CALLBACK(adv_condition_entry_focus_evt_out), NULL);
-
-	adv_condition_btn = gtk_button_new_with_label(" ... ");
-	gtk_widget_show (adv_condition_btn);
-	gtk_grid_attach(GTK_GRID(table1), adv_condition_btn, 2, 4, 1, 1);
-
-	g_signal_connect(G_OBJECT (adv_condition_btn), "clicked",
-			 G_CALLBACK(adv_condition_btn_clicked), search_window.window);
-
-	CLAWS_SET_TIP(adv_condition_btn,
-			     _("Edit search criteria"));
-
-	from_label = gtk_label_new (_("From:"));
-	gtk_widget_show (from_label);
-	gtk_label_set_justify (GTK_LABEL (from_label), GTK_JUSTIFY_RIGHT);
-	gtk_label_set_xalign (GTK_LABEL (from_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table1), from_label, 0, 0, 1, 1);
-
-	to_label = gtk_label_new (_("To:"));
-	gtk_widget_show (to_label);
-	gtk_label_set_justify (GTK_LABEL (to_label), GTK_JUSTIFY_RIGHT);
-	gtk_label_set_xalign (GTK_LABEL (to_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table1), to_label, 0, 1, 1, 1);
-
-	subject_label = gtk_label_new (_("Subject:"));
-	gtk_widget_show (subject_label);
-	gtk_label_set_justify (GTK_LABEL (subject_label), GTK_JUSTIFY_RIGHT);
-	gtk_label_set_xalign (GTK_LABEL (subject_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table1), subject_label, 0, 2, 1, 1);
-
-	body_label = gtk_label_new (_("Body:"));
-	gtk_widget_show (body_label);
-	gtk_label_set_justify (GTK_LABEL (body_label), GTK_JUSTIFY_RIGHT);
-	gtk_label_set_xalign (GTK_LABEL (body_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table1), body_label, 0, 3, 1, 1);
-
-	adv_condition_label = gtk_label_new (_("Condition:"));
-	gtk_widget_show (adv_condition_label);
-	gtk_label_set_justify (GTK_LABEL (adv_condition_label), GTK_JUSTIFY_RIGHT);
-	gtk_label_set_xalign (GTK_LABEL (adv_condition_label), 1.0);
-	gtk_grid_attach(GTK_GRID(table1), adv_condition_label, 0, 4, 1, 1);
-
-	checkbtn_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
-	gtk_widget_show (checkbtn_hbox);
-	gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0);
-	gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8);
-
-	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(case_checkbtn), "changed",
-			 G_CALLBACK(case_changed), NULL);
-
-	adv_search_checkbtn = gtk_check_button_new_with_label (_("Extended Search"));
-	gtk_widget_show (adv_search_checkbtn);
-	gtk_box_pack_start (GTK_BOX (checkbtn_hbox), adv_search_checkbtn,
-			    FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(adv_search_checkbtn), "changed",
-			 G_CALLBACK(case_changed), NULL);
-
-	confirm_area = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
-	gtk_widget_show (confirm_area);
-	gtk_button_box_set_layout(GTK_BUTTON_BOX(confirm_area),
-				  GTK_BUTTONBOX_END);
-	gtk_box_set_spacing(GTK_BOX(confirm_area), 5);
-
-	gtkut_stock_button_add_help(confirm_area, &help_btn);
-
-	all_btn = gtk_button_new_with_mnemonic(_("Find _all"));
-	gtk_widget_set_can_default(all_btn, TRUE);
-	gtk_box_pack_start(GTK_BOX(confirm_area), all_btn, TRUE, TRUE, 0);
-	gtk_widget_show(all_btn);
-
-	prev_btn = gtkut_stock_button("go-previous", _("_Previous"));
-	gtk_widget_set_can_default(prev_btn, TRUE);
-	gtk_box_pack_start(GTK_BOX(confirm_area), prev_btn, TRUE, TRUE, 0);
-	gtk_widget_show(prev_btn);
-
-	next_btn = gtkut_stock_button("go-next", _("_Next"));
-	gtk_widget_set_can_default(next_btn, TRUE);
-	gtk_box_pack_start(GTK_BOX(confirm_area), next_btn, TRUE, TRUE, 0);
-	gtk_widget_show(next_btn);
-
-	close_btn = gtkut_stock_button("window-close", _("_Close"));
-	gtk_widget_set_can_default(close_btn, TRUE);
-	gtk_box_pack_start(GTK_BOX(confirm_area), close_btn, TRUE, TRUE, 0);
-	gtk_widget_show(close_btn);
-
-	/* stop button hidden */
-	stop_btn = gtk_button_new_with_mnemonic(_("_Stop"));
-	gtk_widget_set_can_default(stop_btn, TRUE);
-	gtk_box_pack_start(GTK_BOX(confirm_area), stop_btn, TRUE, TRUE, 0);
-
-	gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0);
-	gtk_widget_grab_default(next_btn);
-
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, bool_optmenu)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, from_label)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, from_entry)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, to_label)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, to_entry)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, subject_label)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, subject_entry)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, body_label)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, body_entry)
-	SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_label)
-	SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_entry)
-	SET_TOGGLE_SENSITIVITY(adv_search_checkbtn, adv_condition_btn)
-	SET_TOGGLE_SENSITIVITY_REVERSE(adv_search_checkbtn, case_checkbtn)
-
-	g_signal_connect(G_OBJECT(help_btn), "clicked",
-			 G_CALLBACK(manual_open_with_anchor_cb),
-			 MANUAL_ANCHOR_SEARCHING);
-	g_signal_connect(G_OBJECT(clear_btn), "clicked",
-			 G_CALLBACK(summary_search_clear), NULL);
-	g_signal_connect(G_OBJECT(all_btn), "clicked",
-			 G_CALLBACK(summary_search_all_clicked), NULL);
-	g_signal_connect(G_OBJECT(prev_btn), "clicked",
-			 G_CALLBACK(summary_search_prev_clicked), NULL);
-	g_signal_connect(G_OBJECT(next_btn), "clicked",
-			 G_CALLBACK(summary_search_next_clicked), NULL);
-	g_signal_connect_closure
-		(G_OBJECT(close_btn), "clicked",
-		 g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide),
-	     window, NULL), FALSE);
-	g_signal_connect(G_OBJECT(stop_btn), "clicked",
-			 G_CALLBACK(summary_search_stop_clicked), NULL);
-
-	search_window.window = window;
-	search_window.bool_optmenu = bool_optmenu;
-	search_window.from_label = from_label;
-	search_window.from_entry = from_entry;
-	search_window.to_label = to_label;
-	search_window.to_entry = to_entry;
-	search_window.subject_label = subject_label;
-	search_window.subject_entry = subject_entry;
-	search_window.body_label = body_label;
-	search_window.body_entry = body_entry;
-	search_window.adv_condition_label = adv_condition_label;
-	search_window.adv_condition_entry = adv_condition_entry;
-	search_window.adv_condition_btn = adv_condition_btn;
-	search_window.case_checkbtn = case_checkbtn;
-	search_window.adv_search_checkbtn = adv_search_checkbtn;
-	search_window.clear_btn = clear_btn;
-	search_window.help_btn = help_btn;
-	search_window.all_btn = all_btn;
-	search_window.prev_btn = prev_btn;
-	search_window.next_btn = next_btn;
-	search_window.close_btn = close_btn;
-	search_window.stop_btn = stop_btn;
-	search_window.advsearch = NULL;
-	search_window.matcher_is_outdated = TRUE;
-	search_window.search_in_progress = FALSE;
-	search_window.matched_msgnums = NULL;
-	search_window.is_searching = is_searching;
-}
-
-static gboolean summary_search_verify_match(MsgInfo *msg)
-{
-	gpointer msgnum = GUINT_TO_POINTER(msg->msgnum);
-
-	if (g_hash_table_lookup(search_window.matched_msgnums, msgnum) != NULL)
-		return TRUE;
-	else
-		return FALSE;
-}
-
-static gboolean summary_search_progress_cb(gpointer data, guint at, guint matched, guint total)
-{
-	if (!search_window.is_searching) {
-		search_window.matcher_is_outdated = TRUE;
-		return FALSE;
-	}
-
-	return summaryview_search_root_progress(search_window.summaryview, at, matched, total);
-}
-
-static gboolean summary_search_prepare_matcher()
-{
-	gboolean adv_search;
-	gboolean bool_and = FALSE;
-	gboolean case_sens = FALSE;
-	gchar *matcher_str;
-	gint match_type;
-	gchar *from_str = NULL, *to_str = NULL, *subject_str = NULL;
-	gchar *body_str = NULL;
-	GSList *matchers = NULL;
-
-	if (!search_window.matcher_is_outdated)
-		return TRUE;
-
-	if (search_window.advsearch == NULL) {
-		search_window.advsearch = advsearch_new();
-		advsearch_set_on_error_cb(search_window.advsearch, NULL, NULL); /* TODO */
-		advsearch_set_on_progress_cb(search_window.advsearch,
-			summary_search_progress_cb, NULL);
-	}
-
-	adv_search = gtk_toggle_button_get_active
-			(GTK_TOGGLE_BUTTON(search_window.adv_search_checkbtn));
-
-	if (adv_search) {
-		matcher_str = add_history_get(search_window.adv_condition_entry, &prefs_common.summary_search_adv_condition_history);
-	} else {
-		MatcherList *matcher_list;
-		bool_and = combobox_get_active_data(GTK_COMBO_BOX(search_window.bool_optmenu));
-		case_sens = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(search_window.case_checkbtn));
-
-		from_str    = add_history_get(search_window.from_entry, &prefs_common.summary_search_from_history);
-		to_str      = add_history_get(search_window.to_entry, &prefs_common.summary_search_to_history);
-		subject_str = add_history_get(search_window.subject_entry, &prefs_common.summary_search_subject_history);
-		body_str    = add_history_get(search_window.body_entry, &prefs_common.summary_search_body_history);
-
-		if (!from_str && !to_str && !subject_str && !body_str) {
-			/* TODO: warn if no search criteria? (or make buttons enabled only when
- 			 * at least one search criteria has been set */
-			return FALSE;
-		}
-
-		match_type = case_sens ? MATCHTYPE_MATCH : MATCHTYPE_MATCHCASE;
-
-		if (from_str) {
-			MatcherProp *prop = matcherprop_new(MATCHCRITERIA_FROM, NULL, match_type, from_str, 0);
-			matchers = g_slist_append(matchers, prop);
-		}
-		if (to_str) {
-			MatcherProp *prop = matcherprop_new(MATCHCRITERIA_TO, NULL, match_type, to_str, 0);
-			matchers = g_slist_append(matchers, prop);
-		}
-		if (subject_str) {
-			MatcherProp *prop = matcherprop_new(MATCHCRITERIA_SUBJECT, NULL, match_type, subject_str, 0);
-			matchers = g_slist_append(matchers, prop);
-		}
-		if (body_str) {
-			MatcherProp *prop = matcherprop_new(MATCHCRITERIA_BODY_PART, NULL, match_type, body_str, 0);
-			matchers = g_slist_append(matchers, prop);
-		}
-		g_free(from_str);
-		g_free(to_str);
-		g_free(subject_str);
-		g_free(body_str);
-
-		matcher_list = matcherlist_new(matchers, bool_and);
-		if (!matcher_list)
-			return FALSE;
-
-		matcher_str = matcherlist_to_string(matcher_list);
-		matcherlist_free(matcher_list);
-	}
-	if (!matcher_str)
-		return FALSE;
-
-	advsearch_set(search_window.advsearch, ADVANCED_SEARCH_EXTENDED,
-		      matcher_str);
-
-	debug_print("Advsearch set: %s\n", matcher_str);
-	g_free(matcher_str);
-
-	if (!advsearch_has_proper_predicate(search_window.advsearch))
-		return FALSE;
-
-	search_window.matcher_is_outdated = FALSE;
-
-	return TRUE;
-}
-
-static gboolean summary_search_prereduce_msg_list()
-{
-	MsgInfoList *msglist = NULL;
-	MsgNumberList *msgnums = NULL;
-	MsgNumberList *cur;
-	SummaryView *summaryview = search_window.summaryview;
-	gboolean result;
-	FolderItem *item = summaryview->folder_item;
-	static GdkCursor *watch_cursor = NULL;
-	if (!watch_cursor)
-		watch_cursor = gdk_cursor_new_for_display(
-				gtk_widget_get_display(summaryview->scrolledwin), GDK_WATCH);
-
-	if (search_window.matcher_is_outdated && !summary_search_prepare_matcher())
-		return FALSE;
-
-	main_window_cursor_wait(mainwindow_get_mainwindow());
-	gdk_window_set_cursor(gtk_widget_get_window(search_window.window), watch_cursor);
-	statusbar_print_all(_("Searching in %s... \n"),
-			item->path ? item->path : "(null)");
-
-	result = advsearch_search_msgs_in_folders(search_window.advsearch,
-			&msglist, item, FALSE);
-	statusbar_pop_all();
-	statusbar_progress_all(0, 0, 0);
-	gdk_window_set_cursor(gtk_widget_get_window(search_window.window), NULL);
-	main_window_cursor_normal(mainwindow_get_mainwindow());
-
-	if (!result)
-		return FALSE;
-
-	msgnums = procmsg_get_number_list_for_msgs(msglist);
-	procmsg_msg_list_free(msglist);
-
-	if (search_window.matched_msgnums == NULL)
-		search_window.matched_msgnums = g_hash_table_new(g_direct_hash, NULL);
-
-	g_hash_table_remove_all(search_window.matched_msgnums);
-
-	for (cur = msgnums; cur != NULL; cur = cur->next)
-		g_hash_table_insert(search_window.matched_msgnums, cur->data, GINT_TO_POINTER(1));
-
-	g_slist_free(msgnums);
-
-	return TRUE;
-}
-
-static void summary_search_execute(gboolean backward, gboolean search_all)
-{
-	SummaryView *summaryview = search_window.summaryview;
-	GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
-	GtkCMCTreeNode *node;
-	MsgInfo *msginfo;
-	gboolean all_searched = FALSE;
-	gboolean matched = FALSE;
-	gint i = 0;
-
-	if (summary_is_locked(summaryview))
-		return;
-
-	summary_lock(summaryview);
-
-	search_window.is_searching = TRUE;
-	main_window_cursor_wait(summaryview->mainwin);
-	summary_show_stop_button();
-
-	if (search_window.matcher_is_outdated && !summary_search_prereduce_msg_list())
-		goto exit;
-
-	if (search_all) {
-		summary_freeze(summaryview);
-		summary_unselect_all(summaryview);
-		node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
-		backward = FALSE;
-	} else if (!summaryview->selected) {
-		/* no selection, search from from list start */
-		if (backward)
-			node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list_end);
-		else
-			node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
-
-		if (!node) {
-			search_window.is_searching = FALSE;
-			summary_hide_stop_button();
-			main_window_cursor_normal(summaryview->mainwin);
-			summary_unlock(summaryview);
-			return;
-		}
-	} else {
-		/* search from current selection */
-		if (backward)
-			node = gtkut_ctree_node_prev(ctree, summaryview->selected);
-		else
-			node = gtkut_ctree_node_next(ctree, summaryview->selected);
-	}
-
-	for (; search_window.is_searching; i++) {
-		if (!node) {
-			gchar *str;
-			AlertValue val;
-
-			if (search_all)
-				break;
-
-			if (all_searched) {
-				alertpanel_full(_("Search failed"),
-						_("Search string not found."),
-				 		"window-close-symbolic", _("_Close"), NULL, NULL,
-						NULL, NULL, ALERTFOCUS_FIRST,
-						FALSE, NULL, ALERT_WARNING);
-				break;
-			}
-
-			if (backward)
-				str = _("Beginning of list reached; continue from end?");
-			else
-				str = _("End of list reached; continue from beginning?");
-
-			val = alertpanel(_("Search finished"), str,
-					 NULL, _("_No"), NULL, _("_Yes"), NULL, NULL,
-					 ALERTFOCUS_SECOND);
-			if (G_ALERTALTERNATE == val) {
-				if (backward) {
-					node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list_end);
-				} else {
-					node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
-				}
-
-				all_searched = TRUE;
-
-				manage_window_focus_in(search_window.window, NULL, NULL);
-			} else
-				break;
-		}
-
-		msginfo = gtk_cmctree_node_get_row_data(ctree, node);
-
-		if (msginfo)
-			matched = summary_search_verify_match(msginfo);
-		else
-			matched = FALSE;
-
-		if (matched) {
-			if (search_all) {
-				gtk_cmctree_select(ctree, node);
-			} else {
-				summary_unlock(summaryview);
-				summary_select_node(summaryview, node,
-						OPEN_SELECTED_ON_SEARCH_RESULTS);
-				summary_lock(summaryview);
-				break;
-			}
-		}
-
-		if (i % (search_window.is_fast ? 1000 : 100) == 0)
-			GTK_EVENTS_FLUSH();
-
-		node = backward ? gtkut_ctree_node_prev(ctree, node)
-				: gtkut_ctree_node_next(ctree, node);
-	}
-
-exit:
-	search_window.is_searching = FALSE;
-	summary_hide_stop_button();
-	main_window_cursor_normal(summaryview->mainwin);
-	if (search_all)
-		summary_thaw_with_status(summaryview);
-	summary_unlock(summaryview);
-}
-
-static void summary_search_clear(GtkButton *button, gpointer data)
-{
-	if (gtk_toggle_button_get_active
-		(GTK_TOGGLE_BUTTON(search_window.adv_search_checkbtn))) {
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.adv_condition_entry)))), "");
-	} else {
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.from_entry)))), "");
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.to_entry)))), "");
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.subject_entry)))), "");
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.body_entry)))), "");
-	}
-	/* stop searching */
-	if (search_window.is_searching) {
-		search_window.is_searching = FALSE;
-	}
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void summary_search_prev_clicked(GtkButton *button, gpointer data)
-{
-	summary_search_execute(TRUE, FALSE);
-}
-
-static void summary_search_next_clicked(GtkButton *button, gpointer data)
-{
-	summary_search_execute(FALSE, FALSE);
-}
-
-static void summary_search_all_clicked(GtkButton *button, gpointer data)
-{
-	summary_search_execute(FALSE, TRUE);
-}
-
-static void adv_condition_btn_done(MatcherList * matchers)
-{
-	gchar *str;
-
-	cm_return_if_fail(
-			mainwindow_get_mainwindow()->summaryview->quicksearch != NULL);
-
-	if (matchers == NULL) {
-		return;
-	}
-
-	str = matcherlist_to_string(matchers);
-	search_window.matcher_is_outdated = TRUE;
-
-	if (str != NULL) {
-		gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((search_window.adv_condition_entry)))), str);
-		g_free(str);
-	}
-}
-
-static void summary_search_stop_clicked(GtkButton *button, gpointer data)
-{
-	search_window.is_searching = FALSE;
-}
-
-static void adv_condition_btn_clicked(GtkButton *button, gpointer data)
-{
-	const gchar * cond_str;
-	MatcherList * matchers = NULL;
-
-	cm_return_if_fail( search_window.window != NULL );
-
-	/* re-use the current search value if it's a condition expression,
-	   otherwise ignore it silently */
-	cond_str = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(search_window.adv_condition_entry));
-	if (cond_str && *cond_str != '\0') {
-		matchers = matcher_parser_get_cond((gchar*)cond_str, NULL);
-	}
-
-	prefs_matcher_open(matchers, adv_condition_btn_done);
-
-	if (matchers != NULL) {
-		matcherlist_free(matchers);
-	}
-};
-
-static void optmenu_changed(GtkComboBox *widget, gpointer user_data)
-{
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void from_changed(void)
-{
-	if (!search_window.from_entry_has_focus)
-		gtk_widget_grab_focus(search_window.from_entry);
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void to_changed(void)
-{
-	if (!search_window.to_entry_has_focus)
-		gtk_widget_grab_focus(search_window.to_entry);
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void subject_changed(void)
-{
-	if (!search_window.subject_entry_has_focus)
-		gtk_widget_grab_focus(search_window.subject_entry);
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void body_changed(void)
-{
-	if (!search_window.body_entry_has_focus)
-		gtk_widget_grab_focus(search_window.body_entry);
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void adv_condition_changed(void)
-{
-	if (!search_window.adv_condition_entry_has_focus)
-		gtk_widget_grab_focus(search_window.adv_condition_entry);
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static void case_changed(GtkToggleButton *togglebutton, gpointer user_data)
-{
-	search_window.matcher_is_outdated = TRUE;
-}
-
-static gboolean from_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.from_entry_has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean from_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.from_entry_has_focus = FALSE;
-	return FALSE;
-}
-
-static gboolean to_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.to_entry_has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean to_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.to_entry_has_focus = FALSE;
-	return FALSE;
-}
-
-static gboolean subject_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.subject_entry_has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean subject_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.subject_entry_has_focus = FALSE;
-	return FALSE;
-}
-
-static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.body_entry_has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.body_entry_has_focus = FALSE;
-	return FALSE;
-}
-
-static gboolean adv_condition_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.adv_condition_entry_has_focus = TRUE;
-	return FALSE;
-}
-
-static gboolean adv_condition_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
-			      	  gpointer data)
-{
-	search_window.adv_condition_entry_has_focus = FALSE;
-	return FALSE;
-}
-
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
-			    gpointer data)
-{
-	if (event && (event->keyval == GDK_KEY_Escape)) {
-		/* ESC key will:
-			- stop a running search
-			- close the search window if no search is running
-		*/
-		if (!search_window.is_searching) {
-			gtk_widget_hide(search_window.window);
-		} else {
-			search_window.is_searching = FALSE;
-		}
-	}
-
-	if (event && (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter)) {
-		if (!search_window.is_searching) {
-			summary_search_execute(FALSE, FALSE);
-		}
-	}
-
-	if (event && (event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_Up)) {
-		if (search_window.from_entry_has_focus) {
-			combobox_set_value_from_arrow_key(
-					GTK_COMBO_BOX(search_window.from_entry),
-					event->keyval);
-			return TRUE;
-		}
-		if (search_window.to_entry_has_focus) {
-			combobox_set_value_from_arrow_key(
-					GTK_COMBO_BOX(search_window.to_entry),
-					event->keyval);
-			return TRUE;
-		}
-		if (search_window.subject_entry_has_focus) {
-			combobox_set_value_from_arrow_key(
-					GTK_COMBO_BOX(search_window.subject_entry),
-					event->keyval);
-			return TRUE;
-		}
-		if (search_window.body_entry_has_focus) {
-			combobox_set_value_from_arrow_key(
-					GTK_COMBO_BOX(search_window.body_entry),
-					event->keyval);
-			return TRUE;
-		}
-		if (search_window.adv_condition_entry_has_focus) {
-			combobox_set_value_from_arrow_key(
-					GTK_COMBO_BOX(search_window.adv_condition_entry),
-					event->keyval);
-			return TRUE;
-		}
-	}
-
-	return FALSE;
-}
blob - 18f6dc7cb342da2aae3742a0f8c04f6d551fd2e2 (mode 644)
blob + /dev/null
--- src/summary_search.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
- *
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- * 
- */
-
-#ifndef __SUMMARY_SEARCH_H__
-#define __SUMMARY_SEARCH_H__
-
-#include <glib.h>
-
-#include "summaryview.h"
-
-void summary_search	(SummaryView	*summaryview);
-
-#endif /* __SUMMARY_SEARCH_H__ */
blob - 9fbe2ea191b0c4d312454c00afdaf92c19fb0543
blob + 93b101bf84c5be0d2b0d135d00b4b45b1e067396
--- src/summaryview.c
+++ src/summaryview.c
@@ -16,7 +16,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include "defs.h"
 
 #include <glib.h>
@@ -65,7 +64,6 @@
 #include "hooks.h"
 #include "description_window.h"
 #include "folderutils.h"
-#include "quicksearch.h"
 #include "log.h"
 #include "manual.h"
 #include "manage_window.h"
@@ -346,12 +344,6 @@ static gint summary_cmp_by_locked	(GtkCMCList 		*clist
 				         gconstpointer 		 ptr1,
 					 gconstpointer 		 ptr2);
 
-static void quicksearch_execute_cb	(QuickSearch    *quicksearch,
-					 gpointer	 data);
-
-static void tog_searchbar_cb		(GtkWidget	*w,
-					 gpointer	 data);
-
 static void summary_find_answers	(SummaryView 	*summaryview,
 					 MsgInfo	*msg);
 
@@ -491,8 +483,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 	GtkWidget *hbox_spc;
 	GtkWidget *toggle_eventbox;
 	GtkWidget *toggle_arrow;
-	GtkWidget *toggle_search;
-	QuickSearch *quicksearch;
 
 	debug_print("Creating summary view...\n");
 	summaryview = g_new0(SummaryView, 1);
@@ -514,16 +504,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 	stat_box2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_widget_show(stat_box2);
 
-	toggle_search = gtk_toggle_button_new();
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_search),
-				     prefs_common.show_searchbar);
-	gtk_widget_set_can_focus(toggle_search, FALSE);
-	gtk_widget_show(toggle_search);
-
-	CLAWS_SET_TIP(toggle_search, _("Toggle quick search bar"));
-
-	gtk_box_pack_start(GTK_BOX(hbox), toggle_search, FALSE, FALSE, HSPACING_NARROW_2);
-
 	gtk_box_pack_start(GTK_BOX(hbox), stat_vbox, TRUE, TRUE, 0);
 	gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box, TRUE, TRUE, 0);
 	gtk_box_pack_start(GTK_BOX(stat_vbox), stat_box2, TRUE, TRUE, 0);
@@ -586,14 +566,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 	gtk_widget_show_all(stat_vbox);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
-	quicksearch = quicksearch_new();
-	gtk_box_pack_start(GTK_BOX(vbox), quicksearch_get_widget(quicksearch), FALSE, FALSE, 0);
-
-	quicksearch_set_execute_callback(quicksearch, quicksearch_execute_cb, summaryview);
-
-  	g_signal_connect (G_OBJECT(toggle_search), "toggled",
-			  G_CALLBACK(tog_searchbar_cb), summaryview);
-
 	/* create popup menu */
 
 	gtk_action_group_add_actions(mainwin->action_group,
@@ -687,7 +659,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 	summaryview->statlabel_msgs = statlabel_msgs;
 	summaryview->toggle_eventbox = toggle_eventbox;
 	summaryview->toggle_arrow = toggle_arrow;
-	summaryview->toggle_search = toggle_search;
 	summaryview->lock_count = 0;
 	summaryview->msginfo_update_callback_id =
 		hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, summary_update_msg, (gpointer) summaryview);
@@ -702,8 +673,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 
 	summaryview->target_list = gtk_target_list_new(summary_drag_types, 3);
 
-	summaryview->quicksearch = quicksearch;
-
 	/* CLAWS: need this to get the SummaryView * from
 	 * the CList */
 	g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview);
@@ -711,11 +680,6 @@ SummaryView *summary_create(MainWindow *mainwin)
 	gtk_widget_show_all(vbox);
 
 	gtk_widget_show(vbox);
-
-	if (prefs_common.show_searchbar)
-		quicksearch_show(quicksearch);
-	else
-		quicksearch_hide(quicksearch);
 	return summaryview;
 }
 
@@ -756,11 +720,6 @@ void summary_relayout(SummaryView *summaryview)
 
 	g_object_unref(summaryview->hbox_l);
 	g_object_unref(summaryview->statlabel_msgs);
-	quicksearch_relayout(summaryview->quicksearch);
-	if (prefs_common.show_searchbar)
-		quicksearch_show(summaryview->quicksearch);
-	else
-		quicksearch_hide(summaryview->quicksearch);
 }
 
 static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon)
@@ -811,11 +770,6 @@ void summary_init(SummaryView *summaryview)
 
 	summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN);
 
-	pixmap = stock_pixmap_widget(STOCK_PIXMAP_QUICKSEARCH);
-	gtk_container_add (GTK_CONTAINER(summaryview->toggle_search), pixmap);
-	gtk_widget_show(pixmap);
-	summaryview->quick_search_pixmap = pixmap;
-
 	/* Init summaryview prefs */
 	summaryview->sort_key = SORT_BY_NONE;
 	summaryview->sort_type = SORT_ASCENDING;
@@ -910,89 +864,6 @@ static void summaryview_reset_recursive_folder_match(S
 	summaryview->search_root_folder = NULL;
 }
 
-static gboolean summaryview_quicksearch_recursive_progress(gpointer data, guint at, guint matched, guint total)
-{
-	QuickSearch *search = (QuickSearch*) data;
-	gint interval = quicksearch_is_fast(search) ? 5000 : 100;
-
-	statusbar_progress_all(at, total, interval);
-	if (at % interval == 0)
-		GTK_EVENTS_FLUSH();
-
-	if (matched > 0)
-		return FALSE;
-
-	return TRUE;
-}
-
-static void summaryview_quicksearch_recurse_step(SummaryView *summaryview, FolderItem *item)
-{
-	MsgInfoList *msgs = NULL;
-	gboolean result = TRUE;
-
-	statusbar_print_all(_("Searching in %s... \n"),
-		item->path ? item->path : "(null)");
-	folder_item_update_freeze();
-
-	quicksearch_set_on_progress_cb(summaryview->quicksearch, summaryview_quicksearch_recursive_progress, summaryview->quicksearch);
-	if (!quicksearch_run_on_folder(summaryview->quicksearch, item, &msgs))
-		result = FALSE;
-
-	result = result && msgs != NULL;
-
-	if (msgs != NULL)
-		procmsg_msg_list_free(msgs);
-
-	folder_item_update_thaw();
-	statusbar_progress_all(0, 0, 0);
-	statusbar_pop_all();
-
-	if (result) {
-		summaryview->recursive_matched_folders = g_slist_prepend(
-				summaryview->recursive_matched_folders, item);
-
-		folderview_update_search_icon(item, TRUE);
-	}
-}
-
-static void summaryview_quicksearch_search_subfolders(SummaryView *summaryview, FolderItem *folder_item)
-{
-	FolderItem *cur = NULL;
-	GNode *node = folder_item->node->children;
-
-	if (!prefs_common.summary_quicksearch_recurse
-			|| !quicksearch_has_sat_predicate(summaryview->quicksearch)
-			|| quicksearch_is_in_typing(summaryview->quicksearch))
-		return;
-
-	for (; node != NULL; node = node->next) {
-		if (!quicksearch_has_sat_predicate(summaryview->quicksearch))
-			return;
-
-		cur = FOLDER_ITEM(node->data);
-		summaryview_quicksearch_recurse_step(summaryview, cur);
-		if (cur->node->children)
-			summaryview_quicksearch_search_subfolders(summaryview, cur);
-	}
-}
-
-static void summaryview_quicksearch_recurse(SummaryView *summaryview)
-{
-	if (!prefs_common.summary_quicksearch_recurse
-		|| !quicksearch_has_sat_predicate(summaryview->quicksearch)
-		|| summaryview->folder_item == NULL) {
-		return;
-	}
-	main_window_cursor_wait(summaryview->mainwin);
-
-	summaryview_reset_recursive_folder_match(summaryview);
-	summaryview->search_root_folder = summaryview->folder_item;
-
-	summaryview_quicksearch_search_subfolders(summaryview, summaryview->folder_item);
-
-	main_window_cursor_normal(summaryview->mainwin);
-}
-
 static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
 {
 	int u = 0, n = 0, m = 0, t = 0, r = 0, f = 0, l = 0, i = 0, w = 0;
@@ -1037,10 +908,8 @@ static gboolean summary_check_consistency(FolderItem *
 
 gboolean summaryview_search_root_progress(gpointer data, guint at, guint matched, guint total)
 {
-	SummaryView *summaryview = (SummaryView*) data;
+	gint interval = 100;
 
-	gint interval = quicksearch_is_fast(summaryview->quicksearch) ? 5000 : 100;
-
 	statusbar_progress_all(at, total, interval);
 
 	if (at % interval == 0)
@@ -1083,19 +952,7 @@ gboolean summary_show(SummaryView *summaryview, Folder
 
 	if (!is_refresh) {
 		main_create_mailing_list_menu (summaryview->mainwin, NULL);
-	}
-	if (!prefs_common.summary_quicksearch_sticky
-	 && (!prefs_common.summary_quicksearch_recurse
-	  || !quicksearch_has_sat_predicate(summaryview->quicksearch)
-	  || (item && !folder_is_child_of(item, summaryview->search_root_folder)))
-	 && !quicksearch_is_running(summaryview->quicksearch)
-	 && !is_refresh) {
-		quicksearch_set(summaryview->quicksearch, prefs_common.summary_quicksearch_type, "");
-	}
-
-	/* STATUSBAR_POP(summaryview->mainwin); */
-
-	if (is_refresh) {
+	} else {
 		selected_msgnum = summary_get_msgnum(summaryview,
 						     summaryview->selected);
 		displayed_msgnum = summary_get_msgnum(summaryview,
@@ -1125,7 +982,7 @@ gboolean summary_show(SummaryView *summaryview, Folder
 			inc_unlock();
 			return FALSE;
 		}
-		if (changed || !quicksearch_has_sat_predicate(summaryview->quicksearch))
+		if (changed)
 			folder_update_op_count();
 	}
 
@@ -1174,40 +1031,9 @@ gboolean summary_show(SummaryView *summaryview, Folder
 		mlist = folder_item_get_msg_list(item);
 	}
 
-	if (quicksearch_has_sat_predicate(summaryview->quicksearch)) {
-		procmsg_msg_list_free(mlist);
-		mlist = NULL;
-
-
-		statusbar_print_all(_("Searching in %s... \n"),
-			summaryview->folder_item->path ?
-			summaryview->folder_item->path : "(null)");
-
-		folder_item_update_freeze();
-
-		quicksearch_set_on_progress_cb(summaryview->quicksearch, summaryview_search_root_progress, summaryview);
-		quicksearch_run_on_folder(summaryview->quicksearch, summaryview->folder_item, &mlist);
-
-		folder_item_update_thaw();
-		statusbar_progress_all(0, 0, 0);
-		statusbar_pop_all();
-
-		if (!quicksearch_has_sat_predicate(summaryview->quicksearch)) {
-			debug_print("search cancelled!\n");
-			summary_thaw(summaryview);
-			STATUSBAR_POP(summaryview->mainwin);
-			main_window_cursor_normal(summaryview->mainwin);
-			summary_unlock(summaryview);
-			inc_unlock();
-			summary_show(summaryview, summaryview->folder_item, FALSE);
-			return FALSE;
-		}
-	}
-
 	if ((summaryview->folder_item->hide_read_msgs
              || summaryview->folder_item->hide_del_msgs
-             || summaryview->folder_item->hide_read_threads) &&
-	    quicksearch_has_sat_predicate(summaryview->quicksearch) == FALSE) {
+             || summaryview->folder_item->hide_read_threads)) {
 		GSList *not_killed;
 
 		summary_set_hide_menu(summaryview, "/Menu/View/HideReadMessages",
@@ -1275,51 +1101,31 @@ gboolean summary_show(SummaryView *summaryview, Folder
 	g_slist_free(mlist);
 
 	if (is_refresh) {
-		if (!quicksearch_is_in_typing(summaryview->quicksearch)) {
-			summaryview->displayed =
-				summary_find_msg_by_msgnum(summaryview,
-							   displayed_msgnum);
-			if (!summaryview->displayed)
-				messageview_clear(summaryview->messageview);
-			summary_unlock(summaryview);
+		summaryview->displayed =
+			summary_find_msg_by_msgnum(summaryview,
+						   displayed_msgnum);
+		if (!summaryview->displayed)
+			messageview_clear(summaryview->messageview);
+		summary_unlock(summaryview);
 
-			if (quicksearch_is_running(summaryview->quicksearch))
-				summary_select_by_msgnum(summaryview, selected_msgnum,
-						OPEN_SELECTED_ON_SEARCH_RESULTS);
-			else
-				summary_select_by_msgnum(summaryview, selected_msgnum,
-						FALSE);
+		summary_select_by_msgnum(summaryview, selected_msgnum, FALSE);
 
-			summary_lock(summaryview);
-			if (!summaryview->selected) {
-				/* no selected message - select first unread
-				   message, but do not display it */
-				node = summary_find_next_flagged_msg(summaryview, NULL,
-								     MSG_UNREAD, FALSE);
-				if (node == NULL && GTK_CMCLIST(ctree)->row_list != NULL)
-					node = gtk_cmctree_node_nth
-						(ctree,
-						 item->sort_type == SORT_DESCENDING
-						 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
-				summary_unlock(summaryview);
-
-				if (quicksearch_is_running(summaryview->quicksearch))
-					summary_select_node(summaryview, node,
-							OPEN_SELECTED_ON_SEARCH_RESULTS);
-				else
-					summary_select_node(summaryview, node,
-							OPEN_SELECTED_ON_FOLDER_OPEN);
-
-				summary_lock(summaryview);
-			}
-		} else {
-			/* just select first/last */
-			if (GTK_CMCLIST(ctree)->row_list != NULL)
+		summary_lock(summaryview);
+		if (!summaryview->selected) {
+			/* no selected message - select first unread
+			   message, but do not display it */
+			node = summary_find_next_flagged_msg(summaryview, NULL,
+							     MSG_UNREAD, FALSE);
+			if (node == NULL && GTK_CMCLIST(ctree)->row_list != NULL)
 				node = gtk_cmctree_node_nth
 					(ctree,
 					 item->sort_type == SORT_DESCENDING
 					 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
-			summary_select_node(summaryview, node, OPEN_SELECTED_ON_SEARCH_RESULTS);
+			summary_unlock(summaryview);
+
+			summary_select_node(summaryview, node, OPEN_SELECTED_ON_FOLDER_OPEN);
+
+			summary_lock(summaryview);
 		}
 	} else {
 		/* backward compat */
@@ -2081,11 +1887,6 @@ void summary_select_node(SummaryView *summaryview, Gtk
 		GTK_EVENTS_FLUSH();
 		summary_unlock(summaryview);
 
-		/* If quicksearch has focus, let's keep it there. */
-		if (!quicksearch_has_focus(summaryview->quicksearch) ||
-		    quicksearch_is_running(summaryview->quicksearch))
-			summary_grab_focus(summaryview);
-
 		gtkut_ctree_node_move_if_on_the_edge(ctree, node, -1);
 
 		if (display_msg && summaryview->displayed == node)
@@ -2412,8 +2213,7 @@ static void summary_status_show(SummaryView *summaryvi
 
 	if (summaryview->folder_item->hide_read_msgs
 	|| summaryview->folder_item->hide_del_msgs
-	|| summaryview->folder_item->hide_read_threads
-	|| quicksearch_has_sat_predicate(summaryview->quicksearch)) {
+	|| summaryview->folder_item->hide_read_threads) {
 		rowlist = GTK_CMCLIST(summaryview->ctree)->row_list;
 		for (cur = rowlist; cur != NULL && cur->data != NULL; cur = cur->next) {
 			msginfo = gtk_cmctree_node_get_row_data
@@ -2492,7 +2292,6 @@ static void summary_status_show(SummaryView *summaryvi
 static void summary_set_column_titles(SummaryView *summaryview)
 {
 	GtkCMCList *clist = GTK_CMCLIST(summaryview->ctree);
-	FolderItem *item = summaryview->folder_item;
 	GtkWidget *hbox;
 	GtkWidget *label;
 	GtkWidget *arrow;
@@ -5613,9 +5412,6 @@ static gboolean summary_key_pressed(GtkWidget *widget,
 	if (!event)
 		return TRUE;
 
-	if (quicksearch_has_focus(summaryview->quicksearch))
-		return FALSE;
-
 	mod_pressed =
 		((event->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
 
@@ -5739,44 +5535,6 @@ static gboolean summary_key_pressed(GtkWidget *widget,
 }
 #undef CELL_SPACING
 
-static void quicksearch_execute_cb(QuickSearch *quicksearch, gpointer data)
-{
-	SummaryView *summaryview = data;
-
-	summaryview_reset_recursive_folder_match(summaryview);
-	if (summary_show(summaryview, summaryview->folder_item, FALSE))
-		summaryview_quicksearch_recurse(summaryview);
-	else
-		summaryview_reset_recursive_folder_match(summaryview);
-}
-
-static void tog_searchbar_cb(GtkWidget *w, gpointer data)
-{
-	SummaryView *summaryview = (SummaryView *)data;
-
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) {
-		prefs_common.show_searchbar = TRUE;
- 		quicksearch_show(summaryview->quicksearch);
-	} else {
-		prefs_common.show_searchbar = FALSE;
- 		quicksearch_hide(summaryview->quicksearch);
-	}
-}
-
-void summaryview_activate_quicksearch(SummaryView *summaryview, gboolean show)
-{
-	prefs_common.show_searchbar = show;
-	gtk_toggle_button_set_active(
-		GTK_TOGGLE_BUTTON(summaryview->toggle_search),
-		show);
-	if (show) {
-		quicksearch_show(summaryview->quicksearch);
-	} else {
-		quicksearch_hide(summaryview->quicksearch);
-		summary_grab_focus(summaryview);
-	}
-}
-
 void summary_open_row(GtkSCTree *sctree, SummaryView *summaryview)
 {
 	if (FOLDER_SHOWS_TO_HDR(summaryview->folder_item))
@@ -5888,9 +5646,6 @@ static void summary_selected(GtkCMCTree *ctree, GtkCMC
 		} else if (!MSG_IS_REPLIED(msginfo->flags) &&
 			 !MSG_IS_FORWARDED(msginfo->flags)) {
 			marked_unread = TRUE;
-		} else if (MSG_IS_REPLIED(msginfo->flags)) {
-			summary_find_answers(summaryview, msginfo);
-			return;
 		}
 		break;
 	case S_COL_LOCKED:
@@ -6729,8 +6484,6 @@ static void summary_set_hide_menu (SummaryView *summar
 
 void summary_reflect_prefs_pixmap_theme(SummaryView *summaryview)
 {
-	GtkWidget *pixmap;
-
 	stock_pixbuf_gdk(STOCK_PIXMAP_MARK, &markxpm);
 	stock_pixbuf_gdk(STOCK_PIXMAP_DELETED, &deletedxpm);
 	stock_pixbuf_gdk(STOCK_PIXMAP_NEW, &newxpm);
@@ -6753,13 +6506,6 @@ void summary_reflect_prefs_pixmap_theme(SummaryView *s
 
 	summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN);
 
-	pixmap = stock_pixmap_widget(STOCK_PIXMAP_QUICKSEARCH);
-	gtk_container_remove (GTK_CONTAINER(summaryview->toggle_search),
-			      summaryview->quick_search_pixmap);
-	gtk_container_add(GTK_CONTAINER(summaryview->toggle_search), pixmap);
-	gtk_widget_show(pixmap);
-	summaryview->quick_search_pixmap = pixmap;
-
 	folderview_unselect(summaryview->folderview);
 	folderview_select(summaryview->folderview, summaryview->folder_item);
 	summary_set_column_titles(summaryview);
@@ -6919,44 +6665,6 @@ static gboolean summary_update_folder_hook(gpointer so
 	return FALSE;
 }
 
-/*!
- *\brief	change summaryview to display your answer(s) to a message
- *
- *\param	summaryview The SummaryView ;)
- *\param	msginfo The message for which answers are searched
- *
- */
-static void summary_find_answers (SummaryView *summaryview, MsgInfo *msg)
-{
-	FolderItem *sent_folder = NULL;
-	PrefsAccount *account = NULL;
-	GtkCMCTreeNode *node = NULL;
-	char *buf = NULL;
-	if (msg == NULL || msg->msgid == NULL)
-		return;
-
-	account = account_get_reply_account(msg, prefs_common.reply_account_autosel);
-	if (account == NULL)
-		return;
-	sent_folder = account_get_special_folder
-				(account, F_OUTBOX);
-
-	buf = g_strdup_printf("inreplyto matchcase \"%s\"", msg->msgid);
-
-	if (sent_folder != summaryview->folder_item) {
-		folderview_select(summaryview->mainwin->folderview, sent_folder);
-	}
-
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(summaryview->toggle_search), TRUE);
-
-	quicksearch_set(summaryview->quicksearch, ADVANCED_SEARCH_EXTENDED, buf);
-	g_free(buf);
-
-	node = gtk_cmctree_node_nth(GTK_CMCTREE(summaryview->ctree), 0);
-	if (node)
-		summary_select_node(summaryview, node, OPEN_SELECTED_ON_SEARCH_RESULTS);
-}
-
 gint summaryview_export_mbox_list(SummaryView *summaryview)
 /* return values: -2 skipped, -1 error, 0 OK */
 {
blob - aaba1409f76f847d7fee73040af35f9ba195b07e
blob + fe141d0ae1637095ad074e5a1b7a74ae55b016df
--- src/summaryview.h
+++ src/summaryview.h
@@ -67,8 +67,7 @@ typedef enum
 #include "mainwindow.h"
 #include "compose.h"
 #include "folder.h"
-#include "gtksctree.h"
-#include "quicksearch.h"
+#include "gtk/gtksctree.h"
 
 extern GtkTargetEntry summary_drag_types[3];
 
@@ -97,7 +96,6 @@ struct _SummaryView
 	GtkWidget *toggle_eventbox;
 	GtkWidget *toggle_arrow;
 	GtkWidget *toggle_search;
-	GtkWidget *quick_search_pixmap;
 	GtkWidget *popupmenu;
 	GtkWidget *headerpopupmenu;
 	GtkWidget *tags_menu;
@@ -120,7 +118,6 @@ struct _SummaryView
 	FolderView   *folderview;
 	MessageView  *messageview;
 	MessageView  *ext_messageview;
-	QuickSearch  *quicksearch;
 
 	FolderItem *folder_item;
 
@@ -309,7 +306,6 @@ void summary_set_prefs_from_folderitem
 void summary_save_prefs_to_folderitem
                                   (SummaryView *summaryview, FolderItem *item);
 gint summaryview_export_mbox_list (SummaryView *summaryview);
-void summaryview_activate_quicksearch(SummaryView *summaryview, gboolean show);
 void summary_set_menu_sensitive	(SummaryView		*summaryview);
 void summary_relayout(SummaryView *summaryview);
 void summary_update_unread(SummaryView *summaryview, FolderItem *removed_item);
blob - b0a256e2a266e724bab6187521018fa45be7be77 (mode 644)
blob + /dev/null
--- src/tests/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-include $(top_srcdir)/tests.mk
-
-common_ldadd = \
-	$(GLIB_LIBS)
-
-AM_CPPFLAGS = \
-	$(GLIB_CFLAGS) \
-	-I$(top_srcdir)/src \
-	-I$(top_srcdir)/src/common
-
-TEST_PROGS += entity_test
-entity_test_SOURCES = entity_test.c
-entity_test_LDADD = $(common_ldadd) ../entity.o
-
-noinst_PROGRAMS = $(TEST_PROGS)
-
-.PHONY: test
blob - 00c0cd06217a288f2ff7c27b4f37f7a86d88b5df
blob + fc163c23838c4cde9501470d8b8ab2bc9cb7a199
--- src/textview.h
+++ src/textview.h
@@ -19,10 +19,6 @@
 #ifndef __TEXTVIEW_H__
 #define __TEXTVIEW_H__
 
-#ifdef HAVE_CONFIG_H
-#include "claws-features.h"
-#endif
-
 #include <glib.h>
 #include <gtk/gtk.h>
 
blob - f64011d3faceadb829544d40c44e1e50131fe023
blob + c02b5486692b06c557480e905ffd6f85d953befb
--- src/undo.h
+++ src/undo.h
@@ -33,7 +33,7 @@ typedef enum 
 	UNDO_ACTION_REPLACE_DELETE
 } UndoAction;
 
-typedef enum 
+typedef enum
 {
 	UNDO_STATE_TRUE,
 	UNDO_STATE_FALSE,
@@ -49,7 +49,7 @@ typedef void (*UndoChangeStateFunc)	(UndoMain	*undostr
 					 gint		 redo_state,
 					 gpointer	 data);
 
-struct _UndoMain 
+struct _UndoMain
 {
 	GtkTextView *textview;
 
@@ -74,12 +74,12 @@ void undo_set_change_state_func	(UndoMain		*undostruct
 				 UndoChangeStateFunc	 func,
 				 gpointer		 data);
 
-void undo_undo			(UndoMain		*undostruct); 
-void undo_redo			(UndoMain		*undostruct); 
+void undo_undo			(UndoMain		*undostruct);
+void undo_redo			(UndoMain		*undostruct);
 void undo_block			(UndoMain 		*undostruct);
 void undo_unblock		(UndoMain 		*undostruct);
-void undo_wrapping		(UndoMain		*undostruct, 
+void undo_wrapping		(UndoMain		*undostruct,
 				 gboolean 		 wrap);
-void undo_paste_clipboard	(GtkTextView 		*textview, 
+void undo_paste_clipboard	(GtkTextView 		*textview,
 				 UndoMain 		*undostruct);
 #endif /* __UNDO_H__ */
blob - aa5a2810a61733f948eb2c5cbc1b6fd4ce84fae8 (mode 644)
blob + /dev/null
--- tests.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-GTESTER        = gtester
-GTESTER_REPORT = gtester-report
-
-# initialize variables for unconditional += appending
-TEST_PROGS =
-
-### testing rules
-
-# test: run all tests in cwd and subdirs
-test: test-cwd test-recurse
-# test-cwd: run tests in cwd
-test-cwd: ${TEST_PROGS}
-	@[ -z "$(TEST_PROGS)" ] || { set -e; $(TESTS_ENVIRONMENT) ${GTESTER} --verbose ${TEST_PROGS}; }
-
-# test-recurse: run tests in subdirs
-test-recurse:
-	@ for subdir in $(SUBDIRS) ; do \
-	    test "$$subdir" = "." \
-			-o "$$subdir" = "config" \
-			-o "$$subdir" = "doc" \
-			-o "$$subdir" = "manual" \
-			-o "$$subdir" = "m4" \
-			-o "$$subdir" = "po" \
-			-o "$$subdir" = "tools" \
-			|| \
-	    ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) test ) || exit $? ; \
-	  done
-# test-report: run tests in subdirs and generate report
-# perf-report: run tests in subdirs with -m perf and generate report
-# full-report: like test-report: with -m perf and -m slow
-test-report perf-report full-report:	${TEST_PROGS}
-	@ ignore_logdir=true ; \
-	  if test -z "$$GTESTER_LOGDIR" ; then \
-	    GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
-	    ignore_logdir=false ; \
-	  fi ; \
-	  for subdir in $(SUBDIRS) ; do \
-	    test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
-	    ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
-	  done ; \
-	  test -z "${TEST_PROGS}" || { \
-	    case $@ in \
-	    test-report) test_options="-k";; \
-	    perf-report) test_options="-k -m=perf";; \
-	    full-report) test_options="-k -m=perf -m=slow";; \
-	    esac ; \
-	    set -e; \
-	    if test -z "$$GTESTER_LOGDIR" ; then \
-	      ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
-	    elif test -n "${TEST_PROGS}" ; then \
-	      ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
-	    fi ; \
-	  }; \
-	  $$ignore_logdir || { \
-	    echo '<?xml version="1.0"?>' > $@.xml ; \
-	    echo '<report-collection>'  >> $@.xml ; \
-	    for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
-	      sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
-	    done ; \
-	    echo >> $@.xml ; \
-	    echo '</report-collection>' >> $@.xml ; \
-	    rm -rf "$$GTESTER_LOGDIR"/ ; \
-	    ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
-	  }
-.PHONY: test test-cwd test-recurse test-report perf-report full-report
-# run make test-cwd as part of make check
-check-local: test-cwd