Module: Tk::Event::Handler

Defined in:
lib/ffi-tk/event/handler.rb

Class Method Summary collapse

Class Method Details

.invoke(id, event) ⇒ Object



12
13
14
15
# File 'lib/ffi-tk/event/handler.rb', line 12

def invoke(id, event)
  return unless found = @store.at(id)
  found.call(event)
end

.register(tag, sequence, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ffi-tk/event/handler.rb', line 28

def register(tag, sequence, &block)
  id = register_block(block)
  if sequence.to_s == '%'
    Tk.interp.eval(
      @callback % [tag, '%%'.to_tcl, id, '%%'.to_tcl]
    )
  else
    Tk.interp.eval(
      @callback % [tag, sequence.to_tcl, id, sequence.to_tcl]
    )
  end
  @bound[[tag, sequence]] = block
  id
end

.register_block(block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/ffi-tk/event/handler.rb', line 17

def register_block(block)
  id = nil

  @mutex.synchronize{
    @store << block
    id = @store.size - 1
  }

  return id
end

.register_custom(block) {|id| ... } ⇒ Object

Yields:

  • (id)


43
44
45
46
47
# File 'lib/ffi-tk/event/handler.rb', line 43

def register_custom(block)
  id = register_block(block)
  yield id
  id
end

.unregister(tag, sequence) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/ffi-tk/event/handler.rb', line 49

def unregister(tag, sequence)
  key = [tag, sequence]

  if block = @bound[key]
    Tk.execute(:bind, tag, sequence, nil)
    id = @store.index(block)
    @store[id] = nil
    @bound.delete(key)
  end
end