summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--gtk/gtkstock.c59
2 files changed, 45 insertions, 22 deletions
diff --git a/ChangeLog b/ChangeLog
index b503234cce..7fb468efe7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2009-01-18 Matthias Clasen <mclasen@redhat.com>
+ Bug 563280 – stock items & translation context
+
+ * gtk/gtkstock.c: Solve the msgctxt problem a bit more
+ elegantly, and add some hints about this to the docs of
+ gtk_stock_set_translate_func. Proposed by Christian Persch
+
+2009-01-18 Matthias Clasen <mclasen@redhat.com>
+
Bug 568196 – Please change context of Forward stock label
* gtk/gtkstock.c: Reinstate separate translation contexts for
diff --git a/gtk/gtkstock.c b/gtk/gtkstock.c
index 6b2951037b..53562eb98a 100644
--- a/gtk/gtkstock.c
+++ b/gtk/gtkstock.c
@@ -425,12 +425,40 @@ static const GtkStockItem builtin_items [] =
*
* Sets a function to be used for translating the @label of
* a stock item.
- *
+ *
* If no function is registered for a translation domain,
* g_dgettext() is used.
+ *
+ * The function is used for all stock items whose
+ * @translation_domain matches @domain. Note that it is possible
+ * to use strings different from the actual gettext translation domain
+ * of your application for this, as long as your #GtkTranslateFunc uses
+ * the correct domain when calling dgettext(). This can be useful, e.g.
+ * when dealing with message contexts:
*
- * Since: 2.8
+ * |[
+ * GtkStockItem items[] = {
+ * { MY_ITEM1, NC_("odd items", "Item 1"), 0, 0, "odd-item-domain" },
+ * { MY_ITEM2, NC_("even items", "Item 2"), 0, 0, "even-item-domain" },
+ * };
+ *
+ * gchar *
+ * my_translate_func (const gchar *msgid,
+ * gpointer data)
+ * {
+ * gchar *msgctxt = data;
*
+ * return (gchar*)g_dpgettext2 (GETTEXT_PACKAGE, msgctxt, msgid);
+ * }
+ *
+ * /&ast; ... &ast/
+ *
+ * gtk_stock_add (items, G_N_ELEMENTS (items));
+ * gtk_stock_set_translate_func ("odd-item-domain", my_translate_func, "odd-item-domain");
+ * gtk_stock_set_translate_func ("even-item-domain", my_translate_func, "even-item-domain");
+ * ]|
+ *
+ * Since: 2.8
*/
void
gtk_stock_set_translate_func (const gchar *domain,
@@ -465,24 +493,11 @@ static gchar *
sgettext_swapped (const gchar *msgid,
gpointer data)
{
- return (gchar *)g_dpgettext2 ((const char *)data, "Stock label", msgid);
-}
+ gchar *msgctxt = data;
-static gchar *
-sgettext_swapped_navigation (const gchar *msgid,
- gpointer data)
-{
- return (gchar *)g_dpgettext2 ((const char *)data, "Stock label, navigation", msgid);
+ return (gchar *)g_dpgettext2 (GETTEXT_PACKAGE, msgctxt, msgid);
}
-static gchar *
-sgettext_swapped_media (const gchar *msgid,
- gpointer data)
-{
- return (gchar *)g_dpgettext2 ((const char *)data, "Stock label, media", msgid);
-}
-
-
static void
init_stock_hash (void)
{
@@ -500,15 +515,15 @@ init_stock_hash (void)
gtk_stock_set_translate_func (GETTEXT_PACKAGE,
sgettext_swapped,
- GETTEXT_PACKAGE,
+ "Stock label",
NULL);
gtk_stock_set_translate_func (GETTEXT_PACKAGE "-navigation",
- sgettext_swapped_navigation,
- GETTEXT_PACKAGE,
+ sgettext_swapped,
+ "Stock label, navigation",
NULL);
gtk_stock_set_translate_func (GETTEXT_PACKAGE "-media",
- sgettext_swapped_media,
- GETTEXT_PACKAGE,
+ sgettext_swapped,
+ "Stock label, media",
NULL);
}
}