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

#ifndef COMPONENTS_EXO_XKB_TRACKER_H_
#define COMPONENTS_EXO_XKB_TRACKER_H_

#include <memory>
#include <string>

#include "ui/base/buildflags.h"

#if BUILDFLAG(USE_XKBCOMMON)
#include <xkbcommon/xkbcommon.h>

#include "base/memory/free_deleter.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/scoped_xkb.h"  // nogncheck
#include "ui/events/ozone/layout/xkb/xkb_modifier_converter.h"
#endif

namespace exo {

struct KeyboardModifiers;

// Tracks the state of XKB. If Chrome is configured not to link against
// libxkbcommon this class is empty.
// TODO(hidehiko): Share the state between wl_keyboard and zwp_text_input.
class XkbTracker {
 public:
  XkbTracker();
  XkbTracker(const XkbTracker&) = delete;
  XkbTracker& operator=(const XkbTracker&) = delete;
  ~XkbTracker();

#if BUILDFLAG(USE_XKBCOMMON)
  // Updates the XKB keymap based on the given keyboard layout name.
  void UpdateKeyboardLayout(const std::string& name);

  // Updates the XKB modifier state. |modifier_flags| is a bitset of
  // ui::EventFlags.
  void UpdateKeyboardModifiers(int modifier_flags);

  // Returns the keysym for the given XKB keycode, based on the current
  // keymap and its modifier state.
  uint32_t GetKeysym(uint32_t xkb_keycode) const;

  // Returns the XKB keymap data.
  std::unique_ptr<char, base::FreeDeleter> GetKeymap() const;

  // Returns the current keyboard modifiers.
  KeyboardModifiers GetModifiers() const;

 private:
  void UpdateKeyboardLayoutInternal(const xkb_rule_names* names);
  void UpdateKeyboardModifiersInternal();

  // Keeps the modifiers, so that modifiers can be recalculated
  // on keyboard layout update.
  // For CrOS we treat numlock as always on.
  int modifier_flags_ = ui::EF_NUM_LOCK_ON;

  // The XKB state used for the keyboard.
  std::unique_ptr<xkb_context, ui::XkbContextDeleter> xkb_context_{
      xkb_context_new(XKB_CONTEXT_NO_FLAGS)};
  std::unique_ptr<xkb_keymap, ui::XkbKeymapDeleter> xkb_keymap_;
  std::unique_ptr<xkb_state, ui::XkbStateDeleter> xkb_state_;
  ui::XkbModifierConverter xkb_modifier_converter_{{}};

#endif  // BUILDFLAG(USE_XKBCOMMON)
};

}  // namespace exo

#endif  // COMPONENTS_EXO_XKB_TRACKER_H_
