From b6464b6c0a467226057e21d7f35e8afa50321422 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Wed, 12 Jan 2011 19:02:20 +0100 Subject: [PATCH] Add target version handling to gtk-builder-convert When converting to gtk3, replace GtkComboBoxEntry with GtkComboxBox has-entry=True, and remove the has-separator property from GtkDialogs. Bug #639327. --- docs/reference/gtk/gtk-builder-convert.xml | 11 ++++++++ gtk/gtk-builder-convert | 31 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/docs/reference/gtk/gtk-builder-convert.xml b/docs/reference/gtk/gtk-builder-convert.xml index aa98d5d659..002a73ed5b 100644 --- a/docs/reference/gtk/gtk-builder-convert.xml +++ b/docs/reference/gtk/gtk-builder-convert.xml @@ -14,6 +14,7 @@ gtk-builder-convert --skip-windows +--target-version version --root name input output @@ -37,6 +38,16 @@ its output the file specified as the second argument. -w Convert everything but GtkWindow subclasses. + + --target-version + -t + + + Some widgets and properties are different between GTK+ versions 2.0 and + 3.0, so this option allows to set the desired GTK+ target version. + + + --root -r diff --git a/gtk/gtk-builder-convert b/gtk/gtk-builder-convert index 4cae240a66..ed815a5ec3 100755 --- a/gtk/gtk-builder-convert +++ b/gtk/gtk-builder-convert @@ -146,8 +146,9 @@ def copy_properties(node, props, prop_dict): class GtkBuilderConverter(object): - def __init__(self, skip_windows, root): + def __init__(self, skip_windows, target_version, root): self.skip_windows = skip_windows + self.target_version = target_version self.root = root self.root_objects = [] self.objects = {} @@ -295,6 +296,25 @@ class GtkBuilderConverter(object): self._convert_menu(node, popup=True) elif klass in WINDOWS and self.skip_windows: self._remove_window(node) + + if self.target_version == "3.0": + if klass == "GtkComboBoxEntry": + node.setAttribute("class","GtkComboBox") + prop = self._dom.createElement("property") + prop.setAttribute("name", "has-entry") + prop.appendChild(self._dom.createTextNode("True")) + node.appendChild(prop) + elif klass == "GtkDialog": + for child in node.childNodes: + if child.nodeType != Node.ELEMENT_NODE: + continue + if child.tagName != 'property': + continue + if (child.getAttribute("name") not in ("has-separator", "has_separator")): + continue; + node.removeChild(child) + break + self._default_widget_converter(node) def _default_widget_converter(self, node): @@ -732,7 +752,10 @@ def usage(): def main(args): try: opts, args = getopt.getopt(args[1:], "hwr:", - ["help", "skip-windows", "root="]) + ["help", + "skip-windows", + "target-version=", + "root="]) except getopt.GetoptError: usage() return 2 @@ -746,6 +769,7 @@ def main(args): skip_windows = False split = False root = None + target_version = "3.0" for o, a in opts: if o in ("-h", "--help"): usage() @@ -754,8 +778,11 @@ def main(args): root = a elif o in ("-w", "--skip-windows"): skip_windows = True + elif o in ("-t", "--target-version"): + target_version = a conv = GtkBuilderConverter(skip_windows=skip_windows, + target_version=target_version, root=root) conv.parse_file(input_filename)