[X2Go-Commits] pyhoca-gui.git - build-59a18b6e3b5d3f1dd8f07f26433d37fe5984a57d (branch) updated: f8bf3631945ce3d1d675ff4434d77f7cfc6c5659
X2Go dev team
git-admin at x2go.org
Tue Aug 27 13:20:57 CEST 2013
The branch, build-59a18b6e3b5d3f1dd8f07f26433d37fe5984a57d has been updated
via f8bf3631945ce3d1d675ff4434d77f7cfc6c5659 (commit)
from 2e084470dedc09b2d165e46d6693d400b9ec795f (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 -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
pyhoca/wxgui/menus_taskbar.py | 11 +--
pyhoca/wxgui/profilemanager.py | 144 ++++++++++++++++++++++++++++++----------
2 files changed, 117 insertions(+), 38 deletions(-)
The diff of changes is:
diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py
index ac1860f..f7aae23 100644
--- a/pyhoca/wxgui/menus_taskbar.py
+++ b/pyhoca/wxgui/menus_taskbar.py
@@ -168,6 +168,8 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu):
ID_SHARELOCALFOLDER = wx.NewId()
ID_DISCONNECT = wx.NewId()
+ current_profile_config = self._PyHocaGUI.get_profile_config(profile_name)
+
# preparing profile_name information for the main PyHocaGUI instance
self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = \
self._PyHocaGUI._eventid_profilenames_map[ID_CLEANSESSIONS] = \
@@ -203,13 +205,14 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu):
self.Append(id=ID_CLEANSESSIONS, text="&Clean all sessions")
self.AppendSeparator()
self.Append(id=ID_EDITPROFILEWHILECONNECTED, text="Customize &profile")
- _share_folder = self.Append(id=ID_SHARELOCALFOLDER, text="Share local &folder")
+ if current_profile_config['useexports']:
+ _share_folder = self.Append(id=ID_SHARELOCALFOLDER, text="Share local &folder")
+ if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name):
+ _share_folder.Enable(False)
+
self.AppendSeparator()
self.Append(id=ID_DISCONNECT, text="&Disconnect from Server")
- if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name):
- _share_folder.Enable(False)
-
self._PyHocaGUI.current_profile_name = profile_name
self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionStart, id=ID_SESSIONSTART)
self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnCleanSessions, id=ID_CLEANSESSIONS)
diff --git a/pyhoca/wxgui/profilemanager.py b/pyhoca/wxgui/profilemanager.py
index 74fc795..167dc45 100644
--- a/pyhoca/wxgui/profilemanager.py
+++ b/pyhoca/wxgui/profilemanager.py
@@ -23,6 +23,7 @@ import os
import copy
import x2go.log as log
+import x2go.utils as utils
from x2go import X2GOCLIENT_OS
from x2go import defaults
@@ -31,6 +32,7 @@ import notify
import basepath
_icons_location = basepath.icons_basepath
+_known_encodings = utils.known_encodings()
class PyHocaGUI_ProfileManager(wx.Dialog):
"""\
@@ -205,25 +207,32 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.PulseAudio = wx.RadioButton(self.tab_Settings, -1, "Pulse Audio", style=wx.RB_GROUP)
self.Arts = wx.RadioButton(self.tab_Settings, -1, "Arts")
self.esd = wx.RadioButton(self.tab_Settings, -1, "esd")
- self.SoundTunnel = wx.CheckBox(self.tab_Settings, -1, "Use SSH port forwarding to tunnel sound system\nconnections through firewall")
self.DefaultSoundPort = wx.CheckBox(self.tab_Settings, -1, "Use default sound port")
self.SoundPortLabel = wx.StaticText(self.tab_Settings, -1, "Custom sound port:")
self.SoundPort = wx.SpinCtrl(self.tab_Settings, -1, "4713", min=23, max=64889)
self.ClientSidePrinting = wx.CheckBox(self.tab_Settings, -1, "Client Side printing")
+ self.UseLocalFolderSharing = wx.CheckBox(self.tab_SharedFolders, -1, "Use local folder sharing")
self.SharedFolderPathLabel = wx.StaticText(self.tab_SharedFolders, -1, "Path:")
- self.SharedFolderPath = wx.TextCtrl(self.tab_SharedFolders, -1, "")
+ self.SharedFolderPath = wx.TextCtrl(self.tab_SharedFolders, -1, "", style=wx.TE_PROCESS_ENTER)
self.SharedFolderPathBrowseButton = wx.BitmapButton(self.tab_SharedFolders, -1, wx.Bitmap('%s/PyHoca/16x16/system-search.png' % _icons_location, wx.BITMAP_TYPE_ANY))
self.AddSharedFolderPathButton = wx.Button(self.tab_SharedFolders, -1, "Add")
self.SharedFoldersList = wx.ListCtrl(self.tab_SharedFolders, -1, style=wx.LC_LIST|wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL|wx.LC_VRULES)
self.DeleteSharedFolderPathButton = wx.Button(self.tab_SharedFolders, -1, "Delete")
- self.SSHFSPortForwarding = wx.CheckBox(self.tab_SharedFolders, -1, "Use ssh port forwarding to tunnel file system connections through firewalls")
+
+ self.UseEncodingConverter = wx.CheckBox(self.tab_SharedFolders, -1, "Convert between client and server encodings")
+ self.ClientEncodingLabel = wx.StaticText(self.tab_SharedFolders, -1, "Client encoding:")
+ self.ClientEncoding = wx.ComboBox(self.tab_SharedFolders, -1, choices=_known_encodings, style=wx.CB_DROPDOWN|wx.CB_READONLY)
+ self.ServerEncodingLabel = wx.StaticText(self.tab_SharedFolders, -1, "Server encoding:")
+ self.ServerEncoding = wx.ComboBox(self.tab_SharedFolders, -1, choices=_known_encodings, style=wx.CB_DROPDOWN|wx.CB_READONLY)
+
if self.action == 'ADD':
self.OKButton = wx.Button(self, -1, "Add")
self.DefaultButton = wx.Button(self, -1, 'Defaults')
else:
self.OKButton = wx.Button(self, -1, "Save")
self.DefaultButton = wx.Button(self, -1, 'Reset')
+ self.OKButton.SetDefault()
self.CancelButton = wx.Button(self, -1, "Cancel")
self.__set_properties()
@@ -244,10 +253,15 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.Bind(wx.EVT_BUTTON, self.OnSelectSharedFolderPath, self.SharedFolderPathBrowseButton)
self.Bind(wx.EVT_BUTTON, self.OnAddSharedFolderPath, self.AddSharedFolderPathButton)
self.Bind(wx.EVT_BUTTON, self.OnDeleteSharedFolderPath, self.DeleteSharedFolderPathButton)
+ self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSharedFolderListItemSelected, self.SharedFoldersList)
+ self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnSharedFolderListItemDeselected, self.SharedFoldersList)
+ self.Bind(wx.EVT_TEXT, self.OnSharedFolderPathKeyPressed, self.SharedFolderPath)
+ self.Bind(wx.EVT_TEXT_ENTER, self.OnAddSharedFolderPath, self.SharedFolderPath)
+ self.Bind(wx.EVT_CHECKBOX, self.OnToggleEncodingConverter, self.UseEncodingConverter)
+ self.Bind(wx.EVT_CHECKBOX, self.OnToggleLocalFolderSharing, self.UseLocalFolderSharing)
self.Bind(wx.EVT_BUTTON, self.OnOKButton, self.OKButton)
self.Bind(wx.EVT_BUTTON, self.OnCancel, self.CancelButton)
self.Bind(wx.EVT_BUTTON, self.OnDefault, self.DefaultButton)
-
self.SetSize(self.GetBestSize())
self.Show(True)
@@ -320,7 +334,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.EnableSound.SetValue(1)
self.PulseAudio.SetMinSize((120, _textfield_height))
self.PulseAudio.SetValue(1)
- self.SoundTunnel.SetValue(1)
self.Arts.SetMinSize((120, _textfield_height))
self.DefaultSoundPort.SetValue(1)
self.esd.SetMinSize((120, 21))
@@ -328,8 +341,10 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.ClientSidePrinting.SetValue(1)
self.SharedFolderPath.SetMinSize((220, _textfield_height))
self.SharedFolderPathBrowseButton.SetSize(self.SharedFolderPathBrowseButton.GetBestSize())
- self.SharedFoldersList.SetMinSize((303, 300))
- self.SSHFSPortForwarding.SetValue(1)
+ self.SharedFoldersList.SetMinSize((303, 240))
+ self.ClientEncoding.SetMinSize((140, _textfield_height))
+ self.ServerEncoding.SetMinSize((140, _textfield_height))
+
self.OKButton.SetMinSize((60, 30))
self.CancelButton.SetMinSize((60, 30))
self.DefaultButton.SetMinSize((60, 30))
@@ -427,11 +442,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
sizer_2_2_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2_2_1.Add(self.LinkSpeed, 0, 0, 0)
sizer_2_2_2 = wx.GridSizer(1,5,0,0)
- #sizer_2_2_2.AddGrowableCol(0)
- #sizer_2_2_2.AddGrowableCol(1)
- #sizer_2_2_2.AddGrowableCol(2)
- #sizer_2_2_2.AddGrowableCol(3)
- #sizer_2_2_2.AddGrowableCol(4)
sizer_2_2_2.Add(self.ModemLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0)
sizer_2_2_2.Add(self.ISDNLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0)
sizer_2_2_2.Add(self.ADSLLabel, 0, wx.ALIGN_CENTRE_HORIZONTAL, 0)
@@ -504,7 +514,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
sizer_3_3_2_1.Add(self.esd, 0, 0, 0)
sizer_3_3_2.Add(sizer_3_3_2_1, 0, 0, 0)
sizer_3_3_2_2 = wx.BoxSizer(wx.VERTICAL)
- sizer_3_3_2_2.Add(self.SoundTunnel, 0, 0, 0)
sizer_3_3_2_2.Add(self.DefaultSoundPort, 0, 0, 0)
sizer_3_3_2_2_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_3_3_2_2_1.Add(self.SoundPortLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
@@ -527,23 +536,31 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
# FOLDERSHARING TAB
sizer_4 = wx.BoxSizer(wx.VERTICAL)
sizer_4_1 = wx.StaticBoxSizer(self.staticbox_FolderSharing, wx.VERTICAL)
- sizer_4_1_1 = wx.GridSizer(2, 2, 0, 0)
- sizer_4_1_1_1 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4_1_1_1.Add(self.SharedFolderPathLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1_1_1.Add(self.SharedFolderPath, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1_1_1.Add(self.SharedFolderPathBrowseButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1_1_2 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4_1_1_2.Add(self.AddSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1_1.Add(sizer_4_1_1_1, 0, wx.LEFT, 0, 0)
- sizer_4_1_1.Add(sizer_4_1_1_2, 0, wx.RIGHT, 0, 0)
+ sizer_4_1_1 = wx.BoxSizer(wx.HORIZONTAL)
+ sizer_4_1_1.Add(self.UseLocalFolderSharing, 0, 0, 0)
sizer_4_1_2 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4_1_2.Add(self.SharedFoldersList, 1, wx.EXPAND, 0)
+ sizer_4_1_2.Add(self.SharedFolderPathLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_2.Add(self.SharedFolderPath, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_2.Add(self.SharedFolderPathBrowseButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_2.Add(self.AddSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_2.Add(self.DeleteSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
sizer_4_1_3 = wx.BoxSizer(wx.HORIZONTAL)
- sizer_4_1_3.Add(self.DeleteSharedFolderPathButton, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1_3.Add(self.SSHFSPortForwarding, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
- sizer_4_1.Add(sizer_4_1_1, 0, 0, 0)
+ sizer_4_1_3.Add(self.SharedFoldersList, 1, wx.EXPAND, 0)
+ sizer_4_1_4 = wx.BoxSizer(wx.HORIZONTAL)
+ sizer_4_1_4.Add(self.UseEncodingConverter, 0, 0, 0)
+ sizer_4_1_5 = wx.BoxSizer(wx.HORIZONTAL)
+ sizer_4_1_5.Add(self.ClientEncodingLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_5.Add((8,0))
+ sizer_4_1_5.Add(self.ClientEncoding, 0, 0, 0)
+ sizer_4_1_5.Add((16,0))
+ sizer_4_1_5.Add(self.ServerEncodingLabel, 0, wx.ALIGN_CENTRE_VERTICAL, 0)
+ sizer_4_1_5.Add((8,0))
+ sizer_4_1_5.Add(self.ServerEncoding, 0, 0, 0)
+ sizer_4_1.Add(sizer_4_1_1, 0, wx.EXPAND, 0)
sizer_4_1.Add(sizer_4_1_2, 0, wx.EXPAND, 0)
sizer_4_1.Add(sizer_4_1_3, 0, wx.EXPAND, 0)
+ sizer_4_1.Add(sizer_4_1_4, 0, wx.EXPAND, 0)
+ sizer_4_1.Add(sizer_4_1_5, 0, wx.EXPAND, 0)
sizer_4.Add(sizer_4_1, 0, wx.EXPAND, 0)
self.tab_SharedFolders.SetSizer(sizer_4)
@@ -722,7 +739,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.KeyboardModel.Enable(True)
self.EnableSound.SetValue(self.profile_config['sound'])
- self.SoundTunnel.SetValue(self.profile_config['soundtunnel'])
self.DefaultSoundPort.SetValue(self.profile_config['defsndport'])
self.SoundPort.SetValue(self.profile_config['sndport'])
if self.profile_config['soundsystem'] == 'pulse':
@@ -733,7 +749,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.esd.SetValue(True)
if self.profile_config['sound']:
self.PulseAudio.Enable(True)
- self.SoundTunnel.Enable(True)
self.Arts.Enable(True)
self.esd.Enable(True)
self.DefaultSoundPort.Enable(True)
@@ -745,7 +760,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.SoundPort.Enable(False)
else:
self.PulseAudio.Enable(False)
- self.SoundTunnel.Enable(False)
self.Arts.Enable(False)
self.esd.Enable(False)
self.DefaultSoundPort.Enable(False)
@@ -753,7 +767,9 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.SoundPort.Enable(False)
self.ClientSidePrinting.SetValue(self.profile_config['print'])
- self.SSHFSPortForwarding.SetValue(self.profile_config['fstunnel'])
+
+ self.UseLocalFolderSharing.SetValue(self.profile_config['useexports'])
+ self._toggle_localFolderSharing()
self.SharedFoldersList.DeleteAllItems()
_shared_folders = self.profile_config['export'].strip().strip(',').strip()
@@ -763,6 +779,13 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
_item.SetData(wx.NewId())
_item.SetText(_shared_folder_path)
self.SharedFoldersList.InsertItem(_item)
+ self.AddSharedFolderPathButton.Enable(False)
+ self.DeleteSharedFolderPathButton.Enable(False)
+
+ self.UseEncodingConverter.SetValue(self.profile_config['useiconv'])
+ self.ClientEncoding.SetValue(self.profile_config['iconvfrom'])
+ self.ServerEncoding.SetValue(self.profile_config['iconvto'])
+ self._toggle_useEncodingConverter()
self.disable_EditConnected_options()
@@ -854,7 +877,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.profile_config['type'] = self.KeyboardModel.GetValue()
self.profile_config['sound'] = self.EnableSound.GetValue()
- self.profile_config['soundtunnel'] = self.SoundTunnel.GetValue()
self.profile_config['defsndport'] = self.DefaultSoundPort.GetValue()
self.profile_config['sndport'] = self.SoundPort.GetValue()
if self.PulseAudio.GetValue():
@@ -865,8 +887,8 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.profile_config['soundsystem'] = 'esd'
self.profile_config['print'] = self.ClientSidePrinting.GetValue()
- self.profile_config['fstunnel'] = self.SSHFSPortForwarding.GetValue()
+ self.profile_config['useexports'] = self.UseLocalFolderSharing.GetValue()
_shared_folders = []
_item_id = self.SharedFoldersList.GetTopItem()
while _item_id != -1:
@@ -874,6 +896,9 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
_shared_folders.append(_item.GetText())
_item_id = self.SharedFoldersList.GetNextItem(_item_id)
self.profile_config['export'] = ','.join(_shared_folders)
+ self.profile_config['useiconv'] = self.UseEncodingConverter.GetValue()
+ self.profile_config['iconvfrom'] = self.ClientEncoding.GetValue()
+ self.profile_config['iconvto'] = self.ServerEncoding.GetValue()
def OnIconChange(self, event):
_share_location = os.path.split(_icons_location)[0]
@@ -1064,7 +1089,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.PulseAudio.Enable(True)
self.Arts.Enable(True)
self.esd.Enable(True)
- self.SoundTunnel.Enable(True)
self.DefaultSoundPort.Enable(True)
if self.DefaultSoundPort.GetValue() is False:
self.SoundPortLabel.Enable(True)
@@ -1073,7 +1097,6 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.PulseAudio.Enable(False)
self.Arts.Enable(False)
self.esd.Enable(False)
- self.SoundTunnel.Enable(False)
self.DefaultSoundPort.Enable(False)
self.SoundPortLabel.Enable(False)
self.SoundPort.Enable(False)
@@ -1104,6 +1127,30 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
else:
self.DisplayDPI.Enable(False)
+ def _toggle_localFolderSharing(self):
+ if self.UseLocalFolderSharing.GetValue():
+ self.SharedFolderPathLabel.Enable(True)
+ self.SharedFolderPath.Enable(True)
+ self.SharedFolderPathBrowseButton.Enable(True)
+ self.SharedFoldersList.Enable(True)
+ self.UseEncodingConverter.Enable(True)
+ self._toggle_useEncodingConverter()
+ else:
+ self.AddSharedFolderPathButton.Enable(False)
+ self.DeleteSharedFolderPathButton.Enable(False)
+ self.SharedFolderPathLabel.Enable(False)
+ self.SharedFolderPath.Enable(False)
+ self.SharedFolderPathBrowseButton.Enable(False)
+ self.SharedFoldersList.Enable(False)
+ self.UseEncodingConverter.Enable(False)
+ self.ClientEncodingLabel.Enable(False)
+ self.ClientEncoding.Enable(False)
+ self.ServerEncodingLabel.Enable(False)
+ self.ServerEncoding.Enable(False)
+
+ def OnToggleLocalFolderSharing(self, event):
+ self._toggle_localFolderSharing()
+
def OnSelectSharedFolderPath(self, event):
shared_folder = os.path.expanduser('~')
if not os.path.exists(shared_folder):
@@ -1116,6 +1163,15 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
# This returns a Python list of files that were selected.
self.SharedFolderPath.SetValue(dlg.GetPath())
+ def OnSharedFolderListItemSelected(self, event):
+ self.DeleteSharedFolderPathButton.Enable(True)
+
+ def OnSharedFolderListItemDeselected(self, event):
+ self.DeleteSharedFolderPathButton.Enable(False)
+
+ def OnSharedFolderPathKeyPressed(self, event):
+ self.AddSharedFolderPathButton.Enable(True)
+
def OnAddSharedFolderPath(self, event):
_shared_folder_path = self.SharedFolderPath.GetValue()
if _shared_folder_path and (self.SharedFoldersList.FindItem(0, _shared_folder_path) == -1):
@@ -1123,10 +1179,28 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
_item.SetData(wx.NewId())
_item.SetText(_shared_folder_path)
self.SharedFoldersList.InsertItem(_item)
+ self.SharedFolderPath.SetValue('')
+ self.AddSharedFolderPathButton.Enable(False)
def OnDeleteSharedFolderPath(self, event):
_item = self.SharedFoldersList.GetFocusedItem()
self.SharedFoldersList.DeleteItem(_item)
+ self.DeleteSharedFolderPathButton.Enable(False)
+
+ def _toggle_useEncodingConverter(self):
+ if self.UseEncodingConverter.GetValue():
+ self.ClientEncodingLabel.Enable(True)
+ self.ClientEncoding.Enable(True)
+ self.ServerEncodingLabel.Enable(True)
+ self.ServerEncoding.Enable(True)
+ else:
+ self.ClientEncodingLabel.Enable(False)
+ self.ClientEncoding.Enable(False)
+ self.ServerEncodingLabel.Enable(False)
+ self.ServerEncoding.Enable(False)
+
+ def OnToggleEncodingConverter(self, event):
+ self._toggle_useEncodingConverter()
def __validate(self):
validateOk = True
@@ -1166,6 +1240,8 @@ class PyHocaGUI_ProfileManager(wx.Dialog):
self.Close()
self.Destroy()
+ wx.EndBusyCursor()
+
def OnCancel(self, event):
self.Close()
self.Destroy()
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)).
More information about the x2go-commits
mailing list