summaryrefslogtreecommitdiff
path: root/examples/create-window/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/create-window/main.go')
-rw-r--r--examples/create-window/main.go18
1 files changed, 17 insertions, 1 deletions
diff --git a/examples/create-window/main.go b/examples/create-window/main.go
index d4f6d96..9510f9c 100644
--- a/examples/create-window/main.go
+++ b/examples/create-window/main.go
@@ -17,6 +17,7 @@ func main() {
fmt.Println(err)
return
}
+ defer X.Close()
// xproto.Setup retrieves the Setup information from the setup bytes
// gathered during connection.
@@ -122,7 +123,22 @@ func main() {
return // exit on q
}
case xproto.DestroyNotifyEvent:
- return // Exit if we get a DestroyNotifyEvent.
+ // Depending on the user's desktop environment (especially
+ // window manager), killing a window might close the
+ // client's X connection (e. g. the default Ubuntu
+ // desktop environment).
+ //
+ // If that's the case for your environment, closing this example's window
+ // will also call the underlying Go program (because closing the X
+ // connection gives a nil event and EOF error).
+ //
+ // Consider how a single application might have multiple windows
+ // (e.g. an open popup or dialog, ...)
+ //
+ // With other DEs, the X connection will still stay open even after the
+ // X window is closed. For these DEs (e.g. i3) we have to check whether
+ // the WM sent us a DestroyNotifyEvent and close our program:
+ return
}
}
}