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

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: sync Created 8 years, 12 months 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
« no previous file with comments | « ui/views/widget/native_widget_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3cf2188ee1401e6010f1642f74c9de04b0cbd700..7ad829855e7c6eb0e238ac7fa1da9f6d00d60a2b 100644
--- a/ui/views/widget/native_widget_gtk.cc
+++ b/ui/views/widget/native_widget_gtk.cc
@@ -355,7 +355,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),
@@ -560,33 +559,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() {
@@ -1604,18 +1577,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();
@@ -1625,7 +1602,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;
}
@@ -1770,12 +1747,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);
« no previous file with comments | « ui/views/widget/native_widget_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698