Esempio n. 1
0
def get_geom_of_win(win_id, display=None):
    from Xlib.display import Display
    if display is None:
        d = Display()
    else:
        d = Display(display)
    root = d.screen().root
    child_windows = root.query_tree()._data['children']
    found = None
    done = False
    while not done:
        done = True
        for cw in child_windows:
            if cw.id == win_id:
                found = cw
                break
            else:
                add_child_windows = cw.query_tree()._data['children']
                added = False
                for child_window in add_child_windows:
                    if not child_window in child_windows:
                        child_windows.append(child_window)
                        added = True
                if added:
                    done = False
        if not found is None:
            break
    if found is None:
        raise Exception(f"No window found with the requested id: {win_id}")

    geom = found.get_geometry()._data.copy()
    geom.pop('root')
    geom.pop('sequence_number')
    geom.pop('depth')
    return geom
Esempio n. 2
0
    def __init__(self, capture=False, display=None):
        self.display = Display(display)
        self.display2 = Display(display)
        self.ctx = self.display2.record_create_context(
            0, [record.AllClients
                ], [{
                    'core_requests': (0, 0),
                    'core_replies': (0, 0),
                    'ext_requests': (0, 0, 0, 0),
                    'ext_replies': (0, 0, 0, 0),
                    'delivered_events': (0, 0),
                    'device_events': (X.KeyPress, X.KeyRelease),
                    'errors': (0, 0),
                    'client_started': False,
                    'client_died': False,
                }])

        self.lock_meaning = None

        #Get these dictionaries for converting keysyms and strings
        self.keysym_to_string, self.string_to_keysym = self.get_translation_dicts(
        )

        #Identify and register special groups of keys
        self.modifier_keycodes = {}
        self.all_mod_keycodes = []
        self.keypad_keycodes = []
        #self.configure_keys()

        #Direct access to the display's keycode-to-keysym array
        logger.debug('Keycode to Keysym map')
        for i in range(len(self.display._keymap_codes)):
            logger.debug('{0}: {1}'.format(i, self.display._keymap_codes[i]))

        PyKeyboardEventMeta.__init__(self, capture)
Esempio n. 3
0
 def __init__(self):
     self.disp = Display()
     self.loc_disp = Display()
     self.ctx = None
     self.flag = 0
     self.first_click = 0.0
     self.second_click = 0.0
     self.keylistener = KeyListener()
     self.keylistener.addKeyListener('Alt_L+l', self.show_app)
     self.keylistener.addKeyListener('l+Alt_L', self.show_app)
     self.mythread = threading.Thread(target=self.detect_double_ctrl)
     self.mythread.daemon = True
     self.mythread.start()
Esempio n. 4
0
 def __init__(self):
     threading.Thread.__init__(self)
     self.finished = threading.Event()
     self.contextEventMask = [X.KeyPress, X.MotionNotify]
     # Give these some initial values
     # Hook to our display.
     self.local_dpy = Display()
     self.record_dpy = Display()
     self.pressed = []
     self.listeners = {}
     self.character = None
     ''' 0: Nothing caught; 1: Read buffer and call main module;
         2: Call main module
     '''
     self.status = 0
Esempio n. 5
0
    def __init__(self, xdisplay=None):  # type: (Optional[Display]) -> None
        """Connect to X11 and the Glib event loop.

        @param xdisplay: A C{python-xlib} display handle.
        @type xdisplay: C{Xlib.display.Display}
        """
        try:
            self.xdisp = xdisplay or Display()
        except (UnicodeDecodeError, DisplayConnectionError) as err:
            raise XInitError("python-xlib failed with %s when asked to open"
                             " a connection to the X server. Cannot bind keys."
                             "\n\tIt's unclear why this happens, but it is"
                             " usually fixed by deleting your ~/.Xauthority"
                             " file and rebooting." % err.__class__.__name__)

        self.xroot = self.xdisp.screen().root
        self._keys = {}  # type: Dict[Tuple[int, int], Callable]

        # Resolve these at runtime to avoid NameErrors
        self._ignored_modifiers = [
            getattr(X, name) for name in self.ignored_modifiers
        ]  # type: List[int]

        # We want to receive KeyPress events
        self.xroot.change_attributes(event_mask=X.KeyPressMask)

        # Set up a handler to catch XGrabKey() failures
        self.xdisp.set_error_handler(self.cb_xerror)

        # Merge python-xlib into the Glib event loop
        # Source: http://www.pygtk.org/pygtk2tutorial/sec-MonitoringIO.html
        gobject.io_add_watch(self.xroot.display, gobject.IO_IN, self.cb_xevent)
