Example #1
0
    def __init__(self):
        self.xid = self.getBovoId()

        # init window
        self.win = gdk.window_foreign_new(self.xid)
        if self.win==None:
            print 'can not find window:',self.xid
            return
        self.win.set_keep_above(True) # keep the window always above
        sz = self.win.get_size()
        self.width = sz[0]-110-9
        self.height = sz[1]-80-8
        print "screenshot shape: ",(self.width,self.height)
        if self.width > 300 or self.height>300:
            print "WARN: the screenshot is too large, may take too much time in anlysis the pictures"
        if self.height!=222:
            print "ERROR: not correct window height, please keep minimizing the Bovo's window"
            return
        (self.win_x, self.win_y) = self.win.get_root_origin()
        # print "window locate at",(self.win_x, self.win_y) # for ubuntu14.10 result is (65, 52)

        # init Pixbuf to store the colormap of bovo chessboard
        self.pbuf = gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, self.width, self.height)
        self.pixnum = self.pbuf.get_pixels_array()

        # set the bufffer queue of chessboards
        self.queuelen = 2;
        self.chessboards = np.zeros((self.queuelen, 22,22))
        self.chbptr = 0 # chessboard pointer 0 or 1

        # init mouse device
        self.mouse = mouse.mouse()

        # init robot
        self.rob  = robot.robot(mode = robot.ROBOT_LEARNING)
Example #2
0
    def do_realize(self):
        ident = os.environ.get('XSCREENSAVER_WINDOW')

        if ident is None:
            self.window = gdk.Window(self.get_parent_window(),
                                     width=self.allocation.width,
                                     height=self.allocation.height,
                                     window_type=gdk.WINDOW_TOPLEVEL,
                                     event_mask=self.get_events()
                                     | gdk.EXPOSURE_MASK,
                                     wclass=gdk.INPUT_OUTPUT,
                                     title=self.__default_title)

            self.set_size_request(self.__default_width, self.__default_height)
            self.connect('delete-event', self.on_destroy)

        else:
            self.window = gdk.window_foreign_new(int(ident, 16))
            self.window.set_events(gdk.EXPOSURE_MASK | gdk.STRUCTURE_MASK)

            x, y, w, h, depth = self.window.get_geometry()
            self.size_allocate(gdk.Rectangle(x, y, w, h))
            self.set_default_size(w, h)
            self.set_size_request(w, h)

            self.set_decorated(False)

        self.window.set_user_data(self)
        self.style.attach(self.window)
        self.set_flags(self.flags() | gtk.REALIZED)
Example #3
0
    def realize(self):
        if self.flags() & gtk.REALIZED:
            return

        ident = os.environ.get('XSCREENSAVER_WINDOW')

        if ident:
            self.window = gdk.window_foreign_new(int(ident, 16))
            self.window.set_events(gdk.EXPOSURE_MASK | gdk.STRUCTURE_MASK)
            x, y, w, h, depth = self.window.get_geometry()
            self.size_allocate(gdk.Rectangle(x, y, w, h))
            self.set_default_size(w, h)
            self.set_decorated(False)

            self.window.set_user_data(self)
            self.style.attach(self.window)
            self.set_flags(self.flags() | gtk.REALIZED)
            #self.window.connect("destroy", self.destroy)

        if not self.window:
            self.window = gdk.Window(None, 1024, 768, gdk.WINDOW_TOPLEVEL,
                                     (gdk.EXPOSURE_MASK | gdk.STRUCTURE_MASK),
                                     gdk.INPUT_OUTPUT)

        if self.window:
            #self.window.add_filter(lambda *args: self.filter_event(args))
            self.set_flags(self.flags() | gtk.REALIZED)
