diff src/graphics.cc @ 12506:0dda50ae4997

add a persistent mode for listeners
author Konstantinos Poulios <logari81@gmail.com>
date Thu, 10 Mar 2011 20:27:15 +0100
parents 13640f7f40bb
children 919cadf334f8
line wrap: on
line diff
--- a/src/graphics.cc	Sat Feb 26 18:15:48 2011 -0500
+++ b/src/graphics.cc	Thu Mar 10 20:27:15 2011 +0100
@@ -7768,7 +7768,7 @@
 
   octave_value retval;
 
-  if (args.length () == 3)
+  if (args.length () >= 3 && args.length () <= 4)
     {
       double h = args(0).double_value ();
 
@@ -7785,6 +7785,13 @@
                   graphics_object go = gh_manager::get_object (gh);
 
                   go.add_property_listener (pname, args(2), POSTSET);
+
+                  if (args.length () == 4)
+                    {
+                      caseless_str persistent = args(3).string_value ();
+                      if (persistent.compare ("persistent"))
+                        go.add_property_listener (pname, args(2), PERSISTENT);
+                    }
                 }
               else
                 error ("addlistener: invalid graphics object (= %g)",
@@ -7852,7 +7859,16 @@
                   if (args.length () == 2)
                     go.delete_property_listener (pname, octave_value (), POSTSET);
                   else
-                    go.delete_property_listener (pname, args(2), POSTSET);
+                    {
+                      caseless_str persistent = args(2).string_value ();
+                      if (persistent.compare ("persistent"))
+                        {
+                          go.delete_property_listener (pname, octave_value (), PERSISTENT);
+                          go.delete_property_listener (pname, octave_value (), POSTSET);
+                        }
+                      else
+                        go.delete_property_listener (pname, args(2), POSTSET);
+                    }
                 }
               else
                 error ("dellistener: invalid graphics object (= %g)",