Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(443)

Unified Diff: ui/views/widget/native_widget_gtk.cc

Issue 8907029: AURA/X11: Handle VKEY_MENU accelerator on content area (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/native_widget_gtk.cc
diff --git a/ui/views/widget/native_widget_gtk.cc b/ui/views/widget/native_widget_gtk.cc
index a970976de5e456fb3a36f9662994d09430605eab..dc4cc0860c550ebe7717ed6a67c34444059f2cf7 100644
--- a/ui/views/widget/native_widget_gtk.cc
+++ b/ui/views/widget/native_widget_gtk.cc
@@ -358,7 +358,6 @@ NativeWidgetGtk::NativeWidgetGtk(internal::NativeWidgetDelegate* delegate)
has_focus_(false),
always_on_top_(false),
is_double_buffered_(false),
- should_handle_menu_key_release_(false),
dragged_view_(NULL),
painted_(false),
has_pointer_grab_(false),
@@ -563,33 +562,7 @@ void NativeWidgetGtk::ActiveWindowChanged(GdkWindow* active_window) {
bool NativeWidgetGtk::HandleKeyboardEvent(const KeyEvent& key) {
if (!GetWidget()->GetFocusManager())
return false;
-
- const int key_code = key.key_code();
- bool handled = false;
-
- // Always reset |should_handle_menu_key_release_| unless we are handling a
- // VKEY_MENU key release event. It ensures that VKEY_MENU accelerator can only
- // be activated when handling a VKEY_MENU key release event which is preceded
- // by an un-handled VKEY_MENU key press event.
- if (key_code != ui::VKEY_MENU || key.type() != ui::ET_KEY_RELEASED)
- should_handle_menu_key_release_ = false;
-
- if (key.type() == ui::ET_KEY_PRESSED) {
- // VKEY_MENU is triggered by key release event.
- // FocusManager::OnKeyEvent() returns false when the key has been consumed.
- if (key_code != ui::VKEY_MENU)
- handled = !GetWidget()->GetFocusManager()->OnKeyEvent(key);
- else
- should_handle_menu_key_release_ = true;
- } else if (key_code == ui::VKEY_MENU && should_handle_menu_key_release_ &&
- (key.flags() & ~ui::EF_ALT_DOWN) == 0) {
- // Trigger VKEY_MENU when only this key is pressed and released, and both
- // press and release events are not handled by others.
- ui::Accelerator accelerator(ui::VKEY_MENU, false, false, false);
- handled = GetWidget()->GetFocusManager()->ProcessAccelerator(accelerator);
- }
-
- return handled;
+ return GetWidget()->GetFocusManager()->OnKeyEvent(key);
}
bool NativeWidgetGtk::SuppressFreezeUpdates() {
@@ -1603,18 +1576,22 @@ gboolean NativeWidgetGtk::OnScroll(GtkWidget* widget, GdkEventScroll* event) {
return delegate_->OnMouseEvent(mouse_event);
}
-gboolean NativeWidgetGtk::OnFocusIn(GtkWidget* widget, GdkEventFocus* event) {
+gboolean NativeWidgetGtk::OnFocusIn(GtkWidget* gtk_widget,
+ GdkEventFocus* event) {
if (has_focus_)
return false; // This is the second focus-in event in a row, ignore it.
has_focus_ = true;
- should_handle_menu_key_release_ = false;
+ Widget* widget = GetWidget();
- if (!GetWidget()->is_top_level())
+ if (widget->GetFocusManager())
+ widget->GetFocusManager()->ResetMenuKeyState();
+
+ if (!widget->is_top_level())
return false;
// Only top-level Widget should have an InputMethod instance.
- InputMethod* input_method = GetWidget()->GetInputMethod();
+ InputMethod* input_method = widget->GetInputMethod();
if (input_method)
input_method->OnFocus();
@@ -1624,7 +1601,7 @@ gboolean NativeWidgetGtk::OnFocusIn(GtkWidget* widget, GdkEventFocus* event) {
// Sets initial focus here. On X11/Gtk, window creation
// is asynchronous and a focus request has to be made after a window
// gets created.
- GetWidget()->SetInitialFocus();
+ widget->SetInitialFocus();
}
return false;
}
@@ -1769,12 +1746,8 @@ void NativeWidgetGtk::ScheduleDraw() {
}
void NativeWidgetGtk::DispatchKeyEventPostIME(const KeyEvent& key) {
- // Always reset |should_handle_menu_key_release_| unless we are handling a
- // VKEY_MENU key release event. It ensures that VKEY_MENU accelerator can only
- // be activated when handling a VKEY_MENU key release event which is preceded
- // by an unhandled VKEY_MENU key press event. See also HandleKeyboardEvent().
- if (key.key_code() != ui::VKEY_MENU || key.type() != ui::ET_KEY_RELEASED)
- should_handle_menu_key_release_ = false;
+ if (GetWidget()->GetFocusManager())
+ GetWidget()->GetFocusManager()->MaybeResetMenuKeyState(key);
// Send the key event to View hierarchy first.
bool handled = delegate_->OnKeyEvent(key);

Powered by Google App Engine
This is Rietveld 408576698