diff options
Diffstat (limited to 'ext/tk/lib/tkafter.rb')
-rw-r--r-- | ext/tk/lib/tkafter.rb | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/ext/tk/lib/tkafter.rb b/ext/tk/lib/tkafter.rb index 2ff60fe1e9..b24d6c72d3 100644 --- a/ext/tk/lib/tkafter.rb +++ b/ext/tk/lib/tkafter.rb @@ -12,10 +12,15 @@ class TkTimer TkCommandNames = ['after'.freeze].freeze Tk_CBID = ['a'.freeze, '00000'] - Tk_CBTBL = TkCore::INTERP.create_table + Tk_CBTBL = {} - TkCore::INTERP.add_tk_procs('rb_after', 'id', - "ruby [format \"#{self.name}.callback %%Q!%s!\" $id]") + TkCore::INTERP.add_tk_procs('rb_after', 'id', <<-'EOL') + if {[set st [catch {ruby [format "TkTimer.callback %%Q!%s!" $id]} ret]] != 0} { + return -code $st $ret + } { + return $ret + } + EOL ############################### @@ -24,9 +29,14 @@ class TkTimer def self.callback(obj_id) @after_id = nil ex_obj = Tk_CBTBL[obj_id] - return nil if ex_obj == nil; # canceled + return "" if ex_obj == nil; # canceled #_get_eval_string(ex_obj.do_callback) - ex_obj.cb_call + begin + ex_obj.cb_call + rescue Exception + Tk_CBTBL[obj_id] = nil + "" + end end def self.info @@ -43,7 +53,7 @@ class TkTimer @in_callback = true begin @return_value = @current_proc.call(self) - rescue StandardError, NameError + rescue Exception if @cancel_on_exception cancel return nil |