views: Toggle the menu bar only when a single Alt is released.
This commit is contained in:
parent
09f9d0729c
commit
5d5a3138bc
2 changed files with 29 additions and 8 deletions
|
@ -71,6 +71,21 @@ bool ShouldUseGlobalMenuBar() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool IsAltKey(const content::NativeWebKeyboardEvent& event) {
|
||||||
|
#if defined(USE_X11)
|
||||||
|
// 164 and 165 represent VK_LALT and VK_RALT.
|
||||||
|
return event.windowsKeyCode == 164 || event.windowsKeyCode == 165;
|
||||||
|
#else
|
||||||
|
return event.windowsKeyCode == ui::VKEY_MENU;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsAltModifier(const content::NativeWebKeyboardEvent& event) {
|
||||||
|
typedef content::NativeWebKeyboardEvent::Modifiers Modifiers;
|
||||||
|
return (event.modifiers == (Modifiers::AltKey | Modifiers::IsLeft)) ||
|
||||||
|
(event.modifiers == (Modifiers::AltKey | Modifiers::IsRight));
|
||||||
|
}
|
||||||
|
|
||||||
class NativeWindowClientView : public views::ClientView {
|
class NativeWindowClientView : public views::ClientView {
|
||||||
public:
|
public:
|
||||||
NativeWindowClientView(views::Widget* widget,
|
NativeWindowClientView(views::Widget* widget,
|
||||||
|
@ -97,6 +112,7 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
|
||||||
web_view_(inspectable_web_contents()->GetView()->GetView()),
|
web_view_(inspectable_web_contents()->GetView()->GetView()),
|
||||||
menu_bar_autohide_(false),
|
menu_bar_autohide_(false),
|
||||||
menu_bar_show_(false),
|
menu_bar_show_(false),
|
||||||
|
menu_bar_alt_pressed_(false),
|
||||||
keyboard_event_handler_(new views::UnhandledKeyboardEventHandler),
|
keyboard_event_handler_(new views::UnhandledKeyboardEventHandler),
|
||||||
use_content_size_(false),
|
use_content_size_(false),
|
||||||
resizable_(true) {
|
resizable_(true) {
|
||||||
|
@ -548,16 +564,20 @@ void NativeWindowViews::HandleMouseDown() {
|
||||||
void NativeWindowViews::HandleKeyboardEvent(
|
void NativeWindowViews::HandleKeyboardEvent(
|
||||||
content::WebContents*,
|
content::WebContents*,
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
const content::NativeWebKeyboardEvent& event) {
|
||||||
if (menu_bar_autohide_ &&
|
// Toggle the menu bar only when a single Alt is released.
|
||||||
#if defined(USE_X11)
|
if (event.type == blink::WebInputEvent::RawKeyDown && IsAltKey(event) &&
|
||||||
// 164 and 165 represent VK_LALT and VK_RALT.
|
IsAltModifier(event)) {
|
||||||
(event.windowsKeyCode == 164 || event.windowsKeyCode == 165) &&
|
// When a single Alt is pressed:
|
||||||
#else
|
menu_bar_alt_pressed_ = true;
|
||||||
(event.windowsKeyCode == ui::VKEY_MENU) &&
|
} else if (event.type == blink::WebInputEvent::KeyUp && IsAltKey(event) &&
|
||||||
#endif
|
event.modifiers == 0 && menu_bar_alt_pressed_) {
|
||||||
(event.type == blink::WebInputEvent::KeyUp)) {
|
// When a single Alt is released right after a Alt is pressed:
|
||||||
|
menu_bar_alt_pressed_ = false;
|
||||||
SetMenuBarVisibility(!menu_bar_show_);
|
SetMenuBarVisibility(!menu_bar_show_);
|
||||||
Layout();
|
Layout();
|
||||||
|
} else {
|
||||||
|
// When any other keys except single Alt have been pressed/released:
|
||||||
|
menu_bar_alt_pressed_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard_event_handler_->HandleKeyboardEvent(event, GetFocusManager());
|
keyboard_event_handler_->HandleKeyboardEvent(event, GetFocusManager());
|
||||||
|
|
|
@ -131,6 +131,7 @@ class NativeWindowViews : public NativeWindow,
|
||||||
scoped_ptr<MenuBar> menu_bar_;
|
scoped_ptr<MenuBar> menu_bar_;
|
||||||
bool menu_bar_autohide_;
|
bool menu_bar_autohide_;
|
||||||
bool menu_bar_show_;
|
bool menu_bar_show_;
|
||||||
|
bool menu_bar_alt_pressed_;
|
||||||
|
|
||||||
#if defined(USE_X11)
|
#if defined(USE_X11)
|
||||||
scoped_ptr<GlobalMenuBarX11> global_menu_bar_;
|
scoped_ptr<GlobalMenuBarX11> global_menu_bar_;
|
||||||
|
|
Loading…
Add table
Reference in a new issue