Sha256: 736094769cc82eba16ee2df7165e4132d496b3ee1ffb6fe2c3391fb0f9504365

Contents?: true

Size: 881 Bytes

Versions: 3

Compression:

Stored size: 881 Bytes

Contents

module Tk
  module Event
    module Handler
      data = Data::PROPERTIES.transpose[0].join(' ').gsub(/%/, '%%')
      @callback = %(bind %s %s { ::RubyFFI::event %d %s #{data} })
      @store = []
      @mutex = Mutex.new

      module_function

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

      def register_block(block)
        id = nil

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

        return id
      end

      def register(tag, sequence, &block)
        id = register_block(block)
        Tk.interp.eval(@callback % [tag, sequence, id, sequence])
        id
      end

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

      def unregister(id)
        @store[id] = nil
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ffi-tk-2010.01.02 lib/ffi-tk/event/handler.rb
ffi-tk-2009.12.14 lib/ffi-tk/event/handler.rb
ffi-tk-2009.11.29 lib/ffi-tk/event/handler.rb