console: Watch gconf for grab keys update

This commit is contained in:
Cole Robinson 2012-01-29 21:51:20 -05:00
parent b7a533a451
commit edbd5191c0
3 changed files with 55 additions and 67 deletions

View File

@ -345,45 +345,19 @@ class vmmConfig(object):
return self.conf.notify_add(
self.conf_dir + "/vmlist-fields/network_traffic", cb)
# Check whether we have GTK-VNC that supports configurable grab keys
# installed on the system
def vnc_grab_keys_supported(self):
try:
import gtkvnc
return hasattr(gtkvnc.Display, "set_grab_keys")
except:
return False
# Keys preferences
def get_keys_combination(self, syms=False):
val = self.conf.get_string(self.conf_dir + "/keys/grab-keys")
if syms == True:
return val
# If val is None we return it
if val is None:
return None
# We convert keysyms to names
keystr = None
for k in val.split(','):
try:
key = int(k)
except:
key = None
if key is not None:
if keystr is None:
keystr = gtk.gdk.keyval_name(key)
else:
keystr = keystr + "+" + gtk.gdk.keyval_name(key)
return keystr
def get_keys_combination(self):
ret = self.conf.get_string(self.conf_dir + "/keys/grab-keys")
if not ret:
# Left Control + Left Alt
return "65507,65513"
return ret
def set_keys_combination(self, val):
# Val have to be a list of integers
val = ','.join(map(str, val))
self.conf.set_string(self.conf_dir + "/keys/grab-keys", val)
def on_keys_combination_changed(self, cb):
return self.conf.notify_add(self.conf_dir + "/keys/grab-keys", cb)
# Confirmation preferences
def get_confirm_forcepoweroff(self):

View File

@ -224,19 +224,6 @@ class Viewer(vmmGObject):
def get_pixbuf(self):
return self.display.get_pixbuf()
def get_grab_keys_from_config(self):
keys = []
grab_keys = self.config.get_keys_combination(True)
if grab_keys is not None:
# If somebody edited this in GConf it would fail so
# we encapsulate this into try/except block
try:
keys = map(int, grab_keys.split(','))
except:
logging.debug("Error in grab_keys configuration in GConf")
return keys
def get_grab_keys(self):
keystr = None
try:
@ -256,9 +243,23 @@ class Viewer(vmmGObject):
def set_grab_keys(self):
try:
keys = self.get_grab_keys_from_config()
if keys:
self.display.set_grab_keys(keys)
keys = self.config.get_keys_combination()
if not keys:
return
if not hasattr(self.display, "set_grab_keys"):
logging.debug("Display class doesn't support custom grab "
"combination.")
return
try:
keys = map(int, keys.split(','))
except:
logging.debug("Error in grab_keys configuration in GConf",
exc_info=True)
return
self.display.set_grab_keys(keys)
except Exception, e:
logging.debug("Error when getting the grab keys combination: %s",
str(e))
@ -279,9 +280,7 @@ class VNCViewer(Viewer):
self.desktop_resolution = None
def init_widget(self):
# Set default grab key combination if found and supported
if self.config.vnc_grab_keys_supported():
self.set_grab_keys()
self.set_grab_keys()
self.display.realize()
@ -392,13 +391,8 @@ class VNCViewer(Viewer):
self.display.open_fd(fd)
def get_grab_keys(self):
keystr = None
if self.config.vnc_grab_keys_supported():
keystr = super(VNCViewer, self).get_grab_keys()
# If grab keys are set to None then preserve old behaviour since
# the GTK-VNC - we're using older version of GTK-VNC
if keystr is None:
keystr = self.get_grab_keys()
if not keystr:
keystr = "Control_L+Alt_L"
return keystr
@ -591,6 +585,8 @@ class vmmConsolePages(vmmGObjectUI):
scroll.connect("size-allocate", self.scroll_size_allocate)
self.add_gconf_handle(
self.config.on_console_accels_changed(self.set_enable_accel))
self.add_gconf_handle(
self.config.on_keys_combination_changed(self.grab_keys_changed))
self.page_changed()
@ -728,6 +724,11 @@ class vmmConsolePages(vmmGObjectUI):
for g in self.accel_groups:
self.topwin.add_accel_group(g)
def grab_keys_changed(self,
ignore1=None, ignore2=None,
ignore3=None, ignore4=None):
self.viewer.set_grab_keys()
def set_enable_accel(self, ignore=None, ignore1=None,
ignore2=None, ignore3=None):
# Make sure modifiers are up to date

View File

@ -168,15 +168,28 @@ class vmmPreferences(vmmGObjectUI):
def refresh_grabkeys_combination(self, ignore1=None, ignore2=None,
ignore3=None, ignore4=None):
val = self.config.get_keys_combination()
if val is None:
val = "Control_L+Alt_L"
# We convert keysyms to names
print val
if not val:
keystr = "Control_L+Alt_L"
else:
keystr = None
for k in val.split(','):
try:
key = int(k)
except:
key = None
if key is not None:
if keystr is None:
keystr = gtk.gdk.keyval_name(key)
else:
keystr = keystr + "+" + gtk.gdk.keyval_name(key)
prefs_button = self.widget("prefs-keys-grab-changebtn")
self.widget("prefs-keys-grab-sequence").set_text(val)
if not self.config.vnc_grab_keys_supported():
util.tooltip_wrapper(prefs_button,
_("Installed version of GTK-VNC doesn't "
"support configurable grab keys"))
self.widget("prefs-keys-grab-sequence").set_text(keystr)
def refresh_confirm_forcepoweroff(self, ignore1=None, ignore2=None,
ignore3=None, ignore4=None):