From 50b42ccf1a0d6db4baf2da893723f8244f00d1fb Mon Sep 17 00:00:00 2001 From: pboutill Date: Fri, 8 Apr 2011 16:25:35 +0000 Subject: Macos integration step2 : shutdown You can quit coqide from the dock and reboot/shutdown will ask you if you want to save your unsavec files. Asks for a re"configure". git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@13974 85f007b7-540e-0410-9357-904b9bb8a0f7 --- ide/coqide_main.ml4 | 4 ++-- ide/ide_mac_stubs.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ ide/macjokes.c | 37 ------------------------------------- 3 files changed, 51 insertions(+), 39 deletions(-) create mode 100644 ide/ide_mac_stubs.c delete mode 100644 ide/macjokes.c (limited to 'ide') 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/ide_mac_stubs.c b/ide/ide_mac_stubs.c new file mode 100644 index 0000000000..87cdbf08a6 --- /dev/null +++ b/ide/ide_mac_stubs.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include + +#include + +GtkOSXApplication *theApp; +value open_file_fun, forbid_quit_fun; + +static gboolean deal_with_open(GtkOSXApplication *app, gchar *path, gpointer user_data) +{ + CAMLparam0(); + CAMLlocal2(string_path, res); + string_path = caml_copy_string(path); + res = caml_callback_exn(open_file_fun,string_path); + gboolean truc = !(Is_exception_result(res)); + CAMLreturnT(gboolean, truc); +} + +static gboolean deal_with_quit(GtkOSXApplication *app, gpointer user_data) +{ + 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); +} + +CAMLprim value caml_gtk_mac_ready(value unit) +{ + CAMLparam1(unit); + gtk_osxapplication_ready(theApp); + CAMLreturn(Val_unit); +} diff --git a/ide/macjokes.c b/ide/macjokes.c deleted file mode 100644 index 84d222ae9c..0000000000 --- a/ide/macjokes.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include -#include -#include - -#include - -GtkOSXApplication *theApp; -value open_file_fun; - -static gboolean deal_with_open(GtkOSXApplication *app, gchar *path, gpointer user_data) -{ - CAMLparam0(); - CAMLlocal2(string_path, res); - string_path = caml_copy_string(path); - res = caml_callback_exn(open_file_fun,string_path); - gboolean truc = !(Is_exception_result(res)); - CAMLreturnT(gboolean, truc); -} - -CAMLprim value caml_gtk_mac_init(value open_file_the_fun) -{ - CAMLparam1(open_file_the_fun); - open_file_fun = open_file_the_fun; - caml_register_generational_global_root(&open_file_fun); - theApp = g_object_new(GTK_TYPE_OSX_APPLICATION, NULL); - g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(deal_with_open), NULL); - CAMLreturn (Val_unit); -} - -CAMLprim value caml_gtk_mac_ready(value unit) -{ - CAMLparam1(unit); - gtk_osxapplication_ready(theApp); - CAMLreturn(Val_unit); -} -- cgit v1.2.3