summaryrefslogtreecommitdiff
path: root/ext/tk
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-09 06:16:29 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-08-09 06:16:29 +0000
commitc1566b74903da07910103c143cb2a38f4a7c86ba (patch)
treea11ae6ff53618056ef3d4945f2b022a7d099946e /ext/tk
parent09d57b8e0c3bb80d43798d7a2bfc239229126e9a (diff)
* ext/tk/tcltklib.c: remove dangerous 'rb_jump_tag's.
* ext/tk/lib/tk.rb: add __val2ruby_optkeys and __ruby2val_optkeys to help to convert option values between ruby and tcl. * ext/tk/lib/tk/itemconfig.rb: add __item_val2ruby_optkeys and __item_ruby2val_optkeys to help to convert option values between ruby and tcl. * ext/tk/lib/tk/radiobutton.rb: use __ruby2val_optkeys for 'variable' option (for the reason of backward compatibility). * ext/tk/lib/tk/composite.rb: clarify the arguments of super(). * ext/tk/lib/tk/spinbox.rb: ditto. * ext/tk/lib/tk/text.rb: ditto. * ext/tk/lib/tk/validation.rb: ditto. * ext/tk/lib/tkextlib/*: support to treat tkvariable-type configure options. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8958 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk')
-rw-r--r--ext/tk/lib/tk.rb145
-rw-r--r--ext/tk/lib/tk/composite.rb12
-rw-r--r--ext/tk/lib/tk/itemconfig.rb144
-rw-r--r--ext/tk/lib/tk/radiobutton.rb8
-rw-r--r--ext/tk/lib/tk/spinbox.rb2
-rw-r--r--ext/tk/lib/tk/text.rb8
-rw-r--r--ext/tk/lib/tk/validation.rb2
-rw-r--r--ext/tk/lib/tkextlib/blt/barchart.rb5
-rw-r--r--ext/tk/lib/tkextlib/blt/component.rb6
-rw-r--r--ext/tk/lib/tkextlib/blt/dragdrop.rb2
-rw-r--r--ext/tk/lib/tkextlib/blt/treeview.rb2
-rw-r--r--ext/tk/lib/tkextlib/bwidget/button.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/entry.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/label.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelentry.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelframe.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/mainframe.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/passwddlg.rb6
-rw-r--r--ext/tk/lib/tkextlib/bwidget/spinbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/bwidget/tree.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/calendar.rb2
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/entryfield.rb2
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hierarchy.rb8
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledframe.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/menubar.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb5
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinner.rb2
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/toolbar.rb5
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pixmap.rb2
-rw-r--r--ext/tk/lib/tkextlib/tktable/tktable.rb2
-rw-r--r--ext/tk/tcltklib.c78
32 files changed, 465 insertions, 38 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index f0f0271047..bffb0d26ca 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -2720,7 +2720,24 @@ module TkConfigMethod
end
private :__tkvariable_optkeys
+ def __val2ruby_optkeys # { key=>proc, ... }
+ # The method is used to convert a opt-value to a ruby's object.
+ # When get the value of the option "key", "proc.call(value)" is called.
+ {}
+ end
+ private :__val2ruby_optkeys
+
+ def __ruby2val_optkeys # { key=>proc, ... }
+ # The method is used to convert a ruby's object to a opt-value.
+ # When set the value of the option "key", "proc.call(value)" is called.
+ # That is, "-#{key} #{proc.call(value)}".
+ {}
+ end
+ private :__ruby2val_optkeys
+
def __methodcall_optkeys # { key=>method, ... }
+ # The method is used to both of get and set.
+ # Usually, the 'key' will not be a widget option.
{}
end
private :__methodcall_optkeys
@@ -2775,6 +2792,16 @@ module TkConfigMethod
fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"
end
+ if ( method = _symbolkey2str(__val2ruby_optkeys())[slot] )
+ optval = tk_call_without_enc(*(__cget_cmd << "-#{slot}"))
+ begin
+ return method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ return optval
+ end
+ end
+
if ( method = _symbolkey2str(__methodcall_optkeys)[slot] )
return self.__send__(method)
end
@@ -2843,6 +2870,12 @@ module TkConfigMethod
self.__send__(method, value) if value
}
+ __ruby2val_optkeys.each{|key, method|
+ key = key.to_s
+ value = slot[key]
+ slot[key] = method.call(value) if value
+ }
+
__keyonly_optkeys.each{|defkey, undefkey|
conf = slot.find{|kk, vv| kk == defkey.to_s}
if conf
@@ -2876,6 +2909,8 @@ module TkConfigMethod
elsif undefkey
tk_call(*(__config_cmd << "-#{undefkey}"))
end
+ elsif ( method = _symbolkey2str(__ruby2val_optkeys)[slot] )
+ method.call(value)
elsif ( method = _symbolkey2str(__methodcall_optkeys)[slot] )
self.__send__(method, value)
elsif (slot =~ /^(|latin|ascii|kanji)(#{__font_optkeys.join('|')})$/)
@@ -2918,6 +2953,31 @@ module TkConfigMethod
if slot
slot = slot.to_s
case slot
+ when /^(#{__val2ruby_optkeys().keys.join('|')})$/
+ method = _symbolkey2str(__val2ruby_optkeys())[slot]
+ conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd() << "-#{slot}")), false, true)
+ if ( __configinfo_struct[:default_value] \
+ && conf[__configinfo_struct[:default_value]] )
+ optval = conf[__configinfo_struct[:default_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:default_value]] = val
+ end
+ if ( conf[__configinfo_struct[:current_value]] )
+ optval = conf[__configinfo_struct[:current_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:current_value]] = val
+ end
+
when /^(#{__methodcall_optkeys.keys.join('|')})$/
method = _symbolkey2str(__methodcall_optkeys)[slot]
return [slot, '', '', '', self.__send__(method)]
@@ -3059,7 +3119,32 @@ module TkConfigMethod
conf[__configinfo_struct[:key]] =
conf[__configinfo_struct[:key]][1..-1]
- case conf[__configinfo_struct[:key]]
+ optkey = conf[__configinfo_struct[:key]]
+ case optkey
+ when /^(#{__val2ruby_optkeys().keys.join('|')})$/
+ method = _symbolkey2str(__val2ruby_optkeys())[optkey]
+ if ( __configinfo_struct[:default_value] \
+ && conf[__configinfo_struct[:default_value]] )
+ optval = conf[__configinfo_struct[:default_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:default_value]] = val
+ end
+ if ( conf[__configinfo_struct[:current_value]] )
+ optval = conf[__configinfo_struct[:current_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:current_value]] = val
+ end
+
when /^(#{__strval_optkeys.join('|')})$/
# do nothing
@@ -3232,6 +3317,31 @@ module TkConfigMethod
if slot
slot = slot.to_s
case slot
+ when /^(#{__val2ruby_optkeys().keys.join('|')})$/
+ method = _symbolkey2str(__val2ruby_optkeys())[slot]
+ conf = tk_split_simplelist(tk_call_without_enc(*(__confinfo_cmd << "-#{slot}")), false, true)
+ if ( __configinfo_struct[:default_value] \
+ && conf[__configinfo_struct[:default_value]] )
+ optval = conf[__configinfo_struct[:default_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:default_value]] = val
+ end
+ if ( conf[__configinfo_struct[:current_value]] )
+ optval = conf[__configinfo_struct[:current_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:current_value]] = val
+ end
+
when /^(#{__methodcall_optkeys.keys.join('|')})$/
method = _symbolkey2str(__methodcall_optkeys)[slot]
return {slot => ['', '', '', self.__send__(method)]}
@@ -3375,7 +3485,32 @@ module TkConfigMethod
conf[__configinfo_struct[:key]] =
conf[__configinfo_struct[:key]][1..-1]
- case conf[__configinfo_struct[:key]]
+ optkey = conf[__configinfo_struct[:key]]
+ case optkey
+ when /^(#{__val2ruby_optkeys().keys.join('|')})$/
+ method = _symbolkey2str(__val2ruby_optkeys())[optkey]
+ if ( __configinfo_struct[:default_value] \
+ && conf[__configinfo_struct[:default_value]] )
+ optval = conf[__configinfo_struct[:default_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:default_value]] = val
+ end
+ if ( conf[__configinfo_struct[:current_value]] )
+ optval = conf[__configinfo_struct[:current_value]]
+ begin
+ val = method.call(optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__configinfo_struct[:current_value]] = val
+ end
+
when /^(#{__strval_optkeys.join('|')})$/
# do nothing
@@ -3746,6 +3881,12 @@ class TkWindow<TkObject
key = key.to_s
methodkeys[key] = keys.delete(key) if keys.key?(key)
}
+
+ __ruby2val_optkeys.each{|key, method|
+ key = key.to_s
+ value = keys[key]
+ keys[key] = method.call(value) if value
+ }
end
if without_creating && keys
#configure(keys)
diff --git a/ext/tk/lib/tk/composite.rb b/ext/tk/lib/tk/composite.rb
index d85b815dd7..58cca736db 100644
--- a/ext/tk/lib/tk/composite.rb
+++ b/ext/tk/lib/tk/composite.rb
@@ -97,7 +97,7 @@ module TkComposite
rescue
end
- super
+ super(slot)
end
def configure(slot, value=None)
@@ -134,7 +134,7 @@ module TkComposite
rescue
end
- super
+ super(slot, value)
end
def configinfo(slot = nil)
@@ -171,10 +171,10 @@ module TkComposite
rescue
end
- super
+ super(slot)
else # slot == nil
- info_list = super
+ info_list = super(slot)
tbl = @delegates['DEFAULT']
if tbl
@@ -250,10 +250,10 @@ module TkComposite
rescue
end
- super
+ super(slot)
else # slot == nil
- info_list = super
+ info_list = super(slot)
tbl = @delegates['DEFAULT']
if tbl
diff --git a/ext/tk/lib/tk/itemconfig.rb b/ext/tk/lib/tk/itemconfig.rb
index f6cfc0b524..d52f959d95 100644
--- a/ext/tk/lib/tk/itemconfig.rb
+++ b/ext/tk/lib/tk/itemconfig.rb
@@ -40,12 +40,30 @@ module TkItemConfigOptkeys
end
private :__item_numlistval_optkeys
- def __item_tkvariable_optkeys
- ['variable']
+ def __item_tkvariable_optkeys(id)
+ ['variable', 'textvariable']
end
private :__item_tkvariable_optkeys
+ def __item_val2ruby_optkeys(id) # { key=>method, ... }
+ # The method is used to convert a opt-value to a ruby's object.
+ # When get the value of the option "key", "method.call(id, val)" is called.
+ {}
+ end
+ private :__item_val2ruby_optkeys
+
+ def __item_ruby2val_optkeys(id) # { key=>method, ... }
+ # The method is used to convert a ruby's object to a opt-value.
+ # When set the value of the option "key", "method.call(id, val)" is called.
+ # That is, "-#{key} #{method.call(id, value)}".
+ {}
+ end
+ private :__item_ruby2val_optkeys
+
def __item_methodcall_optkeys(id) # { key=>method, ... }
+ # Use the method for both of get and set.
+ # Usually, the 'key' will not be a widget option.
+ #
# maybe need to override
# {'coords'=>'coords'}
{}
@@ -133,6 +151,16 @@ module TkItemConfigMethod
fail ArgumentError, "Invalid option `#{orig_opt.inspect}'"
end
+ if ( method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[option] )
+ optval = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
+ begin
+ return method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ return optval
+ end
+ end
+
if ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[option] )
return self.__send__(method, tagOrId)
end
@@ -200,6 +228,12 @@ module TkItemConfigMethod
self.__send__(method, tagOrId, value) if value
}
+ __item_ruby2val_optkeys(tagid(tagOrId)).each{|key, method|
+ key = key.to_s
+ value = slot[key]
+ slot[key] = method.call(tagOrId, value) if value
+ }
+
__item_keyonly_optkeys(tagid(tagOrId)).each{|defkey, undefkey|
conf = slot.find{|kk, vv| kk == defkey.to_s}
if conf
@@ -233,6 +267,8 @@ module TkItemConfigMethod
elsif undefkey
tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{undefkey}"))
end
+ elsif ( method = _symbolkey2str(__item_ruby2val_optkeys(tagid(tagOrId)))[slot] )
+ method.call(tagOrId, value)
elsif ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] )
self.__send__(method, tagOrId, value)
elsif (slot =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
@@ -270,6 +306,31 @@ module TkItemConfigMethod
if slot
slot = slot.to_s
case slot
+ when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
+ method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
+ conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
+ if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
+ && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
+ end
+ if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}lcall(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
+ end
+
when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
return [slot, '', '', '', self.__send__(method, tagOrId)]
@@ -411,7 +472,32 @@ module TkItemConfigMethod
conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
- case conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
+ optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
+ case optkey
+ when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
+ method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
+ if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
+ && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
+ begin
+ val = method(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
+ end
+ if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
+ end
+
when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
# do nothing
@@ -583,6 +669,31 @@ module TkItemConfigMethod
if slot
slot = slot.to_s
case slot
+ when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
+ method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
+ conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
+ if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
+ && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
+ end
+ if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
+ end
+
when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
return {slot => ['', '', '', self.__send__(method, tagOrId)]}
@@ -727,7 +838,32 @@ module TkItemConfigMethod
conf[__item_configinfo_struct(tagid(tagOrId))[:key]] =
conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
- case conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
+ optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
+ case optkey
+ when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
+ method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
+ if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
+ && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
+ end
+ if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
+ optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
+ begin
+ val = method.call(tagOrId, optval)
+ rescue => e
+ warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
+ val = optval
+ end
+ conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
+ end
+
when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
# do nothing
diff --git a/ext/tk/lib/tk/radiobutton.rb b/ext/tk/lib/tk/radiobutton.rb
index 6f7a5f60a0..d82aa5d07d 100644
--- a/ext/tk/lib/tk/radiobutton.rb
+++ b/ext/tk/lib/tk/radiobutton.rb
@@ -17,6 +17,14 @@ class TkRadioButton<TkButton
#end
#private :create_self
+ def __ruby2val_optkeys # { key=>proc, ... }
+ {
+ 'variable'=>proc{|v| tk_trace_variable(v)} # for backward compatibility
+ }
+ end
+ private :__ruby2val_optkeys
+
+
def deselect
tk_send_without_enc('deselect')
self
diff --git a/ext/tk/lib/tk/spinbox.rb b/ext/tk/lib/tk/spinbox.rb
index ac84e06cb3..8941510fed 100644
--- a/ext/tk/lib/tk/spinbox.rb
+++ b/ext/tk/lib/tk/spinbox.rb
@@ -51,7 +51,7 @@ class TkSpinbox<TkEntry
end
def __validation_class_list
- super << SpinCommand
+ super() << SpinCommand
end
Tk::ValidateConfigure.__def_validcmd(binding, SpinCommand)
diff --git a/ext/tk/lib/tk/text.rb b/ext/tk/lib/tk/text.rb
index 39f5622886..f2bad37b01 100644
--- a/ext/tk/lib/tk/text.rb
+++ b/ext/tk/lib/tk/text.rb
@@ -460,13 +460,13 @@ class TkText<TkTextWin
args << tags.shift.collect{|x|_get_eval_string(x)}.join(' ') # taglist
args << tags.shift if tags.size > 0 # chars
end
- super index, *args
+ super(index, *args)
else
# single chars-taglist argument :: str, tag, tag, ...
if tags.size == 0
- super index, chars
+ super(index, chars)
else
- super index, chars, tags.collect{|x|_get_eval_string(x)}.join(' ')
+ super(index, chars, tags.collect{|x|_get_eval_string(x)}.join(' '))
end
end
end
@@ -476,7 +476,7 @@ class TkText<TkTextWin
@tags.each_value do |t|
t.destroy
end
- super
+ super()
end
def backspace
diff --git a/ext/tk/lib/tk/validation.rb b/ext/tk/lib/tk/validation.rb
index 6755eef05f..0c5b5c61b9 100644
--- a/ext/tk/lib/tk/validation.rb
+++ b/ext/tk/lib/tk/validation.rb
@@ -337,7 +337,7 @@ module TkValidation
#####################################
def __validation_class_list
- super << ValidateCmd
+ super() << ValidateCmd
end
Tk::ValidateConfigure.__def_validcmd(binding, ValidateCmd)
diff --git a/ext/tk/lib/tkextlib/blt/barchart.rb b/ext/tk/lib/tkextlib/blt/barchart.rb
index c253194582..241ce11632 100644
--- a/ext/tk/lib/tkextlib/blt/barchart.rb
+++ b/ext/tk/lib/tkextlib/blt/barchart.rb
@@ -26,6 +26,11 @@ module Tk::BLT
end
private :__strval_optkeys
+ def __tkvariable_optkeys
+ super() << 'colormap' << 'fontmap'
+ end
+ private :__tkvariable_optkeys
+
=begin
BarElement_ID = ['blt_barchart_bar'.freeze, '00000'.taint].freeze
diff --git a/ext/tk/lib/tkextlib/blt/component.rb b/ext/tk/lib/tkextlib/blt/component.rb
index eee4f6ab4d..87ed838da6 100644
--- a/ext/tk/lib/tkextlib/blt/component.rb
+++ b/ext/tk/lib/tkextlib/blt/component.rb
@@ -43,7 +43,13 @@ module Tk::BLT
['dashes']
end
private :__item_numlistval_optkeys
+
+ def __item_tkvariable_optkeys(id)
+ ['variable', 'textvariable', 'colormap', 'fontmap']
+ end
+ private :__item_tkvariable_optkeys
end
+
include OptKeys
def __item_cget_cmd(id)
diff --git a/ext/tk/lib/tkextlib/blt/dragdrop.rb b/ext/tk/lib/tkextlib/blt/dragdrop.rb
index 7636c9999e..3d7d652dde 100644
--- a/ext/tk/lib/tkextlib/blt/dragdrop.rb
+++ b/ext/tk/lib/tkextlib/blt/dragdrop.rb
@@ -105,7 +105,7 @@ module Tk::BLT
end
def self.__validation_class_list
- super << PackageCommand << SiteCommand
+ super() << PackageCommand << SiteCommand
end
class << self
diff --git a/ext/tk/lib/tkextlib/blt/treeview.rb b/ext/tk/lib/tkextlib/blt/treeview.rb
index 75ce51110e..4687d41b55 100644
--- a/ext/tk/lib/tkextlib/blt/treeview.rb
+++ b/ext/tk/lib/tkextlib/blt/treeview.rb
@@ -234,7 +234,7 @@ class Tk::BLT::Treeview
end
def __validation_class_list
- super << OpenCloseCommand
+ super() << OpenCloseCommand
end
Tk::ValidateConfigure.__def_validcmd(binding, OpenCloseCommand)
diff --git a/ext/tk/lib/tkextlib/bwidget/button.rb b/ext/tk/lib/tkextlib/bwidget/button.rb
index 246afebe29..1432458cc7 100644
--- a/ext/tk/lib/tkextlib/bwidget/button.rb
+++ b/ext/tk/lib/tkextlib/bwidget/button.rb
@@ -18,4 +18,9 @@ class Tk::BWidget::Button
TkCommandNames = ['Button'.freeze].freeze
WidgetClassName = 'Button'.freeze
WidgetClassNames[WidgetClassName] = self
+
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
end
diff --git a/ext/tk/lib/tkextlib/bwidget/entry.rb b/ext/tk/lib/tkextlib/bwidget/entry.rb
index 9867a1ac36..855d2194f2 100644
--- a/ext/tk/lib/tkextlib/bwidget/entry.rb
+++ b/ext/tk/lib/tkextlib/bwidget/entry.rb
@@ -21,6 +21,11 @@ class Tk::BWidget::Entry
WidgetClassName = 'Entry'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
def invoke
tk_send_without_enc('invoke')
self
diff --git a/ext/tk/lib/tkextlib/bwidget/label.rb b/ext/tk/lib/tkextlib/bwidget/label.rb
index 1d4c638705..68bf8cdac4 100644
--- a/ext/tk/lib/tkextlib/bwidget/label.rb
+++ b/ext/tk/lib/tkextlib/bwidget/label.rb
@@ -19,6 +19,11 @@ class Tk::BWidget::Label
WidgetClassName = 'Label'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
def set_focus
tk_send_without_enc('setfocus')
self
diff --git a/ext/tk/lib/tkextlib/bwidget/labelentry.rb b/ext/tk/lib/tkextlib/bwidget/labelentry.rb
index dc1db06828..b516a7d206 100644
--- a/ext/tk/lib/tkextlib/bwidget/labelentry.rb
+++ b/ext/tk/lib/tkextlib/bwidget/labelentry.rb
@@ -23,6 +23,11 @@ class Tk::BWidget::LabelEntry
WidgetClassName = 'LabelEntry'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
#def entrybind(*args)
# _bind([path, 'bind'], *args)
# self
diff --git a/ext/tk/lib/tkextlib/bwidget/labelframe.rb b/ext/tk/lib/tkextlib/bwidget/labelframe.rb
index 453756a163..3450be6e70 100644
--- a/ext/tk/lib/tkextlib/bwidget/labelframe.rb
+++ b/ext/tk/lib/tkextlib/bwidget/labelframe.rb
@@ -19,6 +19,11 @@ class Tk::BWidget::LabelFrame
WidgetClassName = 'LabelFrame'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
def self.align(*args)
tk_call('LabelFrame::align', *args)
end
diff --git a/ext/tk/lib/tkextlib/bwidget/mainframe.rb b/ext/tk/lib/tkextlib/bwidget/mainframe.rb
index e52f4b2f4c..7f87894586 100644
--- a/ext/tk/lib/tkextlib/bwidget/mainframe.rb
+++ b/ext/tk/lib/tkextlib/bwidget/mainframe.rb
@@ -20,6 +20,11 @@ class Tk::BWidget::MainFrame
WidgetClassName = 'MainFrame'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'progressvar'
+ end
+ private :__tkvariable_optkeys
+
def add_indicator(keys={}, &b)
win = window(tk_send('addindicator', *hash_kv(keys)))
win.instance_eval(&b) if b
diff --git a/ext/tk/lib/tkextlib/bwidget/passwddlg.rb b/ext/tk/lib/tkextlib/bwidget/passwddlg.rb
index 7136ae8d72..bfab7a078f 100644
--- a/ext/tk/lib/tkextlib/bwidget/passwddlg.rb
+++ b/ext/tk/lib/tkextlib/bwidget/passwddlg.rb
@@ -19,6 +19,12 @@ class Tk::BWidget::PasswdDlg
WidgetClassName = 'PasswdDlg'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'loginhelpvar' << 'logintextvariable' <<
+ 'passwdhelpvar' << 'passwdtextvariable'
+ end
+ private :__tkvariable_optkeys
+
def create
login, passwd = simplelist(tk_call(self.class::TkCommandNames[0],
@path, *hash_kv(@keys)))
diff --git a/ext/tk/lib/tkextlib/bwidget/spinbox.rb b/ext/tk/lib/tkextlib/bwidget/spinbox.rb
index a5ddfafbf4..9560abb663 100644
--- a/ext/tk/lib/tkextlib/bwidget/spinbox.rb
+++ b/ext/tk/lib/tkextlib/bwidget/spinbox.rb
@@ -22,6 +22,11 @@ class Tk::BWidget::SpinBox
WidgetClassName = 'SpinBox'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
#def entrybind(*args)
# _bind([path, 'bind'], *args)
# self
diff --git a/ext/tk/lib/tkextlib/bwidget/tree.rb b/ext/tk/lib/tkextlib/bwidget/tree.rb
index 5af9f0dc11..c405736653 100644
--- a/ext/tk/lib/tkextlib/bwidget/tree.rb
+++ b/ext/tk/lib/tkextlib/bwidget/tree.rb
@@ -32,6 +32,11 @@ class Tk::BWidget::Tree
end
end
+ def __tkvariable_optkeys
+ super() << 'helpvar'
+ end
+ private :__tkvariable_optkeys
+
def tagid(tag)
if tag.kind_of?(Tk::BWidget::Tree::Node)
tag.id
diff --git a/ext/tk/lib/tkextlib/iwidgets/calendar.rb b/ext/tk/lib/tkextlib/iwidgets/calendar.rb
index f382cfd143..97688bb7d0 100644
--- a/ext/tk/lib/tkextlib/iwidgets/calendar.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/calendar.rb
@@ -45,7 +45,7 @@ class Tk::Iwidgets::Calendar
end
def __validation_class_list
- super << CalendarCommand
+ super() << CalendarCommand
end
Tk::ValidateConfigure.__def_validcmd(binding, CalendarCommand)
diff --git a/ext/tk/lib/tkextlib/iwidgets/entryfield.rb b/ext/tk/lib/tkextlib/iwidgets/entryfield.rb
index ae7d63f3f3..7a54b7c803 100644
--- a/ext/tk/lib/tkextlib/iwidgets/entryfield.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/entryfield.rb
@@ -46,7 +46,7 @@ class Tk::Iwidgets::Entryfield
end
def __validation_class_list
- super << EntryfieldValidate
+ super() << EntryfieldValidate
end
Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)
diff --git a/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb b/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb
index 077d84c7a4..862876ee9f 100644
--- a/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb
@@ -92,7 +92,7 @@ class Tk::Iwidgets::Hierarchy
end
def __validation_class_list
- super << QueryCommand << IndicatorCommand << IconCommand
+ super() << QueryCommand << IndicatorCommand << IconCommand
end
Tk::ValidateConfigure.__def_validcmd(binding, QueryCommand)
@@ -237,13 +237,13 @@ class Tk::Iwidgets::Hierarchy
args << tags.shift.collect{|x|_get_eval_string(x)}.join(' ') # taglist
args << tags.shift if tags.size > 0 # chars
end
- super index, *args
+ super(index, *args)
else
# single chars-taglist argument :: str, tag, tag, ...
if tags.size == 0
- super index, chars
+ super(index, chars)
else
- super index, chars, tags.collect{|x|_get_eval_string(x)}.join(' ')
+ super(index, chars, tags.collect{|x|_get_eval_string(x)}.join(' '))
end
end
end
diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb b/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb
index 89669ea815..363047018f 100644
--- a/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/labeledframe.rb
@@ -18,6 +18,11 @@ class Tk::Iwidgets::Labeledframe
WidgetClassName = 'Labeledframe'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'labelvariable'
+ end
+ private :__tkvariable_optkeys
+
def child_site
window(tk_call(@path, 'childsite'))
end
diff --git a/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb b/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb
index f847922386..cbd5fa0957 100644
--- a/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb
@@ -20,6 +20,11 @@ class Tk::Iwidgets::Labeledwidget
WidgetClassName = 'Labeledwidget'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'labelvariable'
+ end
+ private :__tkvariable_optkeys
+
def self.alignlabels(*wins)
tk_call('::iwidgets::Labeledwidget::alignlabels', *wins)
end
diff --git a/ext/tk/lib/tkextlib/iwidgets/menubar.rb b/ext/tk/lib/tkextlib/iwidgets/menubar.rb
index b60349be17..ba4bb5f40d 100644
--- a/ext/tk/lib/tkextlib/iwidgets/menubar.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/menubar.rb
@@ -18,6 +18,11 @@ class Tk::Iwidgets::Menubar
WidgetClassName = 'Menubar'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvariable'
+ end
+ private :__tkvariable_optkeys
+
####################################
include TkItemConfigMethod
diff --git a/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb b/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb
index a60059f744..c933bf2985 100644
--- a/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb
@@ -19,6 +19,11 @@ class Tk::Iwidgets::Scrolledlistbox
WidgetClassName = 'Scrolledlistbox'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'listvariable'
+ end
+ private :__tkvariable_optkeys
+
################################
def initialize(*args)
diff --git a/ext/tk/lib/tkextlib/iwidgets/spinner.rb b/ext/tk/lib/tkextlib/iwidgets/spinner.rb
index 4dac4ed582..174b9bd506 100644
--- a/ext/tk/lib/tkextlib/iwidgets/spinner.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/spinner.rb
@@ -46,7 +46,7 @@ class Tk::Iwidgets::Spinner
end
def __validation_class_list
- super << EntryfieldValidate
+ super() << EntryfieldValidate
end
Tk::ValidateConfigure.__def_validcmd(binding, EntryfieldValidate)
diff --git a/ext/tk/lib/tkextlib/iwidgets/toolbar.rb b/ext/tk/lib/tkextlib/iwidgets/toolbar.rb
index a2a7f31627..74bb0cc96c 100644
--- a/ext/tk/lib/tkextlib/iwidgets/toolbar.rb
+++ b/ext/tk/lib/tkextlib/iwidgets/toolbar.rb
@@ -18,6 +18,11 @@ class Tk::Iwidgets::Toolbar
WidgetClassName = 'Toolbar'.freeze
WidgetClassNames[WidgetClassName] = self
+ def __tkvariable_optkeys
+ super() << 'helpvariable'
+ end
+ private :__tkvariable_optkeys
+
####################################
include TkItemConfigMethod
diff --git a/ext/tk/lib/tkextlib/tkimg/pixmap.rb b/ext/tk/lib/tkextlib/tkimg/pixmap.rb
index 707dcf9c74..bd1b870af7 100644
--- a/ext/tk/lib/tkextlib/tkimg/pixmap.rb
+++ b/ext/tk/lib/tkextlib/tkimg/pixmap.rb
@@ -39,6 +39,6 @@ class TkPixmapImage<TkImage
def initialize(*args)
@type = 'pixmap'
- super
+ super(*args)
end
end
diff --git a/ext/tk/lib/tkextlib/tktable/tktable.rb b/ext/tk/lib/tkextlib/tktable/tktable.rb
index 8e9ba8b8c5..161f4e4543 100644
--- a/ext/tk/lib/tkextlib/tktable/tktable.rb
+++ b/ext/tk/lib/tkextlib/tktable/tktable.rb
@@ -340,7 +340,7 @@ class Tk::TkTable
#################################
def __validation_class_list
- super <<
+ super() <<
BrowseCommand << CellCommand << SelectionCommand << ValidateCommand
end
diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c
index 7aab7b6f71..78792496d6 100644
--- a/ext/tk/tcltklib.c
+++ b/ext/tk/tcltklib.c
@@ -89,6 +89,11 @@ static VALUE eTkCallbackContinue;
static VALUE eLocalJumpError;
+static VALUE eTkLocalJumpError;
+static VALUE eTkCallbackRetry;
+static VALUE eTkCallbackRedo;
+static VALUE eTkCallbackThrow;
+
static ID ID_at_enc;
static ID ID_at_interp;
@@ -192,7 +197,7 @@ Tcl_SetVar2Ex(interp, name1, name2, newValObj, flags)
CONST char *name2;
Tcl_Obj *newValObj;
int flags;
-{
+
Tcl_Obj *nameObj1, *nameObj2 = NULL, *retObj;
nameObj1 = Tcl_NewStringObj(name1, -1);
@@ -765,6 +770,18 @@ pending_exception_check0()
return 1; /* pending */
} else {
rbtk_pending_exception = Qnil;
+
+ if (rb_obj_is_kind_of(exc, eTkCallbackRetry)) {
+ DUMP1("pending_exception_check0: call rb_jump_tag(retry)");
+ rb_jump_tag(TAG_RETRY);
+ } else if (rb_obj_is_kind_of(exc, eTkCallbackRedo)) {
+ DUMP1("pending_exception_check0: call rb_jump_tag(redo)");
+ rb_jump_tag(TAG_REDO);
+ } else if (rb_obj_is_kind_of(exc, eTkCallbackThrow)) {
+ DUMP1("pending_exception_check0: call rb_jump_tag(throw)");
+ rb_jump_tag(TAG_THROW);
+ }
+
rb_exc_raise(exc);
}
} else {
@@ -794,6 +811,16 @@ pending_exception_check1(thr_crit_bup, ptr)
rb_thread_critical = thr_crit_bup;
+ if (rb_obj_is_kind_of(exc, eTkCallbackRetry)) {
+ DUMP1("pending_exception_check1: call rb_jump_tag(retry)");
+ rb_jump_tag(TAG_RETRY);
+ } else if (rb_obj_is_kind_of(exc, eTkCallbackRedo)) {
+ DUMP1("pending_exception_check1: call rb_jump_tag(redo)");
+ rb_jump_tag(TAG_REDO);
+ } else if (rb_obj_is_kind_of(exc, eTkCallbackThrow)) {
+ DUMP1("pending_exception_check1: call rb_jump_tag(throw)");
+ rb_jump_tag(TAG_THROW);
+ }
rb_exc_raise(exc);
}
} else {
@@ -2172,9 +2199,18 @@ tcl_protect_core(interp, proc, data) /* should not raise exception */
break;
case TAG_RETRY:
+ if (NIL_P(ruby_errinfo)) {
+ DUMP1("rb_protect: retry");
+ exc = rb_exc_new2(eTkCallbackRetry, "retry jump error");
+ } else {
+ exc = ruby_errinfo;
+ }
+ break;
+
case TAG_REDO:
if (NIL_P(ruby_errinfo)) {
- rb_jump_tag(status); /* danger */
+ DUMP1("rb_protect: redo");
+ exc = rb_exc_new2(eTkCallbackRedo, "redo jump error");
} else {
exc = ruby_errinfo;
}
@@ -2198,7 +2234,8 @@ tcl_protect_core(interp, proc, data) /* should not raise exception */
case TAG_THROW:
if (NIL_P(ruby_errinfo)) {
- rb_jump_tag(TAG_THROW); /* danger */
+ DUMP1("rb_protect: throw");
+ exc = rb_exc_new2(eTkCallbackThrow, "throw jump error");
} else {
exc = ruby_errinfo;
}
@@ -2255,6 +2292,11 @@ tcl_protect_core(interp, proc, data) /* should not raise exception */
return TCL_RETURN;
}
+ if (rb_obj_is_kind_of(exc, eTkLocalJumpError)) {
+ rbtk_pending_exception = exc;
+ return TCL_ERROR;
+ }
+
if (rb_obj_is_kind_of(exc, eLocalJumpError)) {
VALUE reason = rb_ivar_get(exc, ID_at_reason);
@@ -5215,9 +5257,16 @@ get_obj_from_str(str)
return Tcl_NewStringObj(s, RSTRING(str)->len);
#else /* TCL_VERSION >= 8.1 */
VALUE enc = rb_attr_get(str, ID_at_enc);
- if (!NIL_P(enc) && strcmp(StringValuePtr(enc), "binary") == 0) {
- /* binary string */
- return Tcl_NewByteArrayObj(s, RSTRING(str)->len);
+
+ if (!NIL_P(enc)) {
+ StringValue(enc);
+ if (strcmp(RSTRING(enc)->ptr, "binary") == 0) {
+ /* binary string */
+ return Tcl_NewByteArrayObj(s, RSTRING(str)->len);
+ } else {
+ /* text string */
+ return Tcl_NewStringObj(s, RSTRING(str)->len);
+ }
} else if (strlen(s) != RSTRING(str)->len) {
/* probably binary string */
return Tcl_NewByteArrayObj(s, RSTRING(str)->len);
@@ -6030,9 +6079,12 @@ lib_fromUTF8_core(ip_obj, src, encodename)
if (TYPE(str) == T_STRING) {
enc = rb_attr_get(str, ID_at_enc);
- if (!NIL_P(enc) && strcmp(StringValuePtr(enc), "binary") == 0) {
- rb_thread_critical = thr_crit_bup;
- return str;
+ if (!NIL_P(enc)) {
+ StringValue(enc);
+ if (strcmp(RSTRING(enc)->ptr, "binary") == 0) {
+ rb_thread_critical = thr_crit_bup;
+ return str;
+ }
}
}
@@ -7629,6 +7681,14 @@ Init_tcltklib()
eLocalJumpError = rb_const_get(rb_cObject, rb_intern("LocalJumpError"));
+ eTkLocalJumpError = rb_define_class("TkLocalJumpError", eLocalJumpError);
+
+ eTkCallbackRetry = rb_define_class("TkCallbackRetry", eTkLocalJumpError);
+ eTkCallbackRedo = rb_define_class("TkCallbackRedo", eTkLocalJumpError);
+ eTkCallbackThrow = rb_define_class("TkCallbackThrow", eTkLocalJumpError);
+
+ /* --------------------------------------------------------------- */
+
ID_at_enc = rb_intern("@encoding");
ID_at_interp = rb_intern("@interp");