mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 19:50:15 +08:00
[linux] Remove signal handlers. Weird errors.
This commit is contained in:
parent
3092f04bcf
commit
41507e966a
@ -137,9 +137,9 @@ gboolean buttonRelease(GtkWidget *widget, GdkEventButton *event, void* dummy)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void connectButtons(void* webview, ulong* pressed, ulong* released) {
|
void connectButtons(void* webview) {
|
||||||
*pressed = g_signal_connect(WEBKIT_WEB_VIEW(webview), "button-press-event", G_CALLBACK(buttonPress), NULL);
|
g_signal_connect(WEBKIT_WEB_VIEW(webview), "button-press-event", G_CALLBACK(buttonPress), NULL);
|
||||||
*released = g_signal_connect(WEBKIT_WEB_VIEW(webview), "button-release-event", G_CALLBACK(buttonRelease), NULL);
|
g_signal_connect(WEBKIT_WEB_VIEW(webview), "button-release-event", G_CALLBACK(buttonRelease), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void processURLRequest(WebKitURISchemeRequest *request);
|
extern void processURLRequest(WebKitURISchemeRequest *request);
|
||||||
@ -147,20 +147,20 @@ extern void processURLRequest(WebKitURISchemeRequest *request);
|
|||||||
// This is called when the close button on the window is pressed
|
// This is called when the close button on the window is pressed
|
||||||
gboolean close_button_pressed(GtkWidget *widget, GdkEvent *event, void*)
|
gboolean close_button_pressed(GtkWidget *widget, GdkEvent *event, void*)
|
||||||
{
|
{
|
||||||
gtk_main_quit();
|
processMessage("Q");
|
||||||
return TRUE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget* setupWebview(void* contentManager, GtkWindow* window, int hideWindowOnClose, ulong* disconnectHandler) {
|
GtkWidget* setupWebview(void* contentManager, GtkWindow* window, int hideWindowOnClose) {
|
||||||
GtkWidget* webview = webkit_web_view_new_with_user_content_manager((WebKitUserContentManager*)contentManager);
|
GtkWidget* webview = webkit_web_view_new_with_user_content_manager((WebKitUserContentManager*)contentManager);
|
||||||
gtk_container_add(GTK_CONTAINER(window), webview);
|
gtk_container_add(GTK_CONTAINER(window), webview);
|
||||||
WebKitWebContext *context = webkit_web_context_get_default();
|
WebKitWebContext *context = webkit_web_context_get_default();
|
||||||
webkit_web_context_register_uri_scheme(context, "wails", (WebKitURISchemeRequestCallback)processURLRequest, NULL, NULL);
|
webkit_web_context_register_uri_scheme(context, "wails", (WebKitURISchemeRequestCallback)processURLRequest, NULL, NULL);
|
||||||
//g_signal_connect(G_OBJECT(webview), "load-changed", G_CALLBACK(webview_load_changed_cb), NULL);
|
//g_signal_connect(G_OBJECT(webview), "load-changed", G_CALLBACK(webview_load_changed_cb), NULL);
|
||||||
if (hideWindowOnClose) {
|
if (hideWindowOnClose) {
|
||||||
*disconnectHandler = g_signal_connect(GTK_WIDGET(window), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
|
g_signal_connect(GTK_WIDGET(window), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
|
||||||
} else {
|
} else {
|
||||||
*disconnectHandler = g_signal_connect(GTK_WIDGET(window), "delete-event", G_CALLBACK(close_button_pressed), NULL);
|
g_signal_connect(GTK_WIDGET(window), "delete-event", G_CALLBACK(close_button_pressed), NULL);
|
||||||
}
|
}
|
||||||
return webview;
|
return webview;
|
||||||
}
|
}
|
||||||
@ -199,15 +199,11 @@ func gtkBool(input bool) C.gboolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Window struct {
|
type Window struct {
|
||||||
appoptions *options.App
|
appoptions *options.App
|
||||||
debug bool
|
debug bool
|
||||||
gtkWindow unsafe.Pointer
|
gtkWindow unsafe.Pointer
|
||||||
contentManager unsafe.Pointer
|
contentManager unsafe.Pointer
|
||||||
webview unsafe.Pointer
|
webview unsafe.Pointer
|
||||||
signalInvoke C.ulong
|
|
||||||
signalMousePressed C.ulong
|
|
||||||
signalMouseReleased C.ulong
|
|
||||||
signalDestroy C.ulong
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func bool2Cint(value bool) C.int {
|
func bool2Cint(value bool) C.int {
|
||||||
@ -232,13 +228,13 @@ func NewWindow(appoptions *options.App, debug bool) *Window {
|
|||||||
external := C.CString("external")
|
external := C.CString("external")
|
||||||
defer C.free(unsafe.Pointer(external))
|
defer C.free(unsafe.Pointer(external))
|
||||||
C.webkit_user_content_manager_register_script_message_handler(result.cWebKitUserContentManager(), external)
|
C.webkit_user_content_manager_register_script_message_handler(result.cWebKitUserContentManager(), external)
|
||||||
result.signalInvoke = C.setupInvokeSignal(result.contentManager)
|
C.setupInvokeSignal(result.contentManager)
|
||||||
|
|
||||||
webview := C.setupWebview(result.contentManager, result.asGTKWindow(), bool2Cint(appoptions.HideWindowOnClose), &result.signalDestroy)
|
webview := C.setupWebview(result.contentManager, result.asGTKWindow(), bool2Cint(appoptions.HideWindowOnClose))
|
||||||
result.webview = unsafe.Pointer(webview)
|
result.webview = unsafe.Pointer(webview)
|
||||||
buttonPressedName := C.CString("button-press-event")
|
buttonPressedName := C.CString("button-press-event")
|
||||||
defer C.free(unsafe.Pointer(buttonPressedName))
|
defer C.free(unsafe.Pointer(buttonPressedName))
|
||||||
C.connectButtons(unsafe.Pointer(webview), &result.signalMousePressed, &result.signalMouseReleased)
|
C.connectButtons(unsafe.Pointer(webview))
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
C.devtoolsEnabled(unsafe.Pointer(webview), C.int(1))
|
C.devtoolsEnabled(unsafe.Pointer(webview), C.int(1))
|
||||||
@ -277,11 +273,6 @@ func (w *Window) UnFullscreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *Window) Destroy() {
|
func (w *Window) Destroy() {
|
||||||
// Destroy signal handlers
|
|
||||||
C.g_signal_handler_disconnect((C.gpointer)(w.contentManager), w.signalInvoke)
|
|
||||||
C.g_signal_handler_disconnect((C.gpointer)(w.webview), w.signalMousePressed)
|
|
||||||
C.g_signal_handler_disconnect((C.gpointer)(w.webview), w.signalMouseReleased)
|
|
||||||
C.g_signal_handler_disconnect((C.gpointer)(w.asGTKWindow()), w.signalDestroy)
|
|
||||||
C.g_object_unref(C.gpointer(w.gtkWindow))
|
C.g_object_unref(C.gpointer(w.gtkWindow))
|
||||||
C.gtk_widget_destroy(w.asGTKWidget())
|
C.gtk_widget_destroy(w.asGTKWidget())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user