Fail when another window manager is already running
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user