#ifndef UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
#define UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/component_export.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/base/ime/autocorrect_info.h"
#include "ui/base/ime/grammar_fragment.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/range/range.h"
namespace gfx {
class Rect;
class Range;
}
namespace ui {
struct CompositionText;
class KeyEvent;
struct ImeTextSpan;
class VirtualKeyboardController;
class COMPONENT_EXPORT(UI_BASE_IME_LINUX) LinuxInputMethodContext {
public:
virtual ~LinuxInputMethodContext() = default;
virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) = 0;
virtual bool IsPeekKeyEvent(const ui::KeyEvent& key_event) = 0;
virtual void SetCursorLocation(const gfx::Rect& rect) = 0;
virtual void SetSurroundingText(
const std::u16string& text,
const gfx::Range& text_range,
const gfx::Range& selection_range,
const absl::optional<ui::GrammarFragment>& fragment,
const absl::optional<AutocorrectInfo>& autocorrect) = 0;
virtual void SetContentType(TextInputType type,
TextInputMode mode,
uint32_t flags,
bool should_do_learning,
bool can_compose_inline) = 0;
virtual void Reset() = 0;
virtual void WillUpdateFocus(TextInputClient* old_client,
TextInputClient* new_client) {}
virtual void UpdateFocus(bool has_client,
TextInputType old_type,
TextInputType new_type,
TextInputClient::FocusReason reason) = 0;
virtual VirtualKeyboardController* GetVirtualKeyboardController() = 0;
};
class COMPONENT_EXPORT(UI_BASE_IME_LINUX) LinuxInputMethodContextDelegate {
public:
virtual ~LinuxInputMethodContextDelegate() {}
virtual void OnCommit(const std::u16string& text) = 0;
virtual void OnConfirmCompositionText(bool keep_selection) = 0;
virtual void OnDeleteSurroundingText(size_t before, size_t after) = 0;
virtual void OnPreeditChanged(const CompositionText& composition_text) = 0;
virtual void OnPreeditEnd() = 0;
virtual void OnPreeditStart() = 0;
virtual void OnSetPreeditRegion(const gfx::Range& range,
const std::vector<ImeTextSpan>& spans) = 0;
virtual void OnClearGrammarFragments(const gfx::Range& range) = 0;
virtual void OnAddGrammarFragment(const ui::GrammarFragment& fragment) = 0;
virtual void OnSetAutocorrectRange(const gfx::Range& range) = 0;
virtual void OnSetVirtualKeyboardOccludedBounds(
const gfx::Rect& screen_bounds) = 0;
};
}
#endif