summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorhhvn <dev@hhvn.uk>2023-08-14 14:04:41 +0100
committerhhvn <dev@hhvn.uk>2023-08-14 14:47:38 +0100
commit79a80fbbf278e0eb743a79e2c0c252817537434f (patch)
tree7704e968ec2071a931140b43f6ec2ea61ed1d527 /main.go
parent0543020038edb5de1162863e7401ea36f8a8584c (diff)
Creating and destroying the windows
Diffstat (limited to 'main.go')
-rw-r--r--main.go54
1 files changed, 45 insertions, 9 deletions
diff --git a/main.go b/main.go
index a9e23c2..b720f98 100644
--- a/main.go
+++ b/main.go
@@ -1,16 +1,14 @@
package main
import (
+ "os"
"strings"
+ "syscall"
+ "os/signal"
"hhvn.uk/hbspbar/common"
"hhvn.uk/hbspbar/bspc"
"hhvn.uk/hbspbar/bar"
-
- /*
- "github.com/BurntSushi/xgb"
- "github.com/BurntSushi/xgb/xproto"
- */
)
var reloadEvents = []string{
@@ -40,7 +38,7 @@ func reloadState(current *bspc.State) (*bspc.State, error) {
}
}
-func handleEvent(events *bspc.Subscriber) (bool) {
+func handleEvent(events *bspc.Subscriber, state *bspc.State, bar *bar.Handle) (bool) {
var event *bspc.Event
select {
@@ -55,6 +53,16 @@ func handleEvent(events *bspc.Subscriber) (bool) {
return false
}
+ if strings.HasPrefix(event.Name, "monitor_") {
+ id, err := common.Intify(event.Tokens[0])
+ if err == nil {
+ switch (event.Name) {
+ case "monitor_add": bar.Create <- id
+ case "monitor_remove": bar.Destroy <- id
+ }
+ }
+ }
+
for i := 0; i < len(reloadEvents); i++ {
if event.Name == reloadEvents[i] {
return true
@@ -65,26 +73,54 @@ func handleEvent(events *bspc.Subscriber) (bool) {
}
func main() {
+ signals := make(chan os.Signal, 1)
+ signal.Notify(signals,
+ syscall.SIGINT,
+ syscall.SIGHUP,
+ syscall.SIGTERM)
+
state, err := bspc.LoadState()
- if (err != nil) {
+ if err != nil {
common.Error("Couldn't load bspwm state: %s\n", err)
return
}
events, err := bspc.Subscribe()
- if (err != nil) {
+ if err != nil {
common.Error("Couldn't subscribe to bspwm: %s\n", err)
return
}
defer events.Close()
+ barhandle, err := bar.Init(state)
+ if err != nil {
+ common.Error("Couldn't initialize X: %s\n", err)
+ return
+ }
+
+ for _, m := range state.Monitors {
+ barhandle.Create <- m.ID
+ }
+ defer bar.Cleanup()
for {
- if reload := handleEvent(events); reload {
+ if reload := handleEvent(events, state, barhandle); reload {
state, err = reloadState(state)
if err != nil {
common.Error("Couldn't reload bspwm state: %s\n", err)
}
+
+ barhandle.NewState <- state
+ }
+
+ select {
+ case s := <- signals:
+ common.Error("%s\n", s)
+ return
+ case err := <- barhandle.Err:
+ common.Error("%s\n", err)
+ return
+ default:
}
}
}