uh-wm/lib/uh/wm/manager.rb
2015-04-15 01:09:18 +00:00

53 lines
1.3 KiB
Ruby

module Uh
module WM
class Manager
INPUT_MASK = Events::SUBSTRUCTURE_REDIRECT_MASK
attr_reader :display
def initialize events, display = Display.new
@events = events
@display = display
end
def connect
@events.emit :connecting, args: @display
@display.open
Display.on_error { fail OtherWMRunningError }
@display.listen_events INPUT_MASK
@display.sync false
Display.on_error { |*args| handle_error *args }
@display.sync false
@events.emit :connected, args: @display
end
def grab_key keysym, mod = nil
mod_mask = KEY_MODIFIERS[:mod1]
mod_mask |= KEY_MODIFIERS[mod] if mod
@display.grab_key keysym.to_s, mod_mask
end
def handle_pending_events
handle @display.next_event while @display.pending?
end
def handle event
case event.type
when :key_press
key_selector = event.modifier_mask & KEY_MODIFIERS[:shift] == 1 ?
[event.key.to_sym, :shift] :
event.key.to_sym
@events.emit :key, *key_selector
end
end
private
def handle_error *args
@dispatcher.emit :error, args: args
end
end
end
end