/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */ /* vim:set et sts=4: */ /* ibus - The Input Bus * Copyright (c) 2009-2014 Google Inc. All rights reserved. * Copyright (c) 2017-2018 Takao Fujiwara * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA */ #if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION) #error "Only can be included directly" #endif #ifndef __IBUS_PANEL_SERVICE_H_ #define __IBUS_PANEL_SERVICE_H_ /** * SECTION: ibuspanelservice * @short_description: Panel service back-end. * @stability: Stable * * An IBusPanelService is a base class for UI services. * Developers can "extend" this class for panel UI development. */ #include "ibuslookuptable.h" #include "ibusservice.h" #include "ibusproplist.h" #include "ibusxevent.h" /* * Type macros. */ /* define GOBJECT macros */ #define IBUS_TYPE_PANEL_SERVICE \ (ibus_panel_service_get_type ()) #define IBUS_PANEL_SERVICE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_PANEL_SERVICE, IBusPanelService)) #define IBUS_PANEL_SERVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_PANEL_SERVICE, IBusPanelServiceClass)) #define IBUS_IS_PANEL_SERVICE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_PANEL_SERVICE)) #define IBUS_IS_PANEL_SERVICE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_PANEL_SERVICE)) #define IBUS_PANEL_SERVICE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PANEL_SERVICE, IBusPanelServiceClass)) G_BEGIN_DECLS typedef struct _IBusPanelService IBusPanelService; typedef struct _IBusPanelServiceClass IBusPanelServiceClass; /** * IBusPanelService: * * An opaque data type representing an IBusPanelService. */ struct _IBusPanelService { IBusService parent; /* instance members */ }; struct _IBusPanelServiceClass { IBusServiceClass parent; /* class members */ void (* focus_in) (IBusPanelService *panel, const gchar *input_context_path); void (* focus_out) (IBusPanelService *panel, const gchar *input_context_path); void (* register_properties) (IBusPanelService *panel, IBusPropList *prop_list); void (* set_cursor_location) (IBusPanelService *panel, gint x, gint y, gint w, gint h); void (* update_auxiliary_text) (IBusPanelService *panel, IBusText *text, gboolean visible); void (* update_lookup_table) (IBusPanelService *panel, IBusLookupTable *lookup_table, gboolean visible); void (* update_preedit_text) (IBusPanelService *panel, IBusText *text, guint cursor_pos, gboolean visible); void (* update_property) (IBusPanelService *panel, IBusProperty *prop); void (* cursor_down_lookup_table) (IBusPanelService *panel); void (* cursor_up_lookup_table) (IBusPanelService *panel); void (* hide_auxiliary_text) (IBusPanelService *panel); void (* hide_language_bar) (IBusPanelService *panel); void (* hide_lookup_table) (IBusPanelService *panel); void (* hide_preedit_text) (IBusPanelService *panel); void (* page_down_lookup_table) (IBusPanelService *panel); void (* page_up_lookup_table) (IBusPanelService *panel); void (* reset) (IBusPanelService *panel); void (* show_auxiliary_text) (IBusPanelService *panel); void (* show_language_bar) (IBusPanelService *panel); void (* show_lookup_table) (IBusPanelService *panel); void (* show_preedit_text) (IBusPanelService *panel); void (* start_setup) (IBusPanelService *panel); void (* state_changed) (IBusPanelService *panel); void (* destroy_context) (IBusPanelService *panel, const gchar *input_context_path); void (* set_content_type) (IBusPanelService *panel, guint purpose, guint hints); void (* set_cursor_location_relative) (IBusPanelService *panel, gint x, gint y, gint w, gint h); void (* panel_extension_received) (IBusPanelService *panel, IBusExtensionEvent *event); gboolean (* process_key_event) (IBusPanelService *panel, guint keyval, guint keycode, guint state); void (* commit_text_received) (IBusPanelService *panel, IBusText *text); void (* candidate_clicked_lookup_table) (IBusPanelService *panel, guint index, guint button, guint state); /*< private >*/ /* padding */ gpointer pdummy[2]; // We can add 8 pointers without breaking the ABI. }; GType ibus_panel_service_get_type (void); /** * ibus_panel_service_new: * @connection: An GDBusConnection. * * Creates a new #IBusPanelService from an #GDBusConnection. * * Returns: A newly allocated #IBusPanelService. */ IBusPanelService *ibus_panel_service_new (GDBusConnection *connection); /** * ibus_panel_service_candidate_clicked: * @panel: An IBusPanelService * @index: Index in the Lookup table * @button: GdkEventButton::button (1: left button, etc.) * @state: GdkEventButton::state (key modifier flags) * * Notify that a candidate is clicked * by sending a "CandidateClicked" to IBus service. */ void ibus_panel_service_candidate_clicked (IBusPanelService *panel, guint index, guint button, guint state); /** * ibus_panel_service_cursor_down: * @panel: An IBusPanelService * * Notify that the cursor is down * by sending a "CursorDown" to IBus service. */ void ibus_panel_service_cursor_down (IBusPanelService *panel); /** * ibus_panel_service_cursor_up: * @panel: An IBusPanelService * * Notify that the cursor is up * by sending a "CursorUp" to IBus service. */ void ibus_panel_service_cursor_up (IBusPanelService *panel); /** * ibus_panel_service_page_down: * @panel: An IBusPanelService * * Notify that the page is down * by sending a "PageDown" to IBus service. */ void ibus_panel_service_page_down (IBusPanelService *panel); /** * ibus_panel_service_page_up: * @panel: An IBusPanelService * * Notify that the page is up * by sending a "PageUp" to IBus service. */ void ibus_panel_service_page_up (IBusPanelService *panel); /** * ibus_panel_service_property_activate: * @panel: An IBusPanelService * @prop_name: A property name * @prop_state: State of the property * * Notify that a property is active * by sending a "PropertyActivate" message to IBus service. */ void ibus_panel_service_property_activate (IBusPanelService *panel, const gchar *prop_name, guint prop_state); /** * ibus_panel_service_property_show: * @panel: An IBusPanelService * @prop_name: A property name * * Notify that a property is shown * by sending a "ValueChanged" message to IBus service. */ void ibus_panel_service_property_show (IBusPanelService *panel, const gchar *prop_name); /** * ibus_panel_service_property_hide: * @panel: An IBusPanelService * @prop_name: A property name * * Notify that a property is hidden * by sending a "ValueChanged" message to IBus service. */ void ibus_panel_service_property_hide (IBusPanelService *panel, const gchar *prop_name); /** * ibus_panel_service_commit_text: * @panel: An #IBusPanelService * @text: An #IBusText * * Notify that a text is sent * by sending a "CommitText" message to IBus service. */ void ibus_panel_service_commit_text (IBusPanelService *panel, IBusText *text); /** * ibus_panel_service_panel_extension: * @panel: An #IBusPanelService * @event: (transfer full): A #PanelExtensionEvent which is sent to a * panel extension. * * Enable or disable a panel extension with #IBusExtensionEvent. * Notify that a data is sent * by sending a "PanelExtension" message to IBus panel extension service. */ void ibus_panel_service_panel_extension (IBusPanelService *panel, IBusExtensionEvent *event); /** * ibus_panel_service_panel_extension_register_keys: * @panel: An #IBusPanelService * @first_property_name: the first name of the shortcut keys. This is %NULL " terminated. * * Register shortcut keys to enable panel extensions with #IBusExtensionEvent. * Notify that a data is sent * by sending a "PanelExtensionRegisterKeys" message to IBus panel extension * service. Seems Vala does not support uint[][3] and use * IBusProcessKeyEventData[]. E.g. * IBusProcessKeyEventData[] keys = {{ * IBUS_KEY_e, 0, IBUS_SHIFT_MASK | IBUS_SUPER_MASK }}; * ibus_panel_service_panel_extension_register_keys(panel, "emoji", keys, NULL); */ void ibus_panel_service_panel_extension_register_keys (IBusPanelService *panel, const gchar *first_property_name, ...); /** * ibus_panel_service_update_preedit_text_received: * @panel: An #IBusPanelService * @text: Update content. * @cursor_pos: Current position of cursor * @visible: Whether the pre-edit buffer is visible. * * Notify that the preedit is updated by the panel extension * * (Note: The table object will be released, if it is floating. * If caller want to keep the object, caller should make the object * sink by g_object_ref_sink.) */ void ibus_panel_service_update_preedit_text_received (IBusPanelService *panel, IBusText *text, guint cursor_pos, gboolean visible); /** * ibus_panel_service_show_preedit_text_received: * @panel: An IBusPanelService * * Notify that the preedit is shown by the panel extension */ void ibus_panel_service_show_preedit_text_received (IBusPanelService *panel); /** * ibus_panel_service_hide_preedit_text_received: * @panel: An IBusPanelService * * Notify that the preedit is hidden by the panel extension */ void ibus_panel_service_hide_preedit_text_received (IBusPanelService *panel); /** * ibus_panel_service_update_auxiliary_text_received: * @panel: An #IBusPanelService * @text: An #IBusText * @visible: Whether the auxilirary text is visible. * * Notify that the auxilirary is updated by the panel extension. * * (Note: The table object will be released, if it is floating. * If caller want to keep the object, caller should make the object * sink by g_object_ref_sink.) */ void ibus_panel_service_update_auxiliary_text_received (IBusPanelService *panel, IBusText *text, gboolean visible); /** * ibus_panel_service_update_lookup_table_received: * @panel: An #IBusPanelService * @table: An #IBusLookupTable * @visible: Whether the lookup table is visible. * * Notify that the lookup table is updated by the panel extension. * * (Note: The table object will be released, if it is floating. * If caller want to keep the object, caller should make the object * sink by g_object_ref_sink.) */ void ibus_panel_service_update_lookup_table_received (IBusPanelService *panel, IBusLookupTable *table, gboolean visible); G_END_DECLS #endif