From: Chong Yidong Date: Sat, 10 Mar 2012 07:46:07 +0000 (+0800) Subject: * frame.c (other_visible_frames): Don't assume selected frame is visible. X-Git-Tag: emacs-pretest-24.0.05~122 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1de11f569d38d9c7be17783776e405a4434e1a68;p=emacs.git * frame.c (other_visible_frames): Don't assume selected frame is visible. Fixes: debbugs:10955 --- diff --git a/src/ChangeLog b/src/ChangeLog index b984064e26c..f77134be49c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-03-10 Chong Yidong + + * frame.c (other_visible_frames): Don't assume the selected frame + is visible (Bug#10955). + 2012-03-09 Stefan Monnier * buffer.c (compare_overlays): Avoid qsort's instability (bug#6830). diff --git a/src/frame.c b/src/frame.c index 8505398a260..1db24cc80e7 100644 --- a/src/frame.c +++ b/src/frame.c @@ -1118,41 +1118,32 @@ Otherwise, include all frames. */) static int other_visible_frames (FRAME_PTR f) { - /* We know the selected frame is visible, - so if F is some other frame, it can't be the sole visible one. */ - if (f == SELECTED_FRAME ()) - { - Lisp_Object frames; - int count = 0; + Lisp_Object frames; - for (frames = Vframe_list; - CONSP (frames); - frames = XCDR (frames)) - { - Lisp_Object this; + for (frames = Vframe_list; CONSP (frames); frames = XCDR (frames)) + { + Lisp_Object this = XCAR (frames); + if (f == XFRAME (this)) + continue; - this = XCAR (frames); - /* Verify that the frame's window still exists - and we can still talk to it. And note any recent change - in visibility. */ + /* Verify that we can still talk to the frame's X window, + and note any recent change in visibility. */ #ifdef HAVE_WINDOW_SYSTEM - if (FRAME_WINDOW_P (XFRAME (this))) - { - x_sync (XFRAME (this)); - FRAME_SAMPLE_VISIBILITY (XFRAME (this)); - } + if (FRAME_WINDOW_P (XFRAME (this))) + { + x_sync (XFRAME (this)); + FRAME_SAMPLE_VISIBILITY (XFRAME (this)); + } #endif - if (FRAME_VISIBLE_P (XFRAME (this)) - || FRAME_ICONIFIED_P (XFRAME (this)) - /* Allow deleting the terminal frame when at least - one X frame exists! */ - || (FRAME_WINDOW_P (XFRAME (this)) && !FRAME_WINDOW_P (f))) - count++; - } - return count > 1; + if (FRAME_VISIBLE_P (XFRAME (this)) + || FRAME_ICONIFIED_P (XFRAME (this)) + /* Allow deleting the terminal frame when at least one X + frame exists. */ + || (FRAME_WINDOW_P (XFRAME (this)) && !FRAME_WINDOW_P (f))) + return 1; } - return 1; + return 0; } /* Delete FRAME. When FORCE equals Qnoelisp, delete FRAME