Bug #11908 ยป bug_11908.patch
| ext/tk/lib/tk/optiondb.rb | ||
|---|---|---|
|
@@resource_proc_class.instance_variable_set('@method_tbl',
|
||
|
TkCore::INTERP.create_table)
|
||
|
@@resource_proc_class.instance_variable_set('@add_method', false)
|
||
|
@@resource_proc_class.instance_variable_set('@safe_mode', 4)
|
||
|
@@resource_proc_class.instance_variable_set('@safe_mode', 1)
|
||
|
class << @@resource_proc_class
|
||
|
private :new
|
||
| ... | ... | |
|
end
|
||
|
end
|
||
|
=end
|
||
|
def __create_new_class(klass, func, safe = 4, add = false, parent = nil)
|
||
|
def __create_new_class(klass, func, safe = 1, add = false, parent = nil)
|
||
|
if klass.kind_of?(TkWindow)
|
||
|
carrier = klass.path
|
||
|
CmdClassID.mutex.synchronize{
|
||
| ... | ... | |
|
# If you want to modify the new class or create a new subclass,
|
||
|
# you must do such operation in the block parameter.
|
||
|
# Because the created class is frozen after evaluating the block.
|
||
|
def new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b)
|
||
|
def new_proc_class(klass, func, safe = 1, add = false, parent = nil, &b)
|
||
|
new_klass = __create_new_class(klass, func, safe, add, parent)
|
||
|
new_klass.class_eval(&b) if block_given?
|
||
|
__remove_methods_of_proc_class(new_klass)
|
||
| ... | ... | |
|
end
|
||
|
module_function :eval_under_random_base
|
||
|
def new_proc_class_random(klass, func, safe = 4, add = false, &b)
|
||
|
def new_proc_class_random(klass, func, safe = 1, add = false, &b)
|
||
|
eval_under_random_base(){
|
||
|
TkOptionDB.new_proc_class(klass, func, safe, add, self, &b)
|
||
|
}
|
||
| ext/tk/sample/cmd_res_test.rb | ||
|---|---|---|
|
File.dirname(__FILE__)))
|
||
|
f = TkFrame.new(:class=>'BtnFrame').pack
|
||
|
b = TkButton.new(:parent=>f, :widgetname=>'hello').pack
|
||
|
cmd1 = TkOptionDB.new_proc_class(b, [:show_msg, :bye_msg], 3)
|
||
|
cmd2 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, cmd1)
|
||
|
cmd3 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 3, false, b)
|
||
|
cmd4 = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 3){
|
||
|
cmd1 = TkOptionDB.new_proc_class(b, [:show_msg, :bye_msg], 1)
|
||
|
cmd2 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 1, false, cmd1)
|
||
|
cmd3 = TkOptionDB.new_proc_class(:ZZZ, [:show_msg, :bye_msg], 1, false, b)
|
||
|
cmd4 = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 1){
|
||
|
def self.__check_proc_string__(str)
|
||
|
"{|arg| print [arg, $SAFE].inspect, ': '; Proc.new#{str}.call(arg)}"
|
||
|
end
|
||
| ext/tk/sample/tkoptdb.rb | ||
|---|---|---|
|
# 'show_msg' and 'bye_msg' procedures can be defined on BTN_CMD resource.
|
||
|
# Those procedures are called under $SAFE==2
|
||
|
cmd = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 3) {
|
||
|
cmd = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 1) {
|
||
|
# If you want to check resource string (str),
|
||
|
# please define __check_proc_string__(str) like this.
|
||
|
class << self
|
||