mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-27 16:51:06 -07:00
(x_term_init): Instead of inhibiting GC while running Lisp
code, link the new kboard into all_kboard before running Lisp code, and protect the new terminal with GCPRO (Bug#5365). (x_term_init): Remove unused var `atom'. (x_delete_display, x_delete_terminal): Remove unused var `i'.
This commit is contained in:
parent
045b9da787
commit
523ae620e8
2 changed files with 26 additions and 10 deletions
|
|
@ -1,3 +1,11 @@
|
|||
2010-01-16 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* xterm.c (x_term_init): Instead of inhibiting GC while running Lisp
|
||||
code, link the new kboard into all_kboard before running Lisp code,
|
||||
and protect the new terminal with GCPRO (Bug#5365).
|
||||
(x_term_init): Remove unused var `atom'.
|
||||
(x_delete_display, x_delete_terminal): Remove unused var `i'.
|
||||
|
||||
2010-01-15 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* xfns.c (x_get_current_desktop, x_get_desktop_workarea): New functions.
|
||||
|
|
|
|||
28
src/xterm.c
28
src/xterm.c
|
|
@ -9821,7 +9821,7 @@ x_wm_set_icon_pixmap (f, pixmap_id)
|
|||
{
|
||||
Pixmap icon_pixmap, icon_mask;
|
||||
|
||||
#ifndef USE_X_TOOLKIT
|
||||
#if !defined USE_X_TOOLKIT && !defined USE_GTK
|
||||
Window window = FRAME_OUTER_WINDOW (f);
|
||||
#endif
|
||||
|
||||
|
|
@ -10076,7 +10076,6 @@ x_term_init (display_name, xrm_option, resource_name)
|
|||
int argc;
|
||||
char *argv[NUM_ARGV];
|
||||
char **argv2 = argv;
|
||||
GdkAtom atom;
|
||||
guint id;
|
||||
#ifndef HAVE_GTK_MULTIDISPLAY
|
||||
if (!EQ (Vinitial_window_system, Qx))
|
||||
|
|
@ -10215,25 +10214,36 @@ x_term_init (display_name, xrm_option, resource_name)
|
|||
terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
|
||||
init_kboard (terminal->kboard);
|
||||
terminal->kboard->Vwindow_system = Qx;
|
||||
|
||||
/* Add the keyboard to the list before running Lisp code (via
|
||||
Qvendor_specific_keysyms below), since these are not traced
|
||||
via terminals but only through all_kboards. */
|
||||
terminal->kboard->next_kboard = all_kboards;
|
||||
all_kboards = terminal->kboard;
|
||||
|
||||
if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
|
||||
{
|
||||
char *vendor = ServerVendor (dpy);
|
||||
/* Temporarily hide the partially initialized terminal,
|
||||
but make sure it doesn't get garbage collected. */
|
||||
int count = inhibit_garbage_collection ();
|
||||
|
||||
/* Protect terminal from GC before removing it from the
|
||||
list of terminals. */
|
||||
struct gcpro gcpro1;
|
||||
Lisp_Object gcpro_term;
|
||||
XSETTERMINAL (gcpro_term, terminal);
|
||||
GCPRO1 (gcpro_term);
|
||||
|
||||
/* Temporarily hide the partially initialized terminal. */
|
||||
terminal_list = terminal->next_terminal;
|
||||
UNBLOCK_INPUT;
|
||||
terminal->kboard->Vsystem_key_alist
|
||||
= call1 (Qvendor_specific_keysyms,
|
||||
vendor ? build_string (vendor) : empty_unibyte_string);
|
||||
BLOCK_INPUT;
|
||||
unbind_to (count, Qnil);
|
||||
terminal->next_terminal = terminal_list;
|
||||
terminal_list = terminal;
|
||||
UNGCPRO;
|
||||
}
|
||||
|
||||
terminal->kboard->next_kboard = all_kboards;
|
||||
all_kboards = terminal->kboard;
|
||||
/* Don't let the initial kboard remain current longer than necessary.
|
||||
That would cause problems if a file loaded on startup tries to
|
||||
prompt in the mini-buffer. */
|
||||
|
|
@ -10582,7 +10592,6 @@ void
|
|||
x_delete_display (dpyinfo)
|
||||
struct x_display_info *dpyinfo;
|
||||
{
|
||||
int i;
|
||||
struct terminal *t;
|
||||
|
||||
/* Close all frames and delete the generic struct terminal for this
|
||||
|
|
@ -10734,7 +10743,6 @@ void
|
|||
x_delete_terminal (struct terminal *terminal)
|
||||
{
|
||||
struct x_display_info *dpyinfo = terminal->display_info.x;
|
||||
int i;
|
||||
|
||||
/* Protect against recursive calls. delete_frame in
|
||||
delete_terminal calls us back when it deletes our last frame. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue