[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 0.1.1.4-88-g3db6c39
X2Go dev team
git-admin at x2go.org
Wed Jan 8 15:26:47 CET 2014
The branch, build-baikal has been updated
via 3db6c3936fd436a7f78cae846b8fa41c83c5ab29 (commit)
from 1ea418ba168848ba287621c5ee27459ae2b4da63 (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 +
x2go/backends/terminal/_stdout.py | 89 ++++++++++++++++++++++------
x2go/defaults.py | 3 +
x2go/session.py | 2 +
x2go/utils.py | 115 ++++++-------------------------------
5 files changed, 96 insertions(+), 115 deletions(-)
The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index bef79b0..279c1ef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -20,6 +20,8 @@ python-x2go (0.1.1.9-0-x2go1) UNRELEASED; urgency=low
- Allow session parameter change for already registered sessions.
- Add support for session window title renaming.
- Add support for bringing session windows on top.
+ - Terminal session now remember the X window of a terminal session in as
+ an internal property.
* Depend on python-xlib.
-- 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 07b0be9..e07de13 100644
--- a/x2go/backends/terminal/_stdout.py
+++ b/x2go/backends/terminal/_stdout.py
@@ -36,6 +36,7 @@ import signal
import cStringIO
import copy
import shutil
+import Xlib
# Python X2go modules
import x2go.rforward as rforward
@@ -51,6 +52,7 @@ from x2go.cleanup import x2go_cleanup
# we hide the default values from epydoc (that's why we transform them to _UNDERSCORE variables)
from x2go.defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
+from x2go.defaults import X_DISPLAY as _X_DISPLAY
from x2go.defaults import LOCAL_HOME as _LOCAL_HOME
from x2go.defaults import CURRENT_LOCAL_USER as _CURRENT_LOCAL_USER
from x2go.defaults import X2GO_CLIENT_ROOTDIR as _X2GO_CLIENT_ROOTDIR
@@ -299,6 +301,7 @@ class X2goTerminalSessionSTDOUT(object):
self.profile_name = profile_name
self.set_session_title = set_session_title
self.session_title = session_title
+ self.session_window = None
self.proxy_backend = proxy_backend
self.snd_port = snd_port
@@ -751,7 +754,7 @@ class X2goTerminalSessionSTDOUT(object):
"""
return self.params.depth
- def _auto_session_window_title(self):
+ def auto_session_window_title(self):
_generic_title = 'X2GO-%s' % self.session_info.name
@@ -772,8 +775,37 @@ class X2goTerminalSessionSTDOUT(object):
if self.session_title != _generic_title:
self.set_session_window_title(title=self.session_title)
+ def find_session_window(self, timeout=30):
+ """\
+ Try for <timeout> seconds to find the X2Go session window of this
+ terminal session.
+
+ @param timeout: try for <timeout> seconds to find the session window
+ @type timeout: C{int}
+
+ """
+ gevent.spawn(self._find_session_window, timeout=timeout)
+
+ def _find_session_window(self, timeout=0):
+
+ self.session_window = None
+
+ # search for the window of our focus, do this in a loop till the window as been found
+ # or timeout forces us to give up...
+ timeout += 1
+ while timeout:
+
+ timeout -= 1
+
+ window = utils.find_session_window(self.session_info.name)
+
+ if window is not None:
+ self.session_window = window
+ break
- def set_session_window_title(self, title=''):
+ gevent.sleep(1)
+
+ def set_session_window_title(self, title, timeout=30):
"""\
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
@@ -781,29 +813,51 @@ class X2goTerminalSessionSTDOUT(object):
@param title: new title for session window
@type title: C{str}
+ @param timeout: try for <timeout> seconds to find the session window
+ @type timeout: C{int}
"""
+ gevent.spawn(self._set_session_window_title, title=title, timeout=timeout)
+
+ def _set_session_window_title(self, title, timeout=0):
+
self.session_title = title
- if self.session_info.name not in title:
- title = '%s (X2GO-%s)' % (title, self.session_info.name)
+ timeout += 1
+ while timeout:
+
+ timeout -= 1
+
+ if self.session_window is not None:
+ self.session_window.set_wm_name(str(self.session_title))
+ self.session_window.set_wm_icon_name(str(self.session_title))
+ _X_DISPLAY.sync()
+ break
- gevent.spawn(utils.set_session_window_title,
- session_name=self.session_info.name,
- title=title,
- timeout=30,
- )
+ gevent.sleep(1)
- def raise_session_window(self):
+ def raise_session_window(self, timeout=30):
"""\
Try to lift the session window above all other windows and bring
it to focus.
"""
- gevent.spawn(utils.raise_session_window,
- session_name=self.session_info.name,
- timeout=30,
- )
+ gevent.spawn(self._raise_session_window, timeout=timeout)
+
+ def _raise_session_window(self, timeout=0):
+
+ timeout += 1
+ while timeout:
+
+ timeout -= 1
+
+ if self.session_window is not None:
+ self.session_window.set_input_focus(Xlib.X.RevertToParent, Xlib.X.CurrentTime)
+ self.session_window.configure(stack_mode=Xlib.X.Above)
+ self.session_window.circulate(Xlib.X.RaiseLowest)
+ break
+
+ gevent.sleep(1)
def has_command(self, cmd):
"""\
@@ -1018,7 +1072,8 @@ class X2goTerminalSessionSTDOUT(object):
self.proxy_subprocess = self.proxy.start_proxy()
self.active_threads.append(self.proxy)
- self._auto_session_window_title()
+ self.find_session_window()
+ self.auto_session_window_title()
self.raise_session_window()
return self.ok()
@@ -1067,8 +1122,10 @@ class X2goTerminalSessionSTDOUT(object):
# 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()
+ self.find_session_window()
+ self.auto_session_window_title()
self.raise_session_window()
+ _X_DISPLAY.sync()
return self.ok()
diff --git a/x2go/defaults.py b/x2go/defaults.py
index db5b607..b6b5997 100644
--- a/x2go/defaults.py
+++ b/x2go/defaults.py
@@ -37,6 +37,9 @@ import utils
X2GOCLIENT_OS = platform.system()
+import Xlib.display
+X_DISPLAY = Xlib.display.Display()
+
LOCAL_HOME = os.path.expanduser('~')
X2GO_SESSIONS_ROOTDIR = '.x2go'
X2GO_CLIENT_ROOTDIR = '.x2goclient'
diff --git a/x2go/session.py b/x2go/session.py
index 26f812f..75eefcc 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -627,6 +627,8 @@ class X2goSession(object):
"""
if self.terminal_session is not None:
return self.terminal_session.session_title
+ else:
+ return 'X2GO-%s' % self.get_session_name()
def get_control_session(self):
"""\
diff --git a/x2go/utils.py b/x2go/utils.py
index dc74c57..46b2d95 100644
--- a/x2go/utils.py
+++ b/x2go/utils.py
@@ -35,16 +35,11 @@ import gevent
import string
import re
import subprocess
-
-from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
-if _X2GOCLIENT_OS != "Windows":
- import Xlib
- import Xlib.display
-else:
- import win32api
+import Xlib
# Python X2go modules
from defaults import X2GOCLIENT_OS as _X2GOCLIENT_OS
+from defaults import X_DISPLAY as _X_DISPLAY
from defaults import X2GO_SESSIONPROFILE_DEFAULTS as _X2GO_SESSIONPROFILE_DEFAULTS
from defaults import X2GO_MIMEBOX_ACTIONS as _X2GO_MIMEBOX_ACTIONS
from defaults import pack_methods_nx3
@@ -469,106 +464,28 @@ def is_color_depth_ok(depth_session, depth_local):
return True;
return False
-def set_session_window_title(session_name, title, timeout=0):
+def find_session_window(session_name):
"""\
- Modify a session window title. The current window title has to contain
- the X2Go session ID to be identifiable.
+ Find a session window by its X2GO session ID.
@param session_name: session name/ID of an X2Go session window
@type session_name: C{str}
- @param title: the new session window title to be set
- @type title: C{str}
- @param timeout: try the title renaming for <timeout> sec at maximum
- @type timeout: C{int}
"""
# establish connection to the win API in use...
- if _X2GOCLIENT_OS != 'Windows':
-
- display = Xlib.display.Display()
- root = display.screen().root
-
- else:
-
- # no MS Windows support yet
- pass
-
- # search for the window of our focus, do this in a loop till the window as been found
- # or timeout forces us to give up...
- timeout += 1
- while timeout:
-
- timeout -= 1
- success = False
-
- if _X2GOCLIENT_OS != 'Windows':
-
- 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
-
- else:
- # no MS Windows support yet
- pass
-
- if success:
+ display = _X_DISPLAY
+ root = display.screen().root
+
+ success = False
+ 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
break
- gevent.sleep(1)
-
-def raise_session_window(session_name, timeout=0):
- """\
- Bring a session window to foreground.
-
- @param session_name: session name/ID of an X2Go session window
- @type session_name: C{str}
- @param timeout: try the title renaming for <timeout> sec at maximum
- @type timeout: C{int}
-
- """
- # establish connection to the win API in use...
- if _X2GOCLIENT_OS != 'Windows':
-
- display = Xlib.display.Display()
- root = display.screen().root
-
- else:
+ if success:
+ return window
- # no MS Windows support yet
- pass
-
- # search for the window of our focus, do this in a loop till the window as been found
- # or timeout forces us to give up...
- timeout += 1
- while timeout:
-
- timeout -= 1
- success = False
-
- if _X2GOCLIENT_OS != 'Windows':
-
- 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_input_focus(Xlib.X.RevertToParent, Xlib.X.CurrentTime)
- window.configure(stack_mode=Xlib.X.Above)
- window.circulate(Xlib.X.RaiseLowest)
- display.sync()
- break
-
- else:
- # no MS Windows support yet
- pass
-
- if success:
- break
+ return None
- 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