+// search forward from start, return the last client before end
+Client*
+prev_tiled (Client *start, Client *end) {
+ Client *w, *n;
+ for (w = start; w && (n = nexttiled(w->next)); w = n) {
+ if (n == end) {
+ return w;
+ }
+ }
+ return NULL;
+}
+
+// return the window to show on the right side
+Client*
+choose_slave (Client *master, Client *focused) {
+ if (!master) {
+ return NULL;
+ }
+ if (focused) {
+ // FIXME put this same algorithm in update_window_opacities
+ if (focused->isfloating) {
+ // show the window just "under" it
+ Client *prev = prev_tiled(master, focused);
+ // fall back to the first slave
+ if (prev && prev != master) {
+ return prev;
+ } else {
+ return nexttiled(master->next);
+ }
+ } else {
+ // focused window is tiled
+ if (focused == master) {
+ // master is focused, show first slave
+ return nexttiled(master->next);
+ } else {
+ // focused window is a slave, so show that one
+ return focused;
+ }
+ }
+ }
+ // maybe we get called when there's no focused?
+ return nexttiled(master->next);
+}
+
+#define GUTTER_PX 4
+