| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/shell/platform/linux/testing/mock_im_context.h" | |
| using namespace flutter::testing; | |
| G_DECLARE_FINAL_TYPE(FlMockIMContext, | |
| fl_mock_im_context, | |
| FL, | |
| MOCK_IM_CONTEXT, | |
| GtkIMContext) | |
| struct _FlMockIMContext { | |
| GtkIMContext parent_instance; | |
| MockIMContext* mock; | |
| }; | |
| G_DEFINE_TYPE(FlMockIMContext, fl_mock_im_context, GTK_TYPE_IM_CONTEXT) | |
| static void fl_mock_im_context_set_client_window(GtkIMContext* context, | |
| GdkWindow* window) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_set_client_window(context, window); | |
| } | |
| static void fl_mock_im_context_get_preedit_string(GtkIMContext* context, | |
| gchar** str, | |
| PangoAttrList** attrs, | |
| gint* cursor_pos) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_get_preedit_string(context, str, attrs, | |
| cursor_pos); | |
| } | |
| static gboolean fl_mock_im_context_filter_keypress(GtkIMContext* context, | |
| GdkEventKey* event) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| return self->mock->gtk_im_context_filter_keypress(context, event); | |
| } | |
| static void fl_mock_im_context_focus_in(GtkIMContext* context) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_focus_in(context); | |
| } | |
| static void fl_mock_im_context_focus_out(GtkIMContext* context) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_focus_out(context); | |
| } | |
| static void fl_mock_im_context_reset(GtkIMContext* context) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_reset(context); | |
| } | |
| static void fl_mock_im_context_set_cursor_location(GtkIMContext* context, | |
| GdkRectangle* area) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_set_cursor_location(context, area); | |
| } | |
| static void fl_mock_im_context_set_use_preedit(GtkIMContext* context, | |
| gboolean use_preedit) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_set_use_preedit(context, use_preedit); | |
| } | |
| static void fl_mock_im_context_set_surrounding(GtkIMContext* context, | |
| const gchar* text, | |
| gint len, | |
| gint cursor_index) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| self->mock->gtk_im_context_set_surrounding(context, text, len, cursor_index); | |
| } | |
| static gboolean fl_mock_im_context_get_surrounding(GtkIMContext* context, | |
| gchar** text, | |
| gint* cursor_index) { | |
| FlMockIMContext* self = FL_MOCK_IM_CONTEXT(context); | |
| return self->mock->gtk_im_context_get_surrounding(context, text, | |
| cursor_index); | |
| } | |
| static void fl_mock_im_context_class_init(FlMockIMContextClass* klass) { | |
| GtkIMContextClass* im_context_class = GTK_IM_CONTEXT_CLASS(klass); | |
| im_context_class->set_client_window = fl_mock_im_context_set_client_window; | |
| im_context_class->get_preedit_string = fl_mock_im_context_get_preedit_string; | |
| im_context_class->filter_keypress = fl_mock_im_context_filter_keypress; | |
| im_context_class->focus_in = fl_mock_im_context_focus_in; | |
| im_context_class->focus_out = fl_mock_im_context_focus_out; | |
| im_context_class->reset = fl_mock_im_context_reset; | |
| im_context_class->set_cursor_location = | |
| fl_mock_im_context_set_cursor_location; | |
| im_context_class->set_use_preedit = fl_mock_im_context_set_use_preedit; | |
| im_context_class->set_surrounding = fl_mock_im_context_set_surrounding; | |
| im_context_class->get_surrounding = fl_mock_im_context_get_surrounding; | |
| } | |
| static void fl_mock_im_context_init(FlMockIMContext* self) {} | |
| static GtkIMContext* fl_mock_im_context_new(MockIMContext* mock) { | |
| FlMockIMContext* self = | |
| FL_MOCK_IM_CONTEXT(g_object_new(fl_mock_im_context_get_type(), nullptr)); | |
| self->mock = mock; | |
| return GTK_IM_CONTEXT(self); | |
| } | |
| MockIMContext::~MockIMContext() { | |
| if (FL_IS_MOCK_IM_CONTEXT(instance_)) { | |
| g_clear_object(&instance_); | |
| } | |
| } | |
| MockIMContext::operator GtkIMContext*() { | |
| if (instance_ == nullptr) { | |
| instance_ = fl_mock_im_context_new(this); | |
| } | |
| return instance_; | |
| } |