// 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(struct {
        event fuchsia.ui.input3.KeyEvent;
    }) -> (struct {
        was_handled bool;
    });

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