Fix hacked GTK3/GLFW crash by vendoring a patched sqweek/dialog
The built hacked binary segfaults on Linux the moment a native GTK3 dialog (file/folder browse) opens while a GLFW/OpenGL context is live: sqweek/dialog's Linux backend never calls XInitThreads() before gtk_init(), and GLFW's own X11 backend installs a process-wide Xlib error handler that collides with GTK's. Vendor a pinned copy of github.com/sqweek/dialog (New BSD) into modding/sqweek-dialog/ so it can be patched like every other vendored source here: sqweek-dialog-patches/01-xinitthreads.patch adds the missing XInitThreads() call, and hacked-patches/01-use-patched-dialog.patch adds a go.mod replace directive pointing hacked's own sqweek/dialog dependency at that local copy. build-hacked.sh now stages both hacked/ and sqweek-dialog/ into a scratch modding/build/ directory and applies their patch series before compiling, rather than building hacked/ in place; .gitignore picks up that new scratch directory. Also expand modding/README.md: number its existing sections and add a worked "Example: Editing a message" walkthrough covering Static World Data, the Messages window's clipboard-only text editing, saving the Mod Location, and the absolute-path requirement for run.sh's mod-folder argument.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
--- a/dlgs_linux.go
|
||||
+++ b/dlgs_linux.go
|
||||
@@ -1,8 +1,9 @@
|
||||
package dialog
|
||||
|
||||
-// #cgo pkg-config: gtk+-3.0
|
||||
+// #cgo pkg-config: gtk+-3.0 x11
|
||||
// #include <gtk/gtk.h>
|
||||
// #include <stdlib.h>
|
||||
+// #include <X11/Xlib.h>
|
||||
// static GtkWidget* msgdlg(GtkWindow *parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, char *msg) {
|
||||
// return gtk_message_dialog_new(parent, flags, type, buttons, "%s", msg);
|
||||
// }
|
||||
@@ -13,6 +14,7 @@
|
||||
import "unsafe"
|
||||
|
||||
func init() {
|
||||
+ C.XInitThreads()
|
||||
C.gtk_init(nil, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user