1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/quick_insert/views/quick_insert_key_event_handler.h"
#include "ash/quick_insert/views/quick_insert_pseudo_focus.h"
#include "ash/quick_insert/views/quick_insert_pseudo_focus_handler.h"
#include "base/i18n/rtl.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/views/focus/focus_manager.h"
namespace ash {
QuickInsertKeyEventHandler::QuickInsertKeyEventHandler() = default;
QuickInsertKeyEventHandler::~QuickInsertKeyEventHandler() = default;
bool QuickInsertKeyEventHandler::HandleKeyEvent(const ui::KeyEvent& event) {
if (active_pseudo_focus_handler_ == nullptr || event.handled() ||
event.type() != ui::EventType::kKeyPressed) {
return false;
}
if (views::FocusManager::IsTabTraversalKeyEvent(event)) {
active_pseudo_focus_handler_->AdvancePseudoFocus(
event.IsShiftDown() ? QuickInsertPseudoFocusDirection::kBackward
: QuickInsertPseudoFocusDirection::kForward);
return true;
}
const bool has_modifier =
event.IsShiftDown() || event.IsControlDown() || event.IsAltDown();
const bool is_rtl = base::i18n::IsRTL();
switch (event.key_code()) {
case ui::VKEY_RETURN:
return active_pseudo_focus_handler_->DoPseudoFocusedAction();
case ui::VKEY_UP:
return has_modifier ? false
: active_pseudo_focus_handler_->MovePseudoFocusUp();
case ui::VKEY_DOWN:
return has_modifier ? false
: active_pseudo_focus_handler_->MovePseudoFocusDown();
case ui::VKEY_LEFT:
return has_modifier
? false
: (is_rtl
? active_pseudo_focus_handler_->MovePseudoFocusRight()
: active_pseudo_focus_handler_->MovePseudoFocusLeft());
case ui::VKEY_RIGHT:
return has_modifier
? false
: (is_rtl
? active_pseudo_focus_handler_->MovePseudoFocusLeft()
: active_pseudo_focus_handler_->MovePseudoFocusRight());
default:
return false;
}
}
void QuickInsertKeyEventHandler::SetActivePseudoFocusHandler(
QuickInsertPseudoFocusHandler* active_pseudo_focus_handler) {
active_pseudo_focus_handler_ = active_pseudo_focus_handler;
}
} // namespace ash
|