From e673ca8cdf510551058bea4388c7215df6fd987d Mon Sep 17 00:00:00 2001
From: Kevin Lyda <kevin@lyda.ie>
Date: Thu, 1 Dec 2022 22:14:36 +0000
Subject: [PATCH] Initial pass to handle clicks.

---
 bar/clicks.go | 31 +++++++++++++++++++++++++++++++
 bar/config.go | 17 +++++++++++++++++
 bar/run.go    | 23 ++++-------------------
 3 files changed, 52 insertions(+), 19 deletions(-)
 create mode 100644 bar/clicks.go
 create mode 100644 bar/config.go

diff --git a/bar/clicks.go b/bar/clicks.go
new file mode 100644
index 0000000..2eea888
--- /dev/null
+++ b/bar/clicks.go
@@ -0,0 +1,31 @@
+// Package bar handles the main program for i3going-on.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
+package bar
+
+import (
+	"bufio"
+	"os"
+)
+
+type Clicks struct {
+	Button    int64    `json:"button"`
+	Modifiers []string `json:"modifiers"`
+	X         int64    `json:"x"`
+	Y         int64    `json:"y"`
+	RelativeX int64    `json:"relative_x"`
+	RelativeY int64    `json:"relative_y"`
+	Width     int64    `json:"width"`
+	Height    int64    `json:"height"`
+}
+
+//{"button":1,"modifiers":[],"x":1952,"y":1144,"relative_x":62,"relative_y":14,"width":112,"height":22}
+func handleCommands() {
+	logger, err := os.Create("/tmp/i3going-on.log")
+	if err != nil {
+		panic(err)
+	}
+	scanner := bufio.NewScanner(os.Stdin)
+	for scanner.Scan() {
+		logger.WriteString(scanner.Text())
+	}
+}
diff --git a/bar/config.go b/bar/config.go
new file mode 100644
index 0000000..606a8d5
--- /dev/null
+++ b/bar/config.go
@@ -0,0 +1,17 @@
+// Package bar handles the main program for i3going-on.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
+package bar
+
+import (
+	"github.com/spf13/cobra"
+	"gitlab.ie.suberic.net/kevin/i3going-on/config"
+)
+
+func readConfig(configFile string) (*config.Config, error) {
+	cfg, err := config.ReadConfig(configFile)
+	cobra.CheckErr(err)
+	if cfg.Refresh < 1 {
+		cfg.Refresh = 5
+	}
+	return cfg, err
+}
diff --git a/bar/run.go b/bar/run.go
index a4761ff..53fcd23 100644
--- a/bar/run.go
+++ b/bar/run.go
@@ -3,37 +3,20 @@
 package bar
 
 import (
-	"bufio"
 	"fmt"
-	"os"
 	"strings"
 	"time"
 
 	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
-	"gitlab.ie.suberic.net/kevin/i3going-on/config"
 	"golang.org/x/sys/unix"
 )
 
-func handleCommands() {
-	logger, err := os.Create("/tmp/i3going-on.log")
-	if err != nil {
-		panic(err)
-	}
-	scanner := bufio.NewScanner(os.Stdin)
-	for scanner.Scan() {
-		logger.WriteString(scanner.Text())
-	}
-}
-
 // Run is essentially the main program.
 func Run(cmd *cobra.Command, args []string) {
 	viper.BindPFlags(cmd.Flags())
-	cfg, err := config.ReadConfig(viper.GetString("config"))
+	cfg, err := readConfig(viper.GetString("config"))
 	cobra.CheckErr(err)
-	if cfg.Refresh < 1 {
-		cfg.Refresh = 5
-	}
 	go handleCommands()
 
 	fmt.Printf(`{ "version": 1, "stop_signal": %d, "cont_signal": %d, "click_events": true }`+"\n",
@@ -46,6 +29,8 @@ func Run(cmd *cobra.Command, args []string) {
 		}
 		fmt.Printf("%s\n[%s]", separator, strings.Join(line, ","))
 		separator = ","
-		time.Sleep(time.Duration(cfg.Refresh) * time.Second)
+		select {
+		case <-time.After(time.Duration(cfg.Refresh) * time.Second):
+		}
 	}
 }
-- 
GitLab