mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
console: Watch gconf for grab keys update
This commit is contained in:
parent
b7a533a451
commit
edbd5191c0
@ -345,45 +345,19 @@ class vmmConfig(object):
|
|||||||
return self.conf.notify_add(
|
return self.conf.notify_add(
|
||||||
self.conf_dir + "/vmlist-fields/network_traffic", cb)
|
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
|
# Keys preferences
|
||||||
def get_keys_combination(self, syms=False):
|
def get_keys_combination(self):
|
||||||
val = self.conf.get_string(self.conf_dir + "/keys/grab-keys")
|
ret = self.conf.get_string(self.conf_dir + "/keys/grab-keys")
|
||||||
if syms == True:
|
if not ret:
|
||||||
return val
|
# Left Control + Left Alt
|
||||||
|
return "65507,65513"
|
||||||
# If val is None we return it
|
return ret
|
||||||
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 set_keys_combination(self, val):
|
def set_keys_combination(self, val):
|
||||||
# Val have to be a list of integers
|
# Val have to be a list of integers
|
||||||
val = ','.join(map(str, val))
|
val = ','.join(map(str, val))
|
||||||
self.conf.set_string(self.conf_dir + "/keys/grab-keys", 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
|
# Confirmation preferences
|
||||||
def get_confirm_forcepoweroff(self):
|
def get_confirm_forcepoweroff(self):
|
||||||
|
@ -224,19 +224,6 @@ class Viewer(vmmGObject):
|
|||||||
def get_pixbuf(self):
|
def get_pixbuf(self):
|
||||||
return self.display.get_pixbuf()
|
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):
|
def get_grab_keys(self):
|
||||||
keystr = None
|
keystr = None
|
||||||
try:
|
try:
|
||||||
@ -256,9 +243,23 @@ class Viewer(vmmGObject):
|
|||||||
|
|
||||||
def set_grab_keys(self):
|
def set_grab_keys(self):
|
||||||
try:
|
try:
|
||||||
keys = self.get_grab_keys_from_config()
|
keys = self.config.get_keys_combination()
|
||||||
if keys:
|
if not keys:
|
||||||
self.display.set_grab_keys(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:
|
except Exception, e:
|
||||||
logging.debug("Error when getting the grab keys combination: %s",
|
logging.debug("Error when getting the grab keys combination: %s",
|
||||||
str(e))
|
str(e))
|
||||||
@ -279,9 +280,7 @@ class VNCViewer(Viewer):
|
|||||||
self.desktop_resolution = None
|
self.desktop_resolution = None
|
||||||
|
|
||||||
def init_widget(self):
|
def init_widget(self):
|
||||||
# Set default grab key combination if found and supported
|
self.set_grab_keys()
|
||||||
if self.config.vnc_grab_keys_supported():
|
|
||||||
self.set_grab_keys()
|
|
||||||
|
|
||||||
self.display.realize()
|
self.display.realize()
|
||||||
|
|
||||||
@ -392,13 +391,8 @@ class VNCViewer(Viewer):
|
|||||||
self.display.open_fd(fd)
|
self.display.open_fd(fd)
|
||||||
|
|
||||||
def get_grab_keys(self):
|
def get_grab_keys(self):
|
||||||
keystr = None
|
keystr = self.get_grab_keys()
|
||||||
if self.config.vnc_grab_keys_supported():
|
if not keystr:
|
||||||
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 = "Control_L+Alt_L"
|
keystr = "Control_L+Alt_L"
|
||||||
return keystr
|
return keystr
|
||||||
|
|
||||||
@ -591,6 +585,8 @@ class vmmConsolePages(vmmGObjectUI):
|
|||||||
scroll.connect("size-allocate", self.scroll_size_allocate)
|
scroll.connect("size-allocate", self.scroll_size_allocate)
|
||||||
self.add_gconf_handle(
|
self.add_gconf_handle(
|
||||||
self.config.on_console_accels_changed(self.set_enable_accel))
|
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()
|
self.page_changed()
|
||||||
|
|
||||||
@ -728,6 +724,11 @@ class vmmConsolePages(vmmGObjectUI):
|
|||||||
for g in self.accel_groups:
|
for g in self.accel_groups:
|
||||||
self.topwin.add_accel_group(g)
|
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,
|
def set_enable_accel(self, ignore=None, ignore1=None,
|
||||||
ignore2=None, ignore3=None):
|
ignore2=None, ignore3=None):
|
||||||
# Make sure modifiers are up to date
|
# Make sure modifiers are up to date
|
||||||
|
@ -168,15 +168,28 @@ class vmmPreferences(vmmGObjectUI):
|
|||||||
def refresh_grabkeys_combination(self, ignore1=None, ignore2=None,
|
def refresh_grabkeys_combination(self, ignore1=None, ignore2=None,
|
||||||
ignore3=None, ignore4=None):
|
ignore3=None, ignore4=None):
|
||||||
val = self.config.get_keys_combination()
|
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")
|
prefs_button = self.widget("prefs-keys-grab-changebtn")
|
||||||
self.widget("prefs-keys-grab-sequence").set_text(val)
|
self.widget("prefs-keys-grab-sequence").set_text(keystr)
|
||||||
if not self.config.vnc_grab_keys_supported():
|
|
||||||
util.tooltip_wrapper(prefs_button,
|
|
||||||
_("Installed version of GTK-VNC doesn't "
|
|
||||||
"support configurable grab keys"))
|
|
||||||
|
|
||||||
def refresh_confirm_forcepoweroff(self, ignore1=None, ignore2=None,
|
def refresh_confirm_forcepoweroff(self, ignore1=None, ignore2=None,
|
||||||
ignore3=None, ignore4=None):
|
ignore3=None, ignore4=None):
|
||||||
|
Loading…
Reference in New Issue
Block a user