Esempio n. 6
0
def get_primary_selection():
    """Get the word selected in the primary selection."""
    display = Display()
    xsel_data_atom = display.intern_atom("XSEL_DATA")
    UTF8_STRING = display.intern_atom("UTF8_STRING")
    screen = display.screen()
    w = screen.root.create_window(0, 0, 2, 2, 0, screen.root_depth)
    w.convert_selection(
        Xlib.Xatom.PRIMARY,  # selection
        UTF8_STRING,  # target
        xsel_data_atom,  # property
        Xlib.X.CurrentTime)  # time

    while True:
        e = display.next_event()
        if e.type == X.SelectionNotify:
            break

    if e.property != xsel_data_atom or \
       e.target != UTF8_STRING:
        return ''

    reply = w.get_full_property(xsel_data_atom, X.AnyPropertyType)
    reply = reply.value.strip()
    return reply
Esempio n. 7
0
    def __init__(self) -> None:
        self.active_keys = {
            XK.string_to_keysym(key): False for key in SETTINGS.keybindings
        }
        self.modifying_keys = {
            XK.string_to_keysym(key): False for key in SETTINGS.keybinding_modifier
        }

        self.zp = ZoneProfile.from_file()
        self.coordinates = Coordinates()

        self.display = Display()
        self.root = self.display.screen().root

        self.context = self.display.record_create_context(
            0,
            [record.AllClients],
            [
                {
                    "core_requests": (0, 0),
                    "core_replies": (0, 0),
                    "ext_requests": (0, 0, 0, 0),
                    "ext_replies": (0, 0, 0, 0),
                    "delivered_events": (0, 0),
                    "device_events": (X.KeyReleaseMask, X.ButtonReleaseMask),
                    "errors": (0, 0),
                    "client_started": False,
                    "client_died": False,
                }
            ],
        )

        self.display.record_enable_context(self.context, self.handler)
        self.display.record_free_context(self.context)
Esempio n. 8
0
def main(options):
    # current display
    pid_file = '/var/lock/easyxmotion.pid'
    # kill any old versions that are still running,
    # we do it this way so the current one has input focus.
    # might be a better way to just exit and give focus to the old one.
    try:
        with open(pid_file, 'r') as fp:
            pid = int(fp.read())
            try:
                os.kill(pid, signal.SIGTERM)
            except OSError:
                #other isn't running
                pass
    except IOError:
        # first ever run
        pass
    with open(pid_file, 'w') as fp:
        fp.write(str(os.getpid()))

    osds, windows = display_osd(options)
    disp = Display()
    root = disp.screen().root
    root.change_attributes(event_mask = X.KeyPressMask)
    root.grab_keyboard(False, X.GrabModeAsync, X.GrabModeAsync, X.CurrentTime)

    event = disp.next_event()
    keycode = event.detail
    if event.type == X.KeyPress:
        key = XK.keysym_to_string(disp.keycode_to_keysym(keycode, 0))
        if key and key in string.lowercase and string.lowercase.index(key) < len(windows):
            windows[string.lowercase.index(key)].activate(timestamp)
        disp.ungrab_keyboard(X.CurrentTime)
        sys.exit()
Esempio n. 9
0
    def __init__(self, *args, **kwargs) -> None:
        self.zones = []
        self.display = Display()
        self.screen = self.display.screen()

        if count := kwargs.get("-n"):
            self.add(count)
Esempio n. 10
0
    def _init_xlib(self):
        """Setup python-xlib components in the PyGTK event loop"""
        self.xdisp = Display()
        self.xroot = self.xdisp.screen().root

        # We want to receive KeyPress events
        self.xroot.change_attributes(event_mask=X.KeyPressMask)

        # unrecognized shortkeys now will be looked up in a hardcoded dict
        # and replaced by valid names like ',' -> 'comma'
        # while generating the self.keys dict
        self.keys = dict()
        for key in self._keys:
            transKey = key
            if key in KEYLOOKUP:
                transKey = KEYLOOKUP[key]
            code = self.xdisp.keysym_to_keycode(string_to_keysym(transKey))
            self.keys[code] = self._keys[key]

        # Resolve strings to X11 mask constants for the modifier mask
        try:
            modmask = reduce(operator.ior,
                             [getattr(X, "%sMask" % x) for x in self._modkeys])
            self._movemodmask = reduce(
                operator.ior,
                [getattr(X, "%sMask" % x) for x in self._movemodkeys])
        except Exception, err:
            logging.error("Error while resolving modifier key mask: %s", err)
            logging.error("Not binding keys for safety reasons. "
                          "(eg. What if Ctrl+C got bound?)")
            modmask = 0
            movemodmask = 0
