diff options
author | idanan@chromium.org <idanan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 23:27:29 +0000 |
---|---|---|
committer | idanan@chromium.org <idanan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-24 23:27:29 +0000 |
commit | 485fba4e0ffed47471580592533ea060239a7f7b (patch) | |
tree | 170aabf3134295001a605c17ad192be8dd72a079 /chrome/browser/browser.cc | |
parent | 53703f7d80d3a691af68bcfd7f83f59b965fb642 (diff) | |
download | chromium_src-485fba4e0ffed47471580592533ea060239a7f7b.zip chromium_src-485fba4e0ffed47471580592533ea060239a7f7b.tar.gz chromium_src-485fba4e0ffed47471580592533ea060239a7f7b.tar.bz2 |
Redone http://codereview.chromium.org/42571
Issue 6477: Support modifier clicks on UI elements Mouse event flags transformed to WindoOpenDisposition so that browser commands can all inteterpert event modifiers. Implemented home, forward and backwards middle-click andshift middle click. Previously working on issue 358 which was market a duplicate and concerned with the home and tabstrip subset of this behavior: Can't open a new tab by middle-clicking home button. No functionality has been lost or altered, only the use ofmodifiers give access to increased functionality.
BUG=6477
TBR=maruel
Review URL: http://codereview.chromium.org/53020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12403 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r-- | chrome/browser/browser.cc | 66 |
1 files changed, 46 insertions, 20 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index eecdd1a..5e1b4ca 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -551,7 +551,7 @@ void Browser::ShowSingleDOMUITab(const GURL& url) { /////////////////////////////////////////////////////////////////////////////// // Browser, Assorted browser commands: -void Browser::GoBack() { +void Browser::GoBack(WindowOpenDisposition disposition) { UserMetrics::RecordAction(L"Back", profile_); // If we are showing an interstitial, just hide it. @@ -565,14 +565,37 @@ void Browser::GoBack() { web_contents->interstitial_page()->DontProceed(); return; } - if (current_tab->controller()->CanGoBack()) - current_tab->controller()->GoBack(); + + if (current_tab->controller()->CanGoBack()) { + NavigationController* controller = 0; + if (disposition == NEW_FOREGROUND_TAB || disposition == NEW_BACKGROUND_TAB){ + controller = GetSelectedTabContents()->controller()->Clone(); + tabstrip_model_.AddTabContents( + controller->active_contents(), -1, + PageTransition::LINK, disposition == NEW_FOREGROUND_TAB); + } else { + // Default disposition is CURRENT_TAB. + controller = current_tab->controller(); + } + controller->GoBack(); + } } -void Browser::GoForward() { +void Browser::GoForward(WindowOpenDisposition disp) { UserMetrics::RecordAction(L"Forward", profile_); - if (GetSelectedTabContents()->controller()->CanGoForward()) - GetSelectedTabContents()->controller()->GoForward(); + if (GetSelectedTabContents()->controller()->CanGoForward()) { + NavigationController* controller = 0; + if (disp == NEW_FOREGROUND_TAB || disp == NEW_BACKGROUND_TAB) { + controller = GetSelectedTabContents()->controller()->Clone(); + tabstrip_model_.AddTabContents( + controller->active_contents(), -1, + PageTransition::LINK, disp == NEW_FOREGROUND_TAB); + } else { + // Default disposition is CURRENT_TAB. + controller = GetSelectedTabContents()->controller(); + } + controller->GoForward(); + } } void Browser::Reload() { @@ -597,11 +620,9 @@ void Browser::Reload() { } } -void Browser::Home() { +void Browser::Home(WindowOpenDisposition disposition) { UserMetrics::RecordAction(L"Home", profile_); - GURL homepage_url = GetHomePage(); - GetSelectedTabContents()->controller()->LoadURL( - homepage_url, GURL(), PageTransition::AUTO_BOOKMARK); + OpenURL(GetHomePage(), GURL(), disposition, PageTransition::AUTO_BOOKMARK); } void Browser::OpenCurrentURL() { @@ -612,9 +633,9 @@ void Browser::OpenCurrentURL() { location_bar->GetPageTransition()); } -void Browser::Go() { +void Browser::Go(WindowOpenDisposition disposition) { UserMetrics::RecordAction(L"Go", profile_); - window_->GetLocationBar()->AcceptInput(); + window_->GetLocationBar()->AcceptInputWithDisposition(disposition); } void Browser::Stop() { @@ -1095,10 +1116,8 @@ Browser* Browser::GetBrowserForController( return NULL; } -/////////////////////////////////////////////////////////////////////////////// -// Browser, CommandUpdater::CommandUpdaterDelegate implementation: - -void Browser::ExecuteCommand(int id) { +void Browser::ExecuteCommandWithDisposition( + int id, WindowOpenDisposition disposition) { // No commands are enabled if there is not yet any selected tab. // TODO(pkasting): It seems like we should not need this, because either // most/all commands should not have been enabled yet anyway or the ones that @@ -1115,12 +1134,12 @@ void Browser::ExecuteCommand(int id) { // declaration order in browser.h! switch (id) { // Navigation commands - case IDC_BACK: GoBack(); break; - case IDC_FORWARD: GoForward(); break; + case IDC_BACK: GoBack(disposition); break; + case IDC_FORWARD: GoForward(disposition); break; case IDC_RELOAD: Reload(); break; - case IDC_HOME: Home(); break; + case IDC_HOME: Home(disposition); break; case IDC_OPEN_CURRENT_URL: OpenCurrentURL(); break; - case IDC_GO: Go(); break; + case IDC_GO: Go(disposition); break; case IDC_STOP: Stop(); break; // Window management commands @@ -1275,6 +1294,13 @@ void Browser::ExecuteCommand(int id) { } /////////////////////////////////////////////////////////////////////////////// +// Browser, CommandUpdater::CommandUpdaterDelegate implementation: + +void Browser::ExecuteCommand(int id) { + ExecuteCommandWithDisposition(id, CURRENT_TAB); +} + +/////////////////////////////////////////////////////////////////////////////// // Browser, TabStripModelDelegate implementation: GURL Browser::GetBlankTabURL() const { |