[X2Go-Commits] pyhoca-gui.git - twofactorauth (branch) updated: 0.1.0.10-105-g0ede3ea

X2Go dev team git-admin at x2go.org
Sat Sep 14 15:55:44 CEST 2013


The branch, twofactorauth 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 -----------------------------------------------------------------
-----------------------------------------------------------------------

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




More information about the x2go-commits mailing list