This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository pyhoca-gui. commit fa352bca6b3e422af069a8a258235351a0626f36 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Dec 2 10:27:43 2019 +0100 Port to wxPython 4.0.x. --- pyhoca/wxgui/about.py | 7 ++++++- pyhoca/wxgui/frontend.py | 43 +++++++++++++++++++++++++------------------ pyhoca/wxgui/launcher.py | 6 ++++-- pyhoca/wxgui/menus_taskbar.py | 32 +++++++++++++++++++++++++++++++- pyhoca/wxgui/splash.py | 26 ++++++++++++++++++-------- pyhoca/wxgui/taskbar.py | 20 ++++++++++++++++---- 6 files changed, 100 insertions(+), 34 deletions(-) diff --git a/pyhoca/wxgui/about.py b/pyhoca/wxgui/about.py index ceadb65..414d5e5 100644 --- a/pyhoca/wxgui/about.py +++ b/pyhoca/wxgui/about.py @@ -29,6 +29,8 @@ import x2go # wxPython import wx +wx_major = int(wx.__version__.split('.')[0]) + # PyHoca-GUI modules from . import basepath @@ -114,7 +116,10 @@ class PyHocaGUI_AboutFrame(wx.Frame): icon_file = '%s/%s/%s/%s' % (basepath.icons_basepath, icon_folder, icon_size, icon_name) img = wx.Image(icon_file) - icon = wx.IconFromBitmap(img.ConvertToBitmap()) + if wx_major < 4: + icon = wx.IconFromBitmap(img.ConvertToBitmap()) + else: + icon = wx.Icon(img.ConvertToBitmap()) self.icon = self.SetIcon(icon) self.CenterOnScreen() diff --git a/pyhoca/wxgui/frontend.py b/pyhoca/wxgui/frontend.py index e65b227..dfc1e76 100644 --- a/pyhoca/wxgui/frontend.py +++ b/pyhoca/wxgui/frontend.py @@ -23,6 +23,7 @@ modules ={} import os import re +import sys # Python X2Go import x2go @@ -51,7 +52,9 @@ from . import sessiontitle from . import listdesktops from . import serverinfo -wx.SetDefaultPyEncoding("utf-8") +wx_major = int(wx.__version__.split('.')[0]) +if wx_major < 4: + wx.SetDefaultPyEncoding("utf-8") #def SetExitHandler(func): # """\ @@ -276,11 +279,11 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): gevent.sleep(self.gevent_sleep_when_idle) except KeyboardInterrupt: self._pyhoca_logger('Received Ctrl-C keyboard interrupt... Wait till %s has exited cleanly.' % self.appname, loglevel=x2go.loglevel_NOTICE) - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() except SystemExit: self._pyhoca_logger('Received SIGTERM signal... Wait till %s has exited cleanly.' % self.appname, loglevel=x2go.loglevel_NOTICE) - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() evt.RequestMore() return True @@ -319,8 +322,12 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): self.about_pythonx2go.Show(False) self.taskbar = taskbar.PyHocaGUI_TaskBarIcon(self.about) - self.taskbar.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, lambda _Show: self.about.Show(True)) - self.taskbar.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.taskbar.CreateSessionManagerPopupMenu) + if wx_major < 4: + self.taskbar.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, lambda _Show: self.about.Show(True)) + self.taskbar.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.taskbar.CreateSessionManagerPopupMenu) + else: + self.taskbar.Bind(wx.adv.EVT_TASKBAR_LEFT_DCLICK, lambda _Show: self.about.Show(True)) + self.taskbar.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.taskbar.CreateSessionManagerPopupMenu) if x2go.X2GOCLIENT_OS in ('Linux', 'Mac'): if notify.notification_service_available(): @@ -450,7 +457,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): Currently unused. """ - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() # wx.App's OnExit method @@ -499,7 +506,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): else: self.notifier.send(self.appname, _('Exiting application...'), icon='application-exit', timeout=10000) self._eventid_profilenames_map[evt.GetId()] = self.args.session_profile - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def _init_pubapp_session(self, session_uuid=None, profile_name=None): @@ -791,7 +798,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): raise if connect_failed and self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() self._remember_shared_folders[profile_name] = self.get_profile_config(profile_name, 'restoreexports') @@ -1132,7 +1139,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): if self.exit_on_disconnect: self._pyhoca_logger('Exiting %s because %s got disconnected.' % (self.appname, profile_name), loglevel=x2go.loglevel_NOTICE) - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() else: self.notifier.send(_('%s - disconnect') % profile_name, _('X2Go Profile is now disconnected.'), icon='auth_disconnect', timeout=4000) @@ -1616,7 +1623,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): except KeyError: pass if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_on_failing_SFTP_client(self, profile_name='UNKNOWN', **kwargs): @@ -1634,7 +1641,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): except KeyError: pass if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_session_startup_failed(self, profile_name='UNKNOWN', **kwargs): @@ -1647,7 +1654,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ self.notifier.send(_('%s - session failure') % profile_name, _('The session startup failed.'), icon='session_error', timeout=10000) if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def session_registration_failed(self, profile_name='UNKNOWN', **kwargs): @@ -1660,7 +1667,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ self.notifier.send(_('%s - session failure') % profile_name, _('The session initialization failed.'), icon='session_error', timeout=10000) if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_desktop_sharing_denied(self, profile_name='UNKNOWN', **kwargs): @@ -1673,7 +1680,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ self.notifier.send(_('%s - desktop sharing failure') % profile_name, _('Desktop sharing was denied by the other user or\nboth of you have insufficient privileges to share one another\'s desktop.'), icon='session_error', timeout=10000) if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_list_desktops_timeout(self, profile_name='UNKNOWN', **kwargs): @@ -1698,7 +1705,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ self.notifier.send(_('%s - desktop sharing failed') % profile_name, _('The desktop %s is not available for sharing (anymore).') % desktop, icon='session_warning', timeout=10000) if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_no_such_command(self, cmd, profile_name='UNKNOWN', session_name='UNKNOWN', **kwargs): @@ -1718,7 +1725,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): else: self.notifier.send(_('%s - session failure') % profile_name, _('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() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_rforward_request_denied(self, profile_name='UNKNOWN', session_name='UNKNOWN', server_port=0, **kwargs): @@ -1735,7 +1742,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): """ self.notifier.send(_('%s - session warning') % profile_name, _('Reverse TCP port forwarding request for session %s to server port %s has been denied.') % (session_name, server_port), icon='session_warning', timeout=10000) if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_forwarding_tunnel_setup_failed(self, profile_name='UNKNOWN', session_name='UNKNOWN', chain_host='UNKNOWN', chain_port=0, subsystem=None, **kwargs): @@ -1770,7 +1777,7 @@ class PyHocaGUI(wx.App, x2go.X2GoClient): except ValueError: pass if self.exit_on_disconnect: - self.WakeUpIdle() + if wx_major < 4: self.WakeUpIdle() self.ExitMainLoop() def HOOK_pulseaudio_not_supported_in_RDPsession(self, **kwargs): diff --git a/pyhoca/wxgui/launcher.py b/pyhoca/wxgui/launcher.py index 91e2d94..3cbd4ad 100644 --- a/pyhoca/wxgui/launcher.py +++ b/pyhoca/wxgui/launcher.py @@ -31,6 +31,8 @@ import copy import wx +wx_major = int(wx.__version__.split('.')[0]) + # we need to register a wx.App() instance before we load any # of the X2Go modules. When importing x2go.*, gevent.monkey_patch_all() # is called which seems to break wxPython 3.0... @@ -403,11 +405,11 @@ VERSION: %s thisPyHocaGUI.MainLoop() except KeyboardInterrupt: if thisPyHocaGUI is not None: - thisPyHocaGUI.WakeUpIdle() + if wx_major < 4: thisPyHocaGUI.WakeUpIdle() thisPyHocaGUI.ExitMainLoop() except SystemExit: if thisPyHocaGUI is not None: - thisPyHocaGUI.WakeUpIdle() + if wx_major < 4: thisPyHocaGUI.WakeUpIdle() thisPyHocaGUI.ExitMainLoop() self.remove_pidfile() diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py index c0b1519..93bee28 100644 --- a/pyhoca/wxgui/menus_taskbar.py +++ b/pyhoca/wxgui/menus_taskbar.py @@ -29,6 +29,14 @@ import x2go.x2go_exceptions from . import basepath +wx_major = int(wx.__version__.split('.')[0]) + +def _legacy_wrap_AppendMenu(instance, *args, **kwargs): + if wx_major < 4: + return wx.Menu.AppendMenu(instance, *args, **kwargs) + else: + return wx.Menu.Append(instance, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarManageProfile(wx.Menu): """\ Individual profile management submenu: copy, use as template or delete session profile. @@ -84,6 +92,12 @@ class PyHocaGUI_Menu_TaskbarManageProfile(wx.Menu): self.Append(ID_DELETEPROFILE, _("Delete Profile")) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileDelete, id=ID_DELETEPROFILE) + def AppendMenu(self, *args, **kwargs): + if wx_major < 4: + return wx.Menu.AppendMenu(self, *args, **kwargs) + else: + return wx.Menu.Append(self, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu): """\ @@ -170,6 +184,9 @@ class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu): self.Append(ID_EXIT, _("E&xit")) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnTaskbarExit, id=ID_EXIT) + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarSessionActions(wx.Menu): """\ @@ -310,6 +327,9 @@ class PyHocaGUI_Menu_TaskbarSessionActions(wx.Menu): self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionSuspend, id=ID_SUSPENDSESSION) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionTerminate, id=ID_TERMINATESESSION) + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarProfileSharedFolders(wx.Menu): """\ @@ -425,6 +445,9 @@ class PyHocaGUI_Menu_LaunchSingleApplication(wx.Menu): self.Append(_app_id, _available_applications[application]) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnApplicationStart, id=_app_id) + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) + def _generate_Menu_PublishedApplications(_PyHocaGUI, caller=None, profile_name=None, session_name=None): """\ @@ -861,6 +884,9 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): self.Append(ID_EXIT, _("E&xit")) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnTaskbarExit, id=ID_EXIT) + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu): """\ @@ -1019,6 +1045,9 @@ class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu): self._pyhoca_logger('Updating UI, re-enabling session profile %s' % profile_name) self.Enable(id=evt.GetId(), enable=True) + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) + class PyHocaGUI_Menu_TaskbarSessionManager(wx.Menu): """\ @@ -1086,4 +1115,5 @@ class PyHocaGUI_Menu_TaskbarSessionManager(wx.Menu): self.Append(ID_EXIT, _("E&xit")) self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnTaskbarExit, id=ID_EXIT) - + def AppendMenu(self, *args, **kwargs): + _legacy_wrap_AppendMenu(self, *args, **kwargs) diff --git a/pyhoca/wxgui/splash.py b/pyhoca/wxgui/splash.py index c741560..46c202d 100644 --- a/pyhoca/wxgui/splash.py +++ b/pyhoca/wxgui/splash.py @@ -22,10 +22,20 @@ import wx import os +wx_major = int(wx.__version__.split('.')[0]) +if wx_major < 4: + from wx import SplashScreen as _SplashScreen + _wx_SPLASH_CENTRE_ON_SCREEN = wx.SPLASH_CENTRE_ON_SCREEN + _wx_SPLASH_TIMEOUT = wx.SPLASH_TIMEOUT +else: + from wx.adv import SplashScreen as _SplashScreen + _wx_SPLASH_CENTRE_ON_SCREEN = wx.adv.SPLASH_CENTRE_ON_SCREEN + _wx_SPLASH_TIMEOUT = wx.adv.SPLASH_TIMEOUT + # PyHoca-GUI modules from . import basepath -class PyHocaGUI_SplashScreen(wx.SplashScreen): +class PyHocaGUI_SplashScreen(_SplashScreen): """\ L{PyHocaGUI} splash screen that gets shown an application startup. @@ -57,13 +67,13 @@ class PyHocaGUI_SplashScreen(wx.SplashScreen): splash_wximage.Rescale(400, int(float(400)/splash_wximage.Width*splash_wximage.Height)) splash_wxbitmap = splash_wximage.ConvertToBitmap() - wx.SplashScreen.__init__(self, - splash_wxbitmap, - splashStyle=wx.SPLASH_CENTRE_ON_SCREEN|wx.SPLASH_TIMEOUT, - milliseconds=5000, - parent=None, - style=wx.SIMPLE_BORDER|wx.STAY_ON_TOP|wx.FRAME_NO_TASKBAR - ) + _SplashScreen.__init__(self, + splash_wxbitmap, + splashStyle=_wx_SPLASH_CENTRE_ON_SCREEN|_wx_SPLASH_TIMEOUT, + milliseconds=5000, + parent=None, + style=wx.SIMPLE_BORDER|wx.STAY_ON_TOP|wx.FRAME_NO_TASKBAR + ) self.Bind(wx.EVT_CLOSE, self.OnClose) def OnClose(self, evt): diff --git a/pyhoca/wxgui/taskbar.py b/pyhoca/wxgui/taskbar.py index 23eeab1..5985979 100644 --- a/pyhoca/wxgui/taskbar.py +++ b/pyhoca/wxgui/taskbar.py @@ -25,6 +25,12 @@ modules ={} import x2go import wx +wx_major = int(wx.__version__.split('.')[0]) +if wx_major < 4: + from wx import TaskBarIcon as _TaskBarIcon +else: + from wx.adv import TaskBarIcon as _TaskBarIcon + import os # Warning: If pyflakes says you should delete these 2 lines, @@ -77,11 +83,14 @@ def MakeIcon(icon_name, fallback_name='PyHoca-GUI_trayicon.png', appname="PyHoca icon_file = '%s/%s/%s/%s' % (_icons_location, icon_folder, icon_size, fallback_name) img = wx.Image(icon_file) - icon = wx.IconFromBitmap(img.ConvertToBitmap()) + if wx_major < 4: + icon = wx.IconFromBitmap(img.ConvertToBitmap()) + else: + icon = wx.Icon(img.ConvertToBitmap()) return icon -class PyHocaGUI_TaskBarIcon(wx.TaskBarIcon): +class PyHocaGUI_TaskBarIcon(_TaskBarIcon): """\ Class for the L{PyHocaGUI} taskbar icon. @@ -96,7 +105,7 @@ class PyHocaGUI_TaskBarIcon(wx.TaskBarIcon): @type about: C{obj} """ - wx.TaskBarIcon.__init__(self) + _TaskBarIcon.__init__(self) self._PyHocaGUI = about._PyHocaGUI self._pyhoca_logger = self._PyHocaGUI._pyhoca_logger self._pyhoca_logger('start TaskBarIcon of type: %s' % (wx.PlatformInfo, ), loglevel=x2go.loglevel_INFO) @@ -175,7 +184,10 @@ class PyHocaGUI_TaskBarIcon(wx.TaskBarIcon): @rtype: C{obj} """ - self.menu_optionsmanager = self.PopupMenu(menus_taskbar.PyHocaGUI_Menu_TaskbarOptionsManager(self._PyHocaGUI, caller=self,)) + if wx_major < 4: + self.menu_optionsmanager = self.PopupMenu(menus_taskbar.PyHocaGUI_Menu_TaskbarOptionsManager(self._PyHocaGUI, caller=self,)) + else: + self.menu_optionsmanager = menus_taskbar.PyHocaGUI_Menu_TaskbarOptionsManager(self._PyHocaGUI, caller=self,) return self.menu_optionsmanager def Close(self): -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/pyhoca-gui.git