[gtk+] Factor out a function
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Factor out a function
- Date: Sat, 27 Sep 2014 03:31:21 +0000 (UTC)
commit f35dff334fc9e52582fd49d47440f4b1f0e7e91b
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Sep 26 23:28:55 2014 -0400
Factor out a function
Factor out the typename-to-get-type mangling as a separate
function, for easier testing.
Also fix some cases where it doesn't, currently, like
GString -> g_string_get_type and
GdkRGB -> gdk_rgb_get_type
gtk/gtkbuilder.c | 41 ++++++++++++++++++++++++-----------------
1 files changed, 24 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 7878a43..b07ee5e 100644
--- a/gtk/gtkbuilder.c
+++ b/gtk/gtkbuilder.c
@@ -372,36 +372,43 @@ 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
*/
-static GType
-_gtk_builder_resolve_type_lazily (const gchar *name)
+static gchar *
+type_name_mangle (const gchar *name)
{
- static GModule *module = NULL;
- GTypeGetFunc func;
GString *symbol_name = g_string_new ("");
- char c, *symbol;
int i;
- GType gtype = G_TYPE_INVALID;
- if (!module)
- module = g_module_open (NULL, 0);
-
for (i = 0; name[i] != '\0'; i++)
{
- c = name[i];
/* skip if uppercase, first or previous is uppercase */
- if ((c == g_ascii_toupper (c) &&
- i > 0 && name[i-1] != g_ascii_toupper (name[i-1])) ||
+ 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] == 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])))
g_string_append_c (symbol_name, '_');
- g_string_append_c (symbol_name, g_ascii_tolower (c));
+ g_string_append_c (symbol_name, g_ascii_tolower (name[i]));
}
g_string_append (symbol_name, "_get_type");
+
+ return g_string_free (symbol_name, FALSE);
+}
+
+static GType
+_gtk_builder_resolve_type_lazily (const gchar *name)
+{
+ static GModule *module = NULL;
+ GTypeGetFunc func;
+ gchar *symbol;
+ GType gtype = G_TYPE_INVALID;
+
+ if (!module)
+ module = g_module_open (NULL, 0);
- symbol = g_string_free (symbol_name, FALSE);
+ symbol = type_name_mangle (name);
if (g_module_symbol (module, symbol, (gpointer)&func))
gtype = func ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]