class Vigilem::X11::InputSystemHandler

Attributes

demultiplexer[R]
window_xid[R]

Public Class Methods

new(win_xid, display_obj_pointer_or_name, event_mask=nil) click to toggle source

@param [Integer] win_xid @param [String || Display || ::FFI::Pointer] display_pointer_or_name @param [Integer] event_mask

# File lib/vigilem/x11/input_system_handler.rb, line 24
def initialize(win_xid, display_obj_pointer_or_name, event_mask=nil)
  
  initialize_input_system_handler
  
  display = Display.open(display_obj_pointer_or_name)
  
  @demultiplexer = Core::Demultiplexer.acquire(EventQueue.new(display), [[self.buffer, {:func => :concat}]]) do |dem| 
    dem.input.respond.fileno == display.fileno
  end
  
  @window_xid = win_xid
  
  self.select_input(event_mask) if event_mask
  
end

Public Instance Methods

get_input_focus() click to toggle source

@see www.unix.com/man-page/All/3x/XGetInputFocus/ @return [Array<Integer, Fixnum>] [xwindow_id, revert_to_return]

# File lib/vigilem/x11/input_system_handler.rb, line 63
def get_input_focus
  X11.get_input_focus(display, window_xid, 0)[1..-1]
end
query_tree(opts={}) click to toggle source

@see ::query_tree @return [Hash]

# File lib/vigilem/x11/input_system_handler.rb, line 69
def query_tree(opts={})
  X11.query_tree(display, window_xid, opts)
end
read_many_nonblock(num=1) click to toggle source

@param [Fixnum] num @return [Array]

# File lib/vigilem/x11/input_system_handler.rb, line 45
def read_many_nonblock(num=1)
  synchronize {
    demultiplexer.demux(num)
    buffer.slice!(0, num)
  }
end
select_input(event_mask) click to toggle source

@todo handle `X Error of failed request: BadWindow (invalid Window parameter)' @param [Fixnum] @return [Fixnum]

# File lib/vigilem/x11/input_system_handler.rb, line 55
def select_input(event_mask)
  Xlib.XSelectInput(demultiplexer.input.display, window_xid, event_mask)
end