The branch, master has been updated via 0ede3ea2232bbd63e6d13a22d858ada9543c6916 (commit) from b4c4b60aa4e9adb76678117f9d3266a461e6ac76 (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 0ede3ea2232bbd63e6d13a22d858ada9543c6916 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Tue Mar 13 16:06:55 2012 +0100 Implement single session profile support (--single-session-profile Boolean command line option). ----------------------------------------------------------------------- Summary of changes: debian/changelog | 2 + icons/PyHoca/22x22/application-exit.png | Bin 0 -> 870 bytes icons/PyHoca/32x32/application-exit.png | Bin 0 -> 1289 bytes icons/PyHoca/scalable/application-exit.svg | 332 +++++++++++++++++++ icons_symlinked/PyHoca/32x32/application-exit.png | 1 + .../PyHoca/scalable/application-exit.svg | 1 + pyhoca-gui | 4 + pyhoca/wxgui/frontend.py | 44 ++- pyhoca/wxgui/menus_taskbar.py | 335 +++++++++++--------- pyhoca/wxgui/taskbar.py | 5 +- 10 files changed, 553 insertions(+), 171 deletions(-) create mode 100644 icons/PyHoca/22x22/application-exit.png create mode 100644 icons/PyHoca/32x32/application-exit.png create mode 100644 icons/PyHoca/scalable/application-exit.svg create mode 120000 icons_symlinked/PyHoca/32x32/application-exit.png create mode 120000 icons_symlinked/PyHoca/scalable/application-exit.svg The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 12e28ff..8ef01f5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -63,6 +63,8 @@ pyhoca-gui (0.1.2.0-0~x2go1) UNRELEASED; urgency=low - Published Applications on MS Windows: icon size is 16x16. - Catch X2GoSessionRegistryException if used session uuid is not valid anymore. + - Implement single session profile support (--single-session-profile + Boolean command line option). * Depend on Python X2Go 0.1.2.0. * Install GNOME icons via dh_links. * Install X2Go icons with explicit install paths. diff --git a/icons/PyHoca/22x22/application-exit.png b/icons/PyHoca/22x22/application-exit.png new file mode 100644 index 0000000..ed77cff Binary files /dev/null and b/icons/PyHoca/22x22/application-exit.png differ diff --git a/icons/PyHoca/32x32/application-exit.png b/icons/PyHoca/32x32/application-exit.png new file mode 100644 index 0000000..affe56b Binary files /dev/null and b/icons/PyHoca/32x32/application-exit.png differ diff --git a/icons/PyHoca/scalable/application-exit.svg b/icons/PyHoca/scalable/application-exit.svg new file mode 100644 index 0000000..56eedfa --- /dev/null +++ b/icons/PyHoca/scalable/application-exit.svg @@ -0,0 +1,332 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48px" + height="48px" + id="svg7212" + sodipodi:version="0.32" + inkscape:version="0.46" + sodipodi:docname="drawing-3.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs7214"> + <linearGradient + id="linearGradient9896"> + <stop + id="stop9898" + offset="0" + style="stop-color:#cecece;stop-opacity:1;" /> + <stop + id="stop9900" + offset="1.0000000" + style="stop-color:#9e9e9e;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="18.064039" + x2="33.710651" + y1="21.511185" + x1="31.078955" + id="linearGradient9902" + xlink:href="#linearGradient9896" + inkscape:collect="always" + gradientTransform="translate(-3.6735026e-4,-2.381e-4)" /> + <linearGradient + id="linearGradient9880" + inkscape:collect="always"> + <stop + id="stop9882" + offset="0" + style="stop-color:#525252;stop-opacity:1;" /> + <stop + id="stop9884" + offset="1" + style="stop-color:#525252;stop-opacity:0;" /> + </linearGradient> + <linearGradient + gradientTransform="translate(-1.1164876,-2.381e-4)" + gradientUnits="userSpaceOnUse" + y2="24.764584" + x2="34.007416" + y1="19.107729" + x1="31.852951" + id="linearGradient9886" + xlink:href="#linearGradient9880" + inkscape:collect="always" /> + <linearGradient + id="linearGradient9868"> + <stop + style="stop-color:#4e4e4e;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop9870" /> + <stop + style="stop-color:#616161;stop-opacity:0.0000000;" + offset="1.0000000" + id="stop9872" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.565823,0,0,1.403262,-37.783598,-9.4835408)" + r="9.7227182" + fy="7.1396070" + fx="27.883883" + cy="7.1396070" + cx="27.883883" + id="radialGradient9876" + xlink:href="#linearGradient9868" + inkscape:collect="always" /> + <linearGradient + id="linearGradient9888" + inkscape:collect="always"> + <stop + id="stop9890" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop9892" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="43.449947" + x2="19.755548" + y1="13.663074" + x1="8.7600641" + id="linearGradient9894" + xlink:href="#linearGradient9888" + inkscape:collect="always" + gradientTransform="translate(-3.6735026e-4,-2.381e-4)" /> + <linearGradient + id="linearGradient3197"> + <stop + style="stop-color:#da3f3f;stop-opacity:1;" + offset="0" + id="stop3199" /> + <stop + style="stop-color:#c22f2f;stop-opacity:1;" + offset="1" + id="stop3201" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3197" + id="linearGradient3203" + x1="11.131293" + y1="15.165678" + x2="11.118231" + y2="32.401405" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-3.6735026e-4,-2.381e-4)" /> + <linearGradient + inkscape:collect="always" + id="linearGradient8662"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop8664" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop8666" /> + </linearGradient> + <radialGradient + r="15.644737" + fy="36.421127" + fx="24.837126" + cy="36.421127" + cx="24.837126" + gradientTransform="matrix(1,0,0,0.536723,0,16.87306)" + gradientUnits="userSpaceOnUse" + id="radialGradient9826" + xlink:href="#linearGradient8662" + inkscape:collect="always" /> + <linearGradient + id="linearGradient9854"> + <stop + id="stop9856" + offset="0.0000000" + style="stop-color:#4e4e4e;stop-opacity:1.0000000;" /> + <stop + id="stop9858" + offset="1.0000000" + style="stop-color:#ababab;stop-opacity:1.0000000;" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="27.759069" + x2="18.031221" + y1="19.804117" + x1="46.845825" + id="linearGradient9864" + xlink:href="#linearGradient9854" + inkscape:collect="always" + gradientTransform="translate(-3.6735026e-4,-2.381e-4)" /> + <linearGradient + id="linearGradient9842" + inkscape:collect="always"> + <stop + id="stop9844" + offset="0" + style="stop-color:#727e0a;stop-opacity:1;" /> + <stop + id="stop9846" + offset="1" + style="stop-color:#727e0a;stop-opacity:0;" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(1.025512,0,0,0.648342,-0.8658636,15.630022)" + gradientUnits="userSpaceOnUse" + y2="28.112619" + x2="30.935921" + y1="43.757359" + x1="30.935921" + id="linearGradient9848" + xlink:href="#linearGradient9842" + inkscape:collect="always" /> + <linearGradient + id="linearGradient9830"> + <stop + id="stop9832" + offset="0.0000000" + style="stop-color:#505050;stop-opacity:1.0000000;" /> + <stop + id="stop9834" + offset="1.0000000" + style="stop-color:#181818;stop-opacity:1.0000000;" /> + </linearGradient> + <radialGradient + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.0182701,0,0,2.643808,-144.57335,-62.192134)" + r="16.321514" + fy="40.545052" + fx="93.780037" + cy="40.545052" + cx="93.780037" + id="radialGradient9836" + xlink:href="#linearGradient9830" + inkscape:collect="always" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7" + inkscape:cx="24" + inkscape:cy="24" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="641" + inkscape:window-height="690" + inkscape:window-x="474" + inkscape:window-y="258" /> + <metadata + id="metadata7217"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <rect + ry="1.0048841" + rx="0.99447322" + y="1" + x="12" + height="45" + width="35" + id="rect8242" + style="opacity:0.7;fill:#000000;fill-opacity:0.31372549;fill-rule:evenodd;stroke:none;stroke-width:1.00001979;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <rect + ry="0.70808184" + rx="0.70720309" + y="2.5000091" + x="13.50001" + height="41.999981" + width="31.999981" + id="rect9828" + style="opacity:1;fill:url(#radialGradient9836);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00001979;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <rect + y="31.736305" + x="13.999632" + height="12.263458" + width="30.999998" + id="rect9840" + style="opacity:1;fill:url(#linearGradient9848);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <path + sodipodi:nodetypes="ccccc" + id="path9852" + d="M 14.037294,43.944621 L 13.998461,3.0542871 L 33.940757,3.0984813 L 33.984951,33.017937 L 14.037294,43.944621 z" + style="opacity:1;fill:url(#linearGradient9864);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:0.42222224;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" + d="M 13.969433,43.944621 L 34.117535,33.062131 L 15.555981,41.989354 L 15.555981,3.0100925 L 13.985518,3.0100925 L 13.969433,43.944621 z" + id="path1360" + inkscape:r_cx="true" + inkscape:r_cy="true" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:type="arc" + style="opacity:0.29946522;fill:url(#radialGradient9826);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + id="path8660" + sodipodi:cx="24.837126" + sodipodi:cy="36.421127" + sodipodi:rx="15.644737" + sodipodi:ry="8.3968935" + d="M 40.481863,36.421127 A 15.644737,8.3968935 0 1 1 9.1923885,36.421127 A 15.644737,8.3968935 0 1 1 40.481863,36.421127 z" + transform="matrix(0.77849,0,0,0.77849,-7.5801826,1.5979009)" /> + <path + style="opacity:1;fill:url(#linearGradient3203);fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 1.7314304,17.593581 L 1.7314304,30.355126 L 9.663735,30.355126 L 9.663735,36.175909 L 21.887377,23.952265 L 9.590974,11.655863 L 9.590974,17.596829 L 1.7314304,17.593581 z" + id="path8643" + sodipodi:nodetypes="cccccccc" /> + <path + sodipodi:nodetypes="cccccccc" + id="path8658" + d="M 2.7189574,18.399747 L 2.7189574,29.535791 L 10.552776,29.535791 L 10.552776,33.793741 L 20.404229,23.948168 L 10.488209,13.684476 L 10.488209,18.402629 L 2.7189574,18.399747 z" + style="opacity:0.48128339;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9894);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + style="opacity:1;fill:url(#radialGradient9876);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" + d="M 14.044443,43.757121 L 13.999632,3.0542871 L 33.940757,3.0542871 L 33.761511,33.68085 L 14.044443,43.757121 z" + id="path9866" + sodipodi:nodetypes="ccccc" + inkscape:r_cx="true" + inkscape:r_cy="true" /> + <path + sodipodi:nodetypes="cccsscc" + id="path9878" + d="M 29.642657,18.455957 L 31.565104,20.908733 L 30.106696,25.725898 C 30.106696,25.725898 30.371861,27.2285 31.145259,26.212034 C 31.918657,25.195568 34.117714,22.62998 33.730618,20.754053 C 33.443356,19.361937 32.647861,18.699025 32.647861,18.699025 L 29.642657,18.455957 z" + style="opacity:1;fill:url(#linearGradient9886);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + <path + sodipodi:nodetypes="csccscs" + id="path9862" + d="M 31.476716,17.351102 C 31.476716,17.351102 33.639986,18.35282 33.708521,19.229355 C 33.810302,20.531077 29.46588,24.665238 29.46588,24.665238 C 28.957647,25.283956 28.117958,24.731529 28.581997,24.134908 C 28.581997,24.134908 32.048601,20.016935 31.830269,19.693393 C 31.556658,19.287936 29.863628,18.65483 29.863628,18.65483 C 28.847162,17.90353 30.131249,16.349367 31.476716,17.351102 z" + style="opacity:1;fill:url(#linearGradient9902);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /> + </g> +</svg> diff --git a/icons_symlinked/PyHoca/32x32/application-exit.png b/icons_symlinked/PyHoca/32x32/application-exit.png new file mode 120000 index 0000000..b89298d --- /dev/null +++ b/icons_symlinked/PyHoca/32x32/application-exit.png @@ -0,0 +1 @@ +/usr/share/icons/gnome-colors-common/32x32/actions/application-exit.png \ No newline at end of file diff --git a/icons_symlinked/PyHoca/scalable/application-exit.svg b/icons_symlinked/PyHoca/scalable/application-exit.svg new file mode 120000 index 0000000..14a727b --- /dev/null +++ b/icons_symlinked/PyHoca/scalable/application-exit.svg @@ -0,0 +1 @@ +/usr/share/icons/gnome-colors-common/scalable/actions/application-exit.svg \ No newline at end of file diff --git a/pyhoca-gui b/pyhoca-gui index 01e6ad2..7b8ccab 100755 --- a/pyhoca-gui +++ b/pyhoca-gui @@ -173,6 +173,7 @@ x2go_gui_options = [ {'args':['--non-interactive'], 'default': False, 'action': 'store_true', 'help': 'run the session manager in non-interactive mode, this option sets the following options to true: --restricted-trayicon, --start-on-connect, --resume-all-on-connect, --exit-on-disconnect, --disconnect-on-suspend and --disconnect-on-terminate', }, {'args':['--auto-connect'], 'default': False, 'action': 'store_true', 'help': 'connect sessions via SSH pubkey authentication if possible', }, {'args':['--show-profile-metatypes'], 'default': False, 'action': 'store_true', 'help': 'show descriptive meta information on session profiles in menus (NOTE: this makes menus appear a bit more sluggish, use it mostly for debugging)', }, + {'args':['--single-session-profile'], 'default': False, 'action': 'store_true', 'help': 'disable support of handling multiple session profiles', }, {'args':['--restricted-trayicon'], 'default': False, 'action': 'store_true', 'help': 'restricts session manager\'s main icon functionality to information window and application exit', }, {'args':['--start-on-connect'], 'default': False, 'action': 'store_true', 'help': 'start a session directly after authentication if no session is currently running/suspended', }, {'args':['--exit-on-disconnect'], 'default': False, 'action': 'store_true', 'help': 'exit the session manager after a server connection has died', }, @@ -269,6 +270,9 @@ def parseargs(): if a.username is None: a.username = _CURRENT_LOCAL_USER + if a.single_session_profile and a.session_profile is None: + runtime_error('The --single-session-profile option requires naming of a specific session profile!', parser=p) + if a.non_interactive: if a.session_profile is None: runtime_error('In non-interactive mode you have to use the --session-profile option (or -P) to specify a certain session profile name!', parser=p) diff --git a/pyhoca/wxgui/frontend.py b/pyhoca/wxgui/frontend.py index f028c23..e07fa11 100644 --- a/pyhoca/wxgui/frontend.py +++ b/pyhoca/wxgui/frontend.py @@ -84,6 +84,7 @@ class PyHocaGUI(wx.App, x2go.X2goClient): self.version = version self.args = args + if x2go.defaults.X2GOCLIENT_OS == 'Windows': if self.args.lang is not None: self.lang = self.args.lang @@ -103,6 +104,7 @@ class PyHocaGUI(wx.App, x2go.X2goClient): else: self._pyhoca_liblogger = copy.deepcopy(liblogger) + _x2goclient_kwargs = { 'use_listsessions_cache': True, 'auto_update_listsessions_cache': True, @@ -152,13 +154,11 @@ class PyHocaGUI(wx.App, x2go.X2goClient): self.logon_window_position_x = self.logon_window_position_y = None x2go.X2goClient.__init__(self, **_x2goclient_kwargs) - # We register one session per available session profile. - # These registered sessions will be used to access the profile's - # ,,control'' sessions at first. Later, any session can be used - # to access the profile's control session. - self.register_all_session_profiles(return_objects=True) wx.App.__init__(self) + if not self.args.disable_splash: + splash.PyHocaGUI_SplashScreen() + self.Bind(wx.EVT_IDLE, self.OnIdle) @@ -173,9 +173,6 @@ class PyHocaGUI(wx.App, x2go.X2goClient): self.SetVendorName(self.vendorname) self.startGUI() - if not self.args.disable_splash: - splash.PyHocaGUI_SplashScreen() - wx.EndBusyCursor() return True @@ -255,7 +252,7 @@ class PyHocaGUI(wx.App, x2go.X2goClient): self._pyhoca_logger('the current release of %s does not support client configuration' % self.appname, loglevel=x2go.log.loglevel_WARN) self.options_disabled = True - if self.args.auto_connect: + if self.args.auto_connect or self.args.single_session_profile: gevent.spawn(self._auto_connect) if self.args.session_profile: @@ -276,6 +273,10 @@ class PyHocaGUI(wx.App, x2go.X2goClient): # wait for splash to appear if not self.args.disable_splash: gevent.sleep(1) + if not self.args.single_session_profile: + self._X2goClient__register_all_session_profiles() + else: + self._X2goClient__register_session(profile_name=self.args.session_profile) for session_uuid in self._X2goClient__client_registered_sessions(return_objects=False): if self._X2goClient__session_can_auto_connect(session_uuid): self._pyhoca_logger('auto-connecting to %s session profile' % self.get_session_profile_name(session_uuid), loglevel=x2go.log.loglevel_NOTICE) @@ -293,12 +294,17 @@ class PyHocaGUI(wx.App, x2go.X2goClient): STILL UNDOCUMENTED """ + # close open password dialogs (or other remaining windows) for _win in self._sub_windows: _win.Close() _win.Destroy() for session_obj in [ _s for _s in self._X2goClient__client_running_sessions(return_objects=True) if _s.is_associated() ]: - session_obj.suspend() + profile_name = session_obj.get_profile_name() + if not self._hide_notifications_map.has_key(profile_name): + self._hide_notifications_map[profile_name] = [] + self._hide_notifications_map[profile_name].append(session_obj.get_session_name()) + gevent.spawn(session_obj.suspend) x2go.x2go_cleanup() self.about.Close() self.about.Destroy() @@ -312,6 +318,11 @@ class PyHocaGUI(wx.App, x2go.X2goClient): """ self._pyhoca_logger('exit application', loglevel=x2go.log.loglevel_INFO, ) + if self.args.single_session_profile: + if not x2go.defaults.X2GOCLIENT_OS == 'Windows': + self.notifier.send(self.args.session_profile, _('Suspending Sessions and Exiting...'), icon='application-exit', timeout=10000) + self._eventid_profilenames_map[evt.GetId()] = self.args.session_profile + self.OnServerDisconnect(evt) self.Exit() def _start_on_connect(self, evt, session_uuid): @@ -399,7 +410,10 @@ class PyHocaGUI(wx.App, x2go.X2goClient): profile_name = self.get_session(session_uuid).get_profile_name() if self._X2goClient__get_profile_config(profile_name)['published']: - gevent.spawn(self._init_pubapp_session, session_uuid=session_uuid) + if self.args.single_session_profile: + self._init_pubapp_session(session_uuid=session_uuid) + else: + gevent.spawn(self._init_pubapp_session, session_uuid=session_uuid) _resumed = False @@ -676,7 +690,7 @@ class PyHocaGUI(wx.App, x2go.X2goClient): self.current_profile_name = self._eventid_profilenames_map[evt.GetId()] session_uuid = self._X2goClient__client_registered_sessions_of_profile_name(self.current_profile_name)[0] # disconnect all profile sessions - if self._X2goClient__server_is_alive(session_uuid): + if self._X2goClient__server_is_alive(session_uuid) and not self.args.single_session_profile: self._X2goClient__disconnect_profile(self.current_profile_name) self.notifier.send(_(u'%s - disconnect') % self.current_profile_name, _(u'X2Go Profile is now disconnected.'), icon='auth_disconnect', timeout=4000) if self.exit_on_disconnect: @@ -971,7 +985,11 @@ class PyHocaGUI(wx.App, x2go.X2goClient): def HOOK_on_session_has_been_suspended(self, session_uuid='UNKNOWN', profile_name='UNKNOWN', session_name='UNKNOWN'): self._enable_session_name(profile_name, session_name) - self.notifier.send(_(u'%s - suspend') % profile_name, _(u'X2Go Session has been suspended\n%s') % session_name, icon='session_suspend', timeout=5000) + if self._hide_notifications_map.has_key(profile_name) and session_name in self._hide_notifications_map[profile_name]: + if not self._hide_notifications_map[profile_name]: + del self._hide_notifications_map[profile_name] + else: + self.notifier.send(_(u'%s - suspend') % profile_name, _(u'X2Go Session has been suspended\n%s') % session_name, icon='session_suspend', timeout=5000) if self.disconnect_on_suspend: _dummy_id = wx.NewId() self._eventid_profilenames_map[_dummy_id] = profile_name diff --git a/pyhoca/wxgui/menus_taskbar.py b/pyhoca/wxgui/menus_taskbar.py index 7731d61..d5ef21f 100644 --- a/pyhoca/wxgui/menus_taskbar.py +++ b/pyhoca/wxgui/menus_taskbar.py @@ -95,22 +95,31 @@ class PyHocaGUI_Menu_TaskbarOptionsManager(wx.Menu): self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnAbout, id=ID_ABOUT) if not self._PyHocaGUI.restricted_trayicon: + self.AppendSeparator() - ID_PROFILEMANAGER = wx.NewId() - _maintain_profiles_item = self.AppendMenu(id=ID_PROFILEMANAGER, - text=_(u"Profile Manager"), - submenu=PyHocaGUI_Menu_TaskbarProfileNames(self._PyHocaGUI, - caller=self, - filter_profiles=[], - disabled_profiles=self._PyHocaGUI.client_connected_profiles(return_profile_names=True), - submenu=PyHocaGUI_Menu_TaskbarManageProfile, - group_menus=True, - ) - ) - if self._PyHocaGUI.profilemanager_disabled: - _maintain_profiles_item.Enable(False) + if not self._PyHocaGUI.args.single_session_profile: + + ID_PROFILEMANAGER = wx.NewId() + _maintain_profiles_item = self.AppendMenu(id=ID_PROFILEMANAGER, + text=_(u"Profile Manager"), + submenu=PyHocaGUI_Menu_TaskbarProfileNames(self._PyHocaGUI, + caller=self, + filter_profiles=[], + disabled_profiles=self._PyHocaGUI.client_connected_profiles(return_profile_names=True), + submenu=PyHocaGUI_Menu_TaskbarManageProfile, + group_menus=True, + ) + ) + if self._PyHocaGUI.profilemanager_disabled: + _maintain_profiles_item.Enable(False) + else: + ID_SINGLEPROFILEMANAGER = wx.NewId() + _maintain_profile_item = self.AppendMenu(id=ID_SINGLEPROFILEMANAGER, + text=_(u'Manage Session Profile'), + submenu=PyHocaGUI_Menu_TaskbarManageProfile(self._PyHocaGUI, caller=self, profile_name=self._PyHocaGUI.args.session_profile), + ) self.AppendSeparator() ID_PRINTINGPREFS = wx.NewId() @@ -474,85 +483,38 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): ID_EDITPROFILEWHILECONNECTED = wx.NewId() ID_SHARELOCALFOLDER = wx.NewId() ID_UNSHAREFOLDERS = wx.NewId() - ID_DISCONNECT = wx.NewId() current_profile_config = self._PyHocaGUI.get_profile_config(profile_name) - self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = 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'] == '' and current_profile_config['published']: - if profile_name in self._PyHocaGUI._temp_launching_pubapp_profiles: - _pub_app_start_item = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieving Application Menu...")) - _pub_app_start_item.Enable(False) - else: - _pub_app_start_item = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieve Application Menu")) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnPubAppSessionStart, id=ID_PUBAPPSESSIONSTART) + if profile_name in self._PyHocaGUI._temp_disabled_profile_names: + _connecting_info = self.Append(wx.NewId(), text=_(u'Currently connecting...')) + _connecting_info.Enable(False) else: - self.Append(id=ID_SESSIONSTART, text=_(u"Start &new Session")) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionStart, id=ID_SESSIONSTART) - - self.AppendSeparator() - if current_profile_config['command'] == '' and current_profile_config['published']: - - _pub_app_sessions = self._PyHocaGUI.client_pubapp_sessions_of_profile_name(profile_name, return_objects=True) - if _pub_app_sessions: - _pub_app_session = _pub_app_sessions[0] - _pub_app_start_item.Enable(False) - _menu_items = _pub_app_session.get_published_applications() - _session_name_disabled = self._PyHocaGUI.is_session_name_disabled(profile_name, _pub_app_session.get_session_name()) - _category_map = _generate_Menu_PublishedApplications(self._PyHocaGUI, caller=self, profile_name=profile_name, session_name=_pub_app_session.get_session_name(), menu_items = _menu_items) - _category_names = _category_map.keys() - _category_names.sort() - for cat_name in _category_names: - _submenu = self.AppendMenu(id=wx.NewId(), text=cat_name, submenu=_category_map[cat_name][0]) - _submenu.SetBitmap(wx.Bitmap(_category_map[cat_name][1])) - if _session_name_disabled: - _submenu.Enable(False) - self.AppendSeparator() - - ID_RESUMESESSION = wx.NewId() - ID_SUSPENDSESSION = wx.NewId() - ID_TERMINATESESSION = wx.NewId() - self._PyHocaGUI._eventid_profilenames_map[ID_RESUMESESSION] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_SUSPENDSESSION] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_TERMINATESESSION] = profile_name - self._PyHocaGUI._eventid_sessionnames_map[ID_RESUMESESSION] = \ - self._PyHocaGUI._eventid_sessionnames_map[ID_SUSPENDSESSION] = \ - self._PyHocaGUI._eventid_sessionnames_map[ID_TERMINATESESSION] = _pub_app_session.get_session_name() - - if _pub_app_session.is_running(): - self.Append(text=_(u"Suspend Session"), id=ID_SUSPENDSESSION) - elif _pub_app_session.is_suspended(): - self.Append(text=_(u"Resume Session"), id=ID_RESUMESESSION) - self.Append(text=_(u"Terminate Session"), id=ID_TERMINATESESSION) - self.AppendSeparator() - - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionResume, id=ID_RESUMESESSION) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionSuspend, id=ID_SUSPENDSESSION) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionTerminate, id=ID_TERMINATESESSION) + self._PyHocaGUI._eventid_profilenames_map[ID_SESSIONSTART] = profile_name - else: - # preparing profile_name information for the main PyHocaGUI instance - self._PyHocaGUI._eventid_profilenames_map[ID_LAUNCHAPPLICATION] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_CLEANSESSIONS] = 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'] == '' and current_profile_config['published']: + if profile_name in self._PyHocaGUI._temp_launching_pubapp_profiles: + _pub_app_start_item = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieving Application Menu...")) + _pub_app_start_item.Enable(False) + else: + _pub_app_start_item = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieve Application Menu")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnPubAppSessionStart, id=ID_PUBAPPSESSIONSTART) + else: + self.Append(id=ID_SESSIONSTART, text=_(u"Start &new Session")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionStart, id=ID_SESSIONSTART) - if current_profile_config['applications'] and current_profile_config['command'] in x2go.defaults.X2GO_DESKTOPSESSIONS and not current_profile_config['published']: - self.AppendMenu(id=ID_LAUNCHAPPLICATION, text=_(u"Launch Single Application"), - submenu=PyHocaGUI_Menu_LaunchSingleApplication(self._PyHocaGUI, caller=self, profile_name=profile_name) - ) - self.AppendSeparator() + self.AppendSeparator() - if current_profile_config['published']: + if current_profile_config['command'] == '' and current_profile_config['published']: - _pub_app_session = None _pub_app_sessions = self._PyHocaGUI.client_pubapp_sessions_of_profile_name(profile_name, return_objects=True) if _pub_app_sessions: _pub_app_session = _pub_app_sessions[0] - if _pub_app_session and _pub_app_session.is_running(): + _pub_app_start_item.Enable(False) _menu_items = _pub_app_session.get_published_applications() _session_name_disabled = self._PyHocaGUI.is_session_name_disabled(profile_name, _pub_app_session.get_session_name()) _category_map = _generate_Menu_PublishedApplications(self._PyHocaGUI, caller=self, profile_name=profile_name, session_name=_pub_app_session.get_session_name(), menu_items = _menu_items) @@ -563,95 +525,154 @@ class PyHocaGUI_Menu_TaskbarSessionProfile(wx.Menu): _submenu.SetBitmap(wx.Bitmap(_category_map[cat_name][1])) if _session_name_disabled: _submenu.Enable(False) + self.AppendSeparator() + ID_RESUMESESSION = wx.NewId() + ID_SUSPENDSESSION = wx.NewId() + ID_TERMINATESESSION = wx.NewId() + self._PyHocaGUI._eventid_profilenames_map[ID_RESUMESESSION] = \ + self._PyHocaGUI._eventid_profilenames_map[ID_SUSPENDSESSION] = \ + self._PyHocaGUI._eventid_profilenames_map[ID_TERMINATESESSION] = profile_name + self._PyHocaGUI._eventid_sessionnames_map[ID_RESUMESESSION] = \ + self._PyHocaGUI._eventid_sessionnames_map[ID_SUSPENDSESSION] = \ + self._PyHocaGUI._eventid_sessionnames_map[ID_TERMINATESESSION] = _pub_app_session.get_session_name() + + if _pub_app_session.is_running(): + self.Append(text=_(u"Suspend Session"), id=ID_SUSPENDSESSION) + elif _pub_app_session.is_suspended(): + self.Append(text=_(u"Resume Session"), id=ID_RESUMESESSION) + self.Append(text=_(u"Terminate Session"), id=ID_TERMINATESESSION) self.AppendSeparator() - _marker = '' - _status = None - if _pub_app_session.is_master_session(): _marker = '(*)' - if _pub_app_session.is_running(): _status = 'R' - elif _pub_app_session.is_suspended(): _status = 'S' - - if _status: - _submenu = self.AppendMenu(id=wx.NewId(), text=_(u'Manage Application Menu')+' %s' % _marker, - submenu=PyHocaGUI_Menu_TaskbarSessionActions(self._PyHocaGUI, caller=self, - profile_name=profile_name, - session_name=_pub_app_session.get_session_name(), - status=_status, - ) - ) - if _session_name_disabled: - _submenu.Enable(False) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionResume, id=ID_RESUMESESSION) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionSuspend, id=ID_SUSPENDSESSION) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnSessionTerminate, id=ID_TERMINATESESSION) + + else: + # preparing profile_name information for the main PyHocaGUI instance + 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']: + self.AppendMenu(id=ID_LAUNCHAPPLICATION, text=_(u"Launch Single Application"), + submenu=PyHocaGUI_Menu_LaunchSingleApplication(self._PyHocaGUI, caller=self, profile_name=profile_name) + ) + self.AppendSeparator() + + if current_profile_config['published']: + + _pub_app_session = None + _pub_app_sessions = self._PyHocaGUI.client_pubapp_sessions_of_profile_name(profile_name, return_objects=True) + if _pub_app_sessions: + _pub_app_session = _pub_app_sessions[0] + if _pub_app_session and _pub_app_session.is_running(): + _menu_items = _pub_app_session.get_published_applications() + _session_name_disabled = self._PyHocaGUI.is_session_name_disabled(profile_name, _pub_app_session.get_session_name()) + _category_map = _generate_Menu_PublishedApplications(self._PyHocaGUI, caller=self, profile_name=profile_name, session_name=_pub_app_session.get_session_name(), menu_items = _menu_items) + _category_names = _category_map.keys() + _category_names.sort() + for cat_name in _category_names: + _submenu = self.AppendMenu(id=wx.NewId(), text=cat_name, submenu=_category_map[cat_name][0]) + _submenu.SetBitmap(wx.Bitmap(_category_map[cat_name][1])) + if _session_name_disabled: + _submenu.Enable(False) + self.AppendSeparator() - else: - self._PyHocaGUI._eventid_profilenames_map[ID_PUBAPPSESSIONSTART] = profile_name - if profile_name in self._PyHocaGUI._temp_launching_pubapp_profiles: - _ram = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieving Application Menu...")) - _ram.Enable(False) + + _marker = '' + _status = None + if _pub_app_session.is_master_session(): _marker = '(*)' + if _pub_app_session.is_running(): _status = 'R' + elif _pub_app_session.is_suspended(): _status = 'S' + + if _status: + _submenu = self.AppendMenu(id=wx.NewId(), text=_(u'Manage Application Menu')+' %s' % _marker, + submenu=PyHocaGUI_Menu_TaskbarSessionActions(self._PyHocaGUI, caller=self, + profile_name=profile_name, + session_name=_pub_app_session.get_session_name(), + status=_status, + ) + ) + if _session_name_disabled: + _submenu.Enable(False) + self.AppendSeparator() else: - self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieve Application Menu")) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnPubAppSessionStart, id=ID_PUBAPPSESSIONSTART) - self.AppendSeparator() + self._PyHocaGUI._eventid_profilenames_map[ID_PUBAPPSESSIONSTART] = profile_name + if profile_name in self._PyHocaGUI._temp_launching_pubapp_profiles: + _ram = self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieving Application Menu...")) + _ram.Enable(False) + else: + self.Append(id=ID_PUBAPPSESSIONSTART, text=_(u"Retrieve Application Menu")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnPubAppSessionStart, id=ID_PUBAPPSESSIONSTART) + self.AppendSeparator() - _query_session_uuid = self._PyHocaGUI.client_connected_sessions_of_profile_name(profile_name, return_objects=False)[0] - _session_list = self._PyHocaGUI.list_sessions(_query_session_uuid) - - if _session_list: - - # newest sessions at the top - _session_list_names = [ _s_name for _s_name in _session_list.keys() if not _session_list[_s_name].is_published_applications_provider() ] - _session_list_names.reverse() - for session_name in _session_list_names: - - session = self._PyHocaGUI.get_session_of_session_name(session_name, return_object=True) - - _s_id = wx.NewId() - - if _session_list[session_name].status == 'R': - state = _(u'Running') - elif _session_list[session_name].status == 'S': - state = _(u'Suspended') - _marker = '' - if session and session.is_master_session(): - _marker = '(*)' - if session: - session_submenu = self.AppendMenu(id=_s_id, text=u'%s: »%s« %s' % (state, session_name, _marker), - submenu=PyHocaGUI_Menu_TaskbarSessionActions(self._PyHocaGUI, caller=self, - profile_name=profile_name, - session_name=session_name, - status=_session_list[session_name].status, - ) - ) - if self._PyHocaGUI._temp_disabled_session_names.has_key(profile_name) and session_name in self._PyHocaGUI._temp_disabled_session_names[profile_name]: - session_submenu.Enable(False) - - if _session_list_names: - self.Append(id=ID_CLEANSESSIONS, text=_(u"&Clean all sessions")) - self.AppendSeparator() + _query_session_uuid = self._PyHocaGUI.client_connected_sessions_of_profile_name(profile_name, return_objects=False)[0] + _session_list = self._PyHocaGUI.list_sessions(_query_session_uuid) + + if _session_list: + + # newest sessions at the top + _session_list_names = [ _s_name for _s_name in _session_list.keys() if not _session_list[_s_name].is_published_applications_provider() ] + _session_list_names.reverse() + for session_name in _session_list_names: + + session = self._PyHocaGUI.get_session_of_session_name(session_name, return_object=True) + + _s_id = wx.NewId() + + if _session_list[session_name].status == 'R': + state = _(u'Running') + elif _session_list[session_name].status == 'S': + state = _(u'Suspended') + _marker = '' + if session and session.is_master_session(): + _marker = '(*)' + if session: + session_submenu = self.AppendMenu(id=_s_id, text=u'%s: »%s« %s' % (state, session_name, _marker), + submenu=PyHocaGUI_Menu_TaskbarSessionActions(self._PyHocaGUI, caller=self, + profile_name=profile_name, + session_name=session_name, + status=_session_list[session_name].status, + ) + ) + if self._PyHocaGUI._temp_disabled_session_names.has_key(profile_name) and session_name in self._PyHocaGUI._temp_disabled_session_names[profile_name]: + session_submenu.Enable(False) + + if _session_list_names: + self.Append(id=ID_CLEANSESSIONS, text=_(u"&Clean all sessions")) + self.AppendSeparator() - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnCleanSessions, id=ID_CLEANSESSIONS) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnCleanSessions, id=ID_CLEANSESSIONS) - self._PyHocaGUI._eventid_profilenames_map[ID_EDITPROFILEWHILECONNECTED] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_SHARELOCALFOLDER] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_UNSHAREFOLDERS] = \ - self._PyHocaGUI._eventid_profilenames_map[ID_DISCONNECT] = profile_name + self._PyHocaGUI._eventid_profilenames_map[ID_EDITPROFILEWHILECONNECTED] = \ + self._PyHocaGUI._eventid_profilenames_map[ID_SHARELOCALFOLDER] = \ + self._PyHocaGUI._eventid_profilenames_map[ID_UNSHAREFOLDERS] = profile_name - self.Append(id=ID_EDITPROFILEWHILECONNECTED, text=_(u"Customize &profile")) - if current_profile_config['useexports'] and self._PyHocaGUI._X2goClient__profile_is_folder_sharing_available(profile_name=profile_name): + self.Append(id=ID_EDITPROFILEWHILECONNECTED, text=_(u"Customize &profile")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileEditWhileConnected, id=ID_EDITPROFILEWHILECONNECTED) - _shared_folders = self.AppendMenu(id=ID_SHARELOCALFOLDER, text=_(u"Shared &folders"), - submenu=PyHocaGUI_Menu_TaskbarProfileSharedFolders(self._PyHocaGUI, caller=self, - profile_name=profile_name) - ) - if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name=profile_name, return_objects=False): - _shared_folders.Enable(False) + if current_profile_config['useexports'] and self._PyHocaGUI._X2goClient__profile_is_folder_sharing_available(profile_name=profile_name): - self.AppendSeparator() - self.Append(id=ID_DISCONNECT, text=_(u"&Disconnect from Server")) + _shared_folders = self.AppendMenu(id=ID_SHARELOCALFOLDER, text=_(u"Shared &folders"), + submenu=PyHocaGUI_Menu_TaskbarProfileSharedFolders(self._PyHocaGUI, caller=self, + profile_name=profile_name) + ) + if not self._PyHocaGUI._X2goClient__client_associated_sessions_of_profile_name(profile_name=profile_name, return_objects=False): + _shared_folders.Enable(False) + + self.AppendSeparator() + + if not self._PyHocaGUI.args.single_session_profile: + ID_DISCONNECT = wx.NewId() + self._PyHocaGUI._eventid_profilenames_map[ID_DISCONNECT] = profile_name + self.Append(id=ID_DISCONNECT, text=_(u"&Disconnect from Server")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnServerDisconnect, id=ID_DISCONNECT) + else: + ID_EXIT = wx.NewId() + self.Append(id=ID_EXIT, text=_(u"Disconnect and E&xit")) + self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnTaskbarExit, id=ID_EXIT) - self._PyHocaGUI.current_profile_name = profile_name - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnProfileEditWhileConnected, id=ID_EDITPROFILEWHILECONNECTED) - self._PyHocaGUI.Bind(wx.EVT_MENU, self._PyHocaGUI.OnServerDisconnect, id=ID_DISCONNECT) + self._PyHocaGUI.current_profile_name = profile_name class PyHocaGUI_Menu_TaskbarProfileNames(wx.Menu): diff --git a/pyhoca/wxgui/taskbar.py b/pyhoca/wxgui/taskbar.py index 837399b..f75f47f 100644 --- a/pyhoca/wxgui/taskbar.py +++ b/pyhoca/wxgui/taskbar.py @@ -94,7 +94,10 @@ class PyHocaGUI_TaskBarIcon(wx.TaskBarIcon): STILL UNDOCUMENTED """ - self.menu_sessionmanager = self.PopupMenu(menus_taskbar.PyHocaGUI_Menu_TaskbarSessionManager(self._PyHocaGUI, caller=self,)) + if self._PyHocaGUI.args.single_session_profile: + self.menu_sessionmanager = self.PopupMenu(menus_taskbar.PyHocaGUI_Menu_TaskbarSessionProfile(self._PyHocaGUI, caller=self, profile_name=self._PyHocaGUI.args.session_profile)) + else: + self.menu_sessionmanager = self.PopupMenu(menus_taskbar.PyHocaGUI_Menu_TaskbarSessionManager(self._PyHocaGUI, caller=self,)) return self.menu_sessionmanager def CreatePopupMenu(self): 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)).