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