diff options
| author | Stefan Monnier | 2007-11-16 21:23:07 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2007-11-16 21:23:07 +0000 |
| commit | b05b4e2787f085af0ebdf2ed1705e5f4f799dee5 (patch) | |
| tree | 557e83715e47184816036669530439db522a1ec0 | |
| parent | 056ce1959724bce0b79983a2b88d193def718adb (diff) | |
| download | emacs-b05b4e2787f085af0ebdf2ed1705e5f4f799dee5.tar.gz emacs-b05b4e2787f085af0ebdf2ed1705e5f4f799dee5.zip | |
(struct save_window_data): Move non-lisp data to the end
and make it `int' rather than Lisp_Object.
(Fcurrent_window_configuration): Use ALLOCATE_PSEUDOVECTOR.
Done wrap/unwrap integer values.
(Fset_window_configuration, compare_window_configurations):
Update use of fields to their new types.
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/window.c | 66 |
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 @@ | |||
| 1 | 2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca> | 1 | 2007-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. */ |