summaryrefslogtreecommitdiff
path: root/gtk/gtkaccellabel.c
diff options
context:
space:
mode:
authorRichard Hult <richard@imendio.com>2008-05-26 08:54:00 +0000
committerRichard Hult <rhult@src.gnome.org>2008-05-26 08:54:00 +0000
commit6fb474f223ba71938eb4131662e99f9a52bb28df (patch)
tree51544b29f90d2cb9cf6bbc751be3b970c130d14b /gtk/gtkaccellabel.c
parent8ae8e8e307d1864c3b5ffef84e0ae284424ff701 (diff)
downloadgtk+-6fb474f223ba71938eb4131662e99f9a52bb28df.tar.gz
Bug 530353 – Mac-like gtk_accelerator_get_label()
2008-05-26 Richard Hult <richard@imendio.com> Bug 530353 – Mac-like gtk_accelerator_get_label() * gtk/gtkaccellabel.c: (gtk_accel_label_class_init), (append_keyval_symbol), (_gtk_accel_label_class_get_accelerator_label): On quartz, make gtk_accelerator_get_label() format a Mac-like string, using unicode characters for modifier keys, arrows, delete etc. Patch from Yevgen Muntyan. svn path=/trunk/; revision=20175
Diffstat (limited to 'gtk/gtkaccellabel.c')
-rw-r--r--gtk/gtkaccellabel.c106
1 files changed, 105 insertions, 1 deletions
diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c
index 6a7bf1eda5..e31223cebb 100644
--- a/gtk/gtkaccellabel.c
+++ b/gtk/gtkaccellabel.c
@@ -36,6 +36,7 @@
#include "gtkprivate.h"
#include "gtkintl.h"
#include "gtkalias.h"
+#include <gdk/gdkkeysyms.h>
enum {
PROP_0,
@@ -80,6 +81,8 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class)
class->signal_quote1 = g_strdup ("<:");
class->signal_quote2 = g_strdup (":>");
+
+#ifndef GDK_WINDOWING_QUARTZ
/* This is the text that should appear next to menu accelerators
* that use the shift key. If the text on this key isn't typically
* translated on keyboards used for your language, don't translate
@@ -105,6 +108,18 @@ gtk_accel_label_class_init (GtkAccelLabelClass *class)
*/
class->mod_name_alt = g_strdup (Q_("keyboard label|Alt"));
class->mod_separator = g_strdup ("+");
+#else /* GDK_WINDOWING_QUARTZ */
+
+ /* U+21E7 UPWARDS WHITE ARROW */
+ class->mod_name_shift = g_strdup ("\xe2\x87\xa7");
+ /* U+2303 UP ARROWHEAD */
+ class->mod_name_control = g_strdup ("\xe2\x8c\x83");
+ /* U+2325 OPTION KEY */
+ class->mod_name_alt = g_strdup ("\xe2\x8c\xa5");
+ class->mod_separator = g_strdup ("");
+
+#endif /* GDK_WINDOWING_QUARTZ */
+
class->accel_seperator = g_strdup (" / ");
class->latin1_to_char = TRUE;
@@ -504,6 +519,90 @@ substitute_underscores (char *str)
*p = ' ';
}
+/* On Mac, if the key has symbolic representation (e.g. arrow keys),
+ * append it to gstring and return TRUE; otherwise return FALSE.
+ * See http://docs.info.apple.com/article.html?path=Mac/10.5/en/cdb_symbs.html
+ * for the list of special keys. */
+static gboolean
+append_keyval_symbol (guint accelerator_key,
+ GString *gstring)
+{
+#ifdef GDK_WINDOWING_QUARTZ
+ switch (accelerator_key)
+ {
+ case GDK_Return:
+ /* U+21A9 LEFTWARDS ARROW WITH HOOK */
+ g_string_append (gstring, "\xe2\x86\xa9");
+ return TRUE;
+
+ case GDK_ISO_Enter:
+ /* U+2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS */
+ g_string_append (gstring, "\xe2\x8c\xa4");
+ return TRUE;
+
+ case GDK_Left:
+ /* U+2190 LEFTWARDS ARROW */
+ g_string_append (gstring, "\xe2\x86\x90");
+ return TRUE;
+
+ case GDK_Up:
+ /* U+2191 UPWARDS ARROW */
+ g_string_append (gstring, "\xe2\x86\x91");
+ return TRUE;
+
+ case GDK_Right:
+ /* U+2192 RIGHTWARDS ARROW */
+ g_string_append (gstring, "\xe2\x86\x92");
+ return TRUE;
+
+ case GDK_Down:
+ /* U+2193 DOWNWARDS ARROW */
+ g_string_append (gstring, "\xe2\x86\x93");
+ return TRUE;
+
+ case GDK_Page_Up:
+ /* U+21DE UPWARDS ARROW WITH DOUBLE STROKE */
+ g_string_append (gstring, "\xe2\x87\x9e");
+ return TRUE;
+
+ case GDK_Page_Down:
+ /* U+21DF DOWNWARDS ARROW WITH DOUBLE STROKE */
+ g_string_append (gstring, "\xe2\x87\x9f");
+ return TRUE;
+
+ case GDK_Home:
+ /* U+2196 NORTH WEST ARROW */
+ g_string_append (gstring, "\xe2\x86\x96");
+ return TRUE;
+
+ case GDK_End:
+ /* U+2198 SOUTH EAST ARROW */
+ g_string_append (gstring, "\xe2\x86\x98");
+ return TRUE;
+
+ case GDK_Escape:
+ /* U+238B BROKEN CIRCLE WITH NORTHWEST ARROW */
+ g_string_append (gstring, "\xe2\x8e\x8b");
+ return TRUE;
+
+ case GDK_BackSpace:
+ /* U+232B ERASE TO THE LEFT */
+ g_string_append (gstring, "\xe2\x8c\xab");
+ return TRUE;
+
+ case GDK_Delete:
+ /* U+2326 ERASE TO THE RIGHT */
+ g_string_append (gstring, "\xe2\x8c\xa6");
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+#else /* !GDK_WINDOWING_QUARTZ */
+ return FALSE;
+#endif
+}
+
gchar *
_gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
guint accelerator_key,
@@ -599,6 +698,7 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
if (seen_mod)
g_string_append (gstring, klass->mod_separator);
+#ifndef GDK_WINDOWING_QUARTZ
/* This is the text that should appear next to menu accelerators
* that use the meta key. If the text on this key isn't typically
* translated on keyboards used for your language, don't translate
@@ -606,6 +706,10 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
* And do not translate the part before the |.
*/
g_string_append (gstring, Q_("keyboard label|Meta"));
+#else
+ /* Command key symbol U+2318 PLACE OF INTEREST SIGN */
+ g_string_append (gstring, "\xe2\x8c\x98");
+#endif
seen_mod = TRUE;
}
if (seen_mod)
@@ -630,7 +734,7 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
break;
}
}
- else
+ else if (!append_keyval_symbol (accelerator_key, gstring))
{
gchar *tmp;