diff options
Diffstat (limited to 'capplets/keybindings/gnome-keybinding-properties.c')
-rw-r--r-- | capplets/keybindings/gnome-keybinding-properties.c | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/capplets/keybindings/gnome-keybinding-properties.c b/capplets/keybindings/gnome-keybinding-properties.c index ffb2e8265..485359d0c 100644 --- a/capplets/keybindings/gnome-keybinding-properties.c +++ b/capplets/keybindings/gnome-keybinding-properties.c @@ -523,6 +523,31 @@ key_theme_changed (GConfClient *client, } +static gboolean +cb_check_for_uniqueness (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer user_data) +{ + KeyEntry *key_entry; + KeyEntry *tmp_key_entry; + + key_entry = (KeyEntry *)user_data; + gtk_tree_model_get (key_entry->model, iter, + KEYENTRY_COLUMN, &tmp_key_entry, + -1); + + if (tmp_key_entry != NULL && + key_entry->keyval == tmp_key_entry->keyval && + key_entry->mask == tmp_key_entry->mask) + { + key_entry->editable = FALSE; + key_entry->gconf_key = tmp_key_entry->gconf_key; + return TRUE; + } + return FALSE; +} + static void accel_edited_callback (GtkCellRendererText *cell, const char *path_string, @@ -535,7 +560,7 @@ accel_edited_callback (GtkCellRendererText *cell, GtkTreeModel *model; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; - KeyEntry *key_entry; + KeyEntry *key_entry, tmp_key; GError *err = NULL; char *str; @@ -547,7 +572,34 @@ accel_edited_callback (GtkCellRendererText *cell, /* sanity check */ if (key_entry == NULL) + { + gtk_tree_path_free (path); + return; + } + + tmp_key.model = model; + tmp_key.keyval = keyval; + tmp_key.mask = mask; + tmp_key.editable = TRUE; /* kludge to stuff in a return flag */ + gtk_tree_model_foreach (model, cb_check_for_uniqueness, &tmp_key); + + /* flag to see if the new accelerator was in use by something */ + if (!tmp_key.editable) + { + GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view))), + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_OK, + _("That accelerator key is already in use by: %s\n"), + key_entry->gconf_key); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + + egg_cell_renderer_keys_set_accelerator (EGG_CELL_RENDERER_KEYS (cell), + key_entry->keyval, key_entry->mask); + gtk_tree_path_free (path); return; + } str = binding_name (keyval, mask, FALSE); |