diff options
| -rw-r--r-- | lib/e17/ecore/event.rb | 57 | ||||
| -rw-r--r-- | spec/ecore_event_spec.rb | 54 | 
2 files changed, 50 insertions, 61 deletions
diff --git a/lib/e17/ecore/event.rb b/lib/e17/ecore/event.rb index e536875..9465d16 100644 --- a/lib/e17/ecore/event.rb +++ b/lib/e17/ecore/event.rb @@ -1,13 +1,17 @@  #! /usr/bin/env ruby  # -*- coding: UTF-8 -*-  # -require 'ffi' +require 'e17/ffi_helper'  #  module E17      module ECORE          # +        extend FFIHelper          extend FFI::Library          # +        ffi_lib 'ecore' +        # +#        enum :ecore_signals, [:none,0,:signal_user,:signal_hup,:signal_exit,:signal_power,:signal_realtime]          EVENT_NONE = 0          EVENT_SIGNAL_USER     = 1 # User signal event          EVENT_SIGNAL_HUP      = 2 # Hup signal event @@ -15,43 +19,30 @@ module E17          EVENT_SIGNAL_POWER    = 4 # Power signal event          EVENT_SIGNAL_REALTIME = 5 # Realtime signal event          EVENT_COUNT = 6 -        callback :ecore_event_handler_cb, [:pointer, :int, :pointer], :bool +        #          callback :ecore_end_cb, [:pointer, :pointer], :void          callback :ecore_data_cb, [:pointer], :pointer          callback :ecore_filter_cb, [:pointer, :pointer, :int, :pointer], :bool +        callback :ecore_event_handler_cb, [:pointer, :int, :pointer], :bool          # -        ffi_lib 'ecore' -        functions = [ -            [ :ecore_event_handler_add, [:int, :ecore_event_handler_cb, :pointer], :pointer ], -            [ :ecore_event_handler_del, [:pointer], :void ], -            [ :ecore_event_add, [:int, :pointer, :ecore_end_cb, :pointer], :pointer ], -            [ :ecore_event_del, [:pointer], :void ], -            [ :ecore_event_handler_data_get, [:pointer], :pointer ], -            [ :ecore_event_handler_data_set, [:pointer,:pointer], :void ], -            [ :ecore_event_type_new, [], :int ], -            [ :ecore_event_filter_add, [:ecore_data_cb, :ecore_filter_cb, :ecore_end_cb, :pointer], :pointer ], -            [ :ecore_event_filter_del, [:pointer], :void ], -            [ :ecore_event_current_type_get, [], :int ], +        fcts = [ +            # http://docs.enlightenment.org/auto/ecore/group__Ecore__Event__Group.html +            [ :ecore_event_handler_add, [:int, :ecore_event_handler_cb, :pointer], :pointer], +            [ :ecore_event_handler_del, [:pointer], :pointer], +            [ :ecore_event_add, [:int, :pointer, :ecore_end_cb, :pointer], :pointer], +            [ :ecore_event_del, [:pointer], :pointer], +            [ :ecore_event_handler_data_get, [:pointer], :pointer], +            [ :ecore_event_handler_data_set, [:pointer,:pointer], :pointer], +            [ :ecore_event_type_new, [], :int], +            [ :ecore_event_filter_add, [:ecore_data_cb, :ecore_filter_cb, :ecore_end_cb, :pointer], :pointer], +            [ :ecore_event_filter_del, [:pointer], :pointer], +            [ :ecore_event_current_type_get, [], :int],              [ :ecore_event_current_event_get, [], :pointer], -        ].each do |func| -            begin -                attach_function *func -            rescue Object => e -                puts "Could not attach #{func} #{e.message}" -            end -        end -        # -        class << self -            alias event_handler_add ecore_event_handler_add -            alias event_handler_del ecore_event_handler_del -            alias event_add ecore_event_add -            alias event_del ecore_event_del -            alias event_handler_data_get ecore_event_handler_data_get -            alias event_handler_data_set ecore_event_handler_data_set -            alias event_type_new ecore_event_type_new -            alias event_current_type_get ecore_event_current_type_get -            alias event_current_event_get ecore_event_current_event_get -        end +        ] +        # +        attach_fcts fcts +        # +        create_aliases 'ecore_'.length, fcts          #      end  end diff --git a/spec/ecore_event_spec.rb b/spec/ecore_event_spec.rb index 0dba5b9..d8bc5cc 100644 --- a/spec/ecore_event_spec.rb +++ b/spec/ecore_event_spec.rb @@ -10,7 +10,7 @@ describe E17::ECORE do      #      before(:all) do          USER_SIGNAL_CB = Proc.new do |data, type, event| -            data.read_string.should eql "666" +            data.read_string.should eql "ok"              type.should eql ECORE::EVENT_SIGNAL_USER              event.read_int.should eql 666              ECORE.event_current_type_get.should eql ECORE::EVENT_SIGNAL_USER @@ -21,25 +21,26 @@ describe E17::ECORE do              data.read_string.should eql "none"              event.read_int.should eql 666          end -        NONE = "none" -        NONE_PTR = FFI::MemoryPointer.from_string NONE +        OK = FFI::MemoryPointer.from_string "ok" +        KO = FFI::MemoryPointer.from_string "ko" +        NONE = FFI::MemoryPointer.from_string "none"      end      # -    it 'should be able to add event hanlder and process event' do +    it 'should be able to add, del event hanlder and process event' do          ECORE.init          evt = FFI::MemoryPointer.new(:int)          evt.write_int 666          # add, del, add event handler -        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, "wrong" +        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, KO          evt_handler.null?.should be_false -        ECORE.event_handler_del evt_handler -        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, "666" +        ECORE.event_handler_del(evt_handler).address.should eql KO.address +        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, OK          evt_handler.null?.should be_false          # add, del, add event -        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE_PTR +        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE          ecore_evt.null?.should be_false -        ECORE.event_del ecore_evt -        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE_PTR +        ECORE.event_del(ecore_evt).address.should eql NONE.address +        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE          ecore_evt.null?.should be_false          ECORE.main_loop_begin   # process event          ECORE.shutdown @@ -49,12 +50,12 @@ describe E17::ECORE do          ECORE.init          evt = FFI::MemoryPointer.new(:int)          evt.write_int 666 -        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, "wrong" +        evt_handler = ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, KO          evt_handler.null?.should be_false -        ECORE.event_handler_data_get(evt_handler).read_string.should eql "wrong" -        ECORE.event_handler_data_set evt_handler, FFI::MemoryPointer.from_string("666") -        ECORE.event_handler_data_get(evt_handler).read_string.should eql "666" -        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE_PTR +        ECORE.event_handler_data_get(evt_handler).read_string.should eql "ko" +        ECORE.event_handler_data_set(evt_handler, OK).address.should eql KO.address +        ECORE.event_handler_data_get(evt_handler).read_string.should eql "ok" +        ecore_evt = ECORE.event_add ECORE::EVENT_SIGNAL_USER, evt, EVENT_FREE_CB, NONE          ecore_evt.null?.should be_false          ECORE.main_loop_begin   # process event          ECORE.shutdown @@ -72,16 +73,16 @@ describe E17::ECORE do          ECORE.init          loop_data = FFI::MemoryPointer.from_string("loop_data")          event_free_cb = Proc.new do |data,event| -            data.read_string.should eql "wrong" +            data.read_string.should eql "ko"              event.read_int.should eql 69          end          start_cb = Proc.new do |data| -            data.read_string.should eql "yeah" +            data.read_string.should eql "ok"              loop_data          end          count = 0          filter_cb = Proc.new do |data,loop_data,type,event| -            data.read_string.should eql "yeah" +            data.read_string.should eql "ok"              loop_data.read_string.should eql "loop_data"              type.should eql ECORE::EVENT_SIGNAL_USER              count += 1 @@ -95,23 +96,20 @@ describe E17::ECORE do              end          end          end_cb = Proc.new do |data,loop_data| -            data.read_string.should eql "yeah" +            data.read_string.should eql "ok"              loop_data.read_string.should eql "loop_data"          end -        m0 = FFI::MemoryPointer.from_string("yeah") -        filter = ECORE.ecore_event_filter_add start_cb, filter_cb, end_cb, m0 -        ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, "666" +        filter = ECORE.ecore_event_filter_add start_cb, filter_cb, end_cb, OK +        ECORE.event_handler_add ECORE::EVENT_SIGNAL_USER, USER_SIGNAL_CB, OK          e1 = FFI::MemoryPointer.new(:int)          e1.write_int 69 -        m1 = FFI::MemoryPointer.from_string("wrong") -        evt1 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e1, event_free_cb, m1 +        evt1 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e1, event_free_cb, KO          e2 = FFI::MemoryPointer.new(:int)          e2.write_int 666 -        m2 = FFI::MemoryPointer.from_string("none") -        evt2 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, m2 +        evt2 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, NONE          ECORE.main_loop_begin   # process event -        ECORE.ecore_event_filter_del filter -        evt2 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, m2 +        ECORE.ecore_event_filter_del(filter).address.should eql OK.address +        evt2 = ECORE.event_add ECORE::EVENT_SIGNAL_USER, e2, EVENT_FREE_CB, NONE          ECORE.main_loop_begin   # process event          ECORE.shutdown      end  | 
