diff --git a/lib/uh/wm/client.rb b/lib/uh/wm/client.rb index 0d80e63..a5c57fc 100644 --- a/lib/uh/wm/client.rb +++ b/lib/uh/wm/client.rb @@ -1,13 +1,14 @@ module Uh module WM class Client - attr_reader :window + attr_reader :window, :unmap_count attr_accessor :geo def initialize window, geo = nil - @window = window - @geo = geo - @visible = false + @window = window + @geo = geo + @visible = false + @unmap_count = 0 end def to_s @@ -40,6 +41,13 @@ module Uh @visible = true self end + + def hide + @window.unmap + @visible = false + @unmap_count += 1 + self + end end end end diff --git a/spec/uh/wm/client_spec.rb b/spec/uh/wm/client_spec.rb index da133d4..482d385 100644 --- a/spec/uh/wm/client_spec.rb +++ b/spec/uh/wm/client_spec.rb @@ -16,6 +16,10 @@ module Uh expect(client).to be_hidden end + it 'has an unmap count of 0' do + expect(client.unmap_count).to eq 0 + end + describe '#to_s' do it 'includes window name' do expect(client.to_s).to include 'wname' @@ -73,6 +77,30 @@ module Uh expect(client.show).to be client end end + + describe '#hide' do + it 'unmaps the window' do + expect(window).to receive :unmap + client.hide + end + + it 'toggles the client as hidden' do + client.show + expect { client.hide } + .to change { client.hidden? } + .from(false).to true + end + + it 'increments the unmap count' do + expect { client.hide } + .to change { client.unmap_count } + .from(0).to 1 + end + + it 'returns self' do + expect(client.hide).to be client + end + end end end end