#!/usr/bin/python
# xpointer 1.0
# Copyright (c) 2008 MJY http://p.mjy.name/
# License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

from Xlib import X
from Xlib.protocol import request, display

def warp(xdisplay, window, x, y):
    request.WarpPointer(
        display = xdisplay,
        dst_window = window,
        dst_x = x,
        dst_y = y,

        onerror = None,
        src_window = X.NONE,
        src_x = 0, src_y = 0,
        src_width = 0, src_height = 0,
        )

    xdisplay.flush()

def query(xdisplay, window):
    return request.QueryPointer(
        display = xdisplay,
        window = window,
        )


def proc_opts():
    from optparse import OptionParser
    parser = OptionParser(usage=
        '''Usage: %prog [options] [X] [Y]
If coordinates are not given, present coordinates are displayed.''')
    parser.add_option("-x", type="int", default=None)
    parser.add_option("-y", type="int", default=None)

    (options, args) = parser.parse_args()
    if (options.x == None) and len(args) > 0:
        options.x = int(args[0])
    if (options.y == None) and len(args) > 1:
        options.y = int(args[1])

    return options


def main():
    opts = proc_opts()
    d = display.Display()
    reply = query(d, d.info.roots[0]["root"])

    if opts.x != None or opts.y != None:
        if opts.x == None:
            x = reply.root_x 
        else: x = opts.x

        if opts.y == None:
            y = reply.root_y 
        else: y = opts.y

        warp(d, reply.root, x, y)
    else:
        print reply.root_x, reply.root_y


if __name__ == "__main__":
#    _test()
    main()


