summaryrefslogtreecommitdiff
path: root/plugins/gtkui/hotkeys.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-13 16:39:59 +0200
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-13 16:39:59 +0200
commit9514c931d34c5ff3914fc2c29243d50a047b0937 (patch)
tree07f59e4b2cba5dd5019811d24b6f980d1c114ed4 /plugins/gtkui/hotkeys.c
parent8432dde252701d869a81ab85a4412445b528cf24 (diff)
gtkui: disallow assigning duplicate hotkeys
Diffstat (limited to 'plugins/gtkui/hotkeys.c')
-rw-r--r--plugins/gtkui/hotkeys.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/plugins/gtkui/hotkeys.c b/plugins/gtkui/hotkeys.c
index 9067a5e9..12dcaec3 100644
--- a/plugins/gtkui/hotkeys.c
+++ b/plugins/gtkui/hotkeys.c
@@ -719,6 +719,18 @@ get_keycombo_string (guint accel_key, GdkModifierType accel_mods, char *new_valu
strcat (new_value, name);
}
+static gboolean
+test_existing_keycombo (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) {
+ GValue keycombo = {0,};
+ gtk_tree_model_get_value (model, iter, 0, &keycombo);
+ const char *val = g_value_get_string (&keycombo);
+ if (val && !strcmp (val, data)) {
+ *((char *)data) = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
gboolean
on_hotkeys_set_key_key_press_event (GtkWidget *widget,
GdkEventKey *event,
@@ -787,6 +799,19 @@ on_hotkeys_set_key_key_press_event (GtkWidget *widget,
}
}
+ GtkWidget *hotkeys = lookup_widget (prefwin, "hotkeys_list");
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (hotkeys));
+
+ // check if this key already registered
+ get_keycombo_string (accel_key, accel_mods, name);
+ gtk_tree_model_foreach (model, test_existing_keycombo, name);
+ if (*name == 0) {
+ // duplicate
+ gtk_button_set_label (GTK_BUTTON (widget), _("Duplicate key combination!"));
+ gtk_widget_error_bell (widget);
+ goto out;
+ }
+
#if 0
if (!gtk_accelerator_valid (accel_key, accel_mods))
{
@@ -803,10 +828,8 @@ on_hotkeys_set_key_key_press_event (GtkWidget *widget,
// update the tree
{
- GtkWidget *hotkeys = lookup_widget (prefwin, "hotkeys_list");
GtkTreePath *path;
gtk_tree_view_get_cursor (GTK_TREE_VIEW (hotkeys), &path, NULL);
- GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (hotkeys));
GtkTreeIter iter;
if (path && gtk_tree_model_get_iter (model, &iter, path)) {
gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, name, -1);