79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/gotk3/gotk3/gdk"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
)
|
|
|
|
func initWindow(application *gtk.Application) *gtk.ApplicationWindow {
|
|
w, err := gtk.ApplicationWindowNew(application)
|
|
if err != nil {
|
|
log.Fatal("failed to create window:", err)
|
|
}
|
|
|
|
w.Connect("key-press-event", handleKeybinding)
|
|
|
|
w.Connect("destroy", func() {
|
|
os.Exit(0)
|
|
})
|
|
|
|
w.SetTitle("gmenu")
|
|
w.SetDecorated(false)
|
|
w.SetBorderWidth(0)
|
|
w.Stick()
|
|
w.SetKeepAbove(true)
|
|
w.SetTypeHint(gdk.WINDOW_TYPE_HINT_UTILITY)
|
|
|
|
if !config.Fullscreen {
|
|
w.SetResizable(config.Resizable)
|
|
w.SetSizeRequest(config.Width, config.Height)
|
|
w.SetPosition(gtk.WIN_POS_CENTER)
|
|
} else {
|
|
w.Fullscreen()
|
|
}
|
|
|
|
return w
|
|
}
|
|
|
|
func handleKeybinding(_ *gtk.ApplicationWindow, ev *gdk.Event) bool {
|
|
keyEvent := &gdk.EventKey{ev}
|
|
switch keyEvent.KeyVal() {
|
|
case gdk.KEY_Up, gdk.KEY_Down:
|
|
offset := -1
|
|
if keyEvent.KeyVal() == gdk.KEY_Down {
|
|
offset = 1
|
|
}
|
|
|
|
index := 0
|
|
row := listBox.GetSelectedRow()
|
|
if row != nil {
|
|
index = row.GetIndex()
|
|
}
|
|
|
|
row = listBox.GetRowAtIndex(index + offset)
|
|
if row != nil {
|
|
listBox.SelectRow(row)
|
|
row.GrabFocus()
|
|
inputView.GrabFocus()
|
|
}
|
|
|
|
return true
|
|
case gdk.KEY_Return, gdk.KEY_KP_Enter, gdk.KEY_ISO_Enter, gdk.KEY_3270_Enter:
|
|
runInTerminal := keyEvent.State()&uint(gdk.MOD1_MASK) > 0
|
|
|
|
err := listSelect(inputView, runInTerminal)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
return true
|
|
case gdk.KEY_Escape:
|
|
os.Exit(0)
|
|
}
|
|
|
|
return false
|
|
}
|