diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-26 02:37:52 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-26 02:37:52 +0000 |
commit | 331fdb258d70ff5d78b08006a8506691cca65432 (patch) | |
tree | 32cc4f80237c5e6492a01e938243aa6413f87baa /views/widget | |
parent | 2f60f4aaaf70bbb5ee35a42ee216eed74e2ad3c2 (diff) | |
download | chromium_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.h | 3 | ||||
-rw-r--r-- | views/widget/root_view.cc | 2 | ||||
-rw-r--r-- | views/widget/root_view.h | 4 | ||||
-rw-r--r-- | views/widget/widget.cc | 4 | ||||
-rw-r--r-- | views/widget/widget.h | 1 | ||||
-rw-r--r-- | views/widget/widget_gtk.cc | 12 | ||||
-rw-r--r-- | views/widget/widget_gtk.h | 2 | ||||
-rw-r--r-- | views/widget/widget_win.cc | 19 | ||||
-rw-r--r-- | views/widget/widget_win.h | 4 |
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, |