Mercurial > emacs
comparison src/window.c @ 16051:ccf489f8596e
Removed support for !MULTI_FRAME.
| author | Karl Heuer <kwzh@gnu.org> |
|---|---|
| date | Sun, 01 Sep 1996 21:04:32 +0000 |
| parents | 855c8d8ba0f0 |
| children | b19129a8c644 |
comparison
equal
deleted
inserted
replaced
| 16050:c2805a244171 | 16051:ccf489f8596e |
|---|---|
| 174 If the optional argument FRAME is specified, return the minibuffer window\n\ | 174 If the optional argument FRAME is specified, return the minibuffer window\n\ |
| 175 used by that frame.") | 175 used by that frame.") |
| 176 (frame) | 176 (frame) |
| 177 Lisp_Object frame; | 177 Lisp_Object frame; |
| 178 { | 178 { |
| 179 #ifdef MULTI_FRAME | |
| 180 if (NILP (frame)) | 179 if (NILP (frame)) |
| 181 XSETFRAME (frame, selected_frame); | 180 XSETFRAME (frame, selected_frame); |
| 182 else | 181 else |
| 183 CHECK_LIVE_FRAME (frame, 0); | 182 CHECK_LIVE_FRAME (frame, 0); |
| 184 #endif | |
| 185 | 183 |
| 186 return FRAME_MINIBUF_WINDOW (XFRAME (frame)); | 184 return FRAME_MINIBUF_WINDOW (XFRAME (frame)); |
| 187 } | 185 } |
| 188 | 186 |
| 189 DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, Swindow_minibuffer_p, 0, 1, 0, | 187 DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, Swindow_minibuffer_p, 0, 1, 0, |
| 485 (x, y, frame) | 483 (x, y, frame) |
| 486 Lisp_Object x, y, frame; | 484 Lisp_Object x, y, frame; |
| 487 { | 485 { |
| 488 int part; | 486 int part; |
| 489 | 487 |
| 490 #ifdef MULTI_FRAME | |
| 491 if (NILP (frame)) | 488 if (NILP (frame)) |
| 492 XSETFRAME (frame, selected_frame); | 489 XSETFRAME (frame, selected_frame); |
| 493 else | 490 else |
| 494 CHECK_LIVE_FRAME (frame, 2); | 491 CHECK_LIVE_FRAME (frame, 2); |
| 495 #endif | |
| 496 CHECK_NUMBER (x, 0); | 492 CHECK_NUMBER (x, 0); |
| 497 CHECK_NUMBER (y, 1); | 493 CHECK_NUMBER (y, 1); |
| 498 | 494 |
| 499 return window_from_coordinates (XFRAME (frame), | 495 return window_from_coordinates (XFRAME (frame), |
| 500 XINT (x), XINT (y), | 496 XINT (x), XINT (y), |
| 953 minibuf = Qlambda; | 949 minibuf = Qlambda; |
| 954 /* Now minibuf can be t => count all minibuffer windows, | 950 /* Now minibuf can be t => count all minibuffer windows, |
| 955 lambda => count none of them, | 951 lambda => count none of them, |
| 956 or a specific minibuffer window (the active one) to count. */ | 952 or a specific minibuffer window (the active one) to count. */ |
| 957 | 953 |
| 958 #ifdef MULTI_FRAME | |
| 959 /* all_frames == nil doesn't specify which frames to include. */ | 954 /* all_frames == nil doesn't specify which frames to include. */ |
| 960 if (NILP (all_frames)) | 955 if (NILP (all_frames)) |
| 961 all_frames = (! EQ (minibuf, Qlambda) | 956 all_frames = (! EQ (minibuf, Qlambda) |
| 962 ? (FRAME_MINIBUF_WINDOW | 957 ? (FRAME_MINIBUF_WINDOW |
| 963 (XFRAME | 958 (XFRAME |
| 977 /* Now all_frames is t meaning search all frames, | 972 /* Now all_frames is t meaning search all frames, |
| 978 nil meaning search just current frame, | 973 nil meaning search just current frame, |
| 979 visible meaning search just visible frames, | 974 visible meaning search just visible frames, |
| 980 0 meaning search visible and iconified frames, | 975 0 meaning search visible and iconified frames, |
| 981 or a window, meaning search the frame that window belongs to. */ | 976 or a window, meaning search the frame that window belongs to. */ |
| 982 #endif | |
| 983 | 977 |
| 984 /* Do this loop at least once, to get the next window, and perhaps | 978 /* Do this loop at least once, to get the next window, and perhaps |
| 985 again, if we hit the minibuffer and that is not acceptable. */ | 979 again, if we hit the minibuffer and that is not acceptable. */ |
| 986 do | 980 do |
| 987 { | 981 { |
| 993 else | 987 else |
| 994 { | 988 { |
| 995 /* We've reached the end of this frame. | 989 /* We've reached the end of this frame. |
| 996 Which other frames are acceptable? */ | 990 Which other frames are acceptable? */ |
| 997 tem = WINDOW_FRAME (XWINDOW (window)); | 991 tem = WINDOW_FRAME (XWINDOW (window)); |
| 998 #ifdef MULTI_FRAME | |
| 999 if (! NILP (all_frames)) | 992 if (! NILP (all_frames)) |
| 1000 { | 993 { |
| 1001 Lisp_Object tem1; | 994 Lisp_Object tem1; |
| 1002 | 995 |
| 1003 tem1 = tem; | 996 tem1 = tem; |
| 1008 If that happens, go back to the selected frame | 1001 If that happens, go back to the selected frame |
| 1009 so we can complete the cycle. */ | 1002 so we can complete the cycle. */ |
| 1010 if (EQ (tem, tem1)) | 1003 if (EQ (tem, tem1)) |
| 1011 XSETFRAME (tem, selected_frame); | 1004 XSETFRAME (tem, selected_frame); |
| 1012 } | 1005 } |
| 1013 #endif | |
| 1014 tem = FRAME_ROOT_WINDOW (XFRAME (tem)); | 1006 tem = FRAME_ROOT_WINDOW (XFRAME (tem)); |
| 1015 | 1007 |
| 1016 break; | 1008 break; |
| 1017 } | 1009 } |
| 1018 | 1010 |
| 1099 minibuf = Qlambda; | 1091 minibuf = Qlambda; |
| 1100 /* Now minibuf can be t => count all minibuffer windows, | 1092 /* Now minibuf can be t => count all minibuffer windows, |
| 1101 lambda => count none of them, | 1093 lambda => count none of them, |
| 1102 or a specific minibuffer window (the active one) to count. */ | 1094 or a specific minibuffer window (the active one) to count. */ |
| 1103 | 1095 |
| 1104 #ifdef MULTI_FRAME | |
| 1105 /* all_frames == nil doesn't specify which frames to include. | 1096 /* all_frames == nil doesn't specify which frames to include. |
| 1106 Decide which frames it includes. */ | 1097 Decide which frames it includes. */ |
| 1107 if (NILP (all_frames)) | 1098 if (NILP (all_frames)) |
| 1108 all_frames = (! EQ (minibuf, Qlambda) | 1099 all_frames = (! EQ (minibuf, Qlambda) |
| 1109 ? (FRAME_MINIBUF_WINDOW | 1100 ? (FRAME_MINIBUF_WINDOW |
| 1124 /* Now all_frames is t meaning search all frames, | 1115 /* Now all_frames is t meaning search all frames, |
| 1125 nil meaning search just current frame, | 1116 nil meaning search just current frame, |
| 1126 visible meaning search just visible frames, | 1117 visible meaning search just visible frames, |
| 1127 0 meaning search visible and iconified frames, | 1118 0 meaning search visible and iconified frames, |
| 1128 or a window, meaning search the frame that window belongs to. */ | 1119 or a window, meaning search the frame that window belongs to. */ |
| 1129 #endif | |
| 1130 | 1120 |
| 1131 /* Do this loop at least once, to get the previous window, and perhaps | 1121 /* Do this loop at least once, to get the previous window, and perhaps |
| 1132 again, if we hit the minibuffer and that is not acceptable. */ | 1122 again, if we hit the minibuffer and that is not acceptable. */ |
| 1133 do | 1123 do |
| 1134 { | 1124 { |
| 1140 else | 1130 else |
| 1141 { | 1131 { |
| 1142 /* We have found the top window on the frame. | 1132 /* We have found the top window on the frame. |
| 1143 Which frames are acceptable? */ | 1133 Which frames are acceptable? */ |
| 1144 tem = WINDOW_FRAME (XWINDOW (window)); | 1134 tem = WINDOW_FRAME (XWINDOW (window)); |
| 1145 #ifdef MULTI_FRAME | |
| 1146 if (! NILP (all_frames)) | 1135 if (! NILP (all_frames)) |
| 1147 /* It's actually important that we use prev_frame here, | 1136 /* It's actually important that we use prev_frame here, |
| 1148 rather than next_frame. All the windows acceptable | 1137 rather than next_frame. All the windows acceptable |
| 1149 according to the given parameters should form a ring; | 1138 according to the given parameters should form a ring; |
| 1150 Fnext_window and Fprevious_window should go back and | 1139 Fnext_window and Fprevious_window should go back and |
| 1164 If that happens, go back to the selected frame | 1153 If that happens, go back to the selected frame |
| 1165 so we can complete the cycle. */ | 1154 so we can complete the cycle. */ |
| 1166 if (EQ (tem, tem1)) | 1155 if (EQ (tem, tem1)) |
| 1167 XSETFRAME (tem, selected_frame); | 1156 XSETFRAME (tem, selected_frame); |
| 1168 } | 1157 } |
| 1169 #endif | |
| 1170 /* If this frame has a minibuffer, find that window first, | 1158 /* If this frame has a minibuffer, find that window first, |
| 1171 because it is conceptually the last window in that frame. */ | 1159 because it is conceptually the last window in that frame. */ |
| 1172 if (FRAME_HAS_MINIBUF_P (XFRAME (tem))) | 1160 if (FRAME_HAS_MINIBUF_P (XFRAME (tem))) |
| 1173 tem = FRAME_MINIBUF_WINDOW (XFRAME (tem)); | 1161 tem = FRAME_MINIBUF_WINDOW (XFRAME (tem)); |
| 1174 else | 1162 else |
| 1267 register Lisp_Object last_window; | 1255 register Lisp_Object last_window; |
| 1268 FRAME_PTR frame; | 1256 FRAME_PTR frame; |
| 1269 Lisp_Object frame_arg; | 1257 Lisp_Object frame_arg; |
| 1270 frame_arg = Qt; | 1258 frame_arg = Qt; |
| 1271 | 1259 |
| 1272 #ifdef MULTI_FRAME | |
| 1273 /* If we're only looping through windows on a particular frame, | 1260 /* If we're only looping through windows on a particular frame, |
| 1274 frame points to that frame. If we're looping through windows | 1261 frame points to that frame. If we're looping through windows |
| 1275 on all frames, frame is 0. */ | 1262 on all frames, frame is 0. */ |
| 1276 if (FRAMEP (frames)) | 1263 if (FRAMEP (frames)) |
| 1277 frame = XFRAME (frames); | 1264 frame = XFRAME (frames); |
| 1283 frame_arg = Qlambda; | 1270 frame_arg = Qlambda; |
| 1284 else if (XFASTINT (frames) == 0) | 1271 else if (XFASTINT (frames) == 0) |
| 1285 frame_arg = frames; | 1272 frame_arg = frames; |
| 1286 else if (EQ (frames, Qvisible)) | 1273 else if (EQ (frames, Qvisible)) |
| 1287 frame_arg = frames; | 1274 frame_arg = frames; |
| 1288 #else | |
| 1289 frame = 0; | |
| 1290 #endif | |
| 1291 | 1275 |
| 1292 /* frame_arg is Qlambda to stick to one frame, | 1276 /* frame_arg is Qlambda to stick to one frame, |
| 1293 Qvisible to consider all visible frames, | 1277 Qvisible to consider all visible frames, |
| 1294 or Qt otherwise. */ | 1278 or Qt otherwise. */ |
| 1295 | 1279 |
| 1352 break; | 1336 break; |
| 1353 | 1337 |
| 1354 case DELETE_BUFFER_WINDOWS: | 1338 case DELETE_BUFFER_WINDOWS: |
| 1355 if (EQ (XWINDOW (w)->buffer, obj)) | 1339 if (EQ (XWINDOW (w)->buffer, obj)) |
| 1356 { | 1340 { |
| 1357 #ifdef MULTI_FRAME | |
| 1358 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (w))); | 1341 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (w))); |
| 1359 | 1342 |
| 1360 /* If this window is dedicated, and in a frame of its own, | 1343 /* If this window is dedicated, and in a frame of its own, |
| 1361 kill the frame. */ | 1344 kill the frame. */ |
| 1362 if (EQ (w, FRAME_ROOT_WINDOW (f)) | 1345 if (EQ (w, FRAME_ROOT_WINDOW (f)) |
| 1381 } | 1364 } |
| 1382 /* Now we can safely delete the frame. */ | 1365 /* Now we can safely delete the frame. */ |
| 1383 Fdelete_frame (WINDOW_FRAME (XWINDOW (w)), Qnil); | 1366 Fdelete_frame (WINDOW_FRAME (XWINDOW (w)), Qnil); |
| 1384 } | 1367 } |
| 1385 else | 1368 else |
| 1386 #endif | |
| 1387 /* If we're deleting the buffer displayed in the only window | 1369 /* If we're deleting the buffer displayed in the only window |
| 1388 on the frame, find a new buffer to display there. */ | 1370 on the frame, find a new buffer to display there. */ |
| 1389 if (NILP (XWINDOW (w)->parent)) | 1371 if (NILP (XWINDOW (w)->parent)) |
| 1390 { | 1372 { |
| 1391 Lisp_Object new_buffer; | 1373 Lisp_Object new_buffer; |
| 1426 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (w))); | 1408 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (w))); |
| 1427 another_buffer = Fother_buffer (obj, Qnil); | 1409 another_buffer = Fother_buffer (obj, Qnil); |
| 1428 if (NILP (another_buffer)) | 1410 if (NILP (another_buffer)) |
| 1429 another_buffer | 1411 another_buffer |
| 1430 = Fget_buffer_create (build_string ("*scratch*")); | 1412 = Fget_buffer_create (build_string ("*scratch*")); |
| 1431 #ifdef MULTI_FRAME | |
| 1432 /* If this window is dedicated, and in a frame of its own, | 1413 /* If this window is dedicated, and in a frame of its own, |
| 1433 kill the frame. */ | 1414 kill the frame. */ |
| 1434 if (EQ (w, FRAME_ROOT_WINDOW (f)) | 1415 if (EQ (w, FRAME_ROOT_WINDOW (f)) |
| 1435 && !NILP (XWINDOW (w)->dedicated) | 1416 && !NILP (XWINDOW (w)->dedicated) |
| 1436 && other_visible_frames (f)) | 1417 && other_visible_frames (f)) |
| 1453 } | 1434 } |
| 1454 /* Now we can safely delete the frame. */ | 1435 /* Now we can safely delete the frame. */ |
| 1455 Fdelete_frame (WINDOW_FRAME (XWINDOW (w)), Qnil); | 1436 Fdelete_frame (WINDOW_FRAME (XWINDOW (w)), Qnil); |
| 1456 } | 1437 } |
| 1457 else | 1438 else |
| 1458 #endif | |
| 1459 { | 1439 { |
| 1460 /* Otherwise show a different buffer in the window. */ | 1440 /* Otherwise show a different buffer in the window. */ |
| 1461 XWINDOW (w)->dedicated = Qnil; | 1441 XWINDOW (w)->dedicated = Qnil; |
| 1462 Fset_window_buffer (w, another_buffer); | 1442 Fset_window_buffer (w, another_buffer); |
| 1463 if (EQ (w, selected_window)) | 1443 if (EQ (w, selected_window)) |
| 1595 If `visible', delete all windows showing BUFFER in any visible frame.\n\ | 1575 If `visible', delete all windows showing BUFFER in any visible frame.\n\ |
| 1596 If a frame, delete only windows showing BUFFER in that frame.") | 1576 If a frame, delete only windows showing BUFFER in that frame.") |
| 1597 (buffer, frame) | 1577 (buffer, frame) |
| 1598 Lisp_Object buffer, frame; | 1578 Lisp_Object buffer, frame; |
| 1599 { | 1579 { |
| 1600 #ifdef MULTI_FRAME | |
| 1601 /* FRAME uses t and nil to mean the opposite of what window_loop | 1580 /* FRAME uses t and nil to mean the opposite of what window_loop |
| 1602 expects. */ | 1581 expects. */ |
| 1603 if (! FRAMEP (frame)) | 1582 if (! FRAMEP (frame)) |
| 1604 frame = NILP (frame) ? Qt : Qnil; | 1583 frame = NILP (frame) ? Qt : Qnil; |
| 1605 #else | |
| 1606 frame = Qt; | |
| 1607 #endif | |
| 1608 | 1584 |
| 1609 if (!NILP (buffer)) | 1585 if (!NILP (buffer)) |
| 1610 { | 1586 { |
| 1611 buffer = Fget_buffer (buffer); | 1587 buffer = Fget_buffer (buffer); |
| 1612 CHECK_BUFFER (buffer, 0); | 1588 CHECK_BUFFER (buffer, 0); |
| 1925 | 1901 |
| 1926 Fset_marker (ow->pointm, make_number (BUF_PT (XBUFFER (ow->buffer))), | 1902 Fset_marker (ow->pointm, make_number (BUF_PT (XBUFFER (ow->buffer))), |
| 1927 ow->buffer); | 1903 ow->buffer); |
| 1928 | 1904 |
| 1929 selected_window = window; | 1905 selected_window = window; |
| 1930 #ifdef MULTI_FRAME | |
| 1931 if (XFRAME (WINDOW_FRAME (w)) != selected_frame) | 1906 if (XFRAME (WINDOW_FRAME (w)) != selected_frame) |
| 1932 { | 1907 { |
| 1933 XFRAME (WINDOW_FRAME (w))->selected_window = window; | 1908 XFRAME (WINDOW_FRAME (w))->selected_window = window; |
| 1934 /* Use this rather than Fhandle_switch_frame | 1909 /* Use this rather than Fhandle_switch_frame |
| 1935 so that FRAME_FOCUS_FRAME is moved appropriately as we | 1910 so that FRAME_FOCUS_FRAME is moved appropriately as we |
| 1937 frame is active. */ | 1912 frame is active. */ |
| 1938 Fselect_frame (WINDOW_FRAME (w), Qnil); | 1913 Fselect_frame (WINDOW_FRAME (w), Qnil); |
| 1939 } | 1914 } |
| 1940 else | 1915 else |
| 1941 selected_frame->selected_window = window; | 1916 selected_frame->selected_window = window; |
| 1942 #endif | |
| 1943 | 1917 |
| 1944 record_buffer (w->buffer); | 1918 record_buffer (w->buffer); |
| 1945 Fset_buffer (w->buffer); | 1919 Fset_buffer (w->buffer); |
| 1946 | 1920 |
| 1947 /* Go to the point recorded in the window. | 1921 /* Go to the point recorded in the window. |
| 1975 | 1949 |
| 1976 static Lisp_Object | 1950 static Lisp_Object |
| 1977 display_buffer_1 (window) | 1951 display_buffer_1 (window) |
| 1978 Lisp_Object window; | 1952 Lisp_Object window; |
| 1979 { | 1953 { |
| 1980 #ifdef MULTI_FRAME | |
| 1981 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (window))); | 1954 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
| 1982 FRAME_SAMPLE_VISIBILITY (f); | 1955 FRAME_SAMPLE_VISIBILITY (f); |
| 1983 if (f != selected_frame) | 1956 if (f != selected_frame) |
| 1984 { | 1957 { |
| 1985 if (FRAME_ICONIFIED_P (f)) | 1958 if (FRAME_ICONIFIED_P (f)) |
| 1986 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (window))); | 1959 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (window))); |
| 1987 else if (FRAME_VISIBLE_P (f)) | 1960 else if (FRAME_VISIBLE_P (f)) |
| 1988 Fraise_frame (WINDOW_FRAME (XWINDOW (window))); | 1961 Fraise_frame (WINDOW_FRAME (XWINDOW (window))); |
| 1989 } | 1962 } |
| 1990 #endif | |
| 1991 return window; | 1963 return window; |
| 1992 } | 1964 } |
| 1993 | 1965 |
| 1994 DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 2, | 1966 DEFUN ("display-buffer", Fdisplay_buffer, Sdisplay_buffer, 1, 2, |
| 1995 "bDisplay buffer: \nP", | 1967 "bDisplay buffer: \nP", |
| 2055 return display_buffer_1 (selected_window); | 2027 return display_buffer_1 (selected_window); |
| 2056 } | 2028 } |
| 2057 } | 2029 } |
| 2058 } | 2030 } |
| 2059 | 2031 |
| 2060 #ifdef MULTI_FRAME | |
| 2061 /* If pop_up_frames, | 2032 /* If pop_up_frames, |
| 2062 look for a window showing BUFFER on any visible or iconified frame. | 2033 look for a window showing BUFFER on any visible or iconified frame. |
| 2063 Otherwise search only the current frame. */ | 2034 Otherwise search only the current frame. */ |
| 2064 if (pop_up_frames || last_nonminibuf_frame == 0) | 2035 if (pop_up_frames || last_nonminibuf_frame == 0) |
| 2065 XSETFASTINT (tem, 0); | 2036 XSETFASTINT (tem, 0); |
| 2066 else | 2037 else |
| 2067 #endif | |
| 2068 XSETFRAME (tem, last_nonminibuf_frame); | 2038 XSETFRAME (tem, last_nonminibuf_frame); |
| 2069 window = Fget_buffer_window (buffer, tem); | 2039 window = Fget_buffer_window (buffer, tem); |
| 2070 if (!NILP (window) | 2040 if (!NILP (window) |
| 2071 && (NILP (not_this_window) || !EQ (window, selected_window))) | 2041 && (NILP (not_this_window) || !EQ (window, selected_window))) |
| 2072 { | 2042 { |
| 2098 buffer, | 2068 buffer, |
| 2099 XCONS (car)->cdr); | 2069 XCONS (car)->cdr); |
| 2100 } | 2070 } |
| 2101 } | 2071 } |
| 2102 | 2072 |
| 2103 #ifdef MULTI_FRAME | |
| 2104 /* If there are no frames open that have more than a minibuffer, | 2073 /* If there are no frames open that have more than a minibuffer, |
| 2105 we need to create a new frame. */ | 2074 we need to create a new frame. */ |
| 2106 if (pop_up_frames || last_nonminibuf_frame == 0) | 2075 if (pop_up_frames || last_nonminibuf_frame == 0) |
| 2107 { | 2076 { |
| 2108 window = Fframe_selected_window (call0 (Vpop_up_frame_function)); | 2077 window = Fframe_selected_window (call0 (Vpop_up_frame_function)); |
| 2109 Fset_window_buffer (window, buffer); | 2078 Fset_window_buffer (window, buffer); |
| 2110 return display_buffer_1 (window); | 2079 return display_buffer_1 (window); |
| 2111 } | 2080 } |
| 2112 #endif /* MULTI_FRAME */ | |
| 2113 | 2081 |
| 2114 if (pop_up_windows | 2082 if (pop_up_windows |
| 2115 #ifdef MULTI_FRAME | |
| 2116 || FRAME_MINIBUF_ONLY_P (selected_frame) | 2083 || FRAME_MINIBUF_ONLY_P (selected_frame) |
| 2117 /* If the current frame is a special display frame, | 2084 /* If the current frame is a special display frame, |
| 2118 don't try to reuse its windows. */ | 2085 don't try to reuse its windows. */ |
| 2119 || !NILP (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->dedicated) | 2086 || !NILP (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->dedicated) |
| 2120 #endif | |
| 2121 ) | 2087 ) |
| 2122 { | 2088 { |
| 2123 Lisp_Object frames; | 2089 Lisp_Object frames; |
| 2124 | 2090 |
| 2125 frames = Qnil; | 2091 frames = Qnil; |
| 2126 #ifdef MULTI_FRAME | |
| 2127 if (FRAME_MINIBUF_ONLY_P (selected_frame)) | 2092 if (FRAME_MINIBUF_ONLY_P (selected_frame)) |
| 2128 XSETFRAME (frames, last_nonminibuf_frame); | 2093 XSETFRAME (frames, last_nonminibuf_frame); |
| 2129 #endif | |
| 2130 /* Don't try to create a window if would get an error */ | 2094 /* Don't try to create a window if would get an error */ |
| 2131 if (split_height_threshold < window_min_height << 1) | 2095 if (split_height_threshold < window_min_height << 1) |
| 2132 split_height_threshold = window_min_height << 1; | 2096 split_height_threshold = window_min_height << 1; |
| 2133 | 2097 |
| 2134 /* Note that both Fget_largest_window and Fget_lru_window | 2098 /* Note that both Fget_largest_window and Fget_lru_window |
| 2135 ignore minibuffers and dedicated windows. | 2099 ignore minibuffers and dedicated windows. |
| 2136 This means they can return nil. */ | 2100 This means they can return nil. */ |
| 2137 | 2101 |
| 2138 #ifdef MULTI_FRAME | |
| 2139 /* If the frame we would try to split cannot be split, | 2102 /* If the frame we would try to split cannot be split, |
| 2140 try other frames. */ | 2103 try other frames. */ |
| 2141 if (FRAME_NO_SPLIT_P (NILP (frames) ? selected_frame | 2104 if (FRAME_NO_SPLIT_P (NILP (frames) ? selected_frame |
| 2142 : last_nonminibuf_frame)) | 2105 : last_nonminibuf_frame)) |
| 2143 { | 2106 { |
| 2148 window = Fget_largest_window (make_number (0)); | 2111 window = Fget_largest_window (make_number (0)); |
| 2149 if (NILP (window)) | 2112 if (NILP (window)) |
| 2150 window = Fget_largest_window (Qt); | 2113 window = Fget_largest_window (Qt); |
| 2151 } | 2114 } |
| 2152 else | 2115 else |
| 2153 #endif | |
| 2154 window = Fget_largest_window (frames); | 2116 window = Fget_largest_window (frames); |
| 2155 | 2117 |
| 2156 /* If we got a tall enough full-width window that can be split, | 2118 /* If we got a tall enough full-width window that can be split, |
| 2157 split it. */ | 2119 split it. */ |
| 2158 if (!NILP (window) | 2120 if (!NILP (window) |
| 2172 && ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame)) | 2134 && ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame)) |
| 2173 && (EQ (window, selected_window) | 2135 && (EQ (window, selected_window) |
| 2174 || EQ (XWINDOW (window)->parent, Qnil)) | 2136 || EQ (XWINDOW (window)->parent, Qnil)) |
| 2175 && window_height (window) >= window_min_height << 1) | 2137 && window_height (window) >= window_min_height << 1) |
| 2176 window = Fsplit_window (window, Qnil, Qnil); | 2138 window = Fsplit_window (window, Qnil, Qnil); |
| 2177 #ifdef MULTI_FRAME | |
| 2178 /* If Fget_lru_window returned nil, try other approaches. */ | 2139 /* If Fget_lru_window returned nil, try other approaches. */ |
| 2179 /* Try visible frames first. */ | 2140 /* Try visible frames first. */ |
| 2180 if (NILP (window)) | 2141 if (NILP (window)) |
| 2181 window = Fget_largest_window (Qvisible); | 2142 window = Fget_largest_window (Qvisible); |
| 2182 /* If that didn't work, try iconified frames. */ | 2143 /* If that didn't work, try iconified frames. */ |
| 2186 if (NILP (window)) | 2147 if (NILP (window)) |
| 2187 window = Fget_largest_window (Qt); | 2148 window = Fget_largest_window (Qt); |
| 2188 /* As a last resort, make a new frame. */ | 2149 /* As a last resort, make a new frame. */ |
| 2189 if (NILP (window)) | 2150 if (NILP (window)) |
| 2190 window = Fframe_selected_window (call0 (Vpop_up_frame_function)); | 2151 window = Fframe_selected_window (call0 (Vpop_up_frame_function)); |
| 2191 #else | |
| 2192 /* As a last resort, use a non minibuffer window. */ | |
| 2193 if (NILP (window)) | |
| 2194 window = Fframe_first_window (Fselected_frame ()); | |
| 2195 #endif | |
| 2196 /* If window appears above or below another, | 2152 /* If window appears above or below another, |
| 2197 even out their heights. */ | 2153 even out their heights. */ |
| 2198 other = upper = lower = Qnil; | 2154 other = upper = lower = Qnil; |
| 2199 if (!NILP (XWINDOW (window)->prev)) | 2155 if (!NILP (XWINDOW (window)->prev)) |
| 2200 other = upper = XWINDOW (window)->prev, lower = window; | 2156 other = upper = XWINDOW (window)->prev, lower = window; |
| 2242 call1 (Vtemp_buffer_show_function, buf); | 2198 call1 (Vtemp_buffer_show_function, buf); |
| 2243 else | 2199 else |
| 2244 { | 2200 { |
| 2245 window = Fdisplay_buffer (buf, Qnil); | 2201 window = Fdisplay_buffer (buf, Qnil); |
| 2246 | 2202 |
| 2247 #ifdef MULTI_FRAME | |
| 2248 if (XFRAME (XWINDOW (window)->frame) != selected_frame) | 2203 if (XFRAME (XWINDOW (window)->frame) != selected_frame) |
| 2249 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (window))); | 2204 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (window))); |
| 2250 #endif /* MULTI_FRAME */ | |
| 2251 Vminibuf_scroll_window = window; | 2205 Vminibuf_scroll_window = window; |
| 2252 w = XWINDOW (window); | 2206 w = XWINDOW (window); |
| 2253 XSETFASTINT (w->hscroll, 0); | 2207 XSETFASTINT (w->hscroll, 0); |
| 2254 set_marker_restricted (w->start, make_number (1), buf); | 2208 set_marker_restricted (w->start, make_number (1), buf); |
| 2255 set_marker_restricted (w->pointm, make_number (1), buf); | 2209 set_marker_restricted (w->pointm, make_number (1), buf); |
| 3079 int previous_frame_menu_bar_lines = FRAME_MENU_BAR_LINES (f); | 3033 int previous_frame_menu_bar_lines = FRAME_MENU_BAR_LINES (f); |
| 3080 | 3034 |
| 3081 if (XFASTINT (data->frame_height) != previous_frame_height | 3035 if (XFASTINT (data->frame_height) != previous_frame_height |
| 3082 || XFASTINT (data->frame_width) != previous_frame_width) | 3036 || XFASTINT (data->frame_width) != previous_frame_width) |
| 3083 change_frame_size (f, data->frame_height, data->frame_width, 0, 0); | 3037 change_frame_size (f, data->frame_height, data->frame_width, 0, 0); |
| 3084 #if defined (HAVE_WINDOW_SYSTEM) || (defined (MSDOS) && defined (MULTI_FRAME)) | 3038 #if defined (HAVE_WINDOW_SYSTEM) || defined (MSDOS) |
| 3085 if (XFASTINT (data->frame_menu_bar_lines) | 3039 if (XFASTINT (data->frame_menu_bar_lines) |
| 3086 != previous_frame_menu_bar_lines) | 3040 != previous_frame_menu_bar_lines) |
| 3087 x_set_menu_bar_lines (f, data->frame_menu_bar_lines, 0); | 3041 x_set_menu_bar_lines (f, data->frame_menu_bar_lines, 0); |
| 3088 #endif | 3042 #endif |
| 3089 | 3043 |
| 3207 } | 3161 } |
| 3208 | 3162 |
| 3209 FRAME_ROOT_WINDOW (f) = data->root_window; | 3163 FRAME_ROOT_WINDOW (f) = data->root_window; |
| 3210 Fselect_window (data->current_window); | 3164 Fselect_window (data->current_window); |
| 3211 | 3165 |
| 3212 #ifdef MULTI_FRAME | |
| 3213 if (NILP (data->focus_frame) | 3166 if (NILP (data->focus_frame) |
| 3214 || (FRAMEP (data->focus_frame) | 3167 || (FRAMEP (data->focus_frame) |
| 3215 && FRAME_LIVE_P (XFRAME (data->focus_frame)))) | 3168 && FRAME_LIVE_P (XFRAME (data->focus_frame)))) |
| 3216 Fredirect_frame_focus (frame, data->focus_frame); | 3169 Fredirect_frame_focus (frame, data->focus_frame); |
| 3217 #endif | |
| 3218 | 3170 |
| 3219 #if 0 /* I don't understand why this is needed, and it causes problems | 3171 #if 0 /* I don't understand why this is needed, and it causes problems |
| 3220 when the frame's old selected window has been deleted. */ | 3172 when the frame's old selected window has been deleted. */ |
| 3221 #ifdef MULTI_FRAME | |
| 3222 if (f != selected_frame && FRAME_WINDOW_P (f)) | 3173 if (f != selected_frame && FRAME_WINDOW_P (f)) |
| 3223 do_switch_frame (WINDOW_FRAME (XWINDOW (data->root_window)), | 3174 do_switch_frame (WINDOW_FRAME (XWINDOW (data->root_window)), |
| 3224 Qnil, 0); | 3175 Qnil, 0); |
| 3225 #endif | |
| 3226 #endif | 3176 #endif |
| 3227 | 3177 |
| 3228 /* Set the screen height to the value it had before this function. */ | 3178 /* Set the screen height to the value it had before this function. */ |
| 3229 if (previous_frame_height != FRAME_HEIGHT (f) | 3179 if (previous_frame_height != FRAME_HEIGHT (f) |
| 3230 || previous_frame_width != FRAME_WIDTH (f)) | 3180 || previous_frame_width != FRAME_WIDTH (f)) |
| 3231 change_frame_size (f, previous_frame_height, previous_frame_width, | 3181 change_frame_size (f, previous_frame_height, previous_frame_width, |
| 3232 0, 0); | 3182 0, 0); |
| 3233 #if defined (HAVE_WINDOW_SYSTEM) || (defined (MSDOS) && defined (MULTI_FRAME)) | 3183 #if defined (HAVE_WINDOW_SYSTEM) || defined (MSDOS) |
| 3234 if (previous_frame_menu_bar_lines != FRAME_MENU_BAR_LINES (f)) | 3184 if (previous_frame_menu_bar_lines != FRAME_MENU_BAR_LINES (f)) |
| 3235 x_set_menu_bar_lines (f, previous_frame_menu_bar_lines, 0); | 3185 x_set_menu_bar_lines (f, previous_frame_menu_bar_lines, 0); |
| 3236 #endif | 3186 #endif |
| 3237 } | 3187 } |
| 3238 | 3188 |
| 3239 /* Restore the minimum heights recorded in the configuration. */ | 3189 /* Restore the minimum heights recorded in the configuration. */ |
| 3240 window_min_height = XINT (data->min_height); | 3190 window_min_height = XINT (data->min_height); |
| 3241 window_min_width = XINT (data->min_width); | 3191 window_min_width = XINT (data->min_width); |
| 3242 | 3192 |
| 3243 #ifdef MULTI_FRAME | |
| 3244 /* Fselect_window will have made f the selected frame, so we | 3193 /* Fselect_window will have made f the selected frame, so we |
| 3245 reselect the proper frame here. Fhandle_switch_frame will change the | 3194 reselect the proper frame here. Fhandle_switch_frame will change the |
| 3246 selected window too, but that doesn't make the call to | 3195 selected window too, but that doesn't make the call to |
| 3247 Fselect_window above totally superfluous; it still sets f's | 3196 Fselect_window above totally superfluous; it still sets f's |
| 3248 selected window. */ | 3197 selected window. */ |
| 3249 if (FRAME_LIVE_P (XFRAME (data->selected_frame))) | 3198 if (FRAME_LIVE_P (XFRAME (data->selected_frame))) |
| 3250 do_switch_frame (data->selected_frame, Qnil, 0); | 3199 do_switch_frame (data->selected_frame, Qnil, 0); |
| 3251 #endif | |
| 3252 | 3200 |
| 3253 if (!NILP (new_current_buffer)) | 3201 if (!NILP (new_current_buffer)) |
| 3254 Fset_buffer (new_current_buffer); | 3202 Fset_buffer (new_current_buffer); |
| 3255 | 3203 |
| 3256 Vminibuf_scroll_window = data->minibuf_scroll_window; | 3204 Vminibuf_scroll_window = data->minibuf_scroll_window; |
| 3403 data = (struct save_window_data *)vec; | 3351 data = (struct save_window_data *)vec; |
| 3404 | 3352 |
| 3405 XSETFASTINT (data->frame_width, FRAME_WIDTH (f)); | 3353 XSETFASTINT (data->frame_width, FRAME_WIDTH (f)); |
| 3406 XSETFASTINT (data->frame_height, FRAME_HEIGHT (f)); | 3354 XSETFASTINT (data->frame_height, FRAME_HEIGHT (f)); |
| 3407 XSETFASTINT (data->frame_menu_bar_lines, FRAME_MENU_BAR_LINES (f)); | 3355 XSETFASTINT (data->frame_menu_bar_lines, FRAME_MENU_BAR_LINES (f)); |
| 3408 #ifdef MULTI_FRAME | |
| 3409 XSETFRAME (data->selected_frame, selected_frame); | 3356 XSETFRAME (data->selected_frame, selected_frame); |
| 3410 #endif | |
| 3411 data->current_window = FRAME_SELECTED_WINDOW (f); | 3357 data->current_window = FRAME_SELECTED_WINDOW (f); |
| 3412 XSETBUFFER (data->current_buffer, current_buffer); | 3358 XSETBUFFER (data->current_buffer, current_buffer); |
| 3413 data->minibuf_scroll_window = Vminibuf_scroll_window; | 3359 data->minibuf_scroll_window = Vminibuf_scroll_window; |
| 3414 data->root_window = FRAME_ROOT_WINDOW (f); | 3360 data->root_window = FRAME_ROOT_WINDOW (f); |
| 3415 data->focus_frame = FRAME_FOCUS_FRAME (f); | 3361 data->focus_frame = FRAME_FOCUS_FRAME (f); |
| 3446 return unbind_to (count, val); | 3392 return unbind_to (count, val); |
| 3447 } | 3393 } |
| 3448 | 3394 |
| 3449 init_window_once () | 3395 init_window_once () |
| 3450 { | 3396 { |
| 3451 #ifdef MULTI_FRAME | |
| 3452 selected_frame = make_terminal_frame (); | 3397 selected_frame = make_terminal_frame (); |
| 3453 XSETFRAME (Vterminal_frame, selected_frame); | 3398 XSETFRAME (Vterminal_frame, selected_frame); |
| 3454 minibuf_window = selected_frame->minibuffer_window; | 3399 minibuf_window = selected_frame->minibuffer_window; |
| 3455 selected_window = selected_frame->selected_window; | 3400 selected_window = selected_frame->selected_window; |
| 3456 last_nonminibuf_frame = selected_frame; | 3401 last_nonminibuf_frame = selected_frame; |
| 3457 #else /* not MULTI_FRAME */ | |
| 3458 extern Lisp_Object get_minibuffer (); | |
| 3459 | |
| 3460 selected_frame = last_nonminibuf_frame = &the_only_frame; | |
| 3461 | |
| 3462 minibuf_window = make_window (); | |
| 3463 FRAME_ROOT_WINDOW (selected_frame) = make_window (); | |
| 3464 | |
| 3465 XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->next = minibuf_window; | |
| 3466 XWINDOW (minibuf_window)->prev = FRAME_ROOT_WINDOW (selected_frame); | |
| 3467 XWINDOW (minibuf_window)->mini_p = Qt; | |
| 3468 | |
| 3469 /* These values 9 and 10 are arbitrary, | |
| 3470 just so that there is "something there." | |
| 3471 Correct values are put in in init_xdisp */ | |
| 3472 | |
| 3473 XSETFASTINT (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->width, 10); | |
| 3474 XSETFASTINT (XWINDOW (minibuf_window)->width, 10); | |
| 3475 | |
| 3476 XSETFASTINT (XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->height, 9); | |
| 3477 XSETFASTINT (XWINDOW (minibuf_window)->top, 9); | |
| 3478 XSETFASTINT (XWINDOW (minibuf_window)->height, 1); | |
| 3479 | |
| 3480 /* Prevent error in Fset_window_buffer. */ | |
| 3481 XWINDOW (FRAME_ROOT_WINDOW (selected_frame))->buffer = Qt; | |
| 3482 XWINDOW (minibuf_window)->buffer = Qt; | |
| 3483 | |
| 3484 /* Now set them up for real. */ | |
| 3485 Fset_window_buffer (FRAME_ROOT_WINDOW (selected_frame), | |
| 3486 Fcurrent_buffer ()); | |
| 3487 Fset_window_buffer (minibuf_window, get_minibuffer (0)); | |
| 3488 | |
| 3489 selected_window = FRAME_ROOT_WINDOW (selected_frame); | |
| 3490 /* Make sure this window seems more recently used than | |
| 3491 a newly-created, never-selected window. Increment | |
| 3492 window_select_count so the first selection ever will get | |
| 3493 something newer than this. */ | |
| 3494 XSETFASTINT (XWINDOW (selected_window)->use_time, ++window_select_count); | |
| 3495 #endif /* not MULTI_FRAME */ | |
| 3496 | 3402 |
| 3497 window_initialized = 1; | 3403 window_initialized = 1; |
| 3498 } | 3404 } |
| 3499 | 3405 |
| 3500 syms_of_window () | 3406 syms_of_window () |
| 3505 Qwindow_live_p = intern ("window-live-p"); | 3411 Qwindow_live_p = intern ("window-live-p"); |
| 3506 staticpro (&Qwindow_live_p); | 3412 staticpro (&Qwindow_live_p); |
| 3507 | 3413 |
| 3508 Qtemp_buffer_show_hook = intern ("temp-buffer-show-hook"); | 3414 Qtemp_buffer_show_hook = intern ("temp-buffer-show-hook"); |
| 3509 staticpro (&Qtemp_buffer_show_hook); | 3415 staticpro (&Qtemp_buffer_show_hook); |
| 3510 | |
| 3511 #ifndef MULTI_FRAME | |
| 3512 /* Make sure all windows get marked */ | |
| 3513 staticpro (&minibuf_window); | |
| 3514 #endif | |
| 3515 | 3416 |
| 3516 DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, | 3417 DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, |
| 3517 "Non-nil means call as function to display a help buffer.\n\ | 3418 "Non-nil means call as function to display a help buffer.\n\ |
| 3518 The function is called with one argument, the buffer to be displayed.\n\ | 3419 The function is called with one argument, the buffer to be displayed.\n\ |
| 3519 Used by `with-output-to-temp-buffer'.\n\ | 3420 Used by `with-output-to-temp-buffer'.\n\ |
