72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/BurntSushi/xgb"
|
|
"github.com/BurntSushi/xgb/xproto"
|
|
)
|
|
|
|
const (
|
|
width = 1920
|
|
height = 1080
|
|
)
|
|
|
|
func main() {
|
|
conn, err := xgb.NewConn()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer conn.Close()
|
|
|
|
screen := xproto.Setup(conn).DefaultScreen(conn)
|
|
window, err := xproto.NewWindowId(conn)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
values := uint32(xproto.CwBackPixel | xproto.CwEventMask)
|
|
xproto.CreateWindow(conn, screen.RootDepth, window, screen.Root, 0, 0, width, height, 0,
|
|
xproto.WindowClassInputOutput, screen.RootVisual, values,
|
|
[]uint32{screen.BlackPixel, xproto.EventMaskExposure})
|
|
xproto.MapWindow(conn, window)
|
|
conn.Sync()
|
|
|
|
// XFCE owns the actual fullscreen policy; use its existing wmctrl helper.
|
|
_ = exec.Command("wmctrl", "-i", "-r", fmt.Sprintf("0x%08x", window), "-b", "add,fullscreen").Run()
|
|
|
|
gc, err := xproto.NewGcontextId(conn)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
xproto.CreateGC(conn, gc, xproto.Drawable(window), xproto.GcForeground|xproto.GcBackground,
|
|
[]uint32{screen.WhitePixel, screen.BlackPixel})
|
|
font := xproto.Font(window)
|
|
xproto.OpenFont(conn, font, uint16(len("fixed")), "fixed")
|
|
xproto.ChangeGC(conn, gc, xproto.GcFont, []uint32{uint32(font)})
|
|
|
|
draw := func() {
|
|
xproto.ClearArea(conn, false, window, 0, 0, width, height)
|
|
message := "Brak polaczenia WFB"
|
|
xproto.ImageText8(conn, byte(len(message)), xproto.Drawable(window), gc, 32, 56, message)
|
|
conn.Sync()
|
|
}
|
|
draw()
|
|
|
|
for {
|
|
event, err := conn.WaitForEvent()
|
|
if err != nil {
|
|
if os.IsTimeout(err) {
|
|
continue
|
|
}
|
|
return
|
|
}
|
|
if _, ok := event.(xproto.ExposeEvent); ok {
|
|
draw()
|
|
}
|
|
}
|
|
}
|