--- octave-hg/src/graphics.h.in 2011-03-07 17:28:23.907752000 +0100 +++ octave-build/src/graphics.h.in 2011-03-09 12:04:07.774372002 +0100 @@ -318,7 +318,7 @@ private: class property; -enum listener_mode { POSTSET }; +enum listener_mode { POSTSET, PERSISTENT }; class base_property { @@ -420,10 +420,33 @@ public: l(j) = l (j + 1); l.resize (l.length () - 1); + + if (mode != PERSISTENT) + delete_listener (v, PERSISTENT); } } else - l.resize (0); + { + if (mode == PERSISTENT) + l.resize (0); + else + { + octave_value_list lnew (0); + octave_value_list& lp = listeners[PERSISTENT]; + for (int i = l.length () - 1; i >= 0 ; i--) + { + for (int j = 0; j < l.length (); j++) + { + if (l(i).internal_rep () == lp(j).internal_rep ()) + { + lnew.resize (lnew.length () + 1, l(i)); + break; + } + } + l = lnew; + } + } + } }