Mercurial > pidgin
diff console/libgnt/gntwidget.c @ 14239:a0b1ab181316
[gaim-migrate @ 16921]
Allow remapping keys for widgets.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sun, 20 Aug 2006 22:46:20 +0000 |
parents | ae4cbed1b309 |
children | c111a7e718d0 |
line wrap: on
line diff
--- a/console/libgnt/gntwidget.c Sun Aug 20 22:24:13 2006 +0000 +++ b/console/libgnt/gntwidget.c Sun Aug 20 22:46:20 2006 +0000 @@ -96,7 +96,6 @@ return continue_emission; } - static void gnt_widget_class_init(GntWidgetClass *klass) { @@ -214,6 +213,7 @@ gnt_boolean_handled_accumulator, NULL, gnt_closure_marshal_BOOLEAN__STRING, G_TYPE_BOOLEAN, 1, G_TYPE_STRING); + DEBUG; } @@ -231,7 +231,7 @@ NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc)gnt_widget_class_init, - NULL, /* class_finalize */ + NULL, NULL, /* class_data */ sizeof(GntWidget), 0, /* n_preallocs */ @@ -246,6 +246,24 @@ return type; } +static const char * +gnt_widget_remap_keys(GntWidget *widget, const char *text) +{ + const char *remap = NULL; + GType type = G_OBJECT_TYPE(widget); + GntWidgetClass *klass = GNT_WIDGET_CLASS(G_OBJECT_GET_CLASS(widget)); + + if (klass->remaps == NULL) + { + klass->remaps = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + gnt_styles_get_keyremaps(type, klass->remaps); + } + + remap = g_hash_table_lookup(klass->remaps, text); + + return (remap ? remap : text); +} + static void gnt_widget_take_focus(GntWidget *widget) { @@ -327,6 +345,8 @@ gboolean ret; if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_CAN_TAKE_FOCUS)) return FALSE; + + keys = gnt_widget_remap_keys(widget, keys); g_signal_emit(widget, signals[SIG_KEY_PRESSED], 0, keys, &ret); return ret; }