support localized key names (interim fix for #145346)

2007-02-04  Jens Granseuer  <jensgr@gmx.net>

	* 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
This commit is contained in:
Jens Granseuer 2007-02-04 13:46:41 +00:00 committed by Jens Granseuer
parent b3af3ba4ba
commit 765e80f953
5 changed files with 62 additions and 7 deletions

View file

@ -1,3 +1,13 @@
2007-02-04 Jens Granseuer <jensgr@gmx.net>
* 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 <jensgr@gmx.net>
* gnome-keybinding-properties.c: (accel_edited_callback): filter

View file

@ -24,6 +24,7 @@
#include <string.h>
#include <gdk/gdkx.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkaccelgroup.h>
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[] = "<Super>";
static const gchar text_hyper[] = "<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,

View file

@ -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

View file

@ -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

View file

@ -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))),