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)
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)
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)
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)
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
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
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
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
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
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)
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
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
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()
def server_exists(self, id): ''' Vaguely attempt to identify whether the server exists. ''' return gdk.window_foreign_new(id)
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()
def _get_window_by_id(wid): if wid[0:2] == "0x": wid = int(wid, 16) return gdk.window_foreign_new(int(wid))