Esempio n. 11
0
    def connectToX(self):
        self.display = Display(self.displayStr)

        self.displayWidth = self.display.screen().width_in_pixels
        self.displayHeight = self.display.screen().height_in_pixels

        self.rect = Rect(0, 0, self.displayWidth, self.displayHeight)
Esempio n. 12
0
def main(argv):
    display = Display()

    if not display.has_extension('XFIXES'):
        if display.query_extension('XFIXES') is None:
            print('XFIXES extension not supported', file=sys.stderr)
            return 1

    xfixes_version = display.xfixes_query_version()
    print('Found XFIXES version %s.%s' % (
        xfixes_version.major_version,
        xfixes_version.minor_version,
    ),
          file=sys.stderr)

    screen = display.screen()

    print('Hiding cursor ...', file=sys.stderr)
    screen.root.xfixes_hide_cursor()
    display.sync()

    time.sleep(5)

    print('Showing cursor ...', file=sys.stderr)
    screen.root.xfixes_hide_cursor()
    display.sync()
Esempio n. 13
0
 def test_move(self):
     for size in screen_sizes:
         with Display(visible=VISIBLE, size=size):
             mouse = PyMouse()
             for p in positions:
                 mouse.move(*p)
                 eq_(expect_pos(p, size), mouse.position())
Esempio n. 14
0
    def __init__(self):
        display = Display()
        #get base window handle
        root = display.screen().root
        self.dsp = display
        self.rt = root

        #traverse windows and find the runescape window by name
        self.window = findWindowByName(root, "Old School RuneScape")
        if (self.window == 0):
            print("Cant find Oldschool Runescape window")
            sys.exit(0)
        #resize the window to set dimensions, all of the in game GUI offsets are hardcoded
        self.window.configure(width=800, height=600)
        #wait till the window is resized (I know)
        time.sleep(5)
        self.frame = 0
        self.inv = 0
        self.map = 0
        self.ga = 0
        self.txt = 0

        self.ctrGac = (246, 165)

        #ingame GUI offsets

        #game area (game world window)
        self.gac = (20, 4, 511, 333)
        #inventory
        self.invc = (567, 208, 746, 463)
        #map
        self.mapc = (582, 3, 727, 157)
        #text/chat area
        self.txtc = (21, 341, 507, 452)
Esempio n. 15
0
    def start(self):
        mod = self.MOD_MASK
        dpy = Display()

        keys = {}
        for key, name in self.KEY_MAP.items():
            keys[key] = dpy.keysym_to_keycode(XK.string_to_keysym(key))

        root = dpy.screen().root
        for key, code in keys.items():
            root.grab_key(code, mod, 1, X.GrabModeAsync, X.GrabModeAsync)

        root.grab_button(
            1, mod, 1,
            X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask,
            X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)
        root.grab_button(
            3, mod, 1,
            X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask,
            X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)

        self.dpy = dpy
        self.keys = keys
        self.root = root

        self.WM_PROTOCOLS = dpy.intern_atom("WM_PROTOCOLS")
        self.WM_DELETE_WINDOW = dpy.intern_atom("WM_DELETE_WINDOW")

        self._loop()
Esempio n. 16
0
 def __init__(self, name, queue):
     super(KeyboardAndMouseWatcher, self).__init__(name, queue)
     self._queue = queue
     self._mouse_last_x = None
     self._mouse_last_y = None
     if _platform.startswith("linux"):
         self._display = Display()
Esempio n. 17
0
def main(argv):
    global timer, is_run_active, args, min_distance
    with FileLock("mousy.lock", timeout=0.3):
        log("Lock acquired.")  # avoid multiple runs  the same time

        min_distance = args.distance

        start_reset_timer()

        display = Display()
        try:
            extension_info = display.query_extension('XInputExtension')

            version_info = display.xinput_query_version()
            log('Found XInput version %u.%u' % (
                version_info.major_version,
                version_info.minor_version,
            ))

            screen = display.screen()
            screen.root.xinput_select_events([(xinput.AllDevices,
                                               xinput.MotionMask)])

            while is_run_active:
                try:
                    event = display.next_event()
                    x = event.data.root_x
                    y = event.data.root_y
                    handle(x, y)
                except KeyboardInterrupt as e:
                    log("interrupted")
        finally:
            display.close()
