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

X2Go dev team git-admin at x2go.org
Tue Aug 27 13:22:06 CEST 2013


The branch, build-59a18b6e3b5d3f1dd8f07f26433d37fe5984a57d 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