Mercurial > emacs
changeset 83410:fea405284011
Prevent core dumps with GTK by disabling secondary X connections there.
* src/xterm.c (x_term_init) [!HAVE_GTK_MULTIDISPLAY]:
Refuse to create secondary X connections.
* configure.in (HAVE_GTK_MULTIDISPLAY): Disable test, unconditionally undefine.
* configure: Regenerate.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-450
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 12 Dec 2005 03:15:52 +0000 |
parents | be1f74bffc1d |
children | c35ff18ca977 |
files | README.multi-tty configure configure.in src/xterm.c |
diffstat | 4 files changed, 38 insertions(+), 121 deletions(-) [+] |
line wrap: on
line diff
--- a/README.multi-tty Mon Dec 12 02:37:01 2005 +0000 +++ b/README.multi-tty Mon Dec 12 03:15:52 2005 +0000 @@ -98,11 +98,13 @@ Known problems: * GTK support. If you compile your Emacs with the GTK - toolkit, some functionality of multi-tty will be lost. - In particular, closing an X display causes a crash. - Current releases of GTK have limitations and bugs that - prevent full-blown multi-display support in Emacs. Use the - Lucid toolkit if you want to see a complete feature set. + toolkit, some functionality of multi-tty will be lost. In + particular, you will not be able to work on multiple X + displays at once. Current releases of GTK have limitations + and bugs that prevent full-blown multi-display support in + Emacs. (GTK crashes when Emacs tries to disconnect from an + X server.) Use the Lucid toolkit if you want to see a + complete feature set. * The single-kboard mode. @@ -393,7 +395,10 @@ ** Report GTK multi-display problems to GTK maintainers. For extra credit, fix them. -** Disable connecting to a new X display when we use the GTK toolkit. + Currently you can not connect to new X displays when you compile + Emacs with GTK support. If you want to play around with GTK + multidisplay (and don't mind core dumps), you can edit src/config.h + and define HAVE_GTK_MULTIDISPLAY there by hand. ** Possibly turn off the double C-g feature when there is an X frame. C.f. (emacs)Emergency Escape. @@ -1278,5 +1283,9 @@ switched keyboards. I don't understand why did this bug only appear on brand new frames, though!) +-- Disable connecting to a new X display when we use the GTK toolkit. + + (Disabled in patch-450.) + ;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d
--- a/configure Mon Dec 12 02:37:01 2005 +0000 +++ b/configure Mon Dec 12 03:15:52 2005 +0000 @@ -9964,115 +9964,8 @@ with_toolkit_scroll_bars=yes fi - HAVE_GTK_MULTIDISPLAY=no - -for ac_func in gdk_display_open -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - HAVE_GTK_MULTIDISPLAY=yes -fi -done - - if test "${HAVE_GTK_MULTIDISPLAY}" = "yes"; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_GTK_MULTIDISPLAY 1 -_ACEOF - - fi + HAVE_GTK_MULTIDISPLAY=no + HAVE_GTK_FILE_SELECTION=no for ac_func in gtk_file_selection_new
--- a/configure.in Mon Dec 12 02:37:01 2005 +0000 +++ b/configure.in Mon Dec 12 03:15:52 2005 +0000 @@ -2011,12 +2011,15 @@ dnl Check if we can use multiple displays with this GTK version. dnl If gdk_display_open exists, assume all others are there also. + dnl XXX The multidisplay feature is severely broken in current GTK + dnl versions. --lorentey HAVE_GTK_MULTIDISPLAY=no - AC_CHECK_FUNCS(gdk_display_open, HAVE_GTK_MULTIDISPLAY=yes) - if test "${HAVE_GTK_MULTIDISPLAY}" = "yes"; then - AC_DEFINE(HAVE_GTK_MULTIDISPLAY, 1, - [Define to 1 if GTK can handle more than one display.]) - fi + dnl AC_CHECK_FUNCS(gdk_display_open, HAVE_GTK_MULTIDISPLAY=yes) + dnl if test "${HAVE_GTK_MULTIDISPLAY}" = "yes"; then + dnl AC_DEFINE(HAVE_GTK_MULTIDISPLAY, 1, + dnl [Define to 1 if GTK can handle more than one display.]) + dnl fi + dnl Check if we have the old file selection dialog. dnl If gdk_display_open exists, assume all others are there also. HAVE_GTK_FILE_SELECTION=no
--- a/src/xterm.c Mon Dec 12 02:37:01 2005 +0000 +++ b/src/xterm.c Mon Dec 12 03:15:52 2005 +0000 @@ -10141,14 +10141,26 @@ char **argv2 = argv; GdkAtom atom; +#ifndef HAVE_GTK_MULTIDISPLAY + if (!EQ (Vinitial_window_system, intern ("x"))) + error ("Sorry, you cannot connect to X servers with the GTK toolkit"); +#endif + if (x_initialized++ > 1) { +#ifdef HAVE_GTK_MULTIDISPLAY /* Opening another display. If xg_display_open returns less than zero, we are probably on GTK 2.0, which can only handle one display. GTK 2.2 or later can handle more than one. */ if (xg_display_open (SDATA (display_name), &dpy) < 0) error ("Sorry, this version of GTK can only handle one display"); - } +#else + /* XXX Unfortunately, multiple display support is severely broken + in recent GTK versions, so HAVE_GTK_MULTIDISPLAY is + unconditionally disabled in configure.in. */ + error ("Sorry, multiple display support is broken in current GTK versions"); +#endif + } else { for (argc = 0; argc < NUM_ARGV; ++argc)