commit c95562f8a916e9b37363a42834ca55ef3bc4310b
Author: Florian Weber <florian.weber@ueberbit.de>
Date:   Thu Apr 2 00:52:13 2015 +0200

    With config schema

diff --git a/core/modules/views/config/schema/views.display.schema.yml b/core/modules/views/config/schema/views.display.schema.yml
index d31678f..3dabf6a 100644
--- a/core/modules/views/config/schema/views.display.schema.yml
+++ b/core/modules/views/config/schema/views.display.schema.yml
@@ -34,6 +34,9 @@ views.display.page:
         weight:
           type: integer
           label: 'Weight'
+        enabled:
+          type: boolean
+          label: 'Enabled'
         menu_name:
           type: string
           label: 'Menu name'
diff --git a/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php b/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php
index 85c2350..3d10702 100644
--- a/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php
+++ b/core/modules/views/src/Plugin/Menu/ViewsMenuLink.php
@@ -140,7 +140,7 @@ public function updateLink(array $new_definition_values, $persist) {
       // Just save the title to the original view.
       $changed = FALSE;
       foreach ($new_definition_values as $key => $new_definition_value) {
-        if (isset($display['display_options']['menu'][$key]) && $display['display_options']['menu'][$key] != $new_definition_values[$key]) {
+        if (!isset($display['display_options']['menu'][$key]) || (isset($display['display_options']['menu'][$key]) && $display['display_options']['menu'][$key] != $new_definition_values[$key])) {
           $display['display_options']['menu'][$key] = $new_definition_values[$key];
           $changed = TRUE;
         }
diff --git a/core/modules/views/src/Plugin/views/display/Page.php b/core/modules/views/src/Plugin/views/display/Page.php
index 27905b8..80bb079 100644
--- a/core/modules/views/src/Plugin/views/display/Page.php
+++ b/core/modules/views/src/Plugin/views/display/Page.php
@@ -95,6 +95,7 @@ protected function defineOptions() {
         'title' => array('default' => ''),
         'description' => array('default' => ''),
         'weight' => array('default' => 0),
+        'enabled' => array('default' => 1),
         'menu_name' => array('default' => 'main'),
         'parent' => array('default' => ''),
         'context' => array('default' => ''),
@@ -275,6 +276,19 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
             '#markup' => $this->t('Menu selection requires the activation of Menu UI module.'),
           );
         }
+        $form['menu']['enabled'] = array(
+          '#type' => 'checkbox',
+          '#title' => $this->t('Enable menu link'),
+          '#description' => $this->t('Menu links that are not enabled will not be listed in any menu.'),
+          '#default_value' => isset($menu['enabled']) ? $menu['enabled'] : 0,
+          '#states' => array(
+            'visible' => array(
+              array(
+                ':input[name="menu[type]"]' => array('value' => 'normal'),
+              ),
+            ),
+          )
+        );
         $form['menu']['weight'] = array(
           '#title' => $this->t('Weight'),
           '#type' => 'textfield',
diff --git a/core/modules/views/tests/src/ViewsMenuLinkTest.php b/core/modules/views/tests/src/ViewsMenuLinkTest.php
new file mode 100644
index 0000000..b9e713b
--- /dev/null
+++ b/core/modules/views/tests/src/ViewsMenuLinkTest.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\views\ViewsMenuLinkTest.
+ */
+
+namespace Drupal\Tests\views;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Menu link test.
+ *
+ * @group views
+ */
+class ViewsMenuLinkTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'menu_ui',
+    'user',
+    'views'
+  );
+
+  /**
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  public $entityManger;
+
+  /**
+   * @var \Drupal\Core\Menu\MenuLinkManagerInterface
+   */
+  public $menuLinkManager;
+
+  /**
+   * @var \Drupal\Core\Menu\StaticMenuLinkOverridesInterface
+   */
+  protected $menuLinkOverrides;
+
+  protected function setUp() {
+    parent::setUp();
+
+    $this->entityManger = $this->container->get('entity.manager');
+    $this->menuLinkManager = $this->container->get('plugin.manager.menu.link');
+    $this->menuLinkOverrides = $this->container->get('menu_link.static.overrides');
+  }
+
+  public function testMenuLinkOverrides() {
+    $storage = $this->entityManger->getStorage('view');
+
+    $data = \Symfony\Component\Yaml\Yaml::parse(drupal_get_path('module', 'views_test_config') . '/test_views/views.view.test_page_display_menu.yml');
+    $view = $storage->createFromStorageRecord($data);
+    $view->save();
+
+    $this->menuLinkManager->rebuild();
+
+    /**
+     * Link from views module.
+     */
+    $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3');
+    $this->assertTrue($views_link['enabled'], 'Menu link is enabled.');
+    $views_link['enabled'] = 0;
+    $this->menuLinkManager->updateDefinition($views_link['id'], $views_link);
+    $views_link = $this->menuLinkManager->getDefinition($views_link['id']);
+    $this->assertFalse($views_link['enabled'], 'Menu link is disabled.');
+    $this->menuLinkManager->rebuild();
+    $this->assertFalse($views_link['enabled'], 'Menu link is disabled.');
+
+    /**
+     * Link from user module.
+     */
+    $user_link = $this->menuLinkManager->getDefinition('user.page');
+    $this->assertTrue($user_link['enabled'], 'Menu link is enabled.');
+    $user_link['enabled'] = 0;
+    $this->menuLinkManager->updateDefinition($user_link['id'], $user_link);
+    $this->assertFalse($user_link['enabled'], 'Menu link is disabled.');
+    $this->menuLinkManager->rebuild();
+    $this->assertFalse($user_link['enabled'], 'Menu link is disabled.');
+
+    debug($views_link);
+    debug($user_link);
+
+    $this->menuLinkOverrides->reload();
+    debug($this->menuLinkOverrides->loadOverride($views_link['id']));
+    debug($this->menuLinkOverrides->loadOverride($user_link['id']));
+
+    $this->resetAll();
+
+    $views_link = $this->menuLinkManager->getDefinition('views_view:views.test_page_display_menu.page_3');
+    debug($views_link);
+    $this->assertFalse($views_link['enabled'], 'Menu link is disabled.');
+
+    $user_link = $this->menuLinkManager->getDefinition('user.page');
+    debug($user_link);
+    $this->assertFalse($user_link['enabled'], 'Menu link is disabled.');
+  }
+
+}
