summaryrefslogtreecommitdiffstats
path: root/views/widget
diff options
context:
space:
mode:
authormsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-26 02:37:52 +0000
committermsw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-26 02:37:52 +0000
commit331fdb258d70ff5d78b08006a8506691cca65432 (patch)
tree32cc4f80237c5e6492a01e938243aa6413f87baa /views/widget
parent2f60f4aaaf70bbb5ee35a42ee216eed74e2ad3c2 (diff)
downloadchromium_src-331fdb258d70ff5d78b08006a8506691cca65432.zip
chromium_src-331fdb258d70ff5d78b08006a8506691cca65432.tar.gz
chromium_src-331fdb258d70ff5d78b08006a8506691cca65432.tar.bz2
Add NativeWidgetDelegate/Widget::OnKeyEvent post-IME handling.
Refactor XEvent code and InputMethodGtk::DispatchKeyEvent. Nix WidgetWin::GetFocusedViewRootView, rename RootView::OnKeyEvent. Cleanup headers and refactor code in extension_input_api.cc. Rename WidgetGtk::OnEventKey to avoid overloading Widget::OnEventKey. BUG=72040 TEST=Key event handling in win/linux_views/touch; extension input API SendKeyboardEventInputFunction use. Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=82713 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=82751 Review URL: http://codereview.chromium.org/6823055 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget')
-rw-r--r--views/widget/native_widget_delegate.h3
-rw-r--r--views/widget/root_view.cc2
-rw-r--r--views/widget/root_view.h4
-rw-r--r--views/widget/widget.cc4
-rw-r--r--views/widget/widget.h1
-rw-r--r--views/widget/widget_gtk.cc12
-rw-r--r--views/widget/widget_gtk.h2
-rw-r--r--views/widget/widget_win.cc19
-rw-r--r--views/widget/widget_win.h4
9 files changed, 17 insertions, 34 deletions
diff --git a/views/widget/native_widget_delegate.h b/views/widget/native_widget_delegate.h
index e5e3752..0ac5e09 100644
--- a/views/widget/native_widget_delegate.h
+++ b/views/widget/native_widget_delegate.h
@@ -41,7 +41,8 @@ class NativeWidgetDelegate {
// tree if necessary when accelerated painting is enabled.
virtual void OnNativeWidgetPaint(gfx::Canvas* canvas) = 0;
- // MouseEvent handlers.
+ // Mouse and key event handlers.
+ virtual bool OnKeyEvent(const KeyEvent& event) = 0;
virtual bool OnMouseEvent(const MouseEvent& event) = 0;
virtual void OnMouseCaptureLost() = 0;
};
diff --git a/views/widget/root_view.cc b/views/widget/root_view.cc
index 323612e..f69c6a4 100644
--- a/views/widget/root_view.cc
+++ b/views/widget/root_view.cc
@@ -82,7 +82,7 @@ void RootView::NotifyNativeViewHierarchyChanged(bool attached,
// Input -----------------------------------------------------------------------
-bool RootView::ProcessKeyEvent(const KeyEvent& event) {
+bool RootView::OnKeyEvent(const KeyEvent& event) {
bool consumed = false;
View* v = GetFocusManager()->GetFocusedView();
diff --git a/views/widget/root_view.h b/views/widget/root_view.h
index 3465312..11541d2 100644
--- a/views/widget/root_view.h
+++ b/views/widget/root_view.h
@@ -61,8 +61,8 @@ class RootView : public View,
// Process a key event. Send the event to the focused view and up the focus
// path, and finally to the default keyboard handler, until someone consumes
- // it. Returns whether anyone consumed the event.
- bool ProcessKeyEvent(const KeyEvent& event);
+ // it. Returns whether anyone consumed the event.
+ bool OnKeyEvent(const KeyEvent& event);
#if defined(TOUCH_UI) && defined(UNIT_TEST)
// For unit testing purposes, we use this method to set a mock
diff --git a/views/widget/widget.cc b/views/widget/widget.cc
index 924c448..aeaebad8 100644
--- a/views/widget/widget.cc
+++ b/views/widget/widget.cc
@@ -320,6 +320,10 @@ void Widget::OnNativeWidgetPaint(gfx::Canvas* canvas) {
RefreshCompositeTree();
}
+bool Widget::OnKeyEvent(const KeyEvent& event) {
+ return GetRootView()->OnKeyEvent(event);
+}
+
bool Widget::OnMouseEvent(const MouseEvent& event) {
switch (event.type()) {
case ui::ET_MOUSE_PRESSED:
diff --git a/views/widget/widget.h b/views/widget/widget.h
index ec126a0..d2c17a7 100644
--- a/views/widget/widget.h
+++ b/views/widget/widget.h
@@ -291,6 +291,7 @@ class Widget : public internal::NativeWidgetDelegate,
virtual void OnSizeChanged(const gfx::Size& new_size) OVERRIDE;
virtual bool HasFocusManager() const OVERRIDE;
virtual void OnNativeWidgetPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual bool OnKeyEvent(const KeyEvent& event) OVERRIDE;
virtual bool OnMouseEvent(const MouseEvent& event) OVERRIDE;
virtual void OnMouseCaptureLost() OVERRIDE;
diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc
index 00c9610..85b361c 100644
--- a/views/widget/widget_gtk.cc
+++ b/views/widget/widget_gtk.cc
@@ -615,9 +615,9 @@ void WidgetGtk::Init(GtkWidget* parent,
// See views::Views::Focus and views::FocusManager::ClearNativeFocus
// for more details.
g_signal_connect(widget_, "key_press_event",
- G_CALLBACK(&OnKeyEventThunk), this);
+ G_CALLBACK(&OnEventKeyThunk), this);
g_signal_connect(widget_, "key_release_event",
- G_CALLBACK(&OnKeyEventThunk), this);
+ G_CALLBACK(&OnEventKeyThunk), this);
// Drag and drop.
gtk_drag_dest_set(window_contents_, static_cast<GtkDestDefaults>(0),
@@ -1291,7 +1291,7 @@ gboolean WidgetGtk::OnFocusOut(GtkWidget* widget, GdkEventFocus* event) {
return false;
}
-gboolean WidgetGtk::OnKeyEvent(GtkWidget* widget, GdkEventKey* event) {
+gboolean WidgetGtk::OnEventKey(GtkWidget* widget, GdkEventKey* event) {
KeyEvent key(reinterpret_cast<NativeEvent>(event));
if (input_method_.get())
input_method_->DispatchKeyEvent(key);
@@ -1385,10 +1385,8 @@ void WidgetGtk::DispatchKeyEventPostIME(const KeyEvent& key) {
if (key.key_code() != ui::VKEY_MENU || key.type() != ui::ET_KEY_RELEASED)
should_handle_menu_key_release_ = false;
- bool handled = false;
-
- // Dispatch the key event to View hierarchy first.
- handled = GetRootView()->ProcessKeyEvent(key);
+ // Send the key event to View hierarchy first.
+ bool handled = delegate_->OnKeyEvent(key);
if (key.key_code() == ui::VKEY_PROCESSKEY || handled)
return;
diff --git a/views/widget/widget_gtk.h b/views/widget/widget_gtk.h
index e931f59..a7ede90 100644
--- a/views/widget/widget_gtk.h
+++ b/views/widget/widget_gtk.h
@@ -272,7 +272,7 @@ class WidgetGtk : public Widget,
CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnButtonRelease, GdkEventButton*);
CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnFocusIn, GdkEventFocus*);
CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnFocusOut, GdkEventFocus*);
- CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnKeyEvent, GdkEventKey*);
+ CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnEventKey, GdkEventKey*);
CHROMEGTK_CALLBACK_4(WidgetGtk, gboolean, OnQueryTooltip,
gint, gint, gboolean, GtkTooltip*);
CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnScroll, GdkEventScroll*);
diff --git a/views/widget/widget_win.cc b/views/widget/widget_win.cc
index d05b725..edecafb 100644
--- a/views/widget/widget_win.cc
+++ b/views/widget/widget_win.cc
@@ -1028,19 +1028,6 @@ Window* WidgetWin::GetWindowImpl(HWND hwnd) {
return NULL;
}
-RootView* WidgetWin::GetFocusedViewRootView() {
- // TODO(beng): get rid of this
- FocusManager* focus_manager = GetFocusManager();
- if (!focus_manager) {
- NOTREACHED();
- return NULL;
- }
- View* focused_view = focus_manager->GetFocusedView();
- if (!focused_view)
- return NULL;
- return focused_view->GetRootView();
-}
-
// static
void WidgetWin::PostProcessActivateMessage(WidgetWin* widget,
int activation_state) {
@@ -1129,11 +1116,7 @@ gfx::AcceleratedWidget WidgetWin::GetAcceleratedWidget() {
}
void WidgetWin::DispatchKeyEventPostIME(const KeyEvent& key) {
- RootView* root_view = GetFocusedViewRootView();
- if (!root_view)
- root_view = GetRootView();
-
- SetMsgHandled(root_view->ProcessKeyEvent(key));
+ SetMsgHandled(delegate_->OnKeyEvent(key));
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/views/widget/widget_win.h b/views/widget/widget_win.h
index 6e795de..5f92a1f 100644
--- a/views/widget/widget_win.h
+++ b/views/widget/widget_win.h
@@ -419,10 +419,6 @@ class WidgetWin : public ui::WindowImpl,
// first ancestor that is a Window.
static Window* GetWindowImpl(HWND hwnd);
- // Returns the RootView that contains the focused view, or NULL if there is no
- // focused view.
- RootView* GetFocusedViewRootView();
-
// Called after the WM_ACTIVATE message has been processed by the default
// windows procedure.
static void PostProcessActivateMessage(WidgetWin* widget,