summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser.cc
diff options
context:
space:
mode:
authoridanan@chromium.org <idanan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-24 23:27:29 +0000
committeridanan@chromium.org <idanan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-24 23:27:29 +0000
commit485fba4e0ffed47471580592533ea060239a7f7b (patch)
tree170aabf3134295001a605c17ad192be8dd72a079 /chrome/browser/browser.cc
parent53703f7d80d3a691af68bcfd7f83f59b965fb642 (diff)
downloadchromium_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.cc66
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 {