Example #1
0
    def x11_init(self):
        X11ServerBase.x11_init(self)
        init_x11_filter()

        self._has_focus = 0
        # Do this before creating the Wm object, to avoid clobbering its
        # selecting SubstructureRedirect.
        root = gtk.gdk.get_default_root_window()
        root.set_events(root.get_events() | gtk.gdk.SUBSTRUCTURE_MASK)
        root.property_change(gtk.gdk.atom_intern("XPRA_SERVER", False),
                            gtk.gdk.atom_intern("STRING", False),
                            8,
                            gtk.gdk.PROP_MODE_REPLACE,
                            xpra.__version__)
        add_event_receiver(root, self)

        ### Create the WM object
        self._wm = Wm(self.clobber)
        self._wm.connect("new-window", self._new_window_signaled)
        self._wm.connect("bell", self._bell_signaled)
        self._wm.connect("quit", lambda _: self.quit(True))

        self.default_cursor_data = None
        self.last_cursor_serial = None
        self.send_cursor_pending = False
        self.cursor_data = None
        self.cursor_sizes = None
        def get_default_cursor():
            self.default_cursor_data = X11Keyboard.get_cursor_image()
            log("get_default_cursor=%s", self.default_cursor_data)
        trap.swallow_synced(get_default_cursor)
        self._wm.enableCursors(True)
Example #2
0
 def __init__(self, send_packet_cb, progress_cb=None, **kwargs):
     gobject.GObject.__init__(self)
     self.init_window()
     init_x11_filter()
     self.x11_filter = True
     ClipboardTimeoutHelper.__init__(self, send_packet_cb, progress_cb,
                                     **kwargs)
Example #3
0
def main():
    window = gtk.Window(WINDOW_TOPLEVEL)
    window.set_size_request(400, 100)
    window.connect("delete_event", gtk.main_quit)
    da = gtk.DrawingArea()
    window.add(da)
    window.show_all()

    #self.selectX11FocusChange(self)
    def focus_in(_window, event):
        print("focus-in-event")

    def focus_out(_window, event):
        print("focus-out-event")

    def has_toplevel_focus(_window, event):
        print("has-toplevel-event")

    window.connect("focus-in-event", focus_in)
    window.connect("focus-out-event", focus_out)
    window.connect("notify::has-toplevel-focus", has_toplevel_focus)
    #x11 focus events:
    gdk_win = window.get_window()
    xid = get_xwindow(gdk_win)
    init_gdk_display_source()
    os.environ["XPRA_X11_DEBUG_EVENTS"] = "FocusIn,FocusOut"
    init_x11_filter()
    with xlog:
        X11WindowBindings().selectFocusChange(xid)

    gtk.main()
    return 0
Example #4
0
 def __init__(self, props):
     gobject.GObject.__init__(self)
     self._props = props
     self._root = gtk.gdk.get_default_root_window()
     self._saved_event_mask = self._root.get_events()
     self._root.set_events(self._saved_event_mask | gtk.gdk.PROPERTY_CHANGE_MASK)
     init_x11_filter()
     add_event_receiver(self._root, self)
Example #5
0
 def __init__(self, props):
     gobject.GObject.__init__(self)
     self._props = props
     self._root = gtk.gdk.get_default_root_window()
     self._saved_event_mask = self._root.get_events()
     self._root.set_events(self._saved_event_mask
                           | gtk.gdk.PROPERTY_CHANGE_MASK)
     init_x11_filter()
     add_event_receiver(self._root, self)
Example #6
0
def make_window():
    window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
    window.set_title("Window Focus")
    window.set_size_request(640, 200)
    window.connect("delete_event", Gtk.main_quit)
    vbox = Gtk.VBox()
    N = 8
    labels = []
    font = Pango.FontDescription("sans 12")
    for _ in range(N):
        l = Gtk.Label()
        l.modify_font(font)
        labels.append(l)
    for l in labels:
        al = Gtk.Alignment(xalign=0, yalign=0.5, xscale=0.0, yscale=0)
        al.add(l)
        vbox.add(al)
    window.add(vbox)
    window.show_all()
    text = deque(maxlen=N)

    def update(s):
        text.append("%s: %s" % (datetime.now(), s))
        for i, t in enumerate(text):
            labels[i].set_text(t)

    #self.selectX11FocusChange(self)
    def focus_in(_window, event):
        update("focus-in-event")

    def focus_out(_window, event):
        update("focus-out-event")

    def has_toplevel_focus(window, _event):
        update("has-toplevel-focus: %s" % window.has_toplevel_focus())

    window.connect("focus-in-event", focus_in)
    window.connect("focus-out-event", focus_out)
    window.connect("notify::has-toplevel-focus", has_toplevel_focus)
    if POSIX and not OSX:
        from xpra.gtk_common.error import xlog
        from xpra.x11.gtk_x11.gdk_display_source import init_gdk_display_source
        from xpra.x11.gtk_x11.gdk_bindings import init_x11_filter
        from xpra.x11.bindings.window_bindings import X11WindowBindings  #pylint: disable=no-name-in-module
        from xpra.os_util import is_Wayland
        if not is_Wayland():
            #x11 focus events:
            gdk_win = window.get_window()
            xid = gdk_win.get_xid()
            init_gdk_display_source()
            os.environ["XPRA_X11_DEBUG_EVENTS"] = "FocusIn,FocusOut"
            init_x11_filter()
            with xlog:
                X11WindowBindings().selectFocusChange(xid)
    return window
Example #7
0
 def x11_init(self):
     if FAKE_X11_INIT_ERROR:
         raise Exception("fake x11 init error")
     self.init_fake_xinerama()
     with xlog:
         clean_keyboard_state()
     with xlog:
         if not X11Keyboard.hasXFixes() and self.cursors:
             log.error("Error: cursor forwarding support disabled")
         if not X11Keyboard.hasXTest():
             log.error("Error: keyboard and mouse disabled")
         elif not X11Keyboard.hasXkb():
             log.error("Error: limited keyboard support")
     with xsync:
         self.init_x11_atoms()
     with xlog:
         if self.randr:
             self.init_randr()
     with xlog:
         self.init_cursor()
     with xlog:
         self.x11_filter = init_x11_filter()
     assert self.x11_filter
     with xlog:
         self.save_mode()
Example #8
0
 def init_x11_filter(self):
     if self.x11_filter:
         return
     try:
         from xpra.x11.gtk_x11.gdk_bindings import init_x11_filter  #@UnresolvedImport, @UnusedImport
         self.x11_filter = init_x11_filter()
         log("x11_filter=%s", self.x11_filter)
     except Exception:
         log.error("Error: failed to initialize X11 GDK filter:")
         log.error(" %s", e)
         self.x11_filter = None
Example #9
0
 def x11_init(self):
     X11ServerBase.x11_init(self)
     assert init_x11_filter() is True
     display = display_get_default()
     screens = display.get_n_screens()
     for n in range(screens):
         screen = display.get_screen(n)
         root = screen.get_root_window()
         add_event_receiver(root, self)
     add_catchall_receiver("xpra-motion-event", self)
     add_catchall_receiver("xpra-xkb-event", self)
     X11Keyboard.selectBellNotification(True)
Example #10
0
    def x11_init(self):
        X11ServerBase.x11_init(self)
        assert init_x11_filter() is True

        self._has_grab = 0
        self._has_focus = 0
        # Do this before creating the Wm object, to avoid clobbering its
        # selecting SubstructureRedirect.
        root = gtk.gdk.get_default_root_window()
        root.set_events(root.get_events() | gtk.gdk.SUBSTRUCTURE_MASK)
        root.property_change(gtk.gdk.atom_intern("XPRA_SERVER", False),
                             gtk.gdk.atom_intern("STRING", False), 8,
                             gtk.gdk.PROP_MODE_REPLACE, xpra.__version__)
        add_event_receiver(root, self)

        ### Create the WM object
        self._wm = Wm(self.clobber, self.wm_name)
        self._wm.connect("new-window", self._new_window_signaled)
        self._wm.connect("bell", self._bell_signaled)
        self._wm.connect("quit", lambda _: self.clean_quit(True))
        self._wm.connect("show-desktop", self._show_desktop)

        #save default xsettings:
        self.default_xsettings = XSettingsHelper().get_settings()
        settingslog("default_xsettings=%s", self.default_xsettings)
        self._settings = {}
        self._xsettings_manager = None

        #for handling resize synchronization between client and server (this is not xsync!):
        self.last_client_configure_event = 0
        self.snc_timer = 0

        #cursor:
        self.default_cursor_data = None
        self.last_cursor_serial = None
        self.last_cursor_data = None
        self.send_cursor_pending = False

        def get_default_cursor():
            self.default_cursor_data = X11Keyboard.get_cursor_image()
            cursorlog("get_default_cursor=%s", self.default_cursor_data)

        trap.swallow_synced(get_default_cursor)
        self._wm.enableCursors(True)
Example #11
0
    def x11_init(self):
        X11ServerBase.x11_init(self)
        assert init_x11_filter() is True

        self._has_grab = 0
        self._has_focus = 0
        # Do this before creating the Wm object, to avoid clobbering its
        # selecting SubstructureRedirect.
        root = gtk.gdk.get_default_root_window()
        root.set_events(root.get_events() | gtk.gdk.SUBSTRUCTURE_MASK)
        root.property_change(gtk.gdk.atom_intern("XPRA_SERVER", False),
                            gtk.gdk.atom_intern("STRING", False),
                            8,
                            gtk.gdk.PROP_MODE_REPLACE,
                            xpra.__version__)
        add_event_receiver(root, self)

        ### Create the WM object
        self._wm = Wm(self.clobber, self.wm_name)
        self._wm.connect("new-window", self._new_window_signaled)
        self._wm.connect("bell", self._bell_signaled)
        self._wm.connect("quit", lambda _: self.clean_quit(True))
        self._wm.connect("show-desktop", self._show_desktop)

        #save default xsettings:
        self.default_xsettings = XSettingsHelper().get_settings()
        settingslog("default_xsettings=%s", self.default_xsettings)
        self._settings = {}
        self._xsettings_manager = None

        #for handling resize synchronization between client and server (this is not xsync!):
        self.last_client_configure_event = 0
        self.snc_timer = 0

        #cursor:
        self.default_cursor_data = None
        self.last_cursor_serial = None
        self.last_cursor_data = None
        self.send_cursor_pending = False
        def get_default_cursor():
            self.default_cursor_data = X11Keyboard.get_cursor_image()
            cursorlog("get_default_cursor=%s", self.default_cursor_data)
        trap.swallow_synced(get_default_cursor)
        self._wm.enableCursors(True)
 def x11_init(self):
     clean_keyboard_state()
     if self.fake_xinerama in FALSE_OPTIONS:
         self.libfakeXinerama_so = None
     elif os.path.isabs(self.fake_xinerama):
         self.libfakeXinerama_so = self.fake_xinerama
     else:
         self.libfakeXinerama_so = find_libfakeXinerama()
     if not X11Keyboard.hasXFixes() and self.cursors:
         log.error("Error: cursor forwarding support disabled")
     if not X11Keyboard.hasXTest():
         log.error("Error: keyboard and mouse disabled")
     elif not X11Keyboard.hasXkb():
         log.error("Error: limited keyboard support")
     self.init_x11_atoms()
     if self.randr:
         self.init_randr()
     self.init_cursor()
     self.query_opengl()
     self.x11_filter = init_x11_filter()
     assert self.x11_filter
Example #13
0
 def __init__(self, send_packet_cb, progress_cb=None, **kwargs):
     GObject.GObject.__init__(self)
     self.init_window()
     init_x11_filter()
     self.x11_filter = True
     super().__init__(send_packet_cb, progress_cb, **kwargs)
Example #14
0
def make_window():
	window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
	window.set_title("Window Focus")
	window.set_size_request(640, 200)
	window.set_position(Gtk.WindowPosition.CENTER)
	window.connect("delete_event", Gtk.main_quit)
	icon = get_icon_pixbuf("windows.png")
	if icon:
		window.set_icon(icon)
	vbox = Gtk.VBox()
	hbox = Gtk.HBox()
	def add_btn(label, cb):
		b = Gtk.Button(label=label)
		def bcb(*_args):
			cb()
		b.connect('clicked', bcb)
		hbox.add(b)
	def restack_above():
		window.get_window().restack(None, True)
	add_btn("Restack Above", restack_above)
	def restack_below():
		window.get_window().restack(None, False)
	add_btn("Restack Below", restack_below)
	def _raise():
		window.get_window().raise_()
	add_btn("Raise", _raise)
	def _lower():
		window.get_window().lower()
	add_btn("Lower", _lower)
	vbox.add(hbox)
	N = 8
	labels = []
	font = Pango.FontDescription("sans 12")
	for _ in range(N):
		l = Gtk.Label()
		l.modify_font(font)
		labels.append(l)
	for l in labels:
		al = Gtk.Alignment(xalign=0, yalign=0.5, xscale=0.0, yscale=0)
		al.add(l)
		vbox.add(al)
	window.add(vbox)
	window.show_all()
	text = deque(maxlen=N)
	def update(s):
		text.append("%s: %s" % (datetime.now(), s))
		for i, t in enumerate(text):
			labels[i].set_text(t)
	#self.selectX11FocusChange(self)
	def focus_in(_window, event):
		update("focus-in-event")
	def focus_out(_window, event):
		update("focus-out-event")
	def has_toplevel_focus(window, _event):
		update("has-toplevel-focus: %s" % window.has_toplevel_focus())
	window.connect("focus-in-event", focus_in)
	window.connect("focus-out-event", focus_out)
	window.connect("notify::has-toplevel-focus", has_toplevel_focus)
	if POSIX and not OSX:
		from xpra.gtk_common.error import xlog
		from xpra.x11.gtk_x11.gdk_display_source import init_gdk_display_source
		from xpra.x11.gtk_x11.gdk_bindings import init_x11_filter
		from xpra.x11.bindings.window_bindings import X11WindowBindings  #pylint: disable=no-name-in-module
		from xpra.os_util import is_Wayland
		if not is_Wayland():
			#x11 focus events:
			gdk_win = window.get_window()
			xid = gdk_win.get_xid()
			init_gdk_display_source()
			os.environ["XPRA_X11_DEBUG_EVENTS"] = "FocusIn,FocusOut"
			init_x11_filter()
			with xlog:
				X11WindowBindings().selectFocusChange(xid)
	return window