[v3 linux] implement missing functions

This commit is contained in:
Travis McLane
2023-06-23 21:50:51 -05:00
parent 83900b03d4
commit d52c26e82f
4 changed files with 43 additions and 33 deletions
+5
View File
@@ -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()
+20 -9
View File
@@ -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")
+9 -20
View File
@@ -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")
+9 -4
View File
@@ -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
}