Module: ADesklets::EventHandler

Included in:
BaseDesklets, BaseEventHandler
Defined in:
lib/adesklets/base.rb

Overview

Client

Instance Method Summary collapse

Instance Method Details

#define_callbacksObject



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/adesklets/base.rb', line 53

def define_callbacks
	@default_callbacks = {}
	@default_callbacks["Ready!"] = proc { |args | ready args } if respond_to?(:ready)
 	@default_callbacks["BackgroundGrab"] = proc { |args| bg_grab args } if respond_to?(:bg_grab)
	@default_callbacks["MenuFire"] = proc { |args| menu args } if respond_to?(:menu)
	@default_callbacks["MotionNotify"] = proc { |args| motion args } if respond_to?(:motion)
	@default_callbacks["EnterNotify"] = proc { |args| enter args } if respond_to?(:enter)
	@default_callbacks["LeaveNotify"] = proc { |args| leave args } if respond_to?(:leave)
	@default_callbacks["ButtonPress"] = proc { |args| button_pressed args } if respond_to?(:button_pressed)
	@default_callbacks["ButtonRelease"] = proc { |args| button_released args } if respond_to?(:button_released)
end

#event_loop(new_callbacks = @default_callbacks) ⇒ Object

sta soluzione nun me piace



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/adesklets/base.rb', line 66

def event_loop( new_callbacks = @default_callbacks )
  session = ADesklets::Client.instance.session 

  new_callbacks.each do |key, proc|
    session.command("event_catch #{key}")
  end

  while true do
    events_io = select( [session.stderr], nil, nil, 1.5 )
    if (not events_io.nil?) 
      line = events_io[0][0].gets
      if line =~ /\s*event: (.*)$/ then
        name, *args = $1.split
        new_callbacks.each do |key, callback|
          callback.call(args) if ( name == key.downcase and not callback.nil? )
        end
      end
    end
  end
end