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,