Example #4
0
File: tray.py Project: cattaka/Xpra
 def dock_tray(self, xid):
     log("dock_tray(%#x)", xid)
     root = gdk.get_default_root_window()
     window = gdk.window_foreign_new(xid)
     if window is None:
         log.warn("could not find gdk window for tray window %#x", xid)
         return
     log("dock_tray: root=%s, window=%s", root, window)
     w, h = window.get_geometry()[2:4]
     log("dock_tray: geometry=%s", (w, h))
     if w == 0 and h == 0:
         log("dock_tray: invalid tray geometry, ignoring this request")
         return
     event_mask = gdk.STRUCTURE_MASK | gdk.EXPOSURE_MASK | gdk.PROPERTY_CHANGE_MASK
     window.set_events(event_mask=event_mask)
     add_event_receiver(window, self)
     w = max(1, min(128, w))
     h = max(1, min(128, h))
     title = prop_get(window, "_NET_WM_NAME", "utf8", ignore_errors=True)
     if title is None:
         title = prop_get(window, "WM_NAME", "latin1", ignore_errors=True)
     if title is None:
         title = ""
     log(
         "dock_tray(%#x) gdk window=%#x, geometry=%s, title=%s, visual.depth=%s",
         xid, window.xid, window.get_geometry(), title,
         window.get_visual().depth)
     event_mask = gdk.STRUCTURE_MASK | gdk.EXPOSURE_MASK | gdk.PROPERTY_CHANGE_MASK
     tray_window = gdk.Window(root,
                              width=w,
                              height=h,
                              window_type=gdk.WINDOW_TOPLEVEL,
                              event_mask=event_mask,
                              wclass=gdk.INPUT_OUTPUT,
                              title=title,
                              x=-200,
                              y=-200,
                              override_redirect=True,
                              visual=window.get_visual(),
                              colormap=window.get_colormap())
     log("dock_tray(%#x) setting tray properties", xid)
     set_tray_window(tray_window, window)
     tray_window.show()
     self.tray_windows[window] = tray_window
     self.window_trays[tray_window] = window
     log("dock_tray(%#x) resizing and reparenting", xid)
     window.resize(w, h)
     xwin = window.xid
     xtray = tray_window.xid
     X11Window.Withdraw(xwin)
     X11Window.Reparent(xwin, xtray, 0, 0)
     X11Window.MapRaised(xwin)
     log("dock_tray(%#x) new tray container window %#x", xid, xtray)
     tray_window.invalidate_rect(gdk.Rectangle(width=w, height=h), True)
     X11Window.send_xembed_message(xwin, XEMBED_EMBEDDED_NOTIFY, 0, xtray,
                                   XEMBED_VERSION)
Example #5
0
def _get_window_by_child_pid(pid):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    # make a set of all visible pids
    winpids = set()
    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            for pid in w.property_get("_NET_WM_PID")[2]:
                winpids.add(pid)

    # make a list of (pid, pstree_section) pairs
    winpid_trees = []
    for winpid in winpids:
        cmd = 'pstree -pl {}'.format(winpid)
        o, _, _ = run_cmd(cmd)
        if '({})'.format(pid) in o:
            winpid_trees.append((winpid, o))

    if not winpid_trees:
        return

    # sort the list by the pstree length
    winpid_trees = sorted(winpid_trees, key=lambda k: len(k[1]), reverse=False)
    winpid = winpid_trees[0][0]

    # get win belonging to that pid
    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_pids = w.property_get("_NET_WM_PID")
            if winpid in wm_pids[2]:
                return w
Example #6
0
def _get_window_by_child_pid(pid):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    # make a set of all visible pids
    winpids = set()
    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            for pid in w.property_get("_NET_WM_PID")[2]:
                winpids.add(pid)

    # make a list of (pid, pstree_section) pairs
    winpid_trees = []
    for winpid in winpids:
        cmd = 'pstree -pl {}'.format(winpid)
        o, _, _ = run_cmd(cmd)
        if '({})'.format(pid) in o:
            winpid_trees.append((winpid, o))

    if not winpid_trees:
        return

    # sort the list by the pstree length
    winpid_trees = sorted(winpid_trees, key=lambda k: len(k[1]), reverse=False)
    winpid = winpid_trees[0][0]

    # get win belonging to that pid
    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_pids = w.property_get("_NET_WM_PID")
            if winpid in wm_pids[2]:
                return w
Example #7
0
def _get_window_by_pid(pid):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_pids = w.property_get("_NET_WM_PID")
            if pid in wm_pids[2]:
                return w
Example #8
0
def _get_window_by_title(title):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_name = w.property_get("WM_NAME")
            if wm_name and title == wm_name[2]:
                return w
Example #9
0
def _get_window_by_pid(pid):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_pids = w.property_get("_NET_WM_PID")
            if pid in wm_pids[2]:
                return w
Example #10
0
def _get_window_by_title(title):
    root = gdk.get_default_root_window()
    if not root:
        return
    extents = _get_win_property(root, '_NET_CLIENT_LIST')
    if not extents:
        return

    for id in extents:
        w = gdk.window_foreign_new(id)
        if w:
            wm_name = w.property_get("WM_NAME")
            if wm_name and title == wm_name[2]:
                return w
