mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
[v3 linux] implement missing functions
This commit is contained in:
@@ -95,6 +95,11 @@ func (m *linuxApp) destroy() {
|
||||
appDestroy(m.application)
|
||||
}
|
||||
|
||||
func (m *linuxApp) isOnMainThread() bool {
|
||||
// FIXME: How do we detect this properly?
|
||||
return false
|
||||
}
|
||||
|
||||
// register our window to our parent mapping
|
||||
func (m *linuxApp) registerWindow(window pointer, id uint) {
|
||||
m.windowsLock.Lock()
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/wailsapp/wails/v2/pkg/assetserver/webview"
|
||||
"github.com/wailsapp/wails/v3/pkg/events"
|
||||
)
|
||||
|
||||
/*
|
||||
@@ -42,8 +43,14 @@ static void dispatchOnMainThread(unsigned int id) {
|
||||
g_idle_add((GSourceFunc)dispatchCallback, (gpointer)args);
|
||||
}
|
||||
|
||||
typedef struct WindowEvent {
|
||||
uint id;
|
||||
uint event;
|
||||
} WindowEvent;
|
||||
|
||||
// exported below
|
||||
void activateLinux(gpointer data);
|
||||
extern void emit(WindowEvent* data);
|
||||
void handleClick(void*);
|
||||
extern gboolean onButtonEvent(GtkWidget *widget, GdkEventButton *event, gpointer user_data);
|
||||
extern void onDragNDrop(
|
||||
@@ -112,7 +119,6 @@ typedef struct Screen {
|
||||
static int GetNumScreens(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
@@ -669,17 +675,22 @@ func windowSetURL(webview pointer, uri string) {
|
||||
C.free(unsafe.Pointer(target))
|
||||
}
|
||||
|
||||
func windowSetupSignalHandlers(windowId uint, window, webview pointer, hideOnClose bool) {
|
||||
//export emit
|
||||
func emit(we *C.WindowEvent) {
|
||||
window := globalApplication.getWindowForID(uint(we.id))
|
||||
if window != nil {
|
||||
window.emit(events.WindowEventType(we.event))
|
||||
}
|
||||
}
|
||||
|
||||
func windowSetupSignalHandlers(windowId uint, window, webview pointer, emit func(e events.WindowEventType)) {
|
||||
event := C.CString("delete-event")
|
||||
defer C.free(unsafe.Pointer(event))
|
||||
|
||||
// Window close handler
|
||||
if hideOnClose {
|
||||
C.signal_connect((*C.GtkWidget)(window), event, C.gtk_widget_hide_on_delete, C.NULL)
|
||||
} else {
|
||||
//FIXME: what event should be emitted?
|
||||
// C.signal_connect((*C.GtkWidget)(window), event, C.close_button_pressed, w.parent.id)
|
||||
wEvent := C.WindowEvent{
|
||||
id: C.uint(windowId),
|
||||
event: C.uint(events.Common.WindowClosing),
|
||||
}
|
||||
C.signal_connect((*C.GtkWidget)(window), event, C.emit, unsafe.Pointer(&wEvent))
|
||||
|
||||
/*
|
||||
event = C.CString("load-changed")
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
"github.com/ebitengine/purego"
|
||||
"github.com/wailsapp/wails/v2/pkg/assetserver/webview"
|
||||
"github.com/wailsapp/wails/v3/pkg/events"
|
||||
)
|
||||
|
||||
type windowPointer uintptr
|
||||
@@ -74,8 +75,9 @@ var (
|
||||
|
||||
const (
|
||||
// TODO: map distro => so filename - with fallback?
|
||||
gtk3 = "libgtk-3.so.0"
|
||||
gtk4 = "libgtk-4.so.1"
|
||||
gtk3 = "libgtk-3.so.0"
|
||||
gtk4 = "libgtk-4.so.1"
|
||||
webkit4 = "libwebkit2gtk-4.1.so.0"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -211,7 +213,6 @@ func init() {
|
||||
}
|
||||
version = 3
|
||||
|
||||
var webkit4 string = "libwebkit2gtk-4.1.so"
|
||||
webkit, err = purego.Dlopen(webkit4, purego.RTLD_NOW|purego.RTLD_GLOBAL)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@@ -858,23 +859,11 @@ func windowSetURL(webview pointer, uri string) {
|
||||
webkitWebViewLoadUri(webview, uri)
|
||||
}
|
||||
|
||||
func windowSetupSignalHandlers(windowId uint, window, webview pointer, hideOnClose bool) {
|
||||
// Window close handler
|
||||
if hideOnClose {
|
||||
handleDelete := purego.NewCallback(func(pointer) {
|
||||
// FIXME: I think this should be the WebviewWindow
|
||||
//w.close()
|
||||
if !hideOnClose {
|
||||
fmt.Println("Need to do more!")
|
||||
}
|
||||
})
|
||||
|
||||
gSignalConnectData(window, "delete-event", handleDelete, 0, false, 0)
|
||||
|
||||
} else {
|
||||
//FIXME: what event should be emitted?
|
||||
// C.signal_connect((*C.GtkWidget)(window), event, C.close_button_pressed, w.parent.id)
|
||||
}
|
||||
func windowSetupSignalHandlers(windowId uint, window, webview pointer, emit func(e events.WindowEventType)) {
|
||||
handleDelete := purego.NewCallback(func(pointer) {
|
||||
emit(events.Common.WindowClosing)
|
||||
})
|
||||
gSignalConnectData(window, "delete-event", handleDelete, 0, false, 0)
|
||||
|
||||
/*
|
||||
event = C.CString("load-changed")
|
||||
|
||||
@@ -53,7 +53,10 @@ func (w *linuxWebviewWindow) enableDND() {
|
||||
}
|
||||
|
||||
func (w *linuxWebviewWindow) connectSignals() {
|
||||
windowSetupSignalHandlers(w.parent.id, w.window, w.webview, w.parent.options.HideOnClose)
|
||||
cb := func(e events.WindowEventType) {
|
||||
w.parent.emit(e)
|
||||
}
|
||||
windowSetupSignalHandlers(w.parent.id, w.window, w.webview, cb)
|
||||
}
|
||||
|
||||
func (w *linuxWebviewWindow) openContextMenu(menu *Menu, data *ContextMenuData) {
|
||||
@@ -193,9 +196,6 @@ func (w *linuxWebviewWindow) windowZoom() {
|
||||
|
||||
func (w *linuxWebviewWindow) close() {
|
||||
windowClose(w.window)
|
||||
if !w.parent.options.HideOnClose {
|
||||
globalApplication.deleteWindowByID(w.parent.id)
|
||||
}
|
||||
}
|
||||
|
||||
func (w *linuxWebviewWindow) zoomIn() {
|
||||
@@ -490,3 +490,8 @@ func (w *linuxWebviewWindow) startResize(border string) error {
|
||||
func (w *linuxWebviewWindow) nativeWindowHandle() uintptr {
|
||||
return uintptr(w.window)
|
||||
}
|
||||
|
||||
func (w *linuxWebviewWindow) print() error {
|
||||
w.execJS("window.print();")
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user