[gtk3] Backport an upstream fix for GtkBuilder type name heuristics

Kalev Lember kalev at fedoraproject.org
Fri Oct 3 15:31:49 UTC 2014


commit 9bc3c674bed4ba359085701a8bd89d06e5489e82
Author: Kalev Lember <kalevlember at gmail.com>
Date:   Fri Oct 3 17:25:23 2014 +0200

    Backport an upstream fix for GtkBuilder type name heuristics

 ...lder-Undo-the-type-name-heuristic-changes.patch |  119 ++++++++++++++++++++
 gtk3.spec                                          |    8 +-
 2 files changed, 126 insertions(+), 1 deletions(-)
---
diff --git a/0001-GtkBuilder-Undo-the-type-name-heuristic-changes.patch b/0001-GtkBuilder-Undo-the-type-name-heuristic-changes.patch
new file mode 100644
index 0000000..7caf3af
--- /dev/null
+++ b/0001-GtkBuilder-Undo-the-type-name-heuristic-changes.patch
@@ -0,0 +1,119 @@
+From 80226ca926c9986dc91686f5682d98f6fc84c748 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen at redhat.com>
+Date: Fri, 3 Oct 2014 09:29:45 -0400
+Subject: [PATCH] GtkBuilder: Undo the type name heuristic changes
+
+These turned out to break existing ui files, concretely
+GWeatherLocationEntry was no longer guessed correctly.
+
+Update the testcases to reflect this, and add a testcase
+for GWeather.
+---
+ gtk/gtkbuilder.c         | 17 +++++++++--------
+ testsuite/gtk/typename.c | 25 +++++++++----------------
+ 2 files changed, 18 insertions(+), 24 deletions(-)
+
+diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
+index 320c3e6..fbae031 100644
+--- a/gtk/gtkbuilder.c
++++ b/gtk/gtkbuilder.c
+@@ -372,23 +372,24 @@ gtk_builder_get_property (GObject    *object,
+  * GtkWindow -> gtk_window_get_type
+  * GtkHBox -> gtk_hbox_get_type
+  * GtkUIManager -> gtk_ui_manager_get_type
+- * GdkRGB -> gdk_rgb_get_type
++ * GWeatherLocation -> gweather_location_get_type
++ *
++ * Keep in sync with testsuite/gtk/typename.c !
+  */
+ static gchar *
+ type_name_mangle (const gchar *name)
+ {
+   GString *symbol_name = g_string_new ("");
+-  int i;
++  gint i;
+ 
+   for (i = 0; name[i] != '\0'; i++)
+     {
+       /* skip if uppercase, first or previous is uppercase */
+-      if ((i > 0 && name[i]  == g_ascii_toupper (name[i]) &&
+-                   (name[i-1] != g_ascii_toupper (name[i-1]) || i == 1)) ||
+-          (i > 2 && name[i]   == g_ascii_toupper (name[i]) &&
+-                    name[i-1] == g_ascii_toupper (name[i-1]) &&
+-                    name[i-2] == g_ascii_toupper (name[i-2]) &&
+-                    name[i+1] != 0 && name[i+1] != g_ascii_toupper (name[i+1])))
++      if ((name[i] == g_ascii_toupper (name[i]) &&
++           i > 0 && name[i-1] != g_ascii_toupper (name[i-1])) ||
++           (i > 2 && name[i]   == g_ascii_toupper (name[i]) &&
++           name[i-1] == g_ascii_toupper (name[i-1]) &&
++           name[i-2] == g_ascii_toupper (name[i-2])))
+         g_string_append_c (symbol_name, '_');
+       g_string_append_c (symbol_name, g_ascii_tolower (name[i]));
+     }
+diff --git a/testsuite/gtk/typename.c b/testsuite/gtk/typename.c
+index 7237631..f94c3ef 100644
+--- a/testsuite/gtk/typename.c
++++ b/testsuite/gtk/typename.c
+@@ -18,22 +18,21 @@
+ 
+ #include <glib.h>
+ 
+-/* keep in sync with gtkbuilder.c */
++/* Keep in sync with gtkbuilder.c ! */
+ static gchar *
+ type_name_mangle (const gchar *name)
+ {
+   GString *symbol_name = g_string_new ("");
+-  int i;
++  gint i;
+ 
+   for (i = 0; name[i] != '\0'; i++)
+     {
+       /* skip if uppercase, first or previous is uppercase */
+-      if ((i > 0 && name[i]  == g_ascii_toupper (name[i]) &&
+-                   (name[i-1] != g_ascii_toupper (name[i-1]) || i == 1)) ||
+-          (i > 2 && name[i]   == g_ascii_toupper (name[i]) &&
+-                    name[i-1] == g_ascii_toupper (name[i-1]) &&
+-                    name[i-2] == g_ascii_toupper (name[i-2]) && 
+-                    name[i+1] != 0 && name[i+1] != g_ascii_toupper (name[i+1])))
++      if ((name[i] == g_ascii_toupper (name[i]) &&
++           i > 0 && name[i-1] != g_ascii_toupper (name[i-1])) ||
++           (i > 2 && name[i]   == g_ascii_toupper (name[i]) &&
++           name[i-1] == g_ascii_toupper (name[i-1]) &&
++           name[i-2] == g_ascii_toupper (name[i-2])))
+         g_string_append_c (symbol_name, '_');
+       g_string_append_c (symbol_name, g_ascii_tolower (name[i]));
+     }
+@@ -55,13 +54,10 @@ check (const gchar *TN, const gchar *gtf)
+ static void test_GtkWindow (void)    { check ("GtkWindow", "gtk_window_get_type"); }
+ static void test_GtkHBox (void)      { check ("GtkHBox", "gtk_hbox_get_type"); }
+ static void test_GtkUIManager (void) { check ("GtkUIManager", "gtk_ui_manager_get_type"); }
+-static void test_GString (void)      { check ("GString", "g_string_get_type"); }
+ static void test_GtkCList (void)     { check ("GtkCList", "gtk_clist_get_type"); }
+ static void test_GtkIMContext (void) { check ("GtkIMContext", "gtk_im_context_get_type"); }
+-static void test_GdkRGB (void)       { check ("GdkRGB", "gdk_rgb_get_type"); }
+-static void test_GdkRGBA (void)      { check ("GdkRGBA", "gdk_rgba_get_type"); }
+ static void test_Me2Shell (void)     { check ("Me2Shell", "me_2shell_get_type"); }
+-static void test_E2Shell (void)      { check ("E2Shell", "e_2shell_get_type"); }
++static void test_GWeather (void)     { check ("GWeatherLocation", "gweather_location_get_type"); }
+  
+ int
+ main (int argc, char *argv[])
+@@ -71,13 +67,10 @@ main (int argc, char *argv[])
+   g_test_add_func ("/builder/get-type/GtkWindow",    test_GtkWindow);
+   g_test_add_func ("/builder/get-type/GtkHBox",      test_GtkHBox);
+   g_test_add_func ("/builder/get-type/GtkUIManager", test_GtkUIManager);
+-  g_test_add_func ("/builder/get-type/GString",      test_GString);
+   g_test_add_func ("/builder/get-type/GtkCList",     test_GtkCList);
+   g_test_add_func ("/builder/get-type/GtkIMContext", test_GtkIMContext);
+-  g_test_add_func ("/builder/get-type/GdkRGB",       test_GdkRGB);
+-  g_test_add_func ("/builder/get-type/GdkRGBA",      test_GdkRGBA);
+   g_test_add_func ("/builder/get-type/Me2Shell",     test_Me2Shell);
+-  g_test_add_func ("/builder/get-type/E2Shell",      test_E2Shell);
++  g_test_add_func ("/builder/get-type/GWeather",     test_GWeather);
+ 
+   return g_test_run ();
+ }
+-- 
+2.1.0
+
diff --git a/gtk3.spec b/gtk3.spec
index 5ee6c09..48f2d7c 100644
--- a/gtk3.spec
+++ b/gtk3.spec
@@ -18,7 +18,7 @@
 Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
 Name: gtk3
 Version: 3.14.1
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 URL: http://www.gtk.org
@@ -26,6 +26,8 @@ URL: http://www.gtk.org
 
 Source: http://download.gnome.org/sources/gtk+/3.14/gtk+-%{version}.tar.xz
 
+Patch0: 0001-GtkBuilder-Undo-the-type-name-heuristic-changes.patch
+
 BuildRequires: gnome-common autoconf automake intltool gettext
 BuildRequires: atk-devel >= %{atk_version}
 BuildRequires: at-spi2-atk-devel
@@ -143,6 +145,7 @@ the functionality of the installed %{name} package.
 
 %prep
 %setup -q -n gtk+-%{version}
+%patch0 -p1
 
 %build
 
@@ -313,6 +316,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache
 %{_datadir}/installed-tests
 
 %changelog
+* Fri Oct 03 2014 Kalev Lember <kalevlember at gmail.com> - 3.14.1-2
+- Backport an upstream fix for GtkBuilder type name heuristics
+
 * Tue Sep 30 2014 Kalev Lember <kalevlember at gmail.com> - 3.14.1-1
 - Update to 3.14.1
 


More information about the scm-commits mailing list