Class: Sapristi::Linux::WindowManager

Inherits:
Object
  • Object
show all
Defined in:
lib/sapristi/adapters/linux/window_manager.rb

Constant Summary collapse

GRAVITY =
0
TIME_TO_APPLY_DIMENSIONS =
0.25

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(display = WMCtrl.display) ⇒ WindowManager

Returns a new instance of WindowManager.



8
9
10
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 8

def initialize(display = WMCtrl.display)
  @display = display
end

Instance Attribute Details

#displayObject (readonly)

Returns the value of attribute display.



12
13
14
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 12

def display
  @display
end

Instance Method Details

#close(window) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 14

def close(window)
  @display.action_window(window.id, :close)

  #
  # sleep to allow a Graceful Dead to the window process
  #
  # X Error of failed request:  BadWindow (invalid Window parameter)
  #   Major opcode of failed request:  20 (X_GetProperty)
  #   Resource id in failed request:  0x2200008
  #   Serial number of failed request:  1095
  #   Current serial number in output stream:  1095
  sleep TIME_TO_APPLY_DIMENSIONS
end

#move(window, x_position, y_position) ⇒ Object



39
40
41
42
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 39

def move(window, x_position, y_position)
  geometry = complete_geometry(window.id, x_position: x_position, y_position: y_position)
  move_resize(window, geometry)
end

#move_resize(window, requested) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 49

def move_resize(window, requested)
  remove_extended_hints(window) if window.maximized_horizontally? || window.maximized_vertically?

  geometry = requested.clone
  left, right, top, bottom = window.frame_extents || [0, 0, 0, 0]
  geometry[2] -= left + right
  geometry[3] -= top + bottom

  @display.action_window(window.id, :move_resize, GRAVITY, *geometry)
  sleep TIME_TO_APPLY_DIMENSIONS
  check_expected_geometry window, requested
end

#resize(window, width, height) ⇒ Object



44
45
46
47
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 44

def resize(window, width, height)
  geometry = complete_geometry(window.id, width: width, height: height)
  move_resize(window, geometry)
end

#windows(args = {}) ⇒ Object



28
29
30
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 28

def windows(args = {})
  @display.windows args
end

#workspacesObject



32
33
34
# File 'lib/sapristi/adapters/linux/window_manager.rb', line 32

def workspaces
  @display.desktops
end