Skip to content

Commit 039afdb

Browse files
committed
Make xorg connection optional
1 parent 68e1d79 commit 039afdb

3 files changed

Lines changed: 22 additions & 18 deletions

File tree

desktop_unix.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,38 +48,35 @@ var (
4848
ErrNoClass = errors.New("empty class")
4949
)
5050

51-
func Connect(display string) Xorg {
51+
func Connect(display string) (*Xorg, error) {
5252
var x Xorg
5353
var err error
5454

5555
x.conn, err = xgb.NewConnDisplay(display)
5656
if err != nil {
57-
log.Fatal("xgb:", err)
57+
return nil, err
5858
}
5959

6060
x.util, err = xgbutil.NewConnDisplay(display)
6161
if err != nil {
62-
log.Fatal(err)
62+
return nil, err
6363
}
6464

65-
err = screensaver.Init(x.conn)
66-
if err != nil {
67-
log.Fatal("screensaver:", err)
65+
if err := screensaver.Init(x.conn); err == nil {
66+
drw := xproto.Drawable(x.root)
67+
screensaver.SelectInput(x.conn, drw, screensaver.EventNotifyMask)
6868
}
6969

7070
setup := xproto.Setup(x.conn)
7171
x.root = setup.DefaultScreen(x.conn).Root
7272

73-
drw := xproto.Drawable(x.root)
74-
screensaver.SelectInput(x.conn, drw, screensaver.EventNotifyMask)
75-
7673
x.activeAtom = x.atom("_NET_ACTIVE_WINDOW")
7774
x.netNameAtom = x.atom("_NET_WM_NAME")
7875
x.nameAtom = x.atom("WM_NAME")
7976
x.classAtom = x.atom("WM_CLASS")
8077

8178
x.spy(x.root)
82-
return x
79+
return &x, nil
8380
}
8481

8582
func (x Xorg) Close() {

main.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ import (
1515
)
1616

1717
var (
18-
dev streamdeck.Device
18+
dev streamdeck.Device
19+
deck *Deck
20+
1921
dbusConn *dbus.Conn
2022
keyboard uinput.Keyboard
21-
x Xorg
2223

23-
deck *Deck
24+
xorg *Xorg
2425
recentWindows []Window
2526

2627
deckFile = flag.String("deck", "deckmaster.deck", "path to deck config file")
@@ -79,11 +80,12 @@ func main() {
7980
log.Fatal(err)
8081
}
8182

82-
x = Connect(os.Getenv("DISPLAY"))
83-
defer x.Close()
84-
8583
tch := make(chan interface{})
86-
x.TrackWindows(tch, time.Second)
84+
xorg, err = Connect(os.Getenv("DISPLAY"))
85+
if err == nil {
86+
defer xorg.Close()
87+
xorg.TrackWindows(tch, time.Second)
88+
}
8789

8890
d, err := streamdeck.Devices()
8991
if err != nil {

widget_recent_window.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ func (w *RecentWindowWidget) Update(dev *streamdeck.Device) {
3737
}
3838

3939
func (w *RecentWindowWidget) TriggerAction() {
40+
if xorg == nil {
41+
log.Println("xorg support is disabled!")
42+
return
43+
}
44+
4045
if int(w.window) < len(recentWindows) {
41-
x.RequestActivation(recentWindows[w.window])
46+
xorg.RequestActivation(recentWindows[w.window])
4247
}
4348
}

0 commit comments

Comments
 (0)