Mercurial > hg > xemacs-beta
comparison src/frame.h @ 272:c5d627a313b1 r21-0b34
Import from CVS: tag r21-0b34
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:28:48 +0200 |
parents | b2472a1930f2 |
children | c42ec1d1cded |
comparison
equal
deleted
inserted
replaced
271:c7b7086b0a39 | 272:c5d627a313b1 |
---|---|
36 #define FRAMEMETH(f, m, args) CONTYPE_METH ((f)->framemeths, m, args) | 36 #define FRAMEMETH(f, m, args) CONTYPE_METH ((f)->framemeths, m, args) |
37 #define MAYBE_FRAMEMETH(f, m, args) \ | 37 #define MAYBE_FRAMEMETH(f, m, args) \ |
38 MAYBE_CONTYPE_METH ((f)->framemeths, m, args) | 38 MAYBE_CONTYPE_METH ((f)->framemeths, m, args) |
39 #define FRAMEMETH_OR_GIVEN(f, m, args, given) \ | 39 #define FRAMEMETH_OR_GIVEN(f, m, args, given) \ |
40 CONTYPE_METH_OR_GIVEN((f)->framemeths, m, args, given) | 40 CONTYPE_METH_OR_GIVEN((f)->framemeths, m, args, given) |
41 #define MAYBE_INT_FRAMEMETH(f, m, args) \ | |
42 MAYBE_INT_CONTYPE_METH ((f)->framemeths, m, args) | |
43 #define MAYBE_LISP_FRAMEMETH(f, m, args) \ | |
44 MAYBE_LISP_CONTYPE_METH ((f)->framemeths, m, args) | |
45 | 41 |
46 struct frame | 42 struct frame |
47 { | 43 { |
48 struct lcrecord_header header; | 44 struct lcrecord_header header; |
49 | 45 |
186 | 182 |
187 /* flag indicating if any window on this frame is displaying a subwindow */ | 183 /* flag indicating if any window on this frame is displaying a subwindow */ |
188 unsigned int subwindows_being_displayed :1; | 184 unsigned int subwindows_being_displayed :1; |
189 }; | 185 }; |
190 | 186 |
191 /* If this is non-nil, it is the frame that make-frame is currently | 187 EXFUN (Fdelete_frame, 2); |
192 creating. We can't set the current frame to this in case the | 188 EXFUN (Fframe_iconified_p, 1); |
193 debugger goes off because it would try and display to it. However, | 189 EXFUN (Fframe_name, 1); |
194 there are some places which need to reference it which have no | 190 EXFUN (Fframe_property, 3); |
195 other way of getting it if it isn't the selected frame. */ | 191 EXFUN (Fmake_frame, 2); |
196 extern Lisp_Object Vframe_being_created; | 192 EXFUN (Fmake_frame_visible, 1); |
193 EXFUN (Fraise_frame, 1); | |
194 EXFUN (Fselect_frame, 1); | |
195 EXFUN (Fset_frame_pointer, 2); | |
196 EXFUN (Fset_frame_position, 3); | |
197 EXFUN (Fset_frame_size, 4); | |
198 | |
199 extern Lisp_Object Qbackground_toolbar_color, Qbell_volume, Qborder_color; | |
200 extern Lisp_Object Qborder_width, Qbottom_toolbar_shadow_color; | |
201 extern Lisp_Object Qbottom_toolbar_shadow_pixmap, Qdelete_frame; | |
202 extern Lisp_Object Qdeselect_frame_hook, Qdrag_and_drop_functions, Qgc_pointer; | |
203 extern Lisp_Object Qiconic, Qinitially_unmapped, Qinter_line_space; | |
204 extern Lisp_Object Qinternal_border_width, Qinvisible, Qmap_frame_hook; | |
205 extern Lisp_Object Qminibuffer, Qmodeline_pointer, Qmouse_enter_frame_hook; | |
206 extern Lisp_Object Qmouse_leave_frame_hook, Qpointer_background; | |
207 extern Lisp_Object Qpointer_color, Qpopup, Qscrollbar_placement; | |
208 extern Lisp_Object Qselect_frame_hook, Qspace_pointer; | |
209 extern Lisp_Object Qsynchronize_minibuffers, Qtext_pointer; | |
210 extern Lisp_Object Qtoolbar_shadow_thickness, Qtop_toolbar_shadow_color; | |
211 extern Lisp_Object Qtop_toolbar_shadow_pixmap, Qunmap_frame_hook; | |
212 extern Lisp_Object Qunsplittable, Quse_backing_store, Qvisible, Qvisual_bell; | |
213 extern Lisp_Object Vframe_icon_title_format, Vframe_title_format; | |
214 extern Lisp_Object Vmouse_motion_handler; | |
215 | |
197 | 216 |
198 DECLARE_LRECORD (frame, struct frame); | 217 DECLARE_LRECORD (frame, struct frame); |
199 #define XFRAME(x) XRECORD (x, frame, struct frame) | 218 #define XFRAME(x) XRECORD (x, frame, struct frame) |
200 #define XSETFRAME(x, p) XSETRECORD (x, p, frame) | 219 #define XSETFRAME(x, p) XSETRECORD (x, p, frame) |
201 #define FRAMEP(x) RECORDP (x, frame) | 220 #define FRAMEP(x) RECORDP (x, frame) |
202 #define GC_FRAMEP(x) GC_RECORDP (x, frame) | 221 #define GC_FRAMEP(x) GC_RECORDP (x, frame) |
203 #define CHECK_FRAME(x) CHECK_RECORD (x, frame) | 222 #define CHECK_FRAME(x) CHECK_RECORD (x, frame) |
204 #define CONCHECK_FRAME(x) CONCHECK_RECORD (x, frame) | 223 #define CONCHECK_FRAME(x) CONCHECK_RECORD (x, frame) |
205 | 224 |
206 #define CHECK_LIVE_FRAME(x) \ | 225 #define CHECK_LIVE_FRAME(x) do { \ |
207 do { CHECK_FRAME (x); \ | 226 CHECK_FRAME (x); \ |
208 if (! FRAMEP (x) \ | 227 if (! FRAME_LIVE_P (XFRAME (x))) \ |
209 || ! FRAME_LIVE_P (XFRAME (x))) \ | 228 dead_wrong_type_argument (Qframe_live_p, (x)); \ |
210 dead_wrong_type_argument (Qframe_live_p, (x)); } while (0) | 229 } while (0) |
211 #define CONCHECK_LIVE_FRAME(x) \ | 230 #define CONCHECK_LIVE_FRAME(x) do { \ |
212 do { CONCHECK_FRAME (x); \ | 231 CONCHECK_FRAME (x); \ |
213 if (! FRAMEP (x) \ | 232 if (! FRAME_LIVE_P (XFRAME (x))) \ |
214 || ! FRAME_LIVE_P (XFRAME (x))) \ | 233 x = wrong_type_argument (Qframe_live_p, (x)); \ |
215 x = wrong_type_argument (Qframe_live_p, (x)); } while (0) | 234 } while (0) |
216 | 235 |
217 #define FRAME_TYPE_P(f, type) EQ (FRAME_TYPE (f), Q##type) | 236 #define FRAME_TYPE_P(f, type) EQ (FRAME_TYPE (f), Q##type) |
218 | 237 |
219 #ifdef ERROR_CHECK_TYPECHECK | 238 #ifdef ERROR_CHECK_TYPECHECK |
220 MAC_DECLARE_EXTERN (struct frame *, MTframe_data) | 239 INLINE struct frame * |
240 error_check_frame_type (struct frame * f, Lisp_Object sym); | |
241 INLINE struct frame * | |
242 error_check_frame_type (struct frame * f, Lisp_Object sym) | |
243 { | |
244 assert (EQ (FRAME_TYPE (f), sym)); | |
245 return f; | |
246 } | |
221 # define FRAME_TYPE_DATA(f, type) \ | 247 # define FRAME_TYPE_DATA(f, type) \ |
222 MAC_BEGIN \ | 248 ((struct type##_frame *) (error_check_frame_type (f, Q##type))->frame_data) |
223 MAC_DECLARE (struct frame *, MTframe_data, f) \ | |
224 assert (FRAME_TYPE_P (MTframe_data, type)) \ | |
225 MAC_SEP \ | |
226 (struct type##_frame *) MTframe_data->frame_data \ | |
227 MAC_END | |
228 #else | 249 #else |
229 # define FRAME_TYPE_DATA(f, type) \ | 250 # define FRAME_TYPE_DATA(f, type) \ |
230 ((struct type##_frame *) (f)->frame_data) | 251 ((struct type##_frame *) (f)->frame_data) |
231 #endif | 252 #endif |
232 | 253 |
261 #define CHECK_STREAM_FRAME(z) CHECK_FRAME_TYPE (z, stream) | 282 #define CHECK_STREAM_FRAME(z) CHECK_FRAME_TYPE (z, stream) |
262 #define CONCHECK_STREAM_FRAME(z) CONCHECK_FRAME_TYPE (z, stream) | 283 #define CONCHECK_STREAM_FRAME(z) CONCHECK_FRAME_TYPE (z, stream) |
263 | 284 |
264 #define FRAME_WIN_P(frm) CONSOLE_TYPESYM_WIN_P (FRAME_TYPE (frm)) | 285 #define FRAME_WIN_P(frm) CONSOLE_TYPESYM_WIN_P (FRAME_TYPE (frm)) |
265 | 286 |
266 extern Lisp_Object Qframe_live_p; | |
267 extern Lisp_Object Qframe_x_p, Qframe_tty_p; | |
268 extern Lisp_Object Vframe_title_format, Vframe_icon_title_format; | |
269 | |
270 extern int frame_changed; | 287 extern int frame_changed; |
271 | 288 |
272 #define MARK_FRAME_FACES_CHANGED(f) do { \ | 289 #define MARK_FRAME_FACES_CHANGED(f) do { \ |
273 (f)->faces_changed = 1; \ | 290 struct frame *mffc_f = (f); \ |
274 (f)->modiff++; \ | 291 mffc_f->faces_changed = 1; \ |
275 if (!NILP ((f)->device)) \ | 292 mffc_f->modiff++; \ |
276 MARK_DEVICE_FACES_CHANGED (XDEVICE ((f)->device)); \ | 293 if (!NILP (mffc_f->device)) \ |
277 else \ | 294 { \ |
278 faces_changed = 1; } while (0) | 295 struct device *mffc_d = XDEVICE (mffc_f->device); \ |
279 | 296 MARK_DEVICE_FACES_CHANGED (mffc_d); \ |
280 #define MARK_FRAME_GLYPHS_CHANGED(f) do { \ | 297 } \ |
281 (f)->glyphs_changed = 1; \ | 298 else \ |
282 (f)->modiff++; \ | 299 faces_changed = 1; \ |
283 if (!NILP ((f)->device)) \ | 300 } while (0) |
284 MARK_DEVICE_GLYPHS_CHANGED (XDEVICE ((f)->device)); \ | 301 |
285 else \ | 302 #define MARK_FRAME_GLYPHS_CHANGED(f) do { \ |
286 glyphs_changed = 1; } while (0) | 303 struct frame *mfgc_f = (f); \ |
287 | 304 mfgc_f->glyphs_changed = 1; \ |
288 #define MARK_FRAME_TOOLBARS_CHANGED(f) do { \ | 305 mfgc_f->modiff++; \ |
289 (f)->toolbar_changed = 1; \ | 306 if (!NILP (mfgc_f->device)) \ |
290 (f)->modiff++; \ | 307 { \ |
291 if (!NILP ((f)->device)) \ | 308 struct device *mfgc_d = XDEVICE (mfgc_f->device); \ |
292 MARK_DEVICE_TOOLBARS_CHANGED (XDEVICE ((f)->device)); \ | 309 MARK_DEVICE_GLYPHS_CHANGED (mfgc_d); \ |
293 else \ | 310 } \ |
294 toolbar_changed = 1; } while (0) | 311 else \ |
295 | 312 glyphs_changed = 1; \ |
296 #define MARK_FRAME_SIZE_CHANGED(f) do { \ | 313 } while (0) |
297 (f)->size_changed = 1; \ | 314 |
298 (f)->size_change_pending = 1; \ | 315 #define MARK_FRAME_TOOLBARS_CHANGED(f) do { \ |
299 (f)->modiff++; \ | 316 struct frame *mftc_f = (f); \ |
300 if (!NILP ((f)->device)) \ | 317 mftc_f->toolbar_changed = 1; \ |
301 MARK_DEVICE_SIZE_CHANGED (XDEVICE ((f)->device)); \ | 318 mftc_f->modiff++; \ |
302 else \ | 319 if (!NILP (mftc_f->device)) \ |
303 size_changed = 1; } while (0) | 320 { \ |
304 | 321 struct device *mftc_d = XDEVICE (mftc_f->device); \ |
305 #define MARK_FRAME_CHANGED(f) do { \ | 322 MARK_DEVICE_TOOLBARS_CHANGED (mftc_d); \ |
306 (f)->frame_changed = 1; \ | 323 } \ |
307 (f)->modiff++; \ | 324 else \ |
308 if (!NILP ((f)->device)) \ | 325 toolbar_changed = 1; \ |
309 MARK_DEVICE_FRAME_CHANGED (XDEVICE ((f)->device)); \ | 326 } while (0) |
310 else \ | 327 |
311 frame_changed = 1; } while (0) | 328 #define MARK_FRAME_SIZE_CHANGED(f) do { \ |
312 | 329 struct frame *mfsc_f = (f); \ |
313 #define MARK_FRAME_WINDOWS_CHANGED(f) do { \ | 330 mfsc_f->size_changed = 1; \ |
314 (f)->windows_changed = 1; \ | 331 mfsc_f->size_change_pending = 1; \ |
315 (f)->modiff++; \ | 332 mfsc_f->modiff++; \ |
316 if (!NILP ((f)->device)) \ | 333 if (!NILP (mfsc_f->device)) \ |
317 MARK_DEVICE_WINDOWS_CHANGED (XDEVICE ((f)->device)); \ | 334 { \ |
318 else \ | 335 struct device *mfsc_d = XDEVICE (mfsc_f->device); \ |
319 windows_changed = 1; } while (0) | 336 MARK_DEVICE_SIZE_CHANGED (mfsc_d); \ |
320 | 337 } \ |
321 #define MARK_FRAME_WINDOWS_STRUCTURE_CHANGED(f) do { \ | 338 else \ |
322 (f)->windows_structure_changed = 1; \ | 339 size_changed = 1; \ |
323 (f)->modiff++; \ | 340 } while (0) |
324 if (!NILP ((f)->device)) \ | 341 |
325 MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED (XDEVICE ((f)->device)); \ | 342 #define MARK_FRAME_CHANGED(f) do { \ |
326 else \ | 343 struct frame *mfc_f = (f); \ |
327 windows_structure_changed = 1; } while (0) | 344 mfc_f->frame_changed = 1; \ |
328 | 345 mfc_f->modiff++; \ |
346 if (!NILP (mfc_f->device)) \ | |
347 { \ | |
348 struct device *mfc_d = XDEVICE (mfc_f->device); \ | |
349 MARK_DEVICE_FRAME_CHANGED (mfc_d); \ | |
350 } \ | |
351 else \ | |
352 frame_changed = 1; \ | |
353 } while (0) | |
354 | |
355 #define MARK_FRAME_WINDOWS_CHANGED(f) do { \ | |
356 struct frame *mfwc_f = (f); \ | |
357 mfwc_f->windows_changed = 1; \ | |
358 mfwc_f->modiff++; \ | |
359 if (!NILP (mfwc_f->device)) \ | |
360 { \ | |
361 struct device *mfwc_d = XDEVICE (mfwc_f->device); \ | |
362 MARK_DEVICE_WINDOWS_CHANGED (mfwc_d); \ | |
363 } \ | |
364 else \ | |
365 windows_changed = 1; \ | |
366 } while (0) | |
367 | |
368 #define MARK_FRAME_WINDOWS_STRUCTURE_CHANGED(f) do { \ | |
369 struct frame *fwsc_f = (f); \ | |
370 fwsc_f->windows_structure_changed = 1; \ | |
371 fwsc_f->modiff++; \ | |
372 if (!NILP (fwsc_f->device)) \ | |
373 { \ | |
374 struct device *fwsc_d = XDEVICE (fwsc_f->device); \ | |
375 MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED (fwsc_d); \ | |
376 } \ | |
377 else \ | |
378 windows_structure_changed = 1; \ | |
379 } while (0) | |
329 | 380 |
330 #define SET_FRAME_CLEAR(f) MARK_FRAME_CHANGED (f); (f)->clear = 1 | 381 #define SET_FRAME_CLEAR(f) MARK_FRAME_CHANGED (f); (f)->clear = 1 |
331 #define FRAME_DEVICE(f) ((f)->device) | 382 #define FRAME_DEVICE(f) ((f)->device) |
332 #define FRAME_CONSOLE(f) DEVICE_CONSOLE (XDEVICE (FRAME_DEVICE (f))) | 383 #define FRAME_CONSOLE(f) DEVICE_CONSOLE (XDEVICE (FRAME_DEVICE (f))) |
333 #define FRAME_LIVE_P(f) (!(f)->dead) | 384 #define FRAME_LIVE_P(f) (!(f)->dead) |
583 /* NO_BREAK means that "break" doesn't do what you think it does! | 634 /* NO_BREAK means that "break" doesn't do what you think it does! |
584 Use goto instead. "continue" is OK, though. */ | 635 Use goto instead. "continue" is OK, though. */ |
585 #define FRAME_LOOP_NO_BREAK(frmcons, devcons, concons) \ | 636 #define FRAME_LOOP_NO_BREAK(frmcons, devcons, concons) \ |
586 DEVICE_LOOP_NO_BREAK (devcons, concons) \ | 637 DEVICE_LOOP_NO_BREAK (devcons, concons) \ |
587 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) | 638 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) |
588 | |
589 extern Lisp_Object Vdefault_frame_name; | |
590 | 639 |
591 void update_frame_title (struct frame *f); | 640 void update_frame_title (struct frame *f); |
592 Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype, | 641 Lisp_Object next_frame (Lisp_Object f, Lisp_Object frametype, |
593 Lisp_Object console); | 642 Lisp_Object console); |
594 Lisp_Object prev_frame (Lisp_Object f, Lisp_Object frametype, | 643 Lisp_Object prev_frame (Lisp_Object f, Lisp_Object frametype, |