octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FLTK initialization bug?


From: Shai Ayal
Subject: Re: FLTK initialization bug?
Date: Tue, 14 Sep 2010 08:33:57 +0300

2010/9/14 John W. Eaton <address@hidden>
>
> On 13-Sep-2010, Jordi Gutiérrez Hermoso wrote:
>
> | On 13 September 2010 20:12, Ben Abbott <address@hidden> wrote:
> | > This looks like a timing problem to me.
> | >
> | >        octave:1> backend ("fltk") ; __go_figure__ (1, "__backend__", 
> "fltk")
> | >        warning: implicit conversion from matrix to sq_string
> | >        error: fltk_backend: could not recognize fltk index
> | >        octave:1> backend ("fltk")
> | >        octave:2> __go_figure__ (1, "__backend__", "fltk")
> | >        ans =  1
> |
> | I can't reproduce this. The warning and error happen here even if
> | they're on separate lines. Regardless, if you're seeing it, it's
> | doubtless a race condition... I wonder if we need to start bothering
> | with semaphores and mutexes...
>
> Maybe the change is as simple as the following?  But since I don't
> really know how the fltk backend is supposed to work I'm not sure.  It
> just makes sense to me that if the __plot_stream__ object is an empty
> matrix, it is probably not initialized ([] is the default value of
> __plot_stream__ when a new figure is created, isn't it?) so we
> shouldn't need to delete it.
>
> diff --git a/src/DLD-FUNCTIONS/fltk_backend.cc 
> b/src/DLD-FUNCTIONS/fltk_backend.cc
> --- a/src/DLD-FUNCTIONS/fltk_backend.cc
> +++ b/src/DLD-FUNCTIONS/fltk_backend.cc
> @@ -1186,7 +1186,9 @@
>     if (go.isa ("figure"))
>       {
>         octave_value ov = go.get (caseless_str ("__plot_stream__"));
> -        figure_manager::delete_window (ov.string_value ());
> +
> +        if (! ov.is_empty ())
> +          figure_manager::delete_window (ov.string_value ());
>       }
>   }
>

This should make the warnings/errors go away, and it is the right
thing to do anyway.

> BTW, I think we could improve the names of the following functions in
> the graphics backend classes:
>
>  // Called when graphics object using this backend changes it's property.
>  virtual void property_changed (const graphics_object&, int)
>
>  // Called when new object using this backend is created.
>  virtual void object_created (const graphics_object&)
>
>  // Called when object using this backend is destroyed.
>  virtual void object_destroyed (const graphics_object&)
>
> I think
>
>  // Callback function executed when the given graphics object
>  // changes.  This allows the grahpics backend to act on property
>  // changes if needed.
>  virtual void update (const graphics_object&, int);
>
>  // Callback function executed when the given graphics object is
>  // created.  This allows the graphics backend to do backend-specific
>  // initializations for a newly created object.
>  virtual void initialize (const_graphics_object&)
>
>  // Callback function executed just prior to deleting the given
>  // graphics object.  This allows the graphics backend to perform
>  // backend-specific cleanup operations before an object is deleted.
>  virtual void finalize (const_graphics_object&)
>
Sounds good to me

Shai



reply via email to

[Prev in Thread] Current Thread [Next in Thread]