e410d82680
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.
40 lines
879 B
C
40 lines
879 B
C
#include <objc/NSObjCRuntime.h>
|
|
|
|
typedef enum {
|
|
MSG_YESNO,
|
|
MSG_ERROR,
|
|
MSG_INFO,
|
|
} AlertStyle;
|
|
|
|
typedef struct {
|
|
char* msg;
|
|
char* title;
|
|
AlertStyle style;
|
|
} AlertDlgParams;
|
|
|
|
#define LOADDLG 0
|
|
#define SAVEDLG 1
|
|
#define DIRDLG 2 // browse for directory
|
|
|
|
typedef struct {
|
|
int mode; /* which dialog style to invoke (see earlier defines) */
|
|
char* buf; /* buffer to store selected file */
|
|
int nbuf; /* number of bytes allocated at buf */
|
|
char* title; /* title for dialog box (can be nil) */
|
|
void** exts; /* list of valid extensions (elements actual type is NSString*) */
|
|
int numext; /* number of items in exts */
|
|
int relaxext; /* allow other extensions? */
|
|
} FileDlgParams;
|
|
|
|
typedef enum {
|
|
DLG_OK,
|
|
DLG_CANCEL,
|
|
DLG_URLFAIL,
|
|
} DlgResult;
|
|
|
|
DlgResult alertDlg(AlertDlgParams*);
|
|
DlgResult fileDlg(FileDlgParams*);
|
|
|
|
void* NSStr(void* buf, int len);
|
|
void NSRelease(void* obj);
|