Commit 5b04e9f9 authored by Dmitry Antipov's avatar Dmitry Antipov

Simplify by using FOR_EACH_FRAME here and there.

* frame.c (next_frame, prev_frame, other_visible_frames)
(delete_frame, visible-frame-list): Use FOR_EACH_FRAME.
* w32term.c (x_window_to_scroll_bar): Likewise.
* window.c (window_list): Likewise.
* xdisp.c (x_consider_frame_title): Likewise.
* xfaces.c ( Fdisplay_supports_face_attributes_p): Likewise.
* xfns.c (x_window_to_frame, x_any_window_to_frame)
(x_menubar_window_to_frame, x_top_window_to_frame): Likewise.
* xmenu.c (menubar_id_to_frame): Likewise.
* xselect.c (frame_for_x_selection): Likewise.
* xterm.c (x_frame_of_widget, x_window_to_scroll_bar)
(x_window_to_menu_bar): Likewise.
* w32fns.c (x_window_to_frame): Likewise.  Adjust comment.
parent 31f47fba
2012-11-12 Dmitry Antipov <dmantipov@yandex.ru>
Simplify by using FOR_EACH_FRAME here and there.
* frame.c (next_frame, prev_frame, other_visible_frames)
(delete_frame, visible-frame-list): Use FOR_EACH_FRAME.
* w32term.c (x_window_to_scroll_bar): Likewise.
* window.c (window_list): Likewise.
* xdisp.c (x_consider_frame_title): Likewise.
* xfaces.c ( Fdisplay_supports_face_attributes_p): Likewise.
* xfns.c (x_window_to_frame, x_any_window_to_frame)
(x_menubar_window_to_frame, x_top_window_to_frame): Likewise.
* xmenu.c (menubar_id_to_frame): Likewise.
* xselect.c (frame_for_x_selection): Likewise.
* xterm.c (x_frame_of_widget, x_window_to_scroll_bar)
(x_window_to_menu_bar): Likewise.
* w32fns.c (x_window_to_frame): Likewise. Adjust comment.
2012-11-12 Paul Eggert <eggert@cs.ucla.edu>
* data.c (Qdefalias_fset_function): Now static.
......
......@@ -906,7 +906,7 @@ DEFUN ("frame-list", Fframe_list, Sframe_list,
static Lisp_Object
next_frame (Lisp_Object frame, Lisp_Object minibuf)
{
Lisp_Object tail;
Lisp_Object f, tail;
int passed = 0;
/* There must always be at least one frame in Vframe_list. */
......@@ -918,12 +918,8 @@ next_frame (Lisp_Object frame, Lisp_Object minibuf)
CHECK_LIVE_FRAME (frame);
while (1)
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, f)
{
Lisp_Object f;
f = XCAR (tail);
if (passed
&& ((!FRAME_TERMCAP_P (XFRAME (f)) && !FRAME_TERMCAP_P (XFRAME (frame))
&& FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
......@@ -984,22 +980,13 @@ next_frame (Lisp_Object frame, Lisp_Object minibuf)
static Lisp_Object
prev_frame (Lisp_Object frame, Lisp_Object minibuf)
{
Lisp_Object tail;
Lisp_Object prev;
Lisp_Object f, tail, prev = Qnil;
/* There must always be at least one frame in Vframe_list. */
if (! CONSP (Vframe_list))
emacs_abort ();
eassert (CONSP (Vframe_list));
prev = Qnil;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, f)
{
Lisp_Object f;
f = XCAR (tail);
if (!FRAMEP (f))
emacs_abort ();
if (EQ (frame, f) && !NILP (prev))
return prev;
......@@ -1100,11 +1087,10 @@ Otherwise, include all frames. */)
static int
other_visible_frames (FRAME_PTR f)
{
Lisp_Object frames;
Lisp_Object frames, this;
for (frames = Vframe_list; CONSP (frames); frames = XCDR (frames))
FOR_EACH_FRAME (frames, this)
{
Lisp_Object this = XCAR (frames);
if (f == XFRAME (this))
continue;
......@@ -1158,15 +1144,10 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
minibuffer for any other frame? */
if (FRAME_HAS_MINIBUF_P (f))
{
Lisp_Object frames;
Lisp_Object frames, this;
for (frames = Vframe_list;
CONSP (frames);
frames = XCDR (frames))
FOR_EACH_FRAME (frames, this)
{
Lisp_Object this;
this = XCAR (frames);
if (! EQ (this, frame)
&& EQ (frame,
WINDOW_FRAME (XWINDOW
......@@ -1359,15 +1340,13 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
another one. */
if (f == last_nonminibuf_frame)
{
Lisp_Object frames;
Lisp_Object frames, this;
last_nonminibuf_frame = 0;
for (frames = Vframe_list;
CONSP (frames);
frames = XCDR (frames))
FOR_EACH_FRAME (frames, this)
{
f = XFRAME (XCAR (frames));
f = XFRAME (this);
if (!FRAME_MINIBUF_ONLY_P (f))
{
last_nonminibuf_frame = f;
......@@ -1380,27 +1359,13 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
single-kboard state if we're in it for this kboard. */
if (kb != NULL)
{
Lisp_Object frames;
Lisp_Object frames, this;
/* Some frame we found on the same kboard, or nil if there are none. */
Lisp_Object frame_on_same_kboard;
frame_on_same_kboard = Qnil;
for (frames = Vframe_list;
CONSP (frames);
frames = XCDR (frames))
{
Lisp_Object this;
struct frame *f1;
this = XCAR (frames);
if (!FRAMEP (this))
emacs_abort ();
f1 = XFRAME (this);
Lisp_Object frame_on_same_kboard = Qnil;
if (kb == FRAME_KBOARD (f1))
frame_on_same_kboard = this;
}
FOR_EACH_FRAME (frames, this)
if (kb == FRAME_KBOARD (XFRAME (this)))
frame_on_same_kboard = this;
if (NILP (frame_on_same_kboard))
not_single_kboard_state (kb);
......@@ -1412,27 +1377,16 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
frames with other windows. */
if (kb != NULL && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame)))
{
Lisp_Object frames;
Lisp_Object frames, this;
/* The last frame we saw with a minibuffer, minibuffer-only or not. */
Lisp_Object frame_with_minibuf;
Lisp_Object frame_with_minibuf = Qnil;
/* Some frame we found on the same kboard, or nil if there are none. */
Lisp_Object frame_on_same_kboard;
Lisp_Object frame_on_same_kboard = Qnil;
frame_on_same_kboard = Qnil;
frame_with_minibuf = Qnil;
for (frames = Vframe_list;
CONSP (frames);
frames = XCDR (frames))
FOR_EACH_FRAME (frames, this)
{
Lisp_Object this;
struct frame *f1;
this = XCAR (frames);
if (!FRAMEP (this))
emacs_abort ();
f1 = XFRAME (this);
struct frame *f1 = XFRAME (this);
/* Consider only frames on the same kboard
and only those with minibuffers. */
......@@ -1816,20 +1770,12 @@ DEFUN ("visible-frame-list", Fvisible_frame_list, Svisible_frame_list,
doc: /* Return a list of all frames now \"visible\" (being updated). */)
(void)
{
Lisp_Object tail, frame;
struct frame *f;
Lisp_Object value;
Lisp_Object tail, frame, value = Qnil;
FOR_EACH_FRAME (tail, frame)
if (FRAME_VISIBLE_P (XFRAME (frame)))
value = Fcons (frame, value);
value = Qnil;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (FRAME_VISIBLE_P (f))
value = Fcons (frame, value);
}
return value;
}
......
......@@ -304,19 +304,14 @@ check_x_display_info (Lisp_Object frame)
/* Return the Emacs frame-object corresponding to an w32 window.
It could be the frame's main window or an icon window. */
/* This function can be called during GC, so use GC_xxx type test macros. */
struct frame *
x_window_to_frame (struct w32_display_info *dpyinfo, HWND wdesc)
{
Lisp_Object tail, frame;
struct frame *f;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (!FRAME_W32_P (f) || FRAME_W32_DISPLAY_INFO (f) != dpyinfo)
continue;
......
......@@ -3437,16 +3437,11 @@ w32_handle_tool_bar_click (struct frame *f, struct input_event *button_event)
static struct scroll_bar *
x_window_to_scroll_bar (Window window_id)
{
Lisp_Object tail;
Lisp_Object tail, frame;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
Lisp_Object frame, bar, condemned;
frame = XCAR (tail);
/* All elements of Vframe_list should be frames. */
if (! FRAMEP (frame))
emacs_abort ();
Lisp_Object bar, condemned;
/* Scan this frame's scroll bar list for a scroll bar with the
right window ID. */
......
......@@ -2133,10 +2133,10 @@ window_list (void)
{
if (!CONSP (Vwindow_list))
{
Lisp_Object tail;
Lisp_Object tail, frame;
Vwindow_list = Qnil;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
Lisp_Object args[2];
......@@ -2144,7 +2144,7 @@ window_list (void)
new windows at the front of args[1], which means we
have to reverse this list at the end. */
args[1] = Qnil;
foreach_window (XFRAME (XCAR (tail)), add_window_to_list, &args[1]);
foreach_window (XFRAME (frame), add_window_to_list, &args[1]);
args[0] = Vwindow_list;
args[1] = Fnreverse (args[1]);
Vwindow_list = Fnconc (2, args);
......
......@@ -11096,17 +11096,15 @@ x_consider_frame_title (Lisp_Object frame)
|| f->explicit_name)
{
/* Do we have more than one visible frame on this X display? */
Lisp_Object tail;
Lisp_Object fmt;
Lisp_Object tail, other_frame, fmt;
ptrdiff_t title_start;
char *title;
ptrdiff_t len;
struct it it;
ptrdiff_t count = SPECPDL_INDEX ();
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, other_frame)
{
Lisp_Object other_frame = XCAR (tail);
struct frame *tf = XFRAME (other_frame);
if (tf != f
......
......@@ -5012,17 +5012,14 @@ face for italic. */)
else
{
/* Find any frame on DISPLAY. */
Lisp_Object fl_tail;
Lisp_Object tail;
frame = Qnil;
for (fl_tail = Vframe_list; CONSP (fl_tail); fl_tail = XCDR (fl_tail))
{
frame = XCAR (fl_tail);
if (!NILP (Fequal (Fcdr (Fassq (Qdisplay,
XFRAME (frame)->param_alist)),
display)))
break;
}
FOR_EACH_FRAME (tail, frame)
if (!NILP (Fequal (Fcdr (Fassq (Qdisplay,
XFRAME (frame)->param_alist)),
display)))
break;
}
CHECK_LIVE_FRAME (frame);
......
......@@ -224,13 +224,11 @@ x_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
Lisp_Object tail, frame;
struct frame *f;
if (wdesc == None) return 0;
if (wdesc == None)
return NULL;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
continue;
......@@ -270,18 +268,16 @@ struct frame *
x_any_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
{
Lisp_Object tail, frame;
struct frame *f, *found;
struct frame *f, *found = NULL;
struct x_output *x;
if (wdesc == None) return NULL;
if (wdesc == None)
return NULL;
found = NULL;
for (tail = Vframe_list; CONSP (tail) && !found; tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
if (found)
break;
f = XFRAME (frame);
if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo)
{
......@@ -325,13 +321,11 @@ x_menubar_window_to_frame (struct x_display_info *dpyinfo, XEvent *event)
struct frame *f;
struct x_output *x;
if (wdesc == None) return 0;
if (wdesc == None)
return NULL;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
continue;
......@@ -359,13 +353,11 @@ x_top_window_to_frame (struct x_display_info *dpyinfo, int wdesc)
struct frame *f;
struct x_output *x;
if (wdesc == None) return 0;
if (wdesc == None)
return NULL;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo)
continue;
......
......@@ -132,11 +132,8 @@ menubar_id_to_frame (LWLIB_ID id)
Lisp_Object tail, frame;
FRAME_PTR f;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
frame = XCAR (tail);
if (!FRAMEP (frame))
continue;
f = XFRAME (frame);
if (!FRAME_WINDOW_P (f))
continue;
......
......@@ -1940,7 +1940,7 @@ x_handle_selection_notify (XSelectionEvent *event)
static struct frame *
frame_for_x_selection (Lisp_Object object)
{
Lisp_Object tail;
Lisp_Object tail, frame;
struct frame *f;
if (NILP (object))
......@@ -1949,9 +1949,9 @@ frame_for_x_selection (Lisp_Object object)
if (FRAME_X_P (f) && FRAME_LIVE_P (f))
return f;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
f = XFRAME (XCAR (tail));
f = XFRAME (frame);
if (FRAME_X_P (f) && FRAME_LIVE_P (f))
return f;
}
......@@ -1959,15 +1959,14 @@ frame_for_x_selection (Lisp_Object object)
else if (TERMINALP (object))
{
struct terminal *t = get_terminal (object, 1);
if (t->type == output_x_window)
{
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
{
f = XFRAME (XCAR (tail));
if (FRAME_LIVE_P (f) && f->terminal == t)
return f;
}
}
FOR_EACH_FRAME (tail, frame)
{
f = XFRAME (frame);
if (FRAME_LIVE_P (f) && f->terminal == t)
return f;
}
}
else if (FRAMEP (object))
{
......
......@@ -1438,7 +1438,7 @@ static struct frame *
x_frame_of_widget (Widget widget)
{
struct x_display_info *dpyinfo;
Lisp_Object tail;
Lisp_Object tail, frame;
struct frame *f;
dpyinfo = x_display_info_for_display (XtDisplay (widget));
......@@ -1452,15 +1452,15 @@ x_frame_of_widget (Widget widget)
/* Look for a frame with that top-level widget. Allocate the color
on that frame to get the right gamma correction value. */
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
if (FRAMEP (XCAR (tail))
&& (f = XFRAME (XCAR (tail)),
(FRAME_X_P (f)
&& f->output_data.nothing != 1
&& FRAME_X_DISPLAY_INFO (f) == dpyinfo))
&& f->output_data.x->widget == widget)
return f;
FOR_EACH_FRAME (tail, frame)
{
f = XFRAME (frame);
if (FRAME_X_P (f)
&& f->output_data.nothing != 1
&& FRAME_X_DISPLAY_INFO (f) == dpyinfo
&& f->output_data.x->widget == widget)
return f;
}
emacs_abort ();
}
......@@ -4098,20 +4098,15 @@ XTmouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
static struct scroll_bar *
x_window_to_scroll_bar (Display *display, Window window_id)
{
Lisp_Object tail;
Lisp_Object tail, frame;
#if defined (USE_GTK) && defined (USE_TOOLKIT_SCROLL_BARS)
window_id = (Window) xg_get_scroll_id_for_window (display, window_id);
#endif /* USE_GTK && USE_TOOLKIT_SCROLL_BARS */
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
FOR_EACH_FRAME (tail, frame)
{
Lisp_Object frame, bar, condemned;
frame = XCAR (tail);
/* All elements of Vframe_list should be frames. */
if (! FRAMEP (frame))
emacs_abort ();
Lisp_Object bar, condemned;
if (! FRAME_X_P (XFRAME (frame)))
continue;
......@@ -4143,20 +4138,16 @@ x_window_to_scroll_bar (Display *display, Window window_id)
static Widget
x_window_to_menu_bar (Window window)
{
Lisp_Object tail;
Lisp_Object tail, frame;
for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail))
{
if (FRAME_X_P (XFRAME (XCAR (tail))))
{
Lisp_Object frame = XCAR (tail);
Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
if (menu_bar && xlwmenu_window_p (menu_bar, window))
return menu_bar;
}
}
FOR_EACH_FRAME (tail, frame)
if (FRAME_X_P (XFRAME (frame)))
{
Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
if (menu_bar && xlwmenu_window_p (menu_bar, window))
return menu_bar;
}
return NULL;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment