diff options
author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-06-24 03:29:24 +0000 |
---|---|---|
committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-06-24 03:29:24 +0000 |
commit | 1ea627d1fd5d989d613a11816dc299918911504c (patch) | |
tree | 0ee2851c41447af4731539654ec54f60eed39a41 /ext | |
parent | 20c547642fbe2f332863e4b18093f761af69f060 (diff) |
* ext/tk/lib/tk.rb: fix typo on Tk.grid_propagate.
* ext/tk/lib/tk.rb: Tk.event_generate and TkWindow#event_generate
accept TkEvent::Event object as context argument.
* ext/tk/lib/tk/event.rb: add TkEvent::Event#valid_fields and
valid_for_generate to get field parameters of event_generate.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8656 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/tk/lib/tk.rb | 14 | ||||
-rw-r--r-- | ext/tk/lib/tk/event.rb | 54 |
2 files changed, 51 insertions, 17 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb index c076b741a5..9daee2de54 100644 --- a/ext/tk/lib/tk.rb +++ b/ext/tk/lib/tk.rb @@ -1516,7 +1516,9 @@ module TkCore def event_generate(win, context, keys=nil) #win = win.path if win.kind_of?(TkObject) - if keys + if context.kind_of?(TkEvent::Event) + context.generate(win, ((keys)? keys: {})) + elsif keys tk_call_without_enc('event', 'generate', win, "<#{tk_event_sequence(context)}>", *hash_kv(keys, true)) @@ -3500,7 +3502,9 @@ class TkObject<TkKernel =end def event_generate(context, keys=nil) - if keys + if context.kind_of?(TkEvent::Event) + context.generate(self, ((keys)? keys: {})) + elsif keys #tk_call('event', 'generate', path, # "<#{tk_event_sequence(context)}>", *hash_kv(keys)) tk_call_without_enc('event', 'generate', path, @@ -3832,9 +3836,9 @@ class TkWindow<TkObject # self #end if mode == None - TkGrid.propagete(self) + TkGrid.propagate(self) else - TkGrid.propagete(self, mode) + TkGrid.propagate(self, mode) self end end @@ -4149,7 +4153,7 @@ end #Tk.freeze module Tk - RELEASE_DATE = '2005-06-23'.freeze + RELEASE_DATE = '2005-06-24'.freeze autoload :AUTO_PATH, 'tk/variable' autoload :TCL_PACKAGE_PATH, 'tk/variable' diff --git a/ext/tk/lib/tk/event.rb b/ext/tk/lib/tk/event.rb index bb3c146333..b538bfd63d 100644 --- a/ext/tk/lib/tk/event.rb +++ b/ext/tk/lib/tk/event.rb @@ -212,29 +212,59 @@ module TkEvent #------------------------------------------- - def generate(win, modkeys={}) - klass = self.class - type_id = self.type - - type_name = klass.type_name(type_id) - group_flag = klass.group_flag(type_id) - - opts = {} + def valid_fields(group_flag=nil) + group_flag = self.class.group_flag(self.type) unless group_flag + fields = {} FIELD_FLAG.each{|key, flag| next if (flag & group_flag) == 0 - begin val = self.__send__(key) - val = FIELD_OPERATION[key].call(val) if FIELD_OPERATION[key] rescue next end - next if !val || val == '??' - opts[key] = val + fields[key] = val + } + + fields + end + + def valid_for_generate(group_flag=nil) + fields = valid_fields(group_flag) + + FIELD_OPERATION.each{|key, cmd| + next unless fields.has_key?(key) + val = FIELD_OPERATION[key].call(fields[key]) + if val + fields[key] = val + else + fields.delete(key) + end } + fields + end + + def generate(win, modkeys={}) + klass = self.class + + if modkeys.has_key?(:type) || modkeys.has_key?('type') + modkeys = TkComm._symbolkey2str(modkeys) + type_id = modkeys.delete('type') + else + type_id = self.type + end + + type_name = klass.type_name(type_id) + unless type_name + fail RuntimeError, "type_id #{type_id} is invalid" + end + + group_flag = klass.group_flag(type_id) + + opts = valid_for_generate(group_flag) + modkeys.each{|key, val| if val opts[key.to_s] = val |