static void gimp_action_view_accel_edited (GtkCellRendererAccel *accel, const char *path_string, guint accel_key, GdkModifierType accel_mask, guint hardware_keycode, GimpActionView *view) { GtkAction *action; guint action_accel_key; GdkModifierType action_accel_mask; const gchar *accel_path; accel_path = gimp_action_view_get_accel_action (view, path_string, &action, &action_accel_key, &action_accel_mask); if (! accel_path) return; if (accel_key == action_accel_key && accel_mask == action_accel_mask) return; if (! accel_key || /* Don't allow arrow keys, they are all swallowed by the canvas * and cannot be invoked anyway, the same applies to space. */ accel_key == GDK_KEY_Left || accel_key == GDK_KEY_Right || accel_key == GDK_KEY_Up || accel_key == GDK_KEY_Down || accel_key == GDK_KEY_space || accel_key == GDK_KEY_KP_Space) { gimp_message_literal (view->manager->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Invalid shortcut.")); } else if (accel_key == GDK_KEY_F1 || action_accel_key == GDK_KEY_F1) { gimp_message_literal (view->manager->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("F1 cannot be remapped.")); } else if (! gtk_accel_map_change_entry (accel_path, accel_key, accel_mask, FALSE)) { GtkTreeModel *model; GtkAction *conflict_action = NULL; GtkTreeIter iter; gboolean iter_valid; model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); iter_valid; iter_valid = gtk_tree_model_iter_next (model, &iter)) { GtkTreeIter child_iter; gboolean child_valid; for (child_valid = gtk_tree_model_iter_children (model, &child_iter, &iter); child_valid; child_valid = gtk_tree_model_iter_next (model, &child_iter)) { guint child_accel_key; GdkModifierType child_accel_mask; gtk_tree_model_get (model, &child_iter, GIMP_ACTION_VIEW_COLUMN_ACCEL_KEY, &child_accel_key, GIMP_ACTION_VIEW_COLUMN_ACCEL_MASK, &child_accel_mask, -1); if (accel_key == child_accel_key && accel_mask == child_accel_mask) { gtk_tree_model_get (model, &child_iter, GIMP_ACTION_VIEW_COLUMN_ACTION, &conflict_action, -1); break; } } if (conflict_action) break; } if (conflict_action != action) { if (conflict_action) { gimp_action_view_conflict_confirm (view, conflict_action, accel_key, accel_mask, accel_path); g_object_unref (conflict_action); } else { gimp_message_literal (view->manager->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Changing shortcut failed.")); } } } }
static void gimp_action_view_accel_edited (GtkCellRendererAccel *accel, const char *path_string, guint accel_key, GdkModifierType accel_mask, guint hardware_keycode, GimpActionView *view) { GtkAction *action; const gchar *accel_path; accel_path = gimp_action_view_get_accel_action (view, path_string, &action); if (! accel_path) return; if (! accel_key) { gimp_message_literal (view->manager->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Invalid shortcut.")); } else if (! gtk_accel_map_change_entry (accel_path, accel_key, accel_mask, FALSE)) { GtkTreeModel *model; GtkAction *conflict_action = NULL; GtkTreeIter iter; gboolean iter_valid; model = gtk_tree_view_get_model (GTK_TREE_VIEW (view)); model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); for (iter_valid = gtk_tree_model_get_iter_first (model, &iter); iter_valid; iter_valid = gtk_tree_model_iter_next (model, &iter)) { GtkTreeIter child_iter; gboolean child_valid; for (child_valid = gtk_tree_model_iter_children (model, &child_iter, &iter); child_valid; child_valid = gtk_tree_model_iter_next (model, &child_iter)) { guint child_accel_key; GdkModifierType child_accel_mask; gtk_tree_model_get (model, &child_iter, GIMP_ACTION_VIEW_COLUMN_ACCEL_KEY, &child_accel_key, GIMP_ACTION_VIEW_COLUMN_ACCEL_MASK, &child_accel_mask, -1); if (accel_key == child_accel_key && accel_mask == child_accel_mask) { gtk_tree_model_get (model, &child_iter, GIMP_ACTION_VIEW_COLUMN_ACTION, &conflict_action, -1); break; } } if (conflict_action) break; } if (conflict_action != action) { if (conflict_action) { gimp_action_view_conflict_confirm (view, conflict_action, accel_key, accel_mask, accel_path); g_object_unref (conflict_action); } else { gimp_message_literal (view->manager->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Changing shortcut failed.")); } } } }