From ca95ed9c335d31dc774738509a162c9eb710e222 Mon Sep 17 00:00:00 2001
From: Jeff Abrahamson
Date: Tue, 8 Jul 2014 00:25:02 +0200
Subject: [PATCH 2/2] Refactor a bit of set_active_window_body() into a helper
function.
---
src/window.c | 99 ++++++++++++++++++++++++++++++++----------------------------
1 file changed, 53 insertions(+), 46 deletions(-)
diff --git a/src/window.c b/src/window.c
index 9d784ea..ad8c9fc 100644
--- a/src/window.c
+++ b/src/window.c
@@ -452,13 +452,64 @@ void set_active_window_force (rp_window *win)
set_active_window_body(win, 1);
}
+/* Helper function for set_active_window_body(). */
+static void set_active_window_body_update_frame(rp_window *win,
+ rp_frame **frame,
+ rp_frame **last_frame)
+{
+ /* Try to find a non-dedicated frame. */
+ rp_frame *cur;
+ rp_screen *scr;
+ int done;
+
+ scr = (rp_have_xinerama ? &screens[rp_current_screen] : win->scr);
+ done = 0;
+
+ /* Try the only / current screen... */
+ for (cur = list_next_entry ((*frame), &scr->frames, node);
+ cur != *frame && !done;
+ cur = list_next_entry (cur, &scr->frames, node))
+ {
+ if (!cur->dedicated)
+ {
+ set_active_frame (cur, 0);
+ *last_frame = *frame;
+ *frame = cur;
+ done = 1;
+ }
+ }
+
+ /* If we have Xinerama, we can check *all* screens... */
+ if (rp_have_xinerama && !done)
+ {
+ int i;
+
+ for (i=0; idedicated)
+ {
+ set_active_frame (cur, 0);
+ *last_frame = *frame;
+ *frame = cur;
+ done = 1; /* Break outer loop. */
+ break; /* Break inner loop. */
+ }
+ }
+ }
+ }
+}
+
/* FIXME: This function is probably a mess. I can't remember a time
when I didn't think this. It probably needs to be fixed up. */
void
set_active_window_body (rp_window *win, int force)
{
rp_window *last_win;
- rp_frame *frame = NULL, *last_frame = NULL;
+ rp_frame *frame = NULL;
+ rp_frame *last_frame = NULL;
if (win == NULL) return;
@@ -481,51 +532,7 @@ set_active_window_body (rp_window *win, int force)
frame = screen_get_frame (screen, screen->current_frame);
if (frame->dedicated && !force)
- {
- /* Try to find a non-dedicated frame. */
- rp_frame *cur;
- rp_screen *scr;
- int done;
-
- scr = (rp_have_xinerama)?&screens[rp_current_screen]:win->scr;
- done = 0;
-
- /* Try the only / current screen... */
- for (cur = list_next_entry (frame, &scr->frames, node);
- cur != frame && !done;
- cur = list_next_entry (cur, &scr->frames, node))
- {
- if (!cur->dedicated)
- {
- set_active_frame (cur, 0);
- last_frame = frame;
- frame = cur;
- done = 1;
- }
- }
-
- /* If we have Xinerama, we can check *all* screens... */
- if (rp_have_xinerama && !done)
- {
- int i;
-
- for (i=0; idedicated)
- {
- set_active_frame (cur, 0);
- last_frame = frame;
- frame = cur;
- done = 1; /* Break outer loop. */
- break; /* Break inner loop. */
- }
- }
- }
- }
- }
+ set_active_window_body_update_frame(win, &frame, &last_frame);
last_win = set_frames_window (frame, win);
--
1.9.1