Example #11
0
    def do_realize(self):
        self.set_flags(gtk.REALIZED)


        #Create a gtk.gdk.Window wrapper around topWindow, child of the screenlets gtk.gdk.Window
        #   -allows masking of the icons through gdk
        #   -also imposes the screenlets window properties on the icons, i.e. no drop shadow, no window decoration
        
        #~ self.realIcons = gtk.gdk.window_foreign_new(self.wind.id)
        #~ self.realIcons.reparent(self.plugin.window,0,0)

        #Greate a gtk.gdk.Window to hold images of the icons.
        #This is shown on the screenlet while the real icons are moved out of the screenlet's
        #clip area for unmaksing.  This prevents the icons from flickering as their
        #masks are updated.
        
        #~ self.fakeIcons = gtk.gdk.Window(self.plugin.window,96,48,gtk.gdk.WINDOW_CHILD,0,gtk.gdk.INPUT_OUTPUT)
        #~ self.fakeIcons.move(0,0)
        #~ self.fakeIcons.lower()


        self.window = gdk.window_foreign_new(self.wind.id)
        self.window.reparent(self.plugin.window, 0, 0)

        # Take the system manager window (not selection owner!)
        # And make it the gdk.window of the custom widget.
        
        
        self.window.set_user_data(self)
        #~ self.style.attach(self.window)
        # Set it up as a custom widget and tell it what style (theme) to use

        #~ self.style.set_background(self.window, gtk.STATE_NORMAL)
        self.window.move_resize(*self.allocation)
        # Tell it to use the background colour as background colour...
        # Im sure theres a reason i need to tell it that ;)

        self.tr__updatePanel(self.root, self.wind)
        # First render. Grab all the icons we know about, tell them where to
        # draw, and call a resize if necessary (likely, the first time around)

        gobject.io_add_watch(self.dsp.fileno(), gobject.IO_IN | gobject.IO_PRI,
                             self.tr__testTiming)

        self.redraw()

        self.realized= 1
Example #12
0
    def do_realize(self):
        self.set_flags(gtk.REALIZED)

        #Create a gtk.gdk.Window wrapper around topWindow, child of the screenlets gtk.gdk.Window
        #   -allows masking of the icons through gdk
        #   -also imposes the screenlets window properties on the icons, i.e. no drop shadow, no window decoration

        #~ self.realIcons = gtk.gdk.window_foreign_new(self.wind.id)
        #~ self.realIcons.reparent(self.plugin.window,0,0)

        #Greate a gtk.gdk.Window to hold images of the icons.
        #This is shown on the screenlet while the real icons are moved out of the screenlet's
        #clip area for unmaksing.  This prevents the icons from flickering as their
        #masks are updated.

        #~ self.fakeIcons = gtk.gdk.Window(self.plugin.window,96,48,gtk.gdk.WINDOW_CHILD,0,gtk.gdk.INPUT_OUTPUT)
        #~ self.fakeIcons.move(0,0)
        #~ self.fakeIcons.lower()

        self.window = gdk.window_foreign_new(self.wind.id)
        self.window.reparent(self.plugin.window, 0, 0)

        # Take the system manager window (not selection owner!)
        # And make it the gdk.window of the custom widget.

        self.window.set_user_data(self)
        #~ self.style.attach(self.window)
        # Set it up as a custom widget and tell it what style (theme) to use

        #~ self.style.set_background(self.window, gtk.STATE_NORMAL)
        self.window.move_resize(*self.allocation)
        # Tell it to use the background colour as background colour...
        # Im sure theres a reason i need to tell it that ;)

        self.tr__updatePanel(self.root, self.wind)
        # First render. Grab all the icons we know about, tell them where to
        # draw, and call a resize if necessary (likely, the first time around)

        gobject.io_add_watch(self.dsp.fileno(), gobject.IO_IN | gobject.IO_PRI,
                             self.tr__testTiming)

        self.redraw()

        self.realized = 1
Example #13
0
    def do_realize(self):
        anid = self.get_anid()
        if anid:
            self.window = Gdk.window_foreign_new(anid)
            self.window.set_events(Gdk.EXPOSURE_MASK | Gdk.STRUCTURE_MASK)
        else:
            self.window = Gdk.Window(
                self.get_parent_window(),
                width=600,
                height=600,
                window_type=Gdk.WINDOW_TOPLEVEL,
                wclass=Gdk.INPUT_OUTPUT,
                event_mask=self.get_events() | Gdk.EXPOSURE_MASK)

        self.window.set_user_data(self)
        x, y, self.w, self.h, depth = self.window.get_geometry()
        self.size_allocate(Gdk.Rectangle(x=x, y=y, width=self.w, height=self.h))
        self.set_default_size(self.w, self.h)

        self.set_flags(self.flags() | Gtk.REALIZED)
        self.set_decorated(False)
        self.style.attach(self.window)
