From 7a6686ef718f4b0eb2accdd06e665edb654cc1ac Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Sat, 20 Jun 2009 20:30:03 +0200 Subject: [PATCH] Strip underscores from action labels in shortcuts extension --- AUTHORS | 1 + extensions/shortcuts.c | 55 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index 0b542978..04ec8c9e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -67,6 +67,7 @@ Translations: Code from other projects: GTK+/ GdkPixbuf, Matthias Clasen GTK+/ GtkEntry, Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + GTK+/ GtkToolbar, Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald Modified by the GTK+ Team and others 1997-2000 libSoup/ CookieJarText, Copyright (C) 2008 Xan Lopez , Dan Winship libSylph, Copyright 1999-2008 Hiroyuki Yamamoto, Copyright 2006-2009 Enrico Tröger diff --git a/extensions/shortcuts.c b/extensions/shortcuts.c index 77cd88a0..6731fdcc 100644 --- a/extensions/shortcuts.c +++ b/extensions/shortcuts.c @@ -32,6 +32,52 @@ shortcuts_deactivate_cb (MidoriExtension* extension, app, shortcuts_app_add_browser_cb, extension); } +/* A copy of _gtk_toolbar_elide_underscores + Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + Copied from GTK+ 2.17.1 */ +static gchar * +elide_underscores (const gchar *original) +{ + gchar *q, *result; + const gchar *p, *end; + gsize len; + gboolean last_underscore; + + if (!original) + return NULL; + + len = strlen (original); + q = result = g_malloc (len + 1); + last_underscore = FALSE; + + end = original + len; + for (p = original; p < end; p++) + { + if (!last_underscore && *p == '_') + last_underscore = TRUE; + else + { + last_underscore = FALSE; + if (original + 2 <= p && p + 1 <= end && + p[-2] == '(' && p[-1] == '_' && p[0] != '_' && p[1] == ')') + { + q--; + *q = '\0'; + p++; + } + else + *q++ = *p; + } + } + + if (last_underscore) + *q++ = '_'; + + *q = '\0'; + + return result; +} + static void shortcuts_preferences_render_text (GtkTreeViewColumn* column, GtkCellRenderer* renderer, @@ -41,18 +87,23 @@ shortcuts_preferences_render_text (GtkTreeViewColumn* column, { GtkAction* action; gchar* label; + gchar* stripped; gtk_tree_model_get (model, iter, 0, &action, -1); if ((label = katze_object_get_string (action, "label"))) - g_object_set (renderer, "text", label, NULL); + stripped = elide_underscores (label); else { GtkStockItem item; g_object_get (action, "stock-id", &label, NULL); if (gtk_stock_lookup (label, &item)) - g_object_set (renderer, "text", item.label, NULL); + stripped = elide_underscores (item.label); + else + stripped = g_strdup (""); } g_free (label); + g_object_set (renderer, "text", stripped, NULL); + g_free (stripped); g_object_unref (action); }