]> Pileus Git - ~andy/gtk/commitdiff
Add target version handling to gtk-builder-convert
authorChristian Persch <chpe@gnome.org>
Wed, 12 Jan 2011 18:02:20 +0000 (19:02 +0100)
committerChristian Persch <chpe@gnome.org>
Wed, 12 Jan 2011 21:45:57 +0000 (22:45 +0100)
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
gtk/gtk-builder-convert

index aa98d5d659cf6e8dcd6a29fab353fbbf6539d87e..002a73ed5b5dac14717de2a8dfcdb64cb2fbc3d1 100644 (file)
@@ -14,6 +14,7 @@
 <cmdsynopsis>
 <command>gtk-builder-convert</command>
 <arg choice="opt">--skip-windows</arg>
+<arg choice="opt">--target-version <replaceable>version</replaceable></arg>
 <arg choice="opt">--root <replaceable>name</replaceable></arg>
 <arg choice="req">input</arg>
 <arg choice="req">output</arg>
@@ -37,6 +38,16 @@ its output the file specified as the second argument.
     <term>-w</term>
     <listitem><para>Convert everything but GtkWindow subclasses.</para></listitem>
   </varlistentry>
+  <varlistentry>
+    <term>--target-version</term>
+    <term>-t</term>
+    <listitem>
+      <para>
+        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.
+      </para>
+    </listitem>
+  </varlistentry>
   <varlistentry>
     <term>--root</term>
     <term>-r</term>
index 4cae240a66f7232ec6ee0eff056957242624ad6b..ed815a5ec356f879cf721b46d254c543fca11d25 100755 (executable)
@@ -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)