[X2Go-Commits] python-x2go.git - release/0.4.0.x (branch) updated: 0.1.1.4-82-g02d00cf

X2Go dev team git-admin at x2go.org
Tue Jan 7 16:17:34 CET 2014


The branch, release/0.4.0.x has been updated
       via  02d00cf85ff6e2fc9bcde04c2c9118e423c519c8 (commit)
      from  998741e75447c444478a8165d158f28892cbb719 (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                  |    1 +
 x2go/backends/terminal/_stdout.py |   54 ++++++++++++++++++++++++++++++++-----
 x2go/client.py                    |   15 +++++++++++
 x2go/session.py                   |   13 +++++++++
 x2go/utils.py                     |   29 ++++++++++++++++++++
 5 files changed, 106 insertions(+), 6 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index eb74667..98b72dc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,7 @@ python-x2go (0.1.1.9-0-x2go1) UNRELEASED; urgency=low
     - Fix for list processing in  INI files.
     - Make terminal backend ,,applications'' aware.
     - Allow session parameter change for already registered sessions.
+    - Add support for session window title renaming.
 
  -- Mike Gabriel <mike.gabriel at das-netzwerkteam.de>  Wed, 12 Oct 2011 10:54:23 +0200
 
diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py
index 3817b43..7753572 100644
--- a/x2go/backends/terminal/_stdout.py
+++ b/x2go/backends/terminal/_stdout.py
@@ -751,6 +751,49 @@ class X2goTerminalSessionSTDOUT(object):
         """
         return self.params.depth
 
+    def _auto_session_window_title(self):
+
+        _generic_title = 'X2GO-%s' % self.session_info.name
+
+        if self.params.session_type == 'D':
+            if self.set_session_title:
+
+                if not self.session_title:
+                    self.session_title = '%s for %s@%s' % (self.params.cmd, self.control_session.remote_username(), self.control_session.get_hostname())
+
+            else:
+                # session title fallback... (like X2Go server does it...)
+                self.session_title = _generic_title
+
+        else:
+            # do nothing for rootless sessions
+            self.session_title = _generic_title
+
+        if self.session_title != _generic_title:
+            self.set_session_window_title(title=self.session_title)
+
+
+    def set_session_window_title(self, title=''):
+        """\
+        Modify session window title. If the session ID does not occur in the
+        given title, it will be prepended, so that every X2Go session window
+        always contains the X2Go session ID of that window.
+
+        @param title: new title for session window
+        @type title: C{str}
+
+        """
+        print self.params.cmd
+
+        if self.session_info.name not in title:
+            title = '%s (X2GO-%s)' % (title, self.session_info.name)
+
+        gevent.spawn(utils.set_session_window_title,
+                     session_name=self.session_info.name,
+                     title=title,
+                     timeout=30,
+                    )
+
     def has_command(self, cmd):
         """\
         Verify if the command <cmd> exists on the X2go server.
@@ -923,12 +966,6 @@ class X2goTerminalSessionSTDOUT(object):
         if self.params.cmd == 'XDMCP' and self.params.xdmcp_server:
             cmd_line = ['X2GOXDMCP=%s' % self.params.xdmcp_server] + cmd_line
 
-        if self.set_session_title:
-            cmd_line = ['X2GO_CLIENTFEATURE_SET_SESSIONTITLE=enabled '] + cmd_line
-
-        if self.session_title:
-            cmd_line = ['X2GO_SESSION_WINDOW_TITLE="%s" ' % self.session_title] + cmd_line
-
         (stdin, stdout, stderr) = self.control_session._x2go_exec_command(cmd_line)
 
         _stdout = stdout.read()
@@ -970,6 +1007,8 @@ class X2goTerminalSessionSTDOUT(object):
         self.proxy_subprocess = self.proxy.start_proxy()
         self.active_threads.append(self.proxy)
 
+        self._auto_session_window_title()
+
         return self.ok()
 
     def resume(self):
@@ -1015,6 +1054,9 @@ class X2goTerminalSessionSTDOUT(object):
         self.params.depth = self.session_info.name.split('_')[2][2:]
         # on a session resume the user name comes in as a user ID. We have to translate this...
         self.session_info.username = self.control_session.remote_username()
+
+        self._auto_session_window_title()
+
         return self.ok()
 
     def suspend(self):
diff --git a/x2go/client.py b/x2go/client.py
index 7928adf..aca0b68 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -1182,6 +1182,21 @@ class X2goClient(object):
         self.session_registry(session_uuid).set_print_action(print_action=print_action, **kwargs)
     __set_session_print_action = set_session_print_action
 
+    def set_session_window_title(self, session_uuid, title=''):
+        """\
+        Modify session window title. If the session ID does not occur in the
+        given title, it will be prepended, so that every X2Go session window
+        always contains the X2Go session ID of that window.
+
+        @param session_uuid: the X2go session's UUID registry hash
+        @type session_uuid: C{str}
+        @param title: new title for session window
+        @type title: C{str}
+
+        """
+        self.session_registry(session_uuid).set_session_window_title(title=title)
+    __set_session_window_title = set_session_window_title
+
     def start_session(self, session_uuid):
         """\
         Start a new X2go session on the remote X2go server. This method
diff --git a/x2go/session.py b/x2go/session.py
index 2d0c693..0539524 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -849,6 +849,19 @@ class X2goSession(object):
         return retval
     __disconnect = disconnect
 
+    def set_session_window_title(self, title=''):
+        """\
+        Modify session window title. If the session ID does not occur in the
+        given title, it will be prepended, so that every X2Go session window
+        always contains the X2Go session ID of that window.
+
+        @param title: new title for session window
+        @type title: C{str}
+
+        """
+        if self.terminal_session is not None:
+            self.terminal_session.set_session_window_title(title=title)
+
     def set_print_action(self, print_action, **kwargs):
         """\
         If X2go client-side printing is enable within this X2go session you can use
diff --git a/x2go/utils.py b/x2go/utils.py
index ab23c19..b197ea8 100644
--- a/x2go/utils.py
+++ b/x2go/utils.py
@@ -35,6 +35,8 @@ import gevent
 import string
 import re
 import subprocess
+import Xlib
+import Xlib.display
 
 # Python X2go modules
 from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
@@ -462,3 +464,30 @@ def is_color_depth_ok(depth_session, depth_local):
         return True;
     return False
 
+def set_session_window_title(session_name, title, timeout=0):
+
+    timeout += 1
+    while timeout:
+
+        timeout -= 1
+        success = False
+
+        if _X2GOCLIENT_OS != 'Windows':
+
+            display = Xlib.display.Display()
+            root = display.screen().root
+
+            windowIDs = root.get_full_property(display.intern_atom('_NET_CLIENT_LIST'), Xlib.X.AnyPropertyType).value
+            for windowID in windowIDs:
+                window = display.create_resource_object('window', windowID)
+                if session_name in window.get_wm_name():
+                    success = True
+                    window.set_wm_name('%s' % str(title))
+                    window.set_wm_icon_name('%s' % str(title))
+                    display.sync()
+                    break
+
+        if success:
+            break
+
+        gevent.sleep(1)


hooks/post-receive
-- 
python-x2go.git (Python X2Go Client API)

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 "python-x2go.git" (Python X2Go Client API).




More information about the x2go-commits mailing list