From fa96cc7b185711079954448d265490e42cd9ccdb Mon Sep 17 00:00:00 2001
From: Dylan Araps <dylan.araps@gmail.com>
Date: Wed, 16 Oct 2019 14:15:34 +0300
Subject: [PATCH] sowm: reduce scope of client

---
 sowm.c | 41 ++++++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/sowm.c b/sowm.c
index de2e6f5..a99d53c 100644
--- a/sowm.c
+++ b/sowm.c
@@ -49,6 +49,8 @@ static void win_kill();
 static void win_next();
 static void win_to_ws(const Arg arg);
 static void ws_go(const Arg arg);
+static void ws_save(int i);
+static void ws_sel(int i);
 
 static client  *list = {0};
 static desktop ws_list[10];
@@ -77,17 +79,11 @@ static void (*events[LASTEvent])(XEvent *e) = {
 #include "config.h"
 
 // Iterate over the current desktop's window list.
-#define win (c=list;c;c=c->next)
+#define win (client *c=list;c;c=c->next)
 
 // Focus the given window.
 #define win_focus(W) XSetInputFocus(d, W, RevertToParent, CurrentTime);
 
-// Save the current desktop's window list.
-#define ws_save(i) ws_list[i].list = list;
-
-// Select the current desktop's window list.
-#define ws_sel(i) list = ws_list[i].list, ws = i;
-
 /*
    'sowm' doesn't keep track of the currently focused window
    and instead grabs the window under the cursor when needed.
@@ -237,8 +233,6 @@ void button_press(XEvent *e) {
    no longer at 0,0+[screen_width]X[screen_height].
 */
 void button_release() {
-    client *c;
-
     for win if (c->w == mouse.subwindow) c->f = 0;
 
     mouse.subwindow = None;
@@ -282,8 +276,6 @@ void win_add(Window w) {
    is updated.
 */
 void win_del(Window w) {
-    client *c;
-
     for win if (c->w == w) {
         if (!c->prev && !c->next) {
             free(list);
@@ -355,8 +347,6 @@ void win_center(const Arg arg) {
    the window is un-fullscreened.
 */
 void win_fs() {
-    client *c;
-
     win_current();
 
     for win if (c->w == cur) {
@@ -411,15 +401,12 @@ void win_to_ws(const Arg arg) {
 */
 void win_next() {
     win_current();
-    client *c;
-
-    if (list) {
-        for win if (c->w == cur) break;
-
+    for win if (c->w == cur) {
         c = c->next ? c->next : list;
 
         win_focus(c->w);
         XRaiseWindow(d, c->w);
+        return;
     }
 }
 
@@ -434,7 +421,6 @@ void win_next() {
     destination desktop's window list.
 */
 void ws_go(const Arg arg) {
-    client *c;
     int tmp = ws;
 
     if (arg.i == ws) return;
@@ -453,6 +439,23 @@ void ws_go(const Arg arg) {
     if (list) win_focus(list->w);
 }
 
+/*
+    This function saves the current desktop's window list.
+    Simple, nothing to see here.
+*/
+void ws_save(int i) {
+    ws_list[i].list = list;
+}
+
+/*
+    This function restores a saved desktop's window list.
+    Simple, nothing to see here.
+*/
+void ws_sel(int i) {
+    list = ws_list[i].list;
+    ws   = i;
+}
+
 /*
    This function allows a window to request a size,
    position and other attributes.