Mercurial > emacs
changeset 25030:c69d9e48269b
(make_frame): Set n_current_toolbar_items to 0.
(syms_of_frame_1): Add Qtoolbar_lines.
(make_frame): Initialize toolbar members.
(make_frame): Initialize toolbar_window.
(frame-initialize): Set frame-creation-function to
tty-create-frame-with-faces.
(make_terminal_frame): Call init_frame_faces
unconditionally.
(make_frame): Call set_window_buffer instead of
Fset_window_buffer.
(make_frame): Initialze face cache with null.
(make_frame): Initialize face_cache.
(Fdelete_frame): Free it.
(Fdelete_frame): Use xfree instead of free.
(set_menu_bar_lines): Ditto.
(Fmake_terminal_frame): Ditto.
(make_frame): Initialize menu_bar_window to nil.
(make_frame): Remove CURSOR_X/Y.
(set_menu_bar_lines): Adjust matrices.
(make_frame): Initialize pools.
(make_frame): initialize DECODE_MODE_SPEC_BUFFER.
(Fmake_terminal_frame): Adjust glyphs.
(Fdelete_frame): Free glyphs.
(make_frame): Initialize matrix fields in frame.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Wed, 21 Jul 1999 21:43:52 +0000 |
parents | dc975d71a3a5 |
children | c4a2a30142bd |
files | src/frame.c |
diffstat | 1 files changed, 42 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/src/frame.c Wed Jul 21 21:43:52 1999 +0000 +++ b/src/frame.c Wed Jul 21 21:43:52 1999 +0000 @@ -84,6 +84,7 @@ Lisp_Object Qonly; Lisp_Object Qunsplittable; Lisp_Object Qmenu_bar_lines; +Lisp_Object Qtoolbar_lines; Lisp_Object Qwidth; Lisp_Object Qx; Lisp_Object Qw32; @@ -120,6 +121,8 @@ staticpro (&Qunsplittable); Qmenu_bar_lines = intern ("menu-bar-lines"); staticpro (&Qmenu_bar_lines); + Qtoolbar_lines = intern ("toolbar-lines"); + staticpro (&Qtoolbar_lines); Qwidth = intern ("width"); staticpro (&Qwidth); Qx = intern ("x"); @@ -200,6 +203,7 @@ FRAME_WINDOW_SIZES_CHANGED (f) = 1; FRAME_MENU_BAR_LINES (f) = nlines; set_menu_bar_lines_1 (f->root_window, nlines - olines); + adjust_glyphs (f); } } @@ -277,10 +281,12 @@ f = (struct frame *)vec; XSETFRAME (frame, f); - f->cursor_x = 0; - f->cursor_y = 0; - f->current_glyphs = 0; - f->desired_glyphs = 0; + f->desired_matrix = 0; + f->current_matrix = 0; + f->desired_pool = 0; + f->current_pool = 0; + f->glyphs_initialized_p = 0; + f->decode_mode_spec_buffer = 0; f->visible = 0; f->async_visible = 0; f->output_data.nothing = 0; @@ -300,6 +306,7 @@ f->scroll_bars = Qnil; f->condemned_scroll_bars = Qnil; f->face_alist = Qnil; + f->face_cache = NULL; f->menu_bar_items = Qnil; f->menu_bar_vector = Qnil; f->menu_bar_items_used = 0; @@ -310,6 +317,11 @@ #endif f->namebuf = 0; f->title = Qnil; + f->menu_bar_window = Qnil; + f->toolbar_window = Qnil; + f->desired_toolbar_items = f->current_toolbar_items = Qnil; + f->desired_toolbar_string = f->current_toolbar_string = Qnil; + f->n_desired_toolbar_items = f->n_current_toolbar_items = 0; root_window = make_window (); if (mini_p) @@ -357,18 +369,25 @@ a space), try to find another one. */ if (XSTRING (Fbuffer_name (buf))->data[0] == ' ') buf = Fother_buffer (buf, Qnil, Qnil); - Fset_window_buffer (root_window, buf); + /* Use set_window_buffer, not Fset_window_buffer, and don't let + hooks be run by it. The reason is that the whole frame/window + arrangement is not yet fully intialized at this point. Windows + don't have the right size, glyph matrices aren't initialized + etc. Running Lisp functions at this point surely ends in a + SEGV. */ + set_window_buffer (root_window, buf, 0); f->buffer_list = Fcons (buf, Qnil); } if (mini_p) { XWINDOW (mini_window)->buffer = Qt; - Fset_window_buffer (mini_window, - (NILP (Vminibuffer_list) - ? get_minibuffer (0) - : Fcar (Vminibuffer_list))); + set_window_buffer (mini_window, + (NILP (Vminibuffer_list) + ? get_minibuffer (0) + : Fcar (Vminibuffer_list)), + 0); } f->root_window = root_window; @@ -519,10 +538,10 @@ #ifdef MSDOS f->output_data.x = &the_only_x_display; f->output_method = output_msdos_raw; - init_frame_faces (f); #else /* not MSDOS */ f->output_data.nothing = 1; /* Nonzero means frame isn't deleted. */ #endif + init_frame_faces (f); return f; } @@ -550,7 +569,7 @@ f = make_terminal_frame (); change_frame_size (f, FRAME_HEIGHT (selected_frame), FRAME_WIDTH (selected_frame), 0, 0); - remake_frame_glyphs (f); + adjust_glyphs (f); calculate_costs (f); XSETFRAME (frame, f); Fmodify_frame_parameters (frame, Vdefault_frame_alist); @@ -1150,6 +1169,12 @@ x_clear_frame_selections (f); #endif + /* Free glyphs. + This function must be called before the window tree of the + frame is deleted because windows contain dynamically allocated + memory. */ + free_glyphs (f); + /* Mark all the windows that used to be on FRAME as deleted, and then remove the reference to them. */ delete_all_subwindows (XWINDOW (f->root_window)); @@ -1165,23 +1190,17 @@ } if (f->namebuf) - free (f->namebuf); - if (FRAME_CURRENT_GLYPHS (f)) - free_frame_glyphs (f, FRAME_CURRENT_GLYPHS (f)); - if (FRAME_DESIRED_GLYPHS (f)) - free_frame_glyphs (f, FRAME_DESIRED_GLYPHS (f)); - if (FRAME_TEMP_GLYPHS (f)) - free_frame_glyphs (f, FRAME_TEMP_GLYPHS (f)); + xfree (f->namebuf); if (FRAME_INSERT_COST (f)) - free (FRAME_INSERT_COST (f)); + xfree (FRAME_INSERT_COST (f)); if (FRAME_DELETEN_COST (f)) - free (FRAME_DELETEN_COST (f)); + xfree (FRAME_DELETEN_COST (f)); if (FRAME_INSERTN_COST (f)) - free (FRAME_INSERTN_COST (f)); + xfree (FRAME_INSERTN_COST (f)); if (FRAME_DELETE_COST (f)) - free (FRAME_DELETE_COST (f)); + xfree (FRAME_DELETE_COST (f)); if (FRAME_MESSAGE_BUF (f)) - free (FRAME_MESSAGE_BUF (f)); + xfree (FRAME_MESSAGE_BUF (f)); #ifdef HAVE_WINDOW_SYSTEM /* Free all fontset data. */