// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.ui.shortcut;

using fuchsia.ui.input3;
using fuchsia.ui.focus;

/// Shortcuts manager handles keyboard events, detects shortcut activations,
/// notifies clients.
///
/// Typically this interface is used by RootPresenter to notify the manager
/// about events generated by other participants of the user interaction flow.
[Discoverable]
protocol Manager {
    /// Detect shortcuts and notify clients of activations.
    /// Returns true if shortcut was matched and client handled it, false otherwise.
    HandleKey3Event(fuchsia.ui.input3.KeyEvent event) -> (bool was_handled);

    // Notify Shortcut manager service when the focused chain changes.
    HandleFocusChange(fuchsia.ui.focus.FocusChain focus_chain) -> ();
};
