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:
parent
d68058039e
commit
5f6a587f30
4 changed files with 37 additions and 120 deletions
|
|
@ -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
109
configure
vendored
|
|
@ -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
|
||||
|
|
|
|||
13
configure.in
13
configure.in
|
|
@ -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
|
||||
|
|
|
|||
14
src/xterm.c
14
src/xterm.c
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue