Coverage for /home/antoine/projects/xpra-git/dist/python3/lib64/python/xpra/x11/xroot_props.py : 80%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of Xpra.
2# Copyright (C) 2010 Nathaniel Smith <njs@pobox.com>
3# Copyright (C) 2011-2019 Antoine Martin <antoine@xpra.org>
4# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
5# later version. See the file COPYING for details.
7from gi.repository import GObject, Gdk
9from xpra.gtk_common.gobject_util import one_arg_signal, SIGNAL_RUN_LAST
10from xpra.x11.gtk_x11.gdk_bindings import (
11 add_event_receiver, remove_event_receiver,
12 )
13from xpra.log import Logger
15log = Logger("x11", "util")
18class XRootPropWatcher(GObject.GObject):
19 __gsignals__ = {
20 "root-prop-changed": (SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING, )),
21 "xpra-property-notify-event": one_arg_signal,
22 }
24 def __init__(self, props, root_window):
25 GObject.GObject.__init__(self)
26 self._props = props
27 self._root = root_window
28 self._saved_event_mask = self._root.get_events()
29 self._root.set_events(self._saved_event_mask | Gdk.EventMask.PROPERTY_CHANGE_MASK)
30 add_event_receiver(self._root, self)
32 def cleanup(self):
33 #this must be called from the UI thread!
34 remove_event_receiver(self._root, self)
35 self._root.set_events(self._saved_event_mask)
38 def __repr__(self): #pylint: disable=arguments-differ
39 return "XRootPropWatcher"
42 def do_xpra_property_notify_event(self, event):
43 log("XRootPropWatcher.do_xpra_property_notify_event(%s)", event)
44 if event.atom in self._props:
45 self.do_notify(str(event.atom))
47 def do_notify(self, prop):
48 log("XRootPropWatcher.do_notify(%s)", prop)
49 self.emit("root-prop-changed", prop)
51 def notify_all(self):
52 for prop in self._props:
53 self.do_notify(prop)
56GObject.type_register(XRootPropWatcher)