[1;33mdiff --git a/includes/nodequeue.admin.inc b/includes/nodequeue.admin.inc[m
[1;33mindex 06fca99..3ada83b 100644[m
[1;33m--- a/includes/nodequeue.admin.inc[m
[1;33m+++ b/includes/nodequeue.admin.inc[m
[1;35m@@ -35,6 +35,12 @@[m [mfunction nodequeue_admin_settings($form, &$form_state) {[m
       If you wish to have fewer views, you can disable this option and use a single view with an argument for the qid."),[m
     '#default_value' => variable_get('nodequeue_view_per_queue', 1),[m
   );[m
[1;32m+[m[1;32m  $form['nodequeue_show_contextual_links'] = array([m
[1;32m+[m[1;32m    '#type' => 'checkbox',[m
[1;32m+[m[1;32m    '#title' => t('Display contextual links.'),[m
[1;32m+[m[1;32m    '#description' => t("A contextual link to edit the nodequeue will be displayed on Views that have a nodequeue relationship."),[m
[1;32m+[m[1;32m    '#default_value' => variable_get('nodequeue_show_contextual_links', TRUE),[m
[1;32m+[m[1;32m  );[m
   return system_settings_form($form);[m
 }[m
 [m
[1;33mdiff --git a/includes/views/nodequeue.views.inc b/includes/views/nodequeue.views.inc[m
[1;33mindex a7ea7cb..72c873e 100644[m
[1;33m--- a/includes/views/nodequeue.views.inc[m
[1;33m+++ b/includes/views/nodequeue.views.inc[m
[1;35m@@ -269,3 +269,85 @@[m [mfunction nodequeue_views_data_alter(&$data) {[m
     ),[m
   );[m
 }[m
[1;32m+[m
[1;32m+[m
[1;32m+[m
[1;32m+[m[1;32m/**[m
[1;32m+[m[1;32m * Implements hook_contextual_links_view_alter().[m
[1;32m+[m[1;32m */[m
[1;32m+[m[1;32mfunction nodequeue_contextual_links_view_alter(&$element, $items) {[m
[1;32m+[m[1;32m  if (empty($element['#element']['#contextual_links']['views_ui'])) {[m
[1;32m+[m[1;32m    return;[m
[1;32m+[m[1;32m  }[m
[1;32m+[m[1;32m  if (!variable_get('nodequeue_show_contextual_links', TRUE)) {[m
[1;32m+[m[1;32m    return;[m
[1;32m+[m[1;32m  }[m
[1;32m+[m
[1;32m+[m[1;32m  // If this is a block placed by Context then the View info is stored in[m
[1;32m+[m[1;32m  // a slightly different place[m
[1;32m+[m[1;32m  $views_info = empty($element['#element']['#views_contextual_links_info'])[m
[1;32m+[m[1;32m    ? $element['#element']['content']['#views_contextual_links_info'][m
[1;32m+[m[1;32m    : $element['#element']['#views_contextual_links_info'];[m
[1;32m+[m
[1;32m+[m[1;32m  $display_id = $views_info['views_ui']['view_display_id'];[m
[1;32m+[m[1;32m  $view_name = $views_info['views_ui']['view_name'];[m
[1;32m+[m[1;32m  $view = views_get_view($view_name, TRUE);[m
[1;32m+[m
[1;32m+[m[1;32m  // If the view is empty, e.g. it wasn't saved yet and has no display[m
[1;32m+[m[1;32m  // objects, this won't work.[m
[1;32m+[m[1;32m  if (empty($view)) {[m
[1;32m+[m[1;32m    return;[m
[1;32m+[m[1;32m  }[m
[1;32m+[m[1;32m  $view->build($display_id);[m
[1;32m+[m
[1;32m+[m[1;32m  $nodequeue_rels = array([m
[1;32m+[m[1;32m    'nodequeue_handler_relationship_nodequeue'[m
[1;32m+[m[1;32m  );[m
[1;32m+[m[1;32m  $subqueue_arg_titles = array([m
[1;32m+[m[1;32m    'Subqueue reference',[m
[1;32m+[m[1;32m    'Subqueue reference (optional)',[m
[1;32m+[m[1;32m  );[m
[1;32m+[m
[1;32m+[m[1;32m  // Cycle through all the relationships to find ones provided by nodequeue.[m
[1;32m+[m[1;32m  // We'll use this as a trigger to attach the links.[m
[1;32m+[m[1;32m  foreach ($view->relationship as $rel) {[m
[1;32m+[m[1;32m    if (!in_array(get_class($rel), $nodequeue_rels, TRUE)) {[m
[1;32m+[m[1;32m      continue;[m
[1;32m+[m[1;32m    }[m
[1;32m+[m
[1;32m+[m[1;32m    foreach ($rel->options['names'] as $queue_name) {[m
[1;32m+[m[1;32m      if (gettype($queue_name) != 'string') {[m
[1;32m+[m[1;32m        continue;[m
[1;32m+[m[1;32m      }[m
[1;32m+[m[1;32m      $qid_map = nodequeue_get_qid_map();[m
[1;32m+[m[1;32m      $qid = $qid_map[$queue_name];[m
[1;32m+[m[1;32m      $queue = nodequeue_load($qid);[m
[1;32m+[m[1;32m      $element['#links'][$queue_name] = array([m
[1;32m+[m[1;32m        'title' => t('Edit queue: !queue_name', array('!queue_name' => $queue->title)),[m
[1;32m+[m[1;32m        'href' => 'admin/structure/nodequeue/' . $qid . '/view',[m
[1;32m+[m[1;32m        'query' => array('destination' => current_path()),[m
[1;32m+[m[1;32m      );[m
[1;32m+[m
[1;32m+[m[1;32m      // Cycle through all arguments to find ones that limit us by subqueue.[m
[1;32m+[m[1;32m      // If we find some, add further links to subqueues.[m
[1;32m+[m[1;32m      foreach ($view->argument as $arg) {[m
[1;32m+[m[1;32m        $is_subqueue_arg = $arg->options['relationship'] == $rel->options['id'][m
[1;32m+[m[1;32m          && in_array($arg->definition['title'], $subqueue_arg_titles, TRUE);[m
[1;32m+[m
[1;32m+[m[1;32m        if (!$is_subqueue_arg) {[m
[1;32m+[m[1;32m          continue;[m
[1;32m+[m[1;32m        }[m
[1;32m+[m
[1;32m+[m[1;32m        // Provide contextual links for each of the subqueues.[m
[1;32m+[m[1;32m        $subqueues = nodequeue_load_subqueues_by_reference(array($qid => $arg->value));[m
[1;32m+[m[1;32m        foreach ($subqueues as $sqid => $subqueue) {[m
[1;32m+[m[1;32m          $element['#links'][$queue_name . '_' . $sqid] = array([m
[1;32m+[m[1;32m            'title' => t('Edit subqueue: !queue_name > !subqueue_title', array('!queue_name' => $queue->title, '!subqueue_title' => $subqueue->title)),[m
[1;32m+[m[1;32m            'href' => 'admin/structure/nodequeue/' . $qid . '/view/' . $sqid,[m
[1;32m+[m[1;32m            'query' => array('destination' => current_path()),[m
[1;32m+[m[1;32m          );[m
[1;32m+[m[1;32m        }[m
[1;32m+[m[1;32m      }[m
[1;32m+[m[1;32m    }[m
[1;32m+[m[1;32m  }[m
[1;32m+[m[1;32m}[m
