Prevent manager from handling override_redirect windows

This commit is contained in:
Thibault Jouan 2015-04-19 04:35:37 +00:00
parent c51d1525ee
commit 02861a63d4
2 changed files with 35 additions and 16 deletions

View File

@ -45,6 +45,12 @@ module Uh
@display.grab_key keysym.to_s, mod_mask @display.grab_key keysym.to_s, mod_mask
end end
def manage window
return if window.override_redirect?
@clients << client = Client.new(window)
@events.emit :manage, args: client
end
def handle_next_event def handle_next_event
handle @display.next_event handle @display.next_event
end end
@ -74,8 +80,7 @@ module Uh
end end
def handle_map_request event def handle_map_request event
@clients << client = Client.new(event.window) manage event.window
@events.emit :manage, args: client
end end
def check_other_wm! def check_other_wm!

View File

@ -106,6 +106,32 @@ module Uh
end end
end end
describe '#manage' do
let(:window) { instance_spy Window, override_redirect?: false }
it 'registers a new client wrapping the given window' do
manager.manage window
expect(manager.clients[0])
.to be_a(Client)
.and have_attributes(window: window)
end
it 'ignores event when window has override redirect' do
allow(window).to receive(:override_redirect?) { true }
expect { manager.manage window }.not_to change { manager.clients }
end
it 'emits :manage event with the registered client' do
events.on :manage, &block
expect(block).to receive :call do |client|
expect(client)
.to be_a(Client)
.and have_attributes(window: window)
end
manager.manage window
end
end
describe '#handle_next_event' do describe '#handle_next_event' do
it 'handles the next available event on display' do it 'handles the next available event on display' do
event = double 'event' event = double 'event'
@ -178,20 +204,8 @@ module Uh
context 'when map_request event is given' do context 'when map_request event is given' do
let(:event) { double 'event', type: :map_request, window: :window } let(:event) { double 'event', type: :map_request, window: :window }
it 'registers a new client wrapping the event window' do it 'manages the event window' do
manager.handle event expect(manager).to receive(:manage).with :window
expect(manager.clients[0])
.to be_a(Client)
.and have_attributes(window: :window)
end
it 'emits :manage event with the registered client' do
events.on :manage, &block
expect(block).to receive :call do |client|
expect(client)
.to be_a(Client)
.and have_attributes(window: :window)
end
manager.handle event manager.handle event
end end
end end