Esempio n. 18
0
    def run(self):
        # Run until user clicks on exit iconTray
        if _platform == 'Linux':
            # Get root screen
            root = Display().screen().root
            # Add key grabber for 'print'
            root.grab_key(PRINT_KEY_ID_LINUX, X.Mod2Mask, 0, X.GrabModeAsync,
                          X.GrabModeAsync)

            # Create a loop to keep the application running
            while True:
                event = root.display.next_event()
                self.OnKeyboardEvent(event)
                time.sleep(0.1)

        elif _platform == 'Windows':
            # create a hook manager
            hm = HookManager()
            # watch for all mouse events
            hm.KeyDown = self.OnKeyboardEvent
            # set the hook
            hm.HookKeyboard()
            # wait forever
            while True:
                pc.PumpWaitingMessages()
                time.sleep(0.1)
                #print('Hotkey thread waiting..')

            print('Closing HookManager')
            del hm
Esempio n. 19
0
def main(argv):
    display = Display()
    try:
        extension_info = display.query_extension('XInputExtension')
        xinput_major = extension_info.major_opcode

        version_info = display.xinput_query_version()
        print('Found XInput version %u.%u' % (
            version_info.major_version,
            version_info.minor_version,
        ))

        screen = display.screen()
        screen.root.xinput_select_events([
            (xinput.AllDevices, xinput.HierarchyChangedMask),
        ])

        while True:
            event = display.next_event()
            if (event.type == display.extension_event.GenericEvent
                    and event.extension == xinput_major
                    and event.evtype == 11):
                print_hierarchy_changed_event(event)

    finally:
        display.close()
Esempio n. 20
0
    def __init__(self, xdisplay=None):
        """Connect to X11 and the Glib event loop.

        @param xdisplay: A C{python-xlib} display handle.
        @type xdisplay: C{Xlib.display.Display}
        """
        self.xdisp = xdisplay or Display()
        self.xroot = self.xdisp.screen().root
        self._keys = {}

        # Resolve these at runtime to avoid NameErrors
        self.ignored_modifiers = [
            getattr(X, name) for name in self.ignored_modifiers
        ]

        # We want to receive KeyPress events
        self.xroot.change_attributes(event_mask=X.KeyPressMask)

        # Set up a handler to catch XGrabKey() failures
        self.xdisp.set_error_handler(self.handle_xerror)

        # Merge python-xlib into the Glib event loop
        # Source: http://www.pygtk.org/pygtk2tutorial/sec-MonitoringIO.html
        gobject.io_add_watch(self.xroot.display, gobject.IO_IN,
                             self.handle_xevent)
Esempio n. 21
0
 def __init__(self):
     self._display = Display()
     self._run_times = {}
     self._last_pointer_move = 0
     self._last_zoom = 0
     self._last_zoom_distance = -1
     self._activities_key = self._display.keysym_to_keycode(XK.XK_Super_L)
Esempio n. 22
0
def main():
    disp = Display()
    while 1:
        keymap = disp.query_keymap()
        if keymap not in ignorelist:
            KeyPress().start()
            time.sleep(0.08)
Esempio n. 23
0
def getWindows():
    """Return dict: {'window title' : window id} for all visible windows"""

    titles = {}

    display = Display()
    root = display.screen().root
    win_list = root.get_full_property(NET_CLIENT_LIST, X.AnyPropertyType).value
    for win_id in win_list:
        window = display.create_resource_object('window', win_id)
        class_list = window.get_wm_class()
        """
        get_wm_name() method unable to handle utf-8 characters, thats why
        below window title gets from property and decoding instead of using 
        one short Window method that provided by python xlib
        """
        try:
            win_name = window.get_full_property(NET_WM_NAME,
                                                X.AnyPropertyType).value
        except:
            pass
        if win_name:
            try:
                win_name = win_name.decode("utf-8")
            except:
                pass
            titles[win_name] = win_id
        else:
            titles[class_list[1]] = win_id

    return titles
Esempio n. 24
0
    def __init__(self, keymap=None, listen_events=None):
        """
        :param dict keymap: Key name to function mapping.

            Example:

            .. code-block:: python

                def do(): print('do')

                {
                    'Ctrl-K': do,
                    '1': None,  # Just intercept.
                }

        :param int listen_events: X Events or a combination of them.

            Examples:

                * Xlib.X.KeyPressMask
                * Xlib.X.KeyPressMask | Xlib.X.ButtonReleaseMask

        """
        from Xlib import X, XK
        from Xlib.display import Display

        self.x = X
        self.xk = XK
        self.disp = Display()
        self.screen = self.disp.screen().root
        self.events = listen_events or self.x.KeyPressMask

        self.keymap = keymap or {}
        self.mapped = {}
