mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-11 07:55:52 -06:00
Sanitize gtkbuilder XML for RHEL6
There's a pretty useless element added to ui files by f16 glade that trips up RHEL6 gtk. If gtk is old enough, sanitize things.
This commit is contained in:
parent
9adab83715
commit
8717e63687
@ -24,6 +24,7 @@ import logging
|
||||
|
||||
import virtManager
|
||||
import virtManager.guidiff
|
||||
from virtManager import util
|
||||
|
||||
running_config, gobject, GObject, gtk = virtManager.guidiff.get_imports()
|
||||
|
||||
@ -242,7 +243,8 @@ class vmmGObjectUI(vmmGObject):
|
||||
|
||||
self.window = gtk.Builder()
|
||||
self.window.set_translation_domain("virt-manager")
|
||||
self.window.add_from_file(self.uifile)
|
||||
self.window.add_from_string(
|
||||
util.sanitize_gtkbuilder(self.uifile))
|
||||
|
||||
self.topwin = self.widget(self.windowname)
|
||||
self.topwin.hide()
|
||||
|
@ -19,7 +19,6 @@
|
||||
#
|
||||
|
||||
import libvirt
|
||||
import libxml2
|
||||
|
||||
import logging
|
||||
import os.path
|
||||
@ -158,6 +157,7 @@ def xml_parse_wrapper(xml, parse_func, *args, **kwargs):
|
||||
Parse the passed xml string into an xpath context, which is passed
|
||||
to parse_func, along with any extra arguments.
|
||||
"""
|
||||
import libxml2
|
||||
|
||||
doc = None
|
||||
ctx = None
|
||||
@ -420,3 +420,44 @@ def set_list_selection(widget, rownum):
|
||||
selection.unselect_all()
|
||||
widget.set_cursor(path)
|
||||
selection.select_path(path)
|
||||
|
||||
def sanitize_gtkbuilder(filename):
|
||||
"""
|
||||
GTKBuilder XML made by glade on f16 doesn't work on RHEL6. If on an old
|
||||
GTK version, strip out the bits that cause problems
|
||||
"""
|
||||
import gtk
|
||||
ver = gtk.gtk_version
|
||||
xml = file(filename).read()
|
||||
|
||||
if (ver[0] > 2 or
|
||||
(ver[0] == 2 and ver[1] > 18)):
|
||||
# Skip altering for gtk > 2.18
|
||||
return xml
|
||||
|
||||
import libxml2
|
||||
|
||||
doc = None
|
||||
ctx = None
|
||||
ret = xml
|
||||
try:
|
||||
doc = libxml2.parseDoc(xml)
|
||||
ctx = doc.xpathNewContext()
|
||||
|
||||
nodes = ctx.xpathEval("//child[@internal-child='selection']")
|
||||
if nodes:
|
||||
logging.debug("%s: Altering gtkbuilder XML for old gtk compat",
|
||||
os.path.basename(filename))
|
||||
|
||||
for node in nodes:
|
||||
node.unlinkNode()
|
||||
node.freeNode()
|
||||
|
||||
ret = doc.serialize()
|
||||
finally:
|
||||
if doc:
|
||||
doc.freeDoc()
|
||||
if ctx:
|
||||
ctx.xpathFreeContext()
|
||||
|
||||
return ret
|
||||
|
Loading…
Reference in New Issue
Block a user