summary refs log tree commit diff stats
path: root/src/fe-gtk/fkeys.c
diff options
context:
space:
mode:
authorTingPing <tingping@tingping.se>2014-02-16 11:08:32 -0500
committerTingPing <tingping@tingping.se>2014-02-16 11:08:32 -0500
commit85aff53a88628004b164dff2c7ed8423ba4f4e16 (patch)
tree929b721726d49d95bef3dd2bfddea7f3a358e446 /src/fe-gtk/fkeys.c
parentbed5a21700bfc0acf4bfa2f43cdc427981020149 (diff)
Use more user friendly label for keys in keyboard shortcuts
Diffstat (limited to 'src/fe-gtk/fkeys.c')
-rw-r--r--src/fe-gtk/fkeys.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c
index eea07df6..36502325 100644
--- a/src/fe-gtk/fkeys.c
+++ b/src/fe-gtk/fkeys.c
@@ -364,6 +364,7 @@ key_handle_key_press (GtkWidget *wid, GdkEventKey *evt, session *sess)
 enum
 {
 	KEY_COLUMN,
+	ACCEL_COLUMN,
 	ACTION_COLUMN,
 	D1_COLUMN,
 	D2_COLUMN,
@@ -395,15 +396,18 @@ key_dialog_set_key (GtkCellRendererAccel *accel, gchar *pathstr, guint accel_key
 	GtkTreeModel *model = get_store ();
 	GtkTreePath *path = gtk_tree_path_new_from_string (pathstr);
 	GtkTreeIter iter;
-	gchar *key_name;
+	gchar *label_name, *accel_name;
 
-	key_name = gtk_accelerator_name (accel_key, key_modifier_get_valid (accel_mods));
+	label_name = gtk_accelerator_get_label (accel_key, key_modifier_get_valid (accel_mods));
+	accel_name = gtk_accelerator_name (accel_key, key_modifier_get_valid (accel_mods));
 
 	gtk_tree_model_get_iter (model, &iter, path);
-	gtk_list_store_set (GTK_LIST_STORE (model), &iter, KEY_COLUMN, key_name, -1);
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter, KEY_COLUMN, label_name,
+						ACCEL_COLUMN, accel_name, -1);
 
 	gtk_tree_path_free (path);
-	g_free (key_name);
+	g_free (label_name);
+	g_free (accel_name);
 }
 
 static void
@@ -553,7 +557,7 @@ key_dialog_save (GtkWidget *wid, gpointer userdata)
 		{
 			kb = (struct key_binding *) g_malloc0 (sizeof (struct key_binding));
 
-			gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, KEY_COLUMN, &accel,
+			gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, ACCEL_COLUMN, &accel,
 															ACTION_COLUMN, &actiontext,
 															D1_COLUMN, &data1,
 															D2_COLUMN, &data2,
@@ -643,7 +647,7 @@ key_dialog_treeview_new (GtkWidget *box)
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
 
-	store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,
+	store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
 								G_TYPE_STRING, G_TYPE_STRING);
 	g_return_val_if_fail (store != NULL, NULL);
 
@@ -671,6 +675,13 @@ key_dialog_treeview_new (GtkWidget *box)
 												"text", KEY_COLUMN,
 												NULL);
 
+	render = gtk_cell_renderer_text_new ();
+	gtk_tree_view_insert_column_with_attributes (
+							GTK_TREE_VIEW (view), ACCEL_COLUMN,
+							"Accel", render,
+							"text", ACCEL_COLUMN,
+							NULL);
+
 	combostore = gtk_list_store_new (1, G_TYPE_STRING);
 	for (i = 0; i <= KEY_MAX_ACTIONS; i++)
 	{
@@ -721,6 +732,8 @@ key_dialog_treeview_new (GtkWidget *box)
 	col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), KEY_COLUMN);
 	gtk_tree_view_column_set_fixed_width (col, 200);
 	gtk_tree_view_column_set_resizable (col, TRUE);
+	col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), ACCEL_COLUMN);
+	gtk_tree_view_column_set_visible (col, FALSE);
 	col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), ACTION_COLUMN);
 	gtk_tree_view_column_set_fixed_width (col, 160);
 	col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), D1_COLUMN);
@@ -742,7 +755,7 @@ static void
 key_dialog_load (GtkListStore *store)
 {
 	struct key_binding *kb = NULL;
-	char *accel_text;
+	char *label_text, *accel_text;
 	GtkTreeIter iter;
 	GSList *list = keybind_list;
 
@@ -750,16 +763,19 @@ key_dialog_load (GtkListStore *store)
 	{
 		kb = (struct key_binding*)list->data;
 
+		label_text = gtk_accelerator_get_label (kb->keyval, kb->mod);
 		accel_text = gtk_accelerator_name (kb->keyval, kb->mod);
 
 		gtk_list_store_append (store, &iter);
 		gtk_list_store_set (store, &iter,
-							KEY_COLUMN, accel_text,
+							KEY_COLUMN, label_text,
+							ACCEL_COLUMN, accel_text,
 							ACTION_COLUMN, key_actions[kb->action].name,
 							D1_COLUMN, kb->data1,
 							D2_COLUMN, kb->data2, -1);
 
 		g_free (accel_text);
+		g_free (label_text);
 
 		list = g_slist_next (list);
 	}