Hide keyboard shortcuts

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-2020 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. 

6 

7import os 

8import sys 

9 

10 

11_init_done = False 

12def init(prgname=None, appname=None): 

13 """ do whatever is needed to prepare an application for running, 

14 some platforms may initialize logging to file, etc 

15 If the names are supplied, we call set_name() 

16 """ 

17 global _init_done 

18 if prgname is not None or appname is not None: 

19 set_default_name(prgname, appname) 

20 set_name() 

21 if not _init_done: 

22 _init_done = True 

23 do_init() 

24 

25#platforms can override this 

26def do_init(): # pragma: no cover 

27 pass 

28 

29def threaded_server_init(): 

30 pass 

31 

32 

33class program_context: 

34 def __init__(self, prgname=None, appname=None): 

35 self.prgname = prgname 

36 self.appname = appname 

37 def __enter__(self): 

38 init(self.prgname, self.appname) 

39 return self 

40 def __exit__(self, *_args): 

41 clean() 

42 def __repr__(self): 

43 return "gui_context(%s, %s)" % (self.prgname, self.appname) 

44 

45 

46_prgname = None 

47_appname = None 

48def set_default_name(prgname=None, appname=None): 

49 #sets the default prg and app names 

50 global _prgname, _appname 

51 if prgname is not None: 

52 _prgname = prgname 

53 if appname is not None: 

54 _appname = appname 

55 

56 

57#platforms can override this 

58def command_error(message): 

59 from xpra.scripts.main import error 

60 error(message) 

61 

62def command_info(message): 

63 from xpra.scripts.main import info 

64 info(message) 

65 

66 

67_clean_done = False 

68def clean(): 

69 global _clean_done 

70 if not _clean_done: 

71 _clean_done = True 

72 do_clean() 

73 

74#platforms can override this 

75def do_clean(): # pragma: no cover 

76 pass 

77 

78 

79_name_set = False 

80def set_name(prgname=None, appname=None): 

81 global _name_set 

82 if not _name_set: 

83 _name_set = True 

84 set_prgname(prgname or _prgname) 

85 set_application_name(appname or _appname) 

86 

87#platforms can override this 

88def set_prgname(name): 

89 if not name: 

90 return 

91 from gi.repository import GLib 

92 GLib.set_prgname(name) 

93 

94def get_prgname(): 

95 global _prgname 

96 return _prgname 

97 

98 

99#platforms can override this 

100def set_application_name(name): 

101 if not name: 

102 return 

103 from gi.repository import GLib 

104 GLib.set_application_name(name) 

105 

106def get_application_name(): 

107 global _appname 

108 return _appname 

109 

110 

111def get_username(): 

112 return do_get_username() 

113 

114def do_get_username(): 

115 try: 

116 import pwd 

117 return pwd.getpwuid(os.getuid()).pw_name 

118 except Exception: # pragma: no cover 

119 try: 

120 import getpass 

121 return getpass.getuser() 

122 except Exception: 

123 pass 

124 return "" 

125 

126 

127def platform_import(where, pm, required, *imports): 

128 from xpra.os_util import OSX, POSIX 

129 if os.name == "nt": # pragma: no cover 

130 p = "win32" 

131 elif OSX: # pragma: no cover 

132 p = "darwin" 

133 elif POSIX: # pragma: no cover 

134 p = "xposix" 

135 else: # pragma: no cover 

136 raise OSError("Unknown OS %s" % (os.name)) 

137 

138 module = "xpra.platform.%s" % p 

139 if pm: 

140 module += ".%s" % pm 

141 

142 #cannot log this early! (win32 needs log to file redirection..) 

143 #log = Logger("platform", "import") 

144 #log("importing %s from %s (required=%s)" % (imports, module, required)) 

145 try: 

146 platform_module = __import__(module, {}, {}, imports) 

147 except ImportError: 

148 if required: 

149 raise 

150 return 

151 assert platform_module 

152 for x in imports: 

153 found = hasattr(platform_module, x) 

154 if not found: 

155 if required: 

156 raise ImportError("could not find %s in %s" % (x, module)) 

157 else: 

158 where[x] = getattr(platform_module, x) 

159 

160platform_import(globals(), None, True, "do_init", "do_clean") 

161platform_import(globals(), None, False, "threaded_server_init", 

162 "set_prgname", "set_application_name", "program_context", 

163 "command_error", "command_info", "do_get_username")