Skip to content

Commit 6b3c393

Browse files
committed
New APIs
- SetCloseHandlerWebView - Focus - WaitAsync
1 parent 6668297 commit 6b3c393

File tree

1 file changed

+67
-15
lines changed

1 file changed

+67
-15
lines changed

v2/lib.go

Lines changed: 67 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ extern void goWebuiEventHandler(webui_event_t* e);
1919
extern void* goWebuiFileHandler(char* filename, int* length);
2020
extern void* goWebuiFileHandlerWindow(size_t window, char* filename, int* length);
2121
extern void goWebuiLoggerHandler(size_t level, char* message, void* user_data);
22+
extern bool goWebuiCloseHandlerWv(size_t window);
2223
2324
// Wrapper functions to handle const casting
2425
static const void* goWebuiFileHandlerWrapper(const char* filename, int* length) {
@@ -48,6 +49,14 @@ static void go_webui_set_file_handler_window(size_t win) {
4849
static void go_webui_set_logger(void* user_data) {
4950
webui_set_logger(goWebuiLoggerHandlerWrapper, user_data);
5051
}
52+
53+
static bool goWebuiCloseHandlerWvWrapper(size_t window) {
54+
return goWebuiCloseHandlerWv(window);
55+
}
56+
57+
static void go_webui_set_close_handler_wv(size_t win) {
58+
webui_set_close_handler_wv(win, goWebuiCloseHandlerWvWrapper);
59+
}
5160
*/
5261
import "C"
5362

@@ -79,6 +88,7 @@ const (
7988
Epic
8089
Yandex
8190
ChromiumBased
91+
Webview
8292
)
8393

8494
type Runtime uint8
@@ -141,11 +151,14 @@ const (
141151
)
142152

143153
type Event struct {
144-
Window Window
145-
EventType EventType
146-
Element string
147-
eventNumber uint
148-
bindId uint
154+
Window Window
155+
EventType EventType
156+
Element string
157+
eventNumber uint
158+
bindId uint
159+
ClientId uint
160+
ConnectionId uint
161+
Cookies string
149162
}
150163

151164
type ScriptOptions struct {
@@ -172,6 +185,9 @@ var funcList = make(map[Window]map[uint]func(Event) any)
172185
var fileHandlerList = make(map[Window]FileHandler)
173186
var fileHandlerWindowList = make(map[Window]FileHandlerWindow)
174187

188+
// User Go Close Handler Functions (WebView)
189+
var closeHandlerList = make(map[Window]func(Window) bool)
190+
175191
// User Go Logger Function
176192
var loggerFunc LoggerFunc
177193
var loggerUserData unsafe.Pointer
@@ -202,11 +218,14 @@ func NewWindowId() Window {
202218
func goWebuiEventHandler(e *C.webui_event_t) {
203219
// Create Go event from C event.
204220
goEvent := Event{
205-
Window: Window(e.window),
206-
EventType: EventType(e.event_type),
207-
Element: C.GoString(e.element),
208-
eventNumber: uint(e.event_number),
209-
bindId: uint(e.bind_id),
221+
Window: Window(e.window),
222+
EventType: EventType(e.event_type),
223+
Element: C.GoString(e.element),
224+
eventNumber: uint(e.event_number),
225+
bindId: uint(e.bind_id),
226+
ClientId: uint(e.client_id),
227+
ConnectionId: uint(e.connection_id),
228+
Cookies: C.GoString(e.cookies),
210229
}
211230
// Call user callback function.
212231
result := funcList[goEvent.Window][goEvent.bindId](goEvent)
@@ -310,6 +329,18 @@ func goWebuiFileHandlerWindow(window C.size_t, filename *C.char, length *C.int)
310329
return webuiBuffer
311330
}
312331

332+
// Private function that receives and handles WebView close handler callbacks.
333+
//
334+
//export goWebuiCloseHandlerWv
335+
func goWebuiCloseHandlerWv(window C.size_t) C._Bool {
336+
goWindow := Window(window)
337+
handler, exists := closeHandlerList[goWindow]
338+
if !exists || handler == nil {
339+
return C._Bool(true)
340+
}
341+
return C._Bool(handler(goWindow))
342+
}
343+
313344
// Private function that receives and handles logger callbacks.
314345
//
315346
//export goWebuiLoggerHandler
@@ -751,11 +782,13 @@ func (e *getArgError) Error() string {
751782

752783
func (e Event) cStruct() *C.webui_event_t {
753784
return &C.webui_event_t{
754-
window: C.size_t(e.Window),
755-
event_type: C.size_t(e.EventType),
756-
element: C.CString(e.Element),
757-
event_number: C.size_t(e.eventNumber),
758-
bind_id: C.size_t(e.bindId),
785+
window: C.size_t(e.Window),
786+
event_type: C.size_t(e.EventType),
787+
element: C.CString(e.Element),
788+
event_number: C.size_t(e.eventNumber),
789+
bind_id: C.size_t(e.bindId),
790+
client_id: C.size_t(e.ClientId),
791+
connection_id: C.size_t(e.ConnectionId),
759792
}
760793
}
761794

@@ -922,6 +955,25 @@ func (w Window) SetCustomParameters(params string) {
922955
C.webui_set_custom_parameters(C.size_t(w), cparams)
923956
}
924957

958+
// Focus brings a window to the front and focuses it.
959+
func (w Window) Focus() {
960+
C.webui_focus(C.size_t(w))
961+
}
962+
963+
// WaitAsync waits asynchronously until all opened windows get closed.
964+
// Returns true if more windows are still open, false otherwise.
965+
// In WebView mode, call this from the main thread.
966+
func WaitAsync() bool {
967+
return bool(C.webui_wait_async())
968+
}
969+
970+
// SetCloseHandlerWebView sets a callback to catch the close event of a WebView window.
971+
// The handler must return false to prevent the close, or true to allow it.
972+
func (w Window) SetCloseHandlerWebView(handler func(Window) bool) {
973+
closeHandlerList[w] = handler
974+
C.go_webui_set_close_handler_wv(C.size_t(w))
975+
}
976+
925977
// GetMimeType returns the HTTP mime type of a file.
926978
func GetMimeType(filename string) string {
927979
cfilename := C.CString(filename)

0 commit comments

Comments
 (0)