[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#1450: w32_reset_fringes
From: |
martin rudalics |
Subject: |
bug#1450: w32_reset_fringes |
Date: |
Sat, 29 Nov 2008 12:43:21 +0100 |
User-agent: |
Thunderbird 2.0.0.16 (Windows/20080708) |
> A further datapoint: both the above as well as (setq default-frame-alist
> '((minibuffer))) also induce a crash in GNU Emacs 23.0.60.16
> (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2008-11-20 on escher
I attached a fairly secure and minimally invasive patch.
Could you try it?
Thanks, martin.
*** frame.h.~1.145.~ 2008-11-14 07:21:31.062500000 +0100
--- frame.h 2008-11-29 12:27:15.156250000 +0100
***************
*** 1115,1120 ****
--- 1115,1121 ----
Lisp_Object component,
Lisp_Object subclass);
+ extern Lisp_Object delete_frame P_ ((Lisp_Object, Lisp_Object));
#endif /* HAVE_WINDOW_SYSTEM */
*** frame.c.~1.399.~ 2008-11-29 12:04:07.515625000 +0100
--- frame.c 2008-11-29 12:26:53.468750000 +0100
***************
*** 1322,1341 ****
extern Lisp_Object Qrun_hook_with_args;
! DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
! doc: /* Delete FRAME, permanently eliminating it from use.
! If omitted, FRAME defaults to the selected frame.
! A frame may not be deleted if its minibuffer is used by other frames.
! Normally, you may not delete a frame if all other frames are invisible,
! but if the second optional argument FORCE is non-nil, you may do so.
!
! This function runs `delete-frame-functions' before actually deleting the
! frame, unless the frame is a tooltip.
! The functions are run with one arg, the frame to be deleted.
! But FORCE inhibits this too. */)
! /* FORCE is non-nil when handling a disconnected terminal. */
! (frame, force)
! Lisp_Object frame, force;
{
struct frame *f;
struct frame *sf = SELECTED_FRAME ();
--- 1322,1330 ----
extern Lisp_Object Qrun_hook_with_args;
! Lisp_Object
! delete_frame (frame, force)
! register Lisp_Object frame, force;
{
struct frame *f;
struct frame *sf = SELECTED_FRAME ();
***************
*** 1360,1371 ****
if (NILP (force) && !other_visible_frames (f))
error ("Attempt to delete the sole visible or iconified frame");
- #if 0
/* This is a nice idea, but x_connection_closed needs to be able
to delete the last frame, if it is gone. */
! if (NILP (XCDR (Vframe_list)))
error ("Attempt to delete the only frame");
- #endif
/* Does this frame have a minibuffer, and is it the surrogate
minibuffer for any other frame? */
--- 1349,1358 ----
if (NILP (force) && !other_visible_frames (f))
error ("Attempt to delete the sole visible or iconified frame");
/* This is a nice idea, but x_connection_closed needs to be able
to delete the last frame, if it is gone. */
! if (NILP (XCDR (Vframe_list)) && !EQ (force, Qnoelisp))
error ("Attempt to delete the only frame");
/* Does this frame have a minibuffer, and is it the surrogate
minibuffer for any other frame? */
***************
*** 1386,1392 ****
(FRAME_MINIBUF_WINDOW (XFRAME (this))))))
{
/* If we MUST delete this frame, delete the other first. */
! if (!NILP (force))
Fdelete_frame (this, force);
else
error ("Attempt to delete a surrogate minibuffer frame");
--- 1373,1379 ----
(FRAME_MINIBUF_WINDOW (XFRAME (this))))))
{
/* If we MUST delete this frame, delete the other first. */
! if (EQ (force, Qnoelisp))
Fdelete_frame (this, force);
else
error ("Attempt to delete a surrogate minibuffer frame");
***************
*** 1634,1639 ****
--- 1621,1645 ----
return Qnil;
}
+
+ DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
+ doc: /* Delete FRAME, permanently eliminating it from use.
+ If omitted, FRAME defaults to the selected frame.
+ A frame may not be deleted if its minibuffer is used by other frames.
+ Normally, you may not delete a frame if all other frames are invisible,
+ but if the second optional argument FORCE is non-nil, you may do so.
+
+ This function runs `delete-frame-functions' before actually deleting the
+ frame, unless the frame is a tooltip.
+ The functions are run with one arg, the frame to be deleted.
+ But FORCE inhibits this too. */)
+ /* FORCE is non-nil when handling a disconnected terminal. */
+ (frame, force)
+ Lisp_Object frame, force;
+ {
+ return delete_frame (frame, !NILP (force) ? Qt : Qnil);
+ }
+
/* Return mouse position in character cell units. */
*** terminal.c.~1.13.~ 2008-11-29 12:04:07.843750000 +0100
--- terminal.c 2008-11-29 12:23:14.406250000 +0100
***************
*** 256,262 ****
struct terminal **tp;
Lisp_Object tail, frame;
! /* Protect against recursive calls. Fdelete_frame calls the
delete_terminal_hook when we delete our last frame. */
if (!terminal->name)
return;
--- 256,262 ----
struct terminal **tp;
Lisp_Object tail, frame;
! /* Protect against recursive calls. delete_frame calls the
delete_terminal_hook when we delete our last frame. */
if (!terminal->name)
return;
***************
*** 270,276 ****
if (FRAME_LIVE_P (f) && f->terminal == terminal)
{
/* Maybe this should pass Qnoelisp rather than Qt? */
! Fdelete_frame (frame, Qt);
}
}
--- 270,276 ----
if (FRAME_LIVE_P (f) && f->terminal == terminal)
{
/* Maybe this should pass Qnoelisp rather than Qt? */
! delete_frame (frame, Qnoelisp);
}
}