Esempio n. 25
0
 def __init__(self):
     GObject.GObject.__init__(self)
     threading.Thread.__init__(self)
     self.setDaemon(True)
     self.display = Display()
     self.root = self.display.screen().root
     self.windows = []
Esempio n. 26
0
def main():
    disp = Display()
    screen = disp.screen()
    root = screen.root

    # First listen for existing windows
    for window in root.query_tree().children:
        if is_inkscape(window):
            print('Found existing window')
            listen = threading.Thread(target=create, args=[window.id])
            listen.start()

    # New windows
    root.change_attributes(event_mask=X.SubstructureNotifyMask)
    while True:
        evt = disp.next_event()
        if evt.type == X.CreateNotify:
            window = evt.window
            try:
                if is_inkscape(window):
                    print('New window!')
                    listen = threading.Thread(target=create, args=[window.id])
                    listen.start()

            except Xlib.error.BadWindow:
                pass
Esempio n. 27
0
def main(argv):
    globals()['display'] = Display()

    for arg in argv:
        try:
            if arg == '--version':
                print("%s v%s" % (NAME, VERSION))
            elif arg == '--print-active-window-id':
                print("0x%x" % Window.get_active_window_id())
            elif arg == '--print-active-window-info':
                print_active_window_info()
            elif arg == '--print-window-info':
                print_window_info()
            elif arg == '--print-monitor-info':
                print_monitor_info()
            elif match(MOVE_REGEX, arg):
                p = compile(MOVE_REGEX)
                wid, width, height, x, y = p.findall(arg)[0]
                w = Window.from_id(int(wid, 16), False)
                w.move(int(x), int(y), int(width), int(height))
        except:
            print("Unexpected error:", exc_info()[0])

    display.sync()
    display.flush()
    display.close()
Esempio n. 28
0
def main():
  ### Initialize
  fw.init()

  ### Rift
  monitor = get_rift()

  win = CbWindow(640, 480, 'pyglfw')
  win.make_current()

  # XWindows...
  d = Display()
  root = d.screen().root
  pixmap = root.create_pixmap(256, 256, 8)
  # glXCreateWindow(d, cfg, pixmap, 0)


  while not win.should_close:

    render()

    win.swap_buffers()
    fw.poll_events()

    if win.keys.escape:
        win.should_close = True

  fw.terminate()
Esempio n. 29
0
File: symP.py Progetto: szsdk/symP
    def run(self):
        disp = Display()
        self.root = disp.screen().root

        # we tell the X server we want to catch keyPress event
        self.root.change_attributes(event_mask=X.KeyPressMask)

        #for keycode in [38]:
        #self.root.grab_key(keycode, X.AnyModifier, 1,X.GrabModeAsync, X.GrabModeAsync)
        self.root.grab_key(38, X.Mod1Mask, 1, X.GrabModeAsync, X.GrabModeAsync)

        # Alt+a
        while self.signal:
            event = self.root.display.next_event()
            if (event.type == X.KeyPress) and check_hotkey(['alt'], 38, event):
                if root.winfo_viewable():
                    root.withdraw()
                    recentlyfiles.refresh_items()
                else:
                    refresh_listbox()
                    entry.focus_set()
                    command.set('')
                    root.deiconify()

                self.windows_state = not self.windows_state
Esempio n. 30
0
    def __init__(self, args=None):
        command = ['trayer']
        self.default_args = {
            'edge': 'top',
            'align': 'right',
            'widthtype': 'request',
            'expand': 'true',
            'SetDockType': 'true',
            'transparent': 'true',
            'alpha': '0',
            'height': '16',
            'margin': '0',
            'tint': '0x29b2e',
        }
        if args is not None:
            self.default_args.update(args)
        for key, val in self.default_args.items():
            command += ["--%s" % (key), str(val)]

        super(TrayerWatch, self).__init__(command)
        self.proc.stdin.close()
        self.proc.stdout.close()

        # search for running trayer window
        self.display = Display()
        root = self.display.screen().root
        self.trayer = self.find_tray_window(root)
        assert self.trayer is not None, 'Panel not found!'

        # activate ConfigureNotify-Events for self.trayer
        self.trayer.change_attributes(event_mask=X.StructureNotifyMask)