// Copyright 2010-2018, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "unix/ibus/engine_registrar.h" #include "base/logging.h" #include "unix/ibus/engine_interface.h" namespace { mozc::ibus::EngineInterface *g_engine = NULL; } namespace mozc { namespace ibus { bool EngineRegistrar::Register(EngineInterface *engine, IBusEngineClass *engine_class) { DCHECK(engine) << "engine is NULL"; DCHECK(!g_engine) << "engine is already registered"; g_engine = engine; engine_class->cursor_down = CursorDown; engine_class->candidate_clicked = CandidateClicked; engine_class->cursor_down = CursorDown; engine_class->cursor_up = CursorUp; engine_class->disable = Disable; engine_class->enable = Enable; engine_class->focus_in = FocusIn; engine_class->focus_out = FocusOut; engine_class->page_down = PageDown; engine_class->page_up = PageUp; engine_class->process_key_event = ProcessKeyEvent; engine_class->property_activate = PropertyActivate; engine_class->property_hide = PropertyHide; engine_class->property_show = PropertyShow; engine_class->reset = Reset; engine_class->set_capabilities = SetCapabilities; engine_class->set_cursor_location = SetCursorLocation; #if defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE) engine_class->set_content_type = SetContentType; #endif // MOZC_ENABLE_IBUS_INPUT_PURPOSE return true; } EngineInterface *EngineRegistrar::Unregister(IBusEngineClass *engine_class) { DCHECK(g_engine) << "engine is not registered"; engine_class->cursor_down = NULL; engine_class->candidate_clicked = NULL; engine_class->cursor_down = NULL; engine_class->cursor_up = NULL; engine_class->disable = NULL; engine_class->enable = NULL; engine_class->focus_in = NULL; engine_class->focus_out = NULL; engine_class->page_down = NULL; engine_class->page_up = NULL; engine_class->process_key_event = NULL; engine_class->property_activate = NULL; engine_class->property_hide = NULL; engine_class->property_show = NULL; engine_class->reset = NULL; engine_class->set_capabilities = NULL; engine_class->set_cursor_location = NULL; #if defined(MOZC_ENABLE_IBUS_INPUT_PURPOSE) engine_class->set_content_type = NULL; #endif // MOZC_ENABLE_IBUS_INPUT_PURPOSE mozc::ibus::EngineInterface *previous = g_engine; g_engine = NULL; return previous; } void EngineRegistrar::CandidateClicked( IBusEngine *engine, guint index, guint button, guint state) { g_engine->CandidateClicked(engine, index, button, state); } void EngineRegistrar::CursorDown(IBusEngine *engine) { g_engine->CursorDown(engine); } void EngineRegistrar::CursorUp(IBusEngine *engine) { g_engine->CursorUp(engine); } void EngineRegistrar::Disable(IBusEngine *engine) { g_engine->Disable(engine); } void EngineRegistrar::Enable(IBusEngine *engine) { g_engine->Enable(engine); } void EngineRegistrar::FocusIn(IBusEngine *engine) { g_engine->FocusIn(engine); } void EngineRegistrar::FocusOut(IBusEngine *engine) { g_engine->FocusOut(engine); } void EngineRegistrar::PageDown(IBusEngine *engine) { g_engine->PageDown(engine); } void EngineRegistrar::PageUp(IBusEngine *engine) { g_engine->PageUp(engine); } gboolean EngineRegistrar::ProcessKeyEvent( IBusEngine *engine, guint keyval, guint keycode, guint state) { return g_engine->ProcessKeyEvent(engine, keyval, keycode, state); } void EngineRegistrar::PropertyActivate( IBusEngine *engine, const gchar *property_name, guint property_state) { g_engine->PropertyActivate(engine, property_name, property_state); } void EngineRegistrar::PropertyHide( IBusEngine *engine, const gchar *property_name) { g_engine->PropertyHide(engine, property_name); } void EngineRegistrar::PropertyShow( IBusEngine *engine, const gchar *property_name) { g_engine->PropertyShow(engine, property_name); } void EngineRegistrar::Reset(IBusEngine *engine) { g_engine->Reset(engine); } void EngineRegistrar::SetCapabilities( IBusEngine *engine, guint capabilities) { g_engine->SetCapabilities(engine, capabilities); } void EngineRegistrar::SetCursorLocation( IBusEngine *engine, gint x, gint y, gint w, gint h) { g_engine->SetCursorLocation(engine, x, y, w, h); } void EngineRegistrar::SetContentType( IBusEngine *engine, guint purpose, guint hints) { g_engine->SetContentType(engine, purpose, hints); } } // namespace ibus } // namespace mozc