diff --git a/src/virtManager/config.py b/src/virtManager/config.py index a9c8bd1b7..10cf2f1b0 100644 --- a/src/virtManager/config.py +++ b/src/virtManager/config.py @@ -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): diff --git a/src/virtManager/console.py b/src/virtManager/console.py index 17b0467cb..d4cfe4439 100644 --- a/src/virtManager/console.py +++ b/src/virtManager/console.py @@ -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 diff --git a/src/virtManager/preferences.py b/src/virtManager/preferences.py index af07a585c..13b139fe1 100644 --- a/src/virtManager/preferences.py +++ b/src/virtManager/preferences.py @@ -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):