# HG changeset patch # User Bram Moolenaar # Date 1277437079 -7200 # Node ID e4d849f4df03ce46a63cd0e8eecf8ca80e8285a0 # Parent 7c31d761ffa9c1adfa9690afe58283b681846691 Remove the old and not well supported GTK 1 code. (James Vega) diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1086,8 +1086,8 @@ restored. (Luc St-Louis) Vim 7.3: - using NSIS 2.46: install on Windows 7 works, but no "Edit with Vim" menu. - Use register_shell_extension()? (George Reilly, 2010 May 26) - Ron's version: http://dev.ronware.org/p/vim/finfo?name=gvim.nsi + Use register_shell_extension()? + Patch from Geoffrey Reilly, 2010 Jun 22 - Patch for conceal feature from Vince, 2010 June 16. Needs some more testing. - undofile: keep markers where the file was written/read, so that it's easy to @@ -1097,7 +1097,6 @@ Vim 7.3: Show "file saved" marker in :undolist - Function to get undo tree: undotree(). List of lists. Each entry is a dictionary: {'nr': 2, 'time': 1234, 'saved': 1} -- Remove support for GTK 1? Patch by James Vega, Jun 11 (removes too much). Patches to include: - Patch for Lisp support with ECL (Mikael Jansson, 2008 Oct 25) - Minor patches from Dominique Pelle, 2010 May 15 diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -325,9 +325,7 @@ CClink = $(CC) # Uncomment one of these lines if you have that GUI but don't want to use it. # The automatic check will use another one that can be found. # Gnome is disabled by default, it may cause trouble. -#CONF_OPT_GUI = --disable-gtk-check #CONF_OPT_GUI = --disable-gtk2-check -#CONF_OPT_GUI = --enable-gnome-check #CONF_OPT_GUI = --enable-gnome2-check #CONF_OPT_GUI = --disable-motif-check #CONF_OPT_GUI = --disable-athena-check @@ -339,6 +337,7 @@ CClink = $(CC) # # GTK versions that are known not to work 100% are rejected. # Use "--disable-gtktest" to accept them anyway. +# Only GTK 2 is supported, for GTK 1 use Vim 7.2. # # GNOME means GTK with Gnome support. If using GTK and --enable-gnome-check # is used then GNOME will automatically be used if it is found. If you have @@ -346,11 +345,8 @@ CClink = $(CC) # --enable-gui=gtk or leave out --enable-gnome-check. # # If the selected GUI isn't found, the GUI is disabled automatically -#CONF_OPT_GUI = --enable-gui=gtk -#CONF_OPT_GUI = --enable-gui=gtk --disable-gtktest #CONF_OPT_GUI = --enable-gui=gtk2 #CONF_OPT_GUI = --enable-gui=gtk2 --disable-gtktest -#CONF_OPT_GUI = --enable-gui=gnome #CONF_OPT_GUI = --enable-gui=gnome2 #CONF_OPT_GUI = --enable-gui=gnome2 --disable-gtktest #CONF_OPT_GUI = --enable-gui=motif @@ -396,8 +392,8 @@ CClink = $(CC) # RUBY # Uncomment this when you want to include the Ruby interface. # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu). -# CONF_OPT_RUBY = --enable-rubyinterp -# CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1 +#CONF_OPT_RUBY = --enable-rubyinterp +#CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1 # MZSCHEME # Uncomment this when you want to include the MzScheme interface. diff --git a/src/auto/configure b/src/auto/configure --- a/src/auto/configure +++ b/src/auto/configure @@ -607,7 +607,6 @@ GUI_LIB_LOC GUI_INC_LOC NARROW_PROTO MOTIF_LIBNAME -GNOME_CONFIG GNOME_INCLUDEDIR GNOME_LIBDIR GNOME_LIBS @@ -615,8 +614,6 @@ GTK_LIBNAME GTK_LIBS GTK_CFLAGS PKG_CONFIG -GTK12_CONFIG -GTK_CONFIG X_LIB X_EXTRA_LIBS X_LIBS @@ -765,15 +762,12 @@ enable_xim enable_fontset with_x enable_gui -enable_gtk_check enable_gtk2_check enable_gnome_check enable_motif_check enable_athena_check enable_nextaw_check enable_carbon_check -with_gtk_prefix -with_gtk_exec_prefix enable_gtktest with_gnome_includes with_gnome_libs @@ -1425,9 +1419,8 @@ Optional Features: --enable-hangulinput Include Hangul input support. --enable-xim Include XIM input support. --enable-fontset Include X fontset output support. - --enable-gui=OPTS X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon - --enable-gtk-check If auto-select GUI, check for GTK default=yes - --enable-gtk2-check If GTK GUI, check for GTK+ 2 default=yes + --enable-gui=OPTS X11 GUI default=auto OPTS=auto/no/gtk2/gnome2/motif/athena/neXtaw/photon/carbon + --enable-gtk2-check If auto-select GUI, check for GTK+ 2 default=yes --enable-gnome-check If GTK GUI, check for GNOME default=no --enable-motif-check If auto-select GUI, check for Motif default=yes --enable-athena-check If auto-select GUI, check for Athena default=yes @@ -1459,8 +1452,6 @@ Optional Packages: --with-tclsh=PATH which tclsh to use (default: tclsh8.0) --with-ruby-command=RUBY name of the Ruby command (default: ruby) --with-x use the X Window System - --with-gtk-prefix=PFX Prefix where GTK is installed (optional) - --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) --with-gnome-includes=DIR Specify location of GNOME headers --with-gnome-libs=DIR Specify location of GNOME libs --with-gnome Specify prefix for GNOME files @@ -4204,7 +4195,7 @@ fi if test "x$CARBON" = "xyes"; then - if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then + if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2; then with_x=no fi fi @@ -7004,7 +6995,6 @@ fi enable_gui_canon=`echo "_$enable_gui" | \ sed 's/[ _+-]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` -SKIP_GTK=YES SKIP_GTK2=YES SKIP_GNOME=YES SKIP_MOTIF=YES @@ -7055,28 +7045,18 @@ else $as_echo "no GUI support" >&6; } ;; yes|""|auto) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes/auto - automatic GUI support" >&5 $as_echo "yes/auto - automatic GUI support" >&6; } - SKIP_GTK= SKIP_GTK2= SKIP_GNOME= SKIP_MOTIF= SKIP_ATHENA= SKIP_NEXTAW= SKIP_CARBON=;; - gtk) { $as_echo "$as_me:${as_lineno-$LINENO}: result: GTK+ 1.x GUI support" >&5 -$as_echo "GTK+ 1.x GUI support" >&6; } - SKIP_GTK=;; gtk2) { $as_echo "$as_me:${as_lineno-$LINENO}: result: GTK+ 2.x GUI support" >&5 $as_echo "GTK+ 2.x GUI support" >&6; } - SKIP_GTK= SKIP_GTK2=;; - gnome) { $as_echo "$as_me:${as_lineno-$LINENO}: result: GNOME 1.x GUI support" >&5 -$as_echo "GNOME 1.x GUI support" >&6; } - SKIP_GNOME= - SKIP_GTK=;; gnome2) { $as_echo "$as_me:${as_lineno-$LINENO}: result: GNOME 2.x GUI support" >&5 $as_echo "GNOME 2.x GUI support" >&6; } SKIP_GNOME= - SKIP_GTK= SKIP_GTK2=;; motif) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Motif GUI support" >&5 $as_echo "Motif GUI support" >&6; } @@ -7093,24 +7073,6 @@ else fi -if test "x$SKIP_GTK" != "xYES" -a "$enable_gui_canon" != "gtk" -a "$enable_gui_canon" != "gtk2"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not to look for GTK" >&5 -$as_echo_n "checking whether or not to look for GTK... " >&6; } - # Check whether --enable-gtk-check was given. -if test "${enable_gtk_check+set}" = set; then : - enableval=$enable_gtk_check; -else - enable_gtk_check="yes" -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_check" >&5 -$as_echo "$enable_gtk_check" >&6; } - if test "x$enable_gtk_check" = "xno"; then - SKIP_GTK=YES - SKIP_GNOME=YES - fi -fi - if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \ -a "$enable_gui_canon" != "gnome2"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not to look for GTK+ 2" >&5 @@ -7126,11 +7088,11 @@ fi $as_echo "$enable_gtk2_check" >&6; } if test "x$enable_gtk2_check" = "xno"; then SKIP_GTK2=YES - fi -fi - -if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome" \ - -a "$enable_gui_canon" != "gnome2"; then + SKIP_GNOME=YES + fi +fi + +if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not to look for GNOME" >&5 $as_echo_n "checking whether or not to look for GNOME... " >&6; } # Check whether --enable-gnome-check was given. @@ -7232,8 +7194,7 @@ if test "x$MACOSX" = "xyes" -a -z "$SKIP datadir='${prefix}/Vim.app/Contents/Resources' - SKIP_GTK=YES; - SKIP_GTK2=YES; + SKIP_GTK2=YES; SKIP_GNOME=YES; SKIP_MOTIF=YES; SKIP_ATHENA=YES; @@ -7249,34 +7210,7 @@ fi - -if test -z "$SKIP_GTK"; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-gtk-prefix argument" >&5 -$as_echo_n "checking --with-gtk-prefix argument... " >&6; } - -# Check whether --with-gtk-prefix was given. -if test "${with_gtk_prefix+set}" = set; then : - withval=$with_gtk_prefix; gtk_config_prefix="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gtk_config_prefix" >&5 -$as_echo "$gtk_config_prefix" >&6; } -else - gtk_config_prefix=""; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-gtk-exec-prefix argument" >&5 -$as_echo_n "checking --with-gtk-exec-prefix argument... " >&6; } - -# Check whether --with-gtk-exec-prefix was given. -if test "${with_gtk_exec_prefix+set}" = set; then : - withval=$with_gtk_exec_prefix; gtk_config_exec_prefix="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gtk_config_prefix" >&5 -$as_echo "$gtk_config_prefix" >&6; } -else - gtk_config_exec_prefix=""; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - +if test -z "$SKIP_GTK2"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-gtktest argument" >&5 $as_echo_n "checking --disable-gtktest argument... " >&6; } @@ -7295,104 +7229,6 @@ fi $as_echo "gtk test disabled" >&6; } fi - if test "x$gtk_config_prefix" != "x" ; then - gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" - GTK_CONFIG=$gtk_config_prefix/bin/gtk-config - fi - if test "x$gtk_config_exec_prefix" != "x" ; then - gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" - GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config - fi - if test "X$GTK_CONFIG" = "X"; then - # Extract the first word of "gtk-config", so it can be a program name with args. -set dummy gtk-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_GTK_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $GTK_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" - ;; -esac -fi -GTK_CONFIG=$ac_cv_path_GTK_CONFIG -if test -n "$GTK_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTK_CONFIG" >&5 -$as_echo "$GTK_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "X$GTK_CONFIG" = "Xno"; then - # Extract the first word of "gtk12-config", so it can be a program name with args. -set dummy gtk12-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_GTK12_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $GTK12_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_GTK12_CONFIG="$GTK12_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GTK12_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_GTK12_CONFIG" && ac_cv_path_GTK12_CONFIG="no" - ;; -esac -fi -GTK12_CONFIG=$ac_cv_path_GTK12_CONFIG -if test -n "$GTK12_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTK12_CONFIG" >&5 -$as_echo "$GTK12_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - GTK_CONFIG="$GTK12_CONFIG" - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using GTK configuration program $GTK_CONFIG" >&5 -$as_echo "Using GTK configuration program $GTK_CONFIG" >&6; } - fi if test "X$PKG_CONFIG" = "X"; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 @@ -7437,8 +7273,7 @@ fi fi - if test "x$GTK_CONFIG:$PKG_CONFIG" != "xno:no"; then - if test "X$SKIP_GTK2" != "XYES"; then + if test "x$PKG_CONFIG" != "xno"; then if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then { @@ -7459,18 +7294,6 @@ fi gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` } - elif test "X$GTK_CONFIG" != "Xno"; then - { - GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` - GTK_LIBDIR= - GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` - gtk_major_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` - gtk_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` - gtk_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` - } else no_gtk=yes fi @@ -7482,7 +7305,7 @@ fi CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" - rm -f conf.gtktest + rm -f conf.gtktest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else @@ -7544,8 +7367,8 @@ fi $as_echo "found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version" >&6; } fi GUI_LIB_LOC="$GTK_LIBDIR" - GTK_LIBNAME="$GTK_LIBS" - GUI_INC_LOC="$GTK_CFLAGS" + GTK_LIBNAME="$GTK_LIBS" + GUI_INC_LOC="$GTK_CFLAGS" else { { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 @@ -7565,170 +7388,24 @@ fi rm -f conf.gtktest - if test "x$GTK_CFLAGS" != "x"; then - SKIP_ATHENA=YES - SKIP_NEXTAW=YES - SKIP_MOTIF=YES - GUITYPE=GTK - - fi + if test "x$GTK_CFLAGS" != "x"; then + SKIP_ATHENA=YES + SKIP_NEXTAW=YES + SKIP_MOTIF=YES + GUITYPE=GTK + fi - - if test "x$GUITYPE" != "xGTK"; then - SKIP_GTK2=YES - - if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then - { - min_gtk_version=1.1.16 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK - version >= $min_gtk_version" >&5 -$as_echo_n "checking for GTK - version >= $min_gtk_version... " >&6; } - no_gtk="" - if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \ - && $PKG_CONFIG --exists gtk+-2.0; then - { - GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0` - GTK_LIBDIR=`$PKG_CONFIG --libs-only-L gtk+-2.0` - GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0` - gtk_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` - gtk_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` - gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` - } - elif test "X$GTK_CONFIG" != "Xno"; then - { - GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` - GTK_LIBDIR= - GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` - gtk_major_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'` - gtk_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'` - gtk_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'` - } - else - no_gtk=yes + fi + if test "x$GUITYPE" = "xGTK"; then + $as_echo "#define HAVE_GTK2 1" >>confdefs.h + + if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \ + || test "0$gtk_minor_version" -ge 2; then + $as_echo "#define HAVE_GTK_MULTIHEAD 1" >>confdefs.h + fi - - if test "x$enable_gtktest" = "xyes" -a "x$no_gtk" = "x"; then + if test -z "$SKIP_GNOME"; then { - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $GTK_CFLAGS" - LIBS="$LIBS $GTK_LIBS" - - rm -f conf.gtktest - if test "$cross_compiling" = yes; then : - echo $ac_n "cross compiling; assumed OK... $ac_c" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#if STDC_HEADERS -# include -# include -#endif - -int -main () -{ -int major, minor, micro; -char *tmp_version; - -system ("touch conf.gtktest"); - -/* HP/UX 9 (%@#!) writes to sscanf strings */ -tmp_version = g_strdup("$min_gtk_version"); -if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { - printf("%s, bad version string\n", "$min_gtk_version"); - exit(1); - } - -if ((gtk_major_version > major) || - ((gtk_major_version == major) && (gtk_minor_version > minor)) || - ((gtk_major_version == major) && (gtk_minor_version == minor) && - (gtk_micro_version >= micro))) -{ - return 0; -} -return 1; -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - no_gtk=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" - } - fi - if test "x$no_gtk" = x ; then - if test "x$enable_gtktest" = "xyes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version" >&5 -$as_echo "yes; found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version" >&5 -$as_echo "found version $gtk_major_version.$gtk_minor_version.$gtk_micro_version" >&6; } - fi - GTK_LIBNAME="$GTK_LIBS" - GUI_INC_LOC="$GTK_CFLAGS" - else - { - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - GTK_CFLAGS="" - GTK_LIBS="" - : - } - fi - } - else - GTK_CFLAGS="" - GTK_LIBS="" - : - fi - - - rm -f conf.gtktest - - if test "x$GTK_CFLAGS" != "x"; then - SKIP_ATHENA=YES - SKIP_NEXTAW=YES - SKIP_MOTIF=YES - GUITYPE=GTK - - fi - fi - fi - if test "x$GUITYPE" = "xGTK"; then - if test "$gtk_major_version" = 1 -a "0$gtk_minor_version" -lt 2 \ - -o "$gtk_major_version" = 1 -a "$gtk_minor_version" = 2 -a "0$gtk_micro_version" -lt 3; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: this GTK version is old; version 1.2.3 or later is recommended" >&5 -$as_echo "this GTK version is old; version 1.2.3 or later is recommended" >&6; } - else - { - if test "0$gtk_major_version" -ge 2; then - $as_echo "#define HAVE_GTK2 1" >>confdefs.h - - if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \ - || test "0$gtk_minor_version" -ge 2 \ - || test "0$gtk_major_version" -gt 2; then - $as_echo "#define HAVE_GTK_MULTIHEAD 1" >>confdefs.h - - fi - fi - if test -z "$SKIP_GNOME"; then - { @@ -7771,7 +7448,7 @@ else fi - if test "x$want_gnome" = xyes -a "0$gtk_major_version" -ge 2; then + if test "x$want_gnome" = xyes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgnomeui-2.0" >&5 $as_echo_n "checking for libgnomeui-2.0... " >&6; } @@ -7802,106 +7479,13 @@ fi fi fi } - elif test "x$want_gnome" = xyes; then - { - # Extract the first word of "gnome-config", so it can be a program name with args. -set dummy gnome-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_GNOME_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $GNOME_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_GNOME_CONFIG="$GNOME_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_GNOME_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_path_GNOME_CONFIG" && ac_cv_path_GNOME_CONFIG="no" - ;; -esac -fi -GNOME_CONFIG=$ac_cv_path_GNOME_CONFIG -if test -n "$GNOME_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNOME_CONFIG" >&5 -$as_echo "$GNOME_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "$GNOME_CONFIG" = "no"; then - no_gnome_config="yes" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $GNOME_CONFIG works" >&5 -$as_echo_n "checking if $GNOME_CONFIG works... " >&6; } - if $GNOME_CONFIG --libs-only-l gnome >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - GNOME_LIBS="`$GNOME_CONFIG --libs-only-l gnome gnomeui`" - GNOME_LIBDIR="`$GNOME_CONFIG --libs-only-L gnorba gnomeui`" - GNOME_INCLUDEDIR="`$GNOME_CONFIG --cflags gnorba gnomeui`" - have_gnome=yes - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - no_gnome_config="yes" - fi - fi - - if test x$exec_prefix = xNONE; then - if test x$prefix = xNONE; then - gnome_prefix=$ac_default_prefix/lib - else - gnome_prefix=$prefix/lib - fi - else - gnome_prefix=`eval echo \`echo $libdir\`` - fi - - if test "$no_gnome_config" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gnomeConf.sh file in $gnome_prefix" >&5 -$as_echo_n "checking for gnomeConf.sh file in $gnome_prefix... " >&6; } - if test -f $gnome_prefix/gnomeConf.sh; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 -$as_echo "found" >&6; } - echo "loading gnome configuration from" \ - "$gnome_prefix/gnomeConf.sh" - . $gnome_prefix/gnomeConf.sh - have_gnome=yes - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - if test x = xfail; then - as_fn_error "Could not find the gnomeConf.sh file that is generated by gnome-libs install" "$LINENO" 5 - fi - fi - fi - } - fi - - if test x$have_gnome = xyes ; then - $as_echo "#define FEAT_GUI_GNOME 1" >>confdefs.h - - GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR" - GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS" - fi - } + fi + + if test "x$have_gnome" = xyes ; then + $as_echo "#define FEAT_GUI_GNOME 1" >>confdefs.h + + GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR" + GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS" fi } fi @@ -8467,7 +8051,7 @@ if test "x$GUITYPE" = "xNONE" -a "$enabl $as_echo "no GUI selected; fontset has been disabled" >&6; } enable_fontset="no" fi -if test "x$GUITYPE:$enable_fontset" = "xGTK:yes" -a "0$gtk_major_version" -ge 2; then +if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: GTK+ 2 GUI selected; fontset has been disabled" >&5 $as_echo "GTK+ 2 GUI selected; fontset has been disabled" >&6; } enable_fontset="no" diff --git a/src/configure.in b/src/configure.in --- a/src/configure.in +++ b/src/configure.in @@ -183,7 +183,7 @@ if test "`(uname) 2>/dev/null`" = Darwin dnl or Motif, Athena or GTK GUI is used. AC_CHECK_HEADER(Carbon/Carbon.h, CARBON=yes) if test "x$CARBON" = "xyes"; then - if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then + if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk2; then with_x=no fi fi @@ -1156,7 +1156,6 @@ AC_ARG_ENABLE(xim, [ --enable-xim Include XIM input support.], AC_MSG_RESULT($enable_xim), [enable_xim="auto"; AC_MSG_RESULT(defaulting to auto)]) -dnl defining FEAT_XIM is delayed, so that it can be disabled for older GTK AC_MSG_CHECKING(--enable-fontset argument) AC_ARG_ENABLE(fontset, @@ -1296,7 +1295,7 @@ test "x$with_x" = xno -a "x$MACOSX" != " AC_MSG_CHECKING(--enable-gui argument) AC_ARG_ENABLE(gui, - [ --enable-gui[=OPTS] X11 GUI [default=auto] [OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto") + [ --enable-gui[=OPTS] X11 GUI [default=auto] [OPTS=auto/no/gtk2/gnome2/motif/athena/neXtaw/photon/carbon]], , enable_gui="auto") dnl Canonicalize the --enable-gui= argument so that it can be easily compared. dnl Do not use character classes for portability with old tools. @@ -1304,7 +1303,6 @@ enable_gui_canon=`echo "_$enable_gui" | sed 's/[[ _+-]]//g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` dnl Skip everything by default. -SKIP_GTK=YES SKIP_GTK2=YES SKIP_GNOME=YES SKIP_MOTIF=YES @@ -1343,24 +1341,16 @@ else case "$enable_gui_canon" in no|none) AC_MSG_RESULT(no GUI support) ;; yes|""|auto) AC_MSG_RESULT(yes/auto - automatic GUI support) - SKIP_GTK= SKIP_GTK2= SKIP_GNOME= SKIP_MOTIF= SKIP_ATHENA= SKIP_NEXTAW= SKIP_CARBON=;; - gtk) AC_MSG_RESULT(GTK+ 1.x GUI support) - SKIP_GTK=;; gtk2) AC_MSG_RESULT(GTK+ 2.x GUI support) - SKIP_GTK= SKIP_GTK2=;; - gnome) AC_MSG_RESULT(GNOME 1.x GUI support) - SKIP_GNOME= - SKIP_GTK=;; gnome2) AC_MSG_RESULT(GNOME 2.x GUI support) SKIP_GNOME= - SKIP_GTK= SKIP_GTK2=;; motif) AC_MSG_RESULT(Motif GUI support) SKIP_MOTIF=;; @@ -1373,32 +1363,20 @@ else fi -if test "x$SKIP_GTK" != "xYES" -a "$enable_gui_canon" != "gtk" -a "$enable_gui_canon" != "gtk2"; then - AC_MSG_CHECKING(whether or not to look for GTK) - AC_ARG_ENABLE(gtk-check, - [ --enable-gtk-check If auto-select GUI, check for GTK [default=yes]], - , enable_gtk_check="yes") - AC_MSG_RESULT($enable_gtk_check) - if test "x$enable_gtk_check" = "xno"; then - SKIP_GTK=YES +if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \ + -a "$enable_gui_canon" != "gnome2"; then + AC_MSG_CHECKING(whether or not to look for GTK+ 2) + AC_ARG_ENABLE(gtk2-check, + [ --enable-gtk2-check If auto-select GUI, check for GTK+ 2 [default=yes]], + , enable_gtk2_check="yes") + AC_MSG_RESULT($enable_gtk2_check) + if test "x$enable_gtk2_check" = "xno"; then + SKIP_GTK2=YES SKIP_GNOME=YES fi fi -if test "x$SKIP_GTK2" != "xYES" -a "$enable_gui_canon" != "gtk2" \ - -a "$enable_gui_canon" != "gnome2"; then - AC_MSG_CHECKING(whether or not to look for GTK+ 2) - AC_ARG_ENABLE(gtk2-check, - [ --enable-gtk2-check If GTK GUI, check for GTK+ 2 [default=yes]], - , enable_gtk2_check="yes") - AC_MSG_RESULT($enable_gtk2_check) - if test "x$enable_gtk2_check" = "xno"; then - SKIP_GTK2=YES - fi -fi - -if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome" \ - -a "$enable_gui_canon" != "gnome2"; then +if test "x$SKIP_GNOME" != "xYES" -a "$enable_gui_canon" != "gnome2"; then AC_MSG_CHECKING(whether or not to look for GNOME) AC_ARG_ENABLE(gnome-check, [ --enable-gnome-check If GTK GUI, check for GNOME [default=no]], @@ -1472,7 +1450,6 @@ if test "x$MACOSX" = "xyes" -a -z "$SKIP datadir='${prefix}/Vim.app/Contents/Resources' dnl skip everything else - SKIP_GTK=YES; SKIP_GTK2=YES; SKIP_GNOME=YES; SKIP_MOTIF=YES; @@ -1482,12 +1459,8 @@ if test "x$MACOSX" = "xyes" -a -z "$SKIP SKIP_CARBON=YES fi -dnl -dnl Get the cflags and libraries from the gtk-config script -dnl - dnl define an autoconf function to check for a specified version of GTK, and -dnl try to compile/link a GTK program. this gets used once for GTK 1.1.16. +dnl try to compile/link a GTK program. dnl dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for GTK, and define GTK_CFLAGS, GTK_LIBDIR and GTK_LIBS @@ -1496,7 +1469,7 @@ AC_DEFUN(AM_PATH_GTK, [ if test "X$GTK_CONFIG" != "Xno" -o "X$PKG_CONFIG" != "Xno"; then { - min_gtk_version=ifelse([$1], ,0.99.7,$1) + min_gtk_version=ifelse([$1], ,2.2.0,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if (test "X$SKIP_GTK2" != "XYES" -a "X$PKG_CONFIG" != "Xno") \ @@ -1515,18 +1488,6 @@ AC_DEFUN(AM_PATH_GTK, gtk_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` } - elif test "X$GTK_CONFIG" != "Xno"; then - { - GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` - GTK_LIBDIR= - GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` - gtk_major_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` - gtk_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` - gtk_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ - sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` - } else no_gtk=yes fi @@ -1539,8 +1500,7 @@ AC_DEFUN(AM_PATH_GTK, LIBS="$LIBS $GTK_LIBS" dnl - dnl Now check if the installed GTK is sufficiently new. (Also sanity - dnl checks the results of gtk-config to some extent + dnl Now check if the installed GTK is sufficiently new. dnl rm -f conf.gtktest AC_TRY_RUN([ @@ -1642,7 +1602,7 @@ AC_DEFUN([GNOME_INIT_HOOK], fi, want_gnome=yes) - if test "x$want_gnome" = xyes -a "0$gtk_major_version" -ge 2; then + if test "x$want_gnome" = xyes; then { AC_MSG_CHECKING(for libgnomeui-2.0) if $PKG_CONFIG --exists libgnomeui-2.0; then @@ -1669,51 +1629,6 @@ AC_DEFUN([GNOME_INIT_HOOK], fi fi } - elif test "x$want_gnome" = xyes; then - { - AC_PATH_PROG(GNOME_CONFIG,gnome-config,no) - if test "$GNOME_CONFIG" = "no"; then - no_gnome_config="yes" - else - AC_MSG_CHECKING(if $GNOME_CONFIG works) - if $GNOME_CONFIG --libs-only-l gnome >/dev/null 2>&1; then - AC_MSG_RESULT(yes) - GNOME_LIBS="`$GNOME_CONFIG --libs-only-l gnome gnomeui`" - GNOME_LIBDIR="`$GNOME_CONFIG --libs-only-L gnorba gnomeui`" - GNOME_INCLUDEDIR="`$GNOME_CONFIG --cflags gnorba gnomeui`" - $1 - else - AC_MSG_RESULT(no) - no_gnome_config="yes" - fi - fi - - if test x$exec_prefix = xNONE; then - if test x$prefix = xNONE; then - gnome_prefix=$ac_default_prefix/lib - else - gnome_prefix=$prefix/lib - fi - else - gnome_prefix=`eval echo \`echo $libdir\`` - fi - - if test "$no_gnome_config" = "yes"; then - AC_MSG_CHECKING(for gnomeConf.sh file in $gnome_prefix) - if test -f $gnome_prefix/gnomeConf.sh; then - AC_MSG_RESULT(found) - echo "loading gnome configuration from" \ - "$gnome_prefix/gnomeConf.sh" - . $gnome_prefix/gnomeConf.sh - $1 - else - AC_MSG_RESULT(not found) - if test x$2 = xfail; then - AC_MSG_ERROR(Could not find the gnomeConf.sh file that is generated by gnome-libs install) - fi - fi - fi - } fi ]) @@ -1723,21 +1638,9 @@ AC_DEFUN([GNOME_INIT],[ dnl --------------------------------------------------------------------------- -dnl Check for GTK. First checks for gtk-config, cause it needs that to get the -dnl correct compiler flags. Then checks for GTK 1.1.16. If that fails, then -dnl it checks for 1.0.6. If both fail, then continue on for Motif as before... +dnl Check for GTK2. If it fails, then continue on for Motif as before... dnl --------------------------------------------------------------------------- -if test -z "$SKIP_GTK"; then - - AC_MSG_CHECKING(--with-gtk-prefix argument) - AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], - gtk_config_prefix="$withval"; AC_MSG_RESULT($gtk_config_prefix), - gtk_config_prefix=""; AC_MSG_RESULT(no)) - - AC_MSG_CHECKING(--with-gtk-exec-prefix argument) - AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], - gtk_config_exec_prefix="$withval"; AC_MSG_RESULT($gtk_config_prefix), - gtk_config_exec_prefix=""; AC_MSG_RESULT(no)) +if test -z "$SKIP_GTK2"; then AC_MSG_CHECKING(--disable-gtktest argument) AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], @@ -1748,89 +1651,41 @@ if test -z "$SKIP_GTK"; then AC_MSG_RESULT(gtk test disabled) fi - if test "x$gtk_config_prefix" != "x" ; then - gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" - GTK_CONFIG=$gtk_config_prefix/bin/gtk-config - fi - if test "x$gtk_config_exec_prefix" != "x" ; then - gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" - GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config - fi - if test "X$GTK_CONFIG" = "X"; then - AC_PATH_PROG(GTK_CONFIG, gtk-config, no) - if test "X$GTK_CONFIG" = "Xno"; then - dnl Some distributions call it gtk12-config, annoying! - AC_PATH_PROG(GTK12_CONFIG, gtk12-config, no) - GTK_CONFIG="$GTK12_CONFIG" - fi - else - AC_MSG_RESULT(Using GTK configuration program $GTK_CONFIG) - fi if test "X$PKG_CONFIG" = "X"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi - if test "x$GTK_CONFIG:$PKG_CONFIG" != "xno:no"; then + if test "x$PKG_CONFIG" != "xno"; then dnl First try finding version 2.2.0 or later. The 2.0.x series has dnl problems (bold fonts, --remote doesn't work). - if test "X$SKIP_GTK2" != "XYES"; then - AM_PATH_GTK(2.2.0, - [GUI_LIB_LOC="$GTK_LIBDIR" - GTK_LIBNAME="$GTK_LIBS" - GUI_INC_LOC="$GTK_CFLAGS"], ) - if test "x$GTK_CFLAGS" != "x"; then - SKIP_ATHENA=YES - SKIP_NEXTAW=YES - SKIP_MOTIF=YES - GUITYPE=GTK - AC_SUBST(GTK_LIBNAME) - fi - fi - - dnl If there is no 2.2.0 or later try the 1.x.x series. We require at - dnl least GTK 1.1.16. 1.0.6 doesn't work. 1.1.1 to 1.1.15 - dnl were test versions. - if test "x$GUITYPE" != "xGTK"; then - SKIP_GTK2=YES - AM_PATH_GTK(1.1.16, - [GTK_LIBNAME="$GTK_LIBS" - GUI_INC_LOC="$GTK_CFLAGS"], ) - if test "x$GTK_CFLAGS" != "x"; then - SKIP_ATHENA=YES - SKIP_NEXTAW=YES - SKIP_MOTIF=YES - GUITYPE=GTK - AC_SUBST(GTK_LIBNAME) - fi + AM_PATH_GTK(2.2.0, + [GUI_LIB_LOC="$GTK_LIBDIR" + GTK_LIBNAME="$GTK_LIBS" + GUI_INC_LOC="$GTK_CFLAGS"], ) + if test "x$GTK_CFLAGS" != "x"; then + SKIP_ATHENA=YES + SKIP_NEXTAW=YES + SKIP_MOTIF=YES + GUITYPE=GTK + AC_SUBST(GTK_LIBNAME) fi fi - dnl Give a warning if GTK is older than 1.2.3 if test "x$GUITYPE" = "xGTK"; then - if test "$gtk_major_version" = 1 -a "0$gtk_minor_version" -lt 2 \ - -o "$gtk_major_version" = 1 -a "$gtk_minor_version" = 2 -a "0$gtk_micro_version" -lt 3; then - AC_MSG_RESULT(this GTK version is old; version 1.2.3 or later is recommended) - else + AC_DEFINE(HAVE_GTK2) + if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \ + || test "0$gtk_minor_version" -ge 2; then + AC_DEFINE(HAVE_GTK_MULTIHEAD) + fi + dnl + dnl if GTK exists, then check for GNOME. + dnl + if test -z "$SKIP_GNOME"; then { - if test "0$gtk_major_version" -ge 2; then - AC_DEFINE(HAVE_GTK2) - if test "$gtk_minor_version" = 1 -a "0$gtk_micro_version" -ge 1 \ - || test "0$gtk_minor_version" -ge 2 \ - || test "0$gtk_major_version" -gt 2; then - AC_DEFINE(HAVE_GTK_MULTIHEAD) - fi - fi - dnl - dnl if GTK exists, and it's not the 1.0.x series, then check for GNOME. - dnl - if test -z "$SKIP_GNOME"; then - { - GNOME_INIT_HOOK([have_gnome=yes]) - if test x$have_gnome = xyes ; then - AC_DEFINE(FEAT_GUI_GNOME) - GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR" - GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS" - fi - } + GNOME_INIT_HOOK([have_gnome=yes]) + if test "x$have_gnome" = xyes ; then + AC_DEFINE(FEAT_GUI_GNOME) + GUI_INC_LOC="$GUI_INC_LOC $GNOME_INCLUDEDIR" + GTK_LIBNAME="$GTK_LIBNAME $GNOME_LIBDIR $GNOME_LIBS" fi } fi @@ -2088,7 +1943,7 @@ if test "x$GUITYPE" = "xNONE" -a "$enabl AC_MSG_RESULT(no GUI selected; fontset has been disabled) enable_fontset="no" fi -if test "x$GUITYPE:$enable_fontset" = "xGTK:yes" -a "0$gtk_major_version" -ge 2; then +if test "x$GUITYPE:$enable_fontset" = "xGTK:yes"; then AC_MSG_RESULT(GTK+ 2 GUI selected; fontset has been disabled) enable_fontset="no" fi diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -11813,9 +11813,7 @@ f_has(argvars, rettv) #endif #ifdef FEAT_GUI_GTK "gui_gtk", -# ifdef HAVE_GTK2 "gui_gtk2", -# endif #endif #ifdef FEAT_GUI_GNOME "gui_gnome", diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -847,13 +847,7 @@ EXTERN int* (*iconv_errno) (void); #ifdef FEAT_XIM # ifdef FEAT_GUI_GTK -# ifdef HAVE_GTK2 EXTERN GtkIMContext *xic INIT(= NULL); -# else -EXTERN GdkICAttr *xic_attr INIT(= NULL); -EXTERN GdkIC *xic INIT(= NULL); -EXTERN char *draw_feedback INIT(= NULL); -# endif /* * Start and end column of the preedit area in virtual columns from the start * of the text line. When there is no preedit area they are set to MAXCOL. @@ -1402,7 +1396,7 @@ EXTERN char_u e_fontset[] INIT(= N_("E23 || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MSWIN) EXTERN char_u e_font[] INIT(= N_("E235: Unknown font: %s")); #endif -#if (defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK)) && !defined(HAVE_GTK2) +#if defined(FEAT_GUI_X11) && !defined(HAVE_GTK2) EXTERN char_u e_fontwidth[] INIT(= N_("E236: Font \"%s\" is not fixed-width")); #endif EXTERN char_u e_internal[] INIT(= N_("E473: Internal error")); diff --git a/src/gui.c b/src/gui.c --- a/src/gui.c +++ b/src/gui.c @@ -2261,7 +2261,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, /* print the string so far if it's the last character or there is * a composing character. */ if (i + cl >= len || (comping && i > start) || dowide -# if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) +# if defined(FEAT_GUI_X11) || (cn > 1 # ifdef FEAT_XFONTSET /* No fontset: At least draw char after wide char at @@ -2293,7 +2293,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, start += cl; } -# if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) +# if defined(FEAT_GUI_X11) /* No fontset: draw a space to fill the gap after a wide char * */ if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0 diff --git a/src/gui.h b/src/gui.h --- a/src/gui.h +++ b/src/gui.h @@ -235,13 +235,8 @@ typedef long guicolor_T; /* handle f actual color */ #ifdef FEAT_GUI_GTK -# ifdef HAVE_GTK2 typedef PangoFontDescription *GuiFont; /* handle for a GUI font */ typedef PangoFontDescription *GuiFontset; /* handle for a GUI fontset */ -# else - typedef GdkFont *GuiFont; /* handle for a GUI font */ - typedef GdkFont *GuiFontset; /* handle for a GUI fontset */ -# endif # define NOFONT (GuiFont)NULL # define NOFONTSET (GuiFontset)NULL #else @@ -402,24 +397,15 @@ typedef struct Gui GdkColor *fgcolor; /* GDK-styled foreground color */ GdkColor *bgcolor; /* GDK-styled background color */ GdkColor *spcolor; /* GDK-styled special color */ -# ifndef HAVE_GTK2 - GuiFont current_font; -# endif GdkGC *text_gc; /* cached GC for normal text */ -# ifdef HAVE_GTK2 PangoContext *text_context; /* the context used for all text */ PangoFont *ascii_font; /* cached font for ASCII strings */ PangoGlyphString *ascii_glyphs; /* cached code point -> glyph map */ -# endif # ifdef FEAT_GUI_TABLINE GtkWidget *tabline; /* tab pages line handle */ # endif GtkAccelGroup *accel_group; -# ifndef HAVE_GTK2 - GtkWidget *fontdlg; /* font selection dialog window */ - char_u *fontname; /* font name from font selection dialog */ -# endif GtkWidget *filedlg; /* file selection dialog */ char_u *browse_fname; /* file name from filedlg */ #endif /* FEAT_GUI_GTK */ diff --git a/src/gui_beval.c b/src/gui_beval.c --- a/src/gui_beval.c +++ b/src/gui_beval.c @@ -157,9 +157,6 @@ static void pointer_event __ARGS((Balloo static void key_event __ARGS((BalloonEval *, unsigned, int)); static gint timeout_cb __ARGS((gpointer)); static gint balloon_expose_event_cb __ARGS((GtkWidget *, GdkEventExpose *, gpointer)); -# ifndef HAVE_GTK2 -static void balloon_draw_cb __ARGS((GtkWidget *, GdkRectangle *, gpointer)); -# endif #else static void addEventHandler __ARGS((Widget, BalloonEval *)); static void removeEventHandler __ARGS((BalloonEval *)); @@ -534,9 +531,7 @@ target_event_cb(GtkWidget *widget, GdkEv cancelBalloon(beval); break; case GDK_BUTTON_PRESS: -# ifdef HAVE_GTK2 case GDK_SCROLL: -# endif cancelBalloon(beval); break; case GDK_KEY_PRESS: @@ -676,25 +671,6 @@ balloon_expose_event_cb(GtkWidget *widge return FALSE; /* continue emission */ } -# ifndef HAVE_GTK2 - static void -balloon_draw_cb(GtkWidget *widget, GdkRectangle *area, gpointer data) -{ - GtkWidget *child; - GdkRectangle child_area; - - gtk_paint_flat_box(widget->style, widget->window, - GTK_STATE_NORMAL, GTK_SHADOW_OUT, - area, widget, "tooltip", - 0, 0, -1, -1); - - child = GTK_BIN(widget)->child; - - if (gtk_widget_intersect(child, area, &child_area)) - gtk_widget_draw(child, &child_area); -} -# endif - #else /* !FEAT_GUI_GTK */ static void @@ -913,15 +889,13 @@ requestBalloon(beval) } #ifdef FEAT_GUI_GTK - -# ifdef HAVE_GTK2 /* * Convert the string to UTF-8 if 'encoding' is not "utf-8". * Replace any non-printable characters and invalid bytes sequences with * "^X" or "" escapes, and apply SpecialKey highlighting to them. * TAB and NL are passed through unscathed. */ -# define IS_NONPRINTABLE(c) (((c) < 0x20 && (c) != TAB && (c) != NL) \ +# define IS_NONPRINTABLE(c) (((c) < 0x20 && (c) != TAB && (c) != NL) \ || (c) == DEL) static void set_printable_label_text(GtkLabel *label, char_u *text) @@ -1059,8 +1033,7 @@ set_printable_label_text(GtkLabel *label gtk_label_set_attributes(label, attr_list); pango_attr_list_unref(attr_list); } -# undef IS_NONPRINTABLE -# endif /* HAVE_GTK2 */ +# undef IS_NONPRINTABLE /* * Draw a balloon. @@ -1077,9 +1050,7 @@ drawBalloon(BalloonEval *beval) int y; int x_offset = EVAL_OFFSET_X; int y_offset = EVAL_OFFSET_Y; -# ifdef HAVE_GTK2 PangoLayout *layout; -# endif # ifdef HAVE_GTK_MULTIHEAD GdkScreen *screen; @@ -1094,7 +1065,6 @@ drawBalloon(BalloonEval *beval) gtk_widget_ensure_style(beval->balloonShell); gtk_widget_ensure_style(beval->balloonLabel); -# ifdef HAVE_GTK2 set_printable_label_text(GTK_LABEL(beval->balloonLabel), beval->msg); /* * Dirty trick: Enable wrapping mode on the label's layout behind its @@ -1102,11 +1072,11 @@ drawBalloon(BalloonEval *beval) * builtin maximum value of about 65 Latin characters. */ layout = gtk_label_get_layout(GTK_LABEL(beval->balloonLabel)); -# ifdef PANGO_WRAP_WORD_CHAR +# ifdef PANGO_WRAP_WORD_CHAR pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR); -# else +# else pango_layout_set_wrap(layout, PANGO_WRAP_WORD); -# endif +# endif pango_layout_set_width(layout, /* try to come up with some reasonable width */ PANGO_SCALE * CLAMP(gui.num_cols * gui.char_width, @@ -1115,25 +1085,6 @@ drawBalloon(BalloonEval *beval) /* Calculate the balloon's width and height. */ gtk_widget_size_request(beval->balloonShell, &requisition); -# else - gtk_label_set_line_wrap(GTK_LABEL(beval->balloonLabel), FALSE); - gtk_label_set_text(GTK_LABEL(beval->balloonLabel), - (const char *)beval->msg); - - /* Calculate the balloon's width and height. */ - gtk_widget_size_request(beval->balloonShell, &requisition); - /* - * Unfortunately, the dirty trick used above to get around the builtin - * maximum wrap width of GtkLabel doesn't work with GTK+ 1. Thus if - * and only if it's absolutely necessary to avoid drawing off-screen, - * do enable wrapping now and recalculate the size request. - */ - if (requisition.width > screen_w) - { - gtk_label_set_line_wrap(GTK_LABEL(beval->balloonLabel), TRUE); - gtk_widget_size_request(beval->balloonShell, &requisition); - } -# endif /* Compute position of the balloon area */ gdk_window_get_origin(beval->target->window, &x, &y); @@ -1196,10 +1147,6 @@ createBalloonEvalWindow(BalloonEval *bev gtk_signal_connect((GtkObject*)(beval->balloonShell), "expose_event", GTK_SIGNAL_FUNC(balloon_expose_event_cb), NULL); -# ifndef HAVE_GTK2 - gtk_signal_connect((GtkObject*)(beval->balloonShell), "draw", - GTK_SIGNAL_FUNC(balloon_draw_cb), NULL); -# endif beval->balloonLabel = gtk_label_new(NULL); gtk_label_set_line_wrap(GTK_LABEL(beval->balloonLabel), FALSE); diff --git a/src/gui_gtk.c b/src/gui_gtk.c --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -62,53 +62,6 @@ # include #endif -#if defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2) -# include "../pixmaps/alert.xpm" -# include "../pixmaps/error.xpm" -# include "../pixmaps/generic.xpm" -# include "../pixmaps/info.xpm" -# include "../pixmaps/quest.xpm" -#endif - -#if defined(FEAT_TOOLBAR) && !defined(HAVE_GTK2) -/* - * Icons used by the toolbar code. - */ -#include "../pixmaps/tb_new.xpm" -#include "../pixmaps/tb_open.xpm" -#include "../pixmaps/tb_close.xpm" -#include "../pixmaps/tb_save.xpm" -#include "../pixmaps/tb_print.xpm" -#include "../pixmaps/tb_cut.xpm" -#include "../pixmaps/tb_copy.xpm" -#include "../pixmaps/tb_paste.xpm" -#include "../pixmaps/tb_find.xpm" -#include "../pixmaps/tb_find_next.xpm" -#include "../pixmaps/tb_find_prev.xpm" -#include "../pixmaps/tb_find_help.xpm" -#include "../pixmaps/tb_exit.xpm" -#include "../pixmaps/tb_undo.xpm" -#include "../pixmaps/tb_redo.xpm" -#include "../pixmaps/tb_help.xpm" -#include "../pixmaps/tb_macro.xpm" -#include "../pixmaps/tb_make.xpm" -#include "../pixmaps/tb_save_all.xpm" -#include "../pixmaps/tb_jump.xpm" -#include "../pixmaps/tb_ctags.xpm" -#include "../pixmaps/tb_load_session.xpm" -#include "../pixmaps/tb_save_session.xpm" -#include "../pixmaps/tb_new_session.xpm" -#include "../pixmaps/tb_blank.xpm" -#include "../pixmaps/tb_maximize.xpm" -#include "../pixmaps/tb_split.xpm" -#include "../pixmaps/tb_minimize.xpm" -#include "../pixmaps/tb_shell.xpm" -#include "../pixmaps/tb_replace.xpm" -#include "../pixmaps/tb_vsplit.xpm" -#include "../pixmaps/tb_maxwidth.xpm" -#include "../pixmaps/tb_minwidth.xpm" -#endif /* FEAT_TOOLBAR && !HAVE_GTK2 */ - #ifdef FEAT_GUI_GTK # include # include @@ -137,11 +90,8 @@ typedef int GtkWidget; static void entry_activate_cb(GtkWidget *widget, gpointer data); static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog); static void find_replace_cb(GtkWidget *widget, gpointer data); -#ifndef HAVE_GTK2 -static void gui_gtk_position_in_parent(GtkWidget *parent, GtkWidget *child, gui_win_pos_T where); -#endif -#if defined(FEAT_TOOLBAR) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) /* * Table from BuiltIn## icon indices to GTK+ stock IDs. Order must exactly * match toolbar_names[] in menu.c! All stock icons including the "vim-*" @@ -298,9 +248,9 @@ toolbar_button_focus_in_event(GtkWidget return TRUE; } -#endif /* FEAT_TOOLBAR && HAVE_GTK2 */ +#endif /* FEAT_TOOLBAR */ -#if (defined(FEAT_TOOLBAR) && defined(HAVE_GTK2)) || defined(PROTO) +#if defined(FEAT_TOOLBAR) || defined(PROTO) void gui_gtk_register_stock_icons(void) @@ -330,19 +280,8 @@ gui_gtk_register_stock_icons(void) g_object_unref(factory); } -#endif /* FEAT_TOOLBAR && HAVE_GTK2 */ - +#endif /* FEAT_TOOLBAR */ -/* - * Only use accelerators when gtk_menu_ensure_uline_accel_group() is - * available, which is in version 1.2.1. That was the first version where - * accelerators properly worked (according to the change log). - */ -#ifdef GTK_CHECK_VERSION -# if GTK_CHECK_VERSION(1, 2, 1) -# define GTK_USE_ACCEL -# endif -#endif #if defined(FEAT_MENU) || defined(PROTO) @@ -364,9 +303,7 @@ translate_mnemonic_tag(char_u *name, int char_u *pdest; int n_underscores = 0; -# ifdef HAVE_GTK2 name = CONVERT_TO_UTF8(name); -# endif if (name == NULL) return NULL; @@ -401,14 +338,10 @@ translate_mnemonic_tag(char_u *name, int *pdest = NUL; } -# ifdef HAVE_GTK2 CONVERT_TO_UTF8_FREE(name); -# endif return buf; } -# ifdef HAVE_GTK2 - static void menu_item_new(vimmenu_T *menu, GtkWidget *parent_widget) { @@ -445,96 +378,6 @@ menu_item_new(vimmenu_T *menu, GtkWidget gtk_widget_show_all(menu->id); } -# else /* !HAVE_GTK2 */ - -/* - * Create a highly customized menu item by hand instead of by using: - * - * gtk_menu_item_new_with_label(menu->dname); - * - * This is necessary, since there is no other way in GTK+ 1 to get the - * not automatically parsed accelerator stuff right. - */ - static void -menu_item_new(vimmenu_T *menu, GtkWidget *parent_widget) -{ - GtkWidget *widget; - GtkWidget *bin; - GtkWidget *label; - char_u *name; - guint accel_key; - - widget = gtk_widget_new(GTK_TYPE_MENU_ITEM, - "GtkWidget::visible", TRUE, - "GtkWidget::sensitive", TRUE, - /* "GtkWidget::parent", parent->submenu_id, */ - NULL); - bin = gtk_widget_new(GTK_TYPE_HBOX, - "GtkWidget::visible", TRUE, - "GtkWidget::parent", widget, - "GtkBox::spacing", 16, - NULL); - label = gtk_widget_new(GTK_TYPE_ACCEL_LABEL, - "GtkWidget::visible", TRUE, - "GtkWidget::parent", bin, - "GtkAccelLabel::accel_widget", widget, - "GtkMisc::xalign", 0.0, - NULL); - menu->label = label; - - if (menu->actext) - gtk_widget_new(GTK_TYPE_LABEL, - "GtkWidget::visible", TRUE, - "GtkWidget::parent", bin, - "GtkLabel::label", menu->actext, - "GtkMisc::xalign", 1.0, - NULL); - - /* - * Translate VIM accelerator tagging into GTK+'s. Note that since GTK uses - * underscores as the accelerator key, we need to add an additional under- - * score for each understore that appears in the menu name. - */ -# ifdef GTK_USE_ACCEL - name = translate_mnemonic_tag(menu->name, - (p_wak[0] != 'n' || !GTK_IS_MENU_BAR(parent_widget))); -# else - name = translate_mnemonic_tag(menu->name, FALSE); -# endif - - /* let GTK do its thing */ - accel_key = gtk_label_parse_uline(GTK_LABEL(label), (const char *)name); - vim_free(name); - -# ifdef GTK_USE_ACCEL - /* Don't add accelator if 'winaltkeys' is "no". */ - if (accel_key != GDK_VoidSymbol) - { - if (GTK_IS_MENU_BAR(parent_widget)) - { - if (*p_wak != 'n') - gtk_widget_add_accelerator(widget, - "activate_item", - gui.accel_group, - accel_key, GDK_MOD1_MASK, - (GtkAccelFlags)0); - } - else - { - gtk_widget_add_accelerator(widget, - "activate_item", - gtk_menu_ensure_uline_accel_group(GTK_MENU(parent_widget)), - accel_key, 0, - (GtkAccelFlags)0); - } - } -# endif /* GTK_USE_ACCEL */ - - menu->id = widget; -} - -# endif /* !HAVE_GTK2 */ - void gui_mch_add_menu(vimmenu_T *menu, int idx) { @@ -562,18 +405,6 @@ gui_mch_add_menu(vimmenu_T *menu, int id gtk_menu_shell_insert(GTK_MENU_SHELL(parent_widget), menu->id, idx); -#ifndef HAVE_GTK2 - /* - * The "Help" menu is a special case, and should be placed at the far - * right hand side of the menu-bar. It's detected by its high priority. - * - * Right-aligning "Help" is considered bad UI design nowadays. - * Thus lets disable this for GTK+ 2 to match the environment. - */ - if (parent == NULL && menu->priority >= 9999) - gtk_menu_item_right_justify(GTK_MENU_ITEM(menu->id)); -#endif - menu->submenu_id = gtk_menu_new(); gtk_menu_set_accel_group(GTK_MENU(menu->submenu_id), gui.accel_group); @@ -590,117 +421,11 @@ menu_item_activate(GtkWidget *widget UNU { gui_menu_cb((vimmenu_T *)data); -# ifndef HAVE_GTK2 - /* Work around a bug in GTK+ 1: we don't seem to get a focus-in - * event after clicking a menu item shown via :popup. */ - if (!gui.in_focus) - gui_focus_change(TRUE); -# endif - /* make sure the menu action is taken immediately */ if (gtk_main_level() > 0) gtk_main_quit(); } -# if defined(FEAT_TOOLBAR) && !defined(HAVE_GTK2) -/* - * These are the pixmaps used for the default buttons. - * Order must exactly match toolbar_names[] in menu.c! - */ -static char **(built_in_pixmaps[]) = -{ - tb_new_xpm, - tb_open_xpm, - tb_save_xpm, - tb_undo_xpm, - tb_redo_xpm, - tb_cut_xpm, - tb_copy_xpm, - tb_paste_xpm, - tb_print_xpm, - tb_help_xpm, - tb_find_xpm, - tb_save_all_xpm, - tb_save_session_xpm, - tb_new_session_xpm, - tb_load_session_xpm, - tb_macro_xpm, - tb_replace_xpm, - tb_close_xpm, - tb_maximize_xpm, - tb_minimize_xpm, - tb_split_xpm, - tb_shell_xpm, - tb_find_prev_xpm, - tb_find_next_xpm, - tb_find_help_xpm, - tb_make_xpm, - tb_jump_xpm, - tb_ctags_xpm, - tb_vsplit_xpm, - tb_maxwidth_xpm, - tb_minwidth_xpm, - tb_exit_xpm -}; - -/* - * creates a blank pixmap using tb_blank - */ - static void -pixmap_create_from_xpm(char **xpm, GdkPixmap **pixmap, GdkBitmap **mask) -{ - *pixmap = gdk_pixmap_colormap_create_from_xpm_d( - NULL, - gtk_widget_get_colormap(gui.mainwin), - mask, - NULL, - xpm); -} - -/* - * creates a pixmap by using a built-in number - */ - static void -pixmap_create_by_num(int pixmap_num, GdkPixmap **pixmap, GdkBitmap **mask) -{ - if (pixmap_num >= 0 && pixmap_num < (sizeof(built_in_pixmaps) - / sizeof(built_in_pixmaps[0]))) - pixmap_create_from_xpm(built_in_pixmaps[pixmap_num], pixmap, mask); -} - -/* - * Creates a pixmap by using the pixmap "name" found in 'runtimepath'/bitmaps/ - */ - static void -pixmap_create_by_dir(char_u *name, GdkPixmap **pixmap, GdkBitmap **mask) -{ - char_u full_pathname[MAXPATHL + 1]; - - if (gui_find_bitmap(name, full_pathname, "xpm") == OK) - *pixmap = gdk_pixmap_colormap_create_from_xpm( - NULL, - gtk_widget_get_colormap(gui.mainwin), - mask, - &gui.mainwin->style->bg[GTK_STATE_NORMAL], - (const char *)full_pathname); -} - -/* - * Creates a pixmap by using the pixmap "fname". - */ - static void -pixmap_create_from_file(char_u *fname, GdkPixmap **pixmap, GdkBitmap **mask) -{ - *pixmap = gdk_pixmap_colormap_create_from_xpm( - NULL, - gtk_widget_get_colormap(gui.mainwin), - mask, - &gui.mainwin->style->bg[GTK_STATE_NORMAL], - (const char *)fname); -} - -# endif /* FEAT_TOOLBAR && !HAVE_GTK2 */ - void gui_mch_add_menu_item(vimmenu_T *menu, int idx) { @@ -723,7 +448,6 @@ gui_mch_add_menu_item(vimmenu_T *menu, i } else { -# ifdef HAVE_GTK2 char_u *text; char_u *tooltip; @@ -750,39 +474,6 @@ gui_mch_add_menu_item(vimmenu_T *menu, i CONVERT_TO_UTF8_FREE(text); CONVERT_TO_UTF8_FREE(tooltip); - -# else /* !HAVE_GTK2 */ - - GdkPixmap *pixmap = NULL; - GdkBitmap *mask = NULL; - - /* First try user specified bitmap, then builtin, the a blank. */ - if (menu->iconfile != NULL) - { - char_u buf[MAXPATHL + 1]; - - gui_find_iconfile(menu->iconfile, buf, "xpm"); - pixmap_create_from_file(buf, &pixmap, &mask); - } - if (pixmap == NULL && !menu->icon_builtin) - pixmap_create_by_dir(menu->name, &pixmap, &mask); - if (pixmap == NULL && menu->iconidx >= 0) - pixmap_create_by_num(menu->iconidx, &pixmap, &mask); - if (pixmap == NULL) - pixmap_create_from_xpm(tb_blank_xpm, &pixmap, &mask); - if (pixmap == NULL) - return; /* should at least have blank pixmap, but if not... */ - - menu->id = gtk_toolbar_insert_item( - toolbar, - (char *)(menu->dname), - (char *)(menu->strings[MENU_INDEX_TIP]), - (char *)(menu->dname), - gtk_pixmap_new(pixmap, mask), - GTK_SIGNAL_FUNC(menu_item_activate), - (gpointer)menu, - idx); -# endif /* !HAVE_GTK2 */ } } else @@ -837,45 +528,16 @@ gui_gtk_set_mnemonics(int enable) { vimmenu_T *menu; char_u *name; -# if !defined(HAVE_GTK2) && defined(GTK_USE_ACCEL) - guint accel_key; -# endif for (menu = root_menu; menu != NULL; menu = menu->next) { if (menu->id == NULL) continue; -# if defined(HAVE_GTK2) name = translate_mnemonic_tag(menu->name, enable); gtk_label_set_text_with_mnemonic(GTK_LABEL(menu->label), (const char *)name); vim_free(name); -# else -# if defined(GTK_USE_ACCEL) - name = translate_mnemonic_tag(menu->name, TRUE); - if (name != NULL) - { - accel_key = gtk_label_parse_uline(GTK_LABEL(menu->label), - (const char *)name); - if (accel_key != GDK_VoidSymbol) - gtk_widget_remove_accelerator(menu->id, gui.accel_group, - accel_key, GDK_MOD1_MASK); - if (enable && accel_key != GDK_VoidSymbol) - gtk_widget_add_accelerator(menu->id, "activate_item", - gui.accel_group, - accel_key, GDK_MOD1_MASK, - (GtkAccelFlags)0); - vim_free(name); - } - if (!enable) - { - name = translate_mnemonic_tag(menu->name, FALSE); - gtk_label_parse_uline(GTK_LABEL(menu->label), (const char *)name); - vim_free(name); - } -# endif -# endif } } @@ -903,58 +565,7 @@ gui_mch_toggle_tearoffs(int enable) } #endif /* FEAT_MENU */ - -#if defined(FEAT_TOOLBAR) && !defined(HAVE_GTK2) -/* - * Seems like there's a hole in the GTK Toolbar API: there's no provision for - * removing an item from the toolbar. Therefore I need to resort to going - * really deeply into the internal widget structures. - * - * I'm not sure the statement above is true -- at least with - * GTK+ 2 one can just call gtk_widget_destroy() and be done with it. - * It is true though that you couldn't remove space items before GTK+ 2 - * (without digging into the internals that is). But the code below - * doesn't seem to handle those either. Well, it's obsolete anyway. - */ - static void -toolbar_remove_item_by_text(GtkToolbar *tb, const char *text) -{ - GtkContainer *container; - GList *childl; - GtkToolbarChild *gtbc; - - g_return_if_fail(tb != NULL); - g_return_if_fail(GTK_IS_TOOLBAR(tb)); - container = GTK_CONTAINER(&tb->container); - - for (childl = tb->children; childl; childl = childl->next) - { - gtbc = (GtkToolbarChild *)childl->data; - - if (gtbc->type != GTK_TOOLBAR_CHILD_SPACE - && strcmp(GTK_LABEL(gtbc->label)->label, text) == 0) - { - gboolean was_visible; - - was_visible = GTK_WIDGET_VISIBLE(gtbc->widget); - gtk_widget_unparent(gtbc->widget); - - tb->children = g_list_remove_link(tb->children, childl); - g_free(gtbc); - g_list_free(childl); - tb->num_children--; - - if (was_visible && GTK_WIDGET_VISIBLE(container)) - gtk_widget_queue_resize(GTK_WIDGET(container)); - - break; - } - } -} -#endif /* FEAT_TOOLBAR && !HAVE_GTK2 */ - - -#if defined(FEAT_TOOLBAR) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) static int get_menu_position(vimmenu_T *menu) { @@ -969,7 +580,7 @@ get_menu_position(vimmenu_T *menu) return idx; } -#endif /* FEAT_TOOLBAR && HAVE_GTK2 */ +#endif /* FEAT_TOOLBAR */ #if defined(FEAT_TOOLBAR) || defined(PROTO) @@ -981,18 +592,12 @@ gui_mch_menu_set_tip(vimmenu_T *menu) { char_u *tooltip; -# ifdef HAVE_GTK2 tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]); if (tooltip == NULL || utf_valid_string(tooltip, NULL)) /* Only set the tooltip when it's valid utf-8. */ -# else - tooltip = menu->strings[MENU_INDEX_TIP]; -# endif gtk_tooltips_set_tip(GTK_TOOLBAR(gui.toolbar)->tooltips, menu->id, (const char *)tooltip, NULL); -# ifdef HAVE_GTK2 CONVERT_TO_UTF8_FREE(tooltip); -# endif } } #endif /* FEAT_TOOLBAR */ @@ -1008,16 +613,11 @@ gui_mch_destroy_menu(vimmenu_T *menu) # ifdef FEAT_TOOLBAR if (menu->parent != NULL && menu_is_toolbar(menu->parent->name)) { -# ifdef HAVE_GTK2 if (menu_is_separator(menu->name)) gtk_toolbar_remove_space(GTK_TOOLBAR(gui.toolbar), get_menu_position(menu)); else if (menu->id != NULL) gtk_widget_destroy(menu->id); -# else - toolbar_remove_item_by_text(GTK_TOOLBAR(gui.toolbar), - (const char *)menu->dname); -# endif } else # endif /* FEAT_TOOLBAR */ @@ -1054,21 +654,11 @@ gui_mch_set_scrollbar_thumb(scrollbar_T adjustment->page_increment = size < 3L ? 1L : size - 2L; adjustment->step_increment = 1.0; -#ifdef HAVE_GTK2 g_signal_handler_block(GTK_OBJECT(adjustment), (gulong)sb->handler_id); -#else - gtk_signal_handler_block(GTK_OBJECT(adjustment), - (guint)sb->handler_id); -#endif gtk_adjustment_changed(adjustment); -#ifdef HAVE_GTK2 g_signal_handler_unblock(GTK_OBJECT(adjustment), (gulong)sb->handler_id); -#else - gtk_signal_handler_unblock(GTK_OBJECT(adjustment), - (guint)sb->handler_id); -#endif } } @@ -1108,7 +698,6 @@ adjustment_value_changed(GtkAdjustment * */ if (sb != NULL) { -#ifdef HAVE_GTK2 dragging = TRUE; if (sb->wp != NULL) @@ -1139,9 +728,6 @@ adjustment_value_changed(GtkAdjustment * } } } -#else - dragging = (GTK_RANGE(sb->id)->scroll_type == GTK_SCROLL_NONE); -#endif } gui_drag_scrollbar(sb, value, dragging); @@ -1193,7 +779,7 @@ gui_mch_destroy_scrollbar(scrollbar_T *s /* * Implementation of the file selector related stuff */ -#if defined(HAVE_GTK2) && GTK_CHECK_VERSION(2,4,0) +#if GTK_CHECK_VERSION(2,4,0) /* This has been disabled, because the GTK library rewrites * ~/.recently-used.xbel every time the main loop is quit. For Vim that means * on just about any event. */ @@ -1271,9 +857,7 @@ gui_mch_browse(int saving UNUSED, #endif char_u dirbuf[MAXPATHL]; -# ifdef HAVE_GTK2 title = CONVERT_TO_UTF8(title); -# endif /* GTK has a bug, it only works with an absolute path. */ if (initdir == NULL || *initdir == NUL) @@ -1343,19 +927,13 @@ gui_mch_browse(int saving UNUSED, gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg), (const gchar *)dirbuf); -# ifndef HAVE_GTK2 - gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), - GTK_WIDGET(gui.filedlg), VW_POS_MOUSE); -# endif gtk_widget_show(gui.filedlg); while (gui.filedlg && GTK_WIDGET_DRAWABLE(gui.filedlg)) gtk_main_iteration_do(TRUE); #endif -# ifdef HAVE_GTK2 CONVERT_TO_UTF8_FREE(title); -# endif if (gui.browse_fname == NULL) return NULL; @@ -1363,8 +941,6 @@ gui_mch_browse(int saving UNUSED, return vim_strsave(shorten_fname1(gui.browse_fname)); } -#if defined(HAVE_GTK2) || defined(PROTO) - /* * Put up a directory selector * Returns the selected name in allocated memory, or NULL for Cancel. @@ -1428,544 +1004,11 @@ gui_mch_browsedir( return gui_mch_browse(0, title, NULL, NULL, initdir, NULL); # endif } -#endif #endif /* FEAT_BROWSE */ -#if defined(FEAT_GUI_DIALOG) && !defined(HAVE_GTK2) - -static char_u *dialog_textfield = NULL; -static GtkWidget *dialog_textentry; - - static void -dlg_destroy(GtkWidget *dlg) -{ - if (dialog_textfield != NULL) - { - const char *text; - - text = gtk_entry_get_text(GTK_ENTRY(dialog_textentry)); - vim_strncpy(dialog_textfield, (char_u *)text, IOSIZE - 1); - } - - /* Destroy the dialog, will break the waiting loop. */ - gtk_widget_destroy(dlg); -} - -# ifdef FEAT_GUI_GNOME - static int -gui_gnome_dialog( int type, - char_u *title, - char_u *message, - char_u *buttons, - int dfltbutton, - char_u *textfield) -{ - GtkWidget *dlg; - char *gdtype; - char_u *buttons_copy, *p, *next; - char **buttons_list; - int butcount, cur; - - /* make a copy, so that we can insert NULs */ - if ((buttons_copy = vim_strsave(buttons)) == NULL) - return -1; - - /* determine exact number of buttons and allocate array to hold them */ - for (butcount = 0, p = buttons; *p; p++) - { - if (*p == '\n') - butcount++; - } - butcount++; - buttons_list = g_new0(char *, butcount + 1); - - /* Add pixmap */ - switch (type) - { - case VIM_ERROR: - gdtype = GNOME_MESSAGE_BOX_ERROR; - break; - case VIM_WARNING: - gdtype = GNOME_MESSAGE_BOX_WARNING; - break; - case VIM_INFO: - gdtype = GNOME_MESSAGE_BOX_INFO; - break; - case VIM_QUESTION: - gdtype = GNOME_MESSAGE_BOX_QUESTION; - break; - default: - gdtype = GNOME_MESSAGE_BOX_GENERIC; - }; - - p = buttons_copy; - for (cur = 0; cur < butcount; ++cur) - { - for (next = p; *next; ++next) - { - if (*next == DLG_HOTKEY_CHAR) - STRMOVE(next, next + 1); - if (*next == DLG_BUTTON_SEP) - { - *next++ = NUL; - break; - } - } - - /* this should probably go into a table, but oh well */ - if (g_strcasecmp((char *)p, "Ok") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_OK); - else if (g_strcasecmp((char *)p, "Cancel") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_CANCEL); - else if (g_strcasecmp((char *)p, "Yes") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_YES); - else if (g_strcasecmp((char *)p, "No") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_NO); - else if (g_strcasecmp((char *)p, "Close") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_CLOSE); - else if (g_strcasecmp((char *)p, "Help") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_HELP); - else if (g_strcasecmp((char *)p, "Apply") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_APPLY); -#if 0 - /* - * these aren't really used that often anyway, but are listed here as - * placeholders in case we need them. - */ - else if (g_strcasecmp((char *)p, "Next") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_NEXT); - else if (g_strcasecmp((char *)p, "Prev") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_PREV); - else if (g_strcasecmp((char *)p, "Up") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_UP); - else if (g_strcasecmp((char *)p, "Down") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_DOWN); - else if (g_strcasecmp((char *)p, "Font") == 0) - buttons_list[cur] = g_strdup(GNOME_STOCK_BUTTON_FONT); -#endif - else - buttons_list[cur] = g_strdup((char *)p); - - if (*next == NUL) - break; - - p = next; - } - vim_free(buttons_copy); - - dlg = gnome_message_box_newv((const char *)message, - (const char *)gdtype, - (const char **)buttons_list); - for (cur = 0; cur < butcount; ++cur) - g_free(buttons_list[cur]); - g_free(buttons_list); - - dialog_textfield = textfield; - if (textfield != NULL) - { - /* Add text entry field */ - dialog_textentry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(dlg)->vbox), dialog_textentry, - TRUE, TRUE, 0); - gtk_entry_set_text(GTK_ENTRY(dialog_textentry), - (const gchar *)textfield); - gtk_entry_select_region(GTK_ENTRY(dialog_textentry), 0, - STRLEN(textfield)); - gtk_entry_set_max_length(GTK_ENTRY(dialog_textentry), IOSIZE - 1); - gtk_entry_set_position(GTK_ENTRY(dialog_textentry), STRLEN(textfield)); - gtk_widget_show(dialog_textentry); - gtk_window_set_focus(GTK_WINDOW(dlg), dialog_textentry); - } - - gtk_signal_connect_object(GTK_OBJECT(dlg), "destroy", - GTK_SIGNAL_FUNC(dlg_destroy), GTK_OBJECT(dlg)); - gnome_dialog_set_default(GNOME_DIALOG(dlg), dfltbutton + 1); - gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), - GTK_WIDGET(dlg), VW_POS_MOUSE); - - return (1 + gnome_dialog_run_and_close(GNOME_DIALOG(dlg))); -} - -# endif /* FEAT_GUI_GNOME */ - -typedef struct _ButtonData -{ - int *status; - int index; - GtkWidget *dialog; -} ButtonData; - -typedef struct _CancelData -{ - int *status; - int ignore_enter; - GtkWidget *dialog; -} CancelData; - - static void -dlg_button_clicked(GtkWidget * widget, ButtonData *data) -{ - *(data->status) = data->index + 1; - dlg_destroy(data->dialog); -} - -/* - * This makes the Escape key equivalent to the cancel button. - */ - static int -dlg_key_press_event(GtkWidget *widget, GdkEventKey *event, CancelData *data) -{ - /* Ignore hitting Enter (or Space) when there is no default button. */ - if (data->ignore_enter && (event->keyval == GDK_Return - || event->keyval == ' ')) - return TRUE; - else /* A different key was pressed, return to normal behavior */ - data->ignore_enter = FALSE; - - if (event->keyval != GDK_Escape && event->keyval != GDK_Return) - return FALSE; - - /* The result value of 0 from a dialog is signaling cancelation. - * 1 means OK. */ - *(data->status) = (event->keyval == GDK_Return); - dlg_destroy(data->dialog); - - return TRUE; -} - -/* - * Callback function for when the dialog was destroyed by a window manager. - */ - static void -dlg_destroy_cb(int *p) -{ - *p = TRUE; /* set dialog_destroyed to break out of the loop */ - if (gtk_main_level() > 0) - gtk_main_quit(); -} - - int -gui_mch_dialog( int type, /* type of dialog */ - char_u *title, /* title of dialog */ - char_u *message, /* message text */ - char_u *buttons, /* names of buttons */ - int def_but, /* default button */ - char_u *textfield) /* text for textfield or NULL */ -{ - char_u *names; - char_u *p; - int i; - int butcount; - int dialog_status = -1; - int dialog_destroyed = FALSE; - int vertical; - - GtkWidget *dialog; - GtkWidget *frame; - GtkWidget *vbox; - GtkWidget *table; - GtkWidget *dialogmessage; - GtkWidget *action_area; - GtkWidget *sub_area; - GtkWidget *separator; - GtkAccelGroup *accel_group; - GtkWidget *pixmap; - GdkPixmap *icon = NULL; - GdkBitmap *mask = NULL; - char **icon_data = NULL; - - GtkWidget **button; - ButtonData *data; - CancelData cancel_data; - - /* if our pointer is currently hidden, then we should show it. */ - gui_mch_mousehide(FALSE); - -# ifdef FEAT_GUI_GNOME - /* If Gnome is available, use it for the dialog. */ - if (gtk_socket_id == 0) - return gui_gnome_dialog(type, title, message, buttons, def_but, - textfield); -# endif - - if (title == NULL) - title = (char_u *)_("Vim dialog..."); - - if ((type < 0) || (type > VIM_LAST_TYPE)) - type = VIM_GENERIC; - - /* Check 'v' flag in 'guioptions': vertical button placement. */ - vertical = (vim_strchr(p_go, GO_VERTICAL) != NULL); - - dialog = gtk_window_new(GTK_WINDOW_DIALOG); - gtk_window_set_title(GTK_WINDOW(dialog), (const gchar *)title); - gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(gui.mainwin)); - gtk_widget_realize(dialog); - gdk_window_set_decorations(dialog->window, GDK_DECOR_BORDER); - gdk_window_set_functions(dialog->window, GDK_FUNC_MOVE); - - cancel_data.status = &dialog_status; - cancel_data.dialog = dialog; - gtk_signal_connect_after(GTK_OBJECT(dialog), "key_press_event", - GTK_SIGNAL_FUNC(dlg_key_press_event), - (gpointer) &cancel_data); - /* Catch the destroy signal, otherwise we don't notice a window manager - * destroying the dialog window. */ - gtk_signal_connect_object(GTK_OBJECT(dialog), "destroy", - GTK_SIGNAL_FUNC(dlg_destroy_cb), - (gpointer)&dialog_destroyed); - - gtk_grab_add(dialog); - - /* this makes it look beter on Motif style window managers */ - frame = gtk_frame_new(NULL); - gtk_container_add(GTK_CONTAINER(dialog), frame); - gtk_widget_show(frame); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_widget_show(vbox); - - table = gtk_table_new(1, 3, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 4); - gtk_table_set_col_spacings(GTK_TABLE(table), 8); - gtk_container_border_width(GTK_CONTAINER(table), 4); - gtk_box_pack_start(GTK_BOX(vbox), table, 4, 4, 0); - gtk_widget_show(table); - - /* Add pixmap */ - switch (type) - { - case VIM_GENERIC: - icon_data = generic_xpm; - break; - case VIM_ERROR: - icon_data = error_xpm; - break; - case VIM_WARNING: - icon_data = alert_xpm; - break; - case VIM_INFO: - icon_data = info_xpm; - break; - case VIM_QUESTION: - icon_data = quest_xpm; - break; - default: - icon_data = generic_xpm; - }; - icon = gdk_pixmap_colormap_create_from_xpm_d(NULL, - gtk_widget_get_colormap(dialog), - &mask, NULL, icon_data); - if (icon) - { - pixmap = gtk_pixmap_new(icon, mask); - /* gtk_misc_set_alignment(GTK_MISC(pixmap), 0.5, 0.5); */ - gtk_table_attach_defaults(GTK_TABLE(table), pixmap, 0, 1, 0, 1); - gtk_widget_show(pixmap); - } - - /* Add label */ - dialogmessage = gtk_label_new((const gchar *)message); - gtk_table_attach_defaults(GTK_TABLE(table), dialogmessage, 1, 2, 0, 1); - gtk_widget_show(dialogmessage); - - dialog_textfield = textfield; - if (textfield != NULL) - { - /* Add text entry field */ - dialog_textentry = gtk_entry_new(); - gtk_widget_set_usize(dialog_textentry, 400, -2); - gtk_box_pack_start(GTK_BOX(vbox), dialog_textentry, TRUE, TRUE, 0); - gtk_entry_set_text(GTK_ENTRY(dialog_textentry), - (const gchar *)textfield); - gtk_entry_select_region(GTK_ENTRY(dialog_textentry), 0, - STRLEN(textfield)); - gtk_entry_set_max_length(GTK_ENTRY(dialog_textentry), IOSIZE - 1); - gtk_entry_set_position(GTK_ENTRY(dialog_textentry), STRLEN(textfield)); - gtk_widget_show(dialog_textentry); - } - - /* Add box for buttons */ - action_area = gtk_hbox_new(FALSE, 0); - gtk_container_border_width(GTK_CONTAINER(action_area), 4); - gtk_box_pack_end(GTK_BOX(vbox), action_area, FALSE, TRUE, 0); - gtk_widget_show(action_area); - - /* Add a [vh]box in the hbox to center the buttons in the dialog. */ - if (vertical) - sub_area = gtk_vbox_new(FALSE, 0); - else - sub_area = gtk_hbox_new(FALSE, 0); - gtk_container_set_border_width(GTK_CONTAINER(sub_area), 0); - gtk_box_pack_start(GTK_BOX(action_area), sub_area, TRUE, FALSE, 0); - gtk_widget_show(sub_area); - - /* - * Create the buttons. - */ - - /* - * Translate the Vim accelerator character into an underscore for GTK+. - * Double underscores to keep them in the label. - */ - /* count the number of underscores */ - i = 1; - for (p = buttons; *p; ++p) - if (*p == '_') - ++i; - - /* make a copy of "buttons" with the translated characters */ - names = alloc(STRLEN(buttons) + i); - if (names == NULL) - return -1; - - p = names; - for (i = 0; buttons[i]; ++i) - { - if (buttons[i] == DLG_HOTKEY_CHAR) - *p++ = '_'; - else - { - if (buttons[i] == '_') - *p++ = '_'; - *p++ = buttons[i]; - } - } - *p = NUL; - - /* Count the number of buttons and allocate button[] and data[]. */ - butcount = 1; - for (p = names; *p; ++p) - if (*p == DLG_BUTTON_SEP) - ++butcount; - button = (GtkWidget **)alloc((unsigned)(butcount * sizeof(GtkWidget *))); - data = (ButtonData *)alloc((unsigned)(butcount * sizeof(ButtonData))); - if (button == NULL || data == NULL) - { - vim_free(names); - vim_free(button); - vim_free(data); - return -1; - } - - /* Attach the new accelerator group to the window. */ - accel_group = gtk_accel_group_new(); - gtk_accel_group_attach(accel_group, GTK_OBJECT(dialog)); - - p = names; - for (butcount = 0; *p; ++butcount) - { - char_u *next; - GtkWidget *label; -# ifdef GTK_USE_ACCEL - guint accel_key; -# endif - - /* Chunk out this single button. */ - for (next = p; *next; ++next) - { - if (*next == DLG_BUTTON_SEP) - { - *next++ = NUL; - break; - } - } - - button[butcount] = gtk_button_new(); - GTK_WIDGET_SET_FLAGS(button[butcount], GTK_CAN_DEFAULT); - - label = gtk_accel_label_new(""); - gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), dialog); - -# ifdef GTK_USE_ACCEL - accel_key = gtk_label_parse_uline(GTK_LABEL(label), (const gchar *)p); - /* Don't add accelator if 'winaltkeys' is "no". */ - if (accel_key != GDK_VoidSymbol) - { - gtk_widget_add_accelerator(button[butcount], - "clicked", - accel_group, - accel_key, 0, - (GtkAccelFlags)0); - } -# else - (void)gtk_label_parse_uline(GTK_LABEL(label), (const gchar *)p); -# endif - - gtk_container_add(GTK_CONTAINER(button[butcount]), label); - gtk_widget_show_all(button[butcount]); - - data[butcount].status = &dialog_status; - data[butcount].index = butcount; - data[butcount].dialog = dialog; - gtk_signal_connect(GTK_OBJECT(button[butcount]), - (const char *)"clicked", - GTK_SIGNAL_FUNC(dlg_button_clicked), - (gpointer) &data[butcount]); - - gtk_box_pack_start(GTK_BOX(sub_area), button[butcount], - TRUE, FALSE, 0); - p = next; - } - - vim_free(names); - - cancel_data.ignore_enter = FALSE; - if (butcount > 0) - { - --def_but; /* 1 is first button */ - if (def_but >= butcount) - def_but = -1; - if (def_but >= 0) - { - gtk_widget_grab_focus(button[def_but]); - gtk_widget_grab_default(button[def_but]); - } - else - /* No default, ignore hitting Enter. */ - cancel_data.ignore_enter = TRUE; - } - - if (textfield != NULL) - gtk_window_set_focus(GTK_WINDOW(dialog), dialog_textentry); - - separator = gtk_hseparator_new(); - gtk_box_pack_end(GTK_BOX(vbox), separator, FALSE, TRUE, 0); - gtk_widget_show(separator); - - dialog_status = -1; - - gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), - GTK_WIDGET(dialog), VW_POS_MOUSE); - - gtk_widget_show(dialog); - - /* loop here until the dialog goes away */ - while (dialog_status == -1 && !dialog_destroyed - && GTK_WIDGET_DRAWABLE(dialog)) - gtk_main_iteration_do(TRUE); - - if (dialog_status < 0) - dialog_status = 0; - if (dialog_status != 1 && textfield != NULL) - *textfield = NUL; /* dialog was cancelled */ - - /* let the garbage collector know that we don't need it any longer */ - gtk_accel_group_unref(accel_group); - - vim_free(button); - vim_free(data); - - return dialog_status; -} - -#endif /* FEAT_GUI_DIALOG && !HAVE_GTK2 */ - - -#if (defined(FEAT_GUI_DIALOG) && defined(HAVE_GTK2)) || defined(PROTO) +#if defined(FEAT_GUI_DIALOG) || defined(PROTO) static GtkWidget * create_message_dialog(int type, char_u *title, char_u *message) @@ -2316,7 +1359,7 @@ gui_mch_dialog(int type, /* type of return response > 0 ? response : 0; } -#endif /* FEAT_GUI_DIALOG && HAVE_GTK2 */ +#endif /* FEAT_GUI_DIALOG */ #if defined(FEAT_MENU) || defined(PROTO) @@ -2324,7 +1367,7 @@ gui_mch_dialog(int type, /* type of void gui_mch_show_popupmenu(vimmenu_T *menu) { -# if defined(FEAT_XIM) && defined(HAVE_GTK2) +# if defined(FEAT_XIM) /* * Append a submenu for selecting an input method. This is * currently the only way to switch input methods at runtime. @@ -2355,7 +1398,7 @@ gui_mch_show_popupmenu(vimmenu_T *menu) g_object_set_data(G_OBJECT(menu->submenu_id), "vim-has-im-menu", GINT_TO_POINTER(TRUE)); } -# endif /* FEAT_XIM && HAVE_GTK2 */ +# endif /* FEAT_XIM */ gtk_menu_popup(GTK_MENU(menu->submenu_id), NULL, NULL, @@ -2377,9 +1420,7 @@ static int popup_mouse_pos; static void popup_menu_position_func(GtkMenu *menu UNUSED, gint *x, gint *y, -# ifdef HAVE_GTK2 gboolean *push_in UNUSED, -# endif gpointer user_data UNUSED) { gdk_window_get_origin(gui.drawarea->window, x, y); @@ -2461,18 +1502,6 @@ find_key_press_event( return TRUE; } - /* - * What the **** is this for? Disabled for GTK+ 2 because due to - * gtk_signal_connect_after() it doesn't have any effect anyway. - * (Fortunately.) - */ -#ifndef HAVE_GTK2 - /* block traversal resulting from those keys */ - if (event->keyval == GDK_Left - || event->keyval == GDK_Right - || event->keyval == GDK_space) - return TRUE; -#endif /* It would be delightful if it where possible to do search history * operations on the K_UP and K_DOWN keys here. @@ -2481,7 +1510,6 @@ find_key_press_event( return FALSE; } -#ifdef HAVE_GTK2 static GtkWidget * create_image_button(const char *stock_id, const char *label) { @@ -2529,14 +1557,10 @@ convert_localized_message(char_u **buffe return (const char *)*buffer; } -#endif /* HAVE_GTK2 */ static void find_replace_dialog_create(char_u *arg, int do_replace) { -#ifndef HAVE_GTK2 - GtkWidget *frame; -#endif GtkWidget *hbox; /* main top down box */ GtkWidget *actionarea; GtkWidget *table; @@ -2547,45 +1571,26 @@ find_replace_dialog_create(char_u *arg, char_u *entry_text; int wword = FALSE; int mcase = !p_ic; -#ifdef HAVE_GTK2 char_u *conv_buffer = NULL; # define CONV(message) convert_localized_message(&conv_buffer, (message)) -#else -# define CONV(message) (message) -#endif frdp = (do_replace) ? (&repl_widgets) : (&find_widgets); /* Get the search string to use. */ entry_text = get_find_dialog_text(arg, &wword, &mcase); -#ifdef HAVE_GTK2 if (entry_text != NULL && output_conv.vc_type != CONV_NONE) { char_u *old_text = entry_text; entry_text = string_convert(&output_conv, entry_text, NULL); vim_free(old_text); } -#endif /* * If the dialog already exists, just raise it. */ if (frdp->dialog) { -#ifndef HAVE_GTK2 - /* always make the dialog appear where you want it even if the mainwin - * has moved -- dbv */ - gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), - GTK_WIDGET(frdp->dialog), VW_POS_MOUSE); - gui_gtk_synch_fonts(); - - if (!GTK_WIDGET_VISIBLE(frdp->dialog)) - { - gtk_widget_grab_focus(frdp->what); - gtk_widget_show(frdp->dialog); - } -#endif if (entry_text != NULL) { gtk_entry_set_text(GTK_ENTRY(frdp->what), (char *)entry_text); @@ -2594,62 +1599,30 @@ find_replace_dialog_create(char_u *arg, gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->mcase), (gboolean)mcase); } -#ifdef HAVE_GTK2 gtk_window_present(GTK_WINDOW(frdp->dialog)); -#else - gdk_window_raise(frdp->dialog->window); -#endif vim_free(entry_text); return; } -#ifdef HAVE_GTK2 frdp->dialog = gtk_dialog_new(); gtk_dialog_set_has_separator(GTK_DIALOG(frdp->dialog), FALSE); gtk_window_set_transient_for(GTK_WINDOW(frdp->dialog), GTK_WINDOW(gui.mainwin)); gtk_window_set_destroy_with_parent(GTK_WINDOW(frdp->dialog), TRUE); -#else - frdp->dialog = gtk_window_new(GTK_WINDOW_DIALOG); -#endif if (do_replace) { -#ifndef HAVE_GTK2 - gtk_window_set_wmclass(GTK_WINDOW(frdp->dialog), "searchrepl", "gvim"); -#endif gtk_window_set_title(GTK_WINDOW(frdp->dialog), CONV(_("VIM - Search and Replace..."))); } else { -#ifndef HAVE_GTK2 - gtk_window_set_wmclass(GTK_WINDOW(frdp->dialog), "search", "gvim"); -#endif gtk_window_set_title(GTK_WINDOW(frdp->dialog), CONV(_("VIM - Search..."))); } -#ifndef HAVE_GTK2 /* Utter crack. Shudder. */ - gtk_widget_realize(frdp->dialog); - gdk_window_set_decorations(frdp->dialog->window, - GDK_DECOR_TITLE | GDK_DECOR_BORDER | GDK_DECOR_RESIZEH); - gdk_window_set_functions(frdp->dialog->window, - GDK_FUNC_RESIZE | GDK_FUNC_MOVE); -#endif - -#ifndef HAVE_GTK2 - /* this makes it look better on Motif style window managers */ - frame = gtk_frame_new(NULL); - gtk_container_add(GTK_CONTAINER(frdp->dialog), frame); -#endif - hbox = gtk_hbox_new(FALSE, 0); -#ifdef HAVE_GTK2 gtk_container_set_border_width(GTK_CONTAINER(hbox), 10); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(frdp->dialog)->vbox), hbox); -#else - gtk_container_add(GTK_CONTAINER(frame), hbox); -#endif if (do_replace) table = gtk_table_new(1024, 4, FALSE); @@ -2747,30 +1720,16 @@ find_replace_dialog_create(char_u *arg, gtk_radio_button_group(GTK_RADIO_BUTTON(frdp->up)), CONV(_("Down"))); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->down), TRUE); -#ifdef HAVE_GTK2 gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); -#endif gtk_box_pack_start(GTK_BOX(vbox), frdp->down, TRUE, TRUE, 0); /* vbox to hold the action buttons */ actionarea = gtk_vbutton_box_new(); gtk_container_border_width(GTK_CONTAINER(actionarea), 2); -#ifndef HAVE_GTK2 - if (do_replace) - { - gtk_button_box_set_layout(GTK_BUTTON_BOX(actionarea), - GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(actionarea), 0); - } -#endif gtk_box_pack_end(GTK_BOX(hbox), actionarea, FALSE, FALSE, 0); /* 'Find Next' button */ -#ifdef HAVE_GTK2 frdp->find = create_image_button(GTK_STOCK_FIND, _("Find Next")); -#else - frdp->find = gtk_button_new_with_label(_("Find Next")); -#endif gtk_widget_set_sensitive(frdp->find, sensitive); gtk_signal_connect(GTK_OBJECT(frdp->find), "clicked", @@ -2785,11 +1744,7 @@ find_replace_dialog_create(char_u *arg, if (do_replace) { /* 'Replace' button */ -#ifdef HAVE_GTK2 frdp->replace = create_image_button(GTK_STOCK_CONVERT, _("Replace")); -#else - frdp->replace = gtk_button_new_with_label(_("Replace")); -#endif gtk_widget_set_sensitive(frdp->replace, sensitive); GTK_WIDGET_SET_FLAGS(frdp->replace, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(actionarea), frdp->replace, FALSE, FALSE, 0); @@ -2798,11 +1753,7 @@ find_replace_dialog_create(char_u *arg, GINT_TO_POINTER(FRD_REPLACE)); /* 'Replace All' button */ -#ifdef HAVE_GTK2 frdp->all = create_image_button(GTK_STOCK_CONVERT, _("Replace All")); -#else - frdp->all = gtk_button_new_with_label(_("Replace All")); -#endif gtk_widget_set_sensitive(frdp->all, sensitive); GTK_WIDGET_SET_FLAGS(frdp->all, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(actionarea), frdp->all, FALSE, FALSE, 0); @@ -2812,11 +1763,7 @@ find_replace_dialog_create(char_u *arg, } /* 'Cancel' button */ -#ifdef HAVE_GTK2 tmp = gtk_button_new_from_stock(GTK_STOCK_CLOSE); -#else - tmp = gtk_button_new_with_label(_("Cancel")); -#endif GTK_WIDGET_SET_FLAGS(tmp, GTK_CAN_DEFAULT); gtk_box_pack_end(GTK_BOX(actionarea), tmp, FALSE, FALSE, 0); gtk_signal_connect_object(GTK_OBJECT(tmp), @@ -2827,36 +1774,15 @@ find_replace_dialog_create(char_u *arg, GTK_OBJECT(frdp->dialog)); tmp = gtk_vseparator_new(); -#ifdef HAVE_GTK2 gtk_box_pack_end(GTK_BOX(hbox), tmp, FALSE, FALSE, 10); -#else - gtk_box_pack_end(GTK_BOX(hbox), tmp, FALSE, TRUE, 0); -#endif - -#ifndef HAVE_GTK2 - gtk_widget_grab_focus(frdp->what); - /* show the frame and realize the frdp->dialog this gives us a window size - * request that we'll use to position the window within the boundary of - * the mainwin --dbv */ - gtk_widget_show_all(frame); - gui_gtk_position_in_parent(GTK_WIDGET(gui.mainwin), - GTK_WIDGET(frdp->dialog), VW_POS_MOUSE); - gui_gtk_synch_fonts(); - gtk_widget_show_all(frdp->dialog); -#endif - -#ifdef HAVE_GTK2 /* Suppress automatic show of the unused action area */ gtk_widget_hide(GTK_DIALOG(frdp->dialog)->action_area); gtk_widget_show_all(hbox); gtk_widget_show(frdp->dialog); -#endif vim_free(entry_text); -#ifdef HAVE_GTK2 vim_free(conv_buffer); -#endif #undef CONV } @@ -2874,65 +1800,6 @@ gui_mch_replace_dialog(exarg_T *eap) find_replace_dialog_create(eap->arg, TRUE); } - -#if !defined(HAVE_GTK2) || defined(PROTO) -/* - * Synchronize all gui elements, which are dependant upon the - * main text font used. Those are in esp. the find/replace dialogs. - * If you don't understand why this should be needed, please try to - * search for "pięść" in iso8859-2. - * - * ( I converted the comment above to UTF-8 to put - * a stopper to the encoding mess. Forgive me :) - * - * Obsolete with GTK2. - */ - void -gui_gtk_synch_fonts(void) -{ - SharedFindReplace *frdp; - int do_replace; - - /* OK this loop is a bit tricky... */ - for (do_replace = 0; do_replace <= 1; ++do_replace) - { - frdp = (do_replace) ? (&repl_widgets) : (&find_widgets); - if (frdp->dialog) - { - GtkStyle *style; - - /* synch the font with whats used by the text itself */ - style = gtk_style_copy(gtk_widget_get_style(frdp->what)); - gdk_font_unref(style->font); -# ifdef FEAT_XFONTSET - if (gui.fontset != NOFONTSET) - style->font = gui.fontset; - else -# endif - style->font = gui.norm_font; - gdk_font_ref(style->font); - gtk_widget_set_style(frdp->what, style); - gtk_style_unref(style); - if (do_replace) - { - style = gtk_style_copy(gtk_widget_get_style(frdp->with)); - gdk_font_unref(style->font); -# ifdef FEAT_XFONTSET - if (gui.fontset != NOFONTSET) - style->font = gui.fontset; - else -# endif - style->font = gui.norm_font; - gdk_font_ref(style->font); - gtk_widget_set_style(frdp->with, style); - gtk_style_unref(style); - } - } - } -} -#endif /* !HAVE_GTK2 */ - - /* * Callback for actions of the find and replace dialogs */ @@ -2968,15 +1835,11 @@ find_replace_cb(GtkWidget *widget UNUSED if (GTK_TOGGLE_BUTTON(sfr->mcase)->active) flags |= FRD_MATCH_CASE; -#ifdef HAVE_GTK2 repl_text = CONVERT_FROM_UTF8(repl_text); find_text = CONVERT_FROM_UTF8(find_text); -#endif rc = gui_do_findrepl(flags, find_text, repl_text, direction_down); -#ifdef HAVE_GTK2 CONVERT_FROM_UTF8_FREE(repl_text); CONVERT_FROM_UTF8_FREE(find_text); -#endif if (rc && gtk_main_level() > 0) gtk_main_quit(); /* make sure cmd will be handled immediately */ @@ -3035,83 +1898,3 @@ ex_helpfind(eap) * backwards compatibility anyway. */ do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp"); } - -#if !defined(HAVE_GTK2) || defined(PROTO) /* Crack crack crack. Brrrr. */ - -/* gui_gtk_position_in_parent - * - * this function causes a child window to be placed within the boundary of - * the parent (mainwin) window. - * - * you can specify where the window will be positioned by the third argument - * (defined in gui.h): - * VW_POS_CENTER at center of parent window - * VW_POS_MOUSE center of child at mouse position - * VW_POS_TOP_CENTER top of child at top of parent centered - * horizontally about the mouse. - * - * NOTE: for this function to act as desired the child window must have a - * window size requested. this can be accomplished by packing/placing - * child widgets onto a gtk_frame widget rather than the gtk_window - * widget... - * - * brent -- dbv - */ - static void -gui_gtk_position_in_parent( - GtkWidget *parent, - GtkWidget *child, - gui_win_pos_T where) -{ - GtkRequisition c_size; - gint xPm, yPm; - gint xP, yP, wP, hP, pos_x, pos_y; - - /* make sure the child widget is set up then get its size. */ - gtk_widget_size_request(child, &c_size); - - /* get origin and size of parent window */ - gdk_window_get_origin((GdkWindow *)(parent->window), &xP, &yP); - gdk_window_get_size((GdkWindow *)(parent->window), &wP, &hP); - - if (c_size.width > wP || c_size.height > hP) - { - /* doh! maybe the user should consider giving gVim a little more - * screen real estate */ - gtk_widget_set_uposition(child , xP + 2 , yP + 2); - return; - } - - if (where == VW_POS_MOUSE) - { - /* position window at mouse pointer */ - gtk_widget_get_pointer(parent, &xPm, &yPm); - pos_x = xP + xPm - (c_size.width) / 2; - pos_y = yP + yPm - (c_size.height) / 2; - } - else - { - /* set child x origin so it is in center of Vim window */ - pos_x = xP + (wP - c_size.width) / 2; - - if (where == VW_POS_TOP_CENTER) - pos_y = yP + 2; - else - /* where == VW_POS_CENTER */ - pos_y = yP + (hP - c_size.height) / 2; - } - - /* now, make sure the window will be inside the Vim window... */ - if (pos_x < xP) - pos_x = xP + 2; - if (pos_y < yP) - pos_y = yP + 2; - if ((pos_x + c_size.width) > (wP + xP)) - pos_x = xP + wP - c_size.width - 2; - /* Assume 'guiheadroom' indicates the title bar height... */ - if ((pos_y + c_size.height + p_ghr / 2) > (hP + yP)) - - gtk_widget_set_uposition(child, pos_x, pos_y); -} - -#endif /* !HAVE_GTK2 */ diff --git a/src/gui_gtk_f.c b/src/gui_gtk_f.c --- a/src/gui_gtk_f.c +++ b/src/gui_gtk_f.c @@ -54,10 +54,6 @@ static void gtk_form_size_request(GtkWid GtkRequisition *requisition); static void gtk_form_size_allocate(GtkWidget *widget, GtkAllocation *allocation); -#ifndef HAVE_GTK2 /* this isn't needed in gtk2 */ -static void gtk_form_draw(GtkWidget *widget, - GdkRectangle *area); -#endif static gint gtk_form_expose(GtkWidget *widget, GdkEventExpose *event); @@ -172,27 +168,6 @@ gtk_form_move(GtkForm *form, } } -#if !defined(HAVE_GTK2) || defined(PROTO) - void -gtk_form_set_size(GtkForm *form, guint width, guint height) -{ - g_return_if_fail(GTK_IS_FORM(form)); - - /* prevent useless calls */ - if (form->width == width && form->height == height) - return; - form->width = width; - form->height = height; - - /* signal the change */ -#ifdef HAVE_GTK2 - gtk_widget_queue_resize(gtk_widget_get_parent(GTK_WIDGET(form))); -#else - gtk_container_queue_resize(GTK_CONTAINER(GTK_WIDGET(form)->parent)); -#endif -} -#endif - void gtk_form_freeze(GtkForm *form) { @@ -211,11 +186,7 @@ gtk_form_thaw(GtkForm *form) if (!(--form->freeze_count)) { gtk_form_position_children(form); -#ifdef HAVE_GTK2 gtk_widget_queue_draw(GTK_WIDGET(form)); -#else - gtk_widget_draw(GTK_WIDGET(form), NULL); -#endif } } } @@ -259,9 +230,6 @@ gtk_form_class_init(GtkFormClass *klass) widget_class->map = gtk_form_map; widget_class->size_request = gtk_form_size_request; widget_class->size_allocate = gtk_form_size_allocate; -#ifndef HAVE_GTK2 /* not needed for GTK2 */ - widget_class->draw = gtk_form_draw; -#endif widget_class->expose_event = gtk_form_expose; container_class->remove = gtk_form_remove; @@ -421,37 +389,6 @@ gtk_form_unrealize(GtkWidget *widget) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); } -#ifndef HAVE_GTK2 - static void -gtk_form_draw(GtkWidget *widget, GdkRectangle *area) -{ - GtkForm *form; - GList *children; - GtkFormChild *child; - GdkRectangle child_area; - - g_return_if_fail(GTK_IS_FORM(widget)); - - if (GTK_WIDGET_DRAWABLE(widget)) - { - form = GTK_FORM(widget); - - children = form->children; - - while (children) - { - child = children->data; - - if (GTK_WIDGET_DRAWABLE(child->widget) - && gtk_widget_intersect(child->widget, area, &child_area)) - gtk_widget_draw(child->widget, &child_area); - - children = children->next; - } - } -} -#endif /* !HAVE_GTK2 */ - static void gtk_form_size_request(GtkWidget *widget, GtkRequisition *requisition) { @@ -536,7 +473,6 @@ gtk_form_expose(GtkWidget *widget, GdkEv for (tmp_list = form->children; tmp_list; tmp_list = tmp_list->next) { -#ifdef HAVE_GTK2 GtkFormChild *formchild = tmp_list->data; GtkWidget *child = formchild->widget; /* @@ -557,12 +493,6 @@ gtk_form_expose(GtkWidget *widget, GdkEv gtk_widget_send_expose(child, (GdkEvent *)&child_event); } } -#else /* !HAVE_GTK2 */ - GtkFormChild *child = tmp_list->data; - - if (event->window == child->window) - return gtk_widget_event(child->widget, (GdkEvent *) event); -#endif /* !HAVE_GTK2 */ } return FALSE; @@ -854,28 +784,12 @@ gtk_form_main_filter(GdkXEvent *gdk_xeve return GDK_FILTER_CONTINUE; } -/* Routines to set the window gravity, and check whether it is - * functional. Extra capabilities need to be added to GDK, so - * we don't have to use Xlib here. - */ static void gtk_form_set_static_gravity(GdkWindow *window, gboolean use_static) { -#ifdef HAVE_GTK2 /* We don't check if static gravity is actually supported, because it * results in an annoying assertion error message. */ gdk_window_set_static_gravities(window, use_static); -#else - XSetWindowAttributes xattributes; - - xattributes.win_gravity = (use_static) ? StaticGravity : NorthWestGravity; - xattributes.bit_gravity = (use_static) ? StaticGravity : NorthWestGravity; - - XChangeWindowAttributes(GDK_WINDOW_XDISPLAY(window), - GDK_WINDOW_XWINDOW(window), - CWBitGravity | CWWinGravity, - &xattributes); -#endif } void @@ -903,11 +817,7 @@ gtk_form_send_configure(GtkForm *form) event.width = widget->allocation.width; event.height = widget->allocation.height; -#ifdef HAVE_GTK2 gtk_main_do_event((GdkEvent*)&event); -#else - gtk_widget_event(widget, (GdkEvent*)&event); -#endif } static void diff --git a/src/gui_gtk_f.h b/src/gui_gtk_f.h --- a/src/gui_gtk_f.h +++ b/src/gui_gtk_f.h @@ -62,7 +62,6 @@ void gtk_form_move(GtkForm *form, GtkWid void gtk_form_move_resize(GtkForm * form, GtkWidget * widget, gint x, gint y, gint w, gint h); -void gtk_form_set_size(GtkForm * form, guint width, guint height); /* These disable and enable moving and repainting respectively. If you * want to update the layout's offsets but do not want it to repaint diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -45,10 +45,8 @@ # endif # include # include "version.h" -# ifdef HAVE_GTK2 /* missing prototype in bonobo-dock-item.h */ extern void bonobo_dock_item_set_behavior(BonoboDockItem *dock_item, BonoboDockItemBehavior beh); -# endif #endif #if !defined(FEAT_GUI_GTK) && defined(PROTO) @@ -124,10 +122,8 @@ static const GtkTargetEntry selection_ta { {VIMENC_ATOM_NAME, 0, TARGET_VIMENC}, {VIM_ATOM_NAME, 0, TARGET_VIM}, -#ifdef FEAT_MBYTE {"text/html", 0, TARGET_HTML}, {"UTF8_STRING", 0, TARGET_UTF8_STRING}, -#endif {"COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT}, {"TEXT", 0, TARGET_TEXT}, {"STRING", 0, TARGET_STRING} @@ -142,10 +138,8 @@ static const GtkTargetEntry selection_ta static const GtkTargetEntry dnd_targets[] = { {"text/uri-list", 0, TARGET_TEXT_URI_LIST}, -# ifdef FEAT_MBYTE {"text/html", 0, TARGET_HTML}, {"UTF8_STRING", 0, TARGET_UTF8_STRING}, -# endif {"STRING", 0, TARGET_STRING}, {"text/plain", 0, TARGET_TEXT_PLAIN} }; @@ -153,22 +147,12 @@ static const GtkTargetEntry dnd_targets[ #endif -#ifdef HAVE_GTK2 /* * "Monospace" is a standard font alias that should be present * on all proper Pango/fontconfig installations. */ # define DEFAULT_FONT "Monospace 10" -#else /* !HAVE_GTK2 */ -/* - * This is the single only fixed width font in X11, which seems to be present - * on all servers and available in all the variants we need. - */ -# define DEFAULT_FONT "-adobe-courier-medium-r-normal-*-14-*-*-*-m-*-*-*" - -#endif /* !HAVE_GTK2 */ - #if !(defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)) /* * Atoms used to communicate save-yourself from the X11 session manager. There @@ -181,18 +165,10 @@ static GdkAtom save_yourself_atom = GDK_ /* * Atoms used to control/reference X11 selections. */ -#ifdef FEAT_MBYTE static GdkAtom html_atom = GDK_NONE; static GdkAtom utf8_string_atom = GDK_NONE; -#endif -#ifndef HAVE_GTK2 -static GdkAtom compound_text_atom = GDK_NONE; -static GdkAtom text_atom = GDK_NONE; -#endif static GdkAtom vim_atom = GDK_NONE; /* Vim's own special selection format */ -#ifdef FEAT_MBYTE static GdkAtom vimenc_atom = GDK_NONE; /* Vim's extended selection format */ -#endif /* * Keycodes recognized by vim. @@ -348,23 +324,13 @@ static const cmdline_option_T cmdline_op {"-fg", ARG_FOREGROUND|ARG_HAS_VALUE}, {"-foreground", ARG_FOREGROUND|ARG_HAS_VALUE}, {"-iconic", ARG_ICONIC}, -#ifdef HAVE_GTK2 {"--role", ARG_ROLE|ARG_HAS_VALUE}, -#endif #ifdef FEAT_NETBEANS_INTG {"-nb", ARG_NETBEANS}, /* non-standard value format */ {"-xrm", ARG_XRM|ARG_HAS_VALUE}, /* not implemented */ {"-mf", ARG_MENUFONT|ARG_HAS_VALUE}, /* not implemented */ {"-menufont", ARG_MENUFONT|ARG_HAS_VALUE}, /* not implemented */ #endif -#if 0 /* not implemented; these arguments don't make sense for GTK+ */ - {"-boldfont", ARG_HAS_VALUE}, - {"-italicfont", ARG_HAS_VALUE}, - {"-bw", ARG_HAS_VALUE}, - {"-borderwidth", ARG_HAS_VALUE}, - {"-sw", ARG_HAS_VALUE}, - {"-scrollbarwidth", ARG_HAS_VALUE}, -#endif /* Arguments handled by GTK (and GNOME) internally. */ {"--g-fatal-warnings", ARG_FOR_GTK}, {"--gdk-debug", ARG_FOR_GTK|ARG_HAS_VALUE}, @@ -376,17 +342,9 @@ static const cmdline_option_T cmdline_op {"--display", ARG_FOR_GTK|ARG_HAS_VALUE|ARG_COMPAT_LONG}, {"--name", ARG_FOR_GTK|ARG_HAS_VALUE|ARG_COMPAT_LONG}, {"--class", ARG_FOR_GTK|ARG_HAS_VALUE|ARG_COMPAT_LONG}, -#ifdef HAVE_GTK2 {"--screen", ARG_FOR_GTK|ARG_HAS_VALUE}, {"--gxid-host", ARG_FOR_GTK|ARG_HAS_VALUE}, {"--gxid-port", ARG_FOR_GTK|ARG_HAS_VALUE}, -#else /* these don't seem to exist anymore */ - {"--no-xshm", ARG_FOR_GTK}, - {"--xim-preedit", ARG_FOR_GTK|ARG_HAS_VALUE}, - {"--xim-status", ARG_FOR_GTK|ARG_HAS_VALUE}, - {"--gxid_host", ARG_FOR_GTK|ARG_HAS_VALUE}, - {"--gxid_port", ARG_FOR_GTK|ARG_HAS_VALUE}, -#endif #ifdef FEAT_GUI_GNOME {"--load-modules", ARG_FOR_GTK|ARG_HAS_VALUE}, {"--sm-client-id", ARG_FOR_GTK|ARG_HAS_VALUE}, @@ -412,9 +370,7 @@ static const cmdline_option_T cmdline_op static int gui_argc = 0; static char **gui_argv = NULL; -#ifdef HAVE_GTK2 static const char *role_argument = NULL; -#endif #if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION) static const char *restart_command = NULL; static char *abs_restart_command = NULL; @@ -561,11 +517,9 @@ gui_mch_prepare(int *argc, char **argv) case ARG_ICONIC: found_iconic_arg = TRUE; break; -#ifdef HAVE_GTK2 case ARG_ROLE: role_argument = value; /* used later in gui_mch_open() */ break; -#endif #ifdef FEAT_NETBEANS_INTG case ARG_NETBEANS: gui.dofork = FALSE; /* don't fork() when starting GUI */ @@ -859,7 +813,6 @@ focus_out_event(GtkWidget *widget UNUSED } -#ifdef HAVE_GTK2 /* * Translate a GDK key value to UTF-8 independently of the current locale. * The output is written to string, which must have room for at least 6 bytes @@ -935,7 +888,6 @@ keyval_to_string(unsigned int keyval, un return len; } -#endif /* HAVE_GTK2 */ static int modifiers_gdk2vim(guint state) @@ -981,14 +933,9 @@ key_press_event(GtkWidget *widget UNUSED GdkEventKey *event, gpointer data UNUSED) { -#ifdef HAVE_GTK2 - /* 256 bytes is way over the top, but for safety let's reduce it only - * for GTK+ 2 where we know for sure how large the string might get. + /* For GTK+ 2 we know for sure how large the string might get. * (That is, up to 6 bytes + NUL + CSI escapes + safety measure.) */ char_u string[32], string2[32]; -#else - char_u string[256], string2[256]; -#endif guint key_sym; int len; int i; @@ -1000,25 +947,6 @@ key_press_event(GtkWidget *widget UNUSED clipboard_event_time = event->time; key_sym = event->keyval; state = event->state; -#ifndef HAVE_GTK2 /* deprecated */ - len = event->length; - g_assert(len <= sizeof(string)); -#endif - -#ifndef HAVE_GTK2 - /* - * It appears as if we always want to consume a key-press (there currently - * aren't any 'return FALSE's), so we always do this: when running in a - * GtkPlug and not a window, we must prevent emission of the key_press - * EVENT from continuing (which is 'beyond' the level of stopping mere - * signals by returning FALSE), otherwise things like tab/cursor-keys are - * processed by the GtkPlug default handler, which moves input focus away - * from us! - * Note: This should no longer be necessary with GTK+ 2. - */ - if (gtk_socket_id != 0) - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); -#endif #ifdef FEAT_XIM if (xim_queue_key_press_event(event, TRUE)) @@ -1044,7 +972,6 @@ key_press_event(GtkWidget *widget UNUSED else #endif { -#ifdef HAVE_GTK2 len = keyval_to_string(key_sym, state, string2); /* Careful: convert_input() doesn't handle the NUL character. @@ -1053,19 +980,6 @@ key_press_event(GtkWidget *widget UNUSED len = convert_input(string2, len, sizeof(string2)); s = string2; -#else -# ifdef FEAT_MBYTE - if (input_conv.vc_type != CONV_NONE) - { - mch_memmove(string2, event->string, len); - len = convert_input(string2, len, sizeof(string2)); - s = string2; - } - else -# endif - s = (char_u *)event->string; -#endif - d = string; for (i = 0; i < len; ++i) { @@ -1087,21 +1001,6 @@ key_press_event(GtkWidget *widget UNUSED state |= GDK_SHIFT_MASK; } -#ifndef HAVE_GTK2 /* for GTK+ 2, we handle this in keyval_to_string() */ - if ((key_sym == GDK_2 || key_sym == GDK_at) && (state & GDK_CONTROL_MASK)) - { - string[0] = NUL; /* CTRL-2 and CTRL-@ is NUL */ - len = 1; - } - else if (len == 0 && (key_sym == GDK_space || key_sym == GDK_Tab)) - { - /* When there are modifiers, these keys get zero length; we need the - * original key here to be able to add a modifier below. */ - string[0] = (key_sym & 0xff); - len = 1; - } -#endif - #ifdef FEAT_MENU /* If there is a menu and 'wak' is "yes", or 'wak' is "menu" and the key * is a menu shortcut, we ignore everything with the ALT modifier. */ @@ -1111,13 +1010,9 @@ key_press_event(GtkWidget *widget UNUSED || (*p_wak == 'm' && len == 1 && gui_is_menu_shortcut(string[0])))) -# ifdef HAVE_GTK2 /* For GTK2 we return false to signify that we haven't handled the * keypress, so that gtk will handle the mnemonic or accelerator. */ return FALSE; -# else - return TRUE; -# endif #endif /* Check for Alt/Meta key (Mod1Mask), but not for a BS, DEL or character @@ -1134,14 +1029,11 @@ key_press_event(GtkWidget *widget UNUSED && !(key_sym == GDK_BackSpace || key_sym == GDK_Delete) && (string[0] & 0x80) == 0 && !(key_sym == GDK_Tab && (state & GDK_SHIFT_MASK)) -#ifdef FEAT_MBYTE && !enc_dbcs -#endif ) { string[0] |= 0x80; state &= ~GDK_MOD1_MASK; /* don't use it again */ -#ifdef FEAT_MBYTE if (enc_utf8) /* convert to utf-8 */ { string[1] = string[0] & 0xbf; @@ -1155,7 +1047,6 @@ key_press_event(GtkWidget *widget UNUSED else len = 2; } -#endif } /* Check for special keys. Also do this when len == 1 (key has an ASCII @@ -1178,26 +1069,17 @@ key_press_event(GtkWidget *widget UNUSED if (len == 0) /* Unrecognized key */ return TRUE; -#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) && !defined(HAVE_GTK2) - /* Cancel or type backspace. For GTK2, im_commit_cb() does the same. */ - preedit_start_col = MAXCOL; - xim_changed_while_preediting = TRUE; -#endif - /* Special keys (and a few others) may have modifiers. Also when using a * double-byte encoding (can't set the 8th bit). */ if (len == -3 || key_sym == GDK_space || key_sym == GDK_Tab || key_sym == GDK_Return || key_sym == GDK_Linefeed || key_sym == GDK_Escape || key_sym == GDK_KP_Tab || key_sym == GDK_ISO_Enter || key_sym == GDK_3270_Enter -#ifdef FEAT_MBYTE || (enc_dbcs && len == 1 && ((state & GDK_MOD1_MASK) -# ifdef GDK_SUPER_MASK +#ifdef GDK_SUPER_MASK || (state & GDK_SUPER_MASK) -# endif - )) #endif - ) + ))) { modifiers = modifiers_gdk2vim(state); @@ -1254,7 +1136,7 @@ key_press_event(GtkWidget *widget UNUSED return TRUE; } -#if defined(FEAT_XIM) && defined(HAVE_GTK2) +#if defined(FEAT_XIM) static gboolean key_release_event(GtkWidget *widget UNUSED, GdkEventKey *event, @@ -1305,9 +1187,7 @@ selection_received_cb(GtkWidget *widget VimClipboard *cbd; char_u *text; char_u *tmpbuf = NULL; -#ifdef HAVE_GTK2 guchar *tmpbuf_utf8 = NULL; -#endif int len; int motion_type; @@ -1337,7 +1217,6 @@ selection_received_cb(GtkWidget *widget --len; } -#ifdef FEAT_MBYTE else if (data->type == vimenc_atom) { char_u *enc; @@ -1362,9 +1241,7 @@ selection_received_cb(GtkWidget *widget convert_setup(&conv, NULL, NULL); } } -#endif - -#ifdef HAVE_GTK2 + /* gtk_selection_data_get_text() handles all the nasty details * and targets and encodings etc. This rocks so hard. */ else @@ -1401,51 +1278,6 @@ selection_received_cb(GtkWidget *widget text = tmpbuf; } } -#else /* !HAVE_GTK2 */ -# ifdef FEAT_MBYTE - else if (data->type == utf8_string_atom) - { - vimconv_T conv; - - conv.vc_type = CONV_NONE; - convert_setup(&conv, (char_u *)"utf-8", p_enc); - - if (conv.vc_type != CONV_NONE) - { - tmpbuf = string_convert(&conv, text, &len); - convert_setup(&conv, NULL, NULL); - } - if (tmpbuf != NULL) - text = tmpbuf; - } -# endif - else if (data->type == compound_text_atom || data->type == text_atom) - { - char **list = NULL; - int count; - int i; - unsigned tmplen = 0; - - count = gdk_text_property_to_text_list(data->type, data->format, - data->data, data->length, - &list); - for (i = 0; i < count; ++i) - tmplen += strlen(list[i]); - - tmpbuf = alloc(tmplen + 1); - if (tmpbuf != NULL) - { - tmpbuf[0] = NUL; - for (i = 0; i < count; ++i) - STRCAT(tmpbuf, list[i]); - text = tmpbuf; - len = tmplen; - } - - if (list != NULL) - gdk_free_text_list(list); - } -#endif /* !HAVE_GTK2 */ /* Chop off any traiing NUL bytes. OpenOffice sends these. */ while (len > 0 && text[len - 1] == NUL) @@ -1454,9 +1286,7 @@ selection_received_cb(GtkWidget *widget clip_yank_selection(motion_type, text, (long)len, cbd); received_selection = RS_OK; vim_free(tmpbuf); -#ifdef HAVE_GTK2 g_free(tmpbuf_utf8); -#endif if (gtk_main_level() > 0) gtk_main_quit(); @@ -1490,11 +1320,9 @@ selection_get_cb(GtkWidget *widget U return; /* Shouldn't ever happen */ if (info != (guint)TARGET_STRING -#ifdef FEAT_MBYTE && (!clip_html || info != (guint)TARGET_HTML) && info != (guint)TARGET_UTF8_STRING && info != (guint)TARGET_VIMENC -#endif && info != (guint)TARGET_VIM && info != (guint)TARGET_COMPOUND_TEXT && info != (guint)TARGET_TEXT) @@ -1526,7 +1354,6 @@ selection_get_cb(GtkWidget *widget U type = vim_atom; } -#ifdef FEAT_MBYTE else if (info == (guint)TARGET_HTML) { vimconv_T conv; @@ -1578,9 +1405,7 @@ selection_get_cb(GtkWidget *widget U string = tmpbuf; type = vimenc_atom; } -#endif - -#ifdef HAVE_GTK2 + /* gtk_selection_data_set_text() handles everything for us. This is * so easy and simple and cool, it'd be insane not to use it. */ else @@ -1602,50 +1427,6 @@ selection_get_cb(GtkWidget *widget U vim_free(string); return; } -#else /* !HAVE_GTK2 */ -# ifdef FEAT_MBYTE - else if (info == (guint)TARGET_UTF8_STRING) - { - vimconv_T conv; - - conv.vc_type = CONV_NONE; - convert_setup(&conv, p_enc, (char_u *)"utf-8"); - - if (conv.vc_type != CONV_NONE) - { - tmpbuf = string_convert(&conv, string, &length); - convert_setup(&conv, NULL, NULL); - vim_free(string); - string = tmpbuf; - } - type = utf8_string_atom; - } -# endif - else if (info == (guint)TARGET_COMPOUND_TEXT - || info == (guint)TARGET_TEXT) - { - int format; - - /* Copy the string to ensure NUL-termination */ - tmpbuf = vim_strnsave(string, length); - vim_free(string); - if (tmpbuf != NULL) - { - gdk_string_to_compound_text((const char *)tmpbuf, - &type, &format, &string, &length); - vim_free(tmpbuf); - selection_data->type = type; - selection_data->format = format; - gtk_selection_data_set(selection_data, type, format, string, length); - gdk_free_compound_text(string); - } - return; - } - else - { - type = GDK_TARGET_STRING; - } -#endif /* !HAVE_GTK2 */ if (string != NULL) { @@ -1664,12 +1445,6 @@ selection_get_cb(GtkWidget *widget U int gui_mch_init_check(void) { -#ifndef HAVE_GTK2 - /* This is needed to make the locale handling consistent between the GUI - * and the rest of VIM. */ - gtk_set_locale(); -#endif - #ifdef FEAT_GUI_GNOME if (gtk_socket_id == 0) using_gnome = 1; @@ -1912,14 +1687,6 @@ button_press_event(GtkWidget *widget, case 3: button = MOUSE_RIGHT; break; -#ifndef HAVE_GTK2 - case 4: - button = MOUSE_4; - break; - case 5: - button = MOUSE_5; - break; -#endif default: return FALSE; /* Unknown button */ } @@ -1939,10 +1706,8 @@ button_press_event(GtkWidget *widget, return TRUE; } -#ifdef HAVE_GTK2 /* - * GTK+ 2 doesn't handle mouse buttons 4, 5, 6 and 7 the same way as GTK+ 1. - * Instead, it abstracts scrolling via the new GdkEventScroll. + * GTK+ 2 abstracts scrolling via the GdkEventScroll. */ static gboolean scroll_event(GtkWidget *widget, @@ -1983,7 +1748,6 @@ scroll_event(GtkWidget *widget, return TRUE; } -#endif /* HAVE_GTK2 */ static gint @@ -2143,41 +1907,22 @@ drag_handle_text(GdkDragContext *con char_u dropkey[6] = {CSI, KS_MODIFIER, 0, CSI, KS_EXTRA, (char_u)KE_DROP}; char_u *text; int len; -# ifdef FEAT_MBYTE char_u *tmpbuf = NULL; -# endif text = data->data; len = data->length; -# ifdef FEAT_MBYTE if (data->type == utf8_string_atom) { -# ifdef HAVE_GTK2 if (input_conv.vc_type != CONV_NONE) tmpbuf = string_convert(&input_conv, text, &len); -# else - vimconv_T conv; - - conv.vc_type = CONV_NONE; - convert_setup(&conv, (char_u *)"utf-8", p_enc); - - if (conv.vc_type != CONV_NONE) - { - tmpbuf = string_convert(&conv, text, &len); - convert_setup(&conv, NULL, NULL); - } -# endif if (tmpbuf != NULL) text = tmpbuf; } -# endif /* FEAT_MBYTE */ dnd_yank_drag_data(text, (long)len); gtk_drag_finish(context, TRUE, FALSE, time_); /* accept */ -# ifdef FEAT_MBYTE vim_free(tmpbuf); -# endif dropkey[2] = modifiers_gdk2vim(state); @@ -2407,10 +2152,8 @@ sm_client_save_yourself(GnomeClient argv[i++] = restart_command; argv[i++] = "-f"; argv[i++] = "-g"; -# ifdef HAVE_GTK2 argv[i++] = "--role"; argv[i++] = gtk_window_get_role(GTK_WINDOW(gui.mainwin)); -# endif argv[i++] = "-S"; argv[i++] = session_file; argv[i] = NULL; @@ -2551,13 +2294,11 @@ setup_save_yourself(void) } } -# ifdef HAVE_GTK2 /* * Installing a global event filter seems to be the only way to catch * client messages of type WM_PROTOCOLS without overriding GDK's own * client message event filter. Well, that's still better than trying * to guess what the GDK filter had done if it had been invoked instead - * (This is what we did for GTK+ 1.2, see below). * * GTK2_FIXME: This doesn't seem to work. For some reason we never * receive WM_SAVE_YOURSELF even though everything is set up correctly. @@ -2596,51 +2337,6 @@ global_event_filter(GdkXEvent *xev, return GDK_FILTER_CONTINUE; } - -# else /* !HAVE_GTK2 */ - -/* - * GDK handler for X ClientMessage events. - */ - static GdkFilterReturn -gdk_wm_protocols_filter(GdkXEvent *xev, GdkEvent *event, gpointer data) -{ - /* From example in gdkevents.c/gdk_wm_protocols_filter */ - XEvent *xevent = (XEvent *)xev; - - if (xevent != NULL) - { - if (xevent->xclient.data.l[0] == GET_X_ATOM(save_yourself_atom)) - { - out_flush(); - ml_sync_all(FALSE, FALSE); /* preserve all swap files */ - - /* Set the window's WM_COMMAND property, to let the window manager - * know we are done saving ourselves. We don't want to be - * restarted, thus set argv to NULL. */ - XSetCommand(GDK_WINDOW_XDISPLAY(gui.mainwin->window), - GDK_WINDOW_XWINDOW(gui.mainwin->window), - NULL, 0); - } - /* - * Functionality from gdkevents.c/gdk_wm_protocols_filter; - * Registering this filter apparently overrides the default GDK one, - * so we need to perform its functionality. There seems no way to - * register for WM_PROTOCOLS, and only process the WM_SAVE_YOURSELF - * bit; it's all or nothing. Update: No, there is a way -- but it - * only works with GTK+ 2 apparently. See above. - */ - else if (xevent->xclient.data.l[0] == GET_X_ATOM(gdk_wm_delete_window)) - { - event->any.type = GDK_DELETE; - return GDK_FILTER_TRANSLATE; - } - } - - return GDK_FILTER_REMOVE; -} -# endif /* !HAVE_GTK2 */ - #endif /* !(FEAT_GUI_GNOME && FEAT_SESSION) */ @@ -2655,10 +2351,8 @@ mainwin_realize(GtkWidget *widget UNUSED #ifdef magick # undef magick #endif -#ifdef HAVE_GTK2 /* A bit hackish, but avoids casting later and allows optimization */ # define static static const -#endif #define magick vim32x32 #include "../runtime/vim32x32.xpm" #undef magick @@ -2668,9 +2362,7 @@ mainwin_realize(GtkWidget *widget UNUSED #define magick vim48x48 #include "../runtime/vim48x48.xpm" #undef magick -#ifdef HAVE_GTK2 # undef static -#endif /* When started with "--echo-wid" argument, write window ID on stdout. */ if (echo_wid_arg) @@ -2684,7 +2376,6 @@ mainwin_realize(GtkWidget *widget UNUSED /* * Add an icon to the main window. For fun and convenience of the user. */ -#ifdef HAVE_GTK2 GList *icons = NULL; icons = g_list_prepend(icons, gdk_pixbuf_new_from_xpm_data(vim16x16)); @@ -2695,53 +2386,11 @@ mainwin_realize(GtkWidget *widget UNUSED g_list_foreach(icons, (GFunc)&g_object_unref, NULL); g_list_free(icons); - -#else /* !HAVE_GTK2 */ - - GdkPixmap *icon; - GdkBitmap *icon_mask = NULL; - char **magick = vim32x32; - Display *xdisplay; - Window root_window; - XIconSize *size; - int number_sizes; - /* - * Adjust the icon to the preferences of the actual window manager. - * This is once again a workaround for a deficiency in GTK+ 1.2. - */ - xdisplay = GDK_WINDOW_XDISPLAY(gui.mainwin->window); - root_window = XRootWindow(xdisplay, DefaultScreen(xdisplay)); - if (XGetIconSizes(xdisplay, root_window, &size, &number_sizes)) - { - if (number_sizes > 0) - { - if (size->max_height >= 48 && size->max_height >= 48) - magick = vim48x48; - else if (size->max_height >= 32 && size->max_height >= 32) - magick = vim32x32; - else if (size->max_height >= 16 && size->max_height >= 16) - magick = vim16x16; - } - XFree(size); - } - icon = gdk_pixmap_create_from_xpm_d(gui.mainwin->window, - &icon_mask, NULL, magick); - if (icon != NULL) - /* Note: for some reason gdk_window_set_icon() doesn't acquire - * a reference on the pixmap, thus we _have_ to leak it. */ - gdk_window_set_icon(gui.mainwin->window, NULL, icon, icon_mask); - -#endif /* !HAVE_GTK2 */ } #if !(defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)) /* Register a handler for WM_SAVE_YOURSELF with GDK's low-level X I/F */ -# ifdef HAVE_GTK2 gdk_window_add_filter(NULL, &global_event_filter, NULL); -# else - gdk_add_client_message_filter(wm_protocols_atom, - &gdk_wm_protocols_filter, NULL); -# endif #endif /* Setup to indicate to the window manager that we want to catch the * WM_SAVE_YOURSELF event. For GNOME, this connects to the session @@ -2884,7 +2533,6 @@ drawarea_unrealize_cb(GtkWidget *widget #ifdef FEAT_XIM im_shutdown(); #endif -#ifdef HAVE_GTK2 if (gui.ascii_glyphs != NULL) { pango_glyph_string_free(gui.ascii_glyphs); @@ -2903,13 +2551,6 @@ drawarea_unrealize_cb(GtkWidget *widget gdk_cursor_unref(gui.blank_pointer); gui.blank_pointer = NULL; -#else - gdk_gc_unref(gui.text_gc); - gui.text_gc = NULL; - - gdk_cursor_destroy(gui.blank_pointer); - gui.blank_pointer = NULL; -#endif } static void @@ -2942,7 +2583,6 @@ get_item_dimensions(GtkWidget *widget, G #ifdef FEAT_GUI_GNOME if (using_gnome && widget != NULL) { -# ifdef HAVE_GTK2 GtkWidget *parent; BonoboDockItem *dockitem; @@ -2958,16 +2598,6 @@ get_item_dimensions(GtkWidget *widget, G return 0; item_orientation = bonobo_dock_item_get_orientation(dockitem); } -# else - GnomeDockItem *dockitem; - - widget = widget->parent; - dockitem = GNOME_DOCK_ITEM(widget); - - if (dockitem == NULL || dockitem->is_floating) - return 0; - item_orientation = gnome_dock_item_get_orientation(dockitem); -# endif } #endif if (widget != NULL @@ -3065,10 +2695,8 @@ update_window_manager_hints(int force_wi # ifdef FEAT_MENU height += tabline_height() * gui.char_height; # endif -# ifdef HAVE_GTK2 width += get_menu_tool_width(); height += get_menu_tool_height(); -# endif /* GtkSockets use GtkPlug's [gui,mainwin] min-size hints to determine * their actual widget size. When we set our size ourselves (e.g., @@ -3106,16 +2734,11 @@ update_window_manager_hints(int force_wi geometry.min_height = min_height; geometry_mask = GDK_HINT_BASE_SIZE|GDK_HINT_RESIZE_INC |GDK_HINT_MIN_SIZE; -# ifdef HAVE_GTK2 /* Using gui.formwin as geometry widget doesn't work as expected * with GTK+ 2 -- dunno why. Presumably all the resizing hacks * in Vim confuse GTK+. */ gtk_window_set_geometry_hints(GTK_WINDOW(gui.mainwin), gui.mainwin, &geometry, geometry_mask); -# else - gtk_window_set_geometry_hints(GTK_WINDOW(gui.mainwin), gui.formwin, - &geometry, geometry_mask); -# endif old_width = width; old_height = height; old_min_width = min_width; @@ -3127,7 +2750,6 @@ update_window_manager_hints(int force_wi #ifdef FEAT_TOOLBAR -# ifdef HAVE_GTK2 /* * This extra effort wouldn't be necessary if we only used stock icons in the * toolbar, as we do for all builtin icons. But user-defined toolbar icons @@ -3161,24 +2783,18 @@ icon_size_changed_foreach(GtkWidget *wid user_data); } } -# endif /* HAVE_GTK2 */ static void set_toolbar_style(GtkToolbar *toolbar) { GtkToolbarStyle style; -# ifdef HAVE_GTK2 GtkIconSize size; GtkIconSize oldsize; -# endif - -# ifdef HAVE_GTK2 + if ((toolbar_flags & (TOOLBAR_TEXT | TOOLBAR_ICONS | TOOLBAR_HORIZ)) == (TOOLBAR_TEXT | TOOLBAR_ICONS | TOOLBAR_HORIZ)) style = GTK_TOOLBAR_BOTH_HORIZ; - else -# endif - if ((toolbar_flags & (TOOLBAR_TEXT | TOOLBAR_ICONS)) + else if ((toolbar_flags & (TOOLBAR_TEXT | TOOLBAR_ICONS)) == (TOOLBAR_TEXT | TOOLBAR_ICONS)) style = GTK_TOOLBAR_BOTH; else if (toolbar_flags & TOOLBAR_TEXT) @@ -3189,7 +2805,6 @@ set_toolbar_style(GtkToolbar *toolbar) gtk_toolbar_set_style(toolbar, style); gtk_toolbar_set_tooltips(toolbar, (toolbar_flags & TOOLBAR_TOOLTIPS) != 0); -# ifdef HAVE_GTK2 switch (tbis_flags) { case TBIS_TINY: size = GTK_ICON_SIZE_MENU; break; @@ -3213,7 +2828,6 @@ set_toolbar_style(GtkToolbar *toolbar) GINT_TO_POINTER((int)size)); } gtk_toolbar_set_icon_size(toolbar, size); -# endif } #endif /* FEAT_TOOLBAR */ @@ -3313,11 +2927,6 @@ on_tabline_menu(GtkWidget *widget, GdkEv if (send_tabline_event(x < 50 ? -1 : 0) && gtk_main_level() > 0) gtk_main_quit(); } -#ifndef HAVE_GTK2 - else - gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), - clicked_page - 1); -#endif } } @@ -3342,10 +2951,6 @@ on_select_tab( } } -#ifndef HAVE_GTK2 -static int showing_tabline = 0; -#endif - /* * Show or hide the tabline. */ @@ -3355,19 +2960,11 @@ gui_mch_show_tabline(int showit) if (gui.tabline == NULL) return; -#ifdef HAVE_GTK2 - /* gtk_notebook_get_show_tabs does not exist in gtk+-1.2.10 */ if (!showit != !gtk_notebook_get_show_tabs(GTK_NOTEBOOK(gui.tabline))) -#else - if (!showit != !showing_tabline) -#endif { /* Note: this may cause a resize event */ gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), showit); update_window_manager_hints(0, 0); -#ifndef HAVE_GTK2 - showing_tabline = showit; -#endif if (showit) GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(gui.tabline), GTK_CAN_FOCUS); } @@ -3382,13 +2979,7 @@ gui_mch_show_tabline(int showit) gui_mch_showing_tabline(void) { return gui.tabline != NULL -#ifdef HAVE_GTK2 - /* gtk_notebook_get_show_tabs does not exist in gtk+-1.2.10 */ - && gtk_notebook_get_show_tabs(GTK_NOTEBOOK(gui.tabline)) -#else - && showing_tabline -#endif - ; + && gtk_notebook_get_show_tabs(GTK_NOTEBOOK(gui.tabline)); } /* @@ -3496,14 +3087,12 @@ gui_gtk_set_selection_targets(void) for (i = 0; i < (int)N_SELECTION_TARGETS; ++i) { -#ifdef FEAT_MBYTE /* OpenOffice tries to use TARGET_HTML and fails when it doesn't * return something, instead of trying another target. Therefore only * offer TARGET_HTML when it works. */ if (!clip_html && selection_targets[i].info == TARGET_HTML) n_targets--; else -#endif targets[j++] = selection_targets[i]; } @@ -3529,11 +3118,9 @@ gui_gtk_set_dnd_targets(void) for (i = 0; i < (int)N_DND_TARGETS; ++i) { -#ifdef FEAT_MBYTE if (!clip_html && selection_targets[i].info == TARGET_HTML) n_targets--; else -#endif targets[j++] = dnd_targets[i]; } @@ -3558,21 +3145,16 @@ gui_mch_init(void) * exits on failure, but that's a non-issue because we already called * gtk_init_check() in gui_mch_init_check(). */ if (using_gnome) -# ifdef HAVE_GTK2 gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT, LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL); -# else - gnome_init(VIMPACKAGE, VIM_VERSION_SHORT, gui_argc, gui_argv); -# endif #endif vim_free(gui_argv); gui_argv = NULL; -#ifdef HAVE_GTK2 -# if GLIB_CHECK_VERSION(2,1,3) +#if GLIB_CHECK_VERSION(2,1,3) /* Set the human-readable application name */ g_set_application_name("Vim"); -# endif +#endif /* * Force UTF-8 output no matter what the value of 'encoding' is. * did_set_string_option() in option.c prohibits changing 'termencoding' @@ -3580,14 +3162,13 @@ gui_mch_init(void) */ set_option_value((char_u *)"termencoding", 0L, (char_u *)"utf-8", 0); -# ifdef FEAT_TOOLBAR +#ifdef FEAT_TOOLBAR gui_gtk_register_stock_icons(); -# endif +#endif /* FIXME: Need to install the classic icons and a gtkrc.classic file. * The hard part is deciding install locations and the Makefile magic. */ -# if 0 +#if 0 gtk_rc_parse("gtkrc"); -# endif #endif /* Initialize values */ @@ -3602,14 +3183,8 @@ gui_mch_init(void) gui.spcolor = g_new0(GdkColor, 1); /* Initialise atoms */ -#ifdef FEAT_MBYTE html_atom = gdk_atom_intern("text/html", FALSE); utf8_string_atom = gdk_atom_intern("UTF8_STRING", FALSE); -#endif -#ifndef HAVE_GTK2 - compound_text_atom = gdk_atom_intern("COMPOUND_TEXT", FALSE); - text_atom = gdk_atom_intern("TEXT", FALSE); -#endif /* Set default foreground and background colors. */ gui.norm_pixel = gui.def_norm_pixel; @@ -3657,15 +3232,10 @@ gui_mch_init(void) gtk_widget_set_name(gui.mainwin, "vim-main-window"); -#ifdef HAVE_GTK2 /* Create the PangoContext used for drawing all text. */ gui.text_context = gtk_widget_create_pango_context(gui.mainwin); pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR); -#endif - -#ifndef HAVE_GTK2 - gtk_window_set_policy(GTK_WINDOW(gui.mainwin), TRUE, TRUE, TRUE); -#endif + gtk_container_border_width(GTK_CONTAINER(gui.mainwin), 0); gtk_widget_add_events(gui.mainwin, GDK_VISIBILITY_NOTIFY_MASK); @@ -3678,12 +3248,8 @@ gui_mch_init(void) g_signal_connect(G_OBJECT(gui.mainwin), "screen_changed", G_CALLBACK(&mainwin_screen_changed_cb), NULL); #endif -#ifdef HAVE_GTK2 gui.accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(gui.mainwin), gui.accel_group); -#else - gui.accel_group = gtk_accel_group_get_default(); -#endif /* A vertical box holds the menubar, toolbar and main text window. */ vbox = gtk_vbox_new(FALSE, 0); @@ -3691,7 +3257,7 @@ gui_mch_init(void) #ifdef FEAT_GUI_GNOME if (using_gnome) { -# if defined(HAVE_GTK2) && defined(FEAT_MENU) +# if defined(FEAT_MENU) /* automagically restore menubar/toolbar placement */ gnome_app_enable_layout_config(GNOME_APP(gui.mainwin), TRUE); # endif @@ -3711,7 +3277,6 @@ gui_mch_init(void) gui.menubar = gtk_menu_bar_new(); gtk_widget_set_name(gui.menubar, "vim-menubar"); -# ifdef HAVE_GTK2 /* Avoid that GTK takes away from us. */ { GtkSettings *gtk_settings; @@ -3719,13 +3284,11 @@ gui_mch_init(void) gtk_settings = gtk_settings_get_for_screen(gdk_screen_get_default()); g_object_set(gtk_settings, "gtk-menu-bar-accel", NULL, NULL); } -# endif # ifdef FEAT_GUI_GNOME if (using_gnome) { -# ifdef HAVE_GTK2 BonoboDockItem *dockitem; gnome_app_set_menus(GNOME_APP(gui.mainwin), GTK_MENU_BAR(gui.menubar)); @@ -3736,21 +3299,6 @@ gui_mch_init(void) bonobo_dock_item_get_behavior(dockitem) | BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING); gui.menubar_h = GTK_WIDGET(dockitem); -# else - gui.menubar_h = gnome_dock_item_new("VimMainMenu", - GNOME_DOCK_ITEM_BEH_EXCLUSIVE | - GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL); - gtk_container_add(GTK_CONTAINER(gui.menubar_h), gui.menubar); - - gnome_dock_add_item(GNOME_DOCK(GNOME_APP(gui.mainwin)->dock), - GNOME_DOCK_ITEM(gui.menubar_h), - GNOME_DOCK_TOP, /* placement */ - 1, /* band_num */ - 0, /* band_position */ - 0, /* offset */ - TRUE); - gtk_widget_show(gui.menubar); -# endif } else # endif /* FEAT_GUI_GNOME */ @@ -3766,7 +3314,6 @@ gui_mch_init(void) /* * Create the toolbar and handle */ -# ifdef HAVE_GTK2 /* some aesthetics on the toolbar */ gtk_rc_parse_string( "style \"vim-toolbar-style\" {\n" @@ -3775,17 +3322,11 @@ gui_mch_init(void) "widget \"*.vim-toolbar\" style \"vim-toolbar-style\"\n"); gui.toolbar = gtk_toolbar_new(); gtk_widget_set_name(gui.toolbar, "vim-toolbar"); -# else - gui.toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_ICONS); - gtk_toolbar_set_button_relief(GTK_TOOLBAR(gui.toolbar), GTK_RELIEF_NONE); -# endif set_toolbar_style(GTK_TOOLBAR(gui.toolbar)); # ifdef FEAT_GUI_GNOME if (using_gnome) { -# ifdef HAVE_GTK2 BonoboDockItem *dockitem; gnome_app_set_toolbar(GNOME_APP(gui.mainwin), GTK_TOOLBAR(gui.toolbar)); @@ -3798,31 +3339,10 @@ gui_mch_init(void) bonobo_dock_item_get_behavior(dockitem) | BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING); gtk_container_set_border_width(GTK_CONTAINER(gui.toolbar), 0); -# else - GtkWidget *dockitem; - - dockitem = gnome_dock_item_new("VimToolBar", - GNOME_DOCK_ITEM_BEH_EXCLUSIVE); - gtk_container_add(GTK_CONTAINER(dockitem), GTK_WIDGET(gui.toolbar)); - gui.toolbar_h = dockitem; - - gnome_dock_add_item(GNOME_DOCK(GNOME_APP(gui.mainwin)->dock), - GNOME_DOCK_ITEM(dockitem), - GNOME_DOCK_TOP, /* placement */ - 1, /* band_num */ - 1, /* band_position */ - 0, /* offset */ - TRUE); - gtk_container_border_width(GTK_CONTAINER(gui.toolbar), 2); - gtk_widget_show(gui.toolbar); -# endif } else # endif /* FEAT_GUI_GNOME */ { -# ifndef HAVE_GTK2 - gtk_container_border_width(GTK_CONTAINER(gui.toolbar), 1); -# endif if (vim_strchr(p_go, GO_TOOLBAR) != NULL && (toolbar_flags & (TOOLBAR_TEXT | TOOLBAR_ICONS))) gtk_widget_show(gui.toolbar); @@ -3885,9 +3405,7 @@ gui_mch_init(void) GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | -#ifdef HAVE_GTK2 GDK_SCROLL_MASK | -#endif GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_POINTER_MOTION_MASK | @@ -3904,7 +3422,7 @@ gui_mch_init(void) : GTK_OBJECT(gui.drawarea), "key_press_event", GTK_SIGNAL_FUNC(key_press_event), NULL); -#if defined(FEAT_XIM) && defined(HAVE_GTK2) +#if defined(FEAT_XIM) /* Also forward key release events for the benefit of GTK+ 2 input * modules. Try CTRL-SHIFT-xdigits to enter a Unicode code point. */ g_signal_connect((gtk_socket_id == 0) ? G_OBJECT(gui.mainwin) @@ -3935,9 +3453,7 @@ gui_mch_init(void) * Set clipboard specific atoms */ vim_atom = gdk_atom_intern(VIM_ATOM_NAME, FALSE); -#ifdef FEAT_MBYTE vimenc_atom = gdk_atom_intern(VIMENC_ATOM_NAME, FALSE); -#endif clip_star.gtk_sel_atom = GDK_SELECTION_PRIMARY; clip_plus.gtk_sel_atom = gdk_atom_intern("CLIPBOARD", FALSE); @@ -3994,10 +3510,8 @@ gui_mch_init(void) GTK_SIGNAL_FUNC(button_press_event), NULL); gtk_signal_connect(GTK_OBJECT(gui.drawarea), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL); -#ifdef HAVE_GTK2 g_signal_connect(G_OBJECT(gui.drawarea), "scroll_event", G_CALLBACK(&scroll_event), NULL); -#endif /* * Add selection handler functions. @@ -4142,7 +3656,6 @@ gui_mch_open(void) guint pixel_width; guint pixel_height; -#ifdef HAVE_GTK2 /* * Allow setting a window role on the command line, or invent one * if none was specified. This is mainly useful for GNOME session @@ -4165,14 +3678,9 @@ gui_mch_open(void) gtk_window_set_role(GTK_WINDOW(gui.mainwin), role); g_free(role); } -#endif if (gui_win_x != -1 && gui_win_y != -1) -#ifdef HAVE_GTK2 gtk_window_move(GTK_WINDOW(gui.mainwin), gui_win_x, gui_win_y); -#else - gtk_widget_set_uposition(gui.mainwin, gui_win_x, gui_win_y); -#endif /* Determine user specified geometry, if present. */ if (gui.geom != NULL) @@ -4196,10 +3704,8 @@ gui_mch_open(void) pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width); pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height); -#ifdef HAVE_GTK2 pixel_width += get_menu_tool_width(); pixel_height += get_menu_tool_height(); -#endif if (mask & (XValue | YValue)) { @@ -4211,11 +3717,7 @@ gui_mch_open(void) x += ww - pixel_width; if (mask & YNegative) y += hh - pixel_height; -#ifdef HAVE_GTK2 gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); -#else - gtk_widget_set_uposition(gui.mainwin, x, y); -#endif } vim_free(gui.geom); gui.geom = NULL; @@ -4235,14 +3737,10 @@ gui_mch_open(void) pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width); pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height); -#ifdef HAVE_GTK2 /* For GTK2 changing the size of the form widget doesn't cause window * resizing. */ if (gtk_socket_id == 0) gtk_window_resize(GTK_WINDOW(gui.mainwin), pixel_width, pixel_height); -#else - gtk_form_set_size(GTK_FORM(gui.formwin), pixel_width, pixel_height); -#endif update_window_manager_hints(0, 0); if (foreground_argument != NULL) @@ -4305,18 +3803,13 @@ gui_mch_open(void) GTK_SIGNAL_FUNC(drag_data_received_cb), NULL); #endif -#ifdef HAVE_GTK2 /* With GTK+ 2, we need to iconify the window before calling show() - * to avoid mapping the window for a short time. This is just as one - * would expect it to work, but it's different in GTK+ 1. The funny - * thing is that iconifying after show() _does_ work with GTK+ 1. - * (BTW doing this in the "realize" handler makes no difference.) */ + * to avoid mapping the window for a short time. */ if (found_iconic_arg && gtk_socket_id == 0) gui_mch_iconify(); -#endif { -#if defined(FEAT_GUI_GNOME) && defined(HAVE_GTK2) && defined(FEAT_MENU) +#if defined(FEAT_GUI_GNOME) && defined(FEAT_MENU) unsigned long menu_handler = 0; # ifdef FEAT_TOOLBAR unsigned long tool_handler = 0; @@ -4343,7 +3836,7 @@ gui_mch_open(void) #endif gtk_widget_show(gui.mainwin); -#if defined(FEAT_GUI_GNOME) && defined(HAVE_GTK2) && defined(FEAT_MENU) +#if defined(FEAT_GUI_GNOME) && defined(FEAT_MENU) if (menu_handler != 0) g_signal_handler_disconnect(gui.menubar_h, menu_handler); # ifdef FEAT_TOOLBAR @@ -4353,13 +3846,6 @@ gui_mch_open(void) #endif } -#ifndef HAVE_GTK2 - /* With GTK+ 1, we need to iconify the window after calling show(). - * See the comment above for details. */ - if (found_iconic_arg && gtk_socket_id == 0) - gui_mch_iconify(); -#endif - return OK; } @@ -4380,13 +3866,7 @@ gui_mch_exit(int rc UNUSED) int gui_mch_get_winpos(int *x, int *y) { -#ifdef HAVE_GTK2 gtk_window_get_position(GTK_WINDOW(gui.mainwin), x, y); -#else - /* For some people this must be gdk_window_get_origin() for a correct - * result. Where is the documentation! */ - gdk_window_get_root_origin(gui.mainwin->window, x, y); -#endif return OK; } @@ -4397,14 +3877,9 @@ gui_mch_get_winpos(int *x, int *y) void gui_mch_set_winpos(int x, int y) { -#ifdef HAVE_GTK2 gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); -#else - gdk_window_move(gui.mainwin->window, x, y); -#endif } -#ifdef HAVE_GTK2 #if 0 static int resize_idle_installed = FALSE; /* @@ -4442,9 +3917,7 @@ force_shell_resize_idle(gpointer data) return FALSE; /* don't call me again */ } #endif -#endif /* HAVE_GTK2 */ - -#if defined(HAVE_GTK2) || defined(PROTO) + /* * Return TRUE if the main window is maximized. */ @@ -4465,7 +3938,6 @@ gui_mch_unmaximize() if (gui.mainwin != NULL) gtk_window_unmaximize(GTK_WINDOW(gui.mainwin)); } -#endif /* * Set the windows size. @@ -4476,27 +3948,9 @@ gui_mch_set_shellsize(int width, int hei int base_width UNUSED, int base_height UNUSED, int direction UNUSED) { -#ifndef HAVE_GTK2 - /* Hack: When the form already is at the desired size, the window might - * have been resized with the mouse. Force a resize by setting a - * different size first. */ - if (GTK_FORM(gui.formwin)->width == width - && GTK_FORM(gui.formwin)->height == height) - { - gtk_form_set_size(GTK_FORM(gui.formwin), width + 1, height + 1); - gui_mch_update(); - } - gtk_form_set_size(GTK_FORM(gui.formwin), width, height); -#endif - /* give GTK+ a chance to put all widget's into place */ gui_mch_update(); -#ifndef HAVE_GTK2 - /* this will cause the proper resizement to happen too */ - update_window_manager_hints(0, 0); - -#else /* this will cause the proper resizement to happen too */ if (gtk_socket_id == 0) update_window_manager_hints(0, 0); @@ -4528,7 +3982,6 @@ gui_mch_set_shellsize(int width, int hei * on top, while the GUI expects to be the boss. */ gui_mch_update(); -#endif } @@ -4571,17 +4024,13 @@ gui_mch_get_screen_dimensions(int *scree void gui_mch_settitle(char_u *title, char_u *icon UNUSED) { -# ifdef HAVE_GTK2 if (title != NULL && output_conv.vc_type != CONV_NONE) title = string_convert(&output_conv, title, NULL); -# endif gtk_window_set_title(GTK_WINDOW(gui.mainwin), (const char *)title); -# ifdef HAVE_GTK2 if (output_conv.vc_type != CONV_NONE) vim_free(title); -# endif } #endif /* FEAT_TITLE */ @@ -4642,48 +4091,6 @@ gui_mch_show_toolbar(int showit) } #endif /* FEAT_TOOLBAR */ -#ifndef HAVE_GTK2 -/* - * Get a font structure for highlighting. - * "cbdata" is a pointer to the global gui structure. - */ - static void -font_sel_ok(GtkWidget *wgt, gpointer cbdata) -{ - gui_T *vw = (gui_T *)cbdata; - GtkFontSelectionDialog *fs = (GtkFontSelectionDialog *)vw->fontdlg; - - if (vw->fontname) - g_free(vw->fontname); - - vw->fontname = (char_u *)gtk_font_selection_dialog_get_font_name(fs); - gtk_widget_hide(vw->fontdlg); - if (gtk_main_level() > 0) - gtk_main_quit(); -} - - static void -font_sel_cancel(GtkWidget *wgt, gpointer cbdata) -{ - gui_T *vw = (gui_T *)cbdata; - - gtk_widget_hide(vw->fontdlg); - if (gtk_main_level() > 0) - gtk_main_quit(); -} - - static void -font_sel_destroy(GtkWidget *wgt, gpointer cbdata) -{ - gui_T *vw = (gui_T *)cbdata; - - vw->fontdlg = NULL; - if (gtk_main_level() > 0) - gtk_main_quit(); -} -#endif /* !HAVE_GTK2 */ - -#ifdef HAVE_GTK2 /* * Check if a given font is a CJK font. This is done in a very crude manner. It * just see if U+04E00 for zh and ja and U+AC00 for ko are covered in a given @@ -4726,7 +4133,6 @@ is_cjk_font(PangoFontDescription *font_d return is_cjk; } -#endif /* HAVE_GTK2 */ /* * Adjust gui.char_height (after 'linespace' was changed). @@ -4734,7 +4140,6 @@ is_cjk_font(PangoFontDescription *font_d int gui_mch_adjust_charheight(void) { -#ifdef HAVE_GTK2 PangoFontMetrics *metrics; int ascent; int descent; @@ -4751,14 +4156,6 @@ gui_mch_adjust_charheight(void) /* LINTED: avoid warning: bitwise operation on signed value */ gui.char_ascent = PANGO_PIXELS(ascent + p_linespace * PANGO_SCALE / 2); -#else /* !HAVE_GTK2 */ - - gui.char_height = gui.current_font->ascent + gui.current_font->descent - + p_linespace; - gui.char_ascent = gui.current_font->ascent + p_linespace / 2; - -#endif /* !HAVE_GTK2 */ - /* A not-positive value of char_height may crash Vim. Only happens * if 'linespace' is negative (which does make sense sometimes). */ gui.char_ascent = MAX(gui.char_ascent, 0); @@ -4767,106 +4164,6 @@ gui_mch_adjust_charheight(void) return OK; } -#if defined(FEAT_XFONTSET) || defined(PROTO) -/* - * Try to load the requested fontset. - */ - GuiFontset -gui_mch_get_fontset(char_u *name, int report_error, int fixed_width) -{ - GdkFont *font; - - if (!gui.in_use || name == NULL) - return NOFONT; - - font = gdk_fontset_load((gchar *)name); - - if (font == NULL) - { - if (report_error) - EMSG2(_(e_fontset), name); - return NOFONT; - } - /* TODO: check if the font is fixed width. */ - - /* reference this font as being in use */ - gdk_font_ref(font); - - return (GuiFontset)font; -} -#endif /* FEAT_XFONTSET */ - -#ifndef HAVE_GTK2 -/* - * Put up a font dialog and return the selected font name in allocated memory. - * "oldval" is the previous value. - * Return NULL when cancelled. - */ - char_u * -gui_mch_font_dialog(char_u *oldval) -{ - char_u *fontname = NULL; - - if (!gui.fontdlg) - { - GtkFontSelectionDialog *fsd = NULL; - - gui.fontdlg = gtk_font_selection_dialog_new(_("Font Selection")); - fsd = GTK_FONT_SELECTION_DIALOG(gui.fontdlg); - gtk_window_set_modal(GTK_WINDOW(gui.fontdlg), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(gui.fontdlg), - GTK_WINDOW(gui.mainwin)); - gtk_signal_connect(GTK_OBJECT(gui.fontdlg), "destroy", - GTK_SIGNAL_FUNC(font_sel_destroy), &gui); - gtk_signal_connect(GTK_OBJECT(fsd->ok_button), "clicked", - GTK_SIGNAL_FUNC(font_sel_ok), &gui); - gtk_signal_connect(GTK_OBJECT(fsd->cancel_button), "clicked", - GTK_SIGNAL_FUNC(font_sel_cancel), &gui); - } - - if (oldval != NULL && *oldval != NUL) - gtk_font_selection_dialog_set_font_name( - GTK_FONT_SELECTION_DIALOG(gui.fontdlg), (char *)oldval); - else - gtk_font_selection_dialog_set_font_name( - GTK_FONT_SELECTION_DIALOG(gui.fontdlg), DEFAULT_FONT); - - if (gui.fontname) - { - g_free(gui.fontname); - gui.fontname = NULL; - } - gtk_window_position(GTK_WINDOW(gui.fontdlg), GTK_WIN_POS_MOUSE); - gtk_widget_show(gui.fontdlg); - { - static gchar *spacings[] = {"c", "m", NULL}; - - /* In GTK 1.2.3 this must be after the gtk_widget_show() call, - * otherwise everything is blocked for ten seconds. */ - gtk_font_selection_dialog_set_filter( - GTK_FONT_SELECTION_DIALOG(gui.fontdlg), - GTK_FONT_FILTER_BASE, - GTK_FONT_ALL, NULL, NULL, - NULL, NULL, spacings, NULL); - } - - /* Wait for the font dialog to be closed. */ - while (gui.fontdlg && GTK_WIDGET_DRAWABLE(gui.fontdlg)) - gtk_main_iteration_do(TRUE); - - if (gui.fontname != NULL) - { - /* Apparently some font names include a comma, need to escape that, - * because in 'guifont' it separates names. */ - fontname = vim_strsave_escaped(gui.fontname, (char_u *)","); - g_free(gui.fontname); - gui.fontname = NULL; - } - return fontname; -} -#endif /* !HAVE_GTK2 */ - -#ifdef HAVE_GTK2 /* * Put up a font dialog and return the selected font name in allocated memory. * "oldval" is the previous value. Return NULL when cancelled. @@ -4997,102 +4294,6 @@ get_styled_font_variants(void) g_object_unref(plain_font); } -#else /* !HAVE_GTK2 */ - -/* - * There is only one excuse I can give for the following attempt to manage font - * styles: - * - * I HATE THE BRAIN DEAD WAY X11 IS HANDLING FONTS (--mdcki) - * (Me too. --danielk) - */ - static void -get_styled_font_variants(char_u * font_name) -{ - char *chunk[32]; - char *sdup; - char *tmp; - int len, i; - GuiFont *styled_font[3]; - - styled_font[0] = &gui.bold_font; - styled_font[1] = &gui.ital_font; - styled_font[2] = &gui.boldital_font; - - /* First free whatever was previously there. */ - for (i = 0; i < 3; ++i) - if (*styled_font[i]) - { - gdk_font_unref(*styled_font[i]); - *styled_font[i] = NULL; - } - - if ((sdup = g_strdup((const char *)font_name)) == NULL) - return; - - /* split up the whole */ - i = 0; - for (tmp = sdup; *tmp != '\0'; ++tmp) - { - if (*tmp == '-') - { - *tmp = '\0'; - - if (i == 32) - break; - - chunk[i] = tmp + 1; - ++i; - } - } - - if (i == 14) - { - GdkFont *font = NULL; - const char *bold_chunk[3] = { "bold", NULL, "bold" }; - const char *italic_chunk[3] = { NULL, "o", "o" }; - - /* font name was complete */ - len = strlen((const char *)font_name) + 32; - - for (i = 0; i < 3; ++i) - { - char *styled_name; - int j; - - styled_name = (char *)alloc(len); - if (styled_name == NULL) - { - g_free(sdup); - return; - } - - *styled_name = '\0'; - - for (j = 0; j < 14; ++j) - { - strcat(styled_name, "-"); - if (j == 2 && bold_chunk[i] != NULL) - strcat(styled_name, bold_chunk[i]); - else if (j == 3 && italic_chunk[i] != NULL) - strcat(styled_name, italic_chunk[i]); - else - strcat(styled_name, chunk[j]); - } - - font = gui_mch_get_font((char_u *)styled_name, FALSE); - if (font != NULL) - *styled_font[i] = font; - - vim_free(styled_name); - } - } - - g_free(sdup); -} -#endif /* !HAVE_GTK2 */ - -#ifdef HAVE_GTK2 static PangoEngineShape *default_shape_engine = NULL; /* @@ -5162,7 +4363,6 @@ ascii_glyph_table_init(void) g_list_free(item_list); pango_attr_list_unref(attr_list); } -#endif /* HAVE_GTK2 */ /* * Initialize Vim to use the font or fontset with the given name. @@ -5171,7 +4371,6 @@ ascii_glyph_table_init(void) int gui_mch_init_font(char_u *font_name, int fontset UNUSED) { -#ifdef HAVE_GTK2 PangoFontDescription *font_desc; PangoLayout *layout; int width; @@ -5248,94 +4447,6 @@ gui_mch_init_font(char_u *font_name, int gui.wide_font = NULL; } -#else /* !HAVE_GTK2 */ - - GdkFont *font = NULL; - -# ifdef FEAT_XFONTSET - /* Try loading a fontset. If this fails we try loading a normal font. */ - if (fontset && font_name != NULL) - font = gui_mch_get_fontset(font_name, TRUE, TRUE); - - if (font == NULL) -# endif - { - /* If font_name is NULL, this means to use the default, which should - * be present on all X11 servers. */ - if (font_name == NULL) - font_name = (char_u *)DEFAULT_FONT; - font = gui_mch_get_font(font_name, FALSE); - } - - if (font == NULL) - return FAIL; - - gui_mch_free_font(gui.norm_font); -# ifdef FEAT_XFONTSET - gui_mch_free_fontset(gui.fontset); - if (font->type == GDK_FONT_FONTSET) - { - gui.norm_font = NOFONT; - gui.fontset = (GuiFontset)font; - /* Use two bytes, this works around the problem that the result would - * be zero if no 8-bit font was found. */ - gui.char_width = gdk_string_width(font, "xW") / 2; - } - else -# endif - { - gui.norm_font = font; -# ifdef FEAT_XFONTSET - gui.fontset = NOFONTSET; -# endif - gui.char_width = ((XFontStruct *) - GDK_FONT_XFONT(font))->max_bounds.width; - } - - /* A zero width may cause a crash. Happens for semi-invalid fontsets. */ - if (gui.char_width <= 0) - gui.char_width = 8; - - gui.char_height = font->ascent + font->descent + p_linespace; - gui.char_ascent = font->ascent + p_linespace / 2; - - /* A not-positive value of char_height may crash Vim. Only happens - * if 'linespace' is negative (which does make sense sometimes). */ - gui.char_ascent = MAX(gui.char_ascent, 0); - gui.char_height = MAX(gui.char_height, gui.char_ascent + 1); - - /* Set the fontname, which will be used for information purposes */ - hl_set_font_name(font_name); - - if (font->type != GDK_FONT_FONTSET) - get_styled_font_variants(font_name); - - /* Synchronize the fonts used in user input dialogs, since otherwise - * search/replace will be esp. annoying in case of international font - * usage. - */ - gui_gtk_synch_fonts(); - -# ifdef FEAT_XIM - /* Adjust input management behaviour to the capabilities of the new - * fontset */ - xim_decide_input_style(); - if (xim_get_status_area_height()) - { - /* Status area is required. Just create the empty container so that - * mainwin will allocate the extra space for status area. */ - GtkWidget *alignment = gtk_alignment_new((gfloat)0.5, (gfloat)0.5, - (gfloat)1.0, (gfloat)1.0); - - gtk_widget_set_usize(alignment, 20, gui.char_height + 2); - gtk_box_pack_end(GTK_BOX(GTK_BIN(gui.mainwin)->child), - alignment, FALSE, FALSE, 0); - gtk_widget_show(alignment); - } -# endif -#endif /* !HAVE_GTK2 */ - -#ifdef HAVE_GTK2 if (gui_mch_maximized()) { int w, h; @@ -5348,7 +4459,6 @@ gui_mch_init_font(char_u *font_name, int gui_resize_shell(w, h); } else -#endif { /* Preserve the logical dimensions of the screen. */ update_window_manager_hints(0, 0); @@ -5364,17 +4474,12 @@ gui_mch_init_font(char_u *font_name, int GuiFont gui_mch_get_font(char_u *name, int report_error) { -#ifdef HAVE_GTK2 PangoFontDescription *font; -#else - GdkFont *font; -#endif /* can't do this when GUI is not running */ if (!gui.in_use || name == NULL) return NULL; -#ifdef HAVE_GTK2 if (output_conv.vc_type != CONV_NONE) { char_u *buf; @@ -5409,9 +4514,6 @@ gui_mch_get_font(char_u *name, int repor else g_object_unref(real_font); } -#else - font = gdk_font_load((const gchar *)name); -#endif if (font == NULL) { @@ -5420,7 +4522,6 @@ gui_mch_get_font(char_u *name, int repor return NULL; } -#ifdef HAVE_GTK2 /* * The fixed-width check has been disabled for GTK+ 2. Rationale: * @@ -5434,7 +4535,7 @@ gui_mch_get_font(char_u *name, int repor * - The font dialog displays all fonts unfiltered, and it's rather * annoying if 95% of the listed fonts produce an error message. */ -# if 0 +#if 0 { /* Check that this is a mono-spaced font. Naturally, this is a bit * hackish -- fixed-width isn't really suitable for i18n text :/ */ @@ -5465,29 +4566,6 @@ gui_mch_get_font(char_u *name, int repor g_object_unref(layout); } -# endif -#else /* !HAVE_GTK2 */ - { - XFontStruct *xfont; - - /* reference this font as being in use */ - gdk_font_ref(font); - - /* Check that this is a mono-spaced font. - */ - xfont = (XFontStruct *) GDK_FONT_XFONT(font); - - if (xfont->max_bounds.width != xfont->min_bounds.width) - { - gdk_font_unref(font); - font = NULL; - } - } -#endif /* !HAVE_GTK2 */ - -#if !defined(HAVE_GTK2) || 0 /* disabled for GTK+ 2, see above */ - if (font == NULL && report_error) - EMSG2(_(e_fontwidth), name); #endif return font; @@ -5500,7 +4578,6 @@ gui_mch_get_font(char_u *name, int repor char_u * gui_mch_get_fontname(GuiFont font, char_u *name UNUSED) { -# ifdef HAVE_GTK2 if (font != NOFONT) { char *pangoname = pango_font_description_to_string(font); @@ -5513,39 +4590,10 @@ gui_mch_get_fontname(GuiFont font, char_ return s; } } -# else - /* Don't know how to get the name, return what we got. */ - if (name != NULL) - return vim_strsave(name); -# endif return NULL; } #endif -#if !defined(HAVE_GTK2) || defined(PROTO) -/* - * Set the current text font. - * Since we create all GC on demand, we use just gui.current_font to - * indicate the desired current font. - */ - void -gui_mch_set_font(GuiFont font) -{ - gui.current_font = font; -} -#endif - -#if defined(FEAT_XFONTSET) || defined(PROTO) -/* - * Set the current text fontset. - */ - void -gui_mch_set_fontset(GuiFontset fontset) -{ - gui.current_font = fontset; -} -#endif - /* * If a font is not going to be used, free its structure. */ @@ -5553,26 +4601,9 @@ gui_mch_set_fontset(GuiFontset fontset) gui_mch_free_font(GuiFont font) { if (font != NOFONT) -#ifdef HAVE_GTK2 pango_font_description_free(font); -#else - gdk_font_unref(font); -#endif } -#if defined(FEAT_XFONTSET) || defined(PROTO) -/* - * If a fontset is not going to be used, free its structure. - */ - void -gui_mch_free_fontset(GuiFontset fontset) -{ - if (fontset != NOFONTSET) - gdk_font_unref(fontset); -} -#endif - - /* * Return the Pixel value (color) for the given color name. This routine was * pretty much taken from example code in the Silicon Graphics OSF/Motif @@ -5626,47 +4657,10 @@ gui_mch_get_color(char_u *name) parsed = gdk_color_parse((const char *)name, &color); -#ifndef HAVE_GTK2 /* ohh, lovely GTK+ 2, eases our pain :) */ - /* - * Since we have already called gtk_set_locale here the bugger - * XParseColor will accept only explicit color names in the language - * of the current locale. However this will interfere with: - * 1. Vim's global startup files - * 2. Explicit color names in .vimrc - * - * Therefore we first try to parse the color in the current locale and - * if it fails, we fall back to the portable "C" one. - */ - if (!parsed) - { - char *current; - - current = setlocale(LC_ALL, NULL); - if (current != NULL) - { - char *saved; - - saved = g_strdup(current); - setlocale(LC_ALL, "C"); - - parsed = gdk_color_parse((const gchar *)name, &color); - - setlocale(LC_ALL, saved); - gtk_set_locale(); - - g_free(saved); - } - } -#endif /* !HAVE_GTK2 */ - if (parsed) { -#ifdef HAVE_GTK2 gdk_colormap_alloc_color(gtk_widget_get_colormap(gui.drawarea), &color, FALSE, TRUE); -#else - gdk_color_alloc(gtk_widget_get_colormap(gui.drawarea), &color); -#endif return (guicolor_T)color.pixel; } /* add a few builtin names and try again */ @@ -5715,7 +4709,6 @@ gui_mch_set_sp_color(guicolor_T color) gui.spcolor->pixel = (unsigned long)color; } -#ifdef HAVE_GTK2 /* * Function-like convenience macro for the sake of efficiency. */ @@ -5892,8 +4885,6 @@ draw_glyph_string(int row, int col, int glyphs); } -#endif /* HAVE_GTK2 */ - /* * Draw underline and undercurl at the bottom of the character cell. */ @@ -5930,7 +4921,6 @@ draw_under(int flags, int row, int col, } } -#if defined(HAVE_GTK2) || defined(PROTO) int gui_gtk2_draw_string(int row, int col, char_u *s, int len, int flags) { @@ -6200,129 +5190,6 @@ skipitall: return column_offset; } -#endif /* HAVE_GTK2 */ - -#if !defined(HAVE_GTK2) || defined(PROTO) - void -gui_mch_draw_string(int row, int col, char_u *s, int len, int flags) -{ - static XChar2b *buf = NULL; - static int buflen = 0; - int is_wide; - XChar2b *text; - int textlen; - XFontStruct *xfont; - char_u *p; -# ifdef FEAT_MBYTE - unsigned c; -# endif - int width; - - if (gui.current_font == NULL || gui.drawarea->window == NULL) - return; - - /* - * Yeah yeah apparently the font support in GTK+ 1.2 only cares for either: - * asians or 8-bit fonts. It is broken there, but no wonder the whole font - * stuff is broken in X11 in first place. And the internationalization API - * isn't something you would really like to use. - */ - - xfont = (XFontStruct *)((GdkFontPrivate*)gui.current_font)->xfont; - is_wide = ((xfont->min_byte1 != 0 || xfont->max_byte1 != 0) -# ifdef FEAT_XFONTSET - && gui.fontset == NOFONTSET -# endif - ); - - if (is_wide) - { - /* Convert a byte sequence to 16 bit characters for the Gdk functions. - * Need a buffer for the 16 bit characters. Keep it between calls, - * because allocating it each time is slow. */ - if (buflen < len) - { - XtFree((char *)buf); - buf = (XChar2b *)XtMalloc(len * sizeof(XChar2b)); - buflen = len; - } - - p = s; - textlen = 0; - width = 0; - while (p < s + len) - { -# ifdef FEAT_MBYTE - if (enc_utf8) - { - int pcc[MAX_MCO]; - - /* TODO: use the composing characters */ - c = utfc_ptr2char_len(p, pcc, len - (p - s)); - if (c >= 0x10000) /* show chars > 0xffff as ? */ - c = 0xbf; - buf[textlen].byte1 = c >> 8; - buf[textlen].byte2 = c; - p += utfc_ptr2len_len(p, len - (p - s)); - width += utf_char2cells(c); - } - else -# endif - { - buf[textlen].byte1 = '\0'; /* high eight bits */ - buf[textlen].byte2 = *p; /* low eight bits */ - ++p; - ++width; - } - ++textlen; - } - text = buf; - textlen = textlen * 2; - } - else - { - text = (XChar2b *)s; - textlen = len; -# ifdef FEAT_MBYTE - if (has_mbyte) - { - width = 0; - for (p = s; p < s + len; p += (*mb_ptr2len_len)(p, len - (p - s))) - width += (*mb_ptr2cells_len)(p, len - (p - s)); - } - else -# endif - width = len; - } - - if (!(flags & DRAW_TRANSP)) - { - gdk_gc_set_foreground(gui.text_gc, gui.bgcolor); - gdk_draw_rectangle(gui.drawarea->window, - gui.text_gc, - TRUE, - FILL_X(col), FILL_Y(row), - width * gui.char_width, gui.char_height); - } - gdk_gc_set_foreground(gui.text_gc, gui.fgcolor); - gdk_draw_text(gui.drawarea->window, - gui.current_font, - gui.text_gc, - TEXT_X(col), TEXT_Y(row), - (const gchar *)text, textlen); - - /* redraw the contents with an offset of 1 to emulate bold */ - if (flags & DRAW_BOLD) - gdk_draw_text(gui.drawarea->window, - gui.current_font, - gui.text_gc, - TEXT_X(col) + 1, TEXT_Y(row), - (const gchar *)text, textlen); - - /* Draw underline and undercurl. */ - draw_under(flags, row, col, width); -} -#endif /* !HAVE_GTK2 */ /* * Return OK if the key with the termcap name "name" is supported. @@ -6340,7 +5207,6 @@ gui_mch_haskey(char_u *name) } #if defined(FEAT_TITLE) \ - || (defined(FEAT_XIM) && !defined(HAVE_GTK2)) \ || defined(PROTO) /* * Return the text window-id and display. Only required for X-based GUI's @@ -6471,13 +5337,7 @@ gui_mch_invert_rectangle(int r, int c, i void gui_mch_iconify(void) { -#ifdef HAVE_GTK2 gtk_window_iconify(GTK_WINDOW(gui.mainwin)); -#else - XIconifyWindow(GDK_WINDOW_XDISPLAY(gui.mainwin->window), - GDK_WINDOW_XWINDOW(gui.mainwin->window), - DefaultScreen(GDK_WINDOW_XDISPLAY(gui.mainwin->window))); -#endif } #if defined(FEAT_EVAL) || defined(PROTO) @@ -6487,11 +5347,7 @@ gui_mch_iconify(void) void gui_mch_set_foreground(void) { -# ifdef HAVE_GTK2 gtk_window_present(GTK_WINDOW(gui.mainwin)); -# else - gdk_window_raise(gui.mainwin->window); -# endif } #endif @@ -6509,10 +5365,8 @@ gui_mch_draw_hollow_cursor(guicolor_T co gui_mch_set_fg_color(color); gdk_gc_set_foreground(gui.text_gc, gui.fgcolor); -#ifdef FEAT_MBYTE if (mb_lefthalve(gui.row, gui.col)) i = 2; -#endif gdk_draw_rectangle(gui.drawarea->window, gui.text_gc, FALSE, FILL_X(gui.col), FILL_Y(gui.row), @@ -6696,12 +5550,10 @@ gui_mch_flush(void) #else gdk_flush(); /* historical misnomer: calls XSync(), not XFlush() */ #endif -#ifdef HAVE_GTK2 /* This happens to actually do what gui_mch_flush() is supposed to do, * according to the comment above. */ if (gui.drawarea != NULL && gui.drawarea->window != NULL) gdk_window_process_updates(gui.drawarea->window, FALSE); -#endif } /* @@ -6841,10 +5693,8 @@ clip_mch_request_selection(VimClipboard for (i = 0; i < N_SELECTION_TARGETS; ++i) { -#ifdef FEAT_MBYTE if (!clip_html && selection_targets[i].info == TARGET_HTML) continue; -#endif received_selection = RS_NONE; target = gdk_atom_intern(selection_targets[i].target, FALSE); @@ -6990,19 +5840,8 @@ gui_mch_enable_scrollbar(scrollbar_T *sb gui_mch_get_rgb(guicolor_T pixel) { GdkColor color; -#ifndef HAVE_GTK2 - GdkColorContext *cc; - - cc = gdk_color_context_new(gtk_widget_get_visual(gui.drawarea), - gtk_widget_get_colormap(gui.drawarea)); - color.pixel = pixel; - gdk_color_context_query_color(cc, &color); - - gdk_color_context_free(cc); -#else gdk_colormap_query_color(gtk_widget_get_colormap(gui.drawarea), (unsigned long)pixel, &color); -#endif return (((unsigned)color.red & 0xff00) << 8) | ((unsigned)color.green & 0xff00) @@ -7138,8 +5977,6 @@ mch_set_mouse_shape(int shape) # define SIGN_HEIGHT (gui.char_height) # define SIGN_ASPECT ((double)SIGN_HEIGHT / (double)SIGN_WIDTH) -# ifdef HAVE_GTK2 - void gui_mch_drawsign(int row, int col, int typenr) { @@ -7200,19 +6037,6 @@ gui_mch_drawsign(int row, int col, int t SIGN_WIDTH, SIGN_HEIGHT); -# if GTK_CHECK_VERSION(2,1,1) - gdk_draw_pixbuf(gui.drawarea->window, - NULL, - sign, - MAX(0, xoffset), - MAX(0, yoffset), - FILL_X(col) - MIN(0, xoffset), - FILL_Y(row) - MIN(0, yoffset), - MIN(width, SIGN_WIDTH), - MIN(height, SIGN_HEIGHT), - GDK_RGB_DITHER_NORMAL, - 0, 0); -# else gdk_pixbuf_render_to_drawable_alpha(sign, gui.drawarea->window, MAX(0, xoffset), @@ -7225,7 +6049,6 @@ gui_mch_drawsign(int row, int col, int t 127, GDK_RGB_DITHER_NORMAL, 0, 0); -# endif if (need_scale) g_object_unref(sign); } @@ -7272,115 +6095,4 @@ gui_mch_destroy_sign(void *sign) g_object_unref(sign); } -# else /* !HAVE_GTK2 */ - -typedef struct -{ - GdkPixmap *pixmap; - GdkBitmap *mask; -} -signicon_T; - - void -gui_mch_drawsign(int row, int col, int typenr) -{ - signicon_T *sign; - - sign = (signicon_T *)sign_get_image(typenr); - - if (sign != NULL && sign->pixmap != NULL - && gui.drawarea != NULL && gui.drawarea->window != NULL) - { - int width; - int height; - int xoffset; - int yoffset; - - gdk_window_get_size(sign->pixmap, &width, &height); - - /* The origin is the upper-left corner of the pixmap. Therefore - * these offset may become negative if the pixmap is smaller than - * the 2x1 cells reserved for the sign icon. */ - xoffset = (width - SIGN_WIDTH) / 2; - yoffset = (height - SIGN_HEIGHT) / 2; - - gdk_gc_set_foreground(gui.text_gc, gui.bgcolor); - - gdk_draw_rectangle(gui.drawarea->window, - gui.text_gc, - TRUE, - FILL_X(col), - FILL_Y(row), - SIGN_WIDTH, - SIGN_HEIGHT); - - /* Set the clip mask for bilevel transparency */ - if (sign->mask != NULL) - { - gdk_gc_set_clip_origin(gui.text_gc, - FILL_X(col) - xoffset, - FILL_Y(row) - yoffset); - gdk_gc_set_clip_mask(gui.text_gc, sign->mask); - } - - gdk_draw_pixmap(gui.drawarea->window, - gui.text_gc, - sign->pixmap, - MAX(0, xoffset), - MAX(0, yoffset), - FILL_X(col) - MIN(0, xoffset), - FILL_Y(row) - MIN(0, yoffset), - MIN(width, SIGN_WIDTH), - MIN(height, SIGN_HEIGHT)); - - gdk_gc_set_clip_mask(gui.text_gc, NULL); - } -} - - void * -gui_mch_register_sign(char_u *signfile) -{ - signicon_T *sign = NULL; - - if (signfile[0] != NUL && signfile[0] != '-' - && gui.drawarea != NULL && gui.drawarea->window != NULL) - { - sign = (signicon_T *)alloc(sizeof(signicon_T)); - - if (sign != NULL) /* NULL == OOM == "cannot really happen" */ - { - sign->mask = NULL; - sign->pixmap = gdk_pixmap_colormap_create_from_xpm( - gui.drawarea->window, NULL, - &sign->mask, NULL, - (const char *)signfile); - - if (sign->pixmap == NULL) - { - vim_free(sign); - sign = NULL; - EMSG(_(e_signdata)); - } - } - } - return sign; -} - - void -gui_mch_destroy_sign(void *sign) -{ - if (sign != NULL) - { - signicon_T *signicon = (signicon_T *)sign; - - if (signicon->pixmap != NULL) - gdk_pixmap_unref(signicon->pixmap); - if (signicon->mask != NULL) - gdk_bitmap_unref(signicon->mask); - - vim_free(signicon); - } -} -# endif /* !HAVE_GTK2 */ - #endif /* FEAT_SIGN_ICONS */ diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -3233,9 +3233,7 @@ usage() main_msg(_("-geometry \tUse for initial geometry (also: -geom)")); main_msg(_("-reverse\t\tUse reverse video (also: -rv)")); main_msg(_("-display \tRun vim on (also: --display)")); -# ifdef HAVE_GTK2 main_msg(_("--role \tSet a unique role to identify the main window")); -# endif main_msg(_("--socketid \tOpen Vim inside another GTK widget")); #endif #ifdef FEAT_GUI_W32 diff --git a/src/mbyte.c b/src/mbyte.c --- a/src/mbyte.c +++ b/src/mbyte.c @@ -100,7 +100,7 @@ #include #endif -#if defined(FEAT_GUI_GTK) && defined(FEAT_XIM) && defined(HAVE_GTK2) +#if defined(FEAT_GUI_GTK) && defined(FEAT_XIM) # include # ifdef WIN3264 # include @@ -5068,147 +5068,6 @@ static XIMStyle input_style; static int status_area_enabled = TRUE; #endif -#ifdef FEAT_GUI_GTK -# ifdef WIN3264 -# include -# else -# include -# endif -#else -# ifdef PROTO -/* Define a few things to be able to generate prototypes while not configured - * for GTK. */ -# define GSList int -# define gboolean int - typedef int GdkEvent; - typedef int GdkEventKey; -# define GdkIC int -# endif -#endif - -#if defined(FEAT_GUI_GTK) || defined(PROTO) -static int preedit_buf_len = 0; -static int xim_can_preediting INIT(= FALSE); /* XIM in showmode() */ -static int xim_input_style; -#ifndef FEAT_GUI_GTK -# define gboolean int -#endif -static gboolean use_status_area = 0; - -static int im_xim_str2keycode __ARGS((unsigned int *code, unsigned int *state)); -static void im_xim_send_event_imactivate __ARGS((void)); - -/* - * Convert string to keycode and state for XKeyEvent. - * When string is valid return OK, when invalid return FAIL. - * - * See 'imactivatekey' documentation for the format. - */ - static int -im_xim_str2keycode(code, state) - unsigned int *code; - unsigned int *state; -{ - int retval = OK; - int len; - unsigned keycode = 0, keystate = 0; - Window window; - Display *display; - char_u *flag_end; - char_u *str; - - if (*p_imak != NUL) - { - len = STRLEN(p_imak); - for (flag_end = p_imak + len - 1; - flag_end > p_imak && *flag_end != '-'; --flag_end) - ; - - /* Parse modifier keys */ - for (str = p_imak; str < flag_end; ++str) - { - switch (*str) - { - case 's': case 'S': - keystate |= ShiftMask; - break; - case 'l': case 'L': - keystate |= LockMask; - break; - case 'c': case 'C': - keystate |= ControlMask; - break; - case '1': - keystate |= Mod1Mask; - break; - case '2': - keystate |= Mod2Mask; - break; - case '3': - keystate |= Mod3Mask; - break; - case '4': - keystate |= Mod4Mask; - break; - case '5': - keystate |= Mod5Mask; - break; - case '-': - break; - default: - retval = FAIL; - } - } - if (*str == '-') - ++str; - - /* Get keycode from string. */ - gui_get_x11_windis(&window, &display); - if (display) - keycode = XKeysymToKeycode(display, XStringToKeysym((char *)str)); - if (keycode == 0) - retval = FAIL; - - if (code != NULL) - *code = keycode; - if (state != NULL) - *state = keystate; - } - return retval; -} - - static void -im_xim_send_event_imactivate() -{ - /* Force turn on preedit state by simulating keypress event. - * Keycode and state is specified by 'imactivatekey'. - */ - XKeyEvent ev; - - gui_get_x11_windis(&ev.window, &ev.display); - ev.root = RootWindow(ev.display, DefaultScreen(ev.display)); - ev.subwindow = None; - ev.time = CurrentTime; - ev.x = 1; - ev.y = 1; - ev.x_root = 1; - ev.y_root = 1; - ev.same_screen = 1; - ev.type = KeyPress; - if (im_xim_str2keycode(&ev.keycode, &ev.state) == OK) - XSendEvent(ev.display, ev.window, 1, KeyPressMask, (XEvent*)&ev); -} - -/* - * Return TRUE if 'imactivatekey' has a valid value. - */ - int -im_xim_isvalid_imactivate() -{ - return im_xim_str2keycode(NULL, NULL) == OK; -} -#endif /* FEAT_GUI_GTK */ - /* * Switch using XIM on/off. This is used by the code that changes "State". */ @@ -5232,124 +5091,6 @@ im_set_active(active) /* Remember the active state, it is needed when Vim gets keyboard focus. */ xim_is_active = active; - -#ifdef FEAT_GUI_GTK - /* When 'imactivatekey' has valid key-string, try to control XIM preedit - * state. When 'imactivatekey' has no or invalid string, try old XIM - * focus control. - */ - if (*p_imak != NUL) - { - /* BASIC STRATEGY: - * Destroy old Input Context (XIC), and create new one. New XIC - * would have a state of preedit that is off. When argument:active - * is false, that's all. Else argument:active is true, send a key - * event specified by 'imactivatekey' to activate XIM preedit state. - */ - - xim_is_active = TRUE; /* Disable old XIM focus control */ - /* If we can monitor preedit state with preedit callback functions, - * try least creation of new XIC. - */ - if (xim_input_style & (int)GDK_IM_PREEDIT_CALLBACKS) - { - if (xim_can_preediting && !active) - { - /* Force turn off preedit state. With some IM - * implementations, we cannot turn off preedit state by - * simulating keypress event. It is why using such a method - * that destroy old IC (input context), and create new one. - * When create new IC, its preedit state is usually off. - */ - xim_reset(); - xim_set_focus(FALSE); - gdk_ic_destroy(xic); - xim_init(); - xim_can_preediting = FALSE; - } - else if (!xim_can_preediting && active) - im_xim_send_event_imactivate(); - } - else - { - /* First, force destroy old IC, and create new one. It - * simulates "turning off preedit state". - */ - xim_set_focus(FALSE); - gdk_ic_destroy(xic); - xim_init(); - xim_can_preediting = FALSE; - - /* 2nd, when requested to activate IM, simulate this by sending - * the event. - */ - if (active) - { - im_xim_send_event_imactivate(); - xim_can_preediting = TRUE; - } - } - } - else - { -# ifndef XIMPreeditUnKnown - /* X11R5 doesn't have these, it looks safe enough to define here. */ - typedef unsigned long XIMPreeditState; -# define XIMPreeditUnKnown 0L -# define XIMPreeditEnable 1L -# define XIMPreeditDisable (1L<<1) -# define XNPreeditState "preeditState" -# endif - XIMPreeditState preedit_state = XIMPreeditUnKnown; - XVaNestedList preedit_attr; - XIC pxic; - - preedit_attr = XVaCreateNestedList(0, - XNPreeditState, &preedit_state, - NULL); - pxic = ((GdkICPrivate *)xic)->xic; - - if (!XGetICValues(pxic, XNPreeditAttributes, preedit_attr, NULL)) - { - XFree(preedit_attr); - preedit_attr = XVaCreateNestedList(0, - XNPreeditState, - active ? XIMPreeditEnable : XIMPreeditDisable, - NULL); - XSetICValues(pxic, XNPreeditAttributes, preedit_attr, NULL); - xim_can_preediting = active; - xim_is_active = active; - } - XFree(preedit_attr); - } - if (xim_input_style & XIMPreeditCallbacks) - { - preedit_buf_len = 0; - init_preedit_start_col(); - } -#else -# if 0 - /* When had tested kinput2 + canna + Athena GUI version with - * 'imactivatekey' is "s-space", im_xim_send_event_imactivate() did not - * work correctly. It just inserted one space. I don't know why we - * couldn't switch state of XIM preediting. This is reason why these - * codes are commented out. - */ - /* First, force destroy old IC, and create new one. It simulates - * "turning off preedit state". - */ - xim_set_focus(FALSE); - XDestroyIC(xic); - xic = NULL; - xim_init(); - - /* 2nd, when requested to activate IM, simulate this by sending the - * event. - */ - if (active) - im_xim_send_event_imactivate(); -# endif -#endif xim_set_preedit(); } @@ -5373,11 +5114,7 @@ xim_set_focus(focus) if (!xim_has_focus) { xim_has_focus = TRUE; -#ifdef FEAT_GUI_GTK - gdk_im_begin(xic, gui.drawarea->window); -#else XSetICFocus(xic); -#endif } } else @@ -5385,11 +5122,7 @@ xim_set_focus(focus) if (xim_has_focus) { xim_has_focus = FALSE; -#ifdef FEAT_GUI_GTK - gdk_im_end(); -#else XUnsetICFocus(xic); -#endif } } } @@ -5413,135 +5146,50 @@ xim_set_preedit() xim_set_focus(TRUE); -#ifdef FEAT_GUI_GTK - if (gdk_im_ready()) + XVaNestedList attr_list; + XRectangle spot_area; + XPoint over_spot; + int line_space; + + if (!xim_has_focus) { - int attrmask; - GdkICAttr *attr; - - if (!xic_attr) - return; - - attr = xic_attr; - attrmask = 0; - -# ifdef FEAT_XFONTSET - if ((xim_input_style & (int)GDK_IM_PREEDIT_POSITION) - && gui.fontset != NOFONTSET - && gui.fontset->type == GDK_FONT_FONTSET) - { - if (!xim_has_focus) - { - if (attr->spot_location.y >= 0) - { - attr->spot_location.x = 0; - attr->spot_location.y = -100; - attrmask |= (int)GDK_IC_SPOT_LOCATION; - } - } - else - { - gint width, height; - - if (attr->spot_location.x != TEXT_X(gui.col) - || attr->spot_location.y != TEXT_Y(gui.row)) - { - attr->spot_location.x = TEXT_X(gui.col); - attr->spot_location.y = TEXT_Y(gui.row); - attrmask |= (int)GDK_IC_SPOT_LOCATION; - } - - gdk_window_get_size(gui.drawarea->window, &width, &height); - width -= 2 * gui.border_offset; - height -= 2 * gui.border_offset; - if (xim_input_style & (int)GDK_IM_STATUS_AREA) - height -= gui.char_height; - if (attr->preedit_area.width != width - || attr->preedit_area.height != height) - { - attr->preedit_area.x = gui.border_offset; - attr->preedit_area.y = gui.border_offset; - attr->preedit_area.width = width; - attr->preedit_area.height = height; - attrmask |= (int)GDK_IC_PREEDIT_AREA; - } - - if (attr->preedit_fontset != gui.current_font) - { - attr->preedit_fontset = gui.current_font; - attrmask |= (int)GDK_IC_PREEDIT_FONTSET; - } - } - } -# endif /* FEAT_XFONTSET */ - + /* hide XIM cursor */ + over_spot.x = 0; + over_spot.y = -100; /* arbitrary invisible position */ + attr_list = (XVaNestedList) XVaCreateNestedList(0, + XNSpotLocation, + &over_spot, + NULL); + XSetICValues(xic, XNPreeditAttributes, attr_list, NULL); + XFree(attr_list); + return; + } + + if (input_style & XIMPreeditPosition) + { if (xim_fg_color == INVALCOLOR) { xim_fg_color = gui.def_norm_pixel; xim_bg_color = gui.def_back_pixel; } - if (attr->preedit_foreground.pixel != xim_fg_color) - { - attr->preedit_foreground.pixel = xim_fg_color; - attrmask |= (int)GDK_IC_PREEDIT_FOREGROUND; - } - if (attr->preedit_background.pixel != xim_bg_color) - { - attr->preedit_background.pixel = xim_bg_color; - attrmask |= (int)GDK_IC_PREEDIT_BACKGROUND; - } - - if (attrmask != 0) - gdk_ic_set_attr(xic, attr, (GdkICAttributesType)attrmask); + over_spot.x = TEXT_X(gui.col); + over_spot.y = TEXT_Y(gui.row); + spot_area.x = 0; + spot_area.y = 0; + spot_area.height = gui.char_height * Rows; + spot_area.width = gui.char_width * Columns; + line_space = gui.char_height; + attr_list = (XVaNestedList) XVaCreateNestedList(0, + XNSpotLocation, &over_spot, + XNForeground, (Pixel) xim_fg_color, + XNBackground, (Pixel) xim_bg_color, + XNArea, &spot_area, + XNLineSpace, line_space, + NULL); + if (XSetICValues(xic, XNPreeditAttributes, attr_list, NULL)) + EMSG(_("E284: Cannot set IC values")); + XFree(attr_list); } -#else /* FEAT_GUI_GTK */ - { - XVaNestedList attr_list; - XRectangle spot_area; - XPoint over_spot; - int line_space; - - if (!xim_has_focus) - { - /* hide XIM cursor */ - over_spot.x = 0; - over_spot.y = -100; /* arbitrary invisible position */ - attr_list = (XVaNestedList) XVaCreateNestedList(0, - XNSpotLocation, - &over_spot, - NULL); - XSetICValues(xic, XNPreeditAttributes, attr_list, NULL); - XFree(attr_list); - return; - } - - if (input_style & XIMPreeditPosition) - { - if (xim_fg_color == INVALCOLOR) - { - xim_fg_color = gui.def_norm_pixel; - xim_bg_color = gui.def_back_pixel; - } - over_spot.x = TEXT_X(gui.col); - over_spot.y = TEXT_Y(gui.row); - spot_area.x = 0; - spot_area.y = 0; - spot_area.height = gui.char_height * Rows; - spot_area.width = gui.char_width * Columns; - line_space = gui.char_height; - attr_list = (XVaNestedList) XVaCreateNestedList(0, - XNSpotLocation, &over_spot, - XNForeground, (Pixel) xim_fg_color, - XNBackground, (Pixel) xim_bg_color, - XNArea, &spot_area, - XNLineSpace, line_space, - NULL); - if (XSetICValues(xic, XNPreeditAttributes, attr_list, NULL)) - EMSG(_("E284: Cannot set IC values")); - XFree(attr_list); - } - } -#endif /* FEAT_GUI_GTK */ } /* @@ -5558,137 +5206,98 @@ xim_set_status_area() if (xic == NULL) return; -#ifdef FEAT_GUI_GTK -# if defined(FEAT_XFONTSET) - if (use_status_area) + XVaNestedList preedit_list = 0, status_list = 0, list = 0; + XRectangle pre_area, status_area; + + if (input_style & XIMStatusArea) { - GdkICAttr *attr; - int style; - gint width, height; - GtkWidget *widget; - int attrmask; - - if (!xic_attr) - return; - - attr = xic_attr; - attrmask = 0; - style = (int)gdk_ic_get_style(xic); - if ((style & (int)GDK_IM_STATUS_MASK) == (int)GDK_IM_STATUS_AREA) + if (input_style & XIMPreeditArea) { - if (gui.fontset != NOFONTSET - && gui.fontset->type == GDK_FONT_FONTSET) - { - widget = gui.mainwin; - gdk_window_get_size(widget->window, &width, &height); - - attrmask |= (int)GDK_IC_STATUS_AREA; - attr->status_area.x = 0; - attr->status_area.y = height - gui.char_height - 1; - attr->status_area.width = width; - attr->status_area.height = gui.char_height; - } - } - if (attrmask != 0) - gdk_ic_set_attr(xic, attr, (GdkICAttributesType)attrmask); - } -# endif -#else - { - XVaNestedList preedit_list = 0, status_list = 0, list = 0; - XRectangle pre_area, status_area; - - if (input_style & XIMStatusArea) - { - if (input_style & XIMPreeditArea) - { - XRectangle *needed_rect; - - /* to get status_area width */ - status_list = XVaCreateNestedList(0, XNAreaNeeded, - &needed_rect, NULL); - XGetICValues(xic, XNStatusAttributes, status_list, NULL); - XFree(status_list); - - status_area.width = needed_rect->width; - } - else - status_area.width = gui.char_width * Columns; - - status_area.x = 0; - status_area.y = gui.char_height * Rows + gui.border_offset; - if (gui.which_scrollbars[SBAR_BOTTOM]) - status_area.y += gui.scrollbar_height; -#ifdef FEAT_MENU - if (gui.menu_is_active) - status_area.y += gui.menu_height; -#endif - status_area.height = gui.char_height; - status_list = XVaCreateNestedList(0, XNArea, &status_area, NULL); + XRectangle *needed_rect; + + /* to get status_area width */ + status_list = XVaCreateNestedList(0, XNAreaNeeded, + &needed_rect, NULL); + XGetICValues(xic, XNStatusAttributes, status_list, NULL); + XFree(status_list); + + status_area.width = needed_rect->width; } else - { - status_area.x = 0; - status_area.y = gui.char_height * Rows + gui.border_offset; - if (gui.which_scrollbars[SBAR_BOTTOM]) - status_area.y += gui.scrollbar_height; + status_area.width = gui.char_width * Columns; + + status_area.x = 0; + status_area.y = gui.char_height * Rows + gui.border_offset; + if (gui.which_scrollbars[SBAR_BOTTOM]) + status_area.y += gui.scrollbar_height; #ifdef FEAT_MENU - if (gui.menu_is_active) - status_area.y += gui.menu_height; + if (gui.menu_is_active) + status_area.y += gui.menu_height; #endif - status_area.width = 0; - status_area.height = gui.char_height; - } - - if (input_style & XIMPreeditArea) /* off-the-spot */ - { - pre_area.x = status_area.x + status_area.width; - pre_area.y = gui.char_height * Rows + gui.border_offset; - pre_area.width = gui.char_width * Columns - pre_area.x; - if (gui.which_scrollbars[SBAR_BOTTOM]) - pre_area.y += gui.scrollbar_height; + status_area.height = gui.char_height; + status_list = XVaCreateNestedList(0, XNArea, &status_area, NULL); + } + else + { + status_area.x = 0; + status_area.y = gui.char_height * Rows + gui.border_offset; + if (gui.which_scrollbars[SBAR_BOTTOM]) + status_area.y += gui.scrollbar_height; #ifdef FEAT_MENU - if (gui.menu_is_active) - pre_area.y += gui.menu_height; + if (gui.menu_is_active) + status_area.y += gui.menu_height; #endif - pre_area.height = gui.char_height; - preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL); - } - else if (input_style & XIMPreeditPosition) /* over-the-spot */ - { - pre_area.x = 0; - pre_area.y = 0; - pre_area.height = gui.char_height * Rows; - pre_area.width = gui.char_width * Columns; - preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL); - } - - if (preedit_list && status_list) - list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list, - XNStatusAttributes, status_list, NULL); - else if (preedit_list) - list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list, - NULL); - else if (status_list) - list = XVaCreateNestedList(0, XNStatusAttributes, status_list, - NULL); - else - list = NULL; - - if (list) - { - XSetICValues(xic, XNVaNestedList, list, NULL); - XFree(list); - } - if (status_list) - XFree(status_list); - if (preedit_list) - XFree(preedit_list); + status_area.width = 0; + status_area.height = gui.char_height; + } + + if (input_style & XIMPreeditArea) /* off-the-spot */ + { + pre_area.x = status_area.x + status_area.width; + pre_area.y = gui.char_height * Rows + gui.border_offset; + pre_area.width = gui.char_width * Columns - pre_area.x; + if (gui.which_scrollbars[SBAR_BOTTOM]) + pre_area.y += gui.scrollbar_height; +#ifdef FEAT_MENU + if (gui.menu_is_active) + pre_area.y += gui.menu_height; +#endif + pre_area.height = gui.char_height; + preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL); + } + else if (input_style & XIMPreeditPosition) /* over-the-spot */ + { + pre_area.x = 0; + pre_area.y = 0; + pre_area.height = gui.char_height * Rows; + pre_area.width = gui.char_width * Columns; + preedit_list = XVaCreateNestedList(0, XNArea, &pre_area, NULL); } -#endif + + if (preedit_list && status_list) + list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list, + XNStatusAttributes, status_list, NULL); + else if (preedit_list) + list = XVaCreateNestedList(0, XNPreeditAttributes, preedit_list, + NULL); + else if (status_list) + list = XVaCreateNestedList(0, XNStatusAttributes, status_list, + NULL); + else + list = NULL; + + if (list) + { + XSetICValues(xic, XNVaNestedList, list, NULL); + XFree(list); + } + if (status_list) + XFree(status_list); + if (preedit_list) + XFree(preedit_list); } -#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_GTK) +#if defined(FEAT_GUI_X11) static char e_xim[] = N_("E285: Failed to create input context"); #endif @@ -5998,483 +5607,11 @@ xim_real_init(x11_window, x11_display) #endif /* FEAT_GUI_X11 */ -#if defined(FEAT_GUI_GTK) || defined(PROTO) - -# ifdef FEAT_XFONTSET -static char e_overthespot[] = N_("E290: over-the-spot style requires fontset"); -# endif - -# ifdef PROTO -typedef int GdkIC; -# endif - - void -xim_decide_input_style() -{ - /* GDK_IM_STATUS_CALLBACKS was disabled, enabled it to allow Japanese - * OverTheSpot. */ - int supported_style = (int)GDK_IM_PREEDIT_NONE | - (int)GDK_IM_PREEDIT_NOTHING | - (int)GDK_IM_PREEDIT_POSITION | - (int)GDK_IM_PREEDIT_CALLBACKS | - (int)GDK_IM_STATUS_CALLBACKS | - (int)GDK_IM_STATUS_AREA | - (int)GDK_IM_STATUS_NONE | - (int)GDK_IM_STATUS_NOTHING; - -#ifdef XIM_DEBUG - xim_log("xim_decide_input_style()\n"); -#endif - - if (!gdk_im_ready()) - xim_input_style = 0; - else - { - if (gtk_major_version > 1 - || (gtk_major_version == 1 - && (gtk_minor_version > 2 - || (gtk_minor_version == 2 && gtk_micro_version >= 3)))) - use_status_area = TRUE; - else - { - EMSG(_("E291: Your GTK+ is older than 1.2.3. Status area disabled")); - use_status_area = FALSE; - } -#ifdef FEAT_XFONTSET - if (gui.fontset == NOFONTSET || gui.fontset->type != GDK_FONT_FONTSET) -#endif - supported_style &= ~((int)GDK_IM_PREEDIT_POSITION - | (int)GDK_IM_STATUS_AREA); - if (!use_status_area) - supported_style &= ~(int)GDK_IM_STATUS_AREA; - xim_input_style = (int)gdk_im_decide_style((GdkIMStyle)supported_style); - } -} - - static void -preedit_start_cbproc(XIC thexic UNUSED, - XPointer client_data UNUSED, - XPointer call_data UNUSED) -{ -#ifdef XIM_DEBUG - xim_log("xim_decide_input_style()\n"); -#endif - - draw_feedback = NULL; - xim_can_preediting = TRUE; - xim_has_preediting = TRUE; - gui_update_cursor(TRUE, FALSE); - if (showmode() > 0) - { - setcursor(); - out_flush(); - } -} - - static void -xim_back_delete(int n) -{ - char_u str[3]; - - str[0] = CSI; - str[1] = 'k'; - str[2] = 'b'; - while (n-- > 0) - add_to_input_buf(str, 3); -} - -static GSList *key_press_event_queue = NULL; -static gboolean processing_queued_event = FALSE; - - static void -preedit_draw_cbproc(XIC thexic UNUSED, - XPointer client_data UNUSED, - XPointer call_data) -{ - XIMPreeditDrawCallbackStruct *draw_data; - XIMText *text; - char *src; - GSList *event_queue; - -#ifdef XIM_DEBUG - xim_log("preedit_draw_cbproc()\n"); -#endif - - draw_data = (XIMPreeditDrawCallbackStruct *) call_data; - text = (XIMText *) draw_data->text; - - if ((text == NULL && draw_data->chg_length == preedit_buf_len) - || preedit_buf_len == 0) - { - init_preedit_start_col(); - vim_free(draw_feedback); - draw_feedback = NULL; - } - if (draw_data->chg_length > 0) - { - int bs_cnt; - - if (draw_data->chg_length > preedit_buf_len) - bs_cnt = preedit_buf_len; - else - bs_cnt = draw_data->chg_length; - xim_back_delete(bs_cnt); - preedit_buf_len -= bs_cnt; - } - if (text != NULL) - { - int len; -#ifdef FEAT_MBYTE - char_u *buf = NULL; - unsigned int nfeedback = 0; -#endif - char_u *ptr; - - src = text->string.multi_byte; - if (src != NULL && !text->encoding_is_wchar) - { - len = strlen(src); - ptr = (char_u *)src; - /* Avoid the enter for decision */ - if (*ptr == '\n') - return; - -#ifdef FEAT_MBYTE - if (input_conv.vc_type != CONV_NONE - && (buf = string_convert(&input_conv, - (char_u *)src, &len)) != NULL) - { - /* Converted from 'termencoding' to 'encoding'. */ - add_to_input_buf_csi(buf, len); - ptr = buf; - } - else -#endif - add_to_input_buf_csi((char_u *)src, len); - /* Add count of character to preedit_buf_len */ - while (*ptr != NUL) - { -#ifdef FEAT_MBYTE - if (draw_data->text->feedback != NULL) - { - if (draw_feedback == NULL) - draw_feedback = (char *)alloc(draw_data->chg_first - + text->length); - else - draw_feedback = vim_realloc(draw_feedback, - draw_data->chg_first + text->length); - if (draw_feedback != NULL) - { - draw_feedback[nfeedback + draw_data->chg_first] - = draw_data->text->feedback[nfeedback]; - nfeedback++; - } - } - if (has_mbyte) - ptr += (*mb_ptr2len)(ptr); - else -#endif - ptr++; - preedit_buf_len++; - } -#ifdef FEAT_MBYTE - vim_free(buf); -#endif - preedit_end_col = MAXCOL; - } - } - if (text != NULL || draw_data->chg_length > 0) - { - event_queue = key_press_event_queue; - processing_queued_event = TRUE; - while (event_queue != NULL && processing_queued_event) - { - GdkEvent *ev = event_queue->data; - - gboolean *ret; - gtk_signal_emit_by_name((GtkObject*)gui.mainwin, "key_press_event", - ev, &ret); - gdk_event_free(ev); - event_queue = event_queue->next; - } - processing_queued_event = FALSE; - if (key_press_event_queue) - { - g_slist_free(key_press_event_queue); - key_press_event_queue = NULL; - } - } - if (gtk_main_level() > 0) - gtk_main_quit(); -} - -/* - * Retrieve the highlighting attributes at column col in the preedit string. - * Return -1 if not in preediting mode or if col is out of range. - */ - int -im_get_feedback_attr(int col) -{ - if (draw_feedback != NULL && col < preedit_buf_len) - { - if (draw_feedback[col] & XIMReverse) - return HL_INVERSE; - else if (draw_feedback[col] & XIMUnderline) - return HL_UNDERLINE; - else - return hl_attr(HLF_V); - } - - return -1; -} - - static void -preedit_caret_cbproc(XIC thexic UNUSED, - XPointer client_data UNUSED, - XPointer call_data UNUSED) -{ -#ifdef XIM_DEBUG - xim_log("preedit_caret_cbproc()\n"); -#endif -} - - static void -preedit_done_cbproc(XIC thexic UNUSED, - XPointer client_data UNUSED, - XPointer call_data UNUSED) -{ -#ifdef XIM_DEBUG - xim_log("preedit_done_cbproc()\n"); -#endif - - vim_free(draw_feedback); - draw_feedback = NULL; - xim_can_preediting = FALSE; - xim_has_preediting = FALSE; - gui_update_cursor(TRUE, FALSE); - if (showmode() > 0) - { - setcursor(); - out_flush(); - } -} - - void -xim_reset(void) -{ - char *text; - -#ifdef XIM_DEBUG - xim_log("xim_reset()\n"); -#endif - - if (xic != NULL) - { - text = XmbResetIC(((GdkICPrivate *)xic)->xic); - if (text != NULL && !(xim_input_style & (int)GDK_IM_PREEDIT_CALLBACKS)) - add_to_input_buf_csi((char_u *)text, strlen(text)); - else - preedit_buf_len = 0; - if (text != NULL) - XFree(text); - } -} - - int -xim_queue_key_press_event(GdkEventKey *event, int down UNUSED) -{ -#ifdef XIM_DEBUG - xim_log("xim_queue_key_press_event()\n"); -#endif - - if (preedit_buf_len <= 0) - return FALSE; - if (processing_queued_event) - processing_queued_event = FALSE; - - key_press_event_queue = g_slist_append(key_press_event_queue, - gdk_event_copy((GdkEvent *)event)); - return TRUE; -} - - static void -preedit_callback_setup(GdkIC *ic UNUSED) -{ - XIC xxic; - XVaNestedList preedit_attr; - XIMCallback preedit_start_cb; - XIMCallback preedit_draw_cb; - XIMCallback preedit_caret_cb; - XIMCallback preedit_done_cb; - - xxic = ((GdkICPrivate*)xic)->xic; - preedit_start_cb.callback = (XIMProc)preedit_start_cbproc; - preedit_draw_cb.callback = (XIMProc)preedit_draw_cbproc; - preedit_caret_cb.callback = (XIMProc)preedit_caret_cbproc; - preedit_done_cb.callback = (XIMProc)preedit_done_cbproc; - preedit_attr - = XVaCreateNestedList(0, - XNPreeditStartCallback, &preedit_start_cb, - XNPreeditDrawCallback, &preedit_draw_cb, - XNPreeditCaretCallback, &preedit_caret_cb, - XNPreeditDoneCallback, &preedit_done_cb, - NULL); - XSetICValues(xxic, XNPreeditAttributes, preedit_attr, NULL); - XFree(preedit_attr); -} - - static void -reset_state_setup(GdkIC *ic UNUSED) -{ -#ifdef USE_X11R6_XIM - /* don't change the input context when we call reset */ - XSetICValues(((GdkICPrivate *)ic)->xic, XNResetState, XIMPreserveState, - NULL); -#endif -} - - void -xim_init(void) -{ -#ifdef XIM_DEBUG - xim_log("xim_init()\n"); -#endif - - xic = NULL; - xic_attr = NULL; - - if (!gdk_im_ready()) - { - if (p_verbose > 0) - { - verbose_enter(); - EMSG(_("E292: Input Method Server is not running")); - verbose_leave(); - } - return; - } - if ((xic_attr = gdk_ic_attr_new()) != NULL) - { -#ifdef FEAT_XFONTSET - gint width, height; -#endif - int mask; - GdkColormap *colormap; - GdkICAttr *attr = xic_attr; - int attrmask = (int)GDK_IC_ALL_REQ; - GtkWidget *widget = gui.drawarea; - - attr->style = (GdkIMStyle)xim_input_style; - attr->client_window = gui.mainwin->window; - - if ((colormap = gtk_widget_get_colormap(widget)) != - gtk_widget_get_default_colormap()) - { - attrmask |= (int)GDK_IC_PREEDIT_COLORMAP; - attr->preedit_colormap = colormap; - } - attrmask |= (int)GDK_IC_PREEDIT_FOREGROUND; - attrmask |= (int)GDK_IC_PREEDIT_BACKGROUND; - attr->preedit_foreground = widget->style->fg[GTK_STATE_NORMAL]; - attr->preedit_background = widget->style->base[GTK_STATE_NORMAL]; - -#ifdef FEAT_XFONTSET - if ((xim_input_style & (int)GDK_IM_PREEDIT_MASK) - == (int)GDK_IM_PREEDIT_POSITION) - { - if (gui.fontset == NOFONTSET - || gui.fontset->type != GDK_FONT_FONTSET) - { - EMSG(_(e_overthespot)); - } - else - { - gdk_window_get_size(widget->window, &width, &height); - - attrmask |= (int)GDK_IC_PREEDIT_POSITION_REQ; - attr->spot_location.x = TEXT_X(0); - attr->spot_location.y = TEXT_Y(0); - attr->preedit_area.x = gui.border_offset; - attr->preedit_area.y = gui.border_offset; - attr->preedit_area.width = width - 2*gui.border_offset; - attr->preedit_area.height = height - 2*gui.border_offset; - attr->preedit_fontset = gui.fontset; - } - } - - if ((xim_input_style & (int)GDK_IM_STATUS_MASK) - == (int)GDK_IM_STATUS_AREA) - { - if (gui.fontset == NOFONTSET - || gui.fontset->type != GDK_FONT_FONTSET) - { - EMSG(_(e_overthespot)); - } - else - { - gdk_window_get_size(gui.mainwin->window, &width, &height); - attrmask |= (int)GDK_IC_STATUS_AREA_REQ; - attr->status_area.x = 0; - attr->status_area.y = height - gui.char_height - 1; - attr->status_area.width = width; - attr->status_area.height = gui.char_height; - attr->status_fontset = gui.fontset; - } - } - else if ((xim_input_style & (int)GDK_IM_STATUS_MASK) - == (int)GDK_IM_STATUS_CALLBACKS) - { - /* FIXME */ - } -#endif - - xic = gdk_ic_new(attr, (GdkICAttributesType)attrmask); - - if (xic == NULL) - EMSG(_(e_xim)); - else - { - mask = (int)gdk_window_get_events(widget->window); - mask |= (int)gdk_ic_get_events(xic); - gdk_window_set_events(widget->window, (GdkEventMask)mask); - if (xim_input_style & (int)GDK_IM_PREEDIT_CALLBACKS) - preedit_callback_setup(xic); - reset_state_setup(xic); - } - } -} - - void -im_shutdown(void) -{ -#ifdef XIM_DEBUG - xim_log("im_shutdown()\n"); -#endif - - if (xic != NULL) - { - gdk_im_end(); - gdk_ic_destroy(xic); - xic = NULL; - } - xim_is_active = FALSE; - xim_can_preediting = FALSE; - preedit_start_col = MAXCOL; - xim_has_preediting = FALSE; -} - -#endif /* FEAT_GUI_GTK */ - int xim_get_status_area_height() { -#ifdef FEAT_GUI_GTK - if (xim_input_style & (int)GDK_IM_STATUS_AREA) - return gui.char_height; -#else if (status_area_enabled) return gui.char_height; -#endif return 0; } @@ -6487,10 +5624,6 @@ xim_get_status_area_height() int im_get_status() { -# ifdef FEAT_GUI_GTK - if (xim_input_style & (int)GDK_IM_PREEDIT_CALLBACKS) - return xim_can_preediting; -# endif return xim_has_focus; } diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -2582,7 +2582,7 @@ static struct vimoption {(char_u *)"icons,tooltips", (char_u *)0L} SCRIPTID_INIT}, #endif -#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) {"toolbariconsize", "tbis", P_STRING|P_VI_DEF, (char_u *)&p_tbis, PV_NONE, {(char_u *)"small", (char_u *)0L} SCRIPTID_INIT}, @@ -5152,7 +5152,7 @@ didset_options() #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32) (void)opt_strings_flags(p_toolbar, p_toolbar_values, &toolbar_flags, TRUE); #endif -#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) (void)opt_strings_flags(p_tbis, p_tbis_values, &tbis_flags, FALSE); #endif #ifdef FEAT_CMDWIN @@ -5825,7 +5825,7 @@ did_set_string_option(opt_idx, varp, new } } -# if defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) +# if defined(FEAT_GUI_GTK) if (errmsg == NULL && varp == &p_tenc && gui.in_use) { /* GTK+ 2 uses only a single encoding, and that is UTF-8. */ @@ -6602,7 +6602,7 @@ did_set_string_option(opt_idx, varp, new } #endif -#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) /* 'toolbariconsize': GTK+ 2 only */ else if (varp == &p_tbis) { diff --git a/src/option.h b/src/option.h --- a/src/option.h +++ b/src/option.h @@ -544,7 +544,7 @@ EXTERN int p_icon; /* 'icon' */ EXTERN char_u *p_iconstring; /* 'iconstring' */ #endif EXTERN int p_ic; /* 'ignorecase' */ -#if defined(FEAT_XIM) && (defined(FEAT_GUI_GTK)) +#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) EXTERN char_u *p_imak; /* 'imactivatekey' */ #endif #ifdef USE_IM_CONTROL @@ -790,7 +790,7 @@ static char *(p_toolbar_values[]) = {"te # define TOOLBAR_TOOLTIPS 0x04 # define TOOLBAR_HORIZ 0x08 #endif -#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) +#if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) EXTERN char_u *p_tbis; /* 'toolbariconsize' */ EXTERN unsigned tbis_flags; # ifdef IN_OPTION_C diff --git a/src/os_unix.c b/src/os_unix.c --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2991,7 +2991,6 @@ mch_free_mem() } # endif # endif - /* Don't close the display for GTK 1, it is done in exit(). */ # if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2)) if (x11_display != NULL # ifdef FEAT_XCLIPBOARD diff --git a/src/proto/gui_gtk.pro b/src/proto/gui_gtk.pro --- a/src/proto/gui_gtk.pro +++ b/src/proto/gui_gtk.pro @@ -18,6 +18,5 @@ void gui_mch_show_popupmenu __ARGS((vimm void gui_make_popup __ARGS((char_u *path_name, int mouse_pos)); void gui_mch_find_dialog __ARGS((exarg_T *eap)); void gui_mch_replace_dialog __ARGS((exarg_T *eap)); -void gui_gtk_synch_fonts __ARGS((void)); void ex_helpfind __ARGS((exarg_T *eap)); /* vim: set ft=c : */ diff --git a/src/proto/gui_gtk_x11.pro b/src/proto/gui_gtk_x11.pro --- a/src/proto/gui_gtk_x11.pro +++ b/src/proto/gui_gtk_x11.pro @@ -26,21 +26,16 @@ void gui_mch_settitle __ARGS((char_u *ti void gui_mch_enable_menu __ARGS((int showit)); void gui_mch_show_toolbar __ARGS((int showit)); int gui_mch_adjust_charheight __ARGS((void)); -GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int report_error, int fixed_width)); char_u *gui_mch_font_dialog __ARGS((char_u *oldval)); int gui_mch_init_font __ARGS((char_u *font_name, int fontset)); GuiFont gui_mch_get_font __ARGS((char_u *name, int report_error)); char_u *gui_mch_get_fontname __ARGS((GuiFont font, char_u *name)); -void gui_mch_set_font __ARGS((GuiFont font)); -void gui_mch_set_fontset __ARGS((GuiFontset fontset)); void gui_mch_free_font __ARGS((GuiFont font)); -void gui_mch_free_fontset __ARGS((GuiFontset fontset)); guicolor_T gui_mch_get_color __ARGS((char_u *name)); void gui_mch_set_fg_color __ARGS((guicolor_T color)); void gui_mch_set_bg_color __ARGS((guicolor_T color)); void gui_mch_set_sp_color __ARGS((guicolor_T color)); int gui_gtk2_draw_string __ARGS((int row, int col, char_u *s, int len, int flags)); -void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags)); int gui_mch_haskey __ARGS((char_u *name)); int gui_get_x11_windis __ARGS((Window *win, Display **dis)); Display *gui_mch_get_display __ARGS((void)); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -916,17 +916,9 @@ list_version() #else # ifdef FEAT_GUI_GTK # ifdef FEAT_GUI_GNOME -# ifdef HAVE_GTK2 MSG_PUTS(_("with GTK2-GNOME GUI.")); -# else - MSG_PUTS(_("with GTK-GNOME GUI.")); -# endif # else -# ifdef HAVE_GTK2 MSG_PUTS(_("with GTK2 GUI.")); -# else - MSG_PUTS(_("with GTK GUI.")); -# endif # endif # else # ifdef FEAT_GUI_MOTIF