summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormorrita@chromium.org <morrita@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-30 08:20:58 +0000
committermorrita@chromium.org <morrita@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-30 08:20:58 +0000
commit6647a1813e16c5299c84f1ee80473741460df8a9 (patch)
tree09e270741e0bb1f76c7a67c78dd19d072465f763
parentfcf5f89a21c2cc33724a8abc51443bd1aed65d59 (diff)
downloadchromium_src-6647a1813e16c5299c84f1ee80473741460df8a9.zip
chromium_src-6647a1813e16c5299c84f1ee80473741460df8a9.tar.gz
chromium_src-6647a1813e16c5299c84f1ee80473741460df8a9.tar.bz2
NOTE:
The last goal of this series of patches is not to expose WindowOpenDisposition in ui and base modules. In the series of these patches, Browser::ExecuteCommandWithDisposition and these kind of functions will be changed to Browser::ExecuteCommandWithEventFlags, which takes platform independent event flags (ui::EventFlags) The previous patch (http://codereview.chromium.org/6893046/) was so big, I decided them into much small patches. BUG=93700 TEST=GTKUtilTest Review URL: http://codereview.chromium.org/7712001 Patch from Shinya Kawanaka <shinyak@google.com>. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98790 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/event_disposition.cc20
-rw-r--r--chrome/browser/event_disposition.h20
-rw-r--r--chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.cc3
-rw-r--r--chrome/browser/ui/gtk/gtk_util.cc27
-rw-r--r--chrome/browser/ui/gtk/gtk_util.h8
-rw-r--r--chrome/browser/ui/gtk/gtk_util_unittest.cc49
-rw-r--r--chrome/browser/ui/gtk/menu_gtk.cc7
-rw-r--r--chrome/browser/ui/gtk/reload_button_gtk.cc2
-rw-r--r--chrome/browser/ui/views/event_utils.cc10
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--chrome/chrome_tests.gypi3
11 files changed, 129 insertions, 22 deletions
diff --git a/chrome/browser/event_disposition.cc b/chrome/browser/event_disposition.cc
new file mode 100644
index 0000000..618e11b
--- /dev/null
+++ b/chrome/browser/event_disposition.cc
@@ -0,0 +1,20 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/event_disposition.h"
+#include "content/browser/disposition_utils.h"
+#include "ui/base/events.h"
+
+namespace browser {
+
+WindowOpenDisposition DispositionFromEventFlags(int event_flags) {
+ return disposition_utils::DispositionFromClick(
+ (event_flags & ui::EF_MIDDLE_BUTTON_DOWN) != 0,
+ (event_flags & ui::EF_ALT_DOWN) != 0,
+ (event_flags & ui::EF_CONTROL_DOWN) != 0,
+ false /* meta_key */,
+ (event_flags & ui::EF_SHIFT_DOWN) != 0);
+}
+
+}
diff --git a/chrome/browser/event_disposition.h b/chrome/browser/event_disposition.h
new file mode 100644
index 0000000..19c7ebc
--- /dev/null
+++ b/chrome/browser/event_disposition.h
@@ -0,0 +1,20 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EVENT_DISPOSITION_H__
+#define CHROME_BROWSER_EVENT_DISPOSITION_H__
+#pragma once
+
+#include "webkit/glue/window_open_disposition.h"
+
+namespace browser {
+
+// Translates event flags into what kind of disposition they represents.
+// For example, a middle click would mean to open a background tab.
+// event_flags are the flags as understood by views::MouseEvent.
+WindowOpenDisposition DispositionFromEventFlags(int event_flags);
+
+}
+
+#endif // CHROME_BROWSER_EVENT_DISPOSITION_H__
diff --git a/chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.cc b/chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.cc
index ee302fd8..94de289 100644
--- a/chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.cc
+++ b/chrome/browser/ui/gtk/bookmarks/bookmark_menu_controller_gtk.cc
@@ -292,7 +292,8 @@ gboolean BookmarkMenuController::OnButtonReleased(
// The menu item is a link node.
if (event->button == 1 || event->button == 2) {
WindowOpenDisposition disposition =
- event_utils::DispositionFromEventFlags(event->state);
+ event_utils::DispositionFromGdkState(event->state);
+
NavigateToMenuItem(sender, disposition);
// We need to manually dismiss the popup menu because we're overriding
diff --git a/chrome/browser/ui/gtk/gtk_util.cc b/chrome/browser/ui/gtk/gtk_util.cc
index c116bef..25edfa6 100644
--- a/chrome/browser/ui/gtk/gtk_util.cc
+++ b/chrome/browser/ui/gtk/gtk_util.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/autocomplete/autocomplete.h"
#include "chrome/browser/autocomplete/autocomplete_classifier.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
+#include "chrome/browser/event_disposition.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.h"
@@ -35,6 +36,7 @@
#include "grit/theme_resources_standard.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/events.h"
#include "ui/base/gtk/gtk_hig_constants.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
@@ -196,13 +198,22 @@ GtkWidget* GetBrowserWindowFocusedWidget(BrowserWindow* window) {
namespace event_utils {
-WindowOpenDisposition DispositionFromEventFlags(guint event_flags) {
- return disposition_utils::DispositionFromClick(
- event_flags & GDK_BUTTON2_MASK,
- event_flags & GDK_MOD1_MASK,
- event_flags & GDK_CONTROL_MASK,
- event_flags & GDK_META_MASK,
- event_flags & GDK_SHIFT_MASK);
+// TODO(shinyak) This function will be removed after refactoring.
+WindowOpenDisposition DispositionFromGdkState(guint state) {
+ int event_flags = EventFlagsFromGdkState(state);
+ return browser::DispositionFromEventFlags(event_flags);
+}
+
+int EventFlagsFromGdkState(guint state) {
+ int flags = 0;
+ flags |= (state & GDK_LOCK_MASK) ? ui::EF_CAPS_LOCK_DOWN : 0;
+ flags |= (state & GDK_CONTROL_MASK) ? ui::EF_CONTROL_DOWN : 0;
+ flags |= (state & GDK_SHIFT_MASK) ? ui::EF_SHIFT_DOWN : 0;
+ flags |= (state & GDK_MOD1_MASK) ? ui::EF_ALT_DOWN : 0;
+ flags |= (state & GDK_BUTTON1_MASK) ? ui::EF_LEFT_BUTTON_DOWN : 0;
+ flags |= (state & GDK_BUTTON2_MASK) ? ui::EF_MIDDLE_BUTTON_DOWN : 0;
+ flags |= (state & GDK_BUTTON3_MASK) ? ui::EF_RIGHT_BUTTON_DOWN : 0;
+ return flags;
}
} // namespace event_utils
@@ -901,7 +912,7 @@ WindowOpenDisposition DispositionForCurrentButtonPressEvent() {
guint state = event->button.state;
gdk_event_free(event);
- return event_utils::DispositionFromEventFlags(state);
+ return event_utils::DispositionFromGdkState(state);
}
bool GrabAllInput(GtkWidget* widget) {
diff --git a/chrome/browser/ui/gtk/gtk_util.h b/chrome/browser/ui/gtk/gtk_util.h
index f12c727..f4e89fd 100644
--- a/chrome/browser/ui/gtk/gtk_util.h
+++ b/chrome/browser/ui/gtk/gtk_util.h
@@ -29,10 +29,12 @@ struct RendererPreferences; // from common/renderer_preferences.h
namespace event_utils {
-// Translates event flags into what kind of disposition they represent.
+// Translates GdkEvent state into what kind of disposition they represent.
// For example, a middle click would mean to open a background tab.
-// event_flags are the state in the GdkEvent structure.
-WindowOpenDisposition DispositionFromEventFlags(guint state);
+WindowOpenDisposition DispositionFromGdkState(guint state);
+
+// Translates event flags into plaform independent event flags.
+int EventFlagsFromGdkState(guint state);
} // namespace event_utils
diff --git a/chrome/browser/ui/gtk/gtk_util_unittest.cc b/chrome/browser/ui/gtk/gtk_util_unittest.cc
new file mode 100644
index 0000000..198f374
--- /dev/null
+++ b/chrome/browser/ui/gtk/gtk_util_unittest.cc
@@ -0,0 +1,49 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gtk_util.h"
+
+#include "base/stringprintf.h"
+#include "ui/base/events.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+static const guint states[] = {
+ GDK_LOCK_MASK,
+ GDK_CONTROL_MASK,
+ GDK_SHIFT_MASK,
+ GDK_MOD1_MASK,
+ GDK_BUTTON1_MASK,
+ GDK_BUTTON2_MASK,
+ GDK_BUTTON3_MASK
+};
+
+static const int flags[] = {
+ ui::EF_CAPS_LOCK_DOWN,
+ ui::EF_CONTROL_DOWN,
+ ui::EF_SHIFT_DOWN,
+ ui::EF_ALT_DOWN,
+ ui::EF_LEFT_BUTTON_DOWN,
+ ui::EF_MIDDLE_BUTTON_DOWN,
+ ui::EF_RIGHT_BUTTON_DOWN
+};
+
+TEST(GTKUtilTest, TestEventFlagsFromGdkState) {
+ ASSERT_EQ(arraysize(states), arraysize(flags));
+
+ const int size = arraysize(states);
+ for (int i = 0; i < size; ++i) {
+ SCOPED_TRACE(base::StringPrintf(
+ "Checking EventFlagsFromGdkState: i = %d", i));
+ EXPECT_EQ(flags[i], event_utils::EventFlagsFromGdkState(states[i]));
+ }
+
+ for (int i = 0; i < size; ++i) {
+ for (int j = i + 1; j < size; ++j) {
+ SCOPED_TRACE(base::StringPrintf(
+ "Checking EventFlagsFromGdkState: i = %d, j = %d", i, j));
+ EXPECT_EQ(flags[i] | flags[j],
+ event_utils::EventFlagsFromGdkState(states[i] | states[j]));
+ }
+ }
+}
diff --git a/chrome/browser/ui/gtk/menu_gtk.cc b/chrome/browser/ui/gtk/menu_gtk.cc
index 3918ee6..2ffd764 100644
--- a/chrome/browser/ui/gtk/menu_gtk.cc
+++ b/chrome/browser/ui/gtk/menu_gtk.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/ui/gtk/gtk_custom_menu.h"
#include "chrome/browser/ui/gtk/gtk_custom_menu_item.h"
#include "chrome/browser/ui/gtk/gtk_util.h"
+#include "chrome/browser/ui/views/event_utils.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/models/accelerator_gtk.h"
#include "ui/base/models/button_menu_item_model.h"
@@ -707,8 +708,10 @@ void MenuGtk::ExecuteCommand(ui::MenuModel* model, int id) {
GdkEvent* event = gtk_get_current_event();
if (event && event->type == GDK_BUTTON_RELEASE) {
- model->ActivatedAtWithDisposition(
- id, event_utils::DispositionFromEventFlags(event->button.state));
+ WindowOpenDisposition disposition =
+ event_utils::DispositionFromGdkState(event->button.state);
+
+ model->ActivatedAtWithDisposition(id, disposition);
} else {
model->ActivatedAt(id);
}
diff --git a/chrome/browser/ui/gtk/reload_button_gtk.cc b/chrome/browser/ui/gtk/reload_button_gtk.cc
index 5daf4de..d6e2501 100644
--- a/chrome/browser/ui/gtk/reload_button_gtk.cc
+++ b/chrome/browser/ui/gtk/reload_button_gtk.cc
@@ -172,7 +172,7 @@ void ReloadButtonGtk::OnClicked(GtkWidget* /* sender */) {
}
WindowOpenDisposition disposition =
- event_utils::DispositionFromEventFlags(modifier_state_uint);
+ event_utils::DispositionFromGdkState(modifier_state_uint);
if ((disposition == CURRENT_TAB) && location_bar_) {
// Forcibly reset the location bar, since otherwise it won't discard any
// ongoing user edits, since it doesn't realize this is a user-initiated
diff --git a/chrome/browser/ui/views/event_utils.cc b/chrome/browser/ui/views/event_utils.cc
index 49d0213..f134f38 100644
--- a/chrome/browser/ui/views/event_utils.cc
+++ b/chrome/browser/ui/views/event_utils.cc
@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "chrome/browser/ui/views/event_utils.h"
-
+#include "chrome/browser/event_disposition.h"
#include "content/browser/disposition_utils.h"
#include "views/events/event.h"
@@ -11,13 +11,9 @@ using views::Event;
namespace event_utils {
+// TODO(shinyak) After refactoring, this function shoulbe removed.
WindowOpenDisposition DispositionFromEventFlags(int event_flags) {
- return disposition_utils::DispositionFromClick(
- (event_flags & ui::EF_MIDDLE_BUTTON_DOWN) != 0,
- (event_flags & ui::EF_ALT_DOWN) != 0,
- (event_flags & ui::EF_CONTROL_DOWN) != 0,
- false /* meta_key */,
- (event_flags & ui::EF_SHIFT_DOWN) != 0);
+ return browser::DispositionFromEventFlags(event_flags);
}
bool IsPossibleDispositionEvent(const views::MouseEvent& event) {
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index fb6f905..d9150a1 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -875,6 +875,8 @@
'browser/download/save_package_file_picker.h',
'browser/enumerate_modules_model_win.cc',
'browser/enumerate_modules_model_win.h',
+ 'browser/event_disposition.cc',
+ 'browser/event_disposition.h',
'browser/extensions/apps_promo.cc',
'browser/extensions/apps_promo.h',
'browser/extensions/convert_user_script.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 827858f..e6bc5e1 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1405,6 +1405,8 @@
'browser/download/download_request_limiter_unittest.cc',
'browser/download/download_safe_browsing_client_unittest.cc',
'browser/enumerate_modules_model_unittest_win.cc',
+ 'browser/event_disposition.cc',
+ 'browser/event_disposition.h',
'browser/extensions/apps_promo_unittest.cc',
'browser/extensions/convert_user_script_unittest.cc',
'browser/extensions/convert_web_app_unittest.cc',
@@ -1863,6 +1865,7 @@
'browser/ui/gtk/bookmarks/bookmark_utils_gtk_unittest.cc',
'browser/ui/gtk/gtk_chrome_shrinkable_hbox_unittest.cc',
'browser/ui/gtk/gtk_theme_service_unittest.cc',
+ 'browser/ui/gtk/gtk_util_unittest.cc',
'browser/ui/gtk/omnibox/omnibox_popup_view_gtk_unittest.cc',
'browser/ui/gtk/reload_button_gtk_unittest.cc',
'browser/ui/gtk/status_icons/status_tray_gtk_unittest.cc',