aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog7
-rw-r--r--src/window.c66
2 files changed, 42 insertions, 31 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 85f9736da7b..c0d55b6ca04 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,12 @@
12007-11-16 Stefan Monnier <monnier@iro.umontreal.ca> 12007-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
2 2
3 * window.c (struct save_window_data): Move non-lisp data to the end
4 and make it `int' rather than Lisp_Object.
5 (Fcurrent_window_configuration): Use ALLOCATE_PSEUDOVECTOR.
6 Done wrap/unwrap integer values.
7 (Fset_window_configuration, compare_window_configurations):
8 Update use of fields to their new types.
9
3 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data. 10 * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
4 Turn integer fields into `int'. Merge x_window_low and x_window_high. 11 Turn integer fields into `int'. Merge x_window_low and x_window_high.
5 (SCROLL_BAR_PACK, SCROLL_BAR_UNPACK, SCROLL_BAR_X_WINDOW) 12 (SCROLL_BAR_PACK, SCROLL_BAR_UNPACK, SCROLL_BAR_X_WINDOW)
diff --git a/src/window.c b/src/window.c
index 0395f8f300d..d0f351261e1 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6053,8 +6053,6 @@ struct save_window_data
6053 { 6053 {
6054 EMACS_UINT size; 6054 EMACS_UINT size;
6055 struct Lisp_Vector *next_from_Lisp_Vector_struct; 6055 struct Lisp_Vector *next_from_Lisp_Vector_struct;
6056 Lisp_Object frame_cols, frame_lines, frame_menu_bar_lines;
6057 Lisp_Object frame_tool_bar_lines;
6058 Lisp_Object selected_frame; 6056 Lisp_Object selected_frame;
6059 Lisp_Object current_window; 6057 Lisp_Object current_window;
6060 Lisp_Object current_buffer; 6058 Lisp_Object current_buffer;
@@ -6062,12 +6060,18 @@ struct save_window_data
6062 Lisp_Object minibuf_selected_window; 6060 Lisp_Object minibuf_selected_window;
6063 Lisp_Object root_window; 6061 Lisp_Object root_window;
6064 Lisp_Object focus_frame; 6062 Lisp_Object focus_frame;
6065 /* Record the values of window-min-width and window-min-height
6066 so that window sizes remain consistent with them. */
6067 Lisp_Object min_width, min_height;
6068 /* A vector, each of whose elements is a struct saved_window 6063 /* A vector, each of whose elements is a struct saved_window
6069 for one window. */ 6064 for one window. */
6070 Lisp_Object saved_windows; 6065 Lisp_Object saved_windows;
6066
6067 /* All fields above are traced by the GC.
6068 From `fame-cols' down, the fields are ignored by the GC. */
6069
6070 int frame_cols, frame_lines, frame_menu_bar_lines;
6071 int frame_tool_bar_lines;
6072 /* Record the values of window-min-width and window-min-height
6073 so that window sizes remain consistent with them. */
6074 int min_width, min_height;
6071 }; 6075 };
6072 6076
6073/* This is saved as a Lisp_Vector */ 6077/* This is saved as a Lisp_Vector */
@@ -6207,18 +6211,20 @@ the return value is nil. Otherwise the value is t. */)
6207 if it runs during this. */ 6211 if it runs during this. */
6208 BLOCK_INPUT; 6212 BLOCK_INPUT;
6209 6213
6210 if (XFASTINT (data->frame_lines) != previous_frame_lines 6214 if (data->frame_lines != previous_frame_lines
6211 || XFASTINT (data->frame_cols) != previous_frame_cols) 6215 || data->frame_cols != previous_frame_cols)
6212 change_frame_size (f, XFASTINT (data->frame_lines), 6216 change_frame_size (f, data->frame_lines,
6213 XFASTINT (data->frame_cols), 0, 0, 0); 6217 data->frame_cols, 0, 0, 0);
6214#if defined (HAVE_WINDOW_SYSTEM) || defined (MSDOS) 6218#if defined (HAVE_WINDOW_SYSTEM) || defined (MSDOS)
6215 if (XFASTINT (data->frame_menu_bar_lines) 6219 if (data->frame_menu_bar_lines
6216 != previous_frame_menu_bar_lines) 6220 != previous_frame_menu_bar_lines)
6217 x_set_menu_bar_lines (f, data->frame_menu_bar_lines, make_number (0)); 6221 x_set_menu_bar_lines (f, make_number (data->frame_menu_bar_lines),
6222 make_number (0));
6218#ifdef HAVE_WINDOW_SYSTEM 6223#ifdef HAVE_WINDOW_SYSTEM
6219 if (XFASTINT (data->frame_tool_bar_lines) 6224 if (data->frame_tool_bar_lines
6220 != previous_frame_tool_bar_lines) 6225 != previous_frame_tool_bar_lines)
6221 x_set_tool_bar_lines (f, data->frame_tool_bar_lines, make_number (0)); 6226 x_set_tool_bar_lines (f, make_number (data->frame_tool_bar_lines),
6227 make_number (0));
6222#endif 6228#endif
6223#endif 6229#endif
6224 6230
@@ -6452,8 +6458,8 @@ the return value is nil. Otherwise the value is t. */)
6452 Fset_buffer (new_current_buffer); 6458 Fset_buffer (new_current_buffer);
6453 6459
6454 /* Restore the minimum heights recorded in the configuration. */ 6460 /* Restore the minimum heights recorded in the configuration. */
6455 window_min_height = XINT (data->min_height); 6461 window_min_height = data->min_height;
6456 window_min_width = XINT (data->min_width); 6462 window_min_width = data->min_width;
6457 6463
6458 Vminibuf_scroll_window = data->minibuf_scroll_window; 6464 Vminibuf_scroll_window = data->minibuf_scroll_window;
6459 minibuf_selected_window = data->minibuf_selected_window; 6465 minibuf_selected_window = data->minibuf_selected_window;
@@ -6654,7 +6660,6 @@ redirection (see `redirect-frame-focus'). */)
6654 register Lisp_Object tem; 6660 register Lisp_Object tem;
6655 register int n_windows; 6661 register int n_windows;
6656 register struct save_window_data *data; 6662 register struct save_window_data *data;
6657 register struct Lisp_Vector *vec;
6658 register int i; 6663 register int i;
6659 FRAME_PTR f; 6664 FRAME_PTR f;
6660 6665
@@ -6664,14 +6669,13 @@ redirection (see `redirect-frame-focus'). */)
6664 f = XFRAME (frame); 6669 f = XFRAME (frame);
6665 6670
6666 n_windows = count_windows (XWINDOW (FRAME_ROOT_WINDOW (f))); 6671 n_windows = count_windows (XWINDOW (FRAME_ROOT_WINDOW (f)));
6667 vec = allocate_other_vector (VECSIZE (struct save_window_data)); 6672 data = ALLOCATE_PSEUDOVECTOR (struct save_window_data, frame_cols,
6668 XSETPVECTYPE (vec, PVEC_WINDOW_CONFIGURATION); 6673 PVEC_WINDOW_CONFIGURATION);
6669 data = (struct save_window_data *)vec; 6674
6670 6675 data->frame_cols = FRAME_COLS (f);
6671 XSETFASTINT (data->frame_cols, FRAME_COLS (f)); 6676 data->frame_lines = FRAME_LINES (f);
6672 XSETFASTINT (data->frame_lines, FRAME_LINES (f)); 6677 data->frame_menu_bar_lines = FRAME_MENU_BAR_LINES (f);
6673 XSETFASTINT (data->frame_menu_bar_lines, FRAME_MENU_BAR_LINES (f)); 6678 data->frame_tool_bar_lines = FRAME_TOOL_BAR_LINES (f);
6674 XSETFASTINT (data->frame_tool_bar_lines, FRAME_TOOL_BAR_LINES (f));
6675 data->selected_frame = selected_frame; 6679 data->selected_frame = selected_frame;
6676 data->current_window = FRAME_SELECTED_WINDOW (f); 6680 data->current_window = FRAME_SELECTED_WINDOW (f);
6677 XSETBUFFER (data->current_buffer, current_buffer); 6681 XSETBUFFER (data->current_buffer, current_buffer);
@@ -6679,8 +6683,8 @@ redirection (see `redirect-frame-focus'). */)
6679 data->minibuf_selected_window = minibuf_level > 0 ? minibuf_selected_window : Qnil; 6683 data->minibuf_selected_window = minibuf_level > 0 ? minibuf_selected_window : Qnil;
6680 data->root_window = FRAME_ROOT_WINDOW (f); 6684 data->root_window = FRAME_ROOT_WINDOW (f);
6681 data->focus_frame = FRAME_FOCUS_FRAME (f); 6685 data->focus_frame = FRAME_FOCUS_FRAME (f);
6682 XSETINT (data->min_height, window_min_height); 6686 data->min_height = window_min_height;
6683 XSETINT (data->min_width, window_min_width); 6687 data->min_width = window_min_width;
6684 tem = Fmake_vector (make_number (n_windows), Qnil); 6688 tem = Fmake_vector (make_number (n_windows), Qnil);
6685 data->saved_windows = tem; 6689 data->saved_windows = tem;
6686 for (i = 0; i < n_windows; i++) 6690 for (i = 0; i < n_windows; i++)
@@ -7187,11 +7191,11 @@ compare_window_configurations (c1, c2, ignore_positions)
7187 sw1 = XVECTOR (d1->saved_windows); 7191 sw1 = XVECTOR (d1->saved_windows);
7188 sw2 = XVECTOR (d2->saved_windows); 7192 sw2 = XVECTOR (d2->saved_windows);
7189 7193
7190 if (! EQ (d1->frame_cols, d2->frame_cols)) 7194 if (d1->frame_cols != d2->frame_cols)
7191 return 0; 7195 return 0;
7192 if (! EQ (d1->frame_lines, d2->frame_lines)) 7196 if (d1->frame_lines != d2->frame_lines)
7193 return 0; 7197 return 0;
7194 if (! EQ (d1->frame_menu_bar_lines, d2->frame_menu_bar_lines)) 7198 if (d1->frame_menu_bar_lines != d2->frame_menu_bar_lines)
7195 return 0; 7199 return 0;
7196 if (! EQ (d1->selected_frame, d2->selected_frame)) 7200 if (! EQ (d1->selected_frame, d2->selected_frame))
7197 return 0; 7201 return 0;
@@ -7213,9 +7217,9 @@ compare_window_configurations (c1, c2, ignore_positions)
7213 if everything else compares equal. */ 7217 if everything else compares equal. */
7214 if (! EQ (d1->focus_frame, d2->focus_frame)) 7218 if (! EQ (d1->focus_frame, d2->focus_frame))
7215 return 0; 7219 return 0;
7216 if (! EQ (d1->min_width, d2->min_width)) 7220 if (d1->min_width != d2->min_width)
7217 return 0; 7221 return 0;
7218 if (! EQ (d1->min_height, d2->min_height)) 7222 if (d1->min_height != d2->min_height)
7219 return 0; 7223 return 0;
7220 7224
7221 /* Verify that the two confis have the same number of windows. */ 7225 /* Verify that the two confis have the same number of windows. */