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;
 }