Exception: XlibObj::Error

Inherits:
StandardError
  • Object
show all
Defined in:
lib/error.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(display, error) ⇒ Error

Returns a new instance of Error.



11
12
13
14
15
16
17
# File 'lib/error.rb', line 11

def initialize(display, error)
  @display = display
  @error_code = error[:error_code]
  @request_code = error[:request_code]
  @minor_code = error[:minor_code]
  @resourceid = error[:resourceid]
end

Instance Attribute Details

#error_codeObject (readonly)

Returns the value of attribute error_code.



19
20
21
# File 'lib/error.rb', line 19

def error_code
  @error_code
end

#minor_codeObject (readonly)

Returns the value of attribute minor_code.



19
20
21
# File 'lib/error.rb', line 19

def minor_code
  @minor_code
end

#request_codeObject (readonly)

Returns the value of attribute request_code.



19
20
21
# File 'lib/error.rb', line 19

def request_code
  @request_code
end

#resourceidObject (readonly)

Returns the value of attribute resourceid.



19
20
21
# File 'lib/error.rb', line 19

def resourceid
  @resourceid
end

Instance Method Details

#descriptionObject Also known as: message



21
22
23
24
25
# File 'lib/error.rb', line 21

def description
  "#{request_description}\n" <<
  "Error: #{error_description}\n" <<
  "Resource: #{resource_description}"
end

#error_descriptionObject



49
50
51
52
53
54
55
# File 'lib/error.rb', line 49

def error_description
  message_size = 256
  message = FFI::MemoryPointer.new(:char, message_size)
  Xlib.XGetErrorDatabaseText(@display.to_native, 'XProtoError', "#{@error_code}",
    "Error code #{@error_code}", message, message_size)
  message.read_string
end

#major_request_descriptionObject



32
33
34
35
36
37
38
# File 'lib/error.rb', line 32

def major_request_description
  message_size = 256
  message = FFI::MemoryPointer.new(:char, message_size)
  Xlib.XGetErrorDatabaseText(@display.to_native, 'XRequest', "#{@request_code}",
    "Major code #{@request_code}", message, message_size)
  message.read_string
end

#minor_request_descriptionObject



40
41
42
43
44
45
46
47
# File 'lib/error.rb', line 40

def minor_request_description
  message_size = 256
  message = FFI::MemoryPointer.new(:char, message_size)
  extension = @display.extensions.find{ |ext| ext.opcode == @request_code }
  Xlib.XGetErrorDatabaseText(@display.to_native, "XRequest.#{extension.name}", "#{@minor_code}",
    "Minor code #{@minor_code}", message, message_size)
  "#{extension.name} #{message.read_string}"
end

#request_descriptionObject



28
29
30
# File 'lib/error.rb', line 28

def request_description
  @request_code < 128 ? major_request_description : minor_request_description
end

#resource_descriptionObject



57
58
59
# File 'lib/error.rb', line 57

def resource_description
  @resourceid
end