aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure2
-rw-r--r--ide/coqide_main.ml44
-rw-r--r--ide/ide_mac_stubs.c (renamed from ide/macjokes.c)18
3 files changed, 18 insertions, 6 deletions
diff --git a/configure b/configure
index 5fbe626bdb..4b6004f269 100755
--- a/configure
+++ b/configure
@@ -642,7 +642,7 @@ else
then
cflags=$cflags" `pkg-config --cflags ige-mac-integration`"
MACIGEFLAGS='-ccopt "`pkg-config --libs ige-mac-integration`"'
- MACIGEFILE=ide/macjokes.o
+ MACIGEFILE=ide/ide_mac_stubs.o
MACIGEP4=-DMacInt
else
MACIGEFLAGS=""
diff --git a/ide/coqide_main.ml4 b/ide/coqide_main.ml4
index 9b567ce5f0..c63db00316 100644
--- a/ide/coqide_main.ml4
+++ b/ide/coqide_main.ml4
@@ -1,12 +1,12 @@
IFDEF MacInt THEN
-external gtk_mac_init : (string -> unit) -> unit
+external gtk_mac_init : (string -> unit) -> (unit -> bool) -> unit
= "caml_gtk_mac_init"
external gtk_mac_ready : unit -> unit
= "caml_gtk_mac_ready"
END
-let initmac () = IFDEF MacInt THEN gtk_mac_init Coqide.do_load ELSE () END
+let initmac () = IFDEF MacInt THEN gtk_mac_init Coqide.do_load Coqide.forbid_quit_to_save ELSE () END
let macready () = IFDEF MacInt THEN gtk_mac_ready () ELSE () END
diff --git a/ide/macjokes.c b/ide/ide_mac_stubs.c
index 84d222ae9c..87cdbf08a6 100644
--- a/ide/macjokes.c
+++ b/ide/ide_mac_stubs.c
@@ -7,7 +7,7 @@
#include <igemacintegration/gtkosxapplication.h>
GtkOSXApplication *theApp;
-value open_file_fun;
+value open_file_fun, forbid_quit_fun;
static gboolean deal_with_open(GtkOSXApplication *app, gchar *path, gpointer user_data)
{
@@ -19,13 +19,25 @@ static gboolean deal_with_open(GtkOSXApplication *app, gchar *path, gpointer use
CAMLreturnT(gboolean, truc);
}
-CAMLprim value caml_gtk_mac_init(value open_file_the_fun)
+static gboolean deal_with_quit(GtkOSXApplication *app, gpointer user_data)
{
- CAMLparam1(open_file_the_fun);
+ CAMLparam0();
+ CAMLlocal1(res);
+ res = caml_callback_exn(forbid_quit_fun,Val_unit);
+ gboolean truc = (Bool_val(res))||((Is_exception_result(res)));
+ CAMLreturnT(gboolean, truc);
+}
+
+CAMLprim value caml_gtk_mac_init(value open_file_the_fun, value forbid_quit_the_fun)
+{
+ CAMLparam2(open_file_the_fun,forbid_quit_the_fun);
open_file_fun = open_file_the_fun;
caml_register_generational_global_root(&open_file_fun);
+ forbid_quit_fun = forbid_quit_the_fun;
+ caml_register_generational_global_root(&forbid_quit_fun);
theApp = g_object_new(GTK_TYPE_OSX_APPLICATION, NULL);
g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(deal_with_open), NULL);
+ g_signal_connect(theApp, "NSApplicationBlockTermination", G_CALLBACK(deal_with_quit), NULL);
CAMLreturn (Val_unit);
}