dontpanic92 / wxGo

Golang wxWidgets Wrapper
Other
403 stars 51 forks source link

Webview not catching key events #75

Open salmoni opened 4 years ago

salmoni commented 4 years ago

I'm writing a web browser for tracking user behaviour in usability testing. I've managed to collect mouse events but cannot get any key events in a Webview.

Some example code: The 'FrameOnKeyDown' function should print out "Key press" to the console when a key is pressed but, alas, this does not happen.

Does the Webview capture all key events and veto any further propagation? Menu shortcuts work okay when the Webview has focus so I think I've missed something important somewhere.

What is the best way to capture key events?

package main

import (
    "fmt"
    "github.com/dontpanic92/wxGo/wx"
)

// MainFrame Objects for the mainframe
type MainFrame struct {
    wx.Frame
    Webview     wx.WebView
}

// Key catcher
func (f *MainFrame) FrameOnKeyDown(wx.Event) {
    fmt.Println("Key press")
}

// NewFrame creates a new frame for the program
func NewFrame() *MainFrame {
    f := &MainFrame{}
    f.Frame = wx.NewFrame(wx.NullWindow, -1, "WebTrackly", wx.NewPointT(300, 100), wx.NewSizeT(800, 600), wx.DEFAULT_FRAME_STYLE|wx.WANTS_CHARS)
    f.Frame.SetClientSize(wx.NewSizeT(800, 600))
    f.Webview = wx.WebViewNew(f, wx.ID_ANY)
    f.Webview.LoadURL("http://ddg.gg")
    wx.Bind(f.Webview, wx.EVT_CHAR, f.FrameOnKeyDown, f.Webview.GetId())
    wx.Bind(f.Webview, wx.EVT_KEY_UP, f.FrameOnKeyDown, f.Webview.GetId())
    wx.Bind(f.Webview, wx.EVT_KEY_DOWN, f.FrameOnKeyDown, f.Webview.GetId())
    return f
}

//Main Function
func main() {
    wx1 := wx.NewApp("Webview test")
    f := NewFrame()
    f.Show()
    wx1.MainLoop()
    return
}