From: Dmitry Antipov Date: Mon, 12 Nov 2012 04:00:55 +0000 (+0400) Subject: Simplify by using FOR_EACH_FRAME here and there. X-Git-Tag: emacs-24.3.90~173^2~18^2~132 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5b04e9f9ac3212f0eb88c853dd21dd63a8bdbee2;p=emacs.git 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. --- diff --git a/src/ChangeLog b/src/ChangeLog index 3c0e5e4e2b5..e35e307c4ee 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,20 @@ +2012-11-12 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. + 2012-11-12 Paul Eggert * data.c (Qdefalias_fset_function): Now static. diff --git a/src/frame.c b/src/frame.c index 52be8be270e..d580bf7f148 100644 --- a/src/frame.c +++ b/src/frame.c @@ -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; } diff --git a/src/w32fns.c b/src/w32fns.c index bb2abfe0807..ed5625e802c 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -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; diff --git a/src/w32term.c b/src/w32term.c index b14a46bc01a..032912c27f4 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -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. */ diff --git a/src/window.c b/src/window.c index 09ee20e4b86..9f3474fcd53 100644 --- a/src/window.c +++ b/src/window.c @@ -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); diff --git a/src/xdisp.c b/src/xdisp.c index 968c23c0944..5bda3347fe8 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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 diff --git a/src/xfaces.c b/src/xfaces.c index eb19622435d..daf329791c1 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -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); diff --git a/src/xfns.c b/src/xfns.c index 82e218479c8..1f98e9fc8c7 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -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; diff --git a/src/xmenu.c b/src/xmenu.c index 01d932cf8d8..b585df2125b 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -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; diff --git a/src/xselect.c b/src/xselect.c index de9386bd7d9..64c64fa0c76 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -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)) { diff --git a/src/xterm.c b/src/xterm.c index f89fbabaecc..463d82b4ee2 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -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; }