Module: Tk::Event::Handler

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

Class Method Summary collapse

Class Method Details

.invoke(id, event) ⇒ Object



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

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

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



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

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



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

def register_block(block)
  id = nil

  @mutex.synchronize do
    @store << block
    id = @store.size - 1
  end

  id
end

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

Yields:

  • (id)


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

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

.unregister(tag, sequence) ⇒ Object



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

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