def test_xsettings(self): from xpra.x11.xsettings_prop import ( get_settings, set_settings, get_local_byteorder, XSettingsTypeInteger, XSettingsTypeString, XSettingsTypeColor, ) disp = AdHocStruct() for DEBUG_XSETTINGS in (True, False): with OSEnvContext(): os.environ["XPRA_XSETTINGS_DEBUG"] = str(int(DEBUG_XSETTINGS)) serial = 1 data = b"" l = len(data) v = struct.pack(b"=BBBBII", get_local_byteorder(), 0, 0, 0, serial, l)+data+b"\0" v1 = get_settings(disp, v) assert v #get from cache: v2 = get_settings(disp, v) assert v1==v2 #test all types, set then get: #setting_type, prop_name, value, last_change_serial = setting settings = ( (XSettingsTypeInteger, "int1", 1, 0), (XSettingsTypeString, "str1", "1", 0), (XSettingsTypeColor, "color1", (128, 128, 64, 32), 0), ) serial = 2 data = set_settings(disp, (serial, settings)) assert data #parse it back: v = get_settings(disp, data) rserial, rsettings = v assert rserial==serial assert len(rsettings)==len(settings) #test error handling: for settings in ( ( #invalid color causes exception (XSettingsTypeColor, "bad-color", (128, ), 0), ), ( #invalid setting type is skipped with an error message: (255, "invalid-setting-type", 0, 0), ), ): serial = 3 data = set_settings(disp, (serial, settings)) assert data v = get_settings(disp, data) rserial, rsettings = v assert rserial==serial assert len(rsettings)==0 #parsing an invalid data type (9) should fail: hexdata = b"000000000200000001000000090004007374723100000000010000003100000000" data = binascii.unhexlify(hexdata) v = get_settings(disp, data) rserial, rsettings = v assert len(rsettings)==0
def _get_xsettings(): from xpra.gtk_common.error import xlog X11Window = X11WindowBindings() with xlog: selection = "_XSETTINGS_S0" owner = X11Window.XGetSelectionOwner(selection) if not owner: return None XSETTINGS = "_XSETTINGS_SETTINGS" data = X11Window.XGetWindowProperty(owner, XSETTINGS, XSETTINGS) if not data: return None from xpra.x11.xsettings_prop import get_settings return get_settings(X11Window.get_display_name(), data) return None
def _get_xsettings(): try: from xpra.x11.bindings.window_bindings import X11WindowBindings #@UnresolvedImport window_bindings = X11WindowBindings() selection = "_XSETTINGS_S0" owner = window_bindings.XGetSelectionOwner(selection) if not owner: return None XSETTINGS = "_XSETTINGS_SETTINGS" data = window_bindings.XGetWindowProperty(owner, XSETTINGS, XSETTINGS) if not data: return None from xpra.x11.xsettings_prop import get_settings return get_settings(window_bindings.get_display_name(), data) except Exception as e: log("_get_xsettings error: %s", e) return None
def _get_xsettings(): from xpra.gtk_common.error import xsync try: X11Window = X11WindowBindings() with xsync: selection = "_XSETTINGS_S0" owner = X11Window.XGetSelectionOwner(selection) if not owner: return None XSETTINGS = "_XSETTINGS_SETTINGS" data = X11Window.XGetWindowProperty(owner, XSETTINGS, XSETTINGS) if not data: return None from xpra.x11.xsettings_prop import get_settings return get_settings(X11Window.get_display_name(), data) except Exception as e: log("_get_xsettings()", exc_info=True) return None
def get_xsettings(disp, v): from xpra.x11.xsettings_prop import get_settings return get_settings(_get_display_name(disp), v)
def get_xsettings(v): from xpra.x11.xsettings_prop import get_settings return get_settings(v)