The branch, master has been updated via 51f6e18ddb78fc74cca3f496281549ea54015d20 (commit) from ff2c5020c462c1ee05ef32b82c60dd6ccf22777e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 51f6e18ddb78fc74cca3f496281549ea54015d20 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Sun Jan 20 12:15:34 2013 +0100 Add support for desktop sharing in PyHoca-GUI. Requires X2Go Server 4.1.0.0 and above. ----------------------------------------------------------------------- Summary of changes: debian/changelog | 2 + pyhoca/wxgui/frontend.py | 81 ++++++++++++++++++--- pyhoca/wxgui/menus_taskbar.py | 50 ++++++++----- pyhoca/wxgui/profilemanager.py | 156 +++++++++++++++++++++++++++++++++------- 4 files changed, 239 insertions(+), 50 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 8398714..053faf9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,6 +27,8 @@ pyhoca-gui (0.4.0.0-0~x2go1) UNRELEASED; urgency=low - Give control of auto-starting and auto-resuming fully into the hands of the session profiles. No extra cmdline options needed anymore to activate auto-starting/-resuming of sessions. + - Add support for desktop sharing in PyHoca-GUI. Requires X2Go Server + 4.1.0.0 and above. * /debian/control: + Thanks to Orion's patch in bug #91 we can drop many build dependencies. + Versioned Depend: on python-x2go (>= 0.4.0.0-0~). diff --git a/pyhoca/wxgui/frontend.py b/pyhoca/wxgui/frontend.py index 4254f26..8ae0576 100644 --- a/pyhoca/wxgui/frontend.py +++ b/pyhoca/wxgui/frontend.py @@ -59,6 +59,7 @@ import basepath import messages import splash import sessiontitle +import listdesktops wx.SetDefaultPyEncoding("utf-8") wx.InitAllImageHandlers() @@ -145,6 +146,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): self.appname = appname self.vendorname = vendorname self.version = version + self._exiting = False self.args = args @@ -431,6 +433,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): - close all associated windows """ + self._exiting = True # close open password dialogs (or other remaining windows) for _win in self._sub_windows: _win.Close() @@ -684,7 +687,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): pass connect_failed = True except x2go.X2GoRemoteHomeException, e: - self.notifier.send(_(u'%s - missing home directory') % profile_name, _("The remote user's home directory does not exist."), icon='auth_error', timeout=4000) + self.notifier.send(_(u'%s - missing home directory') % profile_name, _(u"The remote user's home directory does not exist."), icon='auth_error', timeout=4000) try: self._temp_disabled_profile_names.remove(profile_name) except ValueError: @@ -758,6 +761,39 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): gevent.spawn(self._X2GoClient__start_session, session_uuid) self._X2GoClient__list_sessions(session_uuid, refresh_cache=True) + def OnShadowSessionStart(self, evt): + """\ + Gets called if the user requests to start a new X2Go session. + + @param evt: event + @type evt: C{obj} + + """ + profile_name = self._eventid_profilenames_map[evt.GetId()] + + server_version = self.get_server_versions(profile_name, 'x2goserver') + if not self.has_server_feature(profile_name, 'X2GO_LIST_SHADOWSESSIONS'): + m = messages.PyHoca_MessageWindow_Ok(self, + title=_(u'Desktop Sharing with %s not supported by server') % self.appname, + msg=_(u"We apologize for the inconvenience...\n\nSession profiles of type ,,SHADOW'' are not\nsupported by X2Go Server (v%s)!!!\n\nDesktop Sharing with %s requires\nX2Go Server 4.1.0.0 and above.") % (server_version, self.appname), + icon='warning', + profile_name=profile_name) + m.ShowModal() + return + + listbox = listdesktops.PyHocaGUI_DialogBoxListDesktops(self, profile_name) + listbox.ShowModal() + + if listbox.connect: + + desktop = listbox.GetSelectedDesktop() + if desktop: + session_uuid = self._X2GoClient__register_session(profile_name=profile_name, published_applications=False) + if self._X2GoClient__server_is_alive(session_uuid): + gevent.spawn(self._X2GoClient__share_desktop_session, session_uuid, desktop=desktop, share_mode=listbox.share_mode, check_desktop_list=True) + + listbox.Close() + def OnPubAppSessionStart(self, evt): """\ Gets called if the user requests to start a new X2Go session in published applications mode. @@ -1129,10 +1165,10 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): else: self._pyhoca_logger('Exporting session profile(s) to file %s failed.' % _export_file, loglevel=x2go.loglevel_ERROR) m = messages.PyHoca_MessageWindow_Ok(self, - title=_(u'%s: Exporting session profile(s) failed') % self.appname, - msg=_(u"The selected session profile(s) could not be exported to the \nfile »%s«.\n\nCheck for common problems (disk full, insufficient access, etc.).") % os.path.normpath(_export_file), - icon='error', - profile_name=profile_name) + title=_(u'%s: Exporting session profile(s) failed') % self.appname, + msg=_(u"The selected session profile(s) could not be exported to the \nfile »%s«.\n\nCheck for common problems (disk full, insufficient access, etc.).") % os.path.normpath(_export_file), + icon='error', + profile_name=profile_name) m.ShowModal() def OnShareCustomLocalFolder(self, evt): @@ -1355,7 +1391,8 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): @type profile_name: C{str} """ - self.notifier.send(_(u'%s - channel error') % profile_name, _(u'Lost connection to server %s unexpectedly! Try to re-authenticate to the server...') % profile_name, icon='session_warning', timeout=10000) + if not self._exiting: + self.notifier.send(_(u'%s - channel error') % profile_name, _(u'Lost connection to server %s unexpectedly! Try to re-authenticate to the server...') % profile_name, icon='session_warning', timeout=10000) try: del self._temp_disabled_session_names[profile_name] except KeyError: @@ -1364,7 +1401,6 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): self.WakeUpIdle() self.ExitMainLoop() - def HOOK_session_startup_failed(self, profile_name='UNKNOWN', **kwargs): """\ Notify about session startup failures. @@ -1373,7 +1409,32 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): @type profile_name: C{str} """ - self.notifier.send(_(u'%s - session failure') % profile_name, _('The session startup failed.'), icon='session_error', timeout=10000) + self.notifier.send(_(u'%s - session failure') % profile_name, _(u'The session startup failed.'), icon='session_error', timeout=10000) + if self.exit_on_disconnect: + self.WakeUpIdle() + self.ExitMainLoop() + + def HOOK_list_desktops_timeout(self, profile_name='UNKNOWN', **kwargs): + """\ + Notify about x2golistdesktops timeout events. + + @param profile_name: profile name of session that called this hook method + @type profile_name: C{str} + + """ + self.notifier.send(_(u'%s - timeout') % profile_name, _(u'The server took long to provide a list of sharable desktops.\nThis can happen from time to time, please try again'), icon='session_warning', timeout=10000) + + def HOOK_no_such_desktop(self, profile_name='UNKNOWN', desktop='UNKNOWN', **kwargs): + """\ + Notify that a before-seen sharable desktop is not available for sharing (anymore). + + @param profile_name: profile name of session that called this hook method + @type profile_name: C{str} + @param desktop: the desktop identifier that was attemted to be shared + @type desktop: C{str} + + """ + self.notifier.send(_(u'%s - desktop sharing failed') % profile_name, _(u'The desktop %s is not available for sharing (anymore).') % desktop, icon='session_warning', timeout=10000) if self.exit_on_disconnect: self.WakeUpIdle() self.ExitMainLoop() @@ -1391,9 +1452,9 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ if session_name == 'UNKNOWN': - self.notifier.send(_(u'%s - session failure') % profile_name, _('The command ,,%s\'\' is not available on X2Go server.') % cmd, icon='session_error', timeout=10000) + self.notifier.send(_(u'%s - session failure') % profile_name, _(u'The command ,,%s\'\' is not available on X2Go server.') % cmd, icon='session_error', timeout=10000) else: - self.notifier.send(_(u'%s - session failure') % profile_name, _('The command ,,%s\'\' is not available on X2Go server\n%s.') % (cmd, session_name), icon='session_error', timeout=10000) + self.notifier.send(_(u'%s - session failure') % profile_name, _(u'The command ,,%s\'\' is not available on X2Go server\n%s.') % (cmd, session_name), icon='session_error', timeout=10000) if self.exit_on_disconnect: self.WakeUpIdle() self.ExitMainLoop() diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py index 9aca407..eff9387 100644 --- a/pyhoca/wxgui/menus_taskbar.py +++ b/pyhoca/wxgui/menus_taskbar.py @@ -253,22 +253,30 @@ class PyHocaGUI_Menu_TaskbarSessionActions(wx.Menu): _ts = self.Append(text=_(u"Transfer Session (not possible)"), id=ID_TRANSFERSESSION_DISABLED) _ts.Enable(False) - if self._PyHocaGUI.disconnect_on_suspend and self._PyHocaGUI.exit_on_disconnect and _s.has_terminal_session(): - _ss = self.Append(text=_(u"Suspend Session (and disconnect/exit)"), id=ID_SUSPENDSESSION) - elif self._PyHocaGUI.disconnect_on_suspend and _s.has_terminal_session(): - _ss = self.Append(text=_(u"Suspend Session (and disconnect)"), id=ID_SUSPENDSESSION) + if not _s.is_shadow_session(): + if self._PyHocaGUI.disconnect_on_suspend and self._PyHocaGUI.exit_on_disconnect and _s.has_terminal_session(): + _ss = self.Append(text=_(u"Suspend Session (and disconnect/exit)"), id=ID_SUSPENDSESSION) + elif self._PyHocaGUI.disconnect_on_suspend and _s.has_terminal_session(): + _ss = self.Append(text=_(u"Suspend Session (and disconnect)"), id=ID_SUSPENDSESSION) + else: + _ss = self.Append(text=_(u"Suspend Session"), id=ID_SUSPENDSESSION) + + if _s.is_published_applications_provider() and not self._PyHocaGUI.get_profile_config(profile_name)['published']: + _ss.Enable(False) + if not _s.is_shadow_session(): + if self._PyHocaGUI.disconnect_on_terminate and self._PyHocaGUI.exit_on_disconnect and _s.has_terminal_session(): + self.Append(text=_(u"Terminate Session (and disconnect/exit)"), id=ID_SUSPENDSESSION) + elif self._PyHocaGUI.disconnect_on_terminate and _s.has_terminal_session(): + self.Append(text=_(u"Terminate Session (and disconnect)"), id=ID_TERMINATESESSION) else: - _ss = self.Append(text=_(u"Suspend Session"), id=ID_SUSPENDSESSION) - - if _s.is_published_applications_provider() and not self._PyHocaGUI.get_profile_config(profile_name)['published']: - _ss.Enable(False) - - if self._PyHocaGUI.disconnect_on_terminate and self._PyHocaGUI.exit_on_disconnect and _s.has_terminal_session(): - self.Append(text=_(u"Terminate Session (and disconnect/exit)"), id=ID_SUSPENDSESSION) - elif self._PyHocaGUI.disconnect_on_terminate and _s.has_terminal_session(): - self.Append(text=_(u"Terminate Session (and disconnect)"), id=ID_TERMINATESESSION) + self.Append(text=_(u"Terminate Session"), id=ID_TERMINATESESSION) else: - self.Append(text=_(u"Terminate Session"), id=ID_TERMINATESESSION) + if self._PyHocaGUI.disconnect_on_terminate and self._PyHocaGUI.exit_on_disconnect and _s.has_terminal_session(): + self.Append(text=_(u"End Session Sharing (and disconnect/exit)"), id=ID_SUSPENDSESSION) + elif self._PyHocaGUI.disconnect_on_terminate and _s.has_terminal_session(): + self.Append(text=_(u"End Session Sharing (and disconnect)"), id=ID_TERMINATESESSION) + else: + self.Append(text=_(u"End Session Sharing"), id=ID_TERMINATESESSION) if _s is not None and _s.is_published_applications_provider() and self._PyHocaGUI.get_profile_config(profile_name)['published']: self.AppendSeparator() @@ -514,6 +522,7 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): ID_CONNECT=wx.NewId() ID_PUBAPPSESSIONSTART=wx.NewId() ID_SESSIONSTART=wx.NewId() + ID_SHADOWSESSIONSTART=wx.NewId() ID_LAUNCHAPPLICATION = wx.NewId() ID_CLEANSESSIONS = wx.NewId() ID_EDITPROFILEWHILECONNECTED = wx.NewId() @@ -540,11 +549,17 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): else: - self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = profile_name + self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = \ + self._PyHocaGUI._eventid_profilenames_map[ID_SHADOWSESSIONSTART] = profile_name if current_profile_config['command'] in x2go.defaults.X2GO_DESKTOPSESSIONS: self.Append(id=ID_SESSIONSTART, text='%s (%s)' % (_(u"Start &new Desktop Session"), current_profile_config['command'])) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionStart, id=ID_SESSIONSTART) + + elif current_profile_config['command'] == 'SHADOW': + start_shadow_session = self.Append(id=ID_SHADOWSESSIONSTART, text=_(u"Connect to another Desktop Session")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnShadowSessionStart, id=ID_SHADOWSESSIONSTART) + elif current_profile_config['command'] == '' and current_profile_config['published']: _pub_app_start_item = None if profile_name in self._PyHocaGUI._temp_launching_pubapp_profiles: @@ -636,11 +651,14 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): self._PyHocaGUI._eventid_profilenames_map[ID_LAUNCHAPPLICATION] = \ self._PyHocaGUI._eventid_profilenames_map[ID_CLEANSESSIONS] = profile_name - if current_profile_config['applications'] and current_profile_config['command'] in x2go.defaults.X2GO_DESKTOPSESSIONS and not current_profile_config['published']: + if current_profile_config['applications'] and current_profile_config['command'] in x2go.defaults.X2GO_DESKTOPSESSIONS.keys() and not current_profile_config['published']: self.AppendSeparator() self.AppendMenu(id=ID_LAUNCHAPPLICATION, text=_(u"Launch Single Application"), submenu=PyHocaGUI_Menu_LaunchSingleApplication(self._PyHocaGUI, caller=self, profile_name=profile_name) ) + if current_profile_config['command'] != 'SHADOW' and not self._PyHocaGUI.restricted_trayicon: + self.Append(id=ID_SHADOWSESSIONSTART, text=_(u"Connect to Shared Desktop")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnShadowSessionStart, id=ID_SHADOWSESSIONSTART) if current_profile_config['published']: diff --git a/pyhoca/wxgui/profilemanager.py b/pyhoca/wxgui/profilemanager.py index 71fd136..9f01a78 100644 --- a/pyhoca/wxgui/profilemanager.py +++ b/pyhoca/wxgui/profilemanager.py @@ -84,6 +84,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog): 'XFCE': _(u'XFCE Desktop (XFCE)'), 'PUBLISHEDAPPLICATIONS': _(u'Published Applications'), 'APPLICATION': _(u'Single Application'), + 'SHADOW': _(u'Share desktop session (SHADOW)'), 'XDMCP': _(u'XDMCP Query'), 'RDP': _(u'Windows Terminal Server (X2Go-proxied RDP)'), 'DirectRDP': _(u'Windows Terminal Server (Direct RDP)'), @@ -898,6 +899,12 @@ class PyHocaGUI_ProfileManager(wx.Dialog): if _command == 'RDP' and self.profile_config['directrdp']: self.SessionType.SetValue(self.sessionChoices['DirectRDP']) self.Command.SetValue('') + elif _command == 'SHADOW': + self.SessionType.SetValue(self.sessionChoices[_command]) + self.Application.SetValue('') + self.Command.SetValue('') + self.AutoStartSession.Enable(False) + self.AutoStartSession.SetValue(False) elif _command in self.sessionChoices.keys(): self.SessionType.SetValue(self.sessionChoices[_command]) self.Application.SetValue('') @@ -985,27 +992,12 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.KeyboardModel.Enable(True) self.KeyboardVariant.Enable(True) - self.EnableSound.SetValue(self.profile_config['sound']) - self.DefaultSoundPort.SetValue(self.profile_config['defsndport']) - self.SoundPort.SetValue(self.profile_config['sndport']) - if self.profile_config['sound']: - self.PulseAudio.Enable(True) - self.Esd.Enable(True) - self.DefaultSoundPort.Enable(True) - if not self.profile_config['defsndport']: - self.SoundPortLabel.Enable(True) - self.SoundPort.Enable(True) - else: - self.SoundPortLabel.Enable(False) - self.SoundPort.Enable(False) + if _command != 'SHADOW': + self.ClientSidePrinting.SetValue(self.profile_config['print']) else: - self.PulseAudio.Enable(False) - self.Esd.Enable(False) - self.DefaultSoundPort.Enable(False) - self.SoundPortLabel.Enable(False) - self.SoundPort.Enable(False) - - self.ClientSidePrinting.SetValue(self.profile_config['print']) + self.ClientSidePrinting.SetValue(False) + self.ClientSidePrinting.Enable(False) + self.staticbox_Printing.Enable(False) if _command == 'RDP': if self.profile_config['directrdp']: @@ -1049,6 +1041,26 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.RDPOptionsLabel.Enable(False) self.RDPOptions.Enable(False) + if _command != 'SHADOW': + self.EnableSound.SetValue(self.profile_config['sound']) + self.DefaultSoundPort.SetValue(self.profile_config['defsndport']) + self.SoundPort.SetValue(self.profile_config['sndport']) + if self.EnableSound.GetValue(): + self.PulseAudio.Enable(True) + self.Esd.Enable(True) + self.DefaultSoundPort.Enable(True) + self._toggle_DefaultSoundPort() + else: + self.EnableSound.SetValue(False) + self.EnableSound.Enable(False) + self.PulseAudio.Enable(False) + self.Arts.Enable(False) + self.Esd.Enable(False) + self.DefaultSoundPort.Enable(False) + self.SoundPortLabel.Enable(False) + self.SoundPort.Enable(False) + self.staticbox_Sound.Enable(False) + self.XDMCPServer.SetValue(self.profile_config['xdmcpserver']) self.DisplayTypeFullscreen.SetValue(self.profile_config['fullscreen'] and not self.profile_config['maxdim']) @@ -1066,7 +1078,13 @@ class PyHocaGUI_ProfileManager(wx.Dialog): else: self.DisplayDPI.Enable(True) - self.UseLocalFolderSharing.SetValue(self.profile_config['useexports']) + if _command != 'SHADOW': + self.UseLocalFolderSharing.SetValue(self.profile_config['useexports']) + else: + self.UseLocalFolderSharing.SetValue(False) + self.UseLocalFolderSharing.Enable(False) + self.staticbox_FolderSharing.Enable(False) + self.RestoreSharedLocalFolders.SetValue(self.profile_config['restoreexports']) self._toggle_localFolderSharing() self.SharedFoldersList.DeleteAllItems() @@ -1080,7 +1098,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog): if ',' in self.profile_config['export']: self.profile_config['export'] = self.profile_config['export'].replace(',', ';') - # strip off whitespaces and ";" from beginning and end of string _shared_folders = self.profile_config['export'].strip().strip(';').strip() # strip off '"' from beginning and end of string @@ -1117,7 +1134,13 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.ServerEncoding.SetValue(self.profile_config['iconvto']) self._toggle_useEncodingConverter() - self.UseFileMIMEbox.SetValue(self.profile_config['usemimebox']) + if _command != 'SHADOW': + self.UseFileMIMEbox.SetValue(self.profile_config['usemimebox']) + else: + self.UseFileMIMEbox.SetValue(False) + self.UseFileMIMEbox.Enable(False) + self.staticbox_FileMIMEbox.Enable(False) + self.FileMIMEboxExtensions.SetValue(self.profile_config['mimeboxextensions']) if self.profile_config['mimeboxaction'] in self.mimeboxactionChoices.keys(): self.FileMIMEboxAction.SetValue(self.mimeboxactionChoices[self.profile_config['mimeboxaction']]) @@ -1127,6 +1150,8 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.disable_EditConnected_options() + self._last_session_type = [ i for i in self.sessionChoices.keys() if self.sessionChoices[i] == self.SessionType.GetValue() ][0] + def _toggle_DisplayProperties(self): """\ Toggle display properties, depend on activation/deactivation of rootless session mode. @@ -1207,7 +1232,7 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.SSHPort.Enable(False) self.SSHKeyFileLabel.Enable(False) self.SSHKeyFile.Enable(False) - self.UniqueHostAliases.Enable(False) + self.UniqueHostKeyAliases.Enable(False) self.SSHAutoLogin.Enable(False) if PARAMIKO_FEATURE['forward-ssh-agent']: self.SSHForwardAuthAgent.Enable(False) @@ -1582,6 +1607,44 @@ class PyHocaGUI_ProfileManager(wx.Dialog): """ _session_type = [ i for i in self.sessionChoices.keys() if self.sessionChoices[i] == self.SessionType.GetValue() ][0] + if self._last_session_type == 'SHADOW': + + self.EnableSound.SetValue(self.profile_config_bak['sound']) + self.RootlessSession.SetValue(self.profile_config_bak['rootless']) + self.UseLocalFolderSharing.SetValue(self.profile_config_bak['useexports']) + self.ClientSidePrinting.SetValue(self.profile_config_bak['print']) + self.UseFileMIMEbox.SetValue(self.profile_config_bak['usemimebox']) + self.AutoStartSession.SetValue(self.profile_config_bak['autostart']) + + self.RootlessSession.Enable(True) + + if self.EnableSound.GetValue(): + self.PulseAudio.Enable(True) + self.Esd.Enable(True) + self.DefaultSoundPort.Enable(True) + self._toggle_DefaultSoundPort() + else: + self.PulseAudio.Enable(False) + self.Esd.Enable(False) + self.DefaultSoundPort.Enable(False) + self.SoundPortLabel.Enable(False) + self.SoundPort.Enable(False) + + self.staticbox_Sound.Enable(True) + + # no local folder sharing available + self.staticbox_FolderSharing.Enable(True) + self.UseLocalFolderSharing.Enable(True) + self._toggle_localFolderSharing() + + # no printing available + self.ClientSidePrinting.Enable(True) + self.staticbox_Printing.Enable(True) + + # no file MIME box available + self.UseFileMIMEbox.Enable(True) + self.staticbox_FileMIMEbox.Enable(True) + self.UsePublishedApplications.Enable(True) self.AutoStartSession.Enable(True) @@ -1711,9 +1774,54 @@ class PyHocaGUI_ProfileManager(wx.Dialog): self.AutoStartSession.SetValue(self._last_auto_start_value) self._last_auto_start_value = None + if _session_type == 'SHADOW': + + self.profile_config_bak['autostart'] = self.AutoStartSession.GetValue() + self.profile_config_bak['sound'] = self.EnableSound.GetValue() + self.profile_config_bak['rootless'] = self.RootlessSession.GetValue() + self.profile_config_bak['useexports'] = self.UseLocalFolderSharing.GetValue() + self.profile_config_bak['print'] = self.ClientSidePrinting.GetValue() + self.profile_config_bak['usemimebox'] = self.UseFileMIMEbox.GetValue() + + self.AutoStartSession.SetValue(False) + self.AutoStartSession.Enable(False) + + # shadow sessions are always desktop sessions + self.RootlessSession.SetValue(True) + self.RootlessSession.Enable(False) + + # no sound available with SHADOW sessions + self.EnableSound.SetValue(False) + self.EnableSound.Enable(False) + self.PulseAudio.Enable(False) + self.Esd.Enable(False) + self.DefaultSoundPort.Enable(False) + self.SoundPortLabel.Enable(False) + self.SoundPort.Enable(False) + self.staticbox_Sound.Enable(False) + + # no local folder sharing available + self.UseLocalFolderSharing.SetValue(False) + self.UseLocalFolderSharing.Enable(False) + self.staticbox_FolderSharing.Enable(False) + self._toggle_localFolderSharing() + + # no printing available + self.ClientSidePrinting.SetValue(False) + self.ClientSidePrinting.Enable(False) + self.staticbox_Printing.Enable(False) + + # no file MIME box available + self.UseFileMIMEbox.SetValue(False) + self.UseFileMIMEbox.Enable(False) + self.staticbox_FileMIMEbox.Enable(False) + self._toggle_useFileMIMEbox() + self._toggle_DisplayProperties() self.disable_EditConnected_options() + self._last_session_type = _session_type + def OnCompressionSelected(self, event): """\ Gets called if another compression method gets selected. hooks/post-receive -- pyhoca-gui.git (Python X2Go Client (wxPython GUI)) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "pyhoca-gui.git" (Python X2Go Client (wxPython GUI)).