summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tk.rb
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-07-31 20:52:40 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-07-31 20:52:40 +0000
commit75362fbd47cedf4b4906a361a6c54bc4ad8ea5ec (patch)
tree33e458bfb8dcf84face1eb34acede77b68ff5d8d /ext/tk/lib/tk.rb
parent0cdf0d99c1e5164c53676a39265ff99120c8a026 (diff)
* (IMPORTANT BUG FIX) scan of event keywords doesn't work on recent
versions of Tck/Tk * (bug fix) initialize error of instance variable on TkComposite * (bug fix) initialize error on encoding-system on MultiTkIp * (bug fix) trouble on destroying widgets * (new) add JP and EN version of Ruby/Tk widget demos git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib/tk.rb')
-rw-r--r--ext/tk/lib/tk.rb55
1 files changed, 30 insertions, 25 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index b25c5f3a1c..0a9aacaaa5 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -407,7 +407,13 @@ module TkComm
if num = EV_KEY.index($1)
case EV_TYPE[num]
when ?n
- arg_cnv << TkComm::number(arg_val[idx])
+ begin
+ val = TkComm::number(arg_val[idx])
+ rescue ArgumentError
+ # ignore --> no convert
+ val = TkComm::string(arg_val[idx])
+ end
+ arg_cnv << val
when ?s
arg_cnv << TkComm::string(arg_val[idx])
when ?b
@@ -3748,24 +3754,28 @@ class TkWindow<TkObject
self
end
- def _destroy_children
+ def destroy
+ super
children = []
rexp = /^#{self.path}\.[^.]+$/
TkCore::INTERP.tk_windows.each{|path, obj|
- children << obj if path =~ rexp
+ children << [path, obj] if path =~ rexp
}
- children.each{|obj| obj.destroy}
- end
- private :_destroy_children
-
- def destroy
- super
- _destroy_children
if defined?(@cmdtbl)
for id in @cmdtbl
uninstall_cmd id
end
end
+
+ children.each{|path, obj|
+ if defined?(@cmdtbl)
+ for id in @cmdtbl
+ uninstall_cmd id
+ end
+ end
+ TkCore::INTERP.tk_windows.delete(path)
+ }
+
tk_call 'destroy', epath
uninstall_win
end
@@ -5020,6 +5030,9 @@ module TkComposite
extend Tk
def initialize(parent=nil, *args)
+ @delegates = {}
+ @delegates['DEFAULT'] = @frame
+
if parent.kind_of? Hash
keys = _symbolkey2str(parent)
parent = keys['parent']
@@ -5031,10 +5044,6 @@ module TkComposite
@path = @epath = @frame.path
initialize_composite(*args)
end
- unless defined? @delegates
- @delegates = {}
- @delegates['DEFAULT'] = @frame
- end
end
def epath
@@ -5148,21 +5157,17 @@ end
# widget_destroy_hook
require 'tkvirtevent'
-TkBindTag::ALL.bind(TkVirtualEvent.new('Destroy'), proc{|widget|
- if widget.respond_to?(:path)
- w = widget.path
- else
- w = widget.to_s
- end
- if widget.respond_to?(:__destroy_hook__)
- begin
- if TkCore::INTERP._invoke('winfo','exist',w) == '1'
+TkBindTag::ALL.bind(TkVirtualEvent.new('Destroy'), proc{|xpath|
+ path = xpath[1..-1]
+ if (widget = TkCore::INTERP.tk_windows[path])
+ if widget.respond_to?(:__destroy_hook__)
+ begin
widget.__destroy_hook__
+ rescue Exception
end
- rescue Exception
end
end
- }, '%W')
+ }, 'x%W')
# autoload
autoload :TkCanvas, 'tkcanvas'