5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 04:42:00 +08:00

implement opendialog as callback function

This commit is contained in:
Travis McLane 2022-01-19 13:37:44 -06:00
parent 3bcddd5b4c
commit a2d447aecf

View File

@ -202,26 +202,23 @@ void ExecuteOnMainThread(void* f, JSCallback* jscallback) {
void extern processOpenFileResult(char*); void extern processOpenFileResult(char*);
static void OpenDialog(GtkWindow* window, char *title) { int opendialog(gpointer data) {
printf("Here\n"); struct JSCallback *js = data;
GtkWidget *dlg = gtk_file_chooser_dialog_new(title, window, GTK_FILE_CHOOSER_ACTION_OPEN, GtkWidget *dlg = gtk_file_chooser_dialog_new(js->script, js->webview, GTK_FILE_CHOOSER_ACTION_OPEN,
"_Cancel", GTK_RESPONSE_CANCEL, "_Cancel", GTK_RESPONSE_CANCEL,
"_Open", GTK_RESPONSE_ACCEPT, "_Open", GTK_RESPONSE_ACCEPT,
NULL); NULL);
printf("Here3\n");
gint response = gtk_dialog_run(GTK_DIALOG(dlg)); gint response = gtk_dialog_run(GTK_DIALOG(dlg));
printf("Here 4\n");
if (response == GTK_RESPONSE_ACCEPT)
{
printf("Here 5\n");
if (response == GTK_RESPONSE_ACCEPT) {
gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg)); gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg));
processOpenFileResult(filename); processOpenFileResult(filename);
g_free(filename); g_free(filename);
} }
gtk_widget_destroy(dlg); gtk_widget_destroy(dlg);
free(js->script);
return G_SOURCE_REMOVE;
} }
*/ */
@ -229,7 +226,6 @@ import "C"
import ( import (
"github.com/wailsapp/wails/v2/internal/frontend" "github.com/wailsapp/wails/v2/internal/frontend"
"github.com/wailsapp/wails/v2/pkg/options" "github.com/wailsapp/wails/v2/pkg/options"
"os"
"unsafe" "unsafe"
) )
@ -455,9 +451,10 @@ func (w *Window) Quit() {
} }
func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions) { func (w *Window) OpenFileDialog(dialogOptions frontend.OpenDialogOptions) {
println("OpenFileDialog PID:", os.Getpid()) data := C.JSCallback{
mem := NewCalloc() webview: w.webview,
title := mem.String(dialogOptions.Title) script: C.CString(dialogOptions.Title),
C.OpenDialog(w.asGTKWindow(), title) }
mem.Free() C.ExecuteOnMainThread(C.opendialog, &data)
} }