From 79a80fbbf278e0eb743a79e2c0c252817537434f Mon Sep 17 00:00:00 2001 From: hhvn Date: Mon, 14 Aug 2023 14:04:41 +0100 Subject: Creating and destroying the windows --- main.go | 54 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'main.go') 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: } } } -- cgit v1.2.3