1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-02 03:40:36 -08:00

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
This commit is contained in:
Karoly Lorentey 2005-12-12 03:15:52 +00:00
parent d68058039e
commit 5f6a587f30
4 changed files with 37 additions and 120 deletions

View file

@ -98,11 +98,13 @@ few tricky test cases for you.
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 @@ THINGS TO DO
** 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 @@ DIARY OF CHANGES
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

109
configure vendored
View file

@ -9964,115 +9964,8 @@ _ACEOF
with_toolkit_scroll_bars=yes
fi
HAVE_GTK_MULTIDISPLAY=no
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_FILE_SELECTION=no
for ac_func in gtk_file_selection_new

View file

@ -2011,12 +2011,15 @@ if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
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

View file

@ -10141,14 +10141,26 @@ x_term_init (display_name, xrm_option, resource_name)
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)