Example #14
0
    def realize(self):
        f = open("/var/www/radio/scripts/screensaver/out.txt", "w")
        if self.flags() & gtk.REALIZED:
            return
       
        window_xid = os.getenv("XSCREENSAVER_WINDOW")
        f.write('window_xid: ' + str(window_xid) + "\n")
 
        if window_xid != None:
            f.write('window_xid != None:')
            end_index = window_xid.find(" ")
            if end_index > 0:
                window_xid = int(window_xid[:end_index], 0)
                f.write('window_xid: ' + str(window_xid) + "\n")
            else:
                window_xid = int(window_xid, 0)
                f.write('window_xid: ' + str(window_xid) + "\n")
 
            if window_xid != 0:
                f.write('window_xid != 0:' + "\n")
                self.window = gdk.window_foreign_new(window_xid)
 
                if self.window != None:
                    f.write('self.window != None:')
                    self.window.set_events (gdk.EXPOSURE_MASK | gdk.STRUCTURE_MASK)
 
        if self.window == None:
            f.write('self.window == None:' + "\n")
            self.window = gdk.Window(None, 1024, 768, gdk.WINDOW_TOPLEVEL,
                                     (gdk.EXPOSURE_MASK | gdk.STRUCTURE_MASK),
                                     gdk.INPUT_OUTPUT)
 
        if self.window != None:
            f.write('self.window != None:' + "\n")
            #self.window.add_filter(lambda *args: self.filter_event(args))
            self.set_flags(self.flags() | gtk.REALIZED)

        f.close
def set_window_always_on_top (title):
    # we need the GDK module, if not available - ignroe this command
    try:
        if sys.version_info < (3,0):
            from gtk import gdk
        else:
            #from gi.repository import Gdk as gdk
            return

    except ImportError:
        return

    # search the window and set it as above
    root = gdk.get_default_root_window()

    for id in root.property_get('_NET_CLIENT_LIST')[2]:
        w = gdk.window_foreign_new(id)
        if w:
            name = w.property_get('WM_NAME')[2]
            if name == title:
                w.set_keep_above(True)
                gdk.window_process_all_updates()
                break
Example #16
0
def set_window_always_on_top(title):
    # we need the GDK module, if not available - ignroe this command
    try:
        if sys.version_info < (3, 0):
            from gtk import gdk
        else:
            #from gi.repository import Gdk as gdk
            return

    except ImportError:
        return

    # search the window and set it as above
    root = gdk.get_default_root_window()

    for id in root.property_get('_NET_CLIENT_LIST')[2]:
        w = gdk.window_foreign_new(id)
        if w:
            name = w.property_get('WM_NAME')[2]
            if title in name:
                w.set_keep_above(True)
                gdk.window_process_all_updates()
                break
Example #17
0
def main(args):
    from xpra.platform import program_context
    from xpra.log import enable_color
    with program_context("GTK-Menu Info"):
        enable_color()
        log.enable_debug()
        try:
            from xpra.x11.gtk2.gdk_display_source import display    #@UnresolvedImport
            assert display
            xid = 0
            if len(sys.argv)>1:
                wid = sys.argv[1]
                if wid.startswith("0x"):
                    xid = int(wid[2:], 16)
                else:
                    xid = int(wid)
        except Exception as e:
            log.error("Error: invalid window id: %s", e)
            log.error("usage:")
            log.error(" %s WINDOWID", sys.argv[0])
        else:
            import gtk
            from gtk import gdk
            def get_frame_extents(window):
                from xpra.x11.gtk_x11.prop import prop_get, log as x11log
                x11log.enable_debug()
                def pget(key, etype):
                    return prop_get(window, key, etype, ignore_errors=False, raise_xerrors=True)
                return pget("_NET_FRAME_EXTENTS", ["u32"])
            if xid>0:
                #show for an existing window:
                w = gdk.window_foreign_new(xid)
                log.info("_NET_FRAME_EXTENTS=%s", get_frame_extents(w))
            else:
                #create a window an send the request:
                root = gdk.get_default_root_window()
                from xpra.gtk_common.gtk_util import WINDOW_TOPLEVEL, get_xwindow
                #code ripped from gtk_client_base:
                from xpra.gtk_common.error import xsync
                from xpra.x11.gtk_x11.send_wm import send_wm_request_frame_extents
                window = gtk.Window(WINDOW_TOPLEVEL)
                window.set_title("Xpra-FRAME_EXTENTS")
                window.connect("destroy", gtk.main_quit)
                window.realize()
                win = window.get_window()
                vbox = gtk.VBox(False, 0)
                btn = gtk.Button("request frame extents")
                def request_frame_extents(*args):
                    with xsync:
                        log("request_frame_extents() window=%#x", get_xwindow(win))
                        send_wm_request_frame_extents(root, win)
                btn.connect("clicked", request_frame_extents)
                vbox.pack_start(btn, expand=False, fill=False, padding=10)
                label = gtk.Label()
                vbox.add(label)
                window.add(vbox)
                label.set_text(str(get_frame_extents(win)))
                import glib
                def refresh_label():
                    v = get_frame_extents(win)
                    label.set_text(str(v))
                    log.info("_NET_FRAME_EXTENTS=%s", v)
                    return True
                window.realize()
                request_frame_extents()
                glib.timeout_add(5000, window.show_all)
                glib.timeout_add(1000, refresh_label)
                gtk.main()
Example #18
0
 def server_exists(self, id):
     ''' Vaguely attempt to identify whether the server exists. '''
     return gdk.window_foreign_new(id)
Example #19
0
def main(args):
    from xpra.platform import program_context
    from xpra.log import enable_color
    with program_context("GTK-Menu Info"):
        enable_color()
        log.enable_debug()
        try:
            from xpra.x11.gtk2.gdk_display_source import display  #@UnresolvedImport
            assert display
            xid = 0
            if len(sys.argv) > 1:
                wid = sys.argv[1]
                if wid.startswith("0x"):
                    xid = int(wid[2:], 16)
                else:
                    xid = int(wid)
        except Exception as e:
            log.error("Error: invalid window id: %s", e)
            log.error("usage:")
            log.error(" %s WINDOWID", sys.argv[0])
        else:
            import gtk
            from gtk import gdk

            def get_frame_extents(window):
                from xpra.x11.gtk_x11.prop import prop_get, log as x11log
                x11log.enable_debug()

                def pget(key, etype):
                    return prop_get(window,
                                    key,
                                    etype,
                                    ignore_errors=False,
                                    raise_xerrors=True)

                return pget("_NET_FRAME_EXTENTS", ["u32"])

            if xid > 0:
                #show for an existing window:
                w = gdk.window_foreign_new(xid)
                log.info("_NET_FRAME_EXTENTS=%s", get_frame_extents(w))
            else:
                #create a window an send the request:
                root = gdk.get_default_root_window()
                from xpra.gtk_common.gtk_util import WINDOW_TOPLEVEL, get_xwindow
                #code ripped from gtk_client_base:
                from xpra.gtk_common.error import xsync
                from xpra.x11.gtk_x11.send_wm import send_wm_request_frame_extents
                window = gtk.Window(WINDOW_TOPLEVEL)
                window.set_title("Xpra-FRAME_EXTENTS")
                window.connect("destroy", gtk.main_quit)
                window.realize()
                win = window.get_window()
                vbox = gtk.VBox(False, 0)
                btn = gtk.Button("request frame extents")

                def request_frame_extents(*args):
                    with xsync:
                        log("request_frame_extents() window=%#x",
                            get_xwindow(win))
                        send_wm_request_frame_extents(root, win)

                btn.connect("clicked", request_frame_extents)
                vbox.pack_start(btn, expand=False, fill=False, padding=10)
                label = gtk.Label()
                vbox.add(label)
                window.add(vbox)
                label.set_text(str(get_frame_extents(win)))
                import glib

                def refresh_label():
                    v = get_frame_extents(win)
                    label.set_text(str(v))
                    log.info("_NET_FRAME_EXTENTS=%s", v)
                    return True

                window.realize()
                request_frame_extents()
                glib.timeout_add(5000, window.show_all)
                glib.timeout_add(1000, refresh_label)
                gtk.main()
Example #20
0
def _get_window_by_id(wid):
    if wid[0:2] == "0x":
        wid = int(wid, 16)
    return gdk.window_foreign_new(int(wid))
Example #21
0
def _get_window_by_id(wid):
    if wid[0:2] == "0x":
        wid = int(wid, 16)
    return gdk.window_foreign_new(int(wid))