changeset 9216:9d4b84b14bf0

call mlock in __fltk_init__
author John W. Eaton <jwe@octave.org>
date Tue, 19 May 2009 12:49:57 -0400
parents 1500d0197484
children ee7cf4d963f3
files src/ChangeLog src/DLD-FUNCTIONS/fltk_backend.cc
diffstat 2 files changed, 26 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,13 @@
 2009-05-19  John W. Eaton  <jwe@octave.org>
 
+	* DLD-FUNCTIONS/fltk_backend.cc (F__fltk_redraw__): New function.
+	(F__init_fltk__): Call add_input_event_hook with feval to add
+	__fltk_redraw__ to the list of even hook functions to call.
+	Call mlock when initializing.
+	(F__remove_fltk__): Call remove_input_event_hook with feval to
+	remove __fltk_redraw__ from the list of event hook functions.
+	Unlock __init_fltk__ when shutting down.
+
 	* input.cc (Finput_event_hook): Delete.
 	(input_event_hook): Handle set of functions instead of just one.
 	(Fadd_input_event_hook, Fremove_input_event_hook): New functions.
--- a/src/DLD-FUNCTIONS/fltk_backend.cc
+++ b/src/DLD-FUNCTIONS/fltk_backend.cc
@@ -60,6 +60,7 @@
 #include "gl-render.h"
 #include "graphics.h"
 #include "parse.h"
+#include "variables.h"
 
 #define FLTK_BACKEND_NAME "fltk"
 
@@ -836,15 +837,26 @@
   return 0;
 }
 
+DEFUN_DLD (__fltk_redraw__, , , "")
+{
+  __fltk_redraw__ ();
+
+  return octave_value ();
+}
+
 // call this to init the fltk backend
 DEFUN_DLD (__init_fltk__, , , "")
 {
   if (! backend_registered)
     {
+      mlock ();
+
       graphics_backend::register_backend (new fltk_backend);
       backend_registered = true;
       
-      command_editor::add_event_hook (__fltk_redraw__);
+      octave_value_list args;
+      args(0) = "__fltk_redraw__";
+      feval ("add_input_event_hook", args, 0);
     }
 
   octave_value retval;
@@ -857,11 +869,15 @@
 {
   if (backend_registered)
     {
+      munlock ("__init_fltk__");
+
       figure_manager::close_all ();
       graphics_backend::unregister_backend (FLTK_BACKEND_NAME);
       backend_registered = false;
 
-      command_editor::remove_event_hook (__fltk_redraw__);
+      octave_value_list args;
+      args(0) = "__fltk_redraw__";
+      feval ("remove_input_event_hook", args, 0);
 
       // FIXME ???
       // give FLTK 10 seconds to wrap it up
@@ -872,7 +888,6 @@
   return retval;	
 }
 
-// call this to delete the fltk backend
 DEFUN_DLD (__fltk_maxtime__, args, ,"")
 {
   octave_value retval = fltk_maxtime;