From 765e80f9538ef218ef016e72362683f008ef8b28 Mon Sep 17 00:00:00 2001 From: Jens Granseuer Date: Sun, 4 Feb 2007 13:46:41 +0000 Subject: [PATCH] support localized key names (interim fix for #145346) 2007-02-04 Jens Granseuer * eggaccelerators.c: (egg_virtual_accelerator_name), (egg_virtual_accelerator_label): * eggaccelerators.h: * eggcellrendererkeys.c: (convert_keysym_state_to_string): * gnome-keybinding-properties.c: (binding_name), (accel_edited_callback): support localized key names (interim fix for #145346) svn path=/trunk/; revision=7242 --- capplets/keybindings/ChangeLog | 10 +++++ capplets/keybindings/eggaccelerators.c | 45 +++++++++++++++++-- capplets/keybindings/eggaccelerators.h | 4 ++ capplets/keybindings/eggcellrendererkeys.c | 2 +- .../keybindings/gnome-keybinding-properties.c | 8 ++-- 5 files changed, 62 insertions(+), 7 deletions(-) diff --git a/capplets/keybindings/ChangeLog b/capplets/keybindings/ChangeLog index b639702bc..40e6a5f2e 100644 --- a/capplets/keybindings/ChangeLog +++ b/capplets/keybindings/ChangeLog @@ -1,3 +1,13 @@ +2007-02-04 Jens Granseuer + + * eggaccelerators.c: (egg_virtual_accelerator_name), + (egg_virtual_accelerator_label): + * eggaccelerators.h: + * eggcellrendererkeys.c: (convert_keysym_state_to_string): + * gnome-keybinding-properties.c: (binding_name), + (accel_edited_callback): support localized key names (interim fix + for #145346) + 2007-02-03 Jens Granseuer * gnome-keybinding-properties.c: (accel_edited_callback): filter diff --git a/capplets/keybindings/eggaccelerators.c b/capplets/keybindings/eggaccelerators.c index ad72a9d99..6f964112a 100644 --- a/capplets/keybindings/eggaccelerators.c +++ b/capplets/keybindings/eggaccelerators.c @@ -24,6 +24,7 @@ #include #include #include +#include enum { @@ -367,7 +368,6 @@ egg_accelerator_parse_virtual (const gchar *accelerator, return !bad_keyval; } - /** * egg_virtual_accelerator_name: * @accelerator_key: accelerator keyval @@ -398,14 +398,15 @@ egg_virtual_accelerator_name (guint accelerator_key, static const gchar text_super[] = ""; static const gchar text_hyper[] = ""; guint l; - gchar *keyval_name; + gchar *keyval_name, *str = NULL; gchar *accelerator; accelerator_mods &= EGG_VIRTUAL_MODIFIER_MASK; if (!accelerator_key) { - keyval_name = g_strdup_printf ("0x%02x", keycode); + str = g_strdup_printf ("0x%02x", keycode); + keyval_name = str; } else { @@ -500,10 +501,48 @@ egg_virtual_accelerator_name (guint accelerator_key, } strcpy (accelerator + l, keyval_name); + g_free (str); return accelerator; } +/** + * egg_virtual_accelerator_label: + * @accelerator_key: accelerator keyval + * @accelerator_mods: accelerator modifier mask + * @returns: a newly-allocated accelerator label + * + * Converts an accelerator keyval and modifier mask + * into a (possibly translated) string that can be displayed to + * a user. + * For example, if you pass in #GDK_q and #EGG_VIRTUAL_CONTROL_MASK, + * and you use a German locale, this function returns "Strg+Q". + * + * The caller of this function must free the returned string. + */ +gchar* +egg_virtual_accelerator_label (guint accelerator_key, + guint keycode, + EggVirtualModifierType accelerator_mods) +{ + gchar *gtk_label; + GdkModifierType gdkmods; + + egg_keymap_resolve_virtual_modifiers (gdk_keymap_get_default (), + accelerator_mods, &gdkmods); + gtk_label = gtk_accelerator_get_label (accelerator_key, gdkmods); + + if (!accelerator_key) + { + gchar *label; + label = g_strdup_printf ("%s0x%02x", gtk_label, keycode); + g_free (gtk_label); + return label; + } + + return gtk_label; +} + void egg_keymap_resolve_virtual_modifiers (GdkKeymap *keymap, EggVirtualModifierType virtual_mods, diff --git a/capplets/keybindings/eggaccelerators.h b/capplets/keybindings/eggaccelerators.h index d2276d2b2..b50933efc 100644 --- a/capplets/keybindings/eggaccelerators.h +++ b/capplets/keybindings/eggaccelerators.h @@ -83,6 +83,10 @@ gchar* egg_virtual_accelerator_name (guint accelerator_key, guint keycode, EggVirtualModifierType accelerator_mods); +gchar* egg_virtual_accelerator_label (guint accelerator_key, + guint keycode, + EggVirtualModifierType accelerator_mods); + G_END_DECLS diff --git a/capplets/keybindings/eggcellrendererkeys.c b/capplets/keybindings/eggcellrendererkeys.c index c52caef63..133fa4fda 100644 --- a/capplets/keybindings/eggcellrendererkeys.c +++ b/capplets/keybindings/eggcellrendererkeys.c @@ -241,7 +241,7 @@ convert_keysym_state_to_string (guint keysym, if (keysym == 0 && keycode == 0) return g_strdup (_("Disabled")); else - return egg_virtual_accelerator_name (keysym, keycode, mask); + return egg_virtual_accelerator_label (keysym, keycode, mask); } static void diff --git a/capplets/keybindings/gnome-keybinding-properties.c b/capplets/keybindings/gnome-keybinding-properties.c index e11090a2b..bfc46719a 100644 --- a/capplets/keybindings/gnome-keybinding-properties.c +++ b/capplets/keybindings/gnome-keybinding-properties.c @@ -181,7 +181,9 @@ binding_name (guint keyval, gboolean translate) { if (keyval != 0 || keycode != 0) - return egg_virtual_accelerator_name (keyval, keycode, mask); + return translate ? + egg_virtual_accelerator_label (keyval, keycode, mask) : + egg_virtual_accelerator_name (keyval, keycode, mask); else return translate ? g_strdup (_("Disabled")) : g_strdup ("disabled"); } @@ -672,7 +674,7 @@ accel_edited_callback (GtkCellRendererText *cell, GtkWidget *dialog; char *name; - name = egg_virtual_accelerator_name (keyval, keycode, mask); + name = binding_name (keyval, keycode, mask, TRUE); dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))), @@ -701,7 +703,7 @@ accel_edited_callback (GtkCellRendererText *cell, GtkWidget *dialog; char *name; - name = egg_virtual_accelerator_name (keyval, keycode, mask); + name = binding_name (keyval, keycode, mask, TRUE); dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))),