Fail when another window manager is already running

This commit is contained in:
Thibault Jouan
2015-04-12 23:46:34 +00:00
parent c3e1f9639a
commit 10591d0646
8 changed files with 47 additions and 10 deletions

View File

@@ -11,8 +11,9 @@ require 'uh/wm/runner'
module Uh
module WM
Error = Class.new(StandardError)
RuntimeError = Class.new(RuntimeError)
ArgumentError = Class.new(Error)
Error = Class.new(StandardError)
RuntimeError = Class.new(RuntimeError)
ArgumentError = Class.new(Error)
OtherWMRunningError = Class.new(RuntimeError)
end
end

View File

@@ -1,6 +1,8 @@
module Uh
module WM
class Manager
INPUT_MASK = Events::SUBSTRUCTURE_REDIRECT_MASK
attr_reader :display
def initialize events, display = Display.new
@@ -11,6 +13,13 @@ module Uh
def connect
@events.emit :connecting, args: @display
@display.open
Display.on_error do
fail OtherWMRunningError, 'another window manager is already running'
end
@display.listen_events INPUT_MASK
@display.sync false
Display.on_error { |*args| handle_error *args }
@display.sync false
@events.emit :connected, args: @display
end
@@ -27,6 +36,13 @@ module Uh
when :key_press then @events.emit :key, event.key.to_sym
end
end
private
def handle_error *args
@dispatcher.emit :error, args: args
end
end
end
end