# HG changeset patch # User John W. Eaton # Date 1363846079 14400 # Node ID 072b3e6504c447ea005532ebd617c18c8b19ce5e # Parent bf8397caeff1e6889ee7e9581415bfbb614702a1 use function handle for fltk input event hook function * __init_fltk__.cc (fltk_graphics_toolkit::input_event_fcn_id): New data member. (fltk_graphics_toolkit::close): Use it to remove input event hook. Don't unload toolkit. (fltk_graphics_toolkit::set_input_event_hook_id): New function. (F__init_fltk__): Create function handle for __fltk_redraw__ and pass that to Fadd_input_event_hook with a direct call instead of using feval. Call set_input_event_hook_id. diff -r bf8397caeff1 -r 072b3e6504c4 libinterp/dldfcn/__init_fltk__.cc --- a/libinterp/dldfcn/__init_fltk__.cc Thu Mar 21 02:04:12 2013 -0400 +++ b/libinterp/dldfcn/__init_fltk__.cc Thu Mar 21 02:07:59 2013 -0400 @@ -35,8 +35,10 @@ #include #endif +#include "builtin-defun-decls.h" #include "defun-dld.h" #include "error.h" +#include "ov-fcn-handle.h" #ifdef HAVE_FLTK @@ -1834,7 +1836,9 @@ { public: fltk_graphics_toolkit (void) - : base_graphics_toolkit (FLTK_GRAPHICS_TOOLKIT_NAME) { } + : base_graphics_toolkit (FLTK_GRAPHICS_TOOLKIT_NAME), + input_event_hook_fcn_id () + { } ~fltk_graphics_toolkit (void) { } @@ -1971,21 +1975,44 @@ munlock ("__init_fltk__"); figure_manager::close_all (); - gtk_manager::unload_toolkit (FLTK_GRAPHICS_TOOLKIT_NAME); - toolkit_loaded = false; - octave_value_list args; - args(0) = "__fltk_redraw__"; - feval ("remove_input_event_hook", args, 0); + octave_value_list args = input_event_hook_fcn_id; + args.append (false); + Fremove_input_event_hook (args, 0); + + input_event_hook_fcn_id = octave_value_list (); // FIXME ??? Fl::wait (fltk_maxtime); } } + + void set_input_event_hook_id (const octave_value_list& id) + { + input_event_hook_fcn_id = id; + } + +private: + octave_value_list input_event_hook_fcn_id; }; #endif +DEFUN_DLD (__fltk_redraw__, , , + "-*- texinfo -*-\n\ +@deftypefn {Loadable Function} {} __fltk_redraw__ ()\n\ +Undocumented internal function.\n\ +@end deftypefn") +{ +#ifdef HAVE_FLTK + __fltk_redraw__ (); +#else + error ("__fltk_redraw__: not available without OpenGL and FLTK libraries"); +#endif + + return octave_value (); +} + // Initialize the fltk graphics toolkit. DEFUN_DLD (__init_fltk__, , , @@ -1999,13 +2026,16 @@ { mlock (); - graphics_toolkit tk (new fltk_graphics_toolkit ()); + fltk_graphics_toolkit *fltk = new fltk_graphics_toolkit (); + graphics_toolkit tk (fltk); gtk_manager::load_toolkit (tk); toolkit_loaded = true; - octave_value_list args; - args(0) = "__fltk_redraw__"; - feval ("add_input_event_hook", args, 0); + octave_value fcn (new octave_builtin (F__fltk_redraw__)); + octave_value fcn_handle (new octave_fcn_handle (fcn, "@__fltk_redraw__")); + octave_value_list id = Fadd_input_event_hook (fcn_handle, 1); + + fltk->set_input_event_hook_id (id); } #else error ("__init_fltk__: not available without OpenGL and FLTK libraries"); @@ -2014,21 +2044,6 @@ return octave_value (); } -DEFUN_DLD (__fltk_redraw__, , , - "-*- texinfo -*-\n\ -@deftypefn {Loadable Function} {} __fltk_redraw__ ()\n\ -Undocumented internal function.\n\ -@end deftypefn") -{ -#ifdef HAVE_FLTK - __fltk_redraw__ (); -#else - error ("__fltk_redraw__: not available without OpenGL and FLTK libraries"); -#endif - - return octave_value (); -} - DEFUN_DLD (__fltk_maxtime__, args, , "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{maxtime} =} __fltk_maxtime__ ()\n\