summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/haiku_support.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/haiku_support.h b/src/haiku_support.h
index f20b2e766c8..e6560f401ac 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -348,6 +348,24 @@ struct haiku_menu_bar_state_event
#define BE_RECT_WIDTH(rect) (ceil (((rect).right - (rect).left) + 1))
#endif /* __cplusplus */
+/* C++ code cannot include lisp.h, but file dialogs need to be able
+ to bind to the specpdl and handle quitting correctly. */
+
+#ifdef __cplusplus
+
+#if SIZE_MAX > 0xffffffff
+#define WRAP_SPECPDL_REF 1
+#endif
+#ifdef WRAP_SPECPDL_REF
+typedef struct { ptrdiff_t bytes; } specpdl_ref;
+#else
+typedef ptrdiff_t specpdl_ref;
+#endif
+
+#else
+#include "lisp.h"
+#endif
+
#ifdef __cplusplus
